<template> <div class="edit-fill-question"> <el-form ref="modalFormComp" :model="modalForm" :rules="rules" :key="modalForm.id" label-width="120px" > <el-form-item prop="endNumber" label="起止题号:"> <el-input-number style="width:40px;" v-model="modalForm.startNumber" :min="0" :max="999" :step="1" step-strictly :controls="false" ></el-input-number> <span class="el-input-split"></span> <el-input-number style="width:40px;" v-model="modalForm.endNumber" :min="modalForm.startNumber" :max="999" :step="1" step-strictly :controls="false" ></el-input-number> </el-form-item> <el-form-item prop="optionCount" label="选项个数:"> <el-input-number style="width:125px;" v-model="modalForm.optionCount" :min="2" :max="22" :step="1" step-strictly :controls="false" :disabled="modalForm.isBoolean" ></el-input-number> </el-form-item> <!-- <el-form-item label="小题排列方向:" required> <el-radio-group v-model="modalForm.questionDirection" size="small"> <el-radio-button v-for="(val, key) in DIRECTION_TYPE" :key="key" :label="key" >{{ val }}</el-radio-button > </el-radio-group> </el-form-item> --> <el-form-item> <el-checkbox v-model="modalForm.isMultiply" :disabled="modalForm.isBoolean" >多选</el-checkbox > </el-form-item> <el-form-item> <el-checkbox v-model="modalForm.isBoolean" @change="selectTypeChange" :disabled="modalForm.isMultiply" >判断题</el-checkbox > <el-select v-if="modalForm.isBoolean" v-model="modalForm.booleanType" style="margin-left: 20px;width:125px;" placeholder="请选择" @change="booleanTypeChange" > <el-option v-for="item in BOOLEAN_TYPE" :key="item" :label="item" :value="item" ></el-option> </el-select> <span v-if="modalForm.isBoolean">(备选是否配置)</span> </el-form-item> <el-form-item v-if="modalForm.isBoolean" prop="booleanType" label="是否配置:" > <span>是:</span> <el-input v-model.trim="booleanTypes.yes" :maxlength="1" placeholder="是" style="margin-right: 20px;width:60px;" ></el-input> <span>否:</span> <el-input v-model.trim="booleanTypes.no" :maxlength="1" placeholder="否" style="margin-right: 20px;width:60px;" ></el-input> </el-form-item> </el-form> </div> </template> <script> import { BOOLEAN_TYPE, DIRECTION_TYPE } from "../../../../enumerate"; const initModalForm = { id: "", topicName: "", startNumber: 1, endNumber: 5, questionsCount: 10, optionCount: 5, questionDirection: "horizontal", isBoolean: false, booleanType: BOOLEAN_TYPE[0], isMultiply: false }; export default { name: "edit-fill-question", props: { instance: { type: Object, default() { return {}; } } }, data() { const numberRangeValidater = (rule, value, callback) => { if (!this.modalForm.startNumber || !this.modalForm.endNumber) { return callback(new Error("请输入起止题号")); } if (this.modalForm.startNumber > this.modalForm.endNumber) { callback(new Error("开始题号不能大于结束题号")); } else { callback(); } }; const booleanTypeValidater = (rule, value, callback) => { if (this.modalForm.isBoolean) { if ( this.booleanTypes.yes && this.booleanTypes.no && this.booleanTypes.yes.length <= 2 && this.booleanTypes.no.length <= 2 ) { callback(); } else { callback(new Error("请设置是否配置,单个设置最多两个字符。")); } } else { callback(); } }; return { modalForm: { ...initModalForm }, BOOLEAN_TYPE, DIRECTION_TYPE, booleanTypes: { yes: "", no: "" }, rules: { endNumber: [ { required: true, message: "请输入起止题号", trigger: "change" }, { type: "number", validator: numberRangeValidater, trigger: "change" } ], optionCount: [ { required: true, type: "number", message: "请输入选项个数", trigger: "change" } ], booleanType: [ { required: true, validator: booleanTypeValidater, trigger: "change" } ] } }; }, mounted() { this.initData(this.instance); }, methods: { initData(val) { const valInfo = val.parent || val; this.modalForm = Object.assign({}, this.initModalForm, valInfo); this.modalForm.endNumber = this.modalForm.startNumber + this.modalForm.questionsCount - 1; this.booleanTypeChange(); }, selectTypeChange(val) { if (val) { this.modalForm.optionCount = 2; this.modalForm.isMultiply = false; this.modalForm.booleanType = BOOLEAN_TYPE[0]; this.booleanTypeChange(); } }, booleanTypeChange() { const [yes, no] = this.modalForm.booleanType.split(","); this.booleanTypes.yes = yes; this.booleanTypes.no = no; }, async submit() { const valid = await this.$refs.modalFormComp.validate().catch(() => {}); if (!valid) return; this.modalForm.questionsCount = this.modalForm.endNumber - this.modalForm.startNumber + 1; this.modalForm.booleanType = [ this.booleanTypes.yes, this.booleanTypes.no ].join(); this.$emit("modified", this.modalForm); } } }; </script>