feat: 完成 预览功能, 适配组件

- 完成预览的功能,可以提供回看已经提交的内容
- 适配单选、矩阵、文件上传、填空等组件
- question 的类型添加 answre 字段
This commit is contained in:
Huangzhe
2025-03-16 15:21:24 +08:00
parent dae1217dab
commit f4dd941341
22 changed files with 571 additions and 1027 deletions

View File

@@ -1,9 +1,6 @@
<template>
<van-field
v-model="element.stem"
:label="element.stem"
:required="element.config.is_required === 1"
label-align="top"
v-model="element.stem" :label="element.stem" :required="element.config.is_required === 1" label-align="top"
class="base-select"
>
<template #left-icon>
@@ -15,17 +12,10 @@
<template #input>
<template v-for="(item, optionIndex) in element.options" :key="item.id">
<van-radio-group v-if="element.question_type === 1" v-model="choiceValue">
<option-action
v-model:data="element.options[optionIndex]"
:active="active"
:question="element"
>
<option-action :data="isPreview ? item.options : item" :active="active" :question="element">
<template #item="{ element: it, index: itIndex }">
<van-radio
:key="itIndex"
:name="it.option_index"
:label="it.label"
:disabled="it.disabled"
:key="itIndex" :name="it.option_index" :label="it.label" :disabled="it.disabled"
icon-size="0.45rem"
>
<!-- 自定义文本 -->
@@ -42,17 +32,10 @@
</option-action>
</van-radio-group>
<van-checkbox-group v-if="element.question_type === 2" v-model="value" shape="square">
<option-action
v-model:data="element.options[optionIndex]"
:active="active"
:question="element"
>
<option-action v-model:data="element.options[optionIndex]" :active="active" :question="element">
<template #item="{ element: it, index: itIndex }">
<van-checkbox
:key="itIndex"
:name="it.option_index"
:label="it.label"
:disabled="it.disabled"
:key="itIndex" :name="it.option_index" :label="it.label" :disabled="it.disabled"
icon-size="0.45rem"
>
<template #default>
@@ -75,7 +58,12 @@
import OptionAction from '@/views/Design/components/ActionCompoents/OptionAction.vue';
import { defineAsyncComponent, toRefs, ref } from 'vue';
const choiceValue = ref('checked');
// 是否是预览
const isPreview = defineModel('isPreview', { default: false });
const choiceValue = defineModel('answer', { default: '1', type: String });
console.log(`choiceValue.value`, choiceValue.value);
const Contenteditable = defineAsyncComponent(() => import('@/components/contenteditable.vue'));
const props = defineProps({
element: {