shikeying
2023-05-08 83efa8f1ebd3ad80dfb5078a10caf9fcc4499dc8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
<template>
  <win :title="setting.title" width="1024px" @close="close">
    <el-form ref="form" :model="form" :rules="rules" label-width="120px" class="demo-ruleForm" label-position="right">
<!--      <el-form-item label="题库大类" prop="rootCatalog">-->
<!--        <el-select v-model="form.rootCatalog" placeholder="题库大类">-->
<!--          <el-option :value="form.rootCatalog" :label="form.rootCatalogName" :key="form.rootCatalog"/>-->
<!--        </el-select>-->
<!--      </el-form-item>-->
      <el-form-item label="题库大类" prop="rootCatalog">
        <el-select v-model="form.rootCatalog" placeholder="题库大类">
          <el-option
            v-for="dict in dict.type.question_root_catalog"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="二级分类" prop="majorCatalog">
        <el-select v-model="form.majorCatalog" placeholder="二级分类">
          <el-option :value="form.majorCatalog" :label="form.majorCatalogName"/>
        </el-select>
      </el-form-item>
      <el-form-item label="试卷名称" prop="name">
        <el-input v-model="form.name" placeholder="" />
      </el-form-item>
      <el-form-item label="组卷策略" prop="paperPolicy">
        <el-radio-group v-model="form.paperPolicy" size="small" @input="onPaperPolicyChanged">
          <el-radio-button label="random">完全随机</el-radio-button>
          <el-radio-button label="assign_type">指定类型</el-radio-button>
          <el-radio-button label="manual">手动选择</el-radio-button>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="指定类型" v-show="showPaperPolicyAssign">
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="单选数量">
              <el-input-number v-model="paperPolicyContent.selectSingleCount" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="单选总分">
              <el-input-number v-model="paperPolicyContent.selectSingleScore" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="多选数量">
              <el-input-number v-model="paperPolicyContent.selectMultipleCount" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="多选总分">
              <el-input-number v-model="paperPolicyContent.selectMultipleScore" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="判断数量">
              <el-input-number v-model="paperPolicyContent.trueOrFalseCount" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="判断总分">
              <el-input-number v-model="paperPolicyContent.trueOrFalseScore" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="填空数量">
              <el-input-number v-model="paperPolicyContent.completionCount" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="填空总分">
              <el-input-number v-model="paperPolicyContent.completionScore" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="简答数量">
              <el-input-number v-model="paperPolicyContent.shortAnswerCount" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="简答总分">
              <el-input-number v-model="paperPolicyContent.shortAnswerScore" :min="0" :max="200" size="small"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form-item>
      <el-form-item label="手动选择" v-show="showPaperPolicyManual">
 
      </el-form-item>
      <el-form-item label="试题数量" prop="questionCount">
        <el-input-number v-model="form.questionCount" :min="2" :max="200" label="抽取试题总数"></el-input-number>
      </el-form-item>
      <el-form-item label="卷面总分" prop="scoreTotal">
        <el-input-number v-model="form.scoreTotal" :min="1" :max="500" label="试题总分"></el-input-number>
      </el-form-item>
      <el-form-item label="试题难度" prop="difficultLevel">
        <el-radio-group v-model="form.difficultLevel" size="small">
          <el-radio-button label="1">最简单</el-radio-button>
          <el-radio-button label="2">简单</el-radio-button>
          <el-radio-button label="3">中等</el-radio-button>
          <el-radio-button label="4">较难</el-radio-button>
          <el-radio-button label="5">最难</el-radio-button>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="试卷状态" prop="dataStatus">
        <el-radio-group v-model="form.dataStatus" size="small">
          <el-radio-button label="0">正常</el-radio-button>
          <el-radio-button label="1">禁用</el-radio-button>
          <el-radio-button label="2" disabled>已删除</el-radio-button>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="备注" prop="summary">
        <el-input type="textarea" :rows="3" v-model="form.summary" placeholder="" />
      </el-form-item>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <my-button-v2 name="关闭" site="form" @click="close" />
      <my-button-v2 name="保存" site="form" @click="save" />
    </div>
  </win>
</template>
 
<script>
  import win from '@/views/components/win'
  import myButtonV2 from '@/views/components/myButtonV2'
  import {add} from "@/api/etaa/paper";
 
  export default {
    name: "",
    components: { win, myButtonV2 },
    dicts: ['question_root_catalog'],
    props: {
      // setting 中须至少包含控制dialog显示或隐藏的属性,其余属性可拓展
      // 将添加/修改的大量数据及逻辑从列表页面中分离出来,避免列表页面代码过多,审查困难
      // 若此页面须回传数据至父页面,可在引用组件时添加事件,本页面使用this.$emit('事件名',参数1,参数2...)回传数据
      setting: {
        type: Object,
        default: () => {
        }
      }
    },
 
    data(){
      return {
        // 显示抽取策略的区域
        showPaperPolicyAssign: false,
        showPaperPolicyManual: false,
 
        // 指定类型策略时,每种试题题量和总分
        paperPolicyContent: {
          selectSingleCount: 0,
          selectMultipleCount: 0,
          trueOrFalseCount: 0,
          completionCount: 0,
          shortAnswerCount: 0,
          selectSingleScore: 0,
          selectMultipleScore: 0,
          trueOrFalseScore: 0,
          completionScore: 0,
          shortAnswerScore: 0,
        },
 
        form: {
          id: null,
          name: null,
          orgId: this.setting.orgId,
          rootCatalog: this.setting.rootCatalog,
          majorCatalog: 0,    // 暂时没有实现选择二级分类树,要加上,2023-05-06
          paperPolicy: 'random',
          policyContent: null,
          questionCount: 10,
          difficultLevel: 3,
          scoreTotal: 0,
          scorePolicy: null,
          dataStatus: 0,
          summary: null
        },
 
        rules: {
          name: [
            { required: true, message: "请输入试卷名称", trigger: "blur" }
          ],
          rootCatalog: [
            { required: true, message: "选择题库大类", trigger: "blur" }
          ],
          paperPolicy: [
            { required: true, message: "选择组卷策略", trigger: "blur" }
          ],
          questionCount: [
            { required: true, message: "输入抽取试题总数", trigger: "blur" }
          ]
        },
      }
    },
 
    created() {
 
    },
 
    methods: {
      close() {
        this.$emit('close')
      },
 
      save(){
        this.$refs.form.validate(validate => {
          if(validate){
            if(this.form.paperPolicy == 'assign_type'){
              // 检查指定的试题类型抽取参数是否完整
              if(this.paperPolicyContent.selectSingleCount == 0
                  && this.paperPolicyContent.selectMultipleCount == 0
                  && this.paperPolicyContent.trueOrFalseCount == 0
                  && this.paperPolicyContent.completionCount == 0
                  && this.paperPolicyContent.shortAnswerCount == 0){
                this.$message.error('指定类型策略,需要录入每个题型数量、分值,不能全部为空!');
                return;
              }
              let scoreTotal = this.paperPolicyContent.selectSingleScore
                  + this.paperPolicyContent.selectMultipleScore
                  + this.paperPolicyContent.trueOrFalseScore
                  + this.paperPolicyContent.completionScore
                  + this.paperPolicyContent.shortAnswerScore;
              if(scoreTotal != this.form.scoreTotal){
                this.$message.error('指定类型策略,分项分值总和与总分不一致!');
                return;
              }
 
              // 把选择的各项题型信息数据组装起来
              this.form.policyContent = JSON.stringify(this.paperPolicyContent);
            }
 
            if(this.form.questionCount == 0){
              this.$message.error('试题总数必须大于0');
              return;
            }
 
            add(this.form).then(response => {
              // this.$modal.msgSuccess("修改成功");
              // this.open = false;
              // this.getList();
              this.$message.success('保存成功!')
              this.$emit('search')
              this.close()
            });
          }
        });
      },
 
      onPaperPolicyChanged(val){
        console.log("选中了:" + val);
        if(val == 'assign_type'){
          this.showPaperPolicyAssign = true;
          this.showPaperPolicyManual = false;
        } else if(val == 'manual'){
          this.showPaperPolicyAssign = false;
          this.showPaperPolicyManual = true;
        } else {
          this.showPaperPolicyAssign = false;
          this.showPaperPolicyManual = false;
        }
      }
    }
  }
</script>
 
<style scoped>
 
</style>