浏览代码

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

CrazyIter_Bin 3 年之前
父节点
当前提交
9b86fc4e66

+ 2 - 2
TEAMModelOS.FunctionV4/HttpTrigger/IESHttpTrigger.cs

@@ -466,10 +466,10 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                     }
 
                     string tbScHourSql = $"PartitionKey eq 'HourLogin-{school}' and RowKey le '{delTbHour}'";
-                    await table.DeleteStringWhere<HourLogin>(rowKey: tbScHourSql); //删除学校168小时前的数据
+                    await table.DeleteStringWhere<HourLogin>(tbScHourSql); //删除学校168小时前的数据
 
                     string tbScDaySql = $"PartitionKey eq 'DayLogin-{school}' and RowKey le '{delTbDay}'";
-                    await table.DeleteStringWhere<DayLogin>(rowKey: tbScDaySql); //删除学校180天前的数据
+                    await table.DeleteStringWhere<DayLogin>(tbScDaySql); //删除学校180天前的数据
                 }
 
                 await response.WriteAsJsonAsync(new { data = json });

+ 8 - 7
TEAMModelOS/ClientApp/src/components/student-web/ClassRecord/StuReceive.vue

@@ -9,31 +9,31 @@
                 收集的作品
             </div>
             <!-- 图片类型作品 -->
-            <div v-else-if="collateType == 1">
+            <div v-else-if="collateType == 'Image'">
                 <img v-for="(blob,index) in item.blobFiles" :key="index" class="receive-img" :src="blob" alt="" @click="viewImage(blob)">
             </div>
             <!-- HTEX作品类型 -->
-            <div v-else-if="collateType == 2">
+            <div v-else-if="collateType == 'Htex'">
                 收集的HTEX作品
             </div>
             <!-- 音频 -->
-            <div v-else-if="collateType == 3">
+            <div v-else-if="collateType == 'Audio'">
                 <div v-for="(blob,index) in item.blobFiles" :key="index" class="audio-box" @click="viewAudio(blob)">
                     <Icon class="collate-type-icon" custom="iconfont icon-audio-outline" />
                 </div>
             </div>
             <!-- 视频 -->
-            <div v-else-if="collateType == 4">
+            <div v-else-if="collateType == 'Video'">
                 <div v-for="(blob,index) in item.blobFiles" :key="index" class="audio-box" @click="viewAudio(blob)">
                     <Icon class="collate-type-icon" custom="iconfont icon-video-outline" />
                 </div>
             </div>
             <!-- 文字 -->
-            <div v-else-if="collateType == 5">
+            <div v-else-if="collateType == 'Text'">
                 收集的文字
             </div>
             <!-- 附件 -->
-            <div v-else-if="collateType == 6">
+            <div v-else-if="collateType == 'File'">
                 <div v-for="(blob,index) in item.blobFiles" :key="index" class="audio-box" @click="downloadFile(blob,item)">
                     <Icon class="collate-type-icon" custom="iconfont icon-file" />
                 </div>
@@ -160,7 +160,8 @@ export default {
                 data = this._.cloneDeep(this.rcvData.clientWorks)
                 data = data.filter(item => this.nowStuInfo.seatID === item.seatID)
             }
-            let sas = await this.$tools.getBlobSas(this.recordInfo.tmdid)
+            let code = this.recordInfo.scope === "school" ? this.recordInfo.school : this.recordInfo.tmdid
+            let sas = await this.$tools.getBlobSas(code)
             data.forEach(stu => {
                 //处理完整文件路径
                 if (stu.blobFiles) {

+ 2 - 1
TEAMModelOS/ClientApp/src/components/student-web/ClassRecord/myWorks.vue

@@ -147,7 +147,7 @@ export default {
         },
     },
     created () {
-        this.getSas()
+        // this.getSas()
     },
     computed: {
     },
@@ -157,6 +157,7 @@ export default {
             immediate: true,
             handler(n, o) {
                 // this.collateType = n.collateType
+                this.getSas()
             }
         }
     }

文件差异内容过多而无法显示
+ 907 - 903
TEAMModelOS/ClientApp/src/view/evaluation/components/BaseEditExercise.vue


+ 260 - 269
TEAMModelOS/ClientApp/src/view/evaluation/components/BasePoints.vue

@@ -1,286 +1,278 @@
 <template>
-	<div class="points-container">
-		<!-- <Button type="info" class="btn-add-point" @click="addPointsModal = true"
+  <div class="points-container">
+    <!-- <Button type="info" class="btn-add-point" @click="addPointsModal = true"
 			v-show="curScope === 'school'">{{$t('evaluation.points.addPoint')}}</Button> -->
-		<div class="filter-wrap">
-			<Select v-model="selectPeriod" @on-change="onPeriodChange" :disabled="curScope === 'school'">
-				<Option v-for="(item, index) in periodList" :value="item.id" :key="index">{{ item.name }}</Option>
-			</Select>
+    <div class="filter-wrap">
+      <Select v-model="selectPeriod" @on-change="onPeriodChange" :disabled="curScope === 'school'">
+        <Option v-for="(item, index) in periodList" :value="item.id" :key="index">{{ item.name }}</Option>
+      </Select>
 
-			<Select v-model="selectSubject" @on-change="onSubjectChange" :disabled="curScope === 'school'">
-				<Option v-for="(item, index) in subjectList" :value="item.id" :key="index">{{ item.name }}</Option>
-			</Select>
-		</div>
+      <Select v-model="selectSubject" @on-change="onSubjectChange" :disabled="curScope === 'school'">
+        <Option v-for="(item, index) in subjectList" :value="item.id" :key="index">{{ item.name }}</Option>
+      </Select>
+    </div>
 
-		<div style="margin-top: 20px;">
-			<Loading hideMask v-show="isLoading"></Loading>
-			<Input v-special-char icon="ios-close" v-model="searchSchoolPoint" :placeholder="$t('evaluation.points.searchPoint')"
-				autofocus style="width: 98%;margin-left:1%;margin-bottom:10px" @on-change="onSearchSchoolChange"
-				@on-enter="onSearchSchoolChange" />
-			<div v-if="schoolPointList.length === 0" style="margin:5px">{{$t('evaluation.points.noPoint')}}</div>
-			<CheckboxGroup v-model="checkedList" @on-change="onCheckChange" v-else>
-				<Checkbox v-for="(item,index) in schoolPointList" :label="item" :key="item">{{ item }}</Checkbox>
-			</CheckboxGroup>
-		</div>
-		
-		
+    <div style="margin-top: 20px;">
+      <Loading hideMask v-show="isLoading"></Loading>
+      <Input v-special-char icon="ios-close" v-model="searchSchoolPoint" :placeholder="$t('evaluation.points.searchPoint')" autofocus style="width: 98%;margin-left:1%;margin-bottom:10px" @on-change="onSearchSchoolChange" @on-enter="onSearchSchoolChange" />
+      <div v-if="schoolPointList.length === 0" style="margin:5px">{{$t('evaluation.points.noPoint')}}</div>
+      <CheckboxGroup v-model="checkedList" @on-change="onCheckChange" v-else>
+        <Checkbox v-for="(item,index) in schoolPointList" :label="item" :key="item">{{ item }}</Checkbox>
+      </CheckboxGroup>
+    </div>
 
-		<div class="points-checked-wrap">
-			<p class="points-title">{{$t('evaluation.points.checkedPoint')}}</p>
-			<span class="point-item" v-for="(item,index) in checkedList" :key="index">{{ item }}</span>
-		</div>
-		
-		<div class="point-footer">
-			<Button @click="onCancel">{{$t('evaluation.cancel')}}</Button>
-			<Button type="info" @click="onConfirm">{{$t('evaluation.confirm')}}</Button>
-		</div>
+    <div class="points-checked-wrap">
+      <p class="points-title">{{$t('evaluation.points.checkedPoint')}}</p>
+      <span class="point-item" v-for="(item,index) in checkedList" :key="index">{{ item }}</span>
+    </div>
 
-		<Modal v-model="addPointsModal" :title="$t('evaluation.points.addPoint')" ref="pointRef" width="400px"
-			class="related-point-modal" style="z-index:99999">
-			<span>{{$t('evaluation.points.pointName')}}</span>
-			<Input v-special-char v-model="newPointName" :placeholder="$t('evaluation.points.inputNewPoint')" style="margin:10px 0" />
-			<div slot="footer">
-				<Button type="text" @click="addPointsModal = false">{{$t('evaluation.cancel')}}</Button>
-				<Button type="primary" @click="onAddNewPoint"
-					:loading="isAddLoading">{{$t('evaluation.confirm')}}</Button>
-			</div>
-		</Modal>
-	</div>
+    <div class="point-footer">
+      <Button @click="onCancel">{{$t('evaluation.cancel')}}</Button>
+      <Button type="info" @click="onConfirm">{{$t('evaluation.confirm')}}</Button>
+    </div>
+
+    <Modal v-model="addPointsModal" :title="$t('evaluation.points.addPoint')" ref="pointRef" width="400px" class="related-point-modal" style="z-index:99999">
+      <span>{{$t('evaluation.points.pointName')}}</span>
+      <Input v-special-char v-model="newPointName" :placeholder="$t('evaluation.points.inputNewPoint')" style="margin:10px 0" />
+      <div slot="footer">
+        <Button type="text" @click="addPointsModal = false">{{$t('evaluation.cancel')}}</Button>
+        <Button type="primary" @click="onAddNewPoint" :loading="isAddLoading">{{$t('evaluation.confirm')}}</Button>
+      </div>
+    </Modal>
+  </div>
 </template>
 <script>
-	import '@/utils/Math.uuid'
-	export default {
-		components: {},
-		props: {
-			period: {
-				type: String,
-				default: ''
-			},
-			subject: {
-				type: String,
-				default: ''
-			},
-			scope: {
-				type: String,
-				default: 'school'
-			},
-			points: {
-				type: Array,
-				default: () => []
-			},
-			max: {
-				type: Number,
-				default: 5
-			}
-		},
-		data() {
-			return {
-				isLoading: false,
-				addPointsModal: false,
-				isAddLoading: false,
-				tabName: 'school',
-				newPointType: 'school',
-				newPointName: '',
-				searchPoint: '',
-				searchSchoolPoint: '',
-				curScope: '',
-				selectPeriod: 0,
-				selectSubject: 0,
-				periodList: [{
-					id: '0',
-					name: '0'
-				}],
-				subjectList: [{
-					id: '0',
-					name: '0'
-				}],
-				pointList: [],
-				schoolPointList: [],
-				checkedList: [],
-				originPointList: [],
-				originSchoolList: [],
-				originList: [],
-				defaultParams: {
-					code: '',
-					periodId: null,
-					subjectId: null,
-					school_code: null,
-					type: 1
-				},
-				curPointResponse: null
-			}
-		},
-		created() {
-			console.log('period' + this.period)
-			console.log('subject' + this.subject)
-			console.log('scope' + this.scope)
-			if (this.period && this.subject) {
-				this.selectPeriod = this.period
-				this.selectSubject = this.subject
-			}
-			this.initSchoolData()
-			this.getPoints()
-		},
-		methods: {
+import '@/utils/Math.uuid'
+export default {
+  components: {},
+  props: {
+    period: {
+      type: String,
+      default: ''
+    },
+    subject: {
+      type: String,
+      default: ''
+    },
+    scope: {
+      type: String,
+      default: 'school'
+    },
+    points: {
+      type: Array,
+      default: () => []
+    },
+    max: {
+      type: Number,
+      default: 5
+    }
+  },
+  data() {
+    return {
+      isLoading: false,
+      addPointsModal: false,
+      isAddLoading: false,
+      tabName: 'school',
+      newPointType: 'school',
+      newPointName: '',
+      searchPoint: '',
+      searchSchoolPoint: '',
+      curScope: '',
+      selectPeriod: 0,
+      selectSubject: 0,
+      periodList: [{
+        id: '0',
+        name: '0'
+      }],
+      subjectList: [{
+        id: '0',
+        name: '0'
+      }],
+      pointList: [],
+      schoolPointList: [],
+      checkedList: [],
+      originPointList: [],
+      originSchoolList: [],
+      originList: [],
+      defaultParams: {
+        code: '',
+        periodId: null,
+        subjectId: null,
+        school_code: null,
+        type: 1
+      },
+      curPointResponse: null
+    }
+  },
+  created() {
+    console.log('period-' + this.period)
+    console.log('subject-' + this.subject)
+    console.log('scope-' + this.scope)
+    if (this.period && this.subject) {
+      this.selectPeriod = this.period
+      this.selectSubject = this.subject
+    }
+    this.initSchoolData()
+    this.getPoints()
+  },
+  methods: {
+    // 获取当前学校学段学科等基本信息
+    initSchoolData() {
+      this.$store.dispatch('user/getSchoolProfile').then(res => {
+        let schoolBaseInfo = res.school_base
+        if (schoolBaseInfo && schoolBaseInfo.period.length) {
+          this.periodList = schoolBaseInfo.period
+          if (this.selectPeriod) {
+            console.log(this.selectSubject)
+            console.log(this.selectPeriod)
+            this.subjectList = this.periodList.filter(i => i.id === this.selectPeriod)[0].subjects
+            console.log(this.subjectList.map(i => i.id))
+          } else {
+            this.selectPeriod = schoolBaseInfo.period[0].id
+            this.onPeriodChange(this.periodList[0].id)
+          }
+        }
+      })
+    },
 
+    // 学段切换处理
+    onPeriodChange(val) {
+      this.subjectList = this.periodList.filter(i => i.id === val)[0].subjects
+      this.selectPeriod = val
+      this.selectSubject = this.subjectList[0].id
+      this.subjectList.length && this.getPoints()
+    },
 
-			// 获取当前学校学段学科等基本信息
-			initSchoolData() {
-				this.$store.dispatch('user/getSchoolProfile').then(res => {
-					let schoolBaseInfo = res.school_base
-					if (schoolBaseInfo && schoolBaseInfo.period.length) {
-						this.periodList = schoolBaseInfo.period
-						if (this.selectPeriod) {
-							console.log(this.selectPeriod)
-							this.subjectList = this.periodList.filter(i => i.id === this.selectPeriod)[0].subjects
-							console.log(this.subjectList.map(i => i.id))
-							console.log(this.selectSubject)
-						} else {
-							this.selectPeriod = schoolBaseInfo.period[0].id
-							this.onPeriodChange(this.periodList[0].id)
-						}
-					}
-				})
-			},
+    onSubjectChange(val) {
+      this.getPoints()
+    },
 
-			// 学段切换处理
-			onPeriodChange(val) {
-				this.subjectList = this.periodList.filter(i => i.id === val)[0].subjects
-				this.selectPeriod = val
-				this.selectSubject = this.subjectList[0].id
-				this.subjectList.length && this.getPoints()
-			},
+    doReset() {
+      this.getPoints()
+      this.checkedList = []
+    },
 
-			onSubjectChange(val) {
-				this.getPoints()
-			},
+    /**
+     * 获取知识点仓库数据
+     */
+    getPoints() {
+      if (this.periodList.length && this.subjectList.length) {
+        this.isLoading = true
+        // if (this.pointList.length && this.schoolPointList.length) return
+        this.defaultParams.code = this.$store.state.userInfo.schoolCode
+        this.defaultParams.school_code = this.$store.state.userInfo.schoolCode
+        this.defaultParams.periodId = this.selectPeriod
+        this.defaultParams.subjectId = this.selectSubject
 
-			doReset() {
-				this.getPoints()
-				this.checkedList = []
-			},
+        if (this.defaultParams.periodId && this.defaultParams.subjectId) {
+          this.$api.knowledge.GetSchoolPoints(this.defaultParams).then(res => {
+            if (!res.error && res.length) {
+              this.curPointResponse = res[0]
+              this.schoolPointList = res[0].points
+              this.originSchoolList = res[0].points
+              this.originPointList = this.originPointList.concat(res[0].points)
+            } else {
+              this.$Message.warning(this.$t('evaluation.noData'),)
+              this.uuid = Math.uuid()
+              this.schoolPointList = []
+              this.originSchoolList = []
+              this.originPointList = []
+              this.curPointResponse = {
+                blocks: [],
+                code: `Knowledge-${this.$store.state.userInfo.schoolCode}-${this.uuid}`,
+                id: this.uuid,
+                owner: this.$store.state.userInfo.schoolCode,
+                periodId: this.defaultParams.periodId,
+                pk: 'Knowledge',
+                points: [],
+                scope: 'school',
+                subjectId: this.defaultParams.subjectId
+              }
+            }
+            this.isLoading = false
+          })
+        }
+        this.isLoading = true
+      }
 
-			/**
-			 * 获取知识点仓库数据
-			 */
-			getPoints() {
-				if (this.periodList.length && this.subjectList.length) {
-					this.isLoading = true
-					// if (this.pointList.length && this.schoolPointList.length) return
-					this.defaultParams.code = this.$store.state.userInfo.schoolCode
-					this.defaultParams.school_code = this.$store.state.userInfo.schoolCode
-					this.defaultParams.periodId = this.selectPeriod
-					this.defaultParams.subjectId = this.selectSubject
 
-					if (this.defaultParams.periodId && this.defaultParams.subjectId) {
-						this.$api.knowledge.GetSchoolPoints(this.defaultParams).then(res => {
-							if (!res.error && res.length) {
-								this.curPointResponse = res[0]
-								this.schoolPointList = res[0].points
-								this.originSchoolList = res[0].points
-								this.originPointList = this.originPointList.concat(res[0].points)
-							} else {
-								this.$Message.warning(this.$t('evaluation.noData'),)
-								this.uuid = Math.uuid()
-								this.schoolPointList = []
-								this.originSchoolList = []
-								this.originPointList = []
-								this.curPointResponse = {
-									blocks: [],
-									code: `Knowledge-${this.$store.state.userInfo.schoolCode}-${this.uuid}`,
-									id: this.uuid,
-									owner: this.$store.state.userInfo.schoolCode,
-									periodId: this.defaultParams.periodId,
-									pk: 'Knowledge',
-									points: [],
-									scope: 'school',
-									subjectId: this.defaultParams.subjectId
-								}
-							}
-							this.isLoading = false
-						})
-					}
-					this.isLoading = true
-				}
+    },
 
+    /** 添加新知识点 */
+    onAddNewPoint() {
+      let newName = this.newPointName
+      if (newName) {
+        this.curPointResponse.points.push(newName)
+        this.savePoint()
+      } else {
+        this.$Message.warning(this.$t('evaluation.points.noNameTips'))
+      }
+    },
 
-			},
+    /**
+     * 保存知识点
+     * @param pointItem
+     * @param BlockItem
+     */
+    savePoint() {
+      this.isAddLoading = true
+      this.$api.knowledge.SaveOrUpdateKnowledge(this.curPointResponse).then(res => {
+        if (!res.error && res) {
+          this.$Message.success(this.$t('evaluation.points.addSuc'))
+          this.addPointsModal = false
+          this.isAddLoading = false
+          this.getPoints()
+        } else {
+          this.$Message.warning(res.error)
+        }
+      }).catch(err => {
+        console.log(err)
+        this.$Message.warning(this.$t('evaluation.points.addFail'))
+      })
+    },
 
-			/** 添加新知识点 */
-			onAddNewPoint() {
-				let newName = this.newPointName
-				if (newName) {
-					this.curPointResponse.points.push(newName)
-					this.savePoint()
-				} else {
-					this.$Message.warning(this.$t('evaluation.points.noNameTips'))
-				}
-			},
+    onCheckChange(val) {
+      if (val.length > this.max) {
+        this.$Message.warning(
+          `${this.$t('evaluation.points.noNameTips') + this.max + this.$t('evaluation.points.noNameTips')}`
+        )
+        this.checkedList.splice(this.checkedList.length - 1, 1)
+      } else {
+        // this.$emit('onCheckChange', val, this.originPointList)
+      }
+    },
 
-			/**
-			 * 保存知识点
-			 * @param pointItem
-			 * @param BlockItem
-			 */
-			savePoint() {
-				this.isAddLoading = true
-				this.$api.knowledge.SaveOrUpdateKnowledge(this.curPointResponse).then(res => {
-					if (!res.error && res) {
-						this.$Message.success(this.$t('evaluation.points.addSuc'))
-						this.addPointsModal = false
-						this.isAddLoading = false
-						this.getPoints()
-					} else {
-						this.$Message.warning(res.error)
-					}
-				}).catch(err => {
-					console.log(err)
-					this.$Message.warning(this.$t('evaluation.points.addFail'))
-				})
-			},
+    onConfirm() {
+      this.$emit('onCheckChange', this.checkedList, this.originPointList)
+    },
 
-			onCheckChange(val) {
-				if (val.length > this.max) {
-					this.$Message.warning(
-						`${this.$t('evaluation.points.noNameTips') + this.max + this.$t('evaluation.points.noNameTips')}`
-						)
-					this.checkedList.splice(this.checkedList.length - 1, 1)
-				} else {
-					// this.$emit('onCheckChange', val, this.originPointList)
-				}
-			},
-			
-			onConfirm(){
-				this.$emit('onCheckChange', this.checkedList, this.originPointList)
-			},
-			
-			onCancel(){
-				this.checkedList = []
-				this.$emit('onCancel')
-			},
+    onCancel() {
+      this.checkedList = []
+      this.$emit('onCancel')
+    },
 
-			onDeletePoint(index) {
-				this.checkedList.splice(index, 1)
-			},
+    onDeletePoint(index) {
+      this.checkedList.splice(index, 1)
+    },
 
-			onSearchSchoolChange() {
-				this.schoolPointList = this.originSchoolList.filter(item => item.indexOf(this.searchSchoolPoint) > -1)
-			},
-		},
-		mounted() {
-			if (this.points.length) {
-				this.checkedList = this.points
-			}
-			this.curScope = this.scope
-		},
-		watch: {
-			scope: {
-				handler(n, o) {
-					console.log(n)
-				}
-			}
-		}
-	}
+    onSearchSchoolChange() {
+      this.schoolPointList = this.originSchoolList.filter(item => item.indexOf(this.searchSchoolPoint) > -1)
+    },
+  },
+  mounted() {
+    if (this.points.length) {
+      this.checkedList = this.points
+    }
+    this.curScope = this.scope
+  },
+  watch: {
+    scope: {
+      handler(n, o) {
+        console.log(n)
+      }
+    }
+  }
+}
 </script>
 
 <style lang="less" scoped>
@@ -290,13 +282,13 @@
     padding: 5px 0 10px 5px;
     border-bottom: 1px solid #e0e0e0;
   }
-  .point-footer{
-	  display: flex;
-	  justify-content: end;
-	  
-	  .ivu-btn{
-		  margin-right: 10px;
-	  }
+  .point-footer {
+    display: flex;
+    justify-content: end;
+
+    .ivu-btn {
+      margin-right: 10px;
+    }
   }
   .ivu-select-single {
     width: 120px;
@@ -343,5 +335,4 @@
     z-index: 999;
   }
 }
-
 </style>