瀏覽代碼

Merge branch 'develop3.0' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop3.0

liqk 5 年之前
父節點
當前提交
caaaf44ce2

+ 1 - 1
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseClassRadar.vue

@@ -120,7 +120,7 @@
                     ],
                     color: ['#7db41b', '#b1eadb'],
                 };
-
+                 
                 // 绘制图表
                 myRadar.setOption(option);
                 myRadar.resize()

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.css

@@ -27,7 +27,7 @@
         display: flex;
         flex-direction: row;
         align-items: center;
-        justify-content:space-between;
+        justify-content:start;
     }
 
 .exersices-attr {

+ 19 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue

@@ -3,6 +3,20 @@
     <span class="ev-title"><Icon type="ios-paper"/>{{isEdit?'编辑习题':'新建习题'}}</span>
     <Divider />
     <div class="exersices-attr display-flex">
+      <div class="exersices-attr-type my-radio-style">
+        <IconText :text="'选择学段'" :color="'green'" :icon="'md-apps'"></IconText>
+        <Select v-model="exercisePeriod" style="width:200px;margin-top:20px">
+            <Option v-for="(item,index) in periodList" :value="index" :key="index">{{ item }}</Option>
+        </Select>
+      </div>
+      <div class="exersices-attr-diff my-radio-style">
+        <IconText :text="'选择年级'" :color="'red'" :icon="'md-pulse'"></IconText>
+        <Select v-model="exerciseGrade" style="width:200px;margin-top:20px">
+            <Option v-for="(item,index) in gradeList" :value="index" :key="index">{{ item }}</Option>
+        </Select>
+      </div>
+    </div>
+    <div class="exersices-attr display-flex" style="margin-top:30px">
       <div class="exersices-attr-type my-radio-style">
         <IconText :text="'选择题型'" :color="'green'" :icon="'md-apps'"></IconText>
         <RadioGroup v-model="exersicesType" type="button" @on-change="typeChange">
@@ -74,7 +88,11 @@
       return {
         isEdit: false,
         editInfo: {},
-        exersicesType: 'Single',
+          exersicesType: 'Single',
+          exercisePeriod: 0,
+          exerciseGrade: 0,
+          periodList: ['小学','初中','高中'],
+        gradeList:['一年级','二年级','三年级'],
         exersicesDiff: '0',
         analysisContent: '',
         stemContent: '',

+ 20 - 14
TEAMModelOS/ClientApp/src/view/evaluation/index/ExercisesList.css

@@ -1,10 +1,13 @@
 .ev-list-container {
-    user-select:none !important;
-    position:relative;
+    user-select: none !important;
+    position: relative;
+    font-family: '微軟正黑體', 'Heiti TC' !important;
 }
     .ev-list-container .ev-header {
-        background:#fff;
-        padding:10px;
+        background: #fff;
+        padding: 10px;
+        display: flex;
+        align-items: center;
     }
     .ev-list-container .ev-title {
         font-size: 20px;
@@ -191,12 +194,12 @@
     .content-wrap .exercise-item {
         width: 100%;
         height: auto;
-        padding: 20px;
+        padding: 20px 20px 10px 20px;
         margin-top: 10px;
-        font-size: 18px;
+        font-size: 16px;
         font-weight: 600;
         background: #fff;
-        /*box-shadow: 0px 5px 5px 2px rgb(187, 182, 182);*/
+        /*box-shadow: 6px 5px 5px 2px rgb(214, 214, 214);*/
     }
 
         .content-wrap .exercise-item table, .content-wrap .exercise-item td {
@@ -237,15 +240,16 @@
     background: rgb(16, 171, 231);
     border-radius: 5px;
     color: #fff;
-    font-size:13px;
+    font-size:12px;
 }
 .exercise-item .item-type {
     display: inline-block;
     padding: 1px 9px;
-    border: 2px solid rgb(16, 171, 231);
     border-radius: 5px;
-    color: rgb(16, 171, 231);
-    font-size: 13px;
+    color: #fff;
+    font-size: 12px;
+    margin-left: 5px;
+    background: rgb(16, 171, 231);
 }
 
 .exercise-item .item-relevant-points{
@@ -337,7 +341,6 @@
         margin-left: 10px;
         font-weight: bold;
         cursor: pointer;
-        vertical-align: bottom;
         color:rgb(16, 171, 231);
         font-size:14px;
     }
@@ -362,12 +365,15 @@
 
 
     .exercise-item .item-tools .item-tools-info {
-        padding: 0 10px;
         vertical-align: sub;
         color: #868686;
         border-right: 2px solid #d2d2d2;
         font-size:12px;
-    }
+        padding:0 10px;
+     }
+    .exercise-item .item-tools .item-tools-info:first-child {
+        padding-left:0;
+     }
 
 
 .ev-list-container h1, h2, h3, h4, h5, h6 {

+ 137 - 239
TEAMModelOS/ClientApp/src/view/evaluation/index/ExercisesList.vue

@@ -1,208 +1,152 @@
 <template>
     <div class="ev-list-container">
-
-        <div class="ev-header">
-            <Icon type="md-bookmarks" size="30" color="rgb(16, 171, 231)" />
-            <span class="ev-title">题库列表</span>
-            <span class="ev-length">共 {{list.length}} 道题</span>
-        </div>
-        <!-- 筛选部分 -->
-        <div class="filter-wrap">
-            <div class="filter-item">
-                <span class="filter-title">来源:</span>
-                <RadioGroup v-model="filterOrigin" type="button" @on-change="filterOriginChange">
-                    <Radio label="self">个人私有库</Radio>
-                    <Radio label="school">学校公用库</Radio>
-                    <Radio label="system">系统公用库</Radio>
-                </RadioGroup>
+            <div class="ev-header">
+                <Icon type="md-bookmarks" size="30" color="rgb(16, 171, 231)" />
+                <span class="ev-title">题库列表</span>
+                <span class="ev-length">共 {{list.length}} 道题</span>
             </div>
-            <div class="filter-item">
-                <span class="filter-title">题型:</span>
-                <RadioGroup v-model="filterType" type="button" @on-change="filterTypeChange">
-                    <Radio label="all">全部</Radio>
-                    <Radio label="Single">单选</Radio>
-                    <Radio label="Multiple">多选</Radio>
-                    <Radio label="Judge">判断</Radio>
-                    <Radio label="Complete">填空</Radio>
-                    <Radio label="Subjective">问答</Radio>
-                </RadioGroup>
+            <!-- 筛选部分 -->
+            <div class="filter-wrap">
+                <div class="filter-item">
+                    <span class="filter-title">来源:</span>
+                    <RadioGroup v-model="filterOrigin" type="button" @on-change="filterOriginChange">
+                        <Radio label="self">个人私有库</Radio>
+                        <Radio label="school">学校公用库</Radio>
+                        <Radio label="system">系统公用库</Radio>
+                    </RadioGroup>
+                </div>
+                <div class="filter-item">
+                    <span class="filter-title">题型:</span>
+                    <RadioGroup v-model="filterType" type="button" @on-change="filterTypeChange">
+                        <Radio label="all">全部</Radio>
+                        <Radio label="Single">单选</Radio>
+                        <Radio label="Multiple">多选</Radio>
+                        <Radio label="Judge">判断</Radio>
+                        <Radio label="Complete">填空</Radio>
+                        <Radio label="Subjective">问答</Radio>
+                    </RadioGroup>
+                </div>
+                <div class="filter-item">
+                    <span class="filter-title">难度:</span>
+                    <RadioGroup v-model="filterDiff" type="button" @on-change="filterDiffChange">
+                        <Radio label="all">全部</Radio>
+                        <Radio label="0">容易</Radio>
+                        <Radio label="1">较易</Radio>
+                        <Radio label="2">一般</Radio>
+                        <Radio label="3">较难</Radio>
+                        <Radio label="4">困难</Radio>
+                    </RadioGroup>
+                </div>
+                <div class="filter-item">
+                    <span class="filter-title">排序:</span>
+                    <RadioGroup v-model="filterSort" type="button" @on-change="filterSortChange">
+                        <Radio label="0">新增时间<Icon type="md-arrow-round-down" /></Radio>
+                        <Radio label="1">使用次数<Icon type="md-arrow-round-down" /></Radio>
+                    </RadioGroup>
+                </div>
             </div>
-            <div class="filter-item">
-                <span class="filter-title">难度:</span>
-                <RadioGroup v-model="filterDiff" type="button" @on-change="filterDiffChange">
-                    <Radio label="all">全部</Radio>
-                    <Radio label="0">容易</Radio>
-                    <Radio label="1">较易</Radio>
-                    <Radio label="2">一般</Radio>
-                    <Radio label="3">较难</Radio>
-                    <Radio label="4">困难</Radio>
-                </RadioGroup>
+            <div class="ev-list-operation">
+                <Checkbox v-model="isShowAnswer">展示答案与解析</Checkbox>
+                <span class="import-exercise">
+                    <Upload multiple action="api/ImportExercise/uploadWord" :headers="headers" :show-upload-list="isShowUploadList" :on-success="uploadSuccess">
+                        <Button type="info">导入习题</Button>
+                    </Upload>
+                </span>
             </div>
-            <div class="filter-item">
-                <span class="filter-title">排序:</span>
-                <RadioGroup v-model="filterSort" type="button" @on-change="filterSortChange">
-                    <Radio label="0">新增时间<Icon type="md-arrow-round-down" /></Radio>
-                    <Radio label="1">使用次数<Icon type="md-arrow-round-down" /></Radio>
-                </RadioGroup>
+            <!-- 筛选部分结束 -->
+            <!-- 题目列表部分 -->
+            <div v-if="list.length === 0" class="no-data-text">
+                <img src="../../../assets/icon/no_data.svg" width="120" />
+                <span style="margin-top:15px;color:#808080">暂无数据</span>
             </div>
-        </div>
-        <div class="ev-list-operation">
-            <Checkbox v-model="isShowAnswer">展示答案与解析</Checkbox>
-            <span class="import-exercise">
-                <Upload multiple action="api/ImportExercise/uploadWord" :headers="headers" :show-upload-list="isShowUploadList" :on-success="uploadSuccess">
-                    <Button type="info">导入习题</Button>
-                </Upload>
-            </span>
-            <div class="operation-cart" id="questionCart">
-                <Poptip trigger="click" title="我的试题篮" placement="top">
-                    <Badge :count="basketCount" show-zero type="success">
-                        <img src="../../../assets/icon/icon_cart.png" />
-                    </Badge>
-                    <div class="basket-content" slot="content">
-                        <p class="basket-title">共计 {{basketCount}} 道题</p>
-                        <div class="basket-body">
-                            <div class="basket-item">
-                                <span>单选题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Single.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Single.length }} 道 <span class="basket-delete" @click="handleBasketDelete('Single')">删除</span></span>
-                            </div>
-                            <div class="basket-item">
-                                <span>多选题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Multiple.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Multiple.length}} 道 <span class="basket-delete" @click="handleBasketDelete('Multiple')">删除</span></span>
-                            </div>
-                            <div class="basket-item">
-                                <span>判断题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Judge.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Judge.length}} 道 <span class="basket-delete" @click="handleBasketDelete('Judge')">删除</span></span>
+            <div class="content-wrap" v-else>
+                <Loading v-show="importLoading"></Loading>
+
+                <div class="exercise-item" v-for="(item,index) of list" :key="index">
+                    <!-- 题目难度类型以及绑定知识点 -->
+                    <div class="item-types">
+                        <span class="item-difficulty" :style="{backgroundColor:diffColors[item.difficulty || 3]}">{{exersicesDiff[item.difficulty || 3]}}</span>
+                        <span class="item-type">{{exersicesType[item.type]}}</span>
+                        <span class="item-relevant-points">
+                            <span class="item-tools-bind">
+                                <span class="item-tools-tool">
+                                    <span class="item-bind-point">已关联知识点:</span>
+                                    <span class="item-bind-point" v-for="(concept,index) in item.concept" :key="index" v-show="item.concept"><Tag color="success">{{concept.name}}</Tag></span>
+                                    <span class="item-bind-point" v-show="!item.concept">暂未关联</span>
+                                    <Icon type="md-link" size="20" />
+                                    <span @click="handleBindPoint(item.concept || [])">绑定知识点</span>
+                                </span>
+                            </span>
+                        </span>
+                    </div>
+                    <!-- 题干部分 -->
+                    <div class="item-question">
+                        <p>{{index+1}} : <span v-html="item.question"></span></p>
+                    </div>
+                    <!-- 选项部分 -->
+                    <div v-for="(option,optionIndex) in item.option" :key="optionIndex">
+                        <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
+                    </div>
+
+                    <!-- 如果是组合题 -->
+                    <div v-for="(childQuestion,childIndex) in item.children" :key="childIndex">
+                        <div v-if="item.children.length">
+                            <div class="item-question">
+                                <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
                             </div>
-                            <div class="basket-item">
-                                <span>填空题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Complete.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Complete.length}} 道 <span class="basket-delete" @click="handleBasketDelete('Complete')">删除</span></span>
+                            <div v-for="(childOption,childOptionIndex) in childQuestion.option" :key="childOptionIndex">
+                                <p>{{String.fromCharCode(64 + parseInt(childOptionIndex+1))}} : <span v-html="childOption.value"></span></p>
                             </div>
-                            <div class="basket-item">
-                                <span>问答题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Subjective.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Subjective.length}} 道 <span class="basket-delete" @click="handleBasketDelete('Subjective')">删除</span></span>
+                            <div class="item-answer" v-show="isShowAnswer">
+                                <span style="color:#01b4ef">【答案】:</span>
+                                <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type === 'Subjective'"></span>
+                                <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else-if="childQuestion.type === 'Complete'" v-html="answer"></span>
+                                <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else>{{answer}}</span>
                             </div>
-                            <div class="basket-item">
-                                <span>综合题</span>
-                                <Progress :percent="basketList.all.length ? Number((basketList.Compose.length / basketList.all.length)*100) : 0" stroke-color="rgb(16, 171, 231)" hide-info />
-                                <span style="margin-left:10px">{{ basketList.Compose.length}} 道 <span class="basket-delete" @click="handleBasketDelete('Compose')">删除</span></span>
+                            <div class="item-explain" v-show="isShowAnswer">
+                                <span style="color:#01b4ef">【解析】:</span>
+                                <span v-html="childQuestion.explain"></span>
                             </div>
                         </div>
-                        <div :class="[basketList.all.length ? 'basket-footer' : 'basket-footer-no']">
-                            <p @click="handleSubmitPaper">进入组卷中心</p>
-                        </div>
                     </div>
-                </Poptip>
-            </div>
-        </div>
-        <!-- 筛选部分结束 -->
-        <!-- 题目列表部分 -->
-        <div v-if="list.length === 0" class="no-data-text">
-            <img src="../../../assets/icon/no_data.svg" width="120" />
-            <span style="margin-top:15px;color:#808080">暂无数据</span>
-        </div>
-        <div class="content-wrap" v-else>
-            <Loading v-show="importLoading"></Loading>
-
-            <div class="exercise-item" v-for="(item,index) of list" :key="index">
-                <!-- 题目难度类型以及绑定知识点 -->
-                <div class="item-types">
-                    <span class="item-difficulty" :style="{backgroundColor:diffColors[item.difficulty || 3]}">{{exersicesDiff[item.difficulty || 3]}}</span>
-                    <span class="item-type">{{exersicesType[item.type]}}</span>
-                    <span class="item-relevant-points">
-                        <span class="item-tools-bind">
-                            <span class="item-tools-tool">
-                                <span class="item-bind-point">已关联知识点:</span>
-                                <span class="item-bind-point" v-for="(concept,index) in item.concept" :key="index" v-show="item.concept"><Tag color="success">{{concept.name}}</Tag></span>
-                                <span class="item-bind-point" v-show="!item.concept">暂未关联</span>
-                                <Icon type="md-link" size="20" />
-                                <span @click="handleBindPoint(item.concept || [])">绑定知识点</span>
-                            </span>
-                        </span>
-                    </span>
-                </div>
-                <!-- 题干部分 -->
-                <div class="item-question">
-                    <p>{{index+1}} : <span v-html="item.question"></span></p>
-                </div>
-                <!-- 选项部分 -->
-                <div v-for="(option,optionIndex) in item.option" :key="optionIndex">
-                    <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
-                </div>
-
-                <!-- 如果是组合题 -->
-                <div v-for="(childQuestion,childIndex) in item.children" :key="childIndex">
-                    <div v-if="item.children.length">
-                        <div class="item-question">
-                            <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
-                        </div>
-                        <div v-for="(childOption,childOptionIndex) in childQuestion.option" :key="childOptionIndex">
-                            <p>{{String.fromCharCode(64 + parseInt(childOptionIndex+1))}} : <span v-html="childOption.value"></span></p>
-                        </div>
-                        <div class="item-answer" v-show="isShowAnswer">
-                            <span style="color:#01b4ef">【答案】:</span>
-                            <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type === 'Subjective'"></span>
-                            <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else-if="childQuestion.type === 'Complete'" v-html="answer"></span>
-                            <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else>{{answer}}</span>
-                        </div>
-                        <div class="item-explain" v-show="isShowAnswer">
-                            <span style="color:#01b4ef">【解析】:</span>
-                            <span v-html="childQuestion.explain"></span>
+                    <!-- 组合题结束 -->
+                    <!-- 答案展示部分 -->
+                    <div class="item-answer" v-show="item.type !== 'Compose' && isShowAnswer">
+                        <span class="answer-title-line"></span>
+                        <span class="answer-title" @click="showAnswer($event,'answer')">答案:点击展开答案详情</span>
+                        <div class="item-answer-details">
+                            <span v-html="item.answer" v-if="item.type === 'Subjective'"></span>
+                            <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else-if="item.type === 'Complete'" v-html="answer"></span>
+                            <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else>{{answer}}</span>
                         </div>
                     </div>
-                </div>
-                <!-- 组合题结束 -->
-                <!-- 答案展示部分 -->
-                <div class="item-answer" v-show="item.type !== 'Compose'">
-                    <span class="answer-title-line"></span>
-                    <span class="answer-title" @click="showAnswer($event,'answer')">答案:点击展开答案详情</span>
-                    <div class="item-answer-details">
-                        <span v-html="item.answer" v-if="item.type === 'Subjective'"></span>
-                        <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else-if="item.type === 'Complete'" v-html="answer"></span>
-                        <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else>{{answer}}</span>
+                    <!-- 解析部分 -->
+                    <div class="item-explain" v-show="item.type !== 'Compose' && isShowAnswer">
+                        <span class="explain-title-line"></span>
+                        <span class="explain-title" @click="showAnswer($event,'explain')">解析:点击展开解析详情</span>
+                        <div class="item-explain-details">
+                            <span v-html="item.explain"></span>
+                        </div>
                     </div>
-                </div>
-                <!-- 解析部分 -->
-                <div class="item-explain" v-show="item.type !== 'Compose'">
-                    <span class="explain-title-line"></span>
-                    <span class="explain-title" @click="showAnswer($event,'explain')">解析:点击展开解析详情</span>
-                    <div class="item-explain-details">
-                        <span v-html="item.explain"></span>
-                    </div>
-                </div>
-                <!-- 底部题目操作栏 -->
-                <div class="item-tools">
-                    <span class="item-tools-info">来源:浙江省温州市2019年中考数学试卷</span>
-                    <span class="item-tools-info">使用次数:98 次</span>
-                    <span class="item-tools-info" style="border:0">更新时间:2019-07-01</span>
-                    <Button type="info" :style="{backgroundColor:basketList.all.indexOf(item) > -1 ? '#bbbbbb' : ''}" @click="handleChoose(item)">{{basketList.all.indexOf(item) > -1 ? '已选入' : '选题'}} </Button>
-                    <Button type="primary" @click="handleEdit(item)" style="margin-right:10px">编辑题目</Button>
-                    <!--小球-->
-                    <div>
-                        <transition name="drop" @before-enter="beforeDrop" @enter="dropping" @after-enter="afterDrop">
-                            <div class="ball" v-show="ball.show">
-                                <div class="inner inner-hook">
-                                    <img src="../../../assets/icon/icon_paper.png" />
-                                </div>
-                            </div>
-                        </transition>
+                    <!-- 底部题目操作栏 -->
+                    <div class="item-tools">
+                        <span class="item-tools-info">来源:浙江省温州市2019年中考数学试卷</span>
+                        <span class="item-tools-info">使用次数:98 次</span>
+                        <span class="item-tools-info" style="border:0">更新时间:2019-07-01</span>
+                        <!--<Button type="info" :style="{backgroundColor:basketList.all.indexOf(item) > -1 ? '#bbbbbb' : ''}" @click="handleChoose(item)">{{basketList.all.indexOf(item) > -1 ? '已选入' : '选题'}} </Button>-->
+                        <Button type="primary" @click="handleEdit(item)" style="margin-right:10px">编辑题目</Button>
                     </div>
                 </div>
             </div>
-        </div>
 
-        <!-- 底部分页区域 -->
-        <Page :total="totalNum"
-              show-sizer
-              @on-page-size-change="pageSizeChange"
-              @on-change="pageChange"
-              :page-size-opts="[5,10,15,20]" />
-        <Button type="success" @click="backToAdd" style="margin:10px;">返回</Button>
-        <Button type="success" @click="backToPaper" style="margin:10px;">试卷</Button>
+            <!-- 底部分页区域 -->
+            <Page :total="totalNum"
+                  show-sizer
+                  @on-page-size-change="pageSizeChange"
+                  @on-change="pageChange"
+                  :page-size-opts="[5,10,15,20]" />
+            <Button type="success" @click="backToAdd" style="margin:10px;">返回</Button>
+            <Button type="success" @click="backToPaper" style="margin:10px;">试卷</Button>
 
         <!-- 绑定知识点弹窗开始 -->
         <Modal v-model="bindPointModal"
@@ -286,12 +230,11 @@
                 isShowAnswer: true,
                 importLoading: false,
                 tabSelectVal: 'school',
-                ball: { show: false },
                 dropBalls: []
             }
         },
         created() {
-            this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0]
+            //this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0]
             this.list = questions.result.data
             this.totalNum = questions.result.data.length
             if (this.$route.params.exerciseItem) {
@@ -299,53 +242,7 @@
             }
         },
         methods: {
-            // 抛物
-            drop(el) {
-                this.ball.show = true
-                this.ball.el = el
-                this.dropBalls.push(this.ball)
-            },
-
-            /* 购物车小球动画实现 */
-            beforeDrop(el) {
-                let ball = this.ball
-                if (ball.show) {
-                    let rect = ball.el.getBoundingClientRect() // 元素相对于视口的位置
-                    let x = -(window.innerWidth - rect.x - 152)
-                    let y = -(window.innerHeight - rect.top - 22) // 获取y
-                    el.style.display = ''
-                    el.style.webkitTransform = 'translateY(' + y + 'px)' // translateY
-                    el.style.transform = 'translateY(' + y + 'px)'
-                    let inner = el.getElementsByClassName('inner-hook')[0]
-                    inner.style.webkitTransform = 'translateX(' + x + 'px)'
-                    inner.style.transform = 'translateX(' + x + 'px)'
-                }
-            },
 
-             /* 重置小球数量  样式重置 */
-            dropping(el, done) {
-                el.style.webkitTransform = 'translate3d(0,0,0)'
-                el.style.transform = 'translate3d(0,0,0)'
-                let inner = el.getElementsByClassName('inner-hook')[0]
-                inner.style.webkitTransform = 'translate3d(0,0,0)'
-                inner.style.transform = 'translate3d(0,0,0)'
-                el.addEventListener('transitionend', done)
-                let cartClassList = document.getElementById('questionCart').classList
-                cartClassList.add('animated')
-                cartClassList.add('heartBeat')
-            },
-
-             /* 初始化小球 */
-            afterDrop(el) {
-                let ball = this.dropBalls.shift()
-                if (ball) {
-                    ball.show = false
-                    el.style.display = 'none'
-                    let cartClassList = document.getElementById('questionCart').classList
-                    cartClassList.remove('animated')
-                    cartClassList.remove('heartBeat')
-                }
-            },
 
             // 根据题库加载题目
             filterOriginChange(origin) {
@@ -379,9 +276,10 @@
             showAnswer(e, type) {
                 let el = e.currentTarget
                 let isShow = e.currentTarget.nextElementSibling.style.display || 'none'
-                setTimeout(function() {
-                    if (type !== 'explain') {
-                        el.nextElementSibling.style.display = isShow !== 'none' ? 'block' : 'none'
+                setTimeout(function () {
+                    console.log(type)
+                    if (type === 'explain') {
+                        el.nextElementSibling.style.display = isShow !== 'none' ? 'none' : 'block'
                         el.innerHTML = isShow !== 'none' ? '解析:点击收起解析详情' : '解析:点击展开解析详情'
                     } else {
                         el.nextElementSibling.style.display = isShow === 'none' ? 'block' : 'none'
@@ -392,7 +290,7 @@
 
             backToAdd() {
                 this.$router.push({
-                    path: '/createExercises'// 或者路径跳转path: '/addCreditCards',
+                    path: '/createExercises'//  
                 })
             },
 
@@ -408,7 +306,7 @@
                 let end = this.pageSize * page
                 let list = questions.result.data
                 this.list = list.slice(start, end)
-                window.scroll(0, 0)
+                window.scrollTo(0, 0)
             },
 
             // 切换分页Size

+ 7 - 13
TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue

@@ -4,31 +4,24 @@
       <Header :parentToChild="syllabusTitle" :identityselect="identitydata"></Header>
     </div>
     <div class="ev-body">
-      <div class="ev-slide">
+      <!--<div class="ev-slide">
         <div class="ev-slide-school"><Icon type="ios-school" size="26" color="#10abe7" style="vertical-align:sub"/> {{schoolInfo.claimName}}</div>
         <div class="ev-slide-header">选择学段及科目</div>
         <div class="ev-slide-select">
-          <!-- 学段选择部分 -->
           <Select v-model="evPeriodSelect" @on-change="periodChange" label-in-value>
             <Option v-for="item in evPeriodsList" :value="item.code" :key="item.rowKey">{{ item.name }}</Option>
           </Select>
-
-          <!-- 科目选择部分 -->
           <Select v-model="evSubjectSelect" @on-change="subjectChange" label-in-value>
             <Option v-for="item in evSubjectList" :value="item.code" :key="item.rowKey">{{ item.name }}</Option>
           </Select>
         </div>
         <div class="ev-slide-header ev-slide-select-volumes" style="position:relative">
-          <!--<Loading :top="150" :borderWidth="4" v-show="!isLoadingFinish"></Loading>-->
-          <!--<Loading v-show="!isLoadingFinish"></Loading>-->
-
-          <!-- 册别选择部分 -->
           <Select v-model="evVolumeSelect" @on-change="volumeChange" label-in-value placeholder="请选择册别">
             <Option v-for="item in evVolumesList" :value="item.rowKey" :key="item.rowKey">{{ item.gradeName + '' + item.termName }}</Option>
           </Select>
         </div>
         <SyllabusTree :treeDatas="treeData"></SyllabusTree>
-      </div>
+      </div>-->
       <div class="ev-content">
         <router-view />
       </div>
@@ -76,8 +69,8 @@
       }
     },
     created() {
-      this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0].claim[0] // 默认选中第一个学校
-      this.findSchoolPeriodsByDict()
+      //this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0].claim[0] // 默认选中第一个学校
+      //this.findSchoolPeriodsByDict()
     },
     methods: {
       goRouter(name) {
@@ -246,8 +239,9 @@
       }
 
   .ev-body .ev-content {
-      width:calc(100% - 350px);
-  }
+      width:80%;
+      margin:0 auto;
+      }
 
   .slide-menu {
     width:150px;

+ 132 - 16
TEAMModelOS/Controllers/Evaluation/ExamController.cs

@@ -19,6 +19,96 @@ namespace TEAMModelOS.Controllers.Evaluation
         public ExamController(IAzureCosmosDBV3Repository _cosmosDBV3Repository) {
             cosmosDBV3Repository = _cosmosDBV3Repository;
         }
+
+        /// <summary>
+        /// 保存考试信息
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("SaveExamInfo")]
+        public async Task<BaseJosnRPCResponse> SaveExamInfo(JosnRPCRequest<ExamInfo> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            if (string.IsNullOrEmpty(request.@params.id))
+            {
+                request.@params.id = Guid.NewGuid().ToString();
+                await cosmosDBV3Repository.Save(request.@params);
+            }
+            else {
+              await  cosmosDBV3Repository.Update(request.@params);
+            }
+            return builder.Data(request.@params).build();
+        }
+        /// <summary>
+        /// 保存试卷
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("SaveExamPaper")]
+        public async Task<BaseJosnRPCResponse> SaveExamPaper(JosnRPCRequest<ExamPaper> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            if (string.IsNullOrEmpty(request.@params.id))
+            {
+                request.@params.id = Guid.NewGuid().ToString();
+                await cosmosDBV3Repository.Save(request.@params);
+            }
+            else
+            {
+                await cosmosDBV3Repository.Update(request.@params);
+            }
+            return builder.Data(request.@params).build();
+        }
+
+
+        /// <summary>
+        /// 手动挑题
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("Gen")]
+        public async Task<BaseJosnRPCResponse> Gen(JosnRPCRequest<List<ItemInfo>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<string> poins = new List<string>();
+            for (int i = 0; i < 30; i++)
+            {
+                poins.Add(Guid.NewGuid().ToString());
+            }
+            Random rangdomRed = new Random();
+            // Single单选,Multiple多选,Judge判断,Complete填空,Subjective问答,Compose综合
+            List<string> types = new List<string>() { "Single", "Multiple", "Judge", "Complete", "Subjective", "Compose" };
+            List<string> field = new List<string>() { "应用", "综合", "理解", "评鉴", "知识" };
+            foreach (ItemInfo item in request.@params) {
+                item.subject = "Subject_Chinese";
+                item.period = "period_2";
+                item.type = types.OrderBy(x => Guid.NewGuid()).First() ;
+                item.points=new List<string>() { poins.OrderBy(x => Guid.NewGuid()).First() };
+                item.level = rangdomRed.Next(1, 5);
+                item.field = field.OrderBy(x => Guid.NewGuid()).First();
+            }
+            return builder.Data(request.@params).build();
+        }
+
+
+
+        List<string> pins = new List<string>() {
+            "5a569451-d7b6-4bc5-85dc-4c97ba593090", "97752929-bee6-458e-b5ae-af16ee73a1e9",
+            "b32dcb15-9f13-4e8f-9f65-80e55e3b257d", "5160a86b-2d44-466f-bd82-ed08148f6607",
+            "9e6a3b59-bdeb-4b21-90ec-903ef9847864", "6d1f223d-a84e-4fab-b015-fe1c4298834b",
+            "72571322-43d9-4777-b3b1-a6a5a4bf4e10", "bf4707a6-f541-46b9-85b2-82aa6077ba27",
+            "9dd91708-be01-4947-850c-77b88e7cf2ad", "24d9f39f-906a-4ca6-bc4f-8f9307d51d5a",
+            "4acee7e2-434c-4257-9331-8c42fba14a3b", "170125f4-4cfc-40eb-aae4-7a82840a6297",
+            "6b14df14-17ae-4f47-a1e4-16738268feba", "a9c1ada9-232f-4993-bf63-3c279e5ecaac",
+            "4ff7b031-a45c-4b02-921e-933be73bb38a", "a96ebded-aeb0-42c8-ab90-8b1ab8a4a489",
+            "e3564799-3b9a-4b5d-a904-f09565f98890", "64b4326f-1f76-4c7c-8fb7-5940894e2205",
+            "4e43d507-8af1-4b21-b09e-7fe8533104e8", "25032d80-b88c-42c1-8ffd-1a30815859aa",
+            "b1baff75-fdf9-4020-acfb-af6497017f4b", "c6e8bdaf-9738-48f6-bd7f-5bc6d6444684",
+            "d75000f7-168a-4521-b056-780ef38114cc", "f6c768e8-12ea-445c-8df1-750736294a80",
+            "5ac2805d-b31d-44a3-9058-1239d5557270", "49512c48-f38a-452e-8bb9-170728cb271e",
+            "57088641-14d1-498d-ae8e-61627e0d8e4a", "2222f52f-cc3f-4ac3-96b8-638078455f64",
+            "1687d096-4d58-4828-97de-d31e23784b36", "45ae3d97-cd76-4c53-a821-e220367eb2c2" };
+
         /// <summary>
         /// 手动挑题
         /// </summary>
@@ -37,26 +127,19 @@ namespace TEAMModelOS.Controllers.Evaluation
         [HttpPost("Automatic")]
         public async Task<BaseJosnRPCResponse> Automatic(JosnRPCRequest<Compose> request) {
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            if (request.@params.scopeCode.IsNotEmpty()) {
-                dict.Add("scopeCode", request.@params.scopeCode.ToArray());
-            }
-            if (request.@params.period.IsNotEmpty())
-            {
-                dict.Add("period", request.@params.period.ToArray());
-            }
+           
             ///处理知识点均分问题
             int avg = 0;
             Dictionary<string, int> point = new Dictionary<string, int>();
             if (request.@params.points.IsNotEmpty())
             {
                 avg=(int) Math.Ceiling( request.@params.count * 1.0 / request.@params.points.Count);
-                dict.Add("points", request.@params.points.ToArray());
+               
                 foreach (string p in request.@params.points) {
                     point.TryAdd(p, avg);
                 }
             }
-            dict.Add("lite",false);
+            
             List<ItemInfo> retnInfos = new List<ItemInfo>();
             List<ItemInfo> itemInfos = new List<ItemInfo>();
             List<TempItem> tempItems = new List<TempItem>();
@@ -72,6 +155,21 @@ namespace TEAMModelOS.Controllers.Evaluation
                             for (int i = 0; i < custom.count; i++) {
                                 tempItems.Add(new TempItem { level = custom.level, type = quInfo.type });
                             }
+                            Dictionary<string, object> dict = new Dictionary<string, object>();
+                            if (request.@params.scopeCode.IsNotEmpty())
+                            {
+                                dict.Add("scopeCode", request.@params.scopeCode.ToArray());
+                            }
+                            if (request.@params.period.IsNotEmpty())
+                            {
+                                dict.Add("period", request.@params.period.ToArray());
+                            }
+                            if (request.@params.points.IsNotEmpty())
+                            {
+                                dict.Add("points[*]", request.@params.points.ToArray());
+                            }
+                            dict.Add("lite", false);
+                            ///
                             dict.Add("type", quInfo.type);
                             dict.Add("level", custom.level);
                             List<ItemInfo> items = await cosmosDBV3Repository.FindByDict<ItemInfo>(dict);
@@ -82,6 +180,20 @@ namespace TEAMModelOS.Controllers.Evaluation
                         }
                     }
                     else {
+                        Dictionary<string, object> dict = new Dictionary<string, object>();
+                        if (request.@params.scopeCode.IsNotEmpty())
+                        {
+                            dict.Add("scopeCode", request.@params.scopeCode.ToArray());
+                        }
+                        if (request.@params.period.IsNotEmpty())
+                        {
+                            dict.Add("period", request.@params.period.ToArray());
+                        }
+                        if (request.@params.points.IsNotEmpty())
+                        {
+                            dict.Add("points[*]", request.@params.points.ToArray());
+                        }
+                        dict.Add("lite", false);
                         dict.Add("type", quInfo.type);
                         List<ItemInfo> items = await cosmosDBV3Repository.FindByDict<ItemInfo>(dict);
                         //id去重
@@ -101,11 +213,15 @@ namespace TEAMModelOS.Controllers.Evaluation
                                 }
                             }
                             //  余数 取模 随机处理
-                            int mod = quInfo.count % lvls.Count;
-                            for (int m = 0; m < mod; m++) {
-                                int lv = lvls.OrderBy(x => Guid.NewGuid()).Take(1).FirstOrDefault();
-                                tempItems.Add(new TempItem { level = lv, type = quInfo.type });
-                                lvls.Remove(lv);
+                            if (lvls.Count != 0)
+                            {
+                                int mod = quInfo.count % lvls.Count;
+                                for (int m = 0; m < mod; m++)
+                                {
+                                    int lv = lvls.OrderBy(x => Guid.NewGuid()).Take(1).FirstOrDefault();
+                                    tempItems.Add(new TempItem { level = lv, type = quInfo.type });
+                                    lvls.Remove(lv);
+                                }
                             }
                         }
                         //随机
@@ -168,7 +284,7 @@ namespace TEAMModelOS.Controllers.Evaluation
     }
     public  class QuInfo{
         /// <summary>
-        /// 题目类型,单选,多选,判断,填空,问答,综合
+        /// 题目类型,单选,多选,判断,填空,问答,综合  Single单选,Multiple多选,Judge判断,Complete填空,Subjective问答,Compose综合
         /// </summary>
         public string type { get; set; }
         /// <summary>

+ 48 - 0
TEAMModelOS/Controllers/Evaluation/ItemInfoController.cs

@@ -0,0 +1,48 @@
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
+using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
+using TEAMModelOS.Service.Models.Evaluation.Models;
+
+namespace TEAMModelOS.Controllers.Evaluation
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class ItemInfoController : BaseController
+    {
+        private readonly IAzureCosmosDBV3Repository cosmosDBV3Repository;
+        public ItemInfoController(IAzureCosmosDBV3Repository _cosmosDBV3Repository)
+        {
+            cosmosDBV3Repository = _cosmosDBV3Repository;
+        }
+
+        /// <summary>
+        /// 手动挑题
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("SaveAll")]
+        public async Task<BaseJosnRPCResponse> SaveAll(JosnRPCRequest<List<ItemInfo>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            // habook#0001
+            //  HBCN
+            Random rangdomRed = new Random();
+            foreach (ItemInfo item in request.@params) {
+                int rnd = rangdomRed.Next(1, 8);
+                if (rnd == 2 || rnd == 5)
+                {
+                    item.scopeCode = "habook#0001".Replace("#", "");
+                }
+                else {
+                    item.scopeCode = "HBCN";
+                }
+            }
+            return builder.Data(await cosmosDBV3Repository.SaveAll(request.@params)).build();
+        }
+    }
+}