Browse Source

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

CrazyIter_Bin 2 năm trước cách đây
mục cha
commit
0f525d0971

+ 1 - 1
TEAMModelBI/ClientApp/public/index.html

@@ -12,7 +12,7 @@
     </title>
 </head>
 <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
-<script src="https://at.alicdn.com/t/c/font_2934132_3drhbxz4ew4.js"></script>
+<script src="https://at.alicdn.com/t/c/font_2934132_fhs55szb3tn.js"></script>
 <script src="../src/access/iconfont.js"></script>
 
 <body>

+ 155 - 11
TEAMModelBI/ClientApp/src/view/created/created.vue

@@ -220,14 +220,15 @@
           </el-form-item>
         </el-form>
         <div class="confirmarea">
-          <el-button type="primary" @click="createdSchool()" :loading="createdSchoolLoading">{{ $t(`schoolManages.createSchools.submit`) }}</el-button>
+          <el-button type="primary" @click="verifydataForbb()" v-if="verifyForstate.state ===false">数据核验</el-button>
+          <el-button type="primary" @click="createdSchool()" :loading="createdSchoolLoading" v-else-if="verifyForstate.state===true && verifyForstate.pass===true ">{{ $t(`schoolManages.createSchools.submit`) }}</el-button>
           <!-- <el-button @click="closeandreturn('close', 'school')">重置</el-button> -->
           <el-button @click="resetForm()">重置</el-button>
         </div>
       </div>
       <!--查询BB数据-->
       <div class="searchbox">
-        <el-input v-model="searchSchoolvalue" placeholder="搜索学校名称/简码 检验是否重复" size="small" @focus="searchboxState=true" @blur="searchboxState=false">
+        <el-input v-model="searchSchoolvalue" placeholder="搜索学校名称/简码 检验是否重复" size="small" @focus="searchboxState=true">
           <template #prefix>
             <el-icon class="el-input__icon">
               <search />
@@ -236,7 +237,7 @@
         </el-input>
         <div class="result-table" v-show="searchboxState">
           <div class="result-data" v-if="resultschool.length !==0">
-            <el-table :data="resultschool" style="width: 100%">
+            <el-table :data="resultschool" style="width: 100%" height="498" v-loading="searchLoading" element-loading-text="数据加载中...">
               <!-- <el-table-column label="校徽">
                 <template #default="scope">
                   <el-image style="width: 30px; height: 30px" src="https://teammodeltest.blob.core.chinacloudapi.cn/0-public/school/00a0c125-c8ae-4d77-bb38-dcf4ca5a5b32.png" fit="fill"></el-image>
@@ -251,14 +252,32 @@
               </el-table-column>
               <el-table-column label="IES5已建校" align="center">
                 <template #default="scope">
-                  <div v-if="scope.row.source !=='BI'">否</div>
-                  <div v-else>是</div>
+                  <div v-if="scope.row.source !=='BI'" style="color:#909399">否</div>
+                  <div v-else style="color:#409EFF">是</div>
                 </template>
               </el-table-column>
-              <el-table-column label="操作" align="center">
+              <el-table-column label="操作" align="center" width="150px">
                 <template #default="scope">
-                  <div v-if="scope.row.source !=='BI'">快捷选填本校信息</div>
-                  <div v-else>数据异常回报</div>
+                  <div v-if="scope.row.source !=='BI'">
+                    <div class="bringbox">
+                      <el-button size="small" @click="formOperate">
+                        <svg class="lockicon-bring" aria-hidden="true">
+                          <use xlink:href="#icon-daoru"></use>
+                        </svg>
+                        <div class="bringtext">快捷选填本校信息</div>
+                      </el-button>
+                    </div>
+                  </div>
+                  <div v-else>
+                    <div class="bringbox">
+                      <el-button size="small">
+                        <svg class="lockicon-bring" aria-hidden="true">
+                          <use xlink:href="#icon-jinggao"></use>
+                        </svg>
+                        <div class="bringtext errortext">数据异常回报</div>
+                      </el-button>
+                    </div>
+                  </div>
                 </template>
               </el-table-column>
             </el-table>
@@ -268,6 +287,9 @@
             <div class="notdatas-text">暂无相关搜索数据</div>
           </div>
         </div>
+        <div class="search-close" v-show="searchboxState">
+          <el-button size="small" @click="searchboxState=false">关闭</el-button>
+        </div>
       </div>
       <!--查询BB end数据-->
     </div>
@@ -431,6 +453,8 @@ import router from '@/router/index.js'
 import { useRoute } from 'vue-router'
 import { useI18n } from 'vue-i18n'
 import { FLIPPED_ALIAS_KEYS } from '@babel/types'
+import option_cn from '@/static/regions/region_cn.json'
+import option_gl from '@/static/regions/region_gl.json'
 const chinaData = new EluiChinaAreaDht.ChinaArea().chinaAreaflat
 const areaData = {
   areaselect: {
@@ -477,6 +501,7 @@ const schoolAssets = {
 export default {
   components: { EluiChinaAreaDht, Search, StarFilled },
   setup () {
+    const siteValue = window.location.host === 'localhost:5001' ? 'cn' : window.location.host === 'bi.teammodel.cn' ? 'cn' : window.location.host === 'bitest.teammodel.cn' ? 'cn' : 'international'
     const { t } = useI18n()
     const labelPosition = 'right'
     let { proxy } = getCurrentInstance()
@@ -587,6 +612,12 @@ export default {
       // },
     ])
     let searchSchoolvalue = ref('')
+    let searchLoading = ref(false)
+    //数据核验状态 (对接BB)
+    let verifyForstate = ref({
+      state: false,
+      pass: false,
+    })
     onMounted(() => {
       formArea.value = JSON.parse(JSON.stringify(areaData))
       console.log(formArea, '初步的数据')
@@ -818,7 +849,7 @@ export default {
         }
         datas.push({
           name: schoolForm.value[i].name,
-          admin: adminArr ? adminArr : schoolForm.value[i].presupposeAdmin,
+          admin: adminArr ? [adminArr] : [schoolForm.value[i].presupposeAdmin],
           period: schoolForm.value[i].radio1,
           size: parseInt(schoolForm.value[i].pitchSpace),
           region: '中国',
@@ -835,7 +866,7 @@ export default {
       console.log(parameter, '创建学校最后的数据格式')
       proxy.$api.createdSchools(parameter).then((res) => {
         loadingCreatedschool.close()
-        res.state === 200 ? (ElMessage.success(proxy.$t(`commonMsg.schoolCreatedSuccess`)), router.push({ path: '/home/schoolmanage' }))
+        res.state === 200 ? (ElMessage.success(proxy.$t(`commonMsg.schoolCreatedSuccess`)), backTobb(datas))
           : res.state === 201 ? res.schools.length !== 0 ? ElMessage.info(proxy.$t(`commonMsg.schoolExist`))
             : res.userScs.length !== 0 ? ElMessage.info('请完善学校管理员信息')
               : res.cutArea.length !== 0 ? ElMessage.error('已有学区,开启研修计划,无法进行归属学区')
@@ -1229,6 +1260,7 @@ export default {
     }
     //搜索学校(bb数据)
     function verifyInbb () {
+      searchLoading.value = true
       let data = { regionId: "CN" }
       proxy.$api.verifyDatainbb(data).then((res) => {
         console.log(res, '成功返回')
@@ -1236,6 +1268,81 @@ export default {
       }).catch((error) => {
         ElMessage.error('API异常,搜索学校失败')
       })
+      searchLoading.value = false
+    }
+    //表单操作
+    function formOperate () {
+      console.log('123456')
+    }
+    //学校创建前,数据验证(BB向)
+    function verifydataForbb () {
+      // let site=siteValue === 'cn' ? "CN":siteValue ==='international' ? 
+      let verifyData = []
+      let users = JSON.parse(localStorage.getItem('userData'))
+      console.log(schoolForm.value)
+      for (let i in schoolForm.value) {
+        console.log(schoolForm.value[i].presupposeAdmin)
+        let adminArr = ''
+        if (schoolForm.value[i].presupposeAdmin.includes(',')) {
+          adminArr = schoolForm.value[i].presupposeAdmin.split(',')
+        } else if (schoolForm.value[i].presupposeAdmin.includes(',')) {
+          adminArr = schoolForm.value[i].presupposeAdmin.split(',')
+        }
+        verifyData.push({
+          name: schoolForm.value[i].name,
+          admin: adminArr ? adminArr : schoolForm.value[i].presupposeAdmin,
+          period: schoolForm.value[i].radio1,
+          size: parseInt(schoolForm.value[i].pitchSpace),
+          region: '中国',
+          province: schoolForm.value[i].schoolLocation.province,
+          city: schoolForm.value[i].schoolLocation.city,
+          dist: schoolForm.value[i].schoolLocation.area,
+          address: schoolForm.value[i].address,
+          type: schoolForm.value[i].type,
+          areaId: schoolForm.value[i].areaIdcreated,
+          code: schoolForm.value[i].code,
+        })
+      }
+      let datas = { regionId: "CN", name: verifyData[0].name, nameFuzzy: false, shortCode: verifyData[0].code, shortCodeFuzzy: false }
+      proxy.$api.verifyDatainbb(datas).then((res) => {
+        console.log(res.length, '核验数据')
+        res.length == 0 ? (verifyForstate.value.state = true, verifyForstate.value.pass = true, ElMessage.success('数据已通过核验,可执行创校')) : (verifyForstate.value.state = false, verifyForstate.value.pass = false)
+      }).catch((error) => {
+        ElMessage.error('API异常,数据核验失败')
+      })
+      console.log(verifyData, '准备核验的数据')
+    }
+    //学校创建成功后,数据回报给BB
+    function backTobb (value) {
+      console.log(value, '即将回报的学校')
+      let regionsJosn = siteValue === 'cn' ? option_cn : option_gl
+      let periodData = [
+        { label: '小学', value: '21' },
+        { label: '初中', value: '31' },
+        { label: '高中', value: '34' },
+        { label: '职高', value: '36' },
+        { label: '大学', value: '41' },
+      ]
+      //省 关键字剔除
+      let textNums = value[0].province.indexOf('省') !== -1 ? value[0].province.indexOf('省') : value[0].province.indexOf('自治区') !== -1 ? value[0].province.indexOf('自治区') : value[0].province.indexOf('市') !== -1 ? value[0].province.indexOf('市') : value[0].province.indexOf('特别行政区') !== -1 ? value[0].province.indexOf('特别行政区') : ''
+      let provinceText = value[0].province.substr(0, textNums)
+      let provinceCodes = ''
+      //市 关键字剔除
+      let cityNums = value[0].city.indexOf('市') !== -1 && value[0].city !== '直辖市' ? value[0].city.indexOf('市') : value[0].city.indexOf('县') !== -1 ? value[0].city.indexOf('县') : value[0].city.indexOf('自治州') !== -1 ? value[0].city.indexOf('自治州') : value[0].city.indexOf('直辖市') !== -1 ? value[0].city.length : ''
+      let cityText = value[0].city.substr(0, cityNums)
+      let cityCodes = ''
+      //区 关键字剔除
+      let distNums = value[0].dist.indexOf('区') !== -1 && value[0].dist.length > 2 ? value[0].dist.indexOf('区') : value[0].dist.indexOf('县') !== -1 ? value[0].dist.indexOf('县') : value[0].dist.indexOf('市') !== -1 ? value[0].dist.indexOf('市') : value[0].dist.indexOf('直辖市') !== -1 || value[0].dist.indexOf('天府新区') !== -1 ? value[0].dist.length : ''
+      let distText = value[0].dist.substr(0, distNums)
+      let childrenData = []
+      for (let i in regionsJosn) {
+        regionsJosn[i].name === value[0].province ? (provinceCodes = regionsJosn[i].code, childrenData = regionsJosn[i].children) : ''
+        for (let c in childrenData) {
+          childrenData[c].name === value[0].city ? cityCodes = childrenData[c].code : ''
+        }
+      }
+      console.log(provinceText, cityText, distText, provinceCodes, cityCodes)
+
     }
     getAllschool()
     getCapacitys()
@@ -1306,7 +1413,13 @@ export default {
       searchboxState,
       resultschool,
       searchSchoolvalue,
-      verifyInbb
+      verifyInbb,
+      formOperate,
+      searchLoading,
+      verifydataForbb,
+      verifyForstate,
+      siteValue,
+      backTobb
     }
   },
 }
@@ -1661,17 +1774,21 @@ export default {
 }
 .result-table {
   width: 100%;
+  height: 100%;
   background-color: #ececec;
   border: 1px solid #ececec;
   border-radius: 0px 0px 3px 3px;
+  overflow: auto;
 }
 .noisdata {
   width: 100%;
+  height: 100%;
   position: relative;
 }
 .notdatas {
   width: 100%;
   height: 100%;
+  background-size: contain;
 }
 .notdatas-text {
   position: absolute;
@@ -1681,6 +1798,30 @@ export default {
   text-align: center;
   color: #bdc3c7;
 }
+.bringbox {
+  width: 100%;
+  cursor: pointer;
+}
+.lockicon-bring {
+  width: 1.8em;
+  height: 1.8em;
+  vertical-align: -0.4em;
+  fill: currentColor;
+  overflow: hidden;
+  /* margin-right: 25px;
+  margin-left: 0px; */
+}
+.bringtext {
+  font-size: 10px;
+  color: #409eff;
+}
+.search-close {
+  width: 100%;
+  text-align: center;
+}
+.errortext {
+  color: #f56c6c;
+}
 </style>
 <style>
 .areabox .el-form {
@@ -1763,4 +1904,7 @@ export default {
 .el-table .success-row {
   background: rgba(85, 239, 196, 0.4);
 }
+.bringbox button {
+  padding: 5px 8px;
+}
 </style>

+ 3 - 3
TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs

@@ -135,7 +135,7 @@ namespace TEAMModelBI.Controllers.BISchool
                 List<BISchool> schools = new();
                 List<BISchool> userScs = new();
                 List<BISchool> cutArea = new();
-                List<string> scId = new();
+                List<CreateSchoolInfo> scInfos = new();
                 List<string> upSc = new();
                 StringBuilder stringBuilder = new($"{_tmdName}【{_tmdId}】使用批量创校功能:");
                 StringBuilder vsSql = new();
@@ -212,7 +212,7 @@ namespace TEAMModelBI.Controllers.BISchool
                                 scale = bischool.size >= 300 ? 500 : 0,
                                 createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
                             };
-                            scId.Add(upSchool.id);
+                            scInfos.Add(createSchoolInfo);
                             vsSql.Append($"{upSchool.name}【{upSchool.id}】,");
                             stringBuilder.Append($"创建学校:{upSchool.name}【{upSchool.id}】");
                             noticeDD.Append($"{upSchool.name}【{upSchool.id}】 \r 学校管理员信息:");
@@ -484,7 +484,7 @@ namespace TEAMModelBI.Controllers.BISchool
                     if (schools.Count > 0 || userScs.Count > 0 || cutArea.Count > 0)
                         return Ok(new { state = RespondCode.Created, message = "已有部分学校批量创建成功;学校已经重复/学校信息有误/区域已在研修不能加区!请检查学校信息!", schools, userScs, cutArea });
                     else
-                        return Ok(new { state = RespondCode.Ok, message = "批量创校已全部完成", scId });
+                        return Ok(new { state = RespondCode.Ok, message = "批量创校已全部完成", scInfos });
                 }
             }
             catch (Exception ex)

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

@@ -2702,6 +2702,7 @@ const LANG_EN_US = {
             status4: 'Absent',
             status5: 'Make-up Test',
             status6: 'Not Started',
+            status7: '已完成',
             column1: 'Name',
             column2: 'Total Score',
             column3: 'Status',
@@ -3681,6 +3682,7 @@ const LANG_EN_US = {
         irsRep: 'Duplicate IRS number',
         noRep: 'Duplicate seat number',
         getTeachersErr: 'Failed to get teacher list',
+        gdFreeze:'已毕业的班级不能被删除和修改',
 
         //ClassMgt.vue
         className: 'Name',
@@ -6831,6 +6833,7 @@ const LANG_EN_US = {
         clearAllTip: 'Confirm to clear all message notifications?',
         noData: 'No data yet',
         noJoinSchool: 'Not joining a school yet',
+        noJoinSchool1: '尚未有學校資源',
         noShoolTip: 'No school list information is available for you.',
         getDataFail: 'Failed to obtain data',
         teacher: 'Teacher',

+ 3 - 0
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -2701,6 +2701,7 @@ const LANG_ZH_CN = {
             status4: '缺考',
             status5: '补考',
             status6: '未开始',
+            status7: '已完成',
             column1: '姓名',
             column2: '总分',
             column3: '状态',
@@ -3683,6 +3684,7 @@ const LANG_ZH_CN = {
         irsRep: 'IRS号码重复',
         noRep: '座号重复',
         getTeachersErr: '获取教师列表失败',
+        gdFreeze:'已毕业的班级不能被删除和修改',
 
         //ClassMgt.vue
         className: '名称',
@@ -6822,6 +6824,7 @@ const LANG_ZH_CN = {
         clearAllMsgs: '清空消息',
         clearAllTip: '确认清空所有消息通知?',
         noJoinSchool: '暂未加入学校',
+        noJoinSchool1: '尚未有学校资源',
         noShoolTip: '用户暂无学校列表数据',
         getDataFail: '获取数据失败',
         teacher: '教师',

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

@@ -2703,6 +2703,7 @@ const LANG_ZH_TW = {
             status4: '缺考',
             status5: '補考',
             status6: '未開始',
+            status7: '已完成',
             column1: '姓名',
             column2: '總分',
             column3: '狀態',
@@ -3684,6 +3685,7 @@ const LANG_ZH_TW = {
         irsRep: 'IRS號碼重複',
         noRep: '座號重複',
         getTeachersErr: '獲取教師列表失敗',
+        gdFreeze:'已毕业的班级不能被删除和修改',
 
         //ClassMgt.vue
         className: '名稱',
@@ -6822,6 +6824,7 @@ const LANG_ZH_TW = {
         clearAllTip: '確認清空所訊息通知?',
         noData: '暫無',
         noJoinSchool: '暫未加入學校',
+        noJoinSchool1: '尚未有學校資源',
         noShoolTip: '用戶暫無學校清單資料',
         getDataFail: '獲取資料失敗',
         teacher: '教師',

+ 1 - 1
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -254,7 +254,7 @@ export default {
           let requestSchools = schools.filter(i => i.status === 'request')
           return requestSchools.length ? `${requestSchools[0].name}(${this.$t('settings.status3')})` : (
             inviteSchools.length ? `${inviteSchools[0].name}(${this.$t('settings.status2')})` : this
-              .$t('utils.noJoinSchool'))
+              .$t('utils.noJoinSchool1'))
         } else {
           return ''
         }

+ 2 - 1
TEAMModelOS/ClientApp/src/common/BaseSelectSchool.vue

@@ -228,7 +228,8 @@ export default {
         noJoinSchoolContent() {
             let inviteSchools = this.user.schools.filter(i => i.status === 'invite')
             let requestSchools = this.user.schools.filter(i => i.status === 'request')
-            return requestSchools.length ? `${requestSchools[0].name}(${this.$t('settings.status3')})` : (inviteSchools.length ? `${inviteSchools[0].name}(${this.$t('settings.status2')})` : this.$t('utils.noJoinSchool'))
+            // return requestSchools.length ? `${requestSchools[0].name}(${this.$t('settings.status3')})` : (inviteSchools.length ? `${inviteSchools[0].name}(${this.$t('settings.status2')})` : this.$t('utils.noJoinSchool'))
+            return requestSchools.length ? `${requestSchools[0].name}(${this.$t('settings.status3')})` : (inviteSchools.length ? `${inviteSchools[0].name}(${this.$t('settings.status2')})` : '')
         },
     }
 }

+ 0 - 1
TEAMModelOS/ClientApp/src/view/artexam/AcQuos.vue

@@ -62,7 +62,6 @@ export default {
 		},
 		hanldeCheckChange() {},
 		renderContent(h, { node, data, store }) {
-			console.log(arguments)
 			let _this = this
 			// 不是最后一个节点则直接渲染label
 			if (node.childNodes.length) {

+ 2 - 1
TEAMModelOS/ClientApp/src/view/artexam/ExamData.vue

@@ -268,7 +268,8 @@ export default {
             if (score.includes(-1)) {
                 return {
                     status: 2,
-                    statusText: this.$t('learnActivity.score.status2'),
+                    // statusText: this.$t('learnActivity.score.status2'),
+                    statusText: this.$t('learnActivity.score.status7'),
                     statusColor: '#ff9900'
                 }
             }

+ 2 - 2
TEAMModelOS/ClientApp/src/view/artexam/WorkData.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="work-data">
         <span>{{$t('ae.ae4')}}:</span>
-		<Select v-model="subjectId" style="width: 120px">
+		<Select v-model="subjectId" style="width: 120px" @on-change="findArtWorkData">
 			<Option
 				v-for="item in subjectList"
 				:value="item.id"
@@ -10,7 +10,7 @@
 			>
 		</Select>
         <span style="margin-left:10px">{{$t('ae.ae6')}}:</span>
-		<Select v-model="classId" style="width: 200px">
+		<Select v-model="classId" style="width: 200px" @on-change="findArtWorkData">
 			<Option
 				v-for="item in classList"
 				:value="item.id"

+ 3 - 1
TEAMModelOS/ClientApp/src/view/student-account/class/ClassMgt.vue

@@ -1061,7 +1061,7 @@ export default {
                     school_code: this.$store.state.userInfo.schoolCode
                 }).then(
                     (res) => {
-                        if (res.error == null) {
+                        if (!res.error) {
                             if (this.curClassIndex >= index && index > 0) {
                                 this.curClassIndex = 0
                                 this.updateBefore = JSON.stringify(this.classListShow[this.curClassIndex])
@@ -1082,6 +1082,8 @@ export default {
                             this.classListShow.splice(index, 1)
                             this.$Message.success(this.$t('schoolBaseInfo.csTips7'))
                             this.updated = false
+                        }else if(res.error == 409){
+                            this.$Message.warning(this.$t('schoolBaseInfo.gdFreeze'))
                         }
                     },
                     (err) => {