|
@@ -99,11 +99,52 @@ export default defineComponent({
|
|
|
emit('update:value', result)
|
|
|
}
|
|
|
|
|
|
+ // 修改题目逻辑
|
|
|
+ const onSelectAnswer = (item: any) => {
|
|
|
+ // 判断是否已经选中了
|
|
|
+ if (item.checked) return
|
|
|
+ const result: any = []
|
|
|
+ state.options.forEach((option: any) => {
|
|
|
+ const originOption = answers.value.find(
|
|
|
+ (child: any) => child.examinationQuestionAnswerId === option.rightIndex
|
|
|
+ )
|
|
|
+ result.push({
|
|
|
+ answerId: option.index,
|
|
|
+ answer: option.leftValue,
|
|
|
+ answerExtra: originOption.questionAnswer
|
|
|
+ })
|
|
|
+ })
|
|
|
+ const rightOption = answers.value[state.options.length]
|
|
|
+ result.push({
|
|
|
+ answerId: item.examinationQuestionAnswerId,
|
|
|
+ answer: item.questionAnswer,
|
|
|
+ answerExtra: rightOption.questionExtra
|
|
|
+ })
|
|
|
+ emit('update:value', result)
|
|
|
+
|
|
|
+ initOptions()
|
|
|
+ }
|
|
|
+
|
|
|
+ const answers = computed(() => {
|
|
|
+ const list: any = props.data.answers || []
|
|
|
+ const value: any = props.value || []
|
|
|
+
|
|
|
+ list.forEach((item: any) => {
|
|
|
+ const tempIndex = value.findIndex(
|
|
|
+ (c: any) => c.answerId === item.examinationQuestionAnswerId
|
|
|
+ )
|
|
|
+ if (tempIndex !== -1) {
|
|
|
+ item.checked = tempIndex !== -1 ? true : false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return list
|
|
|
+ })
|
|
|
const initOptions = () => {
|
|
|
const answers = props.data.answers || []
|
|
|
const userAnswer = props.data.userAnswer || [] // 用户填写的答案
|
|
|
+ state.options = []
|
|
|
if (userAnswer.length > 0) {
|
|
|
- userAnswer.forEach((answer: any) => {
|
|
|
+ userAnswer.forEach((answer: any, index: any) => {
|
|
|
const rightOption = answers.find(
|
|
|
(child: any) => answer.answerId === child.examinationQuestionAnswerId
|
|
|
)
|
|
@@ -111,6 +152,7 @@ export default defineComponent({
|
|
|
(child: any) => answer.answerExtra === child.questionExtra
|
|
|
)
|
|
|
const tmp = {
|
|
|
+ itemIndex: index,
|
|
|
index: answer.answerId, // 左边的值
|
|
|
leftValue: answer.answer, // 左边的值
|
|
|
rightValue: answer.answerExtra, // 右边的值
|
|
@@ -118,29 +160,28 @@ export default defineComponent({
|
|
|
rightType: rightOption.questionExtraTypeCode || 'TXT', // 右边类型
|
|
|
rightIndex: rightValue ? rightValue.examinationQuestionAnswerId : ''
|
|
|
}
|
|
|
- console.log(tmp, '1212')
|
|
|
- state.options.push(tmp)
|
|
|
- })
|
|
|
- } else {
|
|
|
- const resultValue: any = []
|
|
|
- answers.forEach((answer: any) => {
|
|
|
- const tmp = {
|
|
|
- index: answer.examinationQuestionAnswerId, // 左边的值
|
|
|
- leftValue: answer.questionAnswer, // 左边的值
|
|
|
- rightValue: answer.questionExtra, // 右边的值
|
|
|
- leftType: answer.questionAnswerTypeCode || 'TXT', // 左边类型
|
|
|
- rightType: answer.questionExtraTypeCode || 'TXT' // 右边类型
|
|
|
- }
|
|
|
- resultValue.push({
|
|
|
- answerId: answer.examinationQuestionAnswerId,
|
|
|
- answer: answer.questionAnswer,
|
|
|
- answerExtra: answer.questionExtra
|
|
|
- })
|
|
|
state.options.push(tmp)
|
|
|
})
|
|
|
- // 进页面就默认初始化答案
|
|
|
- // emit('update:value', resultValue)
|
|
|
}
|
|
|
+ // else {
|
|
|
+ // const resultValue: any = []
|
|
|
+ // answers.forEach((answer: any) => {
|
|
|
+ // const tmp = {
|
|
|
+ // index: answer.examinationQuestionAnswerId, // 左边的值
|
|
|
+ // leftValue: answer.questionAnswer, // 左边的值
|
|
|
+ // rightValue: answer.questionExtra, // 右边的值
|
|
|
+ // leftType: answer.questionAnswerTypeCode || 'TXT', // 左边类型
|
|
|
+ // rightType: answer.questionExtraTypeCode || 'TXT' // 右边类型
|
|
|
+ // }
|
|
|
+ // resultValue.push({
|
|
|
+ // answerId: answer.examinationQuestionAnswerId,
|
|
|
+ // answer: answer.questionAnswer,
|
|
|
+ // answerExtra: answer.questionExtra
|
|
|
+ // })
|
|
|
+ // state.options.push(tmp)
|
|
|
+ // })
|
|
|
+ // // 进页面就默认初始化答案
|
|
|
+ // }
|
|
|
}
|
|
|
|
|
|
onMounted(() => {
|
|
@@ -164,19 +205,40 @@ export default defineComponent({
|
|
|
}}
|
|
|
/>
|
|
|
|
|
|
- <div class={[styles.unitAnswers, 'van-hairline--top']}>
|
|
|
- <div class={styles.sortReset}>
|
|
|
- <span class={styles.tips}>请长按拖拽答案进行排序</span>
|
|
|
+ <div class={[styles.unitAnswers]}>
|
|
|
+ {answers.value.map((item: any, index: number) => (
|
|
|
+ <div
|
|
|
+ class={[styles.unitAnswer, item.checked && styles.active]}
|
|
|
+ onClick={() => onSelectAnswer(item)}
|
|
|
+ >
|
|
|
+ <div class={styles.answerContent}>
|
|
|
+ <span class={styles.option}>{labelOptions[index + 1]}.</span>
|
|
|
+ {item.questionAnswerTypeCode === AnswerType.IMAGE && (
|
|
|
+ <div class={styles.value}>
|
|
|
+ <Image src={item.questionAnswer} />
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ {item.questionAnswerTypeCode === AnswerType.TXT && (
|
|
|
+ <div class={styles.value}>{item.questionAnswer}</div>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ {props.showRate && <div class={styles.answerChoice}>{item.selectRate}%人选择</div>}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ <div class={[styles.sortReset, 'van-hairline--top']}>
|
|
|
+ <span class={styles.tips}>我的回答(可拖拽)</span>
|
|
|
<Button
|
|
|
type="primary"
|
|
|
round
|
|
|
disabled={props.readOnly}
|
|
|
onClick={() => {
|
|
|
const ids: any = []
|
|
|
- const answers = props.data.answers || []
|
|
|
+ const answers = state.options || []
|
|
|
+ // console.log(answers, 'reset')
|
|
|
answers.forEach((item: any) => {
|
|
|
- ids.push(item.examinationQuestionAnswerId)
|
|
|
+ ids.push(item.itemIndex)
|
|
|
})
|
|
|
+ console.log(ids)
|
|
|
state.sortable.sort(
|
|
|
ids.sort((a: any, b: any) => a - b),
|
|
|
true
|
|
@@ -192,7 +254,7 @@ export default defineComponent({
|
|
|
{state.options.map((item: any) => (
|
|
|
<>
|
|
|
{item.leftType === AnswerType.TXT && (
|
|
|
- <Tag class={[styles.items]} data-id={item.index}>
|
|
|
+ <Tag class={[styles.items]} data-id={item.itemIndex}>
|
|
|
{item.leftValue}
|
|
|
</Tag>
|
|
|
)}
|