mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-18 23:36:46 +08:00
--fix 评估重写
This commit is contained in:
@@ -5,60 +5,24 @@
|
||||
<span class="title">创建评估</span>
|
||||
<router-link to="/researchmanage" class="goback">
|
||||
<span class="return"></span>
|
||||
<router-link class="returntext" to="/researchmanage">
|
||||
返回
|
||||
</router-link>
|
||||
<router-link class="returntext" to="/researchmanage">返回</router-link>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="addtype">
|
||||
<div class="addtypen">创建评估类型</div>
|
||||
<div class="types" @click="handleTypes(1)">单选题</div>
|
||||
<div class="types" @click="handleTypes(2)">多选题</div>
|
||||
<div class="types" @click="handleTypes(3)">问答题</div>
|
||||
<div class="types" @click="handleTypes(4)">评分题</div>
|
||||
<div class="types" @click="addSingleItem">单选题</div>
|
||||
<div class="types" @click="addMultipleItem">多选题</div>
|
||||
<div class="types" @click="addEssayQuestionItem">问答题</div>
|
||||
<div class="types" @click="addScoringQuestionItem">评分题</div>
|
||||
</div>
|
||||
<div
|
||||
v-for="(item, index) in allFormsData"
|
||||
:key="index + new Date().getTime()"
|
||||
>
|
||||
<ResearchAddSingle
|
||||
v-if="item.type === 1 && item.deleted!==true"
|
||||
:item="item"
|
||||
:assessmentId="assessmentId"
|
||||
@del="handleDel"
|
||||
/>
|
||||
<ResearchAddMulti
|
||||
v-if="item.type === 2 && item.deleted!==true"
|
||||
:item="item"
|
||||
:assessmentId="assessmentId"
|
||||
@del="handleDel"
|
||||
/>
|
||||
<ResearchAddAsk
|
||||
v-if="item.type === 3 && item.deleted!==true"
|
||||
:item="item"
|
||||
:assessmentId="assessmentId"
|
||||
@del="handleDel"
|
||||
/>
|
||||
<ResearchAddPin
|
||||
v-if="item.type === 4 && item.deleted!==true"
|
||||
:item="item"
|
||||
:assessmentId="assessmentId"
|
||||
@del="handleDel"
|
||||
/>
|
||||
<div v-if="orderList.length">
|
||||
<div v-for="(item, index) in orderList" :key="index + new Date().getTime()">
|
||||
<ResearchAddSingle v-if="item.questionType == 1" :index="item.orderNumber-1" :item="item" :list="data.singleStemVoList"/>
|
||||
<ResearchAddMulti v-else-if="item.questionType == 2" :index="item.orderNumber-1" :item="item" :list="data.multipleStemVoList"/>
|
||||
<ResearchAddAsk v-else-if="item.questionType == 3" :index="item.orderNumber-1" :item="item" :list="data.essayQuestionVoList"/>
|
||||
<ResearchAddPin v-else-if="item.questionType == 4" :index="item.orderNumber-1" :item="item" :list="data.scoringQuestionVoList"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="opinion name2">
|
||||
<div class="namebox">
|
||||
<div class="inname" style="margin-top: 13px">您的其他意见</div>
|
||||
</div>
|
||||
<div class="in">
|
||||
<a-textarea
|
||||
v-model:value="valueMore"
|
||||
style="height: 110px"
|
||||
show-count
|
||||
:maxlength="200"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="footer">
|
||||
<div class="btn">
|
||||
<a-button
|
||||
@@ -70,9 +34,9 @@
|
||||
background-color: #4ea6ff;
|
||||
"
|
||||
:loading="loading"
|
||||
:disabled="!canSubmit"
|
||||
@click="handleSave"
|
||||
>
|
||||
保存
|
||||
>保存
|
||||
</a-button>
|
||||
<a-button
|
||||
type="primary"
|
||||
@@ -86,639 +50,172 @@
|
||||
background-color: #4ea6ff;
|
||||
"
|
||||
@click="handleAllCancel"
|
||||
>
|
||||
取消
|
||||
>取消
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {reactive, toRefs} from "vue";
|
||||
<script setup>
|
||||
import {computed, ref, watch, watchEffect} from "vue";
|
||||
import ResearchAddSingle from "./components/ResearchAddSingle.vue";
|
||||
import ResearchAddMulti from "./components/ResearchAddMulti.vue";
|
||||
import ResearchAddAsk from "./components/ResearchAddAsk.vue";
|
||||
import ResearchAddPin from "./components/ResearchAddPin.vue";
|
||||
import {
|
||||
sortBy,
|
||||
traverseArr,
|
||||
filterCommon,
|
||||
deepCloneFilterString,
|
||||
} from "@/utils/utils";
|
||||
import {
|
||||
queryResearchDetailById,
|
||||
editResearchMessage,
|
||||
createResearch,
|
||||
// deleteChoiceQuestion,
|
||||
// deleteQuestionScAndQa,
|
||||
} from "@/api/indexResearch";
|
||||
import {editResearchMessage,} from "@/api/indexResearch";
|
||||
import {useRoute, useRouter} from "vue-router";
|
||||
import {message} from "ant-design-vue";
|
||||
import {ASSESSMENT_DETAIL} from "@/api/apis";
|
||||
import {request} from "@/api/request";
|
||||
|
||||
export default {
|
||||
name: "ResearchAdd",
|
||||
components: {
|
||||
ResearchAddSingle,
|
||||
ResearchAddMulti,
|
||||
ResearchAddAsk,
|
||||
ResearchAddPin,
|
||||
},
|
||||
setup() {
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const state = reactive({
|
||||
assessmentId: "", //编辑时候传
|
||||
assessmentName: "",
|
||||
assessmentNameNew: route.query.name,
|
||||
|
||||
allFormsData: [],
|
||||
valueMore: "",
|
||||
loading: false,
|
||||
});
|
||||
|
||||
// 详情
|
||||
const getInfoDate = async () => {
|
||||
let id = router.currentRoute.value.params.id;
|
||||
if (id) {
|
||||
state.assessmentId = id;
|
||||
let res = await queryResearchDetailById({
|
||||
assessmentId: state.assessmentId,
|
||||
}).then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
return res.data.data;
|
||||
}
|
||||
});
|
||||
state.assessmentName = res.assessmentName;
|
||||
state.valueMore = res.assessmentMark;
|
||||
let renderArr = [
|
||||
...res.singleStemVoList,
|
||||
...res.multipleStemVoList,
|
||||
...res.essayQuestionVoList,
|
||||
...res.scoringQuestionVoList,
|
||||
];
|
||||
sortBy(renderArr, "orderNumber"); //序号
|
||||
console.log(renderArr)
|
||||
state.allFormsData = parseData(renderArr, "questionType"); //类型
|
||||
}
|
||||
};
|
||||
getInfoDate();
|
||||
|
||||
// 转换成前端格式
|
||||
const parseData = (arr, typeKey) => {
|
||||
const resultArr = [];
|
||||
arr.forEach((item) => {
|
||||
let key = Number(item[typeKey]);
|
||||
let obj = {};
|
||||
if (key === 1) {
|
||||
let restList = traverseArr(item.assessmentSingleChoiceVoList, {
|
||||
ids:"id",
|
||||
deleted:"deleted",
|
||||
inputVal: "singleOptionName",
|
||||
imgVal: "singleOptionPictureAddress",
|
||||
optionId: "singleOptionId",
|
||||
}).map((itm, idx) => {
|
||||
itm.id = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
|
||||
obj = {
|
||||
type: key,
|
||||
valueSingle: item.singleStemName,
|
||||
singleList: restList,
|
||||
orderNumber: item.orderNumber,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (key === 2) {
|
||||
let restList = traverseArr(item.multipleChoiceVoList, {
|
||||
ids:"id",
|
||||
deleted:"deleted",
|
||||
inputVal: "multipleOptionName",
|
||||
imgVal: "multipleOptionPictureAddress",
|
||||
optionId: "multipleOptionId",
|
||||
}).map((itm, idx) => {
|
||||
itm.id = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
|
||||
obj = {
|
||||
type: key,
|
||||
valueMutil: item.multipleStemName,
|
||||
mutilList: restList,
|
||||
orderNumber: item.orderNumber,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (key === 3) {
|
||||
obj = {
|
||||
ids: item.id,
|
||||
deleted:item.deleted,
|
||||
type: key,
|
||||
valueAsk: item.assessmentQaTitle,
|
||||
valueAskDesc: item.assessmentQaDescribe,
|
||||
optionId: item.assessmentQaId,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (key === 4) {
|
||||
obj = {
|
||||
ids: item.id,
|
||||
deleted:item.deleted,
|
||||
type: key,
|
||||
valuePin: item.assessmentScTitle,
|
||||
minScore: item.assessmentMinScore,
|
||||
maxScore: item.assessmentMaxScore,
|
||||
pinQuan: item.weightScale,
|
||||
optionId: item.assessmentScId,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
});
|
||||
resultArr.map((itm, idx) => {
|
||||
itm.id = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
console.log(resultArr)
|
||||
return resultArr;
|
||||
};
|
||||
// 转换成后端格式
|
||||
const restData = (arr, typeKey) => {
|
||||
const resultArr = [];
|
||||
arr.forEach((item) => {
|
||||
let obj = {};
|
||||
if (item[typeKey] === 1) {
|
||||
let restList = traverseArr(item.singleList, {
|
||||
id:"ids",
|
||||
deleted:"deleted",
|
||||
singleOptionName: "inputVal",
|
||||
singleOptionPictureAddress: "imgVal",
|
||||
singleOptionId: "optionId",
|
||||
}).map((itm, idx) => {
|
||||
itm.optionOrderNum = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
restList.forEach((item) => {
|
||||
item.singleOptionId = item.singleOptionId
|
||||
? item.singleOptionId
|
||||
: "";
|
||||
});
|
||||
|
||||
obj = {
|
||||
questionType: item[typeKey],
|
||||
singleStemName: item.valueSingle,
|
||||
singleList: restList,
|
||||
orderNumber: item.orderNumber,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (item[typeKey] === 2) {
|
||||
let restList = traverseArr(item.mutilList, {
|
||||
id:"ids",
|
||||
deleted:"deleted",
|
||||
multipleOptionName: "inputVal",
|
||||
multipleOptionPictureAddress: "imgVal",
|
||||
multipleOptionId: "optionId",
|
||||
}).map((itm, idx) => {
|
||||
itm.optionOrderNum = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
restList.forEach((item) => {
|
||||
item.multipleOptionId = item.multipleOptionId
|
||||
? item.multipleOptionId
|
||||
: "";
|
||||
});
|
||||
|
||||
obj = {
|
||||
questionType: item[typeKey],
|
||||
multipleStemName: item.valueMutil,
|
||||
mutilList: restList,
|
||||
orderNumber: item.orderNumber,
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (item[typeKey] === 3) {
|
||||
obj = {
|
||||
id:item.ids,
|
||||
deleted:item.deleted,
|
||||
questionType: item[typeKey],
|
||||
assessmentQaTitle: item.valueAsk,
|
||||
assessmentQaDescribe: item.valueAskDesc,
|
||||
assessmentQaId: item.optionId ? item.optionId : "",
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
if (item[typeKey] === 4) {
|
||||
obj = {
|
||||
id:item.ids,
|
||||
deleted:item.deleted,
|
||||
questionType: item[typeKey],
|
||||
assessmentScTitle: item.valuePin,
|
||||
assessmentMinScore: item.minScore,
|
||||
assessmentMaxScore: item.maxScore,
|
||||
weightScale: item.pinQuan,
|
||||
assessmentScId: item.optionId ? item.optionId : "",
|
||||
};
|
||||
resultArr.push(obj);
|
||||
}
|
||||
});
|
||||
resultArr.map((itm, idx) => {
|
||||
itm.orderNumber = idx + 1;
|
||||
return itm;
|
||||
});
|
||||
console.log(222);
|
||||
console.log(resultArr);
|
||||
return resultArr;
|
||||
};
|
||||
// 解散传值
|
||||
const parseItem = (arr) => {
|
||||
const filterComObj = filterCommon(arr, "questionType");
|
||||
console.log('filterComObj')
|
||||
console.log(filterComObj)
|
||||
let resultObj = {};
|
||||
for (let key in filterComObj) {
|
||||
if (key === "1") {
|
||||
let arrSingle = filterComObj[key];
|
||||
let arr = [];
|
||||
arrSingle.forEach((item) => {
|
||||
if (item.singleList.length) {
|
||||
item.singleList.forEach((itm) => {
|
||||
arr.push({
|
||||
...itm,
|
||||
singleStemName: item.singleStemName,
|
||||
orderNumber: item.orderNumber,
|
||||
questionType: item.questionType,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
resultObj.assessmentSingleChoiceDtoList = arr;
|
||||
}
|
||||
if (key === "2") {
|
||||
let arrMulti = filterComObj[key];
|
||||
let arr = [];
|
||||
arrMulti.forEach((item) => {
|
||||
if (item.mutilList.length) {
|
||||
item.mutilList.forEach((itm) => {
|
||||
arr.push({
|
||||
...itm,
|
||||
multipleStemName: item.multipleStemName,
|
||||
orderNumber: item.orderNumber,
|
||||
questionType: item.questionType,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
resultObj.assessmentMultipleChoiceDtoList = arr;
|
||||
}
|
||||
if (key === "3") {
|
||||
resultObj.assessmentEssayQuestionDtoList = filterComObj[key];
|
||||
}
|
||||
if (key === "4") {
|
||||
resultObj.assessmentScoringQuestionDtoList = filterComObj[key];
|
||||
}
|
||||
}
|
||||
return resultObj;
|
||||
};
|
||||
const creatFromData = (type) => {
|
||||
let obj = {};
|
||||
switch (type) {
|
||||
case 1:
|
||||
obj = {
|
||||
type,
|
||||
id: state.allFormsData.length + 1,
|
||||
valueSingle: "",
|
||||
deleted: false,
|
||||
singleList: [
|
||||
{
|
||||
id: 1,
|
||||
inputVal: "",
|
||||
imgVal: "",
|
||||
deleted: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
break;
|
||||
case 2:
|
||||
obj = {
|
||||
type,
|
||||
id: state.allFormsData.length + 1,
|
||||
valueMutil: "",
|
||||
deleted: false,
|
||||
mutilList: [
|
||||
{
|
||||
id: 1,
|
||||
inputVal: "",
|
||||
imgVal: "",
|
||||
deleted: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
break;
|
||||
case 3:
|
||||
obj = {
|
||||
type,
|
||||
id: state.allFormsData.length + 1,
|
||||
valueAsk: "",
|
||||
valueAskDesc: "",
|
||||
deleted: false,
|
||||
};
|
||||
break;
|
||||
case 4:
|
||||
obj = {
|
||||
type,
|
||||
id: state.allFormsData.length + 1,
|
||||
valuePin: "",
|
||||
minScore: 1,
|
||||
maxScore: 10,
|
||||
pinQuan: 100,
|
||||
deleted: false,
|
||||
};
|
||||
break;
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
const handleTypes = (type) => {
|
||||
state.allFormsData.push(creatFromData(type));
|
||||
};
|
||||
|
||||
const handleDel = ({ id, type, curItem }) => {
|
||||
|
||||
// 接口删除
|
||||
// if (state.assessmentId && (curItem.orderNumber || curItem.optionId)) {
|
||||
// if (type === 1) {
|
||||
// deleteChoiceQuestion({
|
||||
// assessmentId: state.assessmentId,
|
||||
// questionType: "1",
|
||||
// orderNumber: curItem.orderNumber,
|
||||
// }).then((res) => {
|
||||
// if (res.data.code === 200) {
|
||||
// virtualDel(id);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// if (type === 2) {
|
||||
// deleteChoiceQuestion({
|
||||
// assessmentId: state.assessmentId,
|
||||
// questionType: "2",
|
||||
// orderNumber: curItem.orderNumber,
|
||||
// }).then((res) => {
|
||||
// if (res.data.code === 200) {
|
||||
// virtualDel(id);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// if (type === 3) {
|
||||
// deleteQuestionScAndQa({
|
||||
// assessmentId: state.assessmentId,
|
||||
// questionType: "3",
|
||||
// optionId: curItem.optionId,
|
||||
// }).then((res) => {
|
||||
// if (res.data.code === 200) {
|
||||
// virtualDel(id);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// if (type === 4) {
|
||||
// deleteQuestionScAndQa({
|
||||
// assessmentId: state.assessmentId,
|
||||
// questionType: "4",
|
||||
// optionId: curItem.optionId,
|
||||
// }).then((res) => {
|
||||
// if (res.data.code === 200) {
|
||||
// virtualDel(id);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// } else {
|
||||
// virtualDel(id);
|
||||
// }
|
||||
if (state.assessmentId && (curItem.orderNumber || curItem.optionId)) {
|
||||
if (type === 1) {
|
||||
virtualDel(id);
|
||||
}
|
||||
if (type === 2) {
|
||||
virtualDel(id);
|
||||
}
|
||||
if (type === 3) {
|
||||
virtualDel(id);
|
||||
}
|
||||
if (type === 4) {
|
||||
virtualDel(id);
|
||||
}
|
||||
} else {
|
||||
virtualDel(id);
|
||||
}
|
||||
};
|
||||
const virtualDel = (id) => {
|
||||
// 前端删除
|
||||
// state.allFormsData.forEach((item, index) => {
|
||||
// if (item.id === id) {
|
||||
// state.allFormsData.splice(index, 1);
|
||||
// }
|
||||
// });
|
||||
// state.allFormsData.map((item, index) => {
|
||||
// item.id = index + 1;
|
||||
// return item;
|
||||
// });
|
||||
// 前端删除
|
||||
state.allFormsData.forEach((item, index) => {
|
||||
if (item.id === id) {
|
||||
state.allFormsData[index].deleted = true;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 处理id为空的字段
|
||||
const formatID = (data) => {
|
||||
let obj = {}
|
||||
for(let i in data){
|
||||
if(i=="assessmentSingleChoiceDtoList"){
|
||||
let arr1 = []
|
||||
for(let k=0;k<data[i].length;k++){
|
||||
if(data[i][k].id!==undefined){
|
||||
arr1.push(data[i][k])
|
||||
}else{
|
||||
let obj1 = {...data[i][k]}
|
||||
delete obj1.id
|
||||
delete obj1.deleted
|
||||
arr1.push(obj1)
|
||||
}
|
||||
}
|
||||
obj.assessmentSingleChoiceDtoList = arr1;
|
||||
}
|
||||
if(i=="assessmentMultipleChoiceDtoList"){
|
||||
let arr1 = []
|
||||
for(let k=0;k<data[i].length;k++){
|
||||
if(data[i][k].id!==undefined){
|
||||
arr1.push(data[i][k])
|
||||
}else{
|
||||
let obj1 = {...data[i][k]}
|
||||
delete obj1.id
|
||||
arr1.push(obj1)
|
||||
}
|
||||
}
|
||||
obj.assessmentMultipleChoiceDtoList = arr1;
|
||||
}
|
||||
if(i=="assessmentEssayQuestionDtoList"){
|
||||
let arr1 = []
|
||||
for(let k=0;k<data[i].length;k++){
|
||||
if(data[i][k].id!==undefined){
|
||||
arr1.push(data[i][k])
|
||||
}else{
|
||||
let obj1 = {...data[i][k]}
|
||||
delete obj1.id
|
||||
arr1.push(obj1)
|
||||
}
|
||||
}
|
||||
obj.assessmentEssayQuestionDtoList = arr1;
|
||||
}
|
||||
if(i=="assessmentScoringQuestionDtoList"){
|
||||
let arr1 = []
|
||||
for(let k=0;k<data[i].length;k++){
|
||||
if(data[i][k].id!==undefined){
|
||||
arr1.push(data[i][k])
|
||||
}else{
|
||||
let obj1 = {...data[i][k]}
|
||||
delete obj1.id
|
||||
delete obj1.deleted
|
||||
arr1.push(obj1)
|
||||
}
|
||||
}
|
||||
obj.assessmentScoringQuestionDtoList = arr1;
|
||||
}
|
||||
}
|
||||
console.log(obj)
|
||||
return obj
|
||||
}
|
||||
const handleSave = () => {
|
||||
let resultPost = {};
|
||||
let filterData = formatID(parseItem(restData(state.allFormsData, "type")));
|
||||
// 处理id为undefined得字段
|
||||
console.log('mmmmmmmmm------->',filterData)
|
||||
// 校验
|
||||
if (!checkVal(filterData)) {
|
||||
return false;
|
||||
}
|
||||
state.loading = true;
|
||||
|
||||
if (state.assessmentId) {
|
||||
resultPost = {
|
||||
id: state.assessmentId,
|
||||
assessmentName: state.assessmentName,
|
||||
assessmentMark: state.valueMore,
|
||||
...filterData,
|
||||
};
|
||||
resultPost = deepCloneFilterString(resultPost, [
|
||||
"assessmentMaxScore",
|
||||
"assessmentMinScore",
|
||||
]);
|
||||
|
||||
editResearchMessage(resultPost).then((res) => {
|
||||
state.loading = false;
|
||||
if (res.data.code === 200) {
|
||||
message.success("编辑成功");
|
||||
router.push({
|
||||
path: "/researchmanage",
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
resultPost = {
|
||||
assessmentName: state.assessmentNameNew,
|
||||
assessmentMark: state.valueMore,
|
||||
...filterData,
|
||||
};
|
||||
resultPost = deepCloneFilterString(resultPost, [
|
||||
"assessmentMaxScore",
|
||||
"assessmentMinScore",
|
||||
]);
|
||||
createResearch(resultPost).then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
message.success("创建成功");
|
||||
router.push({
|
||||
path: "/researchmanage",
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
const handleAllCancel = () => {
|
||||
state.allFormsData = [];
|
||||
router.push({
|
||||
path: "/researchmanage",
|
||||
});
|
||||
};
|
||||
const checkVal = (filterData) => {
|
||||
// 问答
|
||||
if (
|
||||
filterData.assessmentEssayQuestionDtoList &&
|
||||
filterData.assessmentEssayQuestionDtoList.length
|
||||
) {
|
||||
let arr = filterData.assessmentEssayQuestionDtoList;
|
||||
for (let item of arr) {
|
||||
if (!item.assessmentQaTitle) {
|
||||
message.error("问答题干为必填 请确认");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 多选
|
||||
console.log(filterData.assessmentMultipleChoiceDtoList);
|
||||
if(filterData.assessmentMultipleChoiceDtoList && !filterData.assessmentMultipleChoiceDtoList.some(t=>!t.deleted)){
|
||||
message.error("多选题最少添加一个选项!");
|
||||
return false;
|
||||
}
|
||||
if(filterData.assessmentMultipleChoiceDtoList?.some((item) => !item.deleted && (!item.multipleStemName || !item.multipleOptionName))){
|
||||
message.error("多选题干或选项为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
// 评分
|
||||
if (
|
||||
filterData.assessmentScoringQuestionDtoList &&
|
||||
filterData.assessmentScoringQuestionDtoList.length
|
||||
) {
|
||||
let CountNum = 0;
|
||||
let CountArr = filterData.assessmentScoringQuestionDtoList;
|
||||
for (let item of CountArr) {
|
||||
if (!item.assessmentScTitle) {
|
||||
message.error("评分题干为必填 请确认");
|
||||
return false;
|
||||
}
|
||||
CountNum += Number(item["weightScale"]);
|
||||
}
|
||||
// console.log("CountNum");
|
||||
// console.log(CountNum);
|
||||
// if(CountNum>100){
|
||||
// CountNum = 100;
|
||||
// }
|
||||
if (CountNum !== 100) {
|
||||
message.error("当前权重设置是百分制 请重新配置");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 单选
|
||||
if(filterData.assessmentSingleChoiceDtoList && !filterData.assessmentSingleChoiceDtoList.length){
|
||||
message.error("单选题最少添加一个选项!");
|
||||
return false;
|
||||
}
|
||||
if(filterData.assessmentSingleChoiceDtoList?.some((item) => !item.deleted && (!item.singleStemName || !item.singleOptionName))){
|
||||
message.error("单选题干或选项为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
handleTypes,
|
||||
handleSave,
|
||||
handleAllCancel,
|
||||
handleDel,
|
||||
};
|
||||
},
|
||||
const router = useRouter();
|
||||
const loading = ref(false);
|
||||
const { params: { id }, query: { name:assessmentName } } = useRoute();
|
||||
const data = ref({
|
||||
assessmentName,
|
||||
singleStemVoList: [],
|
||||
multipleStemVoList: [],
|
||||
essayQuestionVoList: [],
|
||||
scoringQuestionVoList: []
|
||||
});
|
||||
const canSubmit = computed(()=>data.value.singleStemVoList.length || data.value.multipleStemVoList.length || data.value.essayQuestionVoList.length || data.value.scoringQuestionVoList.length)
|
||||
const orderList = computed(()=>[...data.value.singleStemVoList.filter(t=>!t.deleted),...data.value.multipleStemVoList.filter(t=>!t.deleted),...data.value.essayQuestionVoList.filter(t=>!t.deleted),...data.value.scoringQuestionVoList.filter(t=>!t.deleted)].sort((a,b)=>a.orderNumber-b.orderNumber))
|
||||
watch(()=>orderList.value.length,()=> orderList.value.forEach((t,i)=>t.orderNumber = i + 1))
|
||||
watchEffect(() => id && request(ASSESSMENT_DETAIL(id), {}).then((res) => data.value = res.data));
|
||||
const handleSave = () => {
|
||||
console.log(data);
|
||||
loading.value = true;
|
||||
// 校验
|
||||
if (!checkVal()) {
|
||||
loading.value = false;
|
||||
return false;
|
||||
}
|
||||
editResearchMessage({
|
||||
id,
|
||||
assessmentName: data.value.assessmentName,
|
||||
assessmentSingleChoiceDtoList: data.value.singleStemVoList.flatMap(t=>t.assessmentSingleChoiceVoList.map(s=>({...s,deleted:(t.deleted || s.deleted),singleStemName:t.singleStemName}))),
|
||||
assessmentMultipleChoiceDtoList: data.value.multipleStemVoList.flatMap(t=>t.multipleChoiceVoList.map(s=>({...s,deleted:(t.deleted || s.deleted),multipleStemName:t.multipleStemName}))),
|
||||
assessmentEssayQuestionDtoList: data.value.essayQuestionVoList,
|
||||
assessmentScoringQuestionDtoList: data.value.scoringQuestionVoList
|
||||
}).then(() => {
|
||||
loading.value = false;
|
||||
message.success("编辑成功");
|
||||
router.push({ path: "/researchmanage"});
|
||||
});
|
||||
};
|
||||
const handleAllCancel = () => router.push({ path: "/researchmanage" });
|
||||
function addSingleItem() {
|
||||
data.value.singleStemVoList.push({
|
||||
questionType: 1,
|
||||
singleStemName: "",
|
||||
orderNumber: orderList.value?.length + 1,
|
||||
assessmentSingleChoiceVoList: [
|
||||
{
|
||||
questionType: 1,
|
||||
singleOptionName: "",
|
||||
singleOptionPictureAddress: "",
|
||||
singleStemName: "",
|
||||
deleted: false,
|
||||
orderNumber: (data.value?.singleStemVoList?.length || 0) + 1,
|
||||
optionOrderNum: 1
|
||||
},
|
||||
{
|
||||
questionType: 1,
|
||||
singleOptionName: "",
|
||||
singleOptionPictureAddress: "",
|
||||
singleStemName: "",
|
||||
deleted: false,
|
||||
orderNumber: (data.value?.singleStemVoList?.length || 0) + 1,
|
||||
optionOrderNum: 2
|
||||
}
|
||||
],
|
||||
deleted: false,
|
||||
});
|
||||
}
|
||||
|
||||
function addMultipleItem() {
|
||||
data.value.multipleStemVoList.push({
|
||||
questionType: 2,
|
||||
multipleStemName: "",
|
||||
orderNumber: orderList.value?.length + 1,
|
||||
multipleChoiceVoList: [
|
||||
{
|
||||
questionType: 2,
|
||||
multipleOptionName: "",
|
||||
multipleOptionPictureAddress: "",
|
||||
multipleStemName: "",
|
||||
deleted: false,
|
||||
orderNumber: (data.value?.multipleStemVoList?.length || 0) + 1,
|
||||
optionOrderNum: 1
|
||||
},
|
||||
{
|
||||
questionType: 2,
|
||||
multipleOptionName: "",
|
||||
multipleOptionPictureAddress: "",
|
||||
multipleStemName: "",
|
||||
deleted: false,
|
||||
orderNumber: (data.value?.multipleStemVoList?.length || 0) + 1,
|
||||
optionOrderNum: 2
|
||||
}
|
||||
],
|
||||
deleted: false,
|
||||
});
|
||||
}
|
||||
function addEssayQuestionItem() {
|
||||
data.value.essayQuestionVoList.push({
|
||||
questionType: 3,
|
||||
assessmentQaTitle: "",
|
||||
orderNumber: orderList.value?.length + 1,
|
||||
deleted: false,
|
||||
});
|
||||
}
|
||||
function addScoringQuestionItem() {
|
||||
data.value.scoringQuestionVoList.push({
|
||||
questionType: 4,
|
||||
assessmentScTitle: "",
|
||||
assessmentMaxScore: 10,
|
||||
assessmentMinScore: 1,
|
||||
weightScale: 100,
|
||||
orderNumber: orderList.value?.length + 1,
|
||||
deleted: false,
|
||||
});
|
||||
}
|
||||
const checkVal = () => {
|
||||
// 问答
|
||||
if (data.value.essayQuestionVoList.length && data.value.essayQuestionVoList?.some((item) => !item.deleted && (!item.assessmentQaTitle))) {
|
||||
message.error("问答题干为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
// 多选
|
||||
if (data.value.multipleStemVoList.length && data.value.multipleStemVoList.some(t => !t.deleted && t.multipleChoiceVoList.filter(s=>!s.deleted)?.length < 2)) {
|
||||
message.error("多选题最少添加两个选项!");
|
||||
return false;
|
||||
}
|
||||
if (data.value.multipleStemVoList.length && data.value.multipleStemVoList?.some((item) => !item.deleted && (!item.multipleStemName || item.multipleChoiceVoList?.some((t) => !t.deleted && !t.multipleOptionName)))) {
|
||||
message.error("多选题干或选项为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
// 评分
|
||||
if (data.value.scoringQuestionVoList.length && data.value.scoringQuestionVoList?.some((item) => !item.deleted && (!item.assessmentScTitle))) {
|
||||
message.error("评分题干为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
if (data.value.scoringQuestionVoList.length && data.value.scoringQuestionVoList.reduce((pre, cur) => pre + parseInt(cur.weightScale), 0) !== 100) {
|
||||
message.error("当前权重设置是百分制 请重新配置");
|
||||
return false;
|
||||
}
|
||||
// 单选
|
||||
if (data.value.singleStemVoList.length && data.value.singleStemVoList.some(t => !t.deleted && t.assessmentSingleChoiceVoList.filter(s=>!s.deleted)?.length < 2)) {
|
||||
message.error("单选题最少添加两个选项!");
|
||||
return false;
|
||||
}
|
||||
if (data.value.singleStemVoList.length && data.value.singleStemVoList?.some((item) => !item.deleted && (!item.singleStemName || item.assessmentSingleChoiceVoList.some(option=>!option.deleted && !option.singleOptionName)))) {
|
||||
message.error("单选题干或选项为必填 请确认!");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.researchadd {
|
||||
|
||||
Reference in New Issue
Block a user