Pārlūkot izejas kodu

Merge branch 'develop5.0-tmd' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

CrazyIter_Bin 3 gadi atpakaļ
vecāks
revīzija
8775bea166

+ 3 - 2
TEAMModeBI/ClientApp/src/api/index.js

@@ -92,7 +92,8 @@ export default {
     getAllassist(data) {
         return post('/dd/get-tmdandddusers', data)
     },
-    testone(data) {
-        return post('/dd/get-ddbintmdinfo', data)
+    //对学校编辑提交更改
+    updateSchoolinfo(data) {
+        return post('/batchschool/upd-schoolassist', data)
     }
 }

+ 20 - 17
TEAMModeBI/ClientApp/src/view/created/created.vue

@@ -179,7 +179,7 @@
                         </div>
                     </el-form-item>
                     <el-form-item label="详细地址:" class="school-detailedly">
-                        <el-input v-model="item.presupposeAdmin" placeholder="详细地址" />
+                        <el-input v-model="item.address" placeholder="详细地址" />
                     </el-form-item>
                     <el-form-item label="学校空间大小:">
                         <el-input-number v-model="item.pitchSpace" :min='1' :max='50' /><span class="spacestitle">G</span>
@@ -197,7 +197,7 @@
     </div>
     <!--创校选单end-->
     <!--批量创建学校Dialog-->
-    <el-dialog v-model="batchDialogState" width="70%" :before-close="closeDialog" :close-on-click-modal="false" :close-on-press-escape="false" center>
+    <el-dialog v-model="batchDialogState" width="75%" :before-close="closeDialog" :close-on-click-modal="false" :close-on-press-escape="false" center>
         <div class="batch-box" v-show="batchList === false">
             <div class="uploadbox">
                 <el-upload class="upload-demo" action="" drag :before-upload="handleBeforeUpload">
@@ -213,7 +213,7 @@
                     <div class="hintbox">
                         <el-tooltip placement="top">
                             <template #content>name: 学校名称<br />admin: 管理员账号 <br />period: 学段 <br />size: 空间大小<br />region:国家
-                                <br />province: 省份<br />city: 市级<br />dist: 区域
+                                <br />province: 省份<br />city: 市级<br />dist: 区域<br />address:详细地址
                             </template>
                             <div>
                                 <svg class="hint" aria-hidden="true">
@@ -230,14 +230,15 @@
             <div class="batch-table">
                 <el-table :data="batchData" style="width: 100%">
                     <el-table-column prop="index" label="编号" width="100" type=index align="center" />
-                    <el-table-column prop="name" label="名称" width="220" align="center" />
-                    <el-table-column prop="admin" label="管理关联账号" width="150" align="center" />
-                    <el-table-column prop="period" label="学段" width="120" align="center" />
-                    <el-table-column prop="size" label="空间大小" width="120" align="center" />
-                    <el-table-column prop="region" label="国家" width="120" align="center" />
-                    <el-table-column prop="province" label="省" width="120" align="center" />
-                    <el-table-column prop="city" label="市" width="120" align="center" />
-                    <el-table-column prop="dist" label="区" width="120" align="center" />
+                    <el-table-column prop="name" label="名称" width="200" align="center" />
+                    <el-table-column prop="admin" label="管理关联账号" width="120" align="center" />
+                    <el-table-column prop="period" label="学段" width="100" align="center" />
+                    <el-table-column prop="size" label="空间大小" width="100" align="center" />
+                    <el-table-column prop="region" label="国家" width="80" align="center" />
+                    <el-table-column prop="province" label="省" width="80" align="center" />
+                    <el-table-column prop="city" label="市" width="80" align="center" />
+                    <el-table-column prop="dist" label="区" width="80" align="center" />
+                    <el-table-column prop="address" label="详细地址" width="200" align="center" />
                 </el-table>
                 <div class="batchs-btn">
                     <el-button type="primary" size="medium" @click="quantity">批量建立学校</el-button>
@@ -305,6 +306,7 @@ const schoolAssets = {
     pitchSpace: '',
     code: '',
     institution: '',
+    address: '',
 }
 export default {
     components: { EluiChinaAreaDht, Search },
@@ -444,6 +446,7 @@ export default {
                 },
                 pitchSpace: '',
                 code: '',
+                address: '',
             }
             schoolForm.value.push(data)
         }
@@ -462,16 +465,15 @@ export default {
                     province: schoolForm.value[i].schoolLocation.province,
                     city: schoolForm.value[i].schoolLocation.city,
                     dist: schoolForm.value[i].schoolLocation.area,
+                    address: schoolForm.value[i].address,
                 })
             }
             let parameter = { tmdId: users.teacher.id, tmdName: users.teacher.name, biSchools: datas }
             console.log(parameter, '创建学校最后的数据格式')
-            // proxy.$api.createdSchools(parameter).then((res) => {
-            //     res.state === 200
-            //         ? ((resultMsg.icon = '#icon-chenggong'), (resultMsg.text = '创校'), (model.value = 'resulttips'))
-            //         : ((resultMsg.icon = '#icon-shibai'), (resultMsg.textinfo = '您提交的创校申请失败,请检查数据内容'), ((model.value = 'resulttips'), (resultMsg.state = false)))
-            //     console.log(model, 'model值')
-            // })
+            proxy.$api.createdSchools(parameter).then((res) => {
+                res.state === 200 ? ElMessage.success('创建成功') : res.state === 201 ? ElMessage.info('学校已存在,请勿重复创建') : ElMessage.error('创建失败,请检查数据内容')
+                console.log(model, 'model值')
+            })
         }
         //处理取消和确认并返回
         function closeandreturn(val, name) {
@@ -524,6 +526,7 @@ export default {
             }
             console.log(schoolData, '处理ID后')
             let datas = { tmdId: users.teacher.id, tmdName: users.teacher.name, biSchools: schoolData }
+            console.log(datas, '批量最后的数据')
             proxy.$api.createdSchools(datas).then((res) => {
                 console.log(res, '批量创校的返回')
                 res.state === 200

+ 56 - 21
TEAMModeBI/ClientApp/src/view/teachermanage/school.vue

@@ -43,7 +43,12 @@
                 <el-table-column prop="city" label="市" width="150" align="center" />
                 <el-table-column prop="dist" label="区" width="150" align="center" />
                 <el-table-column prop="size" label="空间容量" width="130" align="center" />
-                <el-table-column prop="assisName" label="关联管家" width="200" align="center" />
+                <el-table-column label="关联管家" width="200" align="center">
+                    <template #default="scope">
+                        <div v-if="scope.row.assisName">{{scope.row.assisName}}</div>
+                        <div v-else>暂无</div>
+                    </template>
+                </el-table-column>
                 <!-- <el-table-column prop="state" label="状态" width="110" align="center" /> -->
                 <el-table-column fixed="right" label="操作" width="150" align="center">
                     <template #default="scope">
@@ -73,15 +78,15 @@
                     </el-upload>
                 </el-form-item>
                 <el-form-item label="学段:" class="school-form-grading">
-                    <el-checkbox v-model="nowPitchdata.period[0].value1" label="小学"></el-checkbox>
-                    <el-checkbox v-model="nowPitchdata.period[1].value2" label="初中"></el-checkbox>
-                    <el-checkbox v-model="nowPitchdata.period[2].value3" label="高中"></el-checkbox>
-                    <el-checkbox v-model="nowPitchdata.period[3].value4" label="职高"></el-checkbox>
-                    <el-checkbox v-model="nowPitchdata.period[4].value5" label="大学"></el-checkbox>
+                    <el-checkbox v-model="nowPitchdata.period[0].value" label="小学"></el-checkbox>
+                    <el-checkbox v-model="nowPitchdata.period[1].value" label="初中"></el-checkbox>
+                    <el-checkbox v-model="nowPitchdata.period[2].value" label="高中"></el-checkbox>
+                    <el-checkbox v-model="nowPitchdata.period[3].value" label="职高"></el-checkbox>
+                    <el-checkbox v-model="nowPitchdata.period[4].value" label="大学"></el-checkbox>
                 </el-form-item>
                 <el-form-item label="当前管家:" class="school-form-admin">
                     <el-select v-model="adminvalue" placeholder="管家名单" multiple @change="assistChange">
-                        <el-option v-for="item in adminoptions" :key="item.name" :label="item.mobile+'——'+item.name" :value="item.name" :disabled="!item.isexist">
+                        <el-option v-for="item in adminoptions" :key="item.name" :label="item.mobile+'——'+item.name" :value="item.tmdId ===null ? '':item.tmdId" :disabled="!item.isexist">
                             <!-- <span style="float: left">{{ item.mobile }}-{{item.name}}</span>
                             <i style="float: right;color: var(--el-text-color-secondary);font-size: 13px;" v-show="item.isexist === false">
                                 <svg class="school-admin-check" aria-hidden="true">
@@ -105,7 +110,7 @@
                     <el-switch v-model="value2" active-color="#13ce66" inactive-color="#ff4949" />
                 </el-form-item> -->
                 <el-form-item>
-                    <el-button type="primary" @click="onSubmit">提交更改</el-button>
+                    <el-button type="primary" @click="updateSchoolinfo">提交更改</el-button>
                     <el-button @click="schoolClose">取消</el-button>
                 </el-form-item>
             </el-form>
@@ -175,6 +180,7 @@ export default {
         }
         let models = ref('default')
         let imags = require('@/assets/img/tmd_logo.png')
+        //地区列表
         let provinceOptions = ref({
             optionInfo: [],
             provinceValue: '',
@@ -197,7 +203,7 @@ export default {
                         res.schoolAssists[i].assisName = ''
                         let datas = res.schoolAssists[i].assists
                         for (let y in datas) {
-                            res.schoolAssists[i].assisName = res.schoolAssists[i].assisName + datas[y].id + '-' + datas[y].name + ','
+                            res.schoolAssists[i].assisName = res.schoolAssists[i].assisName + datas[y].tmdId + '-' + datas[y].tmdName + ','
                         }
                     }
                 }
@@ -209,32 +215,32 @@ export default {
         function deleteRow(index, data) {
             nowPitchdata.value = Object.assign(nowPitchdata.value, data)
             let checkboxInof = [
-                { value1: false, name: '小学' },
-                { value2: false, name: '初中' },
-                { value3: false, name: '高中' },
-                { value4: false, name: '职高' },
-                { value5: false, name: '大学' },
+                { value: false, name: '小学' },
+                { value: false, name: '初中' },
+                { value: false, name: '高中' },
+                { value: false, name: '职高' },
+                { value: false, name: '大学' },
             ]
             nowPitchdata.value.period = []
             nowPitchdata.value.period.push(...checkboxInof)
             if (data.period.length) {
                 for (let i in data.period) {
-                    data.period[i].name === '小学' ? (nowPitchdata.value.period[0].value1 = true) : ''
-                    data.period[i].name === '初中' ? (nowPitchdata.value.period[1].value2 = true) : ''
-                    data.period[i].name === '高中' ? (nowPitchdata.value.period[2].value3 = true) : ''
-                    data.period[i].name === '职高' ? (nowPitchdata.value.period[3].value4 = true) : ''
-                    data.period[i].name === '大学' ? (nowPitchdata.value.period[4].value5 = true) : ''
+                    data.period[i].name === '小学' ? (nowPitchdata.value.period[0].value = true) : ''
+                    data.period[i].name === '初中' ? (nowPitchdata.value.period[1].value = true) : ''
+                    data.period[i].name === '高中' ? (nowPitchdata.value.period[2].value = true) : ''
+                    data.period[i].name === '职高' ? (nowPitchdata.value.period[3].value = true) : ''
+                    data.period[i].name === '大学' ? (nowPitchdata.value.period[4].value = true) : ''
                 }
             }
             data.assists.length
                 ? data.assists.forEach((element) => {
-                      adminvalue.value.push(element.name)
+                      adminvalue.value.push(element.tmdId)
                   })
                 : ''
             let user = JSON.parse(localStorage.getItem('userData'))
             uploadHeader.value['x-auth-authtoken'] = user.auth_token
             console.log(user.auth_token, uploadHeader.value)
-            console.log(data, 'data!!')
+            console.log(adminvalue, adminoptions, 'adminvalue!!')
             models.value = 'details'
             console.log(nowPitchdata, '当前学校')
         }
@@ -336,6 +342,7 @@ export default {
         function handleUpdErr() {
             ElMessage.error('校徽修改失败')
         }
+        //上传校徽成功后
         function success(response, file, fileList) {
             // this.schoolSetting.picture = response.url
             console.log(response, file, fileList, '上传成功的返回')
@@ -343,6 +350,33 @@ export default {
             //校徽长传成功自动保存
             // this.saveData()
         }
+        // 确认修改学校信息
+        function updateSchoolinfo() {
+            let user = JSON.parse(localStorage.getItem('userData'))
+            //修改表单
+            let assistData = adminvalue.value
+            let periodData = []
+            for (let i in nowPitchdata.value.period) {
+                let num = Number(i) + 1
+                if (nowPitchdata.value.period[i].value === true) {
+                    periodData.push(nowPitchdata.value.period[i].name)
+                }
+            }
+            let updateForm = {
+                schoolId: nowPitchdata.value.id,
+                picture: nowPitchdata.value.picture,
+                period: periodData,
+                size: nowPitchdata.value.size,
+                assistId: assistData,
+                tmdId: user.teacher.id,
+                tmdName: user.teacher.name,
+            }
+            console.log(updateForm, '学校信息')
+            proxy.$api.updateSchoolinfo(updateForm).then((res) => {
+                console.log(res, '修改学校的返回')
+                res.state === 200 ? (getAllschool(), ElMessage.success('学校信息修改成功'), (models.value = 'default')) : ElMessage.error('修改失败')
+            })
+        }
         getAllschool()
         getAllassists()
         return {
@@ -370,6 +404,7 @@ export default {
             cityOptions,
             distOptions,
             areaSelctChange,
+            updateSchoolinfo,
         }
     },
 }

+ 198 - 137
TEAMModeBI/Controllers/BIHome/HomeStatisController.cs

@@ -6,10 +6,11 @@ using System.Linq;
 using System.Threading.Tasks;
 using System.Text.Json;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Models;
 using Azure.Cosmos;
 using Microsoft.Extensions.Options;
 using TEAMModelOS.SDK.Models;
+using TEAMModelOS.Models;
+using System.Text;
 
 namespace TEAMModeBI.Controllers.BIHome
 {
@@ -29,18 +30,16 @@ namespace TEAMModeBI.Controllers.BIHome
         }
 
         /// <summary>
-        /// 依据学校编号,获取教师、学生数量
-        /// 没有传入学校编号,获取全部教师数量、学生数量、已创校数量、全部学校总空间大小
+        /// 获取全部教师数量、学生数量、已创校数量、全部学校总空间大小
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("get-numberpeople")]
-        public async Task<IActionResult> GetNumberPeople(JsonElement jsonElement)  
+        [HttpPost("get-allnumber")]
+        public async Task<IActionResult> GetAllNumber()
         {
             try
             {
-                jsonElement.TryGetProperty("schooolid", out JsonElement schoolId);
                 var client = _azureCosmos.GetCosmosClient();
 
                 //依据学校查询教师人数
@@ -51,146 +50,55 @@ namespace TEAMModeBI.Controllers.BIHome
                 List<string> schoolCount_List = new();
                 //学校空间大小
                 int schoolsize = 0;
-                //方案数
-                List<string> areaCount_List = new();
-                //册别数量
-                List<string> abilityCount = new List<string>();
-                //章节数量
-                List<string> abilityTaskCount = new List<string>();
-
-                if (!string.IsNullOrEmpty($"{schoolId}"))
-                {
-                    //查询学校教师人数
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select c.id from c join S1 in c.schools where S1.schoolId='{schoolId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
-                    {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                        {
-                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (accounts.MoveNext())
-                            {
-                                JsonElement account = accounts.Current;
-                                teacherCount_list.Add(account.GetProperty("id").GetString());
-                            }
-                        }
-                    }
 
-                    //查询学校学生人数
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{schoolId}") }))
-                    {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                        {
-                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (accounts.MoveNext())
-                            {
-                                JsonElement account = accounts.Current;
-                                studentCount_List.Add(account.GetProperty("id").GetString());
-                            }
-                        }
-                    }
-
-                    return Ok(new { teacherCount = teacherCount_list.Count, studentCount = studentCount_List.Count });
-                }
-                else
+                //查询全部教师人数
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select * from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
                 {
-                    //查询全部教师人数
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select * from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                     {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                        while (accounts.MoveNext())
                         {
-                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (accounts.MoveNext())
-                            {
-                                JsonElement account = accounts.Current;
-                                teacherCount_list.Add(account.GetProperty("id").GetString());
-                            }
+                            JsonElement account = accounts.Current;
+                            teacherCount_list.Add(account.GetProperty("id").GetString());
                         }
                     }
+                }
 
-                    //查询全部学生人数
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c where c.pk='Base'"))
+                //查询全部学生人数
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c where c.pk='Base'"))
+                {
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                     {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                        while (accounts.MoveNext())
                         {
-                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (accounts.MoveNext())
-                            {
-                                JsonElement account = accounts.Current;
-                                studentCount_List.Add(account.GetProperty("id").GetString());
-                            }
+                            JsonElement account = accounts.Current;
+                            studentCount_List.Add(account.GetProperty("id").GetString());
                         }
                     }
+                }
 
-                    //查询已创建多少学校
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: $"select c.id,c.size from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") })) 
-                    {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                        {
-                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (accounts.MoveNext())
-                            {
-                                JsonElement account = accounts.Current;
-                                schoolCount_List.Add(account.GetProperty("id").GetString());
-                                schoolsize += int.Parse(account.GetProperty("size").ToString());
-                            }
-                        }
-                    }
-                    //查询微能力点方案
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryStreamIterator(queryText: $"select c.id,c.standard from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base-Area") }))
+                //查询已创建多少学校
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: $"select c.id,c.size from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+                {
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                     {
-                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                        while (accounts.MoveNext())
                         {
-                            var area = json.RootElement.GetProperty("Documents").EnumerateArray();
-                            while (area.MoveNext()) 
-                            {
-                                JsonElement areacount = area.Current;
-                                areaCount_List.Add(areacount.GetProperty("standard").GetString());
-                            }
+                            JsonElement account = accounts.Current;
+                            schoolCount_List.Add(account.GetProperty("id").GetString());
+                            schoolsize += int.Parse(account.GetProperty("size").ToString());
                         }
                     }
-                    if (areaCount_List.Count > 0)
-                    {
-                        foreach (var tempItem in areaCount_List)
-                        {
-                            //册别数量
-                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Ability-{tempItem}") }))
-                            {
-                                using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                                {
-                                    var tempAbility = json.RootElement.GetProperty("Documents").EnumerateArray();
-                                    while (tempAbility.MoveNext())
-                                    {
-                                        JsonElement jsonAbility = tempAbility.Current;
-                                        abilityCount.Add(jsonAbility.GetProperty("id").GetString());
-                                    }
-                                }
-                            }
+                }
 
-                            //章节数量
-                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{tempItem}") }))
-                            {
-                                using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                                {
-                                    var tempAbilityTask = json.RootElement.GetProperty("Documents").EnumerateArray();
-                                    while (tempAbilityTask.MoveNext())
-                                    {
-                                        JsonElement jsonAbilityTask = tempAbilityTask.Current;
-                                        abilityTaskCount.Add(jsonAbilityTask.GetProperty("id").GetString());
-                                    }
-                                }
-                            }
-                        }
-                    }
+                return Ok(new { teacherCount = teacherCount_list.Count, studentCount = studentCount_List.Count, schoolCount = schoolCount_List.Count, schoolSize = schoolsize });
 
-                    return Ok(new { teacherCount = teacherCount_list.Count, studentCount = studentCount_List.Count, schoolCount = schoolCount_List.Count, schoolsize = schoolsize, areaCount = areaCount_List.Count, abilityCount = abilityCount.Count, abilityTaskCount = abilityTaskCount.Count });
-                }
             }
             catch (Exception ex)
             {
@@ -310,37 +218,190 @@ namespace TEAMModeBI.Controllers.BIHome
         }
 
         /// <summary>
-        /// 查询地区信息
+        /// 查询所有区级信息统计数据
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("get-regionnumber")]
-        public async Task<IActionResult> GetRegionNumber(JsonElement jsonElement) 
+        [HttpPost("get-alldiststics")]
+        public async Task<IActionResult> GetAllDistStics(JsonElement jsonElement) 
         {
             try
             {
-                jsonElement.TryGetProperty("country", out JsonElement _country);  //
-                jsonElement.TryGetProperty("province", out JsonElement _province);
-                jsonElement.TryGetProperty("city", out JsonElement _city);
-                jsonElement.TryGetProperty("county", out JsonElement _county);
+                var cosmosClient = _azureCosmos.GetCosmosClient();
+                List<SticsCity> standards = new List<SticsCity>();
+                StringBuilder stringBuder = new StringBuilder("select c.name,c.provName,c.cityName,c.standard from c");
+                //查询省份区域
+                await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: stringBuder.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-Area") }))
+                {
+                    SticsCity sticsCity = new SticsCity
+                    {
+                        provName = item.provName,
+                        cityName = item.cityName,
+                        distName = item.name,
+                        standard = item.standard
+                    };
+                    standards.Add(sticsCity);
+                }
+                List<SticsDist> sticsDists = new List<SticsDist>();
+
+                //查询所有下面的学校数量
+                foreach (var itemStandrds in standards) 
+                {
+                    SticsDist sticsDist = new SticsDist();
+
+                    sticsDist.provName = itemStandrds.provName;
+                    sticsDist.cityName = itemStandrds.cityName;
+                    sticsDist.distName = itemStandrds.distName;
+                    sticsDist.standard = itemStandrds.standard;
+
+                    List<string> schoolIds = new List<string>();
+                    int schoolCount = 0;
 
+                    await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: $"select c.id from c where c.standard='{itemStandrds.standard}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
+                    {
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                        {
+                            var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                            while (accounts.MoveNext())
+                            {
+                                JsonElement account = accounts.Current;
+                                schoolIds.Add(account.GetProperty("id").GetString());
+                                schoolCount += 1;
+                            }
+                        }
+                    }
+
+                    sticsDist.schoolCount = schoolCount;
 
+                    int teacherCount = 0;  //教师数量
+                    int studentCount = 0;  //学生数量
+                    List<string> teacherIds = new List<string>();
 
+                    List<string> studentIds = new List<string>();
+
+                    //查询学校下面的教师人数
+                    foreach (var itemSchool in schoolIds)
+                    {
+                        string sqlTeacherTxt = $"select distinct value(c) from c join a1 in c.schools where a1.schoolId='{itemSchool}'";
+                        //查询全部教师人数
+                        await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: sqlTeacherTxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
+                        {
+                            using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                            if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                            {
+                                var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                                while (accounts.MoveNext())
+                                {
+                                    //JsonElement account = accounts.Current;
+                                    //teacherIds.Add(account.GetProperty("id").GetString());
+                                    teacherCount += 1;
+                                }
+                            }
+                        }
 
+                        //查询全部学生人数
+                        await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{itemSchool}") }))
+                        {
+                            using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                            if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                            {
+                                var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                                while (accounts.MoveNext())
+                                {
+                                    //JsonElement account = accounts.Current;
+                                    //studentIds.Add(account.GetProperty("id").GetString());
+                                    studentCount += 1;
+                                }
+                            }
+                        }
+                    }
 
+                    sticsDist.teacherCount = teacherCount;
+                    sticsDist.studentCount = studentCount;
 
+                    sticsDists.Add(sticsDist);
+                }
 
-                return Ok(new { state = 200 });
+                return Ok(new { state = 200, sticsDists });
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"BI,{_option.Location}  homestatis/get-regionnumber   \n {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                await _dingDing.SendBotMsg($"BI,{_option.Location}  homestatis/get-alldiststics   \n {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
 
                 return BadRequest();
             }
         }
 
 
+        /// <summary>
+        /// 区域
+        /// </summary>
+        public record SticsCity
+        {
+            /// <summary>
+            /// 省份
+            /// </summary>
+            public string provName { get; set; }
+
+            /// <summary>
+            /// 市名称
+            /// </summary>
+            public string cityName { get; set; }
+
+            /// <summary>
+            /// 区域名称
+            /// </summary>
+            public string distName { get; set; }
+
+            /// <summary>
+            /// 区域标准
+            /// </summary>
+            public string standard { get; set; }
+        }
+
+        /// <summary>
+        /// 返回统计数据
+        /// </summary>
+        public record SticsDist 
+        {
+            /// <summary>
+            /// 省份
+            /// </summary>
+            public string provName { get; set; }
+
+            /// <summary>
+            /// 市名
+            /// </summary>
+            public string cityName { get; set; }
+
+            /// <summary>
+            /// 区域标准名称
+            /// </summary>
+            public string distName { get; set; }
+
+            /// <summary>
+            /// 区域标准
+            /// </summary>
+            public string standard { get; set; }
+
+            /// <summary>
+            /// 学校数量
+            /// </summary>
+            public int schoolCount { get; set; }
+
+            /// <summary>
+            /// 教师人数
+            /// </summary>
+            public int teacherCount { get; set; }
+
+            /// <summary>
+            /// 学生人数
+            /// </summary>
+            public int studentCount { get; set; }
+        }
+
+
     }
 }

+ 13 - 13
TEAMModeBI/Controllers/BISchool/BatchSchoolController.cs

@@ -129,7 +129,7 @@ namespace TEAMModeBI.Controllers.BISchool
 
                     if (mode.GetString().Equals("del"))
                     {
-                        StringBuilder stringBuilder = new StringBuilder($"{_tmdId}【{_tmdName}】账户操作{st.id}【{st.name}】的权限,删除权限有:");
+                        StringBuilder stringBuilder = new StringBuilder($"{_tmdName}【{_tmdId}】账户操作{st.name}【{st.id}】的权限,删除权限有:");
                         foreach (var pm in paramPower.EnumerateArray())
                         {
                             var bools = st.permissions.Find(x => x.Equals($"{pm}"));
@@ -154,7 +154,7 @@ namespace TEAMModeBI.Controllers.BISchool
                     else if (mode.GetString().Equals("up"))
                     {
 
-                        StringBuilder stringBuilder = new StringBuilder($"{_tmdId}【{_tmdName}】账户操作{st.id}【{st.name}】的权限,更新权限有:");
+                        StringBuilder stringBuilder = new StringBuilder($"{_tmdName}【{_tmdId}】账户操作{st.name}【{st.id}】的权限,更新权限有:");
                         var stes = st.roles.Find(x => x.Equals("assistant"));
                         if (string.IsNullOrEmpty($"{stes}"))
                         {
@@ -221,7 +221,7 @@ namespace TEAMModeBI.Controllers.BISchool
                 operateLog.platformSource = "BI";
                 operateLog.tmdId = $"{foundSchools.tmdId}";
                 operateLog.tmdName = $"{foundSchools.tmdName}";
-                StringBuilder stringBuilder = new StringBuilder($"{foundSchools.tmdId}【{foundSchools.tmdName}】操作了批量创校功能:");
+                StringBuilder stringBuilder = new StringBuilder($"{foundSchools.tmdName}【{foundSchools.tmdId}】操作了批量创校功能:");
 
                 if (foundSchools.biSchools.Count > 0)
                 {
@@ -292,7 +292,7 @@ namespace TEAMModeBI.Controllers.BISchool
                                     ttl = -1
                                 };
 
-                                stringBuilder.Append($"教师信息:{schoolTeacher.id}【{schoolTeacher.name}】,教师权限:{schoolTeacher.roles}");
+                                stringBuilder.Append($"教师信息:{schoolTeacher.name}【{schoolTeacher.id}】,教师权限:{schoolTeacher.roles.ToString()}");
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
                             }
                             else
@@ -311,7 +311,7 @@ namespace TEAMModeBI.Controllers.BISchool
                                     schools = new List<Teacher.TeacherSchool>() { new TeacherSchool { schoolId = bischool.id, name = bischool.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() } }
                                 };
 
-                                stringBuilder.Append($"没有该教师信息创建的教师信息:{addteacher.id}【{addteacher.name}】");
+                                stringBuilder.Append($"没有该教师信息创建的教师信息:{addteacher.name}【{addteacher.id}】");
                                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(addteacher, new PartitionKey("Base"));
                                 SchoolTeacher schoolTeacher = new SchoolTeacher
                                 {
@@ -407,8 +407,8 @@ namespace TEAMModeBI.Controllers.BISchool
                             {
                                 Assist assist = new Assist
                                 {
-                                    id = obj.GetProperty("id").GetString(),
-                                    name = obj.GetProperty("name").GetString()
+                                    tmdId = obj.GetProperty("id").GetString(),
+                                    tmdName = obj.GetProperty("name").GetString()
                                 };
 
                                 assists.Add(assist);
@@ -455,8 +455,8 @@ namespace TEAMModeBI.Controllers.BISchool
                             {
                                 Assist assist = new Assist
                                 {
-                                    id = obj.GetProperty("id").GetString(),
-                                    name = obj.GetProperty("name").GetString()
+                                    tmdId = obj.GetProperty("id").GetString(),
+                                    tmdName = obj.GetProperty("name").GetString()
                                 };
 
                                 assists.Add(assist);
@@ -801,8 +801,8 @@ namespace TEAMModeBI.Controllers.BISchool
                         {
                             Assist assist = new Assist
                             {
-                                id = obj.GetProperty("id").GetString(),
-                                name = obj.GetProperty("name").GetString()
+                                tmdId = obj.GetProperty("id").GetString(),
+                                tmdName = obj.GetProperty("name").GetString()
                             };
                             assists.Add(assist);
                         }
@@ -1136,8 +1136,8 @@ namespace TEAMModeBI.Controllers.BISchool
         }
         public class Assist 
         {
-            public string id { get; set; }
-            public string name { get; set; }
+            public string tmdId { get; set; }
+            public string tmdName { get; set; }
         }
 
         public record ReplaceSchool() 

+ 12 - 12
TEAMModeBI/Controllers/DingDingStruc/DDStructController.cs

@@ -333,7 +333,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                         {
                             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                             {
-                                dDAndTmdInfo.tmdid = item.id;
+                                dDAndTmdInfo.tmdId = item.id;
                                 dDAndTmdInfo.isexist = true;
 
                                 if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -423,7 +423,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                         {
                                             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                             {
-                                                dDAndTmdInfo2.tmdid = item.id;
+                                                dDAndTmdInfo2.tmdId = item.id;
                                                 dDAndTmdInfo2.isexist = true;
 
                                                 if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -604,7 +604,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                             {
                                 await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                 {
-                                    dDUserInfoAndTMD.tmdid = item.id;
+                                    dDUserInfoAndTMD.tmdId = item.id;
                                     dDUserInfoAndTMD.isexist = true;
 
                                     if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -745,7 +745,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                 {
                                     await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                     {
-                                        dDAndTmdInfo1.tmdid = item.id;
+                                        dDAndTmdInfo1.tmdId = item.id;
                                         dDAndTmdInfo1.isexist = true;
 
                                         if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -840,7 +840,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                         {
                                             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                             {
-                                                dDAndTmdInfo2.tmdid = item.id;
+                                                dDAndTmdInfo2.tmdId = item.id;
                                                 dDAndTmdInfo2.isexist = true;
 
                                                 if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -935,7 +935,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                                 {
                                                     await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                                     {
-                                                        dDAndTmdInfo3.tmdid = item.id;
+                                                        dDAndTmdInfo3.tmdId = item.id;
                                                         dDAndTmdInfo3.isexist = true;
 
                                                         if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1030,7 +1030,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                                         {
                                                             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                                             {
-                                                                dDAndTmdInfo3.tmdid = item.id;
+                                                                dDAndTmdInfo3.tmdId = item.id;
                                                                 dDAndTmdInfo3.isexist = true;
 
                                                                 if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1125,7 +1125,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                                                 {
                                                                     await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                                                     {
-                                                                        dDAndTmdInfo5.tmdid = item.id;
+                                                                        dDAndTmdInfo5.tmdId = item.id;
                                                                         dDAndTmdInfo5.isexist = true;
 
                                                                         if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1271,7 +1271,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                 {
                                     await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                     {
-                                        dDAndTmdInfo.tmdid = item.id;
+                                        dDAndTmdInfo.tmdId = item.id;
                                         dDAndTmdInfo.isexist = true;
 
                                         if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1364,7 +1364,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                         {
                                             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                             {
-                                                dDAndTmdInfo2.tmdid = item.id;
+                                                dDAndTmdInfo2.tmdId = item.id;
                                                 dDAndTmdInfo2.isexist = true;
 
                                                 if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1458,7 +1458,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                                 {
                                                     await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                                     {
-                                                        dDAndTmdInfo3.tmdid = item.id;
+                                                        dDAndTmdInfo3.tmdId = item.id;
                                                         dDAndTmdInfo3.isexist = true;
 
                                                         if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
@@ -1778,7 +1778,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
             /// <summary>
             /// 绑定的醍摩豆账户
             /// </summary>
-            public string tmdid { get; set; }
+            public string tmdId { get; set; }
 
             /// <summary>
             /// 醍摩豆角色

+ 1 - 2
TEAMModelOS.SDK/Models/Service/FixDataService.cs

@@ -402,8 +402,7 @@ namespace TEAMModelOS.SDK.Models.Service
         /// 修復评测内容
         /// </summary>
         /// <param name="client"></param>
-        /// <param name="schoolCode"></param>
-        /// <param name="dataDic"></param>
+        /// <param name="data"></param>
         /// <returns></returns>
         public static async Task<List<string>> FixExamPublish(CosmosClient client, JsonElement data)
         {

+ 2 - 3
TEAMModelOS/ClientApp/src/components/syllabus/DragTree.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="syllabus-tree-main">
 		<vuescroll>
-			<el-tree :data="treeDatas" :props="defaultProps" :allow-drop="allowDrop" class="tree" node-key="id"
+			<el-tree :data="treeDatas" :props="defaultProps"  class="tree" node-key="id"
 				default-expand-all highlight-current @node-drop="handleDrop" @node-click="onNodeClick"
 				:draggable="Boolean(editable)" :expand-on-click-node="false" ref="tree">
 				<span class="custom-tree-node" slot-scope="{ node, data }">
@@ -161,10 +161,9 @@
 					if(draggingNode.level !== 1 && dropNode.level !== 1){
 						return dropType === 'prev' || dropType === 'after' ||  dropType === 'inner'
 					}
-					
 				}
 			},
-			// 拖拽完成回调
+			/* 拖拽完成回调 */ 
 			handleDrop(draggingNode, dropNode, dropType) {
 				this.$emit('addModifyId',this.getChapterIdById(draggingNode.data.id))
 				this.$emit('addModifyId',this.getChapterIdById(dropNode.data.id))

+ 27 - 0
TEAMModelOS/ClientApp/src/view/areaMgmt/SchoolComp.vue

@@ -37,6 +37,33 @@ export default {
                 //         saveAsImage: {}
                 //     }
                 // },
+                dataZoom: [{
+                    'show': true,
+                    'height': 10,
+                    'xAxisIndex': [
+                        0
+                    ],
+                    bottom: 10,
+                    'start': 0,
+                    'end': 35,
+                    handleIcon: 'M512 497.821538m-418.264615 0a418.264615 418.264615 0 1 0 836.52923 0 418.264615 418.264615 0 1 0-836.52923 0Z',
+                    handleSize: '160%',
+                    handleStyle: {
+                        color: '#d3dee5'
+
+                    },
+                    textStyle: {
+                        color: '#fff'
+                    },
+                    // borderColor: '#C3C3C3',
+                    borderRadius: '5px'
+                }, {
+                    'type': 'inside',
+                    'show': true,
+                    'height': 15,
+                    'start': 0,
+                    'end': 35
+                }],
                 xAxis: {
                     data: [],
                     axisLabel: {

+ 9 - 5
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.less

@@ -52,7 +52,7 @@
     background: #fff;
     margin-top: 15px;
 
-    &:hover .page-wrap {
+    &:hover .cus-page-wrap {
         opacity: 1;
     }
 
@@ -97,18 +97,17 @@
         box-shadow: 0px 0px 5px rgb(255, 153, 0);
     }
 }
-.page-wrap {
+.cus-page-wrap {
     left: 0px;
     bottom: 0px;
     position: absolute;
     padding: 6px;
-    color: white;
     width: 100%;
     height: 36px;
     background: rgba(43, 51, 63, 0.7);
     text-align: center;
     opacity: 0;
-    transition: opacity 1.2s;
+    transition: opacity 1s;
     border-right: 2px solid black;
 }
 
@@ -509,4 +508,9 @@
     font-size: 20px;
     color: white;
     cursor: pointer;
-}
+}
+.course-cur-img{
+    max-width: 100%;
+    max-height: 100%;
+}
+

+ 39 - 73
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.vue

@@ -39,8 +39,15 @@
                 </div>
                 <!--上课内容-->
                 <div :class="moStatus ? 'class-content mouse-over-status':'class-content'" @mousemove="moStatus = true" @mouseleave="moStatus = false">
-                    <div class="courseware-wrap">
+                    <!-- 暂时没有HTEX数据 -->
+                    <!-- <div class="courseware-wrap">
                         <MyHTEXRender :page="curPage" isInner @onPageChange="getCurHTEX" url="https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/testdata/%E3%80%8A%E5%9B%9B%E8%BE%B9%E5%BD%A2%E3%80%8B%E8%AF%BE%E4%BB%B6%20-%20TEST/index.json"></MyHTEXRender>
+                    </div> -->
+                    <div class="courseware-wrap">
+                        <img :src="curImg" alt="" class="course-cur-img">
+                        <div class="cus-page-wrap">
+                            <Page :total="pageList.length" :current="curPage" :page-size="1" size="small" @on-change="getCurHTEX" />
+                        </div>
                     </div>
                     <video-player2 class="video-player-box" :markers="markers" ref="videoPlayer" :options="playerOptions" :playsinline="true" @getCurPage="getCurPage">
                     </video-player2>
@@ -63,10 +70,10 @@
                         <Icon :class="typeIndex == 'link' ? 'type-icon-active type-icon':'type-icon'" type="ios-link" @click="filterType('link')" title="超链接" />
                     </div>
                     <vuescroll ref="datawrap">
-                        <div class="page-item" :key="index" v-for="(item,index) in pageList" :id="'page'+(index+1)">
+                        <div class="page-item" :key="index" v-for="(item,index) in pageList" :id="'page'+(item.page)">
                             <!-- <Icon v-if="item.showFilter" type="ios-funnel" class="page-filter-icon" :style="{color: filterStatus ? '#1cc0f3':'#FFFFFF'}" @click="filterPage()" /> -->
                             <div class="page-info-wrap">
-                                <span class="page-tag" @click="toVideo(index+1,$event)" :ref="'page'+(index+1)">课件第{{index+1}}页</span>
+                                <span class="page-tag" @click="toVideo(index+1,$event)" :ref="'page'+(index+1)">课件第{{item.page}}页</span>
                                 <img class="page-mini-img" @click="openViewer(item.img)" :src="item.img" />
                             </div>
                             <div class="record-data-wrap">
@@ -180,14 +187,14 @@
             <Icon type="md-close" class="close-icon" @click="closeViewer()" />
             <img :src="viewUrl" class="animated fadeIn" @click.stop />
         </div>
-        <div v-if="openHtexViewer" class="image-viewer htex-viewer">
+        <!-- <div v-if="openHtexViewer" class="image-viewer htex-viewer">
             <Icon type="md-close" class="close-icon" @click="openHtexViewer = false" />
             <div class="viewer-page-wrap animated fadeIn" :style="{width:(800 / mapJson.height * mapJson.width)+'px'}">
                 <Page :total="120" size="small" :current.sync="curPage" show-elevator show-total @on-change="getCurHTEX">
                     <span>{{curPage}}/12</span>
                 </Page>
             </div>
-        </div>
+        </div> -->
     </div>
 </template>
 <script>
@@ -209,11 +216,8 @@ export default {
             activityInfo: {},
             pageImages: [],
             //测试数据
-            mapJson: {},
             moStatus: false,
-            markers: [
-                // { time: 1, text: "第1页", page: 1 }
-            ],
+            markers: [],
             curPage: 1,
             schoolSas: '',
             teacherSas: '',
@@ -531,39 +535,14 @@ export default {
                 sources: [],
                 poster: '',
                 notSupportedMessage: '此视频暂无法播放,请稍后再试' //允许覆盖Video.js无法播放媒体源时显示的默认信息。
-            },
-            //渲染ppt的相关json数据
-            renderJsons: {
-                "page": 1,
-                "jsonUrl": require('./data/HtexJson/Complexgraphics.json')
             }
         }
     },
     methods: {
-        // 获取课件截图
-        getPageImages() {
-            let url = this.$store.state.user.userProfile.blob_uri
-            let sas = this.$store.state.user.userProfile.blob_sas
-            let host = url.substring(0, url.lastIndexOf('/'))
-            let cont = url.substring(url.lastIndexOf('/') + 1)
-            let blobTool = new BlobTool(host, cont, '?' + sas, 'private')
-            blobTool.listBlob({
-                prefix: this.blobUrl + '/Memo'
-            }).then(
-                res => {
-                    console.log(res)
-                    res.blobList.forEach(item => {
-                        item.url = item.url + '?' + sas
-                    })
-                    this.pageImages = res.blobList
-                },
-                err => {
-                    console.log(err)
-                }
-            )
-        },
         //根据SokratesRecords.json处理page数据
         getPageList() {
+            this.pageList = []
+            this.markers = []
             let userProfile = this.$store.state.user.userProfile
             let url = `${userProfile.blob_uri}/${this.blobUrl}/Sokrates/SokratesRecords.json?${userProfile.blob_sas}`
             this.$tools.getFile(url).then(
@@ -571,25 +550,24 @@ export default {
                     this.sokratesRecords = JSON.parse(res)
                     let r = this.sokratesRecords.find(item => item.Event === 'PgidList')
                     let pgids = r ? r.PgIdList : []
-                    pgids.forEach(item => {
+                    pgids.forEach((item, index) => {
                         let page = {}
                         page.id = item
                         page.img = `${userProfile.blob_uri}/${this.blobUrl}/Memo/${item}.jpg?${userProfile.blob_sas}`
-                        //获取page时间
-                        let s = this.sokratesRecords.find(record => record.Pgid === item)
-                        page.time = s ? s.Time : 660.4133
+                        page.page = index + 1
                         //当前页面对应的sokrates
                         page.sokrates = this.sokratesRecords.filter(record => record.Pgid === item)
                         this.pageList.push(page)
                     })
-                    this.markers = this.pageList.map((item, index) => {
+                    console.log(this.pageList)
+                    let pageEvent = this.sokratesRecords.filter(item => item.Event === 'PgJump' || item.Event === 'PgAdd' || item.Event === 'DiscussStart')
+                    this.markers = pageEvent.map((item, index) => {
                         return {
-                            time: item.time,
+                            time: item.Time,
                             text: `第${index + 1}页`,
                             page: index + 1
                         }
                     })
-                    console.log('page列表', this.pageList)
                 },
                 err => {
                     this.$Message.error('获取数据失败')
@@ -610,26 +588,26 @@ export default {
         },
         //点击视频切片
         getCurPage(page) {
-            this.mapJson = require('./data/' + page + '.json')
             this.$refs["datawrap"].scrollIntoView('#page' + page, 500)
             this.$refs.videoPlayer.player.play()
             this.curPage = page
         },
         //点击课件page
         getCurHTEX(page) {
-            this.mapJson = require('./data/' + page + '.json')
             //视频时间定位
-            let pageInfo = this.markers.filter(item => {
+            let pageInfo = this.markers.find(item => {
                 return item.page == page
             })
-            this.$refs.videoPlayer.player.currentTime(pageInfo[0].time)
-            if (!this.openHtexViewer) {
-                this.$refs.videoPlayer.player.play()
+            if (pageInfo) {
+                this.$refs.videoPlayer.player.currentTime(pageInfo.time)
+                if (!this.openHtexViewer) {
+                    this.$refs.videoPlayer.player.play()
+                } else {
+                    this.$refs.videoPlayer.player.pause()
+                }
             } else {
-                this.$refs.videoPlayer.player.pause()
+                this.$refs["datawrap"].scrollIntoView('#page' + page, 500)
             }
-            //互动记录滚动
-            this.$refs["datawrap"].scrollIntoView('#page' + page, 500)
         },
         //点击互动记录页面tag
         toVideo(page, e) {
@@ -656,8 +634,6 @@ export default {
                 return item.page == page
             })
             this.$refs.videoPlayer.player.currentTime(pageInfo[0].time)
-            //课件页面定位
-            this.mapJson = require('./data/' + page + '.json')
         },
         //互动类型筛选
         filterType(type) {
@@ -708,9 +684,17 @@ export default {
             })
         },
     },
+    computed: {
+        curImg() {
+            if (this.pageList[this.curPage]) {
+                return this.pageList[this.curPage - 1].img
+            } else {
+                return ""
+            }
+        }
+    },
     created() {
         this.recordDataShow = JSON.parse(JSON.stringify(this.recordData))
-        this.mapJson = require('./data/1.json')
 
         //对接Blob数据
         // 获取ActivityInfo.json
@@ -732,7 +716,6 @@ export default {
         this.playerOptions.sources.push({
             src: this.videoUrl
         })
-        this.getPageImages()
         this.getPageList()
     }
 }
@@ -788,21 +771,4 @@ export default {
 .video-player-box .vjs-volume-panel {
     display: none;
 }
-
-.page-wrap .ivu-page-next a,
-.page-wrap .ivu-page-prev a,
-.page-wrap .ivu-page-item a {
-    color: white;
-}
-
-.page-wrap .ivu-page-item,
-.page-wrap .ivu-page-next,
-.page-wrap .ivu-page-prev {
-    background: unset;
-}
-
-.page-wrap .ivu-page-item-active a,
-.page-wrap .ivu-page-item:hover a {
-    color: #2d8cf0;
-}
 </style>

+ 1 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/ByStuMark.vue

@@ -340,6 +340,7 @@
 
         <Modal v-model="originalStatus" :title="$t('learnActivity.score.viewOrigin')" :width="900" footer-hide>
             <img v-for="item in sourceList" :src="item.url" :key="item.name" width="850">
+            <EmptyData v-show="!sourceList.length"></EmptyData>
         </Modal>
 
     </div>

+ 2 - 0
TEAMModelOS/ClientApp/src/view/research-center/ResearchCenter.less

@@ -202,4 +202,6 @@
 			color: #a8a8a8;
 		}
 	}
+
+	
 }

+ 112 - 3
TEAMModelOS/ClientApp/src/view/research-center/ResearchMgt.vue

@@ -49,6 +49,10 @@
 				<Icon type="ios-trash" />
 				<span>批量删除</span>
 			</div>
+			<div class="tool-item" @click="categoryModal = true">
+				<Icon type="md-settings" />
+				<span>类别管理</span>
+			</div>
 		</div>
 		<div class="table-box">
 			<Table stripe :columns="tableColumn" :data="tableData" :height="tableHeight" :loading="tableLoading">
@@ -61,15 +65,35 @@
 			</Table>
 			<Page :total="originList.length" :page-size="curPageSize" :current="curPage" :page-size-opts="[10,15,30,45]" @on-change="onPageChange" @on-page-size-change="onPageSizeChange" show-sizer></Page>
 		</div>
+		<!-- 类别管理弹窗 -->
+		<Modal v-model="categoryModal" transfer width="660" ok-text="保存变更" class="research-modal">
+			<div slot="header">
+				课例类别管理
+			</div>
+			<div class="tags-box">
+				<span class="tags-item" v-for="(item,index) in tags" :key="index">
+					<Input autofocus v-model="curEditTag" v-if="curEditIndex === index" @on-enter="onConfirmInput" @on-blur="onConfirmInput"></Input>
+					<span v-if="curEditIndex !== index">{{ item }}</span>
+					<Icon type="md-create" @click="onEditTag(item,index)"></Icon>
+					<Icon type="md-trash"  @click="onDeleteTag(item,index)">></Icon>
+				</span>
+				<span class="tags-item" @click="onAddTag">
+					<Icon type="md-add" style="margin: 0 5px 0 0;color: #70b1e7;"></Icon>
+					<span>添加新类别</span>
+				</span>
+			</div>
+		</Modal>
 	</div>
 </template>
-
 <script>
 	export default {
 		data(){
 			return {
+				categoryModal:false,
 				tableLoading:false,
 				tableHeight: document.documentElement.clientHeight * 0.75,
+				curEditTag:'',
+				curEditIndex:-1,
 				curPage:1,
 				curPageSize:15,
 				filterJson:{
@@ -78,6 +102,7 @@
 					gradeId:'',
 					subjectId:''
 				},
+				tags:['语文教研','数学教研','英文教研','特色教研','语文教研','数学教研','英文教研','特色教研'],
 				gradeList:[],
 				subjectList:[],
 				tableData:[],
@@ -95,8 +120,16 @@
 					},
 					{
 						title: '课例名称',
+						tooltip:true,
+						tooltipTheme:'light',
+						tooltipMaxWidth:200,
 						key: 'name'
 					},
+					{
+						title: '类别',
+						width:150,
+						key: 'category'
+					},
 					{
 						title: '科目',
 						key: 'subject',
@@ -139,6 +172,7 @@
 						tScore: 78,
 						pScore: 85,
 						isPro: true,
+						category:'特色教研',
 						subject: '语文',
 						grade: '三年级'
 					},
@@ -150,6 +184,7 @@
 						tScore: 78,
 						pScore: 85,
 						isPro: true,
+						category:'特色教研',
 						subject: '语文',
 						grade: '三年级'
 					},
@@ -161,6 +196,7 @@
 						tScore: 78,
 						pScore: 85,
 						isPro: true,
+						category:'特色教研',
 						subject: '语文',
 						grade: '三年级'
 					}]
@@ -174,23 +210,96 @@
 				}
 				this.onPageChange(1)
 				this.tableLoading = false
-			},2000)
+			},1000)
 			
 		},
 		methods:{
+			/* 切换页码 */
 			onPageChange(page){
 				this.curPage = page;
 				let start = this.curPageSize * (page - 1);
 				let end = this.curPageSize * page;
 				this.tableData = this.originList.slice(start, end)
 			},
+			/* 切换每页展示条数 */
 			onPageSizeChange(val){
 				this.curPageSize = val
 				this.onPageChange(this.curPage)
+			},
+			/* 编辑类别 */
+			onEditTag(item,index){
+				this.curEditTag = item
+				this.curEditIndex = index
+			},
+			/* 确认修改 */
+			onConfirmInput(){
+				if(!this.curEditTag.replace(/(^\s*)|(\s*$)/g, "")){
+					this.$Message.warning('请将类别填写完整!')
+					return
+				} 
+				if(this.tags.includes(this.curEditTag)){
+					this.$Message.warning('已存在相同类别!')
+					return
+				}
+				this.tags[this.curEditIndex] = this.curEditTag
+				this.curEditIndex = -1
+			},
+			/* 删除类别 */
+			onDeleteTag(item,index){
+				this.tags.splice(index,1)
+				this.curEditIndex = -1
+			},
+			/* 添加新类别 */
+			onAddTag(){
+				if(this.tags.some(i => i.replace(/(^\s*)|(\s*$)/g, "") == '')){
+					this.$Message.warning('不能存在空类别!')
+				}else{
+					this.tags.push('')
+					this.curEditTag = ''
+					this.curEditIndex = this.tags.length - 1
+				}
 			}
 		}
 		
 	}
 </script>
 
-<style lang="less" src="./ResearchMgt.less" scoped></style>
+<style lang="less" src="./ResearchMgt.less" scoped></style>
+<style lang="less" scoped>
+	.research-modal{
+		.tags-box{
+			display: flex;
+			flex-wrap: wrap;
+			
+			.tags-item{
+				display: flex;
+				align-items: center;
+				margin: 5px 10px;
+				padding: 5px 10px;
+				border: 1px solid #cfcfcf;
+				border-radius: 5px;
+				cursor: pointer;
+				&:not(:last-child){
+					&::before{
+						content: '';
+						display: inline-block;
+						border: 4px solid var(--assist-color-light);
+						border-radius: 50%;
+						margin-right: 5px;
+					}
+				}
+				
+				.ivu-icon{
+					margin-left: 5px;
+					color: #b6b6b6;
+					cursor: pointer;
+				}
+				
+				.ivu-input{
+					max-width: -webkit-fit-content;
+					display: inline-block;
+				}
+			}
+		}
+	}
+</style>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2186 - 2109
TEAMModelOS/ClientApp/src/view/syllabus/Syllabus.vue


+ 1 - 0
TEAMModelOS/Controllers/Analysis/AnalysisController.cs

@@ -1476,6 +1476,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 {
                     for (int i = range.range[0]; i <= range.range[1]; i++)
                     {
+                        //判断推送的数据中,学生正常得分数据
                         if (result.studentScores[i].Count > 0)
                         {
                             if (result.studentScores[i][num] < point)