Commit e011bf151deb401616926a54a79524fdc8d5ef52

Authored by 周超
1 parent f0b7a6c2

我先走一步

src/api/QuestionClass.js
@@ -15,6 +15,14 @@ export function getQuestionClass(params) { @@ -15,6 +15,14 @@ export function getQuestionClass(params) {
15 params 15 params
16 }) 16 })
17 } 17 }
  18 +
  19 +export function GetQuestionClassByType(params) {
  20 + return request({
  21 + url: `/QuestionClass/GetQuestionClassByType`,
  22 + method: 'get',
  23 + params
  24 + })
  25 +}
18 // 修改 | 保存 26 // 修改 | 保存
19 export function EditQuestionClass(params) { 27 export function EditQuestionClass(params) {
20 return request({ 28 return request({
src/api/TestPaper.js
@@ -10,7 +10,8 @@ export function EditTestPaper(params) { @@ -10,7 +10,8 @@ export function EditTestPaper(params) {
10 10
11 export function getTestPaperList(params) { 11 export function getTestPaperList(params) {
12 return request({ 12 return request({
13 - url: `/TestPaper/List?pageIndex=${params.pageIndex}&pageSize=${params.pageSize}&sort=${params.sort}&sortOrder=${params.sortOrder}`, 13 + url: `/TestPaper/List`,
  14 + // url: `/TestPaper/List?pageIndex=${params.pageIndex}&pageSize=${params.pageSize}&sort=${params.sort}&sortOrder=${params.sortOrder}`,
14 method: 'get', 15 method: 'get',
15 data: params 16 data: params
16 }) 17 })
src/api/user.js
@@ -94,4 +94,12 @@ export function UpdateCurrentPasswordById(data) { @@ -94,4 +94,12 @@ export function UpdateCurrentPasswordById(data) {
94 method: 'post', 94 method: 'post',
95 data 95 data
96 }) 96 })
97 -} 97 +}
  98 +
  99 +export function AddInvitationAnswerMultiple(data) {
  100 + return request({
  101 + url: `/InvitationAnswer/AddInvitationAnswerMultiple`,
  102 + method: 'post',
  103 + data
  104 + })
  105 +}
98 \ No newline at end of file 106 \ No newline at end of file
src/views/QuestionBank/components/EditDimension.vue
@@ -237,8 +237,7 @@ @@ -237,8 +237,7 @@
237 } catch (e) { } 237 } catch (e) { }
238 }, 238 },
239 show(id) { 239 show(id) {
240 - if (id) {  
241 - this.data = { 240 + this.data = {
242 // id: Date.parse(new Date()) + '_' + Math.ceil(Math.random() * 99999), 241 // id: Date.parse(new Date()) + '_' + Math.ceil(Math.random() * 99999),
243 // key: Date.parse(new Date()) + '_' + Math.ceil(Math.random() * 99999), 242 // key: Date.parse(new Date()) + '_' + Math.ceil(Math.random() * 99999),
244 rules: [ 243 rules: [
@@ -255,6 +254,8 @@ @@ -255,6 +254,8 @@
255 } 254 }
256 ] 255 ]
257 }; 256 };
  257 + if (id) {
  258 +
258 this.dialogFormVisible = true; 259 this.dialogFormVisible = true;
259 getQuestionClass({ id }).then(res => { 260 getQuestionClass({ id }).then(res => {
260 261
src/views/QuestionBank/index.vue
@@ -6,48 +6,24 @@ @@ -6,48 +6,24 @@
6 <div class="TreeHeader"> 6 <div class="TreeHeader">
7 <label style="font-size: 18px">题目分类</label> 7 <label style="font-size: 18px">题目分类</label>
8 </div> 8 </div>
9 - <div  
10 - :style="{ height: TableColHeight + 'px' }"  
11 - class="areadiv"  
12 - style="margin: 10px 0 0 0; padding: 5px 0 0 0"  
13 - >  
14 - <el-tabs  
15 - v-model="activeTab"  
16 - @tab-click="handleTabsClick"  
17 - style="padding: 0 20px"  
18 - :stretch="true"  
19 - > 9 + <div :style="{ height: TableColHeight + 'px' }" class="areadiv"
  10 + style="margin: 10px 0 0 0; padding: 5px 0 0 0">
  11 + <el-tabs v-model="activeTab" @tab-click="handleTabsClick" style="padding: 0 20px" :stretch="true">
20 <el-tab-pane label="专业类" name="first"></el-tab-pane> 12 <el-tab-pane label="专业类" name="first"></el-tab-pane>
21 <el-tab-pane label="测评类" name="second"></el-tab-pane> 13 <el-tab-pane label="测评类" name="second"></el-tab-pane>
22 </el-tabs> 14 </el-tabs>
23 - <el-tree  
24 - :data="activeTab == 'first' ? firstTreeData : secondTreeData"  
25 - :props="activeTab == 'first' ? firstTreeData : secondTreeData"  
26 - @node-click="handleNodeClick"  
27 - class="eltree"  
28 - :expand-on-click-node="false"  
29 - > 15 + <el-tree :data="activeTab == 'first' ? firstTreeData : secondTreeData"
  16 + :props="activeTab == 'first' ? firstTreeData : secondTreeData" @node-click="handleNodeClick"
  17 + class="eltree" :expand-on-click-node="false">
30 <span class="custom-tree-node" slot-scope="{ node, data }"> 18 <span class="custom-tree-node" slot-scope="{ node, data }">
31 <span>{{ node.label }}</span> 19 <span>{{ node.label }}</span>
32 <span style=""> 20 <span style="">
33 - <el-button  
34 - type="text"  
35 - size="mini"  
36 - @click="showClassDialog(node)"  
37 - > 21 + <el-button type="text" size="mini" @click="showClassDialog(node)" v-if="activeTab == 'first'?true:node.level<2?true:false">
38 添加下级 22 添加下级
39 </el-button> 23 </el-button>
40 - <el-button  
41 - type="text"  
42 - v-if="activeTab == 'second'"  
43 - @click="handleEditDimension(node, data)"  
44 - >编辑</el-button  
45 - >  
46 - <el-button  
47 - type="text"  
48 - size="mini"  
49 - @click="() => handleDeleteQuestionClass(node, data)"  
50 - > 24 + <el-button type="text" v-if="activeTab == 'second'" @click="handleEditDimension(node, data)">编辑
  25 + </el-button>
  26 + <el-button type="text" size="mini" @click="() => handleDeleteQuestionClass(node, data)">
51 删除 27 删除
52 </el-button> 28 </el-button>
53 </span> 29 </span>
@@ -59,24 +35,16 @@ @@ -59,24 +35,16 @@
59 <el-col :span="18"> 35 <el-col :span="18">
60 <div class="grid-content bg-purple-light"> 36 <div class="grid-content bg-purple-light">
61 <div class="seetingsDiv" style=""> 37 <div class="seetingsDiv" style="">
62 - <el-button type="primary" @click="dialogsubjectlVisible = true"  
63 - >添加题目 38 + <el-button type="primary" @click="AddSubject">添加题目
64 </el-button> 39 </el-button>
65 </div> 40 </div>
66 <div class="areadiv" :style="{ height: TableColHeight + 'px' }"> 41 <div class="areadiv" :style="{ height: TableColHeight + 'px' }">
67 - <el-table  
68 - :data="QuestList"  
69 - id="QuestionTable"  
70 - border  
71 - style=" 42 + <el-table :data="QuestList" id="QuestionTable" border style="
72 width: 100%; 43 width: 100%;
73 border-radius: 5px; 44 border-radius: 5px;
74 box-shadow: 0 0 10px #efefef; 45 box-shadow: 0 0 10px #efefef;
75 margin-top: 10px; 46 margin-top: 10px;
76 - "  
77 - :header-cell-class-name="headerStyle"  
78 - :stripe="true"  
79 - > 47 + " :header-cell-class-name="headerStyle" :stripe="true">
80 <el-table-column prop="date" label="ID" width="50"> 48 <el-table-column prop="date" label="ID" width="50">
81 <template slot-scope="scope"> 49 <template slot-scope="scope">
82 <span>{{ scope.row.id }}</span> 50 <span>{{ scope.row.id }}</span>
@@ -86,32 +54,28 @@ @@ -86,32 +54,28 @@
86 <template slot-scope="scope"> 54 <template slot-scope="scope">
87 <span style="padding-left: 10px">{{ 55 <span style="padding-left: 10px">{{
88 scope.row.subjectName 56 scope.row.subjectName
89 - }}</span> 57 + }}</span>
90 </template> 58 </template>
91 </el-table-column> 59 </el-table-column>
92 - <el-table-column  
93 - prop="QuestionClassName"  
94 - label="分类"  
95 - width="100"  
96 - > 60 + <el-table-column prop="QuestionClassName" label="分类" width="100">
97 <template slot-scope="scope"> 61 <template slot-scope="scope">
98 <span style="padding-left: 10px">{{ 62 <span style="padding-left: 10px">{{
99 scope.row.QuestionClassName 63 scope.row.QuestionClassName
100 - }}</span> 64 + }}</span>
101 </template> 65 </template>
102 </el-table-column> 66 </el-table-column>
103 <el-table-column prop="name" label="分数" width="80"> 67 <el-table-column prop="name" label="分数" width="80">
104 <template slot-scope="scope"> 68 <template slot-scope="scope">
105 <span style="padding-left: 10px">{{ 69 <span style="padding-left: 10px">{{
106 scope.row.fraction 70 scope.row.fraction
107 - }}</span> 71 + }}</span>
108 </template> 72 </template>
109 </el-table-column> 73 </el-table-column>
110 <el-table-column prop="name" label="单项分数" width="80"> 74 <el-table-column prop="name" label="单项分数" width="80">
111 <template slot-scope="scope"> 75 <template slot-scope="scope">
112 <span style="padding-left: 10px">{{ 76 <span style="padding-left: 10px">{{
113 scope.row.singleFraction 77 scope.row.singleFraction
114 - }}</span> 78 + }}</span>
115 </template> 79 </template>
116 </el-table-column> 80 </el-table-column>
117 <el-table-column prop="name" label="正确答案" width="80"> 81 <el-table-column prop="name" label="正确答案" width="80">
@@ -119,46 +83,33 @@ @@ -119,46 +83,33 @@
119 <span style="padding-left: 10px">{{ scope.row.answer }}</span> 83 <span style="padding-left: 10px">{{ scope.row.answer }}</span>
120 </template> 84 </template>
121 </el-table-column> 85 </el-table-column>
122 - <el-table-column  
123 - prop="name"  
124 - label="题目"  
125 - :show-overflow-tooltip="true"  
126 - > 86 + <el-table-column prop="name" label="题目" :show-overflow-tooltip="true">
127 <template slot-scope="scope"> 87 <template slot-scope="scope">
128 <span style="padding-left: 10px">{{ 88 <span style="padding-left: 10px">{{
129 scope.row.subject 89 scope.row.subject
130 - }}</span> 90 + }}</span>
131 </template> 91 </template>
132 </el-table-column> 92 </el-table-column>
133 - <el-table-column  
134 - prop="name"  
135 - label="解析"  
136 - :show-overflow-tooltip="true"  
137 - > 93 + <el-table-column prop="name" label="解析" :show-overflow-tooltip="true">
138 <template slot-scope="scope"> 94 <template slot-scope="scope">
139 <span style="padding-left: 10px">{{ 95 <span style="padding-left: 10px">{{
140 scope.row.analysis 96 scope.row.analysis
141 - }}</span> 97 + }}</span>
142 </template> 98 </template>
143 </el-table-column> 99 </el-table-column>
144 <el-table-column fixed="right" label="操作" width="150"> 100 <el-table-column fixed="right" label="操作" width="150">
145 <template slot-scope="scope"> 101 <template slot-scope="scope">
146 - <el-dropdown  
147 - @command=" 102 + <el-dropdown @command="
148 (e) => { 103 (e) => {
149 handleCommand(e, scope.row.id); 104 handleCommand(e, scope.row.id);
150 } 105 }
151 - "  
152 - style="padding-left: 10px"  
153 - > 106 + " style="padding-left: 10px">
154 <span class="el-dropdown-link"> 107 <span class="el-dropdown-link">
155 操作<i class="el-icon-arrow-down el-icon--right"></i> 108 操作<i class="el-icon-arrow-down el-icon--right"></i>
156 </span> 109 </span>
157 <template #dropdown> 110 <template #dropdown>
158 <el-dropdown-menu> 111 <el-dropdown-menu>
159 - <el-dropdown-item command="update"  
160 - >编辑</el-dropdown-item  
161 - > 112 + <el-dropdown-item command="update">编辑</el-dropdown-item>
162 <!-- <el-dropdown-item command="b">锁定</el-dropdown-item> --> 113 <!-- <el-dropdown-item command="b">锁定</el-dropdown-item> -->
163 <el-dropdown-item command="del">删除</el-dropdown-item> 114 <el-dropdown-item command="del">删除</el-dropdown-item>
164 </el-dropdown-menu> 115 </el-dropdown-menu>
@@ -167,83 +118,43 @@ @@ -167,83 +118,43 @@
167 </template> 118 </template>
168 </el-table-column> 119 </el-table-column>
169 </el-table> 120 </el-table>
170 - <el-pagination  
171 - background  
172 - @current-change="currentchange"  
173 - style=" 121 + <el-pagination background @current-change="currentchange" style="
174 position: static; 122 position: static;
175 bottom: 3px; 123 bottom: 3px;
176 text-align: center; 124 text-align: center;
177 margin-top: 5px; 125 margin-top: 5px;
178 - "  
179 - :page-size="this.parameter.pageSize"  
180 - layout="total,prev, pager, next"  
181 - :total="Count"  
182 - > 126 + " :page-size="this.parameter.pageSize" layout="total,prev, pager, next" :total="Count">
183 </el-pagination> 127 </el-pagination>
184 <div style="clear: both"></div> 128 <div style="clear: both"></div>
185 </div> 129 </div>
186 </div> 130 </div>
187 </el-col> 131 </el-col>
188 </el-row> 132 </el-row>
189 - <el-dialog  
190 - title="分类维护"  
191 - :visible.sync="dialogClassIVIsible"  
192 - @close="closeClassDialog"  
193 - width="400px"  
194 - :close-on-click-modal="false"  
195 - >  
196 - <el-form  
197 - ref="QuestionClassInfo"  
198 - :model="QuestionClassInfo"  
199 - label-width="70px"  
200 - > 133 + <el-dialog title="分类维护" :visible.sync="dialogClassIVIsible" @close="closeClassDialog" width="400px"
  134 + :close-on-click-modal="false">
  135 + <el-form ref="QuestionClassInfo" :model="QuestionClassInfo" label-width="70px">
201 <el-form-item label="分类名称"> 136 <el-form-item label="分类名称">
202 - <el-input  
203 - v-model="QuestionClassInfo.ClassificationName"  
204 - placeholder="请输入分类名称"  
205 - ></el-input> 137 + <el-input v-model="QuestionClassInfo.ClassificationName" placeholder="请输入分类名称"></el-input>
206 </el-form-item> 138 </el-form-item>
207 </el-form> 139 </el-form>
208 - <el-button  
209 - @click="CreateQuestionClassHealder"  
210 - style="margin: 10px 0 0 0; float: right"  
211 - type="primary"  
212 - >确定 140 + <el-button @click="CreateQuestionClassHealder" style="margin: 10px 0 0 0; float: right" type="primary">确定
213 </el-button> 141 </el-button>
214 <div style="clear: both"></div> 142 <div style="clear: both"></div>
215 </el-dialog> 143 </el-dialog>
216 - <el-dialog  
217 - title="编辑题目"  
218 - :visible.sync="dialogsubjectlVisible"  
219 - @close="closeDialog"  
220 - width="800px"  
221 - :close-on-click-modal="false"  
222 - > 144 + <el-dialog title="编辑题目" :visible.sync="dialogsubjectlVisible" @close="closeDialog" width="800px"
  145 + :close-on-click-modal="false">
223 <el-form ref="Dataform" :model="Dataform" label-width="60px"> 146 <el-form ref="Dataform" :model="Dataform" label-width="60px">
224 <el-form-item label="题目"> 147 <el-form-item label="题目">
225 - <el-input  
226 - v-model="Dataform.subject"  
227 - placeholder="请输入题目名称"  
228 - ></el-input> 148 + <el-input v-model="Dataform.subject" placeholder="请输入题目名称"></el-input>
229 </el-form-item> 149 </el-form-item>
230 <el-form-item label="分类" style="padding-top: 5px"> 150 <el-form-item label="分类" style="padding-top: 5px">
231 - <el-cascader  
232 - v-model="Dataform.QuestionClassId"  
233 - style="width: 400px"  
234 - :props="{ emitPath: false }"  
235 - :clearable="true"  
236 - :options="QuestionClass"  
237 - > 151 + <el-cascader @change="changequestionclass" v-model="Dataform.QuestionClassId" style="width: 400px" :props="{ emitPath: false ,checkStrictly:true}"
  152 + :clearable="true" :options="QuestionClass">
238 </el-cascader> 153 </el-cascader>
239 </el-form-item> 154 </el-form-item>
240 <el-form-item label="题型" style="padding-top: 5px"> 155 <el-form-item label="题型" style="padding-top: 5px">
241 - <el-select  
242 - v-model="Dataform.subjectType"  
243 - value-key="Dataform.subjectType"  
244 - @change="changeQuestionType"  
245 - placeholder="请选择题型"  
246 - > 156 + <el-select v-model="Dataform.subjectType" value-key="Dataform.subjectType" @change="changeQuestionType"
  157 + placeholder="请选择题型">
247 <el-option label="单选题" :value="1"></el-option> 158 <el-option label="单选题" :value="1"></el-option>
248 <el-option label="多选题" :value="2"></el-option> 159 <el-option label="多选题" :value="2"></el-option>
249 <el-option label="主观题" :value="3"></el-option> 160 <el-option label="主观题" :value="3"></el-option>
@@ -253,484 +164,488 @@ @@ -253,484 +164,488 @@
253 <el-table :data="subjectContent" :show-header="false"> 164 <el-table :data="subjectContent" :show-header="false">
254 <el-table-column> 165 <el-table-column>
255 <template slot-scope="scope"> 166 <template slot-scope="scope">
256 - <el-input  
257 - placeholder="请输入答案"  
258 - v-model="scope.row.optionContent"  
259 - class="optionInput"  
260 - style="width:68% !important"  
261 - > 167 + <el-input placeholder="请输入答案" v-model="scope.row.optionContent" class="optionInput"
  168 + style="width:68% !important">
262 <template slot="prepend">{{ scope.row.option }}</template> 169 <template slot="prepend">{{ scope.row.option }}</template>
263 </el-input> 170 </el-input>
264 171
265 - <el-input  
266 - placeholder="维度分值"  
267 - v-model="scope.row.score"  
268 - class="optionInput"  
269 - style="width:21% !important;margin-left:1%"  
270 - >  
271 - </el-input> 172 + <el-input placeholder="维度分值" v-model="scope.row.score" class="optionInput" v-if="FormClassType==2"
  173 + style="width:21% !important;margin-left:1%">
  174 + </el-input>
272 175
273 176
274 <i class="el-icon-circle-plus el-icon" @click="Addlist"></i> 177 <i class="el-icon-circle-plus el-icon" @click="Addlist"></i>
275 - <i  
276 - class="el-icon-remove el-icon"  
277 - @click="RemoveList(scope)"  
278 - v-if="scope.$index != 0"  
279 - ></i> 178 + <i class="el-icon-remove el-icon" @click="RemoveList(scope)" v-if="scope.$index != 0"></i>
280 </template> 179 </template>
281 </el-table-column> 180 </el-table-column>
282 - 181 +
283 </el-table> 182 </el-table>
284 </el-form-item> 183 </el-form-item>
285 - <el-form-item  
286 - label="答案"  
287 - v-show="OptionVisible"  
288 - class="subjectContentClass"  
289 - >  
290 - <el-radio-group  
291 - v-for="(item, i) in subjectContent"  
292 - v-model="Dataform.answer"  
293 - v-if="GroupVisible"  
294 - > 184 + <el-form-item label="答案" v-show="OptionVisible" class="subjectContentClass" v-if="FormClassType!=2">
  185 + <el-radio-group v-for="(item, i) in subjectContent" v-model="Dataform.answer" v-if="GroupVisible">
295 <el-radio :label="item.option">{{ item.option }}</el-radio> 186 <el-radio :label="item.option">{{ item.option }}</el-radio>
296 </el-radio-group> 187 </el-radio-group>
297 - <el-checkbox-group  
298 - v-for="(item, i) in subjectContent"  
299 - v-model="Dataform.answer"  
300 - v-if="!GroupVisible"  
301 - > 188 + <el-checkbox-group v-for="(item, i) in subjectContent" v-model="Dataform.answer" v-if="!GroupVisible">
302 <el-checkbox style="float: left" :label="item.option">{{ 189 <el-checkbox style="float: left" :label="item.option">{{
303 item.option 190 item.option
304 - }}</el-checkbox> 191 + }}</el-checkbox>
305 </el-checkbox-group> 192 </el-checkbox-group>
306 </el-form-item> 193 </el-form-item>
307 - <el-form-item label="分数" v-show="OptionVisible">  
308 - <el-input-number  
309 - :step="1"  
310 - style="float: left"  
311 - :min="0"  
312 - v-model="Dataform.fraction"  
313 - > 194 + <el-form-item label="分数" v-show="OptionVisible && FormClassType !=2">
  195 + <el-input-number :step="1" style="float: left" :min="0" v-model="Dataform.fraction">
314 </el-input-number> 196 </el-input-number>
315 <div style="float: left; margin-left: 20px" v-if="!GroupVisible"> 197 <div style="float: left; margin-left: 20px" v-if="!GroupVisible">
316 <lable style="font-weight: bold">单项分数:</lable> 198 <lable style="font-weight: bold">单项分数:</lable>
317 - <el-input-number  
318 - :step="0.5"  
319 - :max="Dataform.fraction / 2"  
320 - :min="0"  
321 - v-model="Dataform.singleFraction"  
322 - > 199 + <el-input-number :step="0.5" :max="Dataform.fraction / 2" :min="0" v-model="Dataform.singleFraction">
323 </el-input-number> 200 </el-input-number>
324 </div> 201 </div>
325 </el-form-item> 202 </el-form-item>
326 <el-form-item label="解析" style="margin-top: 10px"> 203 <el-form-item label="解析" style="margin-top: 10px">
327 - <el-input  
328 - v-model="Dataform.analysis"  
329 - :rows="10"  
330 - type="textarea"  
331 - placeholder="请输入答案解析"  
332 - /> 204 + <el-input v-model="Dataform.analysis" :rows="10" type="textarea" placeholder="请输入答案解析" />
333 </el-form-item> 205 </el-form-item>
334 </el-form> 206 </el-form>
335 - <el-button  
336 - @click="EditQuestionHeadler"  
337 - style="margin: 10px 0 0 0; float: right"  
338 - type="primary"  
339 - >确定 207 + <el-button @click="EditQuestionHeadler" style="margin: 10px 0 0 0; float: right" type="primary">确定
340 </el-button> 208 </el-button>
341 <div style="clear: both"></div> 209 <div style="clear: both"></div>
342 </el-dialog> 210 </el-dialog>
343 - <EditDimension ref="editDimensionDialog" :model="currentEditDimension"></EditDimension> 211 + <EditDimension ref="editDimensionDialog" :model="currentEditDimension"></EditDimension>
344 </div> 212 </div>
345 </template> 213 </template>
346 214
347 <script lang="ts"> 215 <script lang="ts">
348 -import {  
349 - getQuestionList,  
350 - EditQuestion,  
351 - getQuestionClassList,  
352 - DelQuestionBankEvent,  
353 - GetQuestionBankById,  
354 - CreateQuestionClass,  
355 -} from "@/api/QuestionBank";  
356 -import { parseTime } from "@/utils/index.js";  
357 -import EditDimension from "./components/EditDimension.vue";  
358 -export default {  
359 - filters: {},  
360 - components: {  
361 - EditDimension,  
362 - },  
363 - data() {  
364 - return {  
365 - currentEditDimension:{},  
366 - activeTab: "first",  
367 - parameter: {  
368 - pageIndex: 1,  
369 - pageSize: 12,  
370 - sort: "id",  
371 - sortOrder: 1,  
372 - keyword: "",  
373 - QuestionClassId: 0,  
374 - status: 1,  
375 - },  
376 - Count: 0,  
377 - QuestList: [],  
378 - dialogsubjectlVisible: false,  
379 - dialogClassIVIsible: false,  
380 - OptionVisible: true,  
381 - GroupVisible: true,  
382 - Dataform: {  
383 - subject: "",  
384 - subjectType: 1,  
385 - subjectContent: "",  
386 - QuestionClassId: 0,  
387 - answer: [],  
388 - analysis: "",  
389 - fraction: 0,  
390 - singleFraction: 0,  
391 - addTime: "2021-11-12",  
392 - state: 1,  
393 - },  
394 - subjectContent: [  
395 - {  
396 - option: "A",  
397 - optionContent: "",  
398 - },  
399 - ],  
400 - QuestionClass: [],  
401 - QuestionClassInfo: {  
402 - ParentId: 0,  
403 - ClassificationName: "",  
404 - Addtime: "",  
405 - },  
406 - TreeColHeight: 0,  
407 - TableColHeight: 0,  
408 - treeData: [],  
409 - firstTreeData: [],  
410 - secondTreeData: [],  
411 - CreatClassId: 0,  
412 - };  
413 - },  
414 - created() {},  
415 - mounted() {  
416 - let ContentAreaHight =  
417 - window.innerHeight - document.getElementById("elRow").offsetTop - 70;  
418 - this.TableColHeight =  
419 - ContentAreaHight - document.getElementById("QuestionTable").offsetTop;  
420 - let lineNumber = this.TableColHeight - 50 - 20; //减去表头来计算  
421 - this.TreeColHeight = ContentAreaHight;  
422 - lineNumber = Math.floor(lineNumber / 49);  
423 - this.parameter.pageSize = lineNumber;  
424 - this.GetList();  
425 - this.getQuestionClassListHeadler();  
426 - },  
427 - methods: {  
428 - //维度编辑  
429 - handleEditDimension(node,data) {  
430 - console.log(data);  
431 - // this.$refs.editDimensionDialog.dialogFormVisible = true;  
432 - this.$refs.editDimensionDialog.show(data.id);  
433 - this.currentEditDimension = data;  
434 - },  
435 - //切换分类  
436 - handleTabsClick(e) {  
437 - console.log(e.name); 216 + import {
  217 + getQuestionList,
  218 + EditQuestion,
  219 + getQuestionClassList,
  220 + DelQuestionBankEvent,
  221 + GetQuestionBankById,
  222 + CreateQuestionClass,
  223 + } from "@/api/QuestionBank";
  224 + import { parseTime } from "@/utils/index.js";
  225 + import EditDimension from "./components/EditDimension.vue";
  226 + export default {
  227 + filters: {},
  228 + components: {
  229 + EditDimension,
438 }, 230 },
439 - //删除分类  
440 - handleDeleteQuestionClass(node, data) {  
441 - console.log(node, data);  
442 - console.log(this.API);  
443 - this.API.deleteQuestionClass(data.value).then((res) => {  
444 - this.getQuestionClassListHeadler();  
445 - });  
446 - },  
447 - closeClassDialog() {  
448 - this.dialogClassIVIsible = false;  
449 - },  
450 - //表格右边的操作按钮  
451 - handleCommand(value, val) {  
452 - if (value == "update") {  
453 - this.GetQuestionBankByIdHeadler(val);  
454 - }  
455 - if (value == "del") {  
456 - this.DelQuestionBankEventHeadler(val);  
457 - } 231 + data() {
  232 + return {
  233 + FormClassType:0,
  234 + loading: false,
  235 + currentEditDimension: {},
  236 + activeTab: "first",
  237 + parameter: {
  238 + pageIndex: 1,
  239 + pageSize: 12,
  240 + sort: "id",
  241 + sortOrder: 1,
  242 + keyword: "",
  243 + QuestionClassId: 0,
  244 + status: 1,
  245 + },
  246 + Count: 0,
  247 + QuestList: [],
  248 + dialogsubjectlVisible: false,
  249 + dialogClassIVIsible: false,
  250 + OptionVisible: true,
  251 + GroupVisible: true,
  252 + Dataform: {
  253 + subject: "",
  254 + subjectType: 1,
  255 + subjectContent: "",
  256 + QuestionClassId: 0,
  257 + answer: [],
  258 + analysis: "",
  259 + fraction: 0,
  260 + singleFraction: 0,
  261 + addTime: "2021-11-12",
  262 + state: 1,
  263 + },
  264 + subjectContent: [
  265 + {
  266 + option: "A",
  267 + optionContent: "",
  268 + },
  269 + ],
  270 + QuestionClass: [],
  271 + QuestionClassInfo: {
  272 + ParentId: 0,
  273 + ClassificationName: "",
  274 + Addtime: "",
  275 + },
  276 + TreeColHeight: 0,
  277 + TableColHeight: 0,
  278 + treeData: [],
  279 + firstTreeData: [],
  280 + secondTreeData: [],
  281 + CreatClassId: 0,
  282 + };
458 }, 283 },
459 - //添加分类  
460 - CreateQuestionClassHealder() {  
461 - this.QuestionClassInfo.Addtime = parseTime(new Date(), "");  
462 - CreateQuestionClass(this.QuestionClassInfo).then((res) => {  
463 - // alert(res.code);  
464 - }); 284 + created() { },
  285 + mounted() {
  286 + let ContentAreaHight =
  287 + window.innerHeight - document.getElementById("elRow").offsetTop - 70;
  288 + this.TableColHeight =
  289 + ContentAreaHight - document.getElementById("QuestionTable").offsetTop;
  290 + let lineNumber = this.TableColHeight - 50 - 20; //减去表头来计算
  291 + this.TreeColHeight = ContentAreaHight;
  292 + lineNumber = Math.floor(lineNumber / 49);
  293 + this.parameter.pageSize = lineNumber;
  294 + this.GetList();
  295 + this.getQuestionClassListHeadler();
465 }, 296 },
466 - //获取选择的题目详细信息  
467 - GetQuestionBankByIdHeadler(id) {  
468 - GetQuestionBankById(id).then((res) => {  
469 - this.changeQuestionType(res.data.data.subjectType); //这里先初始化编辑显示内容  
470 - this.Dataform = res.data.data; //内容赋值  
471 - this.subjectContent = JSON.parse(res.data.data.subjectContent); //赋值选项  
472 - if (res.data.data.subjectType == 1) {  
473 - this.Dataform.answer = res.data.data.answer.split(",")[0]; //赋值答案  
474 - } else {  
475 - this.Dataform.answer = res.data.data.answer.split(","); //赋值答案 297 + methods: {
  298 + AddSubject(){
  299 + this.FormClassType = 0;
  300 + this.dialogsubjectlVisible = true
  301 + },
  302 + changequestionclass(a,b,c){
  303 + var item = this.QuestionClass.find(o=>o.id ==a);
  304 + if(item) this.FormClassType = item.ClassType;
  305 + },
  306 + //维度编辑
  307 + handleEditDimension(node, data) {
  308 + console.log(data);
  309 + // this.$refs.editDimensionDialog.dialogFormVisible = true;
  310 + this.$refs.editDimensionDialog.show(data.id);
  311 + this.currentEditDimension = data;
  312 + },
  313 + //切换分类
  314 + handleTabsClick(e) {
  315 + console.log(e.name);
  316 + },
  317 + //删除分类
  318 + handleDeleteQuestionClass(node, data) {
  319 + this.loading = true;
  320 + // console.log(node, data);
  321 + // console.log(this.API);
  322 + this.API.deleteQuestionClass(data.value).then((res) => {
  323 +
  324 + this.getQuestionClassListHeadler();
  325 +
  326 + this.loading = false;
  327 + this.$message.success('操作成功!');
  328 + });
  329 + },
  330 + closeClassDialog() {
  331 + this.dialogClassIVIsible = false;
  332 + },
  333 + //表格右边的操作按钮
  334 + handleCommand(value, val) {
  335 + if (value == "update") {
  336 + this.GetQuestionBankByIdHeadler(val);
476 } 337 }
477 - this.dialogsubjectlVisible = true;  
478 - });  
479 - },  
480 - showClassDialog(node) {  
481 - this.dialogClassIVIsible = true;  
482 - console.log(node);  
483 - this.QuestionClassInfo.ParentId = node.data.value;  
484 - // alert(this.QuestionClassInfo.ParentId);  
485 - },  
486 - //关闭弹框的事件  
487 - closeDialog() {  
488 - //初始化数据  
489 - this.Dataform = this.$options.data().Dataform;  
490 - this.subjectContent = this.$options.data().subjectContent;  
491 - //所有文本框恢复到初始化状态  
492 - this.Dataform.answer = [];  
493 - this.OptionVisible = true;  
494 - this.GroupVisible = true;  
495 - },  
496 - //选择题目类型来判断是否显示部分表单  
497 - changeQuestionType(val) {  
498 - if (val == 3) {  
499 - this.OptionVisible = false;  
500 - }  
501 - if (val == 2) {  
502 - this.OptionVisible = true;  
503 - this.Dataform.answer = [];  
504 - this.GroupVisible = false;  
505 - }  
506 - if (val == 1) { 338 + if (value == "del") {
  339 + this.DelQuestionBankEventHeadler(val);
  340 + }
  341 + },
  342 + //添加分类
  343 + CreateQuestionClassHealder() {
  344 + if(this.loading)return;
  345 + this.loading=true;
  346 +
  347 + this.QuestionClassInfo.Addtime = parseTime(new Date(), "");
  348 + CreateQuestionClass(this.QuestionClassInfo).then((res) => {
  349 + this.getQuestionClassListHeadler();
  350 + this.dialogClassIVIsible = false;
  351 + setTimeout(()=>{
  352 + this.loading = false;
  353 + },1000);
  354 + });
  355 + },
  356 + //获取选择的题目详细信息
  357 + GetQuestionBankByIdHeadler(id) {
  358 + GetQuestionBankById(id).then((res) => {
  359 +
  360 + var d = this.QuestionClass.find(o=>o.id==res.data.data.QuestionClassId);
  361 + if(d)this.FormClassType = d.ClassType;
  362 + this.changeQuestionType(res.data.data.subjectType); //这里先初始化编辑显示内容
  363 + this.Dataform = res.data.data; //内容赋值
  364 + this.subjectContent = JSON.parse(res.data.data.subjectContent); //赋值选项
  365 + if (res.data.data.subjectType == 1) {
  366 + this.Dataform.answer = res.data.data.answer.split(",")[0]; //赋值答案
  367 + } else {
  368 + this.Dataform.answer = res.data.data.answer.split(","); //赋值答案
  369 + }
  370 + this.dialogsubjectlVisible = true;
  371 + });
  372 + },
  373 + showClassDialog(node) {
  374 + this.dialogClassIVIsible = true;
  375 + console.log(node);
  376 + this.QuestionClassInfo.ParentId = node.data.value;
  377 + // alert(this.QuestionClassInfo.ParentId);
  378 + },
  379 + //关闭弹框的事件
  380 + closeDialog() {
  381 + //初始化数据
  382 + this.Dataform = this.$options.data().Dataform;
  383 + this.subjectContent = this.$options.data().subjectContent;
  384 + //所有文本框恢复到初始化状态
507 this.Dataform.answer = []; 385 this.Dataform.answer = [];
508 this.OptionVisible = true; 386 this.OptionVisible = true;
509 this.GroupVisible = true; 387 this.GroupVisible = true;
510 - }  
511 - },  
512 - headerStyle({ row, column, rowIndex, columnIndex }) {  
513 - return "tableStyle";  
514 - },  
515 - Addlist() {  
516 - if (this.subjectContent.length < 4) {  
517 - var alphabet = String.fromCharCode(  
518 - 64 + parseInt(this.subjectContent.length + 1)  
519 - );  
520 - this.subjectContent.push({  
521 - option: alphabet,  
522 - title: "", 388 + },
  389 + //选择题目类型来判断是否显示部分表单
  390 + changeQuestionType(val) {
  391 + if (val == 3) {
  392 + this.OptionVisible = false;
  393 + }
  394 + if (val == 2) {
  395 + this.OptionVisible = true;
  396 + this.Dataform.answer = [];
  397 + this.GroupVisible = false;
  398 +
  399 + }
  400 + if (val == 1) {
  401 + this.Dataform.answer = [];
  402 + this.OptionVisible = true;
  403 + this.GroupVisible = true;
  404 + }
  405 + },
  406 + headerStyle({ row, column, rowIndex, columnIndex }) {
  407 + return "tableStyle";
  408 + },
  409 + Addlist() {
  410 + if (this.subjectContent.length < 4) {
  411 + var alphabet = String.fromCharCode(
  412 + 64 + parseInt(this.subjectContent.length + 1)
  413 + );
  414 + this.subjectContent.push({
  415 + option: alphabet,
  416 + title: "",
  417 + });
  418 + } else {
  419 + this.$confirm("系统暂时只支持4个答案!", "消息");
  420 + }
  421 + },
  422 + RemoveList(val) {
  423 + this.subjectContent.splice(val.$index, 1);
  424 + this.subjectContent.forEach((item, index) => {
  425 + item.option = String.fromCharCode(64 + parseInt(index + 1));
523 }); 426 });
524 - } else {  
525 - this.$confirm("系统暂时只支持4个答案!", "消息");  
526 - }  
527 - },  
528 - RemoveList(val) {  
529 - this.subjectContent.splice(val.$index, 1);  
530 - this.subjectContent.forEach((item, index) => {  
531 - item.option = String.fromCharCode(64 + parseInt(index + 1));  
532 - });  
533 - },  
534 - handleNodeClick(val) {  
535 - this.parameter.QuestionClassId = val.value;  
536 - this.parameter.pageIndex = 1;  
537 - this.GetList();  
538 - },  
539 - DelQuestionBankEventHeadler(id) {  
540 - this.$confirm("确定删除该试题?", "消息", {  
541 - confirmButtonText: "确认",  
542 - cancelButtonText: "取消",  
543 - callback: (action) => {  
544 - if (action == "confirm") {  
545 - DelQuestionBankEvent(id).then((res) => {  
546 - if (res.data.code == 200) {  
547 - this.$confirm(res.data.message, "消息");  
548 - this.GetList();  
549 - }  
550 - }); 427 + },
  428 + handleNodeClick(val) {
  429 + if(this.loading)return;
  430 + this.parameter.QuestionClassId = val.value;
  431 + this.parameter.pageIndex = 1;
  432 + this.GetList();
  433 + },
  434 + DelQuestionBankEventHeadler(id) {
  435 + this.$confirm("确定删除该试题?", "消息", {
  436 + confirmButtonText: "确认",
  437 + cancelButtonText: "取消",
  438 + callback: (action) => {
  439 + if (action == "confirm") {
  440 + DelQuestionBankEvent(id).then((res) => {
  441 + if (res.data.code == 200) {
  442 + this.$confirm(res.data.message, "消息");
  443 + this.GetList();
  444 + }
  445 + });
  446 + }
  447 + },
  448 + });
  449 + },
  450 + EditQuestionHeadler() {
  451 + let reg = new RegExp('"', "g");
  452 + //this.Dataform.subjectContent = JSON.stringify(this.subjectContent).replace(reg, "\"");
  453 + this.Dataform.subjectContent = this.subjectContent;
  454 + if (typeof this.Dataform.answer != "string")
  455 + //判断是否为字符串
  456 + this.Dataform.answer = this.Dataform.answer.join(",");
  457 + var _this = this;
  458 + EditQuestion(this.Dataform).then((res) => {
  459 + if (res.data.code == 200) {
  460 + _this.GetList();
  461 + this.$message(res.data.message);
  462 + setTimeout(function () {
  463 + _this.dialogsubjectlVisible = false;
  464 + }, 10);
551 } 465 }
552 - },  
553 - });  
554 - },  
555 - EditQuestionHeadler() {  
556 - let reg = new RegExp('"', "g");  
557 - //this.Dataform.subjectContent = JSON.stringify(this.subjectContent).replace(reg, "\"");  
558 - this.Dataform.subjectContent = this.subjectContent;  
559 - if (typeof this.Dataform.answer != "string")  
560 - //判断是否为字符串  
561 - this.Dataform.answer = this.Dataform.answer.join(",");  
562 - var _this = this;  
563 - EditQuestion(this.Dataform).then((res) => {  
564 - if (res.data.code == 200) {  
565 - _this.GetList();  
566 - this.$message(res.data.message);  
567 - setTimeout(function () {  
568 - _this.dialogsubjectlVisible = false;  
569 - }, 10);  
570 - }  
571 - });  
572 - },  
573 - GetList() {  
574 - let _this = this;  
575 - getQuestionList(_this.parameter).then((res) => {  
576 - _this.QuestList = res.data.data.rows;  
577 - _this.Count = res.data.data.total;  
578 - _this.$forceUpdate();  
579 - });  
580 - },  
581 - currentchange(page) {  
582 - this.parameter.pageIndex = page;  
583 - this.GetList();  
584 - },  
585 - getSubTree(id, list) {  
586 - let result = [];  
587 - result = list.filter((t) => t.ParentId == id);  
588 - if (result.length) {  
589 - result = result.map((item) => {  
590 - item.children = this.getSubTree(item.id, list);  
591 - return item;  
592 }); 466 });
593 - }  
594 - return result;  
595 - },  
596 - getQuestionClassListHeadler() {  
597 - let _this = this;  
598 - getQuestionClassList().then((res) => {  
599 - let list = res.data.data;  
600 - list = list.map((t) => {  
601 - t.value = t.id;  
602 - t.label = t.ClassificationName;  
603 - return t; 467 + },
  468 + GetList() {
  469 + let _this = this;
  470 + getQuestionList(_this.parameter).then((res) => {
  471 + _this.QuestList = res.data.data.rows;
  472 + _this.Count = res.data.data.total;
  473 + _this.$forceUpdate();
604 }); 474 });
605 - let firstClass = list.find((t) => t.id == 6);  
606 - firstClass.children = this.getSubTree(6, list);  
607 - let secondClass = list.find((t) => t.id == 1);  
608 - secondClass.children = this.getSubTree(1, list);  
609 - this.QuestionClass = list; 475 + },
  476 + currentchange(page) {
  477 + this.parameter.pageIndex = page;
  478 + this.GetList();
  479 + },
  480 + getSubTree(id, list) {
  481 + let result = [];
  482 + result = list.filter((t) => t.ParentId == id);
  483 + if (result.length) {
  484 + result = result.map((item) => {
  485 + item.children = this.getSubTree(item.id, list);
  486 + return item;
  487 + });
  488 + }
  489 + return result;
  490 + },
  491 + getQuestionClassListHeadler() {
  492 + let _this = this;
  493 + getQuestionClassList().then((res) => {
  494 + let list = res.data.data;
  495 + list = list.map((t) => {
  496 + t.value = t.id;
  497 + t.label = t.ClassificationName;
  498 + return t;
  499 + });
  500 + let firstClass = list.find((t) => t.id == 6);
  501 + firstClass.children = this.getSubTree(6, list);
  502 + let secondClass = list.find((t) => t.id == 1);
  503 + secondClass.children = this.getSubTree(1, list);
  504 + this.QuestionClass = list;
610 505
611 - this.firstTreeData = [firstClass];  
612 - this.secondTreeData = [secondClass];  
613 - }); 506 + this.firstTreeData = [firstClass];
  507 + this.secondTreeData = [secondClass];
  508 + });
  509 + },
614 }, 510 },
615 - },  
616 -}; 511 + };
617 </script> 512 </script>
618 <style scoped="scoped"> 513 <style scoped="scoped">
619 -/deep/.cell {  
620 - padding-left: 0px;  
621 -}  
622 -/deep/.el-form-item {  
623 - margin-bottom: 5px;  
624 -}  
625 -/deep/.el-radio {  
626 - margin-right: 10px;  
627 -}  
628 -/deep/.el-radio__input.is-checked .el-radio__inner {  
629 - border-color: #409eff;  
630 - background-color: #409eff;  
631 -}  
632 -/deep/.el-radio__input.is-checked + .el-radio__label {  
633 - color: #409eff;  
634 - font-weight: bold;  
635 -}  
636 -/deep/.tableStyle {  
637 - background-color: #304156 !important;  
638 - color: #fff;  
639 - font-weight: 400;  
640 -}  
641 -.QuestDiv {  
642 - width: 24%;  
643 - float: left;  
644 - min-height: 50px;  
645 - border: 1px solid #cdcdcd;  
646 - margin-right: 10px;  
647 - box-shadow: 0 0 10px #808080;  
648 - border-radius: 8px;  
649 - min-height: 100px;  
650 - background-color: #fff;  
651 - opacity: 0.8;  
652 - margin-bottom: 10px;  
653 - height: 313px;  
654 -}  
655 -.clear {  
656 - clear: both;  
657 - margin-bottom: 10px;  
658 -}  
659 -.font-color {  
660 - background-color: #ae1e15 !important;  
661 - color: #fff;  
662 - box-shadow: 0 0 5px #ae1e15;  
663 -}  
664 -/deep/.el-input-group__prepend {  
665 - font-weight: bold;  
666 - width: 30px;  
667 - text-align: center;  
668 - background: #409eff;  
669 - color: #fff;  
670 -}  
671 -.optionInput {  
672 - float: left;  
673 - width: 620px !important;  
674 -}  
675 -.el-icon {  
676 - font-size: 20px;  
677 - line-height: 40px;  
678 - margin: 0 5px;  
679 - cursor: pointer;  
680 - color: #409eff !important;  
681 -}  
682 ->>> .subjectContentClass .el-checkbox__label {  
683 - padding-right: 10px !important;  
684 -}  
685 -.seetingsDiv {  
686 - width: 100%;  
687 - height: 60px;  
688 - background: #efefef;  
689 - line-height: 60px;  
690 - border-radius: 5px;  
691 - box-shadow: 0 0 5px #cdcdcd;  
692 -}  
693 -.seetingsDiv button {  
694 - background-color: #304156;  
695 - border: 0px;  
696 - margin-left: 10px;  
697 - box-shadow: 0 0 5px #cdcdcd;  
698 - float: right;  
699 - margin-top: 12px;  
700 - margin-right: 10px;  
701 -}  
702 -.areadiv {  
703 - background-color: #efefef;  
704 - border-radius: 5px;  
705 - box-shadow: 0 0 5px #efefef;  
706 -}  
707 -.TreeHeader {  
708 - background-color: #304156;  
709 - height: 60px;  
710 - border-radius: 5px;  
711 - box-shadow: 0 0 10px #efefef;  
712 - line-height: 60px;  
713 - color: #fff;  
714 - padding-left: 10px;  
715 -}  
716 -.classbtn {  
717 - float: right;  
718 - margin: 11px 10px 0 0;  
719 - height: 35px;  
720 - line-height: 12px;  
721 -}  
722 -.eltree {  
723 - background-color: #efefef;  
724 -}  
725 -/deep/.el-tree-node__content {  
726 - min-height: 40px;  
727 -}  
728 -.custom-tree-node {  
729 - flex: 1;  
730 - display: flex;  
731 - align-items: center;  
732 - justify-content: space-between;  
733 - font-size: 14px;  
734 - padding-right: 8px;  
735 -}  
736 -</style> 514 + /deep/.cell {
  515 + padding-left: 0px;
  516 + }
  517 +
  518 + /deep/.el-form-item {
  519 + margin-bottom: 5px;
  520 + }
  521 +
  522 + /deep/.el-radio {
  523 + margin-right: 10px;
  524 + }
  525 +
  526 + /deep/.el-radio__input.is-checked .el-radio__inner {
  527 + border-color: #409eff;
  528 + background-color: #409eff;
  529 + }
  530 +
  531 + /deep/.el-radio__input.is-checked+.el-radio__label {
  532 + color: #409eff;
  533 + font-weight: bold;
  534 + }
  535 +
  536 + /deep/.tableStyle {
  537 + background-color: #304156 !important;
  538 + color: #fff;
  539 + font-weight: 400;
  540 + }
  541 +
  542 + .QuestDiv {
  543 + width: 24%;
  544 + float: left;
  545 + min-height: 50px;
  546 + border: 1px solid #cdcdcd;
  547 + margin-right: 10px;
  548 + box-shadow: 0 0 10px #808080;
  549 + border-radius: 8px;
  550 + min-height: 100px;
  551 + background-color: #fff;
  552 + opacity: 0.8;
  553 + margin-bottom: 10px;
  554 + height: 313px;
  555 + }
  556 +
  557 + .clear {
  558 + clear: both;
  559 + margin-bottom: 10px;
  560 + }
  561 +
  562 + .font-color {
  563 + background-color: #ae1e15 !important;
  564 + color: #fff;
  565 + box-shadow: 0 0 5px #ae1e15;
  566 + }
  567 +
  568 + /deep/.el-input-group__prepend {
  569 + font-weight: bold;
  570 + width: 30px;
  571 + text-align: center;
  572 + background: #409eff;
  573 + color: #fff;
  574 + }
  575 +
  576 + .optionInput {
  577 + float: left;
  578 + width: 620px !important;
  579 + }
  580 +
  581 + .el-icon {
  582 + font-size: 20px;
  583 + line-height: 40px;
  584 + margin: 0 5px;
  585 + cursor: pointer;
  586 + color: #409eff !important;
  587 + }
  588 +
  589 + >>>.subjectContentClass .el-checkbox__label {
  590 + padding-right: 10px !important;
  591 + }
  592 +
  593 + .seetingsDiv {
  594 + width: 100%;
  595 + height: 60px;
  596 + background: #efefef;
  597 + line-height: 60px;
  598 + border-radius: 5px;
  599 + box-shadow: 0 0 5px #cdcdcd;
  600 + }
  601 +
  602 + .seetingsDiv button {
  603 + background-color: #304156;
  604 + border: 0px;
  605 + margin-left: 10px;
  606 + box-shadow: 0 0 5px #cdcdcd;
  607 + float: right;
  608 + margin-top: 12px;
  609 + margin-right: 10px;
  610 + }
  611 +
  612 + .areadiv {
  613 + background-color: #efefef;
  614 + border-radius: 5px;
  615 + box-shadow: 0 0 5px #efefef;
  616 + }
  617 +
  618 + .TreeHeader {
  619 + background-color: #304156;
  620 + height: 60px;
  621 + border-radius: 5px;
  622 + box-shadow: 0 0 10px #efefef;
  623 + line-height: 60px;
  624 + color: #fff;
  625 + padding-left: 10px;
  626 + }
  627 +
  628 + .classbtn {
  629 + float: right;
  630 + margin: 11px 10px 0 0;
  631 + height: 35px;
  632 + line-height: 12px;
  633 + }
  634 +
  635 + .eltree {
  636 + background-color: #efefef;
  637 + }
  638 +
  639 + /deep/.el-tree-node__content {
  640 + min-height: 40px;
  641 + }
  642 +
  643 + .custom-tree-node {
  644 + flex: 1;
  645 + display: flex;
  646 + align-items: center;
  647 + justify-content: space-between;
  648 + font-size: 14px;
  649 + padding-right: 8px;
  650 + }
  651 +</style>
737 \ No newline at end of file 652 \ No newline at end of file
src/views/TestPaper/ManualTestPaper.vue
@@ -10,10 +10,12 @@ @@ -10,10 +10,12 @@
10 <div style="padding:0 10px"> 10 <div style="padding:0 10px">
11 <el-input size="small" placeholder="输入关键字搜索" v-model="parameter.keyWord"></el-input> 11 <el-input size="small" placeholder="输入关键字搜索" v-model="parameter.keyWord"></el-input>
12 </div> 12 </div>
  13 +
13 <draggable :options="{animation:380,filter:'.unmover'}" group="itxst" v-model="arr1" @end="end1" 14 <draggable :options="{animation:380,filter:'.unmover'}" group="itxst" v-model="arr1" @end="end1"
14 @add="RemoveHere" :move="onMove" class="infinite-list" :style="{'height':contentHeight-80+'px'}" 15 @add="RemoveHere" :move="onMove" class="infinite-list" :style="{'height':contentHeight-80+'px'}"
15 infinite-scroll-disabled="disabled" v-infinite-scroll="load" style="overflow:auto"> 16 infinite-scroll-disabled="disabled" v-infinite-scroll="load" style="overflow:auto">
16 - <li v-for="i in arr1" class="infinite-list-item" :key="i.id">{{ i.subject }}</li> 17 + <li v-for="i in arr1" class="infinite-list-item" :key="i.id" v-if="!classarr.some(o=>o == i.id)">{{
  18 + i.subject }}</li>
17 <p v-if="loading" style="text-align: center;color: #cdcdcd;" class="unmover">加载中...</p> 19 <p v-if="loading" style="text-align: center;color: #cdcdcd;" class="unmover">加载中...</p>
18 <p v-if="noMore" style="text-align: center;color: #cdcdcd;" class="unmover">没有更多了</p> 20 <p v-if="noMore" style="text-align: center;color: #cdcdcd;" class="unmover">没有更多了</p>
19 </draggable> 21 </draggable>
@@ -28,6 +30,7 @@ @@ -28,6 +30,7 @@
28 <i :class="{'el-icon-edit': !edit, 'el-icon-check': edit}" @click="edit = !edit" 30 <i :class="{'el-icon-edit': !edit, 'el-icon-check': edit}" @click="edit = !edit"
29 style="margin-left: 5px;cursor: pointer;"></i> 31 style="margin-left: 5px;cursor: pointer;"></i>
30 </div> 32 </div>
  33 +
31 <draggable :options="{animation:380}" group="itxst" v-model="arr2" class="infinite-list" @end="end2" 34 <draggable :options="{animation:380}" group="itxst" v-model="arr2" class="infinite-list" @end="end2"
32 @add="ComeHere" :style="{'height':contentHeight-60+'px'}" style="overflow:auto;padding-top: 10px;"> 35 @add="ComeHere" :style="{'height':contentHeight-60+'px'}" style="overflow:auto;padding-top: 10px;">
33 <li v-for="i in arr2" class="infinite-list-item"> 36 <li v-for="i in arr2" class="infinite-list-item">
@@ -38,6 +41,8 @@ @@ -38,6 +41,8 @@
38 </li> 41 </li>
39 </li> 42 </li>
40 </draggable> 43 </draggable>
  44 +
  45 +
41 </div> 46 </div>
42 </el-col> 47 </el-col>
43 <el-col :span="8" :style="{'height':contentHeight+'px'}"> 48 <el-col :span="8" :style="{'height':contentHeight+'px'}">
@@ -56,7 +61,7 @@ @@ -56,7 +61,7 @@
56 <span style="margin-right: 10px;">主观题:{{TestPaper.SubjectiveNumber}}</span> 61 <span style="margin-right: 10px;">主观题:{{TestPaper.SubjectiveNumber}}</span>
57 </el-form-item> 62 </el-form-item>
58 <el-form-item label="题目总分:" class="el-form-item-custom"> 63 <el-form-item label="题目总分:" class="el-form-item-custom">
59 - {{TestPaper.TotalScore}} 64 + {{TestPaper.TotalScore || ''}}
60 </el-form-item> 65 </el-form-item>
61 66
62 67
@@ -114,6 +119,7 @@ @@ -114,6 +119,7 @@
114 <script> 119 <script>
115 import draggable from "vuedraggable"; 120 import draggable from "vuedraggable";
116 import { getQuestionClassList, getQuestionList } from "@/api/QuestionBank"; 121 import { getQuestionClassList, getQuestionList } from "@/api/QuestionBank";
  122 + import { GetQuestionClassByType } from "@/api/QuestionClass";
117 import { EditTestPaper, GetToplevel } from "@/api/TestPaper"; 123 import { EditTestPaper, GetToplevel } from "@/api/TestPaper";
118 import { formatTime } from '@/utils/util' 124 import { formatTime } from '@/utils/util'
119 export default { 125 export default {
@@ -123,6 +129,7 @@ @@ -123,6 +129,7 @@
123 }, 129 },
124 data() { 130 data() {
125 return { 131 return {
  132 + loadingType:false,
126 activeTab: "6", 133 activeTab: "6",
127 parameter: { 134 parameter: {
128 pageIndex: 0, 135 pageIndex: 0,
@@ -138,6 +145,7 @@ @@ -138,6 +145,7 @@
138 edit: false, 145 edit: false,
139 arr1: [], 146 arr1: [],
140 arr2: [], 147 arr2: [],
  148 + classarr: [],
141 moveId: -1, 149 moveId: -1,
142 TestPaper: { 150 TestPaper: {
143 TestPaperTitle: "未命名试卷标题", 151 TestPaperTitle: "未命名试卷标题",
@@ -215,7 +223,7 @@ @@ -215,7 +223,7 @@
215 methods: { 223 methods: {
216 changetimestartend(val, aa) { 224 changetimestartend(val, aa) {
217 this.TestPaper.EffectiveStartTime = formatTime(val[0]) 225 this.TestPaper.EffectiveStartTime = formatTime(val[0])
218 - this.TestPaper.EffectiveEndTime = formatTime(val[1]) 226 + this.TestPaper.EffectiveEndTime = formatTime(val[1])
219 }, 227 },
220 search() { 228 search() {
221 this.parameter.pageIndex = 1; 229 this.parameter.pageIndex = 1;
@@ -223,6 +231,7 @@ @@ -223,6 +231,7 @@
223 this.GetList(); 231 this.GetList();
224 }, 232 },
225 SubmitTestPaper() { 233 SubmitTestPaper() {
  234 + var d = this.TestPaper;
226 if (this.arr2.length > 0) { 235 if (this.arr2.length > 0) {
227 EditTestPaper(this.TestPaper).then((res) => { 236 EditTestPaper(this.TestPaper).then((res) => {
228 if (res.data.code == 200) { 237 if (res.data.code == 200) {
@@ -242,16 +251,32 @@ @@ -242,16 +251,32 @@
242 this.loading = false; 251 this.loading = false;
243 }, 252 },
244 GetList() { 253 GetList() {
245 - getQuestionList(this.parameter).then((res) => {  
246 - if (this.parameter.pageIndex == 1) {  
247 - this.arr1 = [];  
248 - }  
249 - res.data.data.rows.forEach((item, i) => {  
250 - this.arr1.push(item); 254 +
  255 + if (this.parameter.QuestionClassId == '1') {
  256 + if(!this.loadingType)
  257 + GetQuestionClassByType({ ClassType: 2 }).then(res => {
  258 + var classarr = res.data.data || [];
  259 + this.arr1 = classarr.map(rs => {
  260 + rs.subject = rs.subjectName = rs.ClassificationName;
  261 + rs.type = 'wd';
  262 + rs.subjectContent = "[]";
  263 + return rs;
  264 + });
  265 + this.loadingType = true;
251 }); 266 });
252 - this.count = res.data.data.total;  
253 - this.$forceUpdate();  
254 - }); 267 + }
  268 + else {
  269 + getQuestionList(this.parameter).then((res) => {
  270 + if (this.parameter.pageIndex == 1) {
  271 + this.arr1 = [];
  272 + }
  273 + res.data.data.rows.forEach((item, i) => {
  274 + this.arr1.push(item);
  275 + });
  276 + this.count = res.data.data.total;
  277 + this.$forceUpdate();
  278 + });
  279 + }
255 }, 280 },
256 end1(e) { 281 end1(e) {
257 var that = this; 282 var that = this;
@@ -287,6 +312,7 @@ @@ -287,6 +312,7 @@
287 }, 312 },
288 //从左边添加到右边 313 //从左边添加到右边
289 ComeHere(e) { 314 ComeHere(e) {
  315 + var d = e.item._underlying_vm_;
290 if (e.item._underlying_vm_.subjectType == 1) { 316 if (e.item._underlying_vm_.subjectType == 1) {
291 this.TestPaper.SingleNumber += 1; 317 this.TestPaper.SingleNumber += 1;
292 } 318 }
@@ -299,6 +325,33 @@ @@ -299,6 +325,33 @@
299 this.TestPaper.TotalScore += e.item._underlying_vm_.fraction; 325 this.TestPaper.TotalScore += e.item._underlying_vm_.fraction;
300 326
301 this.TestPaper.QuestionBankIds = this.arr2.map((u) => u.id); 327 this.TestPaper.QuestionBankIds = this.arr2.map((u) => u.id);
  328 +
  329 + if (d.type == 'wd') {
  330 + getQuestionList({
  331 + QuestionClassId: d.id,
  332 + PageIndex: 1,
  333 + PageSize: 1000,
  334 + }).then(res => {
  335 + var data = res.data.data.rows || [];
  336 + this.arr2 = this.arr2.filter(o => o.type != 'wd');
  337 + // this.arr1.splice(this.arr1.findIndex(o=>o.id == d.id),1)
  338 + this.classarr.push(d.id);
  339 + // var test = this.arr2;
  340 + this.arr2.push(...data);
  341 + data.forEach(rs => {
  342 + if (rs.subjectType == 1) {
  343 + this.TestPaper.SingleNumber += 1;
  344 + }
  345 + if (rs.subjectType == 2) {
  346 + this.TestPaper.MultipleNumber += 1;
  347 + }
  348 + if (rs.subjectType == 3) {
  349 + this.TestPaper.SubjectiveNumber += 1;
  350 + }
  351 + });
  352 +
  353 + });
  354 + }
302 }, 355 },
303 //右边往左边拖动时的事件 356 //右边往左边拖动时的事件
304 end2(e) { 357 end2(e) {
src/views/TestPaper/TestPaperClass.vue
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 <el-input v-model="TestPaperClassInfo.ClassTitle" placeholder="请输入分类名称"></el-input> 53 <el-input v-model="TestPaperClassInfo.ClassTitle" placeholder="请输入分类名称"></el-input>
54 </el-form-item> 54 </el-form-item>
55 </el-form> 55 </el-form>
56 - <el-button @click="CreateTestPaperClassHealder" style="margin: 10px 0 0 0 ;float:right" type="primary">确定 56 + <el-button @click="CreateTestPaperClassHealder" style="margin: 10px 0 0 0 ;float:right" type="primary" :disabled="loading">确定
57 </el-button> 57 </el-button>
58 <div style="clear: both;"></div> 58 <div style="clear: both;"></div>
59 </el-dialog> 59 </el-dialog>
@@ -74,6 +74,7 @@ @@ -74,6 +74,7 @@
74 export default { 74 export default {
75 data() { 75 data() {
76 return { 76 return {
  77 + loading:false,
77 parameter: { 78 parameter: {
78 pageIndex: 1, 79 pageIndex: 1,
79 pageSize: 20, 80 pageSize: 20,
@@ -110,6 +111,7 @@ this.getTestPaperClassListHeadler(); @@ -110,6 +111,7 @@ this.getTestPaperClassListHeadler();
110 }, 111 },
111 methods: { 112 methods: {
112 CreateTestPaperClassHealder() { 113 CreateTestPaperClassHealder() {
  114 + this.loading = true;
113 if (this.TestPaperClassInfo.id == 0) { 115 if (this.TestPaperClassInfo.id == 0) {
114 this.TestPaperClassInfo.Addtime = parseTime(new Date(), ""); 116 this.TestPaperClassInfo.Addtime = parseTime(new Date(), "");
115 this.TestPaperClassInfo.Addtime = parseTime(new Date(), ""); 117 this.TestPaperClassInfo.Addtime = parseTime(new Date(), "");
@@ -119,6 +121,9 @@ this.getTestPaperClassListHeadler(); @@ -119,6 +121,9 @@ this.getTestPaperClassListHeadler();
119 this.dialogClassIVIsible=false 121 this.dialogClassIVIsible=false
120 this.getTestPaperClassListHeadler(); 122 this.getTestPaperClassListHeadler();
121 123
  124 + setTimeout(()=>{
  125 + this.loading = false;
  126 + },1000);
122 }) 127 })
123 } else { 128 } else {
124 UpdateTestPaperClass(this.TestPaperClassInfo).then(res => { 129 UpdateTestPaperClass(this.TestPaperClassInfo).then(res => {
@@ -126,7 +131,9 @@ this.getTestPaperClassListHeadler(); @@ -126,7 +131,9 @@ this.getTestPaperClassListHeadler();
126 this.dialogClassIVIsible=false 131 this.dialogClassIVIsible=false
127 this.TestPaperClassInfo = {}; 132 this.TestPaperClassInfo = {};
128 this.getTestPaperClassListHeadler(); 133 this.getTestPaperClassListHeadler();
129 - 134 + setTimeout(()=>{
  135 + this.loading = false;
  136 + },1000);
130 }); 137 });
131 } 138 }
132 }, 139 },
src/views/TestPaper/TestPaperList.vue
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 </span> 69 </span>
70 <template #dropdown> 70 <template #dropdown>
71 <el-dropdown-menu> 71 <el-dropdown-menu>
72 - <el-dropdown-item command="addquestion">题目维护</el-dropdown-item> 72 + <!-- <el-dropdown-item command="addquestion">题目维护</el-dropdown-item> -->
73 <el-dropdown-item command="update">编辑</el-dropdown-item> 73 <el-dropdown-item command="update">编辑</el-dropdown-item>
74 <!-- <el-dropdown-item command="b">锁定</el-dropdown-item> --> 74 <!-- <el-dropdown-item command="b">锁定</el-dropdown-item> -->
75 <el-dropdown-item command="del">删除</el-dropdown-item> 75 <el-dropdown-item command="del">删除</el-dropdown-item>
@@ -152,8 +152,10 @@ @@ -152,8 +152,10 @@
152 GetToplevel, 152 GetToplevel,
153 EditTestPaper, 153 EditTestPaper,
154 TestPaperUpdate, 154 TestPaperUpdate,
155 - getTestPaperClassList 155 + getTestPaperClassList,
  156 + DeleteTestPaper
156 } from '@/api/TestPaper' 157 } from '@/api/TestPaper'
  158 + import {formatTime} from '@/utils/util'
157 let that 159 let that
158 export default { 160 export default {
159 data() { 161 data() {
@@ -161,8 +163,8 @@ @@ -161,8 +163,8 @@
161 parameter: { 163 parameter: {
162 pageIndex: 1, 164 pageIndex: 1,
163 pageSize: 12, 165 pageSize: 12,
164 - sort: "id",  
165 - sortOrder: 1, 166 + // sort: "id",
  167 + // sortOrder: 1,
166 keyword: "", 168 keyword: "",
167 QuestionClassId: 0, 169 QuestionClassId: 0,
168 status: 1 170 status: 1
@@ -200,8 +202,8 @@ @@ -200,8 +202,8 @@
200 let parameter = { 202 let parameter = {
201 pageIndex: 1, 203 pageIndex: 1,
202 pageSize: 10000, 204 pageSize: 10000,
203 - sort: "id",  
204 - sortOrder: 1, 205 + // sort: "id",
  206 + // sortOrder: 1,
205 keyword: "" 207 keyword: ""
206 } 208 }
207 getTestPaperClassList(parameter).then(res => { 209 getTestPaperClassList(parameter).then(res => {
@@ -229,7 +231,7 @@ @@ -229,7 +231,7 @@
229 this.getQuestionClassListHeadler(); 231 this.getQuestionClassListHeadler();
230 }, 232 },
231 methods: { 233 methods: {
232 - changetimestartend(val, aa) { 234 + changetimestartend(val, aa) {
233 this.TestPaper.EffectiveStartTime = formatTime(val[0]) 235 this.TestPaper.EffectiveStartTime = formatTime(val[0])
234 this.TestPaper.EffectiveEndTime = formatTime(val[1]) 236 this.TestPaper.EffectiveEndTime = formatTime(val[1])
235 }, 237 },
@@ -331,6 +333,14 @@ @@ -331,6 +333,14 @@
331 } 333 }
332 this.TestPaper = val 334 this.TestPaper = val
333 } 335 }
  336 + else if (value == 'del') {
  337 + DeleteTestPaper(val.id).then(rs=>{
  338 + this.$message.success('删除成功!');
  339 + this.getTestPaperListHeadler();
  340 + })
  341 +
  342 + }
  343 +
334 } 344 }
335 } 345 }
336 } 346 }
src/views/login/index.vue
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <span class="svg-container"> 11 <span class="svg-container">
12 <svg-icon icon-class="user" /> 12 <svg-icon icon-class="user" />
13 </span> 13 </span>
14 - <el-input ref="username" v-model="loginForm.username" placeholder="Username" name="username" type="text" 14 + <el-input ref="username" v-model="loginForm.username" placeholder="用户名" name="username" type="text"
15 tabindex="1" auto-complete="on" /> 15 tabindex="1" auto-complete="on" />
16 </el-form-item> 16 </el-form-item>
17 17
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <svg-icon icon-class="password" /> 20 <svg-icon icon-class="password" />
21 </span> 21 </span>
22 <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" 22 <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
23 - placeholder="Password" name="password" tabindex="2" auto-complete="on" 23 + placeholder="密码" name="password" tabindex="2" auto-complete="on"
24 @keyup.enter.native="handleLogin" /> 24 @keyup.enter.native="handleLogin" />
25 <span class="show-pwd" @click="showPwd"> 25 <span class="show-pwd" @click="showPwd">
26 <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> 26 <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 </el-form-item> 28 </el-form-item>
29 29
30 <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" 30 <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
31 - @click.native.prevent="handleLogin">Login</el-button> 31 + @click.native.prevent="handleLogin">登录</el-button>
32 <div style="text-align: center;color: #FFF;">技术支持:成都安第斯信息技术有限公司</div> 32 <div style="text-align: center;color: #FFF;">技术支持:成都安第斯信息技术有限公司</div>
33 33
34 <!-- <div class="tips"> 34 <!-- <div class="tips">
src/views/user/userlist.vue
@@ -83,9 +83,10 @@ @@ -83,9 +83,10 @@
83 83
84 <el-table-column prop="date" label="近期测试"> 84 <el-table-column prop="date" label="近期测试">
85 <template slot-scope="{row}"> 85 <template slot-scope="{row}">
86 - <span>{{row.TestPaperTitle || '无'}}</span>  
87 <el-button v-if="row.TestPaperTitle || 1==1" type="text" icon="el-icon-star-off" 86 <el-button v-if="row.TestPaperTitle || 1==1" type="text" icon="el-icon-star-off"
88 @click="handleTestHitory(row)"></el-button> 87 @click="handleTestHitory(row)"></el-button>
  88 + <span>{{row.TestPaperTitle || '无'}}</span>
  89 +
89 </template> 90 </template>
90 </el-table-column> 91 </el-table-column>
91 <el-table-column prop="date" label="电话号码"> 92 <el-table-column prop="date" label="电话号码">
@@ -139,6 +140,10 @@ @@ -139,6 +140,10 @@
139 '未命名')}}</el-option> 140 '未命名')}}</el-option>
140 </el-select> 141 </el-select>
141 </el-form-item> 142 </el-form-item>
  143 + <el-form-item label="允许测评次数">
  144 + <el-input v-model="form.NumberOfAnswers" type="number" placeholder="请输入允许测评次数" style="width:30%"/>
  145 + </el-form-item>
  146 +
142 </el-form> 147 </el-form>
143 <div slot="footer" class="dialog-footer"> 148 <div slot="footer" class="dialog-footer">
144 <el-button @click="dialogFormVisible = false">取 消</el-button> 149 <el-button @click="dialogFormVisible = false">取 消</el-button>
@@ -148,6 +153,7 @@ @@ -148,6 +153,7 @@
148 153
149 <el-dialog title="测试历史记录" :visible.sync="dialogTableVisible" @close=" gridData =[]" height="400"> 154 <el-dialog title="测试历史记录" :visible.sync="dialogTableVisible" @close=" gridData =[]" height="400">
150 <el-table :data="gridData" height="400"> 155 <el-table :data="gridData" height="400">
  156 + <el-table-column property="TestPaperTitle" label="试卷" sortable></el-table-column>
151 <el-table-column property="AnswerTime" label="测试时间" width="180" sortable> 157 <el-table-column property="AnswerTime" label="测试时间" width="180" sortable>
152 <template slot-scope="scope"> 158 <template slot-scope="scope">
153 <span>{{ scope.row.AnswerTime.replace("T", " ") }}</span> 159 <span>{{ scope.row.AnswerTime.replace("T", " ") }}</span>
@@ -165,10 +171,11 @@ @@ -165,10 +171,11 @@
165 </template> 171 </template>
166 </el-table-column> 172 </el-table-column>
167 <el-table-column property="Achievement" label="成绩" sortable></el-table-column> 173 <el-table-column property="Achievement" label="成绩" sortable></el-table-column>
  174 +
168 </el-table> 175 </el-table>
169 176
170 <div style="text-align:right;margin-top:20px"> 177 <div style="text-align:right;margin-top:20px">
171 - 178 +
172 <el-button type="primary" @click="dialogTableVisible = false"> 179 <el-button type="primary" @click="dialogTableVisible = false">
173 确定 180 确定
174 </el-button> 181 </el-button>
@@ -177,21 +184,19 @@ @@ -177,21 +184,19 @@
177 184
178 185
179 186
180 - <el-dialog :visible.sync="dialogVisiblecat" :title="dialogTypecat === 'update' ? '修改' : '新增'" width="455px">  
181 - <el-form ref="dataForm" :model="temp" label-width="120px" label-position="right"> 187 + <el-dialog :visible.sync="dialogVisiblecat" :title="dialogTypecat === 'update' ? '修改' : '新增'" width="455px" >
  188 + <el-form ref="dataForm" :model="temp" label-width="120px" label-position="right" >
182 189
183 <el-form-item label="分类名称"> 190 <el-form-item label="分类名称">
184 <el-input v-model="temp.ClassTitle" placeholder="请输入名称" /> 191 <el-input v-model="temp.ClassTitle" placeholder="请输入名称" />
185 </el-form-item> 192 </el-form-item>
186 - <!-- <el-form-item label="备注">  
187 - <el-input v-model="temp.exid1" placeholder="请输入备注" />  
188 - </el-form-item> --> 193 +
189 </el-form> 194 </el-form>
190 <div style="text-align:right;"> 195 <div style="text-align:right;">
191 <el-button type="danger" @click="dialogVisiblecat = false"> 196 <el-button type="danger" @click="dialogVisiblecat = false">
192 取消 197 取消
193 </el-button> 198 </el-button>
194 - <el-button type="primary" @click="submitcat"> 199 + <el-button type="primary" @click="submitcat" :disabled="loading">
195 确定 200 确定
196 </el-button> 201 </el-button>
197 </div> 202 </div>
@@ -247,7 +252,7 @@ @@ -247,7 +252,7 @@
247 </template> 252 </template>
248 253
249 <script> 254 <script>
250 - import { ImportUserByExcel, GetUserList } from "@/api/user"; 255 + import { ImportUserByExcel, GetUserList, AddInvitationAnswerMultiple } from "@/api/user";
251 import { GetUserClassList, UserClassCreate, UserClassUpdate, UserClassDelete } from "@/api/userclass"; 256 import { GetUserClassList, UserClassCreate, UserClassUpdate, UserClassDelete } from "@/api/userclass";
252 import { GetHistoryList } from '@/api/HistoryAnswer' 257 import { GetHistoryList } from '@/api/HistoryAnswer'
253 258
@@ -257,11 +262,15 @@ @@ -257,11 +262,15 @@
257 export default { 262 export default {
258 data() { 263 data() {
259 return { 264 return {
  265 + loading:false,
260 dialogFormVisible: false, 266 dialogFormVisible: false,
261 dialogTableVisible: false, 267 dialogTableVisible: false,
262 dialogTypecat: 'create', 268 dialogTypecat: 'create',
263 testpaperlist: [], 269 testpaperlist: [],
264 - form: {}, 270 + form: {
  271 +
  272 + NumberOfAnswers: 3
  273 + },
265 userList: [], 274 userList: [],
266 data: [], 275 data: [],
267 dialogVisiblecat: false, 276 dialogVisiblecat: false,
@@ -331,10 +340,11 @@ @@ -331,10 +340,11 @@
331 }, 340 },
332 handleShareSend() { 341 handleShareSend() {
333 var rows = this.$refs.userList.selection; 342 var rows = this.$refs.userList.selection;
334 - var ids = rows.map(o => o.id) || []; 343 + var ids = rows.map(o => { return { UserId: o.id } }) || [];
335 var postData = { 344 var postData = {
336 TestPaperId: this.form.TestPaperId, 345 TestPaperId: this.form.TestPaperId,
337 - UserList: ids 346 + NumberOfAnswers: this.form.NumberOfAnswers || 1,
  347 + Users: ids
338 }; 348 };
339 if (!ids || ids.length < 1) { 349 if (!ids || ids.length < 1) {
340 this.$message.warning('请至少选择一个用户进行发送!'); 350 this.$message.warning('请至少选择一个用户进行发送!');
@@ -351,7 +361,7 @@ @@ -351,7 +361,7 @@
351 callback: (action) => { 361 callback: (action) => {
352 if (action == "confirm") { 362 if (action == "confirm") {
353 363
354 - SendUserMessage(postData).then(res => { 364 + AddInvitationAnswerMultiple(postData).then(res => {
355 if (res.data.code == 200) { 365 if (res.data.code == 200) {
356 this.$message.success('发送成功'); 366 this.$message.success('发送成功');
357 this.form = {}; 367 this.form = {};
@@ -401,10 +411,11 @@ @@ -401,10 +411,11 @@
401 this.dialogVisible_content = true; 411 this.dialogVisible_content = true;
402 }, 412 },
403 submitcat() { 413 submitcat() {
404 - // if (this.loading) {  
405 - // return  
406 - // }  
407 - this.loading = true 414 + // this.$loading({lock:true,text:'保存中...'});
  415 + if (this.loading) {
  416 + return
  417 + }
  418 + this.loading = true
408 var postData = this.temp; 419 var postData = this.temp;
409 if (this.dialogTypecat == 'update') { 420 if (this.dialogTypecat == 'update') {
410 if (postData.AddTime == '0001-01-01T00:00:00') postData.AddTime = new Date(); 421 if (postData.AddTime == '0001-01-01T00:00:00') postData.AddTime = new Date();
@@ -414,6 +425,9 @@ @@ -414,6 +425,9 @@
414 type: 'success' 425 type: 'success'
415 }) 426 })
416 this.dialogVisiblecat = false; 427 this.dialogVisiblecat = false;
  428 + setTimeout(()=>{
  429 + this.loading = false;
  430 + },1000);
417 }); 431 });
418 432
419 } 433 }
@@ -429,6 +443,10 @@ @@ -429,6 +443,10 @@
429 this.dialogVisiblecat = false 443 this.dialogVisiblecat = false
430 444
431 this.loadTree(); 445 this.loadTree();
  446 + setTimeout(()=>{
  447 + this.loading = false;
  448 + },1000);
  449 +
432 }); 450 });
433 } 451 }
434 }, 452 },