123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- <template>
- <div class="edit-fill-question">
- <el-form
- ref="modalFormComp"
- :model="modalForm"
- :rules="rules"
- :key="modalForm.id"
- label-width="120px"
- >
- <el-form-item prop="topicName" label="题目名称:">
- <el-input
- v-model.trim="modalForm.topicName"
- type="textarea"
- :autosize="{ minRows: 2, maxRows: 5 }"
- resize="none"
- placeholder="请输入题目名称"
- clearable
- ></el-input>
- </el-form-item>
- <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="2"
- placeholder="是"
- style="margin-right: 20px;width:60px;"
- ></el-input>
- <span>否:</span>
- <el-input
- v-model.trim="booleanTypes.no"
- :maxlength="2"
- 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: {
- topicName: [
- {
- required: true,
- message: "请输入题目名称",
- trigger: "change"
- }
- ],
- 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>
|