Explorar el Código

Merge branch 'develop5.0-tmd' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop5.0-tmd

OnePsycho hace 4 años
padre
commit
59089f732c

+ 39 - 0
TEAMModelAPI/Controllers/WeatherForecastController.cs

@@ -0,0 +1,39 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TEAMModelAPI.Controllers
+{
+    [ApiController]
+    [Route("[controller]")]
+    public class WeatherForecastController : ControllerBase
+    {
+        private static readonly string[] Summaries = new[]
+        {
+            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+        };
+
+        private readonly ILogger<WeatherForecastController> _logger;
+
+        public WeatherForecastController(ILogger<WeatherForecastController> logger)
+        {
+            _logger = logger;
+        }
+
+        [HttpGet]
+        public IEnumerable<WeatherForecast> Get()
+        {
+            var rng = new Random();
+            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
+            {
+                Date = DateTime.Now.AddDays(index),
+                TemperatureC = rng.Next(-20, 55),
+                Summary = Summaries[rng.Next(Summaries.Length)]
+            })
+            .ToArray();
+        }
+    }
+}

+ 26 - 0
TEAMModelAPI/Program.cs

@@ -0,0 +1,26 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TEAMModelAPI
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+            CreateHostBuilder(args).Build().Run();
+        }
+
+        public static IHostBuilder CreateHostBuilder(string[] args) =>
+            Host.CreateDefaultBuilder(args)
+                .ConfigureWebHostDefaults(webBuilder =>
+                {
+                    webBuilder.UseStartup<Startup>();
+                });
+    }
+}

+ 31 - 0
TEAMModelAPI/Properties/launchSettings.json

@@ -0,0 +1,31 @@
+{
+  "$schema": "http://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:47420",
+      "sslPort": 44371
+    }
+  },
+  "profiles": {
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "launchUrl": "swagger",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "TEAMModelAPI": {
+      "commandName": "Project",
+      "dotnetRunMessages": "true",
+      "launchBrowser": true,
+      "launchUrl": "swagger",
+      "applicationUrl": "https://localhost:5001;http://localhost:5000",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}

+ 59 - 0
TEAMModelAPI/Startup.cs

@@ -0,0 +1,59 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.HttpsPolicy;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Microsoft.OpenApi.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TEAMModelAPI
+{
+    public class Startup
+    {
+        public Startup(IConfiguration configuration)
+        {
+            Configuration = configuration;
+        }
+
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
+        public void ConfigureServices(IServiceCollection services)
+        {
+
+            services.AddControllers();
+            services.AddSwaggerGen(c =>
+            {
+                c.SwaggerDoc("v1", new OpenApiInfo { Title = "TEAMModelAPI", Version = "v1" });
+            });
+        }
+
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+        {
+            if (env.IsDevelopment())
+            {
+                app.UseDeveloperExceptionPage();
+                app.UseSwagger();
+                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "TEAMModelAPI v1"));
+            }
+
+            app.UseHttpsRedirection();
+
+            app.UseRouting();
+
+            app.UseAuthorization();
+
+            app.UseEndpoints(endpoints =>
+            {
+                endpoints.MapControllers();
+            });
+        }
+    }
+}

+ 11 - 0
TEAMModelAPI/TEAMModelAPI.csproj

@@ -0,0 +1,11 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
+  </ItemGroup>
+
+</Project>

+ 15 - 0
TEAMModelAPI/WeatherForecast.cs

@@ -0,0 +1,15 @@
+using System;
+
+namespace TEAMModelAPI
+{
+    public class WeatherForecast
+    {
+        public DateTime Date { get; set; }
+
+        public int TemperatureC { get; set; }
+
+        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+
+        public string Summary { get; set; }
+    }
+}

+ 9 - 0
TEAMModelAPI/appsettings.Development.json

@@ -0,0 +1,9 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  }
+}

+ 10 - 0
TEAMModelAPI/appsettings.json

@@ -0,0 +1,10 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft": "Warning",
+      "Microsoft.Hosting.Lifetime": "Information"
+    }
+  },
+  "AllowedHosts": "*"
+}

+ 6 - 0
TEAMModelOS.sln

@@ -11,6 +11,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TEAMModelGrpc", "TEAMModelG
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TEAMModelFunction", "TEAMModelFunction\TEAMModelFunction.csproj", "{78470113-6261-4F9A-9EF3-E315F060813D}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TEAMModelAPI", "TEAMModelAPI\TEAMModelAPI.csproj", "{DE4FED83-02BE-40B5-9F81-910DCFD00C61}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -33,6 +35,10 @@ Global
 		{78470113-6261-4F9A-9EF3-E315F060813D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{78470113-6261-4F9A-9EF3-E315F060813D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{78470113-6261-4F9A-9EF3-E315F060813D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DE4FED83-02BE-40B5-9F81-910DCFD00C61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DE4FED83-02BE-40B5-9F81-910DCFD00C61}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DE4FED83-02BE-40B5-9F81-910DCFD00C61}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DE4FED83-02BE-40B5-9F81-910DCFD00C61}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 5 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolBaseInfo.js

@@ -67,6 +67,11 @@ export default {
   saveErr: '保存失败!',
   saveWarning: '保存提醒',
   leaveText: '离开',
+  pdWarning: '學段名稱不能重複',
+  semWarning: '學期名稱不能重複',
+  gdNameWarning: '年級名稱不能重複',
+  subWarning: '學科名稱不能重複',
+  exWarning:'考試名稱不能重複',
 
   // ClassroomSetting.vue
   classroomList: '教室列表',

+ 5 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/schoolBaseInfo.js

@@ -67,6 +67,11 @@ export default {
   saveErr: '保存失败!',
   saveWarning: '保存提醒',
   leaveText: '离开',
+  pdWarning:'学段名称不能重复',
+  semWarning:'学期名称不能重复',
+  gdNameWarning:'年级名称不能重复',
+  subWarning:'学科名称不能重复',
+  exWarning:'考试名称不能重复',
 
   // ClassroomSetting.vue
   classroomList: '教室列表',

+ 8 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/schoolBaseInfo.js

@@ -67,6 +67,11 @@ export default {
   saveErr: '保存失敗!',
   saveWarning: '保存提醒',
   leaveText: '離開',
+  pdWarning: '學段名稱不能重複',
+  semWarning: '學期名稱不能重複',
+  gdNameWarning: '年級名稱不能重複',
+  subWarning: '學科名稱不能重複',
+  exWarning:'考試名稱不能重複',
 
   //ClassroomSetting.vue
   classroomList: '教室清單',
@@ -160,8 +165,8 @@ export default {
   removeErr: '移除失敗',
   deLink: '解除關聯',
   link: '關聯',
-  confirmDelink:'請問您確定要解除關聯',
+  confirmDelink: '請問您確定要解除關聯',
   noStu: '暫無學生',
-  addOk:'添加成功',
-  addErr:'添加失敗'
+  addOk: '添加成功',
+  addErr: '添加失敗'
 }

+ 4 - 4
TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.less

@@ -2,8 +2,8 @@
 @second-bgColor: #1b1b1b;
 @third-bgColor: #222222;
 @borderColor: #424242;
-@primary-textColor: #fff; //文本主颜
-@second-textColor: #a5a5a5; //文本副级颜
+@primary-textColor: #fff; //锟侥憋拷锟斤拷锟斤拷
+@second-textColor: #a5a5a5; //锟侥憋拷锟斤拷锟斤拷锟斤拷
 @primary-fontSize: 14px;
 @second-fontSize: 16px;
 
@@ -128,8 +128,8 @@
 
     &:hover {
         background: rgba(28,192,243,1);
-        transform: translateY(-2px);
-        transition: all .2s ease 0s;
+        // transform: translateY(-2px);
+        // transition: all .2s ease 0s;
     }
 }
 .list-group {

+ 31 - 16
TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.vue

@@ -1,5 +1,6 @@
 <template>
     <div class="mgt-class-container dark-iview-select dark-iview-checkbox custom-scroll-bar common-save-btn" @click="nameEdStatus = true">
+        <!-- 头部 -->
         <div class="mgt-class-header">
             <span class="text-label">{{$t('cusMgt.classLabel')}}</span>
             <Select v-model="curClassCode" style="width:200px">
@@ -24,6 +25,7 @@
                 {{viewType ? $t('cusMgt.viewport1'):$t('cusMgt.viewport2') }}
             </span>
         </div>
+        <!-- 表格模式 -->
         <div class="mgt-class-body dark-iview-table animated fadeIn" id="table-wrap" v-if="viewType == 1">
             <vuescroll>
                 <Table :columns="columns" v-if="classList[curClassIndex]" :data="classList[curClassIndex].students" :loading="tableLoading" ref="students" :height="tableHeight" :no-data-text="$t('cusMgt.noStu')">
@@ -46,11 +48,12 @@
                 <EmptyData v-else :textContent="$t('cusMgt.noMgtClass')" :top="150"></EmptyData>
             </vuescroll>
         </div>
+        <!-- 分组模式 -->
         <div class="mgt-class-body dark-iview-table animated fadeIn dark-iview-input disabled-iview-input" id="table-wrap" v-else>
             <vuescroll>
                 <div class="group-wrap-item" v-for="(item,index) in groupData" :key="index">
                     <div class="group-title-wrap">
-                        <span class="group-num-tag">{{parseInt(item.groupId)}}</span>
+                        <span class="group-num-tag">{{item.groupId ? parseInt(item.groupId) : 1}}</span>
                         <Input v-model="item.groupName" class="group-name-tag" :placeholder="$t('cusMgt.groupNameHolder')" :disabled="nameEdStatus" @click.native.stop="nameEdStatus = false" :title="$t('cusMgt.edtiGroupName')" @on-change="$jsFn.debounce(setGroupName,1000)(index)" />
                         <Icon type="md-close" class="close-group-icon" @click="delGroup(index)" />
                     </div>
@@ -69,6 +72,7 @@
                 </div>
             </vuescroll>
         </div>
+        <!-- 分组设置 -->
         <Modal v-model="customGroupStatus" :title="$t('cusMgt.autoGroup')" @on-ok="comfirmCustomRules" class="custom-group" class-name="dark-iview-modal dark-iview-form">
             <Form :label-width="80" :label-colon="true" style="color:white;">
                 <FormItem :label="$t('cusMgt.studentCountLabel')">
@@ -196,11 +200,11 @@ export default {
             if (row != -1) {
                 this.$Modal.confirm({
                     title: this.$t('cusMgt.resetPw'),
-                    content: '<p>' + this.$t('cusMgt.resetPwContent1') + " <strong style='color:red;'>" + row.name + '</strong>'+ this.$t('cusMgt.resetPwContent1') +'?</p>',
+                    content: '<p>' + this.$t('cusMgt.resetPwContent1') + " <strong style='color:red;'>" + row.name + '</strong>' + this.$t('cusMgt.resetPwContent1') + '?</p>',
                     onOk: () => {
                         let ids = []
                         row.pw = row.id
-                        row.year = row.year ? row.year.toString() :''
+                        row.year = row.year ? row.year.toString() : ''
                         delete row.no
                         ids.push(row)
                         this.tableLoading = true
@@ -221,13 +225,13 @@ export default {
                 if (this.selections.length > 0) {
                     this.$Modal.confirm({
                         title: this.$t('cusMgt.resetPw'),
-                        content: '<p>' + this.$t('cusMgt.resetPwContent3') + " <strong style='color:red;'>" + this.selections.length + '</strong>'+ this.$t('cusMgt.resetPwContent4') +'</p>',
+                        content: '<p>' + this.$t('cusMgt.resetPwContent3') + " <strong style='color:red;'>" + this.selections.length + '</strong>' + this.$t('cusMgt.resetPwContent4') + '</p>',
                         onOk: () => {
                             this.tableLoading = true
-                            let apiData = this.selections.map( (item) =>{
+                            let apiData = this.selections.map((item) => {
                                 let d = item
                                 d.pw = d.id
-                                delete d.no                                
+                                delete d.no
                                 return d
                             })
 
@@ -358,7 +362,7 @@ export default {
         comfirmCustomRules() {
             if (this.groupNum === 0) {
                 this.$Message.warning(this.$t('cusMgt.groupCount'))
-            } else if (this.groupType == 0) {
+            } else if (!this.groupType) {
                 this.$Message.warning(this.$t('cusMgt.groupTypeTips'))
             } else {
                 switch (this.groupType) {
@@ -379,6 +383,7 @@ export default {
                 this.handelGroup()
             }
         },
+        // 依座顺序S形分组
         orderGroupS() {
             let stuLen = this.classList[this.curClassIndex].students.length
             let surplus = stuLen % this.groupNum// 余数
@@ -386,21 +391,30 @@ export default {
             this.classList[this.curClassIndex].students = this.classList[this.curClassIndex].students.sort((a, b) => {
                 a.seatNo > b.seatNo
             })
-            for (let i = 0; i < maxCount; i++) {
-                for (let j = 0; j < this.groupNum; j++) {
-                    let startIndex = this.groupNum * i
-                    if (startIndex + j < stuLen) {
-                        this.$set(this.classList[this.curClassIndex].students[startIndex + j], 'groupId', i + 1)
-                        this.$set(this.classList[this.curClassIndex].students[startIndex + j], 'groupName', (i + 1) + this.$t('cusMgt.groupUnit'))
-                    } else {
-                        break
-                    }
+            // for (let i = 0; i < maxCount; i++) {
+            //     for (let j = 0; j < this.groupNum; j++) {
+            //         let startIndex = this.groupNum * i
+            //         if (startIndex + j < stuLen) {
+            //             this.$set(this.classList[this.curClassIndex].students[startIndex + j], 'groupId', i + 1)
+            //             this.$set(this.classList[this.curClassIndex].students[startIndex + j], 'groupName', (i + 1) + this.$t('cusMgt.groupUnit'))
+            //         } else {
+            //             break
+            //         }
+            //     }
+            // }
+            for (let i = 0; i < this.groupNum; i++) {
+                let num = surplus == 0 ? maxCount : i < surplus ? maxCount : maxCount - 1 //每组实际人数
+                for (let j = 0; j < num; j++) {
+                    let startIndex = i + (j * this.groupNum)
+                    this.$set(this.classList[this.curClassIndex].students[startIndex], 'groupId', i + 1)
+                    this.$set(this.classList[this.curClassIndex].students[startIndex], 'groupName', (i + 1) + this.$t('cusMgt.groupUnit'))
                 }
             }
             setTimeout(() => {
                 this.tableLoading = false
             }, 500)
         },
+        // 依座号分组
         orderGroup() {
             let stuLen = this.classList[this.curClassIndex].students.length
             let surplus = stuLen % this.groupNum// 余数
@@ -429,6 +443,7 @@ export default {
                 this.tableLoading = false
             }, 500)
         },
+        // 随机分组
         randomGroup() {
             let stuLen = this.classList[this.curClassIndex].students.length
             let surplus = stuLen % this.groupNum// 余数

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

@@ -268,7 +268,7 @@
 				this.viewModel = this.viewModel === 'type' ? 'list' : 'type'
 				this.$refs.exList.viewModel = this.viewModel
 				this.$refs.exList.collapseList = []
-				this.$refs.exList.doRenderMathJax()
+				// this.$refs.exList.doRenderMathJax()
 				this.$emit('onViewModelChange',this.viewModel)
 			},
 

+ 9 - 6
TEAMModelOS/ClientApp/src/view/learnactivity/PaperScore.vue

@@ -53,6 +53,7 @@
         </div>
         <div class="qu-list-wrap scoring-exercise-wrap" ref="mathJaxContainer" v-show="!dataLoading">
             <!-- <vuescroll ref="question-scrool" > -->
+            <!-- 按题型排序 -->
             <div v-show="!isComplete" class="list-view" :key="'group'+ typeIndex" v-for="(typeItem,typeIndex) in groupList">
                 <p class="type-name">
                     {{ numberConvertToUppercase(getLatestTypeIndex(typeItem.type) + 1) }}
@@ -299,6 +300,8 @@
                     </div>
                 </div>
             </div>
+            <!-- 默认排序 -->
+            
             <!-- </vuescroll> -->
             <div v-show="isComplete" class="complete-score-box">
                 <Icon class="complete-icon" type="md-checkmark-circle" />
@@ -350,7 +353,7 @@ export default {
     },
     data() {
         return {
-            isDefOrder:false, //是否默认排序  默认/题型
+            isDefOrder: false, //是否默认排序  默认/题型
             activeIndex: 0,
             curAnIndex: -1,
             markStatus: false,
@@ -592,7 +595,7 @@ export default {
         },
         paperInfo: {
             handler(newPaper) {
-                console.log('试卷数据',newPaper)
+                console.log('试卷数据', newPaper)
                 if (newPaper && newPaper.item) {
                     this.dataLoading = true
                     let that = this
@@ -602,12 +605,12 @@ export default {
                         let index = 0
                         newPaper.item.forEach((i) => {
                             //记录题目原始位置
-                            if(i.type == 'compose'){
-                                i.children.forEach((cItem)=>{
+                            if (i.type == 'compose') {
+                                i.children.forEach((cItem) => {
                                     cItem.index = index
                                     index++
                                 })
-                            }else{
+                            } else {
                                 i.index = index
                                 index++
                             }
@@ -626,7 +629,7 @@ export default {
                                 }
                             })
                         })
-                        console.log('题型顺序',this.groupList)
+                        console.log('题型顺序', this.groupList)
                     }
                     this.dataLoading = false
                 }

+ 66 - 4
TEAMModelOS/ClientApp/src/view/schoolmgmt/SystemSetting/SystemSetting.vue

@@ -9,12 +9,11 @@
             </div>
             <div class="editable time-zone-select" style="margin-left:100px;" @click.stop>
                 <span class="setting-title">{{$t('schoolBaseInfo.tmzLabel')}}</span>
-                <Select filterable v-model="schoolSetting.timeZone.value" label-in-value :style="{width: tzWidth+'px', verticalAlign:'baseline'}" :placeholder="$t('schoolBaseInfo.tmzHolder')">
-                    <Option v-for="(item,index) in timeZoneList" :value="item.value" :key="index" @click.native="setTimeZone(item)">{{ item.label }}</Option>
+                <Select filterable v-model="schoolSetting.timeZone.label" label-in-value :style="{width: tzWidth+'px', verticalAlign:'baseline'}" :placeholder="$t('schoolBaseInfo.tmzHolder')">
+                    <Option v-for="(item,index) in timeZoneList" :value="item.label" :key="index" @click.native="setTimeZone(item)">{{ item.label }}</Option>
                 </Select>
             </div>
             <Button v-if="$access.ability('admin','schoolSetting-upd').validateAll" class="school-tools" :loading="isLoading" :disabled="!updated" icon="ios-albums-outline" @click="saveData()">{{$t('schoolBaseInfo.saveInfo')}}</Button>
-
         </div>
         <div class="sm-system-body dark-iview-split disabled-iview-select text-cursor-disabled">
             <Split v-model="split1">
@@ -264,6 +263,69 @@ export default {
          * 初始化状态
          */
         initStatus() {
+            let isRep = false
+            let pdName = this.schoolSetting.period.map(item => {
+                return item.name
+            })
+            console.log(pdName)
+            // 检查学段名称
+            pdName.forEach((item, index) => {
+                if (pdName.indexOf(item) != index) {
+                    isRep = true
+                    this.$Message.warning(this.$t('schoolBaseInfo.pdWarning'))
+                }
+            })
+            if (isRep) return
+            let curPd = this.schoolSetting.period[this.curPriodIndex]
+
+            // 检查学期名称
+            let semName = curPd.semesters.map(item => {
+                return item.name
+            })
+            semName.forEach((item, index) => {
+                if (semName.indexOf(item) != index) {
+                    isRep = true
+                    this.$Message.warning(this.$t('schoolBaseInfo.semWarning'))
+                }
+            })
+            if (isRep) return
+
+            // 检查年级名称
+            let gradeName = curPd.grades.map(item => {
+                return item.name
+            })
+            gradeName.forEach((item, index) => {
+                if (gradeName.indexOf(item) != index) {
+                    isRep = true
+                    this.$Message.warning(this.$t('schoolBaseInfo.gdNameWarning'))
+                }
+            })
+            if (isRep) return
+
+            // 检查学科名称
+            let subName = curPd.subjects.map(item => {
+                return item.name
+            })
+            subName.forEach((item, index) => {
+                if (subName.indexOf(item) != index) {
+                    isRep = true
+                    this.$Message.warning(this.$t('schoolBaseInfo.subWarning'))
+                }
+            })
+            if (isRep) return
+
+            // 检查考试名称
+            let exName = curPd.analysis.type.map(item => {
+                return item.name
+            })
+            exName.forEach((item, index) => {
+                if (exName.indexOf(item) != index) {
+                    isRep = true
+                    this.$Message.warning(this.$t('schoolBaseInfo.exWarning'))
+                }
+            })
+            if (isRep) return
+
             this.delGraStatus = false
             this.delSubStatus = false
             this.delAnaStatus = false
@@ -393,7 +455,7 @@ export default {
         },
         //设置学校时区
         setTimeZone(item) {
-            this.schoolSetting.timeZone.label = item.label
+            this.schoolSetting.timeZone.value = item.value
             this.editTZStatsu = true
         },