2021-07-22

页面需求点击不同的类型 显示不同的组件,正确的选项 在from中的option,istrue选项为1
1:点击单选 是单选按钮 +input框
在这里插入图片描述2:点击多选切换成多选框
在这里插入图片描述属性介绍:

  • radioList: ‘’, v-mode绑定的单选框
  • checkboxList: [], v-mode绑定的多选框
  • option.isRight=1时为选中状态
  • option.isRight=0时时未选中状态
  <el-form-item label="选项 :" v-show="form.questionType !== '3'">
          <div class="option_item">
            <!-- 单选状态 -->
            <template v-if="form.questionType === '1'">
              <!-- 单选框  v-model="radioList" -->
              <el-radio-group v-model="radioList">
                <div v-for="(item, index) in form.options" :key="index">
                  <el-radio :label="item.code" style="margin: 0px 3px">
                    {{ item.code }}
                  </el-radio>
                  <!-- 输入框 -->
                  <el-input
                    class="elinput"
                    v-model="item.title"
                    style="width: 240px"
                  ></el-input>
                  <!-- 上传图片 -->
                  <el-upload
                    class="avatar-uploader"
                    action="https://jsonplaceholder.typicode.com/posts/"
                    :show-file-list="false"
                    :on-success="handleAvatarSuccess"
                    :before-upload="beforeAvatarUpload"
                  >
                    <i class="el-icon-circle-close"></i>
                    <span class="avatar-uploader-icon">上传图片</span>
                  </el-upload>
                </div>
              </el-radio-group>
            </template>

            <!-- 多选状态 -->
            <template v-else>
              <el-checkbox-group v-model="checkboxList">
                <div v-for="(item, index) in form.options" :key="index">
                  <el-checkbox :label="item.code" style="margin: 0px 3px"  :checked="item.isRight == 1"
                    >{{ item.code }}
                  </el-checkbox>
                  <!-- 输入框 -->
                  <el-input
                    class="elinput"
                    v-model="item.title"
                    style="width: 240px"
                  ></el-input>
                  <!-- 上传图片 -->
                  <el-upload
                    class="avatar-uploader"
                    action="https://jsonplaceholder.typicode.com/posts/"
                    :show-file-list="false"
                    :on-success="handleAvatarSuccess"
                    :before-upload="beforeAvatarUpload"
                  >
                    <i class="el-icon-circle-close"></i>
                    <span class="avatar-uploader-icon">上传图片</span>
                  </el-upload>
                </div>
              </el-checkbox-group>
            </template>
          </div>

          <el-button type="danger" @click="Addbtn" :disabled="form.questionType ==='1'?true:false">增加选项与答案</el-button>
        </el-form-item>

script部分

export default{
 data () {
    return {
    radioList: '', 单选框
    checkboxList: [], 多选框
 		form:{
 		选项数组
 		options: [{ code: 'A', title: '', img: '', isRight: 0},
    { code: 'B', title: '', img: '', isRight: 0 },
    { code: 'C', title: '', img: '', isRight: 0 },
    { code: 'D', title: '', img: '', isRight: 0}],

}
methods:{
点击提交按钮
    onSubmit () {
      //   试题标签转换
      if (this.form.tags) {
        this.form.tags = '无数据'
        // console.log('无数据', this.form.tags)
      } else {
        this.form.tags = this.form.tags.join(',')
        // console.log()
      }
      //   console.log(this.form.tags)
      // 单选和双选
      if (this.form.questionType === '1') {
        this.form.options = this.form.options.map((item) => {
          if (this.radioList === item.code) {
            return { ...item, isRight: 1 }
          } else {
            return { ...item, isRight: 0 }
          }
        })
        // console.log(listres)
      } else {
        this.form.options = this.form.options.map((item) => {
          if (this.checkboxList.includes(item.code)) {
            return {
              ...item,
              isRight: 1
            }
          } else {
            return {
              ...item,
              isRight: 0
            }
          }
        })
      }}

}}}

利用监听属性,监听选择的值,赋值给form.isRight

  export default{

  watch: {
    'form.provinces': {
      handler: function (v) {
        this.citysList = citys(v)
      }
    }
    监听单选
    radioList: {
      handler: function (v) {
        this.form.options.filter(item => {
          if (item.code === v) {
            item.isRight = 1
          }
        })
      }
    },
    // 监听多选
    checkboxList: {
      deep: true,
      handler: function (v) {
        console.log('Object.values', Object.keys(v))
        this.form.options.map(item => {
          if (v.includes(item.code)) {
            item.isRight = 1
          }
        })
      }
    }
    }

利用计算属性,监听选择的值,赋值给form.isRight
选择框的v-mode设置radioListoneone属性

            <template v-if="form.questionType === '1'">
              <!-- 单选框  v-model="radioList" -->
              <el-radio-group v-model="radioListoneone">
                <div v-for="(item, index) in form.options" :key="index">
                  <el-radio :label="item.code" style="margin: 0px 3px">
                    {{ item.code }}
                  </el-radio>
                  <!-- 输入框 -->
                  <el-input
                    class="elinput"
                    v-model="item.title"
                    style="width: 240px"
                  ></el-input>
                </div>
              </el-radio-group>
            </template>
  export default{
computed: {
监听v-mode的值
    radioListoneone: {
      get: function () {
        console.log(this.codeone)
        return this.codeone
      },
      set: function (n) {
        console.log('选择的答案', n)
        this.form.options.filter(item => {
          item.isRight = 0
          if (item.code === n) {
            console.log(item)
            // item.code = n
            item.isRight = 1
            console.log(item)
          }
        })
        this.codeone = n
      }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值