|
@@ -15,28 +15,32 @@
|
|
|
:key="move_index"
|
|
|
:class="['move-box-' + data.property.layout_type]"
|
|
|
>
|
|
|
- <span class="option-number" v-if="data.property.layout_type === 'horizontal'"
|
|
|
- >{{ computeOptionMethods[data.option_number_show_mode](move_index) }}
|
|
|
- </span>
|
|
|
+ <template v-if="data.property.layout_type === 'horizontal'">
|
|
|
+ <span class="option-number"
|
|
|
+ >{{ computeOptionMethods[data.option_number_show_mode](move_index) }}
|
|
|
+ </span></template
|
|
|
+ >
|
|
|
<draggable
|
|
|
- v-model="move_list[move_index]"
|
|
|
+ v-model="move_list[move_index].data_list"
|
|
|
animation="300"
|
|
|
:options="{
|
|
|
group: { name: 'itxst', pull: 'clone' },
|
|
|
}"
|
|
|
:sort="!disabled"
|
|
|
:class="['content-box', 'content-box-' + data.property.layout_type]"
|
|
|
+ :group="'move' + move_index"
|
|
|
@start="onStart($event)"
|
|
|
@end="onEnd($event)"
|
|
|
- :group="'move' + move_index"
|
|
|
>
|
|
|
<transition-group>
|
|
|
<div
|
|
|
- v-for="(itemNode, indexNode) in move_item"
|
|
|
+ v-for="(itemNode, indexNode) in move_item.data_list"
|
|
|
:key="indexNode"
|
|
|
:class="[
|
|
|
'drag-item',
|
|
|
- { error: itemNode.mark !== data.option_list[move_index][indexNode].mark && isJudgingRightWrong },
|
|
|
+ {
|
|
|
+ error: itemNode.mark !== data.option_list[move_index].data_list[indexNode].mark && isJudgingRightWrong,
|
|
|
+ },
|
|
|
click_index_list.indexOf(indexNode) > -1 && select_index === move_index ? 'drag-item-active' : '',
|
|
|
]"
|
|
|
@click="handleClickItem(move_index, indexNode)"
|
|
@@ -51,15 +55,18 @@
|
|
|
|
|
|
<template v-for="(move_item, move_index) in data.option_list">
|
|
|
<div
|
|
|
- v-if="JSON.stringify(answer.answer_list[move_index]) !== JSON.stringify(data.answer.answer_list[move_index])"
|
|
|
+ v-if="
|
|
|
+ JSON.stringify(answer.answer_list[move_index].value_list) !==
|
|
|
+ JSON.stringify(data.answer.answer_list[move_index].value_list)
|
|
|
+ "
|
|
|
:key="'answer' + move_index"
|
|
|
:class="['move-box-' + data.property.layout_type]"
|
|
|
>
|
|
|
- <span class="option-number" v-if="data.property.layout_type === 'horizontal'"
|
|
|
- >{{ computeOptionMethods[data.option_number_show_mode](move_index) }}
|
|
|
- </span>
|
|
|
+ <template v-if="data.property.layout_type === 'horizontal'">
|
|
|
+ <span class="option-number">{{ computeOptionMethods[data.option_number_show_mode](move_index) }} </span>
|
|
|
+ </template>
|
|
|
<draggable
|
|
|
- v-model="move_list[move_index]"
|
|
|
+ v-model="move_list[move_index].data_list"
|
|
|
animation="300"
|
|
|
:options="{
|
|
|
group: { name: 'itxst', pull: 'clone' },
|
|
@@ -68,7 +75,11 @@
|
|
|
:class="['content-box', 'content-box-' + data.property.layout_type]"
|
|
|
>
|
|
|
<transition-group>
|
|
|
- <div v-for="(itemNode, indexNode) in move_item" :key="'answer-item' + indexNode" :class="['drag-item']">
|
|
|
+ <div
|
|
|
+ v-for="(itemNode, indexNode) in move_item.data_list"
|
|
|
+ :key="'answer-item' + indexNode"
|
|
|
+ :class="['drag-item']"
|
|
|
+ >
|
|
|
<span class="drag-content rich-text" v-html="sanitizeHTML(itemNode.content)"></span>
|
|
|
</div>
|
|
|
</transition-group>
|
|
@@ -104,9 +115,13 @@ export default {
|
|
|
handler(val) {
|
|
|
if (!val || this.isJudgingRightWrong) return;
|
|
|
this.answer.answer_list = val.map((item) => {
|
|
|
- let answer_item = item.map((items) => {
|
|
|
+ let value_list = item.data_list.map((items) => {
|
|
|
return items.mark;
|
|
|
});
|
|
|
+ let answer_item = {
|
|
|
+ mark: item.mark,
|
|
|
+ value_list,
|
|
|
+ };
|
|
|
return answer_item;
|
|
|
});
|
|
|
},
|
|
@@ -117,11 +132,15 @@ export default {
|
|
|
if (!val) return;
|
|
|
|
|
|
this.move_list = this.answer.answer_list.map((item, index) => {
|
|
|
- let move_item = item.map((itemm) => {
|
|
|
+ let data_list = item.value_list.map((itemm) => {
|
|
|
return {
|
|
|
- ...this.data.option_list[index].find((items) => items.mark === itemm),
|
|
|
+ ...this.data.option_list[index].data_list.find((items) => items.mark === itemm),
|
|
|
};
|
|
|
});
|
|
|
+ let move_item = {
|
|
|
+ mark: item.mark,
|
|
|
+ data_list,
|
|
|
+ };
|
|
|
return move_item;
|
|
|
});
|
|
|
this.is_all_right = JSON.stringify(this.answer.answer_list) === JSON.stringify(this.data.answer.answer_list);
|
|
@@ -133,13 +152,17 @@ export default {
|
|
|
if (!val) return;
|
|
|
this.disrupted = false;
|
|
|
this.move_list = val.slice().map((item, index) => {
|
|
|
- let shuffe_item = this.shuffle(item.slice()).map(
|
|
|
+ let shuffe_item = this.shuffle(item.data_list.slice()).map(
|
|
|
(items) => ({
|
|
|
...items,
|
|
|
}),
|
|
|
index === val.length - 1,
|
|
|
);
|
|
|
- return shuffe_item;
|
|
|
+ let move_item = {
|
|
|
+ mark: item.mark,
|
|
|
+ data_list: shuffe_item,
|
|
|
+ };
|
|
|
+ return move_item;
|
|
|
});
|
|
|
},
|
|
|
deep: true,
|
|
@@ -171,6 +194,8 @@ export default {
|
|
|
// 拖拽结束事件
|
|
|
onEnd() {
|
|
|
this.drag = false;
|
|
|
+ this.click_index_list = [];
|
|
|
+ this.select_index = null;
|
|
|
this.$forceUpdate();
|
|
|
},
|
|
|
// 点击item
|
|
@@ -191,11 +216,21 @@ export default {
|
|
|
let indexs = this.select_index;
|
|
|
let index1 = this.click_index_list[0];
|
|
|
let index2 = this.click_index_list[1];
|
|
|
- [this.move_list[indexs][index1], this.move_list[indexs][index2]] = [
|
|
|
- this.move_list[indexs][index2],
|
|
|
- this.move_list[indexs][index1],
|
|
|
+ [this.move_list[indexs].data_list[index1], this.move_list[indexs].data_list[index2]] = [
|
|
|
+ this.move_list[indexs].data_list[index2],
|
|
|
+ this.move_list[indexs].data_list[index1],
|
|
|
];
|
|
|
this.click_index_list = [];
|
|
|
+ this.answer.answer_list = this.move_list.map((item) => {
|
|
|
+ let value_list = item.data_list.map((items) => {
|
|
|
+ return items.mark;
|
|
|
+ });
|
|
|
+ let answer_item = {
|
|
|
+ mark: item.mark,
|
|
|
+ value_list,
|
|
|
+ };
|
|
|
+ return answer_item;
|
|
|
+ });
|
|
|
},
|
|
|
},
|
|
|
};
|