Selaa lähdekoodia

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

CrazyIter_Bin 2 vuotta sitten
vanhempi
commit
5bb63dc265

+ 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_jpe031zj2cg.js"></script>
+<script src="https://at.alicdn.com/t/c/font_2934132_2ayfnivoa9y.js"></script>
 <script src="../src/access/iconfont.js"></script>
 
 <body>

+ 4 - 0
TEAMModelBI/ClientApp/src/api/index.js

@@ -413,6 +413,10 @@ export default {
     getSchoolsas(data) {
         return post('/biservers/get-cntrkey', data)
     },
+    //访问试卷信息
+    getExamintionpaper(url) {
+        return fetch(url, '')
+    },
 
     //第三方相关API(BI)
     //创建or保存 第三方信息

+ 12 - 8
TEAMModelBI/ClientApp/src/view/areaServe/areamanage.vue

@@ -1066,14 +1066,18 @@ export default {
       proxy.$api.areaAddadmins(data).then((res) => {
         // res.state === 200 ? (ElMessage.success('操作成功'), getAreasadmin()) : ''
         if (res.state === 200 || res.state === 201) {
-          if (res.existsArea !== null) {
-            ElMessage.warning('该管理员已是本学区管理员,请勿重复添加')
-          } else if (res.existsSc.length !== 0) {
-            ElMessage.success('操作成功')
-            stageShow.value.state = false
-            getAreasadmin()
-          } else if (res.errorSc.length !== 0) {
-            ElMessage.error('全部或部分设置学校管理员操作失败')
+          if (res.hasOwnProperty('existsArea')) {
+            if (res.existsArea !== null) {
+              ElMessage.warning('该管理员已是本学区管理员,请勿重复添加')
+            } else if (res.existsSc.length !== 0) {
+              ElMessage.success('操作成功')
+              stageShow.value.state = false
+              getAreasadmin()
+            } else if (res.errorSc.length !== 0) {
+              ElMessage.error('全部或部分设置学校管理员操作失败')
+            }
+          } else {
+            res.state === 200 ? (ElMessage.success('操作成功'), stageShow.value.state = false, getAreasadmin()) : res.state === 201 ? (ElMessage.success('部分学校操作成功'), stageShow.value.state = false, getAreasadmin()) : ''
           }
         }
       }).catch((error) => {

+ 15 - 3
TEAMModelBI/ClientApp/src/view/created/created.vue

@@ -1518,19 +1518,31 @@ export default {
       console.log(value, '即将回报的学校')
       let regionsJosn = siteValue === 'cn' ? option_cn : option_gl
       let periodData = [
+        { label: '学前', value: '11' },
         { label: '小学', value: '21' },
         { label: '初中', value: '31' },
         { label: '高中', value: '34' },
-        { label: '职高', value: '36' },
-        { label: '大学', value: '41' },
+        { label: '中职(中专,技校,职高)', value: '36' },
+        { label: '大学本科', value: '41' },
+        { label: '高职(专科)', value: '44' },
+        { label: '特殊教育', value: '51' },
+        { label: '教育局', value: '91' },
+        { label: '电教部门', value: '51' },
+        { label: '成人中专', value: '33' },
+        { label: '成人高教', value: '42' },
+        { label: '硕士研究生', value: '41' },
+        { label: '博士研究生', value: '41' },
+        { label: '企业', value: '99' },
       ]
       let periodValue = []
       for (let i in value[0].period) {
-        let name = value[0].period[i]
+        let name = value[0].period[i].name
         for (let n in periodData) {
           periodData[n].label === name ? periodValue.push(periodData[n].value) : ''
         }
       }
+      // periodValue = Array.from(new Set(periodValue))
+      periodValue = [...new Set(periodValue)]
       //省 关键字剔除
       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)

+ 62 - 5
TEAMModelBI/ClientApp/src/view/participation/examination.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="examinationbox">
+  <div class="examinationbox" v-if="uistate ==='default'">
     <div class="header-filter">
       <el-collapse v-model="activeNames" accordion>
         <el-collapse-item title="数据筛选" name="1">
@@ -108,20 +108,31 @@
       </div>
     </div>
   </div>
+  <div v-else-if="uistate ==='details'">
+    <Paper @renew="backdefaults" :paperInfo="paperInfo"></Paper>
+  </div>
 </template>
 <script>
 import { ref, watch, getCurrentInstance } from 'vue'
 import { useStore } from 'vuex'
 import { ElMessage, ElLoading } from 'element-plus'
+import { useRouter } from 'vue-router'
+import BlobTool from '@/until/blobTool.js'
+import Paper from './paper.vue'
 export default {
   props: {
     detailsSchool: {
       default: {}
     },
   },
+  components: {
+    Paper
+  },
   setup (props) {
     let { proxy } = getCurrentInstance()
     const store = useStore()
+    let router = useRouter()
+    let uistate = ref('default')
     let activeNames = ref(['1'])
     const notdataImg = require('@/assets/img/notdata.png')
     let findbox = ref({
@@ -166,6 +177,13 @@ export default {
       data: [],
       nowselectData: []
     })
+    //试卷相关信息
+    let paperInfo = ref({
+      total: 0,
+      title: '',
+      difficulty: 0,
+      list: [],
+    })
     //blob相关
     let blobData = ref({
       osblob_uri: '',
@@ -289,11 +307,22 @@ export default {
       console.log(blobData.value, '现在去获取')
       let paths = value.blob + '/index.json'
       // let space = bolbs.osblob_uri.slice(bolbs.osblob_uri.indexOf('cn') + 3)
-      let urls = blobData.value.osblob_uri + paths + '?' + blobData.value.osblob_sas
+      let urls = paths
       // console.log(bolbs, host, space, '参数')
       console.log(urls, '-------------', '拼接内容')
-
-      // proxy.Blob.downloadToFile()
+      console.log(proxy.Blob, '原型挂载')
+      let urlheader = blobData.value.osblob_uri.substring(0, blobData.value.osblob_uri.indexOf('cn') + 2)
+      let space = blobData.value.osblob_uri.slice(blobData.value.osblob_uri.indexOf('cn') + 3)
+      console.log(urlheader, space, blobData.value.osblob_sas, '内容')
+      // let Blobs = new BlobTool(urlheader, space, '?' + blobData.value.osblob_sas, 'school')
+      // // urls = urls.slice(1)
+      // console.log(Blobs, urls, 'blob初始化')
+      proxy.$api.getExamintionpaper(blobData.value.osblob_uri + urls + '?' + blobData.value.osblob_sas).then(async (res) => {
+        console.log(res, '完整的试卷信息')
+        res.hasOwnProperty('slides') ? (await questions(res.slides, value.blob, res.name, res.score)) : ''
+      })
+      uistate.value = 'details'
+      // router.push('/home/paperDetails')
     }
     //获取相应学校的sas
     async function getSas () {
@@ -308,6 +337,30 @@ export default {
         ElMessage.error('获取试卷信息失败,API异常')
       })
     }
+    //获取试题
+    async function questions (slider, blob, name, score) {
+      console.log(slider, blob, '调用到了')
+      let difficultyNum = 0
+      let listdata = []
+      for (let i of slider) {
+        console.log(blobData.value.osblob_uri + blob + '/' + i.url + '?' + blobData.value.osblob_sas, '访问的地址')
+        await proxy.$api.getExamintionpaper(blobData.value.osblob_uri + blob + '/' + i.url + '?' + blobData.value.osblob_sas).then((res) => {
+          console.log(res, res.exercise.level, '试题')
+          difficultyNum += res.exercise.level
+          listdata.push(res)
+        })
+      }
+      // paperInfo.value.difficulty = (difficultyNum / paperData.value.data.length).toFixed(0)
+      // console.log(difficultyNum, paperInfo.value.list.length)
+      paperInfo.value.list = listdata
+      paperInfo.value.title = name
+      paperInfo.value.total = score
+      paperInfo.value.difficulty = (difficultyNum / paperInfo.value.list.length).toFixed(0)
+      console.log(paperInfo.value, '试卷完整信息')
+    }
+    function backdefaults (val) {
+      uistate.value = val
+    }
     watch(
       props,
       (newdata, olddata) => {
@@ -338,7 +391,11 @@ export default {
       getExamblob,
       getBlobHost,
       getSas,
-      blobData
+      blobData,
+      questions,
+      uistate,
+      backdefaults,
+      paperInfo
     }
   },
 }

+ 2 - 2
TEAMModelBI/ClientApp/src/view/participation/index.vue

@@ -251,9 +251,9 @@
       <el-tab-pane :label="$t(`schoolManages.redactGrading`)">
         <SetSchool :detailsSchool="detailsSchool" ref="setSchoolData"></SetSchool>
       </el-tab-pane>
-      <el-tab-pane label="试卷资源">
+      <!-- <el-tab-pane label="试卷资源">
         <Exammination :detailsSchool="detailsSchool"></Exammination>
-      </el-tab-pane>
+      </el-tab-pane> -->
     </el-tabs>
   </div>
   <!--编辑学校页面end-->

+ 288 - 0
TEAMModelBI/ClientApp/src/view/participation/paper.vue

@@ -0,0 +1,288 @@
+<template>
+  <div class="paperbox">
+    <!--试卷信息 难度总分-->
+    <div class="paperbox-header">
+      <div class="header-info">
+        <div class="header-info-items">
+          <div class="header-info-title">总分:<span class="header-info-num">{{paperdata.totalnum}}</span>分</div>
+          <div class="header-info-title">题目数:<span class="header-info-num">{{paperdata.paperList.length}}</span></div>
+          <div class="header-info-title difficulty">难度:
+            <el-rate v-model="paperdata.difficulty" disabled />
+          </div>
+        </div>
+        <div class="header-info-operate">
+          <div>
+            <el-button type="primary" size="small" @click="backDefault">返回列表</el-button>
+          </div>
+          <div>
+            <el-button type="primary" size="small">全部展开</el-button>
+          </div>
+          <div>
+            <el-button type="primary" size="small">拷贝当前试卷</el-button>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="paper-name">{{paperdata.title}}</div>
+    <div class="paper-view">
+      <div>
+        <p class="paper-view-title"><span>一、</span><span>单选题</span><span class="aggregate">(共 1 题,总计 10 分)</span></p>
+        <div class="problem">
+          <!--题目-->
+          <div class="problem-details">
+            <div class="problem-num">1:</div>
+            <div class="problem-content" v-html="paper"></div>
+          </div>
+          <!--题目end-->
+          <!--分数-->
+          <div class="numshow">
+            <div class="numshow-nums"><span>10 分</span></div>
+            <div class="numshow-icon">
+              <div class="numshow-icon-item">
+                <svg class="tagicons" aria-hidden="true" @click="unfold('1')">
+                  <use :xlink:href="shows ? '#icon-shouhuishangxia':'#icon-moduanzhankai_o'"></use>
+                </svg>
+              </div>
+            </div>
+          </div>
+          <!--分数end-->
+          <!--选项-->
+          <div class="proble-single">
+            <div class="item-single">
+              <div class="item-single-tag">A:</div>
+              <div class="item-single-content">123456</div>
+            </div>
+            <div class="item-single">
+              <div class="item-single-tag">B:</div>
+              <div class="item-single-content">154323456</div>
+            </div>
+            <div class="item-single">
+              <div class="item-single-tag">C:</div>
+              <div class="item-single-content">123534534456</div>
+            </div>
+            <div class="item-single">
+              <div class="item-single-tag">D:</div>
+              <div class="item-single-content">123453543456</div>
+            </div>
+          </div>
+          <!--选项end-->
+          <!--展开内容-->
+          <div :class="[unfoldnum == 1 ? 'unfoldIndex':'','spreadbox']">
+            <p><span class="spreadbox-title">【题型】</span><span>单选题</span></p>
+            <p><span class="spreadbox-title">【答案】</span><span>D</span></p>
+            <p><span class="spreadbox-title">【解析】</span><span>不等式</span></p>
+            <p><span class="spreadbox-title">【知识点】</span><span> 不等式计算</span></p>
+            <p><span class="spreadbox-title">【认知层次】</span><span>应用</span></p>
+            <p><span class="spreadbox-title">【补救资源】</span><span>暂无</span></p>
+          </div>
+          <!--展开内容end-->
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import { ref, watch, getCurrentInstance } from 'vue'
+import { useStore } from 'vuex'
+export default ({
+  props: {
+    paperInfo: {
+      type: Object,
+      default: () => { },
+    }
+  },
+  setup (props, context) {
+    const store = useStore()
+    let paper = ref("若CE=1,EB=3,求⊙O的半径;")
+    let paperdata = ref({
+      totalnum: 0,
+      difficulty: 0,
+      title: '',
+      paperList: []
+    })
+    let value1 = ref(4)
+    let shows = ref(false)
+    let unfoldnum = ref(-1)
+    console.log(store.state.paperData, '试卷信息')
+    function unfold (index) {
+      if (index == unfoldnum.value) {
+        console.log('进入相同判断')
+        shows.value = !shows.value
+        unfoldnum.value = -1
+      } else {
+        shows.value = !shows.value
+        console.log(shows.value, '现在的值')
+        unfoldnum.value = 1
+      }
+    }
+    function backDefault () {
+      context.emit('renew', 'default')
+    }
+    function paperInit (val) {
+      paperdata.value.totalnum = val.total
+      paperdata.value.title = val.title
+      paperdata.value.paperList = val.list
+      paperdata.value.difficulty = Number(val.difficulty)
+      console.log(paperdata.value)
+    }
+    watch(props, (newpaper) => {
+      console.log(newpaper, '监听试卷的相关内容')
+      newpaper.paperInfo ? paperInit(newpaper.paperInfo) : ''
+    }, { deep: true, })
+    return {
+      paper,
+      value1,
+      shows,
+      unfold,
+      unfoldnum,
+      backDefault,
+      paperdata
+    }
+  },
+})
+</script>
+<style scoped>
+.paperbox {
+  width: 98%;
+  min-height: 65vh;
+  background: #fff;
+  margin: 1%;
+  line-height: 20px;
+  flex-wrap: wrap;
+}
+.paperbox-header {
+  width: 100%;
+}
+.header-info {
+  display: flex;
+  border-bottom: 1px dashed #ccc;
+  height: 80px;
+  line-height: 80px;
+}
+.header-info-items {
+  display: flex;
+  width: 45%;
+}
+.header-info-title {
+  width: 18%;
+  display: flex;
+  padding-left: 15px;
+}
+.difficulty {
+  width: 35%;
+}
+.header-info-operate {
+  width: 50%;
+  display: flex;
+  flex-direction: row-reverse;
+}
+.header-info-operate div {
+  margin-right: 10px;
+}
+.paper-name {
+  font-size: 30px;
+  font-weight: bold;
+  line-height: 60px;
+  margin-top: 1%;
+}
+.paper-view-title {
+  text-align: left;
+  font-size: 18px;
+  font-weight: bold;
+  padding-left: 1%;
+}
+.aggregate {
+  font-size: 16px;
+  padding-left: 5px;
+}
+.problem {
+  position: relative;
+  cursor: pointer;
+  text-align: left;
+  margin: 1%;
+  padding: 1%;
+  border: 1px solid transparent;
+}
+.problem-details {
+  width: 85%;
+  display: inline-block;
+  vertical-align: top;
+}
+.numshow {
+  width: 15%;
+  display: inline-block;
+  vertical-align: top;
+  text-align: right;
+}
+.problem-num {
+  display: inline-block;
+  vertical-align: top;
+  width: 30px;
+  font-weight: bold;
+}
+.problem-content {
+  display: inline-block;
+  vertical-align: top;
+}
+.proble-single {
+  width: 85%;
+  margin-top: 1%;
+}
+.item-single {
+  margin: 8px 0px;
+  font-size: 16px;
+}
+.item-single div {
+  display: inline-block;
+  vertical-align: top;
+}
+.item-single-tag {
+  width: 35px;
+  font-weight: bold;
+}
+.tagicons {
+  width: 18px;
+  height: 18px;
+  fill: currentColor;
+  overflow: hidden;
+}
+.numshow-nums,
+.numshow-icon {
+  display: inline-block;
+  vertical-align: top;
+}
+.numshow-icon {
+  margin-left: 2%;
+}
+.numshow-icon-item {
+  width: 24px;
+  height: 24px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border-radius: 50%;
+  text-align: center;
+}
+.problem:hover {
+  border: 1px solid #48dbfb;
+}
+.spreadbox {
+  margin-top: 1%;
+  padding-top: 1%;
+  /* border-top: 1px dashed #ccc; */
+  transition: all 0.8s;
+  max-height: 0;
+  overflow: hidden;
+}
+.spreadbox-title {
+  color: #48dbfb;
+}
+.unfoldIndex {
+  max-height: 230px;
+  border-top: 1px dashed #ccc;
+}
+</style>
+<style>
+.header-info .el-rate {
+  line-height: 4.7;
+}
+</style>

+ 5 - 5
TEAMModelBI/ClientApp/src/view/schoolServe/school.vue

@@ -114,7 +114,7 @@
         <el-table-column prop="location" label="位置" align="center" />
         <!-- <el-table-column prop="city" :label="$t(`schoolManages.tables.city`)" align="center" />
                 <el-table-column prop="dist" :label="$t(`schoolManages.tables.area`)" align="center" /> -->
-        <el-table-column prop="size" :label="$t(`schoolManages.tables.spacesize`)" align="center" />
+        <el-table-column prop="size" :label="$t(`schoolManages.tables.spacesize`)" sortable align="center" />
         <el-table-column :label="$t(`schoolManages.tables.assis`)" align="center">
           <template #default="scope">
             <div v-if="scope.row.assisName">{{ scope.row.assisName }}</div>
@@ -330,14 +330,14 @@ import Impower from './impower.vue'
 import Classpower from './classpower.vue'
 import setSchooladmin from './setSchooladmin.vue'
 const siteValue = window.location.host === 'localhost:5001' ? 'cn' : window.location.host === 'bi.teammodel.cn' ? 'cn' : window.location.host === 'bitest.teammodel.cn' ? 'cn' : 'international'
-//const optionsData = siteValue === 'cn' ? option_cn : option_gl
-const optionsData = siteValue === 'cn' ? option_gl : option_gl
+const optionsData = siteValue === 'cn' ? option_cn : option_gl
+//const optionsData = siteValue === 'cn' ? option_gl : option_gl
 export default {
   components: {
     SetSchool,
     Impower,
     Classpower,
-    setSchooladmin
+    setSchooladmin,
   },
   setup () {
     let { proxy } = getCurrentInstance()
@@ -1139,7 +1139,7 @@ export default {
       placeData,
       schoolregionParams,
       originalNum,
-      nSchool
+      nSchool,
     }
   },
 }

+ 2 - 2
TEAMModelBI/ClientApp/src/view/teachermanage/school.vue

@@ -46,7 +46,7 @@
       </a>
     </div>
     <div class="school-list">
-      <el-table :data="tableData" style="width: 100%" height="75vh" v-loading="loading" element-loading-text="加载中...">
+      <el-table :data="tableData" style="width: 100%" height="75vh" v-loading="loading" element-loading-text="加载中..." :default-sort="{ prop: 'scale', order: 'descending' }">
         <el-table-column prop="index" :label="$t(`schoolManages.tables.serialnum`)" type="index" sortable align="center" />
         <el-table-column :label="$t(`schoolManages.tables.badge`)" width="150" align="center">
           <template #default="scope">
@@ -59,7 +59,7 @@
                         <span>{{scope.row.period[0].name}}</span>
                     </template>
                 </el-table-column> -->
-        <el-table-column :label="$t(`schoolManages.tables.scale`)" class="school-table-edition" align="center">
+        <el-table-column prop="scale" :label="$t(`schoolManages.tables.scale`)" class="school-table-edition" align="center">
           <template #default="scope">
             <el-image style="width: 80px; height: 80px" :src="imgData.basics" fit="fill" v-if="scope.row.scale === 0"></el-image>
             <el-image style="width: 80px; height: 80px" :src="imgData.standard" fit="fill" v-else-if="scope.row.scale === 500 && scope.row.hard === 0 && scope.row.serial === 0 && scope.row.service === 0">