Explorar el Código

Merge branch 'develop' into PL/develop-IES5Finish

Li hace 2 años
padre
commit
dfc510ab6a

+ 4 - 5
TEAMModelBI/ClientApp/src/view/areaServe/areamanage.vue

@@ -2,12 +2,12 @@
   <div class="areamanabox">
     <div class="nowtitle">
       <div class="select-List">
-        <div class="site-box">
+        <!-- <div class="site-box">
           <el-select v-model="siteList.siteValue" placeholder="站点">
             <el-option v-for="item in siteList.list" :key="item.id" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
-        </div>
+        </div> -->
         <div class="province-box">
           <!-- <span>{{$t('areaManages.selector.provinceName')}}:</span> -->
           <el-select v-model="provinceOptions.provinceValue" :placeholder="$t('areaManages.selector.provinceDefault')" @change="areaSelctChange(provinceOptions.provinceValue, 'province')">
@@ -717,7 +717,7 @@ export default {
       console.log(addSchoolitem.value, '当前要添加的')
     }
     //地区选择
-    function areaSelctChange (values, model) {
+    function areaSelctChange (value, model) {
       console.log(originalDatas.value)
       // let value = values.indexOf('省') !== -1 && model === 'province' ? values.slice(0, values.indexOf('省')) : values
       let data = option
@@ -1180,8 +1180,7 @@ export default {
 }
 
 .city-box,
-.dist-box,
-.province-box {
+.dist-box {
   margin-left: 1%;
 }
 

+ 156 - 387
TEAMModelBI/ClientApp/src/view/index/index.vue

@@ -1,289 +1,60 @@
 <template>
   <!--首页(管理员以及研发页面)-->
   <div class="eachSite">
-    <el-tabs v-model="siteValue" class="demo-tabs" @tab-click="handleClick" type="card">
-      <el-tab-pane label="中国" name="china">
-        <div class="statisticsbox-all" v-if="siteValue==='china'">
-          <c-scrollbar ref="scrollbarRef" width="100%" height="100%" trigger="hover" direction="y">
-            <div class="headerinbox" v-if="screen.icon === '#icon-tuichuquanping-fill-copy'">
-              <div class="headerinbox-title">TEAM Model·BI 数据监控系统</div>
-              <div class="showTime" @click="detectionsize(screen.state)">
-                <svg class="skip" aria-hidden="true">
-                  <use :xlink:href="screen.icon"></use>
-                </svg>
-              </div>
-            </div>
-            <div class="statisboxs">
-              <div class="top-resource">
-                <div class="basics-databox">
-                  <div class="top-aspects" v-for="(item, index) in areaAspectsData" :key="index">
-                    <div :class="['left-top-icon']">
-                      <svg class="top-header-icon" aria-hidden="true">
-                        <use :xlink:href="item.icon"></use>
-                      </svg>
-                    </div>
-                    <div class="right-top-text">
-                      <p class="right-top-num">
-                        {{ item.num }}
-                      <div class="right-top-num-increase" v-show="item.classname === 'online'">
-                        <div class="right-top-num-increase-teach"><span class="right-top-num-increase-teach">教师:</span><span>{{ item.teach }}</span>
-                        </div>
-                        <div class="right-top-num-increase-student"><span class="right-top-num-increase-teach">学生:</span><span>{{ item.student}}</span>
-                        </div>
-                      </div>
-                      <div class="right-top-num-increase" v-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '1'">
-                        <span class="right-top-num-flag">+</span>
-                        <span class="right-top-num-nums">{{ item.increase }}</span>
-                      </div>
-                      <div class="right-top-num-reduce" v-else-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '2'">
-                        <span class="right-top-num-flag">-</span>
-                        <span class="right-top-num-nums">4</span>
-                      </div>
-                      </p>
-                      <p class="right-top-title">
-                      <div class="title-left">{{ item.title }}</div>
-                      <!-- <div class="title-right">
-                            <p><span>较昨日增长</span><span class="last-increase">4.4%</span></p>
-                            <p><span>较上月增长</span><span class="month-increase">0.3%</span></p>
-                        </div> -->
-                      </p>
-                    </div>
-                  </div>
+    <div class="statisticsbox-all" v-if="siteValue==='china'">
+      <c-scrollbar ref="scrollbarRef" width="100%" height="100%" trigger="hover" direction="y">
+        <div class="headerinbox" v-if="screen.icon === '#icon-tuichuquanping-fill-copy'">
+          <div class="headerinbox-title">TEAM Model·BI 数据监控系统</div>
+          <div class="showTime" @click="detectionsize(screen.state)">
+            <svg class="skip" aria-hidden="true">
+              <use :xlink:href="screen.icon"></use>
+            </svg>
+          </div>
+        </div>
+        <div class="statisboxs">
+          <div class="top-resource">
+            <div class="basics-databox">
+              <div class="top-aspects" v-for="(item, index) in areaAspectsData" :key="index">
+                <div :class="['left-top-icon']">
+                  <svg class="top-header-icon" aria-hidden="true">
+                    <use :xlink:href="item.icon"></use>
+                  </svg>
                 </div>
-                <div class="basicsbox">
-                  <div class="leftbox">
-                    <!-- <div :class="[items.type==='month' ? 'alonebox' :'totalalonebox']" v-for="(items,indexs) in activityData.total" :key="indexs">
-                            <p :class="[items.type ==='month' ? 'alonebox-title':'total-alonebox-title']">{{items.title}}</p>
-                            <p :class="[items.type ==='month' ? 'alonebox-content':'total-alonebox-content']">{{items.num}}</p>
-                        </div> -->
-                    <!-- <div class="commonbox-title">
-                                <div class="commonbox-title-name">在线人数趋势</div>
-                                <div class="commonbox-title-icon">
-                                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                                        <use xlink:href="#icon-keliuqushi"></use>
-                                    </svg>
-                                </div>
-                            </div> -->
-                    <!-- <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)"> -->
-                    <!-- <Online ></Online> -->
-                    <!-- <CommonLine :lineData="totalArea.online"></CommonLine> -->
-                    <!-- </div> -->
-                  </div>
-                  <div class="center">
-                    <div class="commonbox-title">
-                      <!-- <div class="commonbox-title-name">在线人员区分</div> -->
-                      <div class="commonbox-title-icon">
-                        <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                          <use xlink:href="#icon-keliuqushi"></use>
-                        </svg>
-                      </div>
-                      <div class="commonbox-title-name">在线人数趋势</div>
+                <div class="right-top-text">
+                  <p class="right-top-num">
+                    {{ item.num }}
+                  <div class="right-top-num-increase" v-show="item.classname === 'online'">
+                    <div class="right-top-num-increase-teach"><span class="right-top-num-increase-teach">教师:</span><span>{{ item.teach }}</span>
                     </div>
-                    <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <CommonBar :barData="totalArea.onlineType"></CommonBar>
+                    <div class="right-top-num-increase-student"><span class="right-top-num-increase-teach">学生:</span><span>{{ item.student}}</span>
                     </div>
                   </div>
-                  <div class="rightbox" v-loading="loading.basics2" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <!-- <p class="online-title">在线量统计</p> -->
-                    <!-- <div class="rightbox-pie">
-                            <CommonPie :proportionData="totalArea.alonePie"></CommonPie>
-                        </div>
-                        <div class="rightbox-pie">
-                            <ConventionPie :pieData="totalArea.activity"></ConventionPie>
-                        </div>
-                        <div class="rightbox-pie versions">
-                            <ConventionPie :pieData="totalArea.versions"></ConventionPie>
-                        </div> -->
-                    <div class="commonbox-title">
-                      <div class="commonbox-title-icon beginclass">
-                        <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                          <use xlink:href="#icon-XX_061"></use>
-                        </svg>
-                      </div>
-                      <div class="commonbox-title-name">HiTeach开课</div>
-                    </div>
-                    <div class="rightbox-login">
-                      <!-- <div class="rightbox-login-select">
-                                <span :class="[onlineModels==='all' ? 'checked':'','all']" @click="onlineModels='all'">全年</span>
-                                <span :class="[onlineModels==='month' ? 'checked':'','nowmonth']" @click="onlineModels='month'">本月</span>
-                            </div>
-                            <CommonBarLine v-if="onlineModels==='month'"></CommonBarLine>
-                            <BarLine v-else-if="onlineModels === 'all'"></BarLine> -->
-                      <CommonBar :barData="totalArea.classData"></CommonBar>
-                    </div>
-                  </div>
-                </div>
-              </div>
-              <div class="center-resource">
-                <!-- <div class="center-resource-left" v-loading="loading.lessonData" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <ConventionPie :pieData="totalArea.class"></ConventionPie>
-                </div> -->
-                <div class="center-resource-right">
-                  <p class="commonbox-title areaClass">
-                  <div class="commonbox-title-icon dynamicbox">
-                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                      <use xlink:href="#icon-huoyue"></use>
-                    </svg>
-                  </div>
-                  <div class="commonbox-title-name">开课及上传数据</div>
-                  </p>
-                  <!-- <CommonBar :barData="totalArea.classAndactivity"></CommonBar> -->
-                  <div class="center-resource-line" v-loading="loading.active" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <CommonLine :lineData="totalArea.dynamic"></CommonLine>
-                  </div>
-                  <!--时间选择-->
-                  <div class="selectboxs">
-                    <el-select v-model="optionsData.values" class="m-2" placeholder="Select" size="small" @change="timeChange">
-                      <el-option v-for="item in optionsData.data" :key="item.value" :label="item.label" :value="item.value" />
-                    </el-select>
-                  </div>
-                  <!--时间选择end-->
-                </div>
-              </div>
-              <!-- <div class="bottom-resource">
-                <p class="commonbox-title active">课例活跃</p>
-                <div class="areabottom-resource" v-loading="loading.active" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <CommonLine :lineData="totalArea.dynamic"></CommonLine>
-                </div>
-            </div> -->
-              <div class="areaList">
-                <!-- <p class="commonbox-title arealists">区域列表</p>
-                <div class="area-listinfo">
-                    <div class="area-item" v-for="(item,index) in areaLists" :key="item.id">
-                        <div class="area-item-list">
-                            <p class="area-item-name">{{item.name}}</p>
-                            <p class="area-item-school"><span class="area-item-school-title">学区学校数:</span><span class="area-item-school-content">{{item.schoolCount}}</span></p>
-                            <p class="area-item-school"><span class="area-item-school-title">学区教师数:</span><span class="area-item-school-content">{{item.techCount}}</span></p>
-                            <p class="area-item-school"><span class="area-item-school-title">学区学生数:</span><span class="area-item-school-content">{{item.stuCount}}</span></p>
-                        </div>
-                        <div class="item-detailsbtn" @click="getSchoolDistrict(item)">
-                            <span>详情 ></span>
-                        </div>
-                    </div>
-                </div> -->
-                <div class="bottom-leftbox">
-                  <div class="centerbox-right-leftbox">
-                    <p class="commonbox-title usesize">
-                    <div class="commonbox-title-icon versions-list">
-                      <svg class="commonbox-title-onlineIcon sizeList" aria-hidden="true">
-                        <use xlink:href="#icon-guanfangbanben"></use>
-                      </svg>
-                    </div>
-                    <div class="commonbox-title-name">版本占比</div>
-                    </p>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">基础版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ versionsData.basics.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie1"></CommonPie>
-                      </div>
-
-                    </div>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">标准版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ versionsData.standard.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie2"></CommonPie>
-                      </div>
-
-                    </div>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">专业版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ versionsData.major.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie3"></CommonPie>
-                      </div>
-
-                    </div>
+                  <div class="right-top-num-increase" v-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '1'">
+                    <span class="right-top-num-flag">+</span>
+                    <span class="right-top-num-nums">{{ item.increase }}</span>
                   </div>
-                </div>
-                <div class="bottom-rightbox">
-                  <p class="commonbox-title sizeinfo">
-                  <div class="commonbox-title-icon">
-                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                      <use xlink:href="#icon-32cunchuguanli"></use>
-                    </svg>
+                  <div class="right-top-num-reduce" v-else-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '2'">
+                    <span class="right-top-num-flag">-</span>
+                    <span class="right-top-num-nums">4</span>
                   </div>
-                  <div class="commonbox-title-name">空间使用</div>
                   </p>
-                  <div class="bottom-rightbox-right" v-loading="loading.sizeType" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <Size :lineData="totalArea.sizePie" :sizenum="allSize"></Size>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </c-scrollbar>
-          <!-- <div class="participationbox"><span>查看我参与的</span></div> -->
-        </div>
-      </el-tab-pane>
-      <el-tab-pane label="国际" name="international">
-        <div class="statisticsbox-all" v-if="siteValue==='international'">
-          <c-scrollbar ref="scrollbarRef" width="100%" height="100%" trigger="hover" direction="y">
-            <div class="headerinbox" v-if="screen.icon === '#icon-tuichuquanping-fill-copy'">
-              <div class="headerinbox-title">TEAM Model·BI 数据监控系统</div>
-              <div class="showTime" @click="detectionsize(screen.state)">
-                <svg class="skip" aria-hidden="true">
-                  <use :xlink:href="screen.icon"></use>
-                </svg>
-              </div>
-            </div>
-            <div class="statisboxs">
-              <div class="top-resource">
-                <div class="basics-databox">
-                  <div class="top-aspects" v-for="(item, index) in worldareaAspectsData" :key="index">
-                    <div :class="['left-top-icon']">
-                      <svg class="top-header-icon" aria-hidden="true">
-                        <use :xlink:href="item.icon"></use>
-                      </svg>
-                    </div>
-                    <div class="right-top-text">
-                      <p class="right-top-num">
-                        {{ item.num }}
-                      <div class="right-top-num-increase" v-show="item.classname === 'online'">
-                        <div class="right-top-num-increase-teach"><span class="right-top-num-increase-teach">教师:</span><span>{{ item.teach }}</span>
-                        </div>
-                        <div class="right-top-num-increase-student"><span class="right-top-num-increase-teach">学生:</span><span>{{ item.student
-                                            }}</span>
-                        </div>
-                      </div>
-                      <div class="right-top-num-increase" v-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '1'">
-                        <span class="right-top-num-flag">+</span>
-                        <span class="right-top-num-nums">{{ item.increase }}</span>
-                      </div>
-                      <div class="right-top-num-reduce" v-else-if="(item.classname === 'datas' || item.classname === 'teach' || item.classname === 'student') && item.state === '2'">
-                        <span class="right-top-num-flag">-</span>
-                        <span class="right-top-num-nums">4</span>
-                      </div>
-                      </p>
-                      <p class="right-top-title">
-                      <div class="title-left">{{ item.title }}</div>
-                      <!-- <div class="title-right">
+                  <p class="right-top-title">
+                  <div class="title-left">{{ item.title }}</div>
+                  <!-- <div class="title-right">
                             <p><span>较昨日增长</span><span class="last-increase">4.4%</span></p>
                             <p><span>较上月增长</span><span class="month-increase">0.3%</span></p>
                         </div> -->
-                      </p>
-                    </div>
-                  </div>
+                  </p>
                 </div>
-                <div class="basicsbox">
-                  <div class="leftbox">
-                    <!-- <div :class="[items.type==='month' ? 'alonebox' :'totalalonebox']" v-for="(items,indexs) in activityData.total" :key="indexs">
+              </div>
+            </div>
+            <div class="basicsbox">
+              <div class="leftbox">
+                <!-- <div :class="[items.type==='month' ? 'alonebox' :'totalalonebox']" v-for="(items,indexs) in activityData.total" :key="indexs">
                             <p :class="[items.type ==='month' ? 'alonebox-title':'total-alonebox-title']">{{items.title}}</p>
                             <p :class="[items.type ==='month' ? 'alonebox-content':'total-alonebox-content']">{{items.num}}</p>
                         </div> -->
-                    <!-- <div class="commonbox-title">
+                <!-- <div class="commonbox-title">
                                 <div class="commonbox-title-name">在线人数趋势</div>
                                 <div class="commonbox-title-icon">
                                     <svg class="commonbox-title-onlineIcon" aria-hidden="true">
@@ -291,28 +62,28 @@
                                     </svg>
                                 </div>
                             </div> -->
-                    <!-- <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)"> -->
-                    <!-- <Online ></Online> -->
-                    <!-- <CommonLine :lineData="totalArea.online"></CommonLine> -->
-                    <!-- </div> -->
-                  </div>
-                  <div class="center">
-                    <div class="commonbox-title">
-                      <!-- <div class="commonbox-title-name">在线人员区分</div> -->
-                      <div class="commonbox-title-icon">
-                        <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                          <use xlink:href="#icon-keliuqushi"></use>
-                        </svg>
-                      </div>
-                      <div class="commonbox-title-name">在线人数趋势</div>
-                    </div>
-                    <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <CommonBar :barData="worldtotalArea.onlineType"></CommonBar>
-                    </div>
+                <!-- <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)"> -->
+                <!-- <Online ></Online> -->
+                <!-- <CommonLine :lineData="totalArea.online"></CommonLine> -->
+                <!-- </div> -->
+              </div>
+              <div class="center">
+                <div class="commonbox-title">
+                  <!-- <div class="commonbox-title-name">在线人员区分</div> -->
+                  <div class="commonbox-title-icon">
+                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
+                      <use xlink:href="#icon-keliuqushi"></use>
+                    </svg>
                   </div>
-                  <div class="rightbox" v-loading="loading.basics2" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <!-- <p class="online-title">在线量统计</p> -->
-                    <!-- <div class="rightbox-pie">
+                  <div class="commonbox-title-name">在线人数趋势</div>
+                </div>
+                <div class="leftbox-online" v-loading="loading.basics" element-loading-background="rgba(0, 0, 0, 0.2)">
+                  <CommonBar :barData="totalArea.onlineType"></CommonBar>
+                </div>
+              </div>
+              <div class="rightbox" v-loading="loading.basics2" element-loading-background="rgba(0, 0, 0, 0.2)">
+                <!-- <p class="online-title">在线量统计</p> -->
+                <!-- <div class="rightbox-pie">
                             <CommonPie :proportionData="totalArea.alonePie"></CommonPie>
                         </div>
                         <div class="rightbox-pie">
@@ -321,60 +92,60 @@
                         <div class="rightbox-pie versions">
                             <ConventionPie :pieData="totalArea.versions"></ConventionPie>
                         </div> -->
-                    <div class="commonbox-title">
-                      <div class="commonbox-title-icon beginclass">
-                        <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                          <use xlink:href="#icon-XX_061"></use>
-                        </svg>
-                      </div>
-                      <div class="commonbox-title-name">HiTeach开课</div>
-                    </div>
-                    <div class="rightbox-login">
-                      <!-- <div class="rightbox-login-select">
+                <div class="commonbox-title">
+                  <div class="commonbox-title-icon beginclass">
+                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
+                      <use xlink:href="#icon-XX_061"></use>
+                    </svg>
+                  </div>
+                  <div class="commonbox-title-name">HiTeach开课</div>
+                </div>
+                <div class="rightbox-login">
+                  <!-- <div class="rightbox-login-select">
                                 <span :class="[onlineModels==='all' ? 'checked':'','all']" @click="onlineModels='all'">全年</span>
                                 <span :class="[onlineModels==='month' ? 'checked':'','nowmonth']" @click="onlineModels='month'">本月</span>
                             </div>
                             <CommonBarLine v-if="onlineModels==='month'"></CommonBarLine>
                             <BarLine v-else-if="onlineModels === 'all'"></BarLine> -->
-                      <CommonBar :barData="worldtotalArea.classData"></CommonBar>
-                    </div>
-                  </div>
+                  <CommonBar :barData="totalArea.classData"></CommonBar>
                 </div>
               </div>
-              <div class="center-resource">
-                <!-- <div class="center-resource-left" v-loading="loading.lessonData" element-loading-background="rgba(0, 0, 0, 0.2)">
+            </div>
+          </div>
+          <div class="center-resource">
+            <!-- <div class="center-resource-left" v-loading="loading.lessonData" element-loading-background="rgba(0, 0, 0, 0.2)">
                     <ConventionPie :pieData="totalArea.class"></ConventionPie>
                 </div> -->
-                <div class="center-resource-right">
-                  <p class="commonbox-title areaClass">
-                  <div class="commonbox-title-icon dynamicbox">
-                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                      <use xlink:href="#icon-huoyue"></use>
-                    </svg>
-                  </div>
-                  <div class="commonbox-title-name">开课及上传数据</div>
-                  </p>
-                  <!-- <CommonBar :barData="totalArea.classAndactivity"></CommonBar> -->
-                  <div class="center-resource-line" v-loading="loading.active" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <CommonLine :lineData="worldtotalArea.dynamic"></CommonLine>
-                  </div>
-                  <!--选择时间-->
-                  <div class="selectboxs">
-                    <el-select v-model="optionsData.values" class="m-2" placeholder="Select" size="small" @change="timeChange">
-                      <el-option v-for="item in optionsData.data" :key="item.value" :label="item.label" :value="item.value" />
-                    </el-select>
-                  </div>
-                  <!--选择时间end-->
-                </div>
+            <div class="center-resource-right">
+              <p class="commonbox-title areaClass">
+              <div class="commonbox-title-icon dynamicbox">
+                <svg class="commonbox-title-onlineIcon" aria-hidden="true">
+                  <use xlink:href="#icon-huoyue"></use>
+                </svg>
+              </div>
+              <div class="commonbox-title-name">开课及上传数据</div>
+              </p>
+              <!-- <CommonBar :barData="totalArea.classAndactivity"></CommonBar> -->
+              <div class="center-resource-line" v-loading="loading.active" element-loading-background="rgba(0, 0, 0, 0.2)">
+                <CommonLine :lineData="totalArea.dynamic"></CommonLine>
+              </div>
+              <!--时间选择-->
+              <div class="selectboxs">
+                <el-select v-model="optionsData.values" class="m-2" placeholder="Select" size="small" @change="timeChange">
+                  <el-option v-for="item in optionsData.data" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
               </div>
-              <!-- <div class="bottom-resource">
+              <!--时间选择end-->
+            </div>
+          </div>
+          <!-- <div class="bottom-resource">
                 <p class="commonbox-title active">课例活跃</p>
                 <div class="areabottom-resource" v-loading="loading.active" element-loading-background="rgba(0, 0, 0, 0.2)">
                     <CommonLine :lineData="totalArea.dynamic"></CommonLine>
                 </div>
             </div> -->
-              <div class="areaList">
-                <!-- <p class="commonbox-title arealists">区域列表</p>
+          <div class="areaList">
+            <!-- <p class="commonbox-title arealists">区域列表</p>
                 <div class="area-listinfo">
                     <div class="area-item" v-for="(item,index) in areaLists" :key="item.id">
                         <div class="area-item-list">
@@ -388,74 +159,72 @@
                         </div>
                     </div>
                 </div> -->
-                <div class="bottom-leftbox">
-                  <div class="centerbox-right-leftbox">
-                    <p class="commonbox-title usesize">
-                    <div class="commonbox-title-icon versions-list">
-                      <svg class="commonbox-title-onlineIcon sizeList" aria-hidden="true">
-                        <use xlink:href="#icon-guanfangbanben"></use>
-                      </svg>
-                    </div>
-                    <div class="commonbox-title-name">版本占比</div>
+            <div class="bottom-leftbox">
+              <div class="centerbox-right-leftbox">
+                <p class="commonbox-title usesize">
+                <div class="commonbox-title-icon versions-list">
+                  <svg class="commonbox-title-onlineIcon sizeList" aria-hidden="true">
+                    <use xlink:href="#icon-guanfangbanben"></use>
+                  </svg>
+                </div>
+                <div class="commonbox-title-name">版本占比</div>
+                </p>
+                <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
+                  <div class="commonbox-versions-title">
+                    <p class="versions-title-name">基础版</p>
+                    <p class="versions-title-num">数量:
+                      <span>{{ versionsData.basics.num }}</span>
                     </p>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">基础版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ worldversionsData.basics.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie1"></CommonPie>
-                      </div>
-
-                    </div>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">标准版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ worldversionsData.standard.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie2"></CommonPie>
-                      </div>
-
-                    </div>
-                    <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
-                      <div class="commonbox-versions-title">
-                        <p class="versions-title-name">专业版</p>
-                        <p class="versions-title-num">数量:
-                          <span>{{ worldversionsData.major.num }}</span>
-                        </p>
-                      </div>
-                      <div class="commonbox-versions-chart">
-                        <CommonPie :proportionData="totalArea.pie3"></CommonPie>
-                      </div>
+                  </div>
+                  <div class="commonbox-versions-chart">
+                    <CommonPie :proportionData="totalArea.pie1"></CommonPie>
+                  </div>
 
-                    </div>
+                </div>
+                <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
+                  <div class="commonbox-versions-title">
+                    <p class="versions-title-name">标准版</p>
+                    <p class="versions-title-num">数量:
+                      <span>{{ versionsData.standard.num }}</span>
+                    </p>
+                  </div>
+                  <div class="commonbox-versions-chart">
+                    <CommonPie :proportionData="totalArea.pie2"></CommonPie>
                   </div>
+
                 </div>
-                <div class="bottom-rightbox">
-                  <p class="commonbox-title sizeinfo">
-                  <div class="commonbox-title-icon">
-                    <svg class="commonbox-title-onlineIcon" aria-hidden="true">
-                      <use xlink:href="#icon-32cunchuguanli"></use>
-                    </svg>
+                <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
+                  <div class="commonbox-versions-title">
+                    <p class="versions-title-name">专业版</p>
+                    <p class="versions-title-num">数量:
+                      <span>{{ versionsData.major.num }}</span>
+                    </p>
                   </div>
-                  <div class="commonbox-title-name">空间使用</div>
-                  </p>
-                  <div class="bottom-rightbox-right" v-loading="loading.sizeType" element-loading-background="rgba(0, 0, 0, 0.2)">
-                    <Size :lineData="totalArea.sizePie" :sizenum="allSize"></Size>
+                  <div class="commonbox-versions-chart">
+                    <CommonPie :proportionData="totalArea.pie3"></CommonPie>
                   </div>
+
                 </div>
               </div>
             </div>
-          </c-scrollbar>
-          <!-- <div class="participationbox"><span>查看我参与的</span></div> -->
+            <div class="bottom-rightbox">
+              <p class="commonbox-title sizeinfo">
+              <div class="commonbox-title-icon">
+                <svg class="commonbox-title-onlineIcon" aria-hidden="true">
+                  <use xlink:href="#icon-32cunchuguanli"></use>
+                </svg>
+              </div>
+              <div class="commonbox-title-name">空间使用</div>
+              </p>
+              <div class="bottom-rightbox-right" v-loading="loading.sizeType" element-loading-background="rgba(0, 0, 0, 0.2)">
+                <Size :lineData="totalArea.sizePie" :sizenum="allSize"></Size>
+              </div>
+            </div>
+          </div>
         </div>
-      </el-tab-pane>
-    </el-tabs>
+      </c-scrollbar>
+      <!-- <div class="participationbox"><span>查看我参与的</span></div> -->
+    </div>
   </div>
   <!-- <AssitInterface v-if="showPattern.includes('assist')"></AssitInterface> -->
 </template>

+ 3 - 4
TEAMModelBI/ClientApp/src/view/participation/index.vue

@@ -2,12 +2,12 @@
   <!--学校列表-->
   <div class="schoolboxtad" v-show="models === 'default'">
     <div class="select-List">
-      <div class="site-box">
+      <!-- <div class="site-box">
         <el-select v-model="siteList.siteValue" placeholder="站点">
           <el-option v-for="item in siteList.list" :key="item.id" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
-      </div>
+      </div> -->
       <div class="province-box">
         <el-select v-model="provinceOptions.provinceValue" :placeholder="$t(`areaManages.selector.provinceDefault`)" @change="areaSelctChange(provinceOptions.provinceValue, 'province')">
           <el-option v-for="item in provinceOptions.optionInfo" :key="item.code" :label="item.name" :value="item.name">
@@ -803,8 +803,7 @@ export default {
 }
 
 .city-box,
-.dist-box,
-.province-box {
+.dist-box {
   margin-left: 1%;
 }
 

+ 18 - 16
TEAMModelBI/ClientApp/src/view/schoolServe/school.vue

@@ -2,12 +2,12 @@
   <!--学校列表-->
   <div class="schoolboxea" v-show="models === 'default'">
     <div class="select-List">
-      <div class="site-box">
+      <!-- <div class="site-box">
         <el-select v-model="siteList.siteValue" placeholder="站点">
           <el-option v-for="item in siteList.list" :key="item.id" :label="item.label" :value="item.value">
           </el-option>
         </el-select>
-      </div>
+      </div> -->
       <div class="province-box">
         <!-- <span>{{$t(`areaManages.selector.provinceName`)}}:</span> -->
         <el-select v-model="provinceOptions.provinceValue" :placeholder="$t(`areaManages.selector.provinceDefault`)" @change="areaSelctChange(provinceOptions.provinceValue, 'province')">
@@ -510,42 +510,45 @@ export default {
       }
     }
     //地区选择
-    function areaSelctChange (values, model) {
+    function areaSelctChange (value, model) {
       loading.value = true
-      let textState = (values.includes('自治区') || values.includes('市')) && model === 'province' ? true : false
-      let value = values.indexOf('省') === -1 && model === 'province' && textState === false ? values + '省' : values
-      console.log(values, value, model, '调用的select')
+      // let textState = (values.includes('自治区') || values.includes('市')) && model === 'province' ? true : false
+      // let value = values.indexOf('省') === -1 && model === 'province' && textState === false ? values + '省' : values
+      // console.log(values, value, model, '调用的select')
       let data = option
       if (model === 'province') {
         //传输下一级的数据给select
         let cityData = data.filter((item) => {
-          return item.name === value
+          return value.includes(item.name)
         })
         cityOptions.value.cityInfo = cityData[0].children
         //遍历list
         let schoolData = originalData.value.filter((items) => {
-          console.log(items, '下面')
-          let provinceState = (items.province.includes('自治区') || items.province.includes('市')) ? true : false
-          let names = provinceState === false && !items.province.includes('省') ? items.province + '省' : items.province
-          return names === value
+          // let provinceState = items.province.includes('自治区') || items.province.includes('市') ? true : false
+          // let names = provinceState === false && items.province.indexOf('省') === -1 ? items.province + '省' : items.province
+          return value.includes(items.province)
+          // return items.province === value
         })
         tableData.value = schoolData
         console.log(schoolData, tableData.value)
       } else if (model === 'city') {
         let distData = cityOptions.value.cityInfo.filter((item) => {
-          return item.name === value
+          return value.includes(item.name)
         })
         distOptions.value.distInfo = distData[0].children
         let provinceData = provinceOptions.value.provinceValue
         let schoolData = originalData.value.filter((items) => {
-          return items.city === value && items.province === provinceData
+          return value.includes(items.city) && provinceData.includes(items.province)
+          // return items.city === value && items.province === provinceData
         })
         tableData.value = schoolData
       } else if (model === 'dist') {
         let provinceData = provinceOptions.value.provinceValue
         let cityData = cityOptions.value.cityValue
+        console.log(cityData, provinceData, '进入到地区选择')
         let schoolData = originalData.value.filter((items) => {
-          return items.city === cityData && items.province === provinceData && items.dist === value
+          return cityData.includes(items.city) && provinceData.includes(items.province) && value.includes(items.dist)
+          // return items.city === cityData && items.province === provinceData && items.dist === value
         })
         tableData.value = schoolData
       }
@@ -1019,8 +1022,7 @@ export default {
 }
 
 .city-box,
-.dist-box,
-.province-box {
+.dist-box {
   margin-left: 1%;
 }
 

+ 17 - 3
TEAMModelBI/ClientApp/src/view/systemConfig/apimanage.vue

@@ -716,8 +716,20 @@ export default ({
               minutex.push(itemM.minute)
               minuteData.push(itemM.cnt)
             })
-            res.days[res.days.length - 2].value.ipCnt.forEach((ipitem) => {
-              ipData.push({ name: ipitem.ip + '(' + ipitem.count + ')', value: ipitem.count })
+            res.days[res.days.length - 2].value.ipCnt = res.days[res.days.length - 2].value.ipCnt.sort(function (a, b) {
+              if (a.count < b.count) { return 1 }
+              if (a.count > b.count) { return -1 }
+            })
+            res.days[res.days.length - 2].value.ipCnt.forEach((ipitem, index) => {
+              index < 24 ? ipData.push({ name: ipitem.ip + '(' + ipitem.count + ')', value: ipitem.count }) : ''
+            })
+            // let ipsDa = res.days[res.days.length - 2].value.ipCnt
+            // for (let i in ipsDa) {
+            //   i < 25 ? ipData.push({ name: ipsDa[i].ip + '(' + ipsDa[i].count + ')', value: ipsDa[i].count }) : ''
+            // }
+            res.days[res.days.length - 2].value.regionCnts = res.days[res.days.length - 2].value.regionCnts.sort(function (x, y) {
+              if (x.count < y.count) { return 1 }
+              if (x.count > y.count) { return -1 }
             })
             res.days[res.days.length - 2].value.regionCnts.forEach((areaitem) => {
               areaDatas.push({ name: areaitem.region, value: areaitem.count })
@@ -764,8 +776,10 @@ export default ({
         datas[i].time === clicknum ? (nowminData = datas[i].value.minCnts, nowips = datas[i].value.ipCnt, nowareas = datas[i].value.regionCnts) : ''
       }
       console.log(nowminData, '33333')
+      nowips.sort(function (a, b) { if (a.count < b.count) { return 1 }; if (a.count > b.count) { return -1 } })
+      nowareas.sort(function (x, y) { if (x.count < y.count) { return 1 }; if (x.count > y.count) { return -1 } })
       nowminData.length !== 0 ? (nowminData.forEach((item) => { minutex.push(item.minute); minuteData.push(item.cnt) }), minuteBar.value.xAxis.data = minutex, minuteBar.value.series[0].data = minuteData, minuteShow.value = false) : minuteShow.value = true
-      nowips.length !== 0 ? (nowips.forEach((ipitem) => { ipData.push({ name: ipitem.ip + '(' + ipitem.count + ')', value: ipitem.count }) }), ipQie.value.series[0].data = ipData, ipQieShow.value = false) : ipQieShow.value = true
+      nowips.length !== 0 ? (nowips.forEach((ipitem, index) => { index < 24 ? ipData.push({ name: ipitem.ip + '(' + ipitem.count + ')', value: ipitem.count }) : '' }), ipQie.value.series[0].data = ipData, ipQieShow.value = false) : ipQieShow.value = true
       nowareas.length !== 0 ? (nowareas.forEach((areaitem) => { areaDatas.push({ name: areaitem.region, value: areaitem.count }) })) : areaQieShow.value = true
       //数据差距放大规则
       if (nowareas.length !== 0) {

+ 0 - 4
TEAMModelBI/TEAMModelBI.csproj

@@ -29,10 +29,6 @@
 			<HintPath>Lib\topsdk-net-core.dll</HintPath>
 		</Reference>
 	</ItemGroup>
-
-	<ItemGroup>
-		<Folder Include="wwwroot\" />
-	</ItemGroup>
 	<PropertyGroup>
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>

+ 8 - 5
TEAMModelOS.FunctionV4/CosmosDB/TriggerExam.cs

@@ -469,10 +469,10 @@ namespace TEAMModelOS.FunctionV4
                         }
                         else if (sta == 0)
                         {
-                            var ans = classResult.studentScores[index];
+                            //var ans = classResult.studentAnswers[index];
                             //该学生缺考,历史数据的判定
-                            if (ans.Count == 0)
-                            {
+                            //if (ans.Count == 0)
+                            //{
                                 for (int i = 0; i < classResult.studentScores[index].Count; i++)
                                 {
                                     if (classResult.studentScores[index][i] == -1)
@@ -480,8 +480,11 @@ namespace TEAMModelOS.FunctionV4
                                         classResult.studentScores[index][i] = 0;
                                     }
                                 }
+                            /*if (ans.Count == 0)
+                            {
                                 classResult.status[index] = 1;
-                            }
+                            }      */                                                    
+                            //}
 
                         }
                         index++;
@@ -505,7 +508,7 @@ namespace TEAMModelOS.FunctionV4
                                 if (classResult.studentScores[index][i] == -1)
                                 {
                                     classResult.studentScores[index][i] = 0;
-                                }
+                                } 
                             }
                             classResult.status[index] = 1;
                         }

+ 3 - 3
TEAMModelOS.FunctionV4/TEAMModelOS.FunctionV4.csproj

@@ -5,9 +5,9 @@
 		<OutputType>Exe</OutputType>
 		<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
 		<SignAssembly>true</SignAssembly>
-		<Version>5.2208.3</Version>
-		<AssemblyVersion>5.2208.3.1</AssemblyVersion>
-		<FileVersion>5.2208.3.1</FileVersion>
+		<Version>5.2208.10</Version>
+		<AssemblyVersion>5.2208.10.1</AssemblyVersion>
+		<FileVersion>5.2208.10.1</FileVersion>
 		<PackageId>TEAMModelOS.FunctionV4</PackageId>
 		<Authors>teammodel</Authors>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 82 - 0
TEAMModelOS.SDK/Models/Cosmos/Normal/ArtSetting.cs

@@ -0,0 +1,82 @@
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.Normal
+{
+    public class ArtSetting : CosmosEntity
+    {
+        //public string id { get; set; }  区级id
+        // code :"ArtSetting"
+        //pk :"ArtSetting"
+        public List<ArtDimension> dimensions { get; set; } = new List<ArtDimension>();
+        public List<ArtKnowledge> knowledges { get; set; }= new List<ArtKnowledge>(); 
+    }
+
+
+    public class ArtKnowledge{
+        /// <summary>
+        /// 学科id  subject_music 音乐 subject_painting 美术
+        /// </summary>
+        [Required(ErrorMessage = "subjectId 必须设置")]
+        public string subjectId { get; set; }
+        /// <summary>
+        /// 知识点
+        /// </summary>
+        public List<string> points { get; set; } = new List<string>();
+        /// <summary>
+        /// 知识块
+        /// </summary>
+        public List<Block> blocks { get; set; } = new List<Block>();
+    }
+
+    public class ArtDimension
+    {
+        /// <summary>
+        /// 维度
+        /// </summary>
+        public string dimension { get; set; }
+        public List<ArtSubject> subjects { get; set; }
+    }
+
+
+
+    /// <summary>
+    /// 描述
+    /// </summary>
+    public class ArtDesc
+    {
+        /// <summary>
+        /// 描述文本
+        /// </summary>
+        public List<string> contents { get; set; } = new List<string>();
+        /// <summary>
+        /// 关联年级
+        /// </summary>
+        public List<int> grades { get; set; } = new List<int>();
+        /// <summary>
+        /// 第一学段,第二学段,....
+        /// </summary>
+        public string period { get; set; }
+    }
+    public class ArtSubject
+    {
+        public string subjectId { get; set; }
+        /// <summary>
+        /// 科目
+        /// </summary>
+        public string subject { get; set; }
+        /// <summary>
+        /// 知识块
+        /// </summary>
+        public List<string> blocks { get; set; } = new List<string>();
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public List<ArtDesc> descs { get; set; } = new List<ArtDesc>();
+    }
+}

+ 5 - 0
TEAMModelOS.SDK/Models/Cosmos/School/Paper.cs

@@ -103,6 +103,11 @@ namespace TEAMModelOS.SDK.Models
         ///试卷标签
         /// </summary>
         public List<string> tags { get; set; } = new List<string>();
+        /// <summary>
+        /// 0 默认,题型排序,
+        /// 1 按题序排序
+        /// </summary>
+        public int itemSort { get; set; } = 0;
      }
      /// <summary>
      /// 阅卷规则

+ 8 - 0
TEAMModelOS.SDK/Models/Service/LessonService.cs

@@ -91,15 +91,23 @@ namespace TEAMModelOS.SDK.Models.Service
                 dict.Add("<=.startTime", now);
                 dict.Add(">=.startTime", dayB);
             }
+            //查询即将到期的且没有被清理的。
             if (request.TryGetProperty("expire", out JsonElement expire) && expire.ValueKind.Equals(JsonValueKind.True))
             {
                 dict.Add(">.expire", 0);
                 dict.Add("!=.status", 404);
             }
+            //查询已经清理的
             if (request.TryGetProperty("is404", out JsonElement is404) && is404.ValueKind.Equals(JsonValueKind.True))
             {
                 dict.Add("=.status", 404);
             }
+            //只查有效的
+            if (request.TryGetProperty("isOk", out JsonElement isOk) && isOk.ValueKind.Equals(JsonValueKind.True))
+            {
+                dict.Add("<=.expire", 0);
+                dict.Add("!=.status", 404);
+            }
             if (request.TryGetProperty("month", out JsonElement month) && month.GetBoolean())
             {
                 //DateTime dateTimeA = Convert.ToDateTime(DateTimeOffset.UtcNow.ToString("D"));

+ 1 - 0
TEAMModelOS/ClientApp/public/lang/en-US.js

@@ -2956,6 +2956,7 @@ const LANG_EN_US = {
             fileName: '課堂記錄統計錶',
             noData: '暫無數據導出'
         },
+        normalStatus: 'Normal',
         expireStatus: 'Expiring soon',
         deleteStatus: 'Cleaned',
         noRecordTip: 'No lesson records are available under the current school system!',

+ 30 - 29
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -1154,35 +1154,35 @@ const LANG_ZH_CN = {
         cusNameRepeat: '课程名称重复',
         noClassInfo: '暂未找到班级信息',
         noRoomInfo: '暂未找到教室信息',
-        cusImp1:'导入课程范本:',
-        cusImp2:'重要提示:如果学校存在教师同名,教师栏位请使用教师醍摩豆Id进行导入。',
-        cusImp3:'课程基础信息不一致',
-        cusImp4:'缺少课程必填信息',
-        cusImp5:'缺少授课教师信息',
-        cusImp6:'当前课程授课教师重复',
-        cusImp7:'授课教师名称错误或不存在',
-        cusImp8:'学科名称错误或不存在',
-        cusImp9:'班级名称错误或不存在:',
-        cusImp10:'确认导入',
-        cusImp11:'重新导入',
-        cusImp12:'返回课程管理',
-        cusImp13:'subject: 课程学科(必填),导入的学科需要在学校基础预设',
-        cusImp14:'course: 课程名称(必填),如果导入的课程已经在学校存在,则会更新当前课程数据;如果导入的课程不存在则会新建课程',
-        cusImp15:'courseNo: 课程编码(选填)',
-        cusImp16:'courseDesc: 课程描述(选填)',
-        cusImp17:'teacher: 授课教师(选填),如果多个老师教授同一个课程,需要复制课程信息,新建一行',
-        cusImp18:'classes: 教师授课班级(选填),如果多个班级可以使用逗号分隔。',
-        cusImp19:'学科',
-        cusImp20:'课程',
-        cusImp21:'课程编码',
-        cusImp22:'课程描述',
-        cusImp23:'授课教师',
-        cusImp24:'授课班级',
-        cusImp25:'异常信息',
-        cusImp26:'请检查表格数据',
-        cusImp27:'请检查表格信息是否正确',
-        cusImp28:'导入成功',
-        cusImp29:'汇入表格栏位不完整,请检查汇入表格数据',
+        cusImp1: '导入课程范本:',
+        cusImp2: '重要提示:如果学校存在教师同名,教师栏位请使用教师醍摩豆Id进行导入。',
+        cusImp3: '课程基础信息不一致',
+        cusImp4: '缺少课程必填信息',
+        cusImp5: '缺少授课教师信息',
+        cusImp6: '当前课程授课教师重复',
+        cusImp7: '授课教师名称错误或不存在',
+        cusImp8: '学科名称错误或不存在',
+        cusImp9: '班级名称错误或不存在:',
+        cusImp10: '确认导入',
+        cusImp11: '重新导入',
+        cusImp12: '返回课程管理',
+        cusImp13: 'subject: 课程学科(必填),导入的学科需要在学校基础预设',
+        cusImp14: 'course: 课程名称(必填),如果导入的课程已经在学校存在,则会更新当前课程数据;如果导入的课程不存在则会新建课程',
+        cusImp15: 'courseNo: 课程编码(选填)',
+        cusImp16: 'courseDesc: 课程描述(选填)',
+        cusImp17: 'teacher: 授课教师(选填),如果多个老师教授同一个课程,需要复制课程信息,新建一行',
+        cusImp18: 'classes: 教师授课班级(选填),如果多个班级可以使用逗号分隔。',
+        cusImp19: '学科',
+        cusImp20: '课程',
+        cusImp21: '课程编码',
+        cusImp22: '课程描述',
+        cusImp23: '授课教师',
+        cusImp24: '授课班级',
+        cusImp25: '异常信息',
+        cusImp26: '请检查表格数据',
+        cusImp27: '请检查表格信息是否正确',
+        cusImp28: '导入成功',
+        cusImp29: '汇入表格栏位不完整,请检查汇入表格数据',
 
         //MgtStuList.vue
         nameList: '名单',
@@ -2956,6 +2956,7 @@ const LANG_ZH_CN = {
             fileName: '课堂记录统计表',
             noData: '暂无数据导出'
         },
+        normalStatus: '正常状态',
         expireStatus: '即将过期',
         deleteStatus: '已清理',
         delStatusTip: '课堂记录已被清理',

+ 1 - 0
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -2957,6 +2957,7 @@ const LANG_ZH_TW = {
             fileName: '課堂記錄統計表',
             noData: '暫無數據匯出'
         },
+        normalStatus: '正常狀態',
         expireStatus: '即將過期',
         deleteStatus: '已清理',
         delStatusTip: '課堂記錄已被清理',

+ 1 - 1
TEAMModelOS/ClientApp/src/view/coursemgt/ImportCus.vue

@@ -390,7 +390,7 @@ export default {
                 for (let j = 0; j < courses.length; j++) {
                     //1.验证教师姓名或id
                     if (courses[j].teacher) {
-                        let t = this.teacherJoin.find(item => item.name.trim() == courses[j].teacher.trim() || item.id == courses[j].teacher.trim())
+                        let t = this.teacherJoin.find(item => item.name.trim() == courses[j].teacher.toString().trim() || item.id == courses[j].teacher.toString().trim())
                         if (t) {
                             courses[j].teacherId = t.id
                         } else {

+ 6 - 1
TEAMModelOS/ClientApp/src/view/research-center/ResearchMgt.vue

@@ -228,7 +228,7 @@ export default {
   data(vm) {
     return {
       rangeArr: [vm.$t('lessonRecord.all'), vm.$t('lessonRecord.week'), vm.$t('lessonRecord.month'), vm.$t('lessonRecord.semester'), vm.$t('lessonRecord.custom')],
-      statusArr: [vm.$t('lessonRecord.all'), vm.$t('lessonRecord.expireStatus'), vm.$t('lessonRecord.deleteStatus')],
+      statusArr: [vm.$t('lessonRecord.normalStatus'), vm.$t('lessonRecord.expireStatus'), vm.$t('lessonRecord.deleteStatus')],
       curRangeIndex: 0,
       curStatusIndex: 0,
       hideAdFilter: true,
@@ -732,6 +732,7 @@ export default {
         "subjectId": [],
         "grade": [],
         "doubleGreen": false,
+        "isOk": true,
         "periodId": this.curPeriod.id,
         "quality": false,
         "DESC": "startTime",
@@ -811,12 +812,15 @@ export default {
         if (index === 1) {
           this.filterParams.expire = true
           this.filterParams.is404 = false
+          this.filterParams.isOk = false
         } else if (index === 2) {
           this.filterParams.expire = false
           this.filterParams.is404 = true
+          this.filterParams.isOk = false
         } else {
           this.filterParams.is404 = false
           this.filterParams.expire = false
+          this.filterParams.isOk = true
         }
       }
       this.doFilter()
@@ -882,6 +886,7 @@ export default {
         "subjectId": this.filterJson.subjectId ? [this.filterJson.subjectId] : [],
         "grade": this.filterJson.gradeId ? [this.filterJson.gradeId] : [],
         "doubleGreen": false,
+        "isOk": true,
         "periodId": this.curPeriod.id,
         "quality": false,
         "DESC": "startTime",

+ 3 - 3
TEAMModelOS/Controllers/Both/PaperController.cs

@@ -98,7 +98,7 @@ namespace TEAMModelOS.Controllers
             var id = jwt.Payload.Sub;
             var client = _azureCosmos.GetCosmosClient();
             List<object> papers = new List<object>();
-            var query = $"select c.id,c.subjectCode,c.code,c.periodCode,c.name,c.itemCount,c.level,c.pointItem,c.pointScore,c.score,c.gradeCode,c.createTime,c.sheet,c.sheetNo,c.tags ,c.mode from c where c.id = {id}";
+            var query = $"select c.id,c.subjectCode,c.code,c.periodCode,c.name,c.itemCount,c.level,c.pointItem,c.pointScore,c.score,c.gradeCode,c.createTime,c.sheet,c.sheetNo,c.tags ,c.mode ,c.itemSort from c where c.id = {id}";
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{school_code}") }))
             {
                 using var json = await JsonDocument.ParseAsync(item.ContentStream);
@@ -157,7 +157,7 @@ namespace TEAMModelOS.Controllers
             
             if (scope.ToString().Equals("school"))
             {
-                sql.Append("select  c.id,c.code,c.name,c.blob,c.periodId,c.gradeIds,c.subjectId,c.subjectName,c.score,c.useCount,c.scope,c.scoring,c.createTime,c.sheet ,c.mode ,c.sheetNo, c.tags from c");
+                sql.Append("select  c.id,c.code,c.name,c.blob,c.periodId,c.gradeIds,c.subjectId,c.subjectName,c.score,c.useCount,c.scope,c.scoring,c.createTime,c.sheet ,c.mode ,c.sheetNo, c.tags,c.itemSort from c");
                 AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(dict, sql);
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Paper>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{code}") }))
                 {
@@ -175,7 +175,7 @@ namespace TEAMModelOS.Controllers
             }
             if (scope.ToString().Equals("private"))
             {
-                sql.Append("select c.id,c.code,c.name,c.blob,c.subjectName,c.score,c.useCount,c.scope,c.scoring ,c.createTime ,c.sheet,c.sheetNo ,c.mode , c.tags from c");
+                sql.Append("select c.id,c.code,c.name,c.blob,c.subjectName,c.score,c.useCount,c.scope,c.scoring ,c.createTime ,c.sheet,c.sheetNo ,c.mode , c.tags, c.itemSort from c");
                 AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(dict, sql);
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Paper>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{code}") }))
                 {

+ 1 - 1
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -220,7 +220,7 @@ namespace TEAMModelOS.Controllers.Client
                 //觸發IMEI更新消息
                 var stus = students.Select(x => x.id).ToList();
                 var imeimsg = new ServiceBusMessage(new { request.channel, userid = request.did, request.school, stus }.ToJsonString());
-                imeimsg.ApplicationProperties.Add("name", "imei");
+                imeimsg.ApplicationProperties.Add("name", "Imei");
                 sbm.Add(imeimsg);
 
                 //開課記錄保存

+ 1 - 1
TEAMModelOS/Controllers/Normal/AbilitySubController.cs

@@ -1144,7 +1144,7 @@ namespace TEAMModelOS.Controllers
                 //}
 
                 List<GroupList> tchLists = new List<GroupList>();
-                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<GroupList>(queryText: $"SELECT value(c) FROM c where  c.type='research' ",
+                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<GroupList>(queryText: $"SELECT value(c) FROM c where  c.type='yxtrain' ",
                     requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{_school}") }))
                 {
                     tchLists.Add(item);

+ 162 - 0
TEAMModelOS/Controllers/Normal/ArtSettingController.cs

@@ -0,0 +1,162 @@
+using Azure.Cosmos;
+using Azure.Storage.Sas;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Filter;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Cosmos.Normal;
+using TEAMModelOS.SDK.Models.Service;
+
+namespace TEAMModelOS.Controllers
+{
+    [ProducesResponseType(StatusCodes.Status200OK)]
+    [ProducesResponseType(StatusCodes.Status400BadRequest)]
+    [Route("area/art-setting")]
+    [ApiController]
+    public class ArtSettingController : ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureServiceBusFactory _serviceBus;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly AzureRedisFactory _azureRedis;
+        public IConfiguration _configuration { get; set; }
+        public ArtSettingController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId, DingDing dingDing,
+            IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, IConfiguration configuration)
+        {
+            _azureCosmos = azureCosmos;
+            _serviceBus = serviceBus;
+            _snowflakeId = snowflakeId;
+            _dingDing = dingDing;
+            _option = option?.Value;
+            _azureStorage = azureStorage;
+            _azureRedis = azureRedis;
+            _configuration = configuration;
+        }
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        //[AuthToken(Roles = "teacher")]
+        [HttpPost("find-id")]
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "teacher,student,admin,area")]
+        public async Task<IActionResult> FindId(JsonElement request)
+        {
+            var client = _azureCosmos.GetCosmosClient();
+            if (!request.TryGetProperty("areaId", out JsonElement _areaId)) return BadRequest();
+            ArtSetting setting = null;
+            try
+            {
+                setting = await client.GetContainer(Constant.TEAMModelOS, "Normal").ReadItemAsync<ArtSetting>($"{_areaId}", partitionKey: new Azure.Cosmos.PartitionKey("ArtSetting"));
+                return Ok(new { setting });
+            }
+            catch (CosmosException ex)
+            {
+                return Ok(new { setting, error = ex.Status });
+            }
+        }
+        /// <summary>
+        /// 保存艺术评价的设置
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("upsert")]
+#if !DEBUG
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "teacher,student,admin,area")]
+#endif
+        public async Task<IActionResult> upsert(JsonElement json )
+        {
+            var client = _azureCosmos.GetCosmosClient();
+            if (!json.TryGetProperty("opt", out JsonElement _opt)) return BadRequest();
+            if (!json.TryGetProperty("areaId", out JsonElement _areaId)) return BadRequest();
+            ArtSetting setting = null;
+            try
+            {
+                setting = await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<ArtSetting>($"{_areaId}", new PartitionKey($"ArtSetting"));
+            }
+            catch (CosmosException ex) when (ex.Status == 404)
+            {
+                setting = new ArtSetting();
+                setting.id = $"{_areaId}";
+                setting.pk = "ArtSetting";
+                setting.code = "ArtSetting";
+                setting.ttl = -1;
+                await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(setting, partitionKey: new PartitionKey("ArtSetting"));
+            }
+            catch (Exception ex)
+            {
+                return BadRequest();
+            }
+            try
+            {
+                switch (true) {
+                    case bool when $"{_opt}".Equals("UpsertDimensions", StringComparison.OrdinalIgnoreCase) && (json.TryGetProperty("dimensions", out JsonElement _dimensions)):
+                        List<ArtDimension> dimensions = _dimensions.ToObject<List<ArtDimension>>();
+                        
+                        dimensions.ForEach(x => {
+                           var dimension=  setting.dimensions.Find(y => x.dimension.Equals(y.dimension));
+                            if (dimension!= null)
+                            {
+                                dimension.subjects = x.subjects;
+                            }
+                            else {
+                                setting.dimensions.Add(x);
+                            }
+                        });
+                        break;
+                    case bool when $"{_opt}".Equals("UpsertKnowledges", StringComparison.OrdinalIgnoreCase) && (json.TryGetProperty("knowledges", out JsonElement _knowledges)):
+                        List<ArtKnowledge> knowledges = _knowledges.ToObject<List<ArtKnowledge>>();
+
+                        knowledges.ForEach(x => {
+                            var knowledge = setting.knowledges.Find(y => x.subjectId.Equals(y.subjectId));
+                            if (knowledge != null)
+                            {
+                                knowledge.points = x.points; 
+                                knowledge.blocks = x.blocks;
+                            }
+                            else
+                            {
+                                setting.knowledges.Add(x);
+                            }
+                        });
+                        break;
+                    case bool when $"{_opt}".Equals("DeleteSubject", StringComparison.OrdinalIgnoreCase) && (json.TryGetProperty("subjectId", out JsonElement _subjectId)):
+                        setting.knowledges.RemoveAll(x => x.subjectId.Equals($"{_subjectId}"));
+                        setting.dimensions.ForEach(z => { z.subjects.RemoveAll(y => y.subjectId.Equals($"{_subjectId}")); });
+                        break;
+                    case bool when $"{_opt}".Equals("DeleteDimension", StringComparison.OrdinalIgnoreCase) && (json.TryGetProperty("dimension", out JsonElement _dimension)):
+                        setting.dimensions.RemoveAll(x => x.dimension.Equals($"{_dimension}"));
+                        break;
+                    default: break;
+                }
+                await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReplaceItemAsync<ArtSetting>(setting, setting.id, partitionKey: new Azure.Cosmos.PartitionKey("ArtSetting"));
+                return Ok(new {  });
+            }
+            catch (CosmosException ex)
+            {
+                return Ok(new { error = ex.Status });
+            }
+        }
+    }
+}
+

+ 3 - 3
TEAMModelOS/TEAMModelOS.csproj

@@ -43,9 +43,9 @@
     <SpaRoot>ClientApp\</SpaRoot>
     <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
     <UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-    <Version>5.2208.3</Version>
-    <AssemblyVersion>5.2208.3.1</AssemblyVersion>
-    <FileVersion>5.2208.3.1</FileVersion>
+    <Version>5.2208.10</Version>
+    <AssemblyVersion>5.2208.10.1</AssemblyVersion>
+    <FileVersion>5.2208.10.1</FileVersion>
     <Description>TEAMModelOS(IES5)</Description>
     <PackageReleaseNotes>IES版本说明版本切换标记202200701</PackageReleaseNotes>
     <PackageId>TEAMModelOS</PackageId>

+ 1 - 2
TEAMModelOS/appsettings.Development.json

@@ -36,8 +36,7 @@
       "GenPdfQueue": "dep-genpdf"
     },
     "SignalR": {
-      //"ConnectionString": "Endpoint=https://channel.service.signalr.net;AccessKey=KrblW06tuA4a/GyqRPDU0ynFFmAWxbAvyJihHclSXbQ=;Version=1.0;",
-      "ConnectionString": "Endpoint=https://channel.signalr.azure.cn;AccessKey=AtcB7JYFNUbUXb1rGxa3PVksQ2X5YSv3JOHZR9J88tw=;Version=1.0;"
+      "ConnectionString": "Endpoint=https://channel.service.signalr.net;AccessKey=KrblW06tuA4a/GyqRPDU0ynFFmAWxbAvyJihHclSXbQ=;Version=1.0;"
     }
   },
   "HaBookAuth": {