zhouwx
2024-08-02 926fd4d1b89e7e5e6338d8f292edc4f728049856
src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue
@@ -3,7 +3,7 @@
    <el-dialog
        v-model="dialogVisible"
        :title="title"
        width="50%"
        width="750px"
        :before-close="handleClose"
        :close-on-press-escape="false"
        :close-on-click-modal="false"
@@ -22,13 +22,16 @@
        </el-form-item>
        <el-form-item label="归属题库:" prop="bankName">
          <el-select
              clearable
              v-model="state.form.bankName"
              filterable
              remote
              reserve-keyword
              placeholder="请输入题库名称"
              remote-show-suffix
              :remote-method="getBankList"
              style="width: 100%"
              v-loadMoreNew:[reselect]="handleScroll"
              :popper-class="reselect.name"
              @change="selectValue"
              class="item-width"
              placeholder="请选择题库"
          >
            <el-option
                v-for="item in state.bankList"
@@ -37,13 +40,29 @@
                :value="item.name"
            />
          </el-select>
<!--          <el-select-->
<!--              v-model="state.form.bankName"-->
<!--              style="width: 100%"-->
<!--              v-loadMoreNew:[reselect]="handleScroll"-->
<!--              :popper-class="reselect.name"-->
<!--              @change="selectValue"-->
<!--              class="item-width"-->
<!--              placeholder="请选择题库"-->
<!--          >-->
<!--            <el-option-->
<!--                v-for="item in state.bankList"-->
<!--                :key="item.id"-->
<!--                :label="item.name"-->
<!--                :value="item.name"-->
<!--            />-->
<!--          </el-select>-->
        </el-form-item>
        <el-form-item label="题目内容:" prop="title">
          <el-input v-model.trim="state.form.title" type="textarea" placeholder="请输入题目内容"></el-input>
        </el-form-item>
        <el-form-item label="选项:" prop="content">
        <el-form-item label="选项:" prop="content" v-if="state.form.questionType != 4">
          <div style="display: flex;flex-direction: column;width: 100%">
            <el-button :disabled="state.form.questionType ===3" type="primary"  @click="addOption" size="default" style="width: 65px;margin-bottom: 15px">添加</el-button>
            <el-button :disabled="state.form.questionType ===3 || state.form.questionType==null " type="primary"  @click="addOption" size="default" style="width: 65px;margin-bottom: 15px">添加</el-button>
            <div v-for="(item,index) in state.optionItem.items" :key="index" style="width: 100%">
              <div style="display: flex;align-items: center">
                <span>{{String.fromCharCode(index + 65)}}</span>
@@ -53,9 +72,7 @@
            </div>
          </div>
        </el-form-item>
        <el-form-item label="解析:" >
          <el-input type="textarea" v-model="state.optionItem.analyze" placeholder="请输入题目解析" style="width: 100%;margin-bottom: 10px"></el-input>
        </el-form-item>
        <el-form-item label="正确答案:" prop="answer">
          <el-radio-group v-model="state.form.answer" v-if="state.form.questionType === 1 || state.form.questionType === 3">
            <div v-for="(item,index) in state.optionItem.items">
@@ -67,6 +84,10 @@
              <el-checkbox :label="String.fromCharCode(index + 65)" style="margin-left: 20px;">{{String.fromCharCode(index + 65)}}</el-checkbox>
            </div>
          </el-checkbox-group>
          <el-input v-if="state.form.questionType === 4" v-model="state.form.answer" type="textarea" placeholder="请输入正确答案"></el-input>
        </el-form-item>
        <el-form-item label="解析:" >
          <el-input type="textarea" v-model="state.optionItem.analyze" placeholder="请输入题目解析" style="width: 100%;margin-bottom: 10px"></el-input>
        </el-form-item>
      </el-form>
      <template #footer>
@@ -138,6 +159,10 @@
    {
      id: 3,
      name: '判断题'
    },
    {
      id: 4,
      name: '简答题'
    }
  ],
  optionItem: {
@@ -177,7 +202,7 @@
  console.log(" state.optionItem.items.", state.optionItem.items)
}
const openDialog = async (type, value) => {
  await loadMoreBankData();
  await getBankList('');
  const userInfo = JSON.parse(Cookies.get('userInfo'))
  console.log("userInfo",userInfo)
  if(userInfo.userType === 0){
@@ -203,6 +228,32 @@
    }
  }
  dialogVisible.value = true;
}
const getBankList = async (val)=>{
  if(val != ""){
    const queryParams = {
      name: val
    }
    const res = await getQuestionBank(queryParams)
    if (res.code == 200) {
      state.bankList = res.data.list
    } else {
      ElMessage.warning(res.message)
    }
  }else {
    const queryParams = {
      pageNum: 1,
      pageSize: 10
    }
    const res = await getQuestionBank(queryParams)
    if (res.code == 200) {
      state.bankList = res.data.list
    } else {
      ElMessage.warning(res.message)
    }
  }
}
const handleScroll = () => {
@@ -232,20 +283,26 @@
  if(valid){
    if(title.value === '新增'){
      const {id,bankName, ...data} = JSON.parse(JSON.stringify(state.form))
      data.answer = data.questionType === 1 || data.questionType === 3 ? data.answer : state.checkList.join(',')
      // data.content = data.questionType === 1 ? JSON.stringify(state.singleQuestion) : data.questionType === 2 ? JSON.stringify(state.multiQuestion) : JSON.stringify(state.judgeQuestion)
      const options = state.optionItem.items.map((op,index) => {
        return {
          prefix: String.fromCharCode(index + 65),
          content: op.content,
        }
      })
      data.content = JSON.stringify(
          {
            analyze: state.optionItem.analyze,
            items: options
      data.answer = data.questionType === 1 || data.questionType === 3 || data.questionType === 4? data.answer : state.checkList.join(',')
      if(data.questionType !== 4){
        const options = state.optionItem.items.map((op,index) => {
          return {
            prefix: String.fromCharCode(index + 65),
            content: op.content,
          }
      )
        })
        data.content = JSON.stringify(
            {
              analyze: state.optionItem.analyze,
              items: options
            }
        )
      }else {
        data.content = JSON.stringify(
            {
              analyze: state.optionItem.analyze,
            })
      }
      console.log('state.form',data)
      const res = await addQuestion(data)
      if(res.code === 200){
@@ -262,20 +319,26 @@
      dialogVisible.value = false;
    }else if(title.value === '编辑'){
      const {bankName,...data} = JSON.parse(JSON.stringify(state.form))
      data.answer = data.questionType === 1 || data.questionType === 3 ? data.answer : state.checkList.join(',')
      // data.content = data.questionType === 1 ? JSON.stringify(state.singleQuestion) : data.questionType === 2 ? JSON.stringify(state.multiQuestion) : JSON.stringify(state.judgeQuestion)
      const options = state.optionItem.items.map((op,index) => {
        return {
          prefix: String.fromCharCode(index + 65),
          content: op.content,
        }
      })
      data.content = JSON.stringify(
          {
            analyze: state.optionItem.analyze,
            items: options
      data.answer = data.questionType === 1 || data.questionType === 3 || data.questionType === 4 ? data.answer : state.checkList.join(',')
      if(data.questionType !== 4){
        const options = state.optionItem.items.map((op,index) => {
          return {
            prefix: String.fromCharCode(index + 65),
            content: op.content,
          }
      )
        })
        data.content = JSON.stringify(
            {
              analyze: state.optionItem.analyze,
              items: options
            }
        )
      }else {
        data.content = JSON.stringify(
            {
              analyze: state.optionItem.analyze,
            })
      }
      const res = await editQuestion(data)
      if(res.code === 200){
        ElMessage({
@@ -293,6 +356,10 @@
  }
}
const changeType = () => {
  state.optionItem = {
    analyze: '',
    items: []
  }
  if(state.form.questionType === 3) {
    state.optionItem.items = [
      {
@@ -307,6 +374,7 @@
    ]
  }
}
const handleClose = () => {
  busRef.value.clearValidate();