Procházet zdrojové kódy

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

CrazyIter_Bin před 1 rokem
rodič
revize
3900146c88

+ 50 - 29
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -511,40 +511,56 @@ namespace TEAMModelOS.SDK
                 invalidCode=28;
                 msg="作品分配次数至少一次!";
             }
-            if (reviewRule.taskCount==1  && reviewRule.scoreRule.Equals("only"))
+            if (reviewRule.taskCount==1  )
             {
-                invalidCode=200;
-            }
-            else
-            {
-                invalidCode=21;//分配次数一次,必须匹配only
-                msg="分配次数1次,必须匹配【默认统分】规则";
-            }
-            if (reviewRule.taskCount>=2  && (reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top")))
-            {
-                invalidCode=200;
-            }
-            else {
-                invalidCode=22;//分配次数2次,必须匹配avg,top
-                msg="分配次数2次,必须匹配【按平均分】,【按最高分】";
-            }
-            if (reviewRule.taskCount>=3  && (reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top")||reviewRule.scoreRule.Equals("rmLowAvg")||reviewRule.scoreRule.Equals("rmTopAvg")))
-            {
-                invalidCode=200;
+                if (reviewRule.scoreRule.Equals("only"))
+                {
+                    invalidCode=200;
+                }
+                else
+                {
+                    invalidCode=21;//分配次数一次,必须匹配only
+                    msg="分配次数1次,必须匹配【默认统分】规则";
+                }
+
             }
-            else
+          
+            if (reviewRule.taskCount>=2 )
             {
-                invalidCode=23;//分配次数2次,必须匹配avg,top,rmLowAvg,rmTopAvg
-                msg="分配次数3次,必须匹配必须匹配【按平均分】,【按最高分】,【去掉最低分的平均分】,【去掉最高分的平均分】";
+                if ((reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top"))) {
+                    invalidCode=200;
+                }
+                else
+                {
+                    invalidCode=22;//分配次数2次,必须匹配avg,top
+                    msg="分配次数2次,必须匹配【按平均分】,【按最高分】";
+                }
+
             }
-            if (reviewRule.taskCount>=4  && (reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top")||reviewRule.scoreRule.Equals("rmLowAvg")||reviewRule.scoreRule.Equals("rmTopAvg")||reviewRule.scoreRule.Equals("rmLowTopAvg")))
-            {
-                invalidCode=200;
+         
+            if (reviewRule.taskCount>=3  )
+            {if ((reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top")||reviewRule.scoreRule.Equals("rmLowAvg")||reviewRule.scoreRule.Equals("rmTopAvg")))
+                {
+                    invalidCode=200;
+                }
+                else
+                {
+                    invalidCode=23;//分配次数2次,必须匹配avg,top,rmLowAvg,rmTopAvg
+                    msg="分配次数3次,必须匹配必须匹配【按平均分】,【按最高分】,【去掉最低分的平均分】,【去掉最高分的平均分】";
+                }
             }
-            else
+            
+            if (reviewRule.taskCount>=4   )
             {
-                invalidCode=24;//分配次数2次,必须匹配avg,top,rmLowAvg,rmTopAvg,rmLowTopAvg
-                msg="分配次数4次,必须匹配必须匹配【按平均分】,【按最高分】,【去掉最低分的平均分】,【去掉最高分的平均分】,【去掉最高分和最低分的平均分】";
+                if ((reviewRule.scoreRule.Equals("avg")||reviewRule.scoreRule.Equals("top")||reviewRule.scoreRule.Equals("rmLowAvg")||reviewRule.scoreRule.Equals("rmTopAvg")||reviewRule.scoreRule.Equals("rmLowTopAvg")))
+                {
+                    invalidCode=200; 
+                }
+                else
+                {
+                    invalidCode=24;//分配次数2次,必须匹配avg,top,rmLowAvg,rmTopAvg,rmLowTopAvg
+                    msg="分配次数4次,必须匹配必须匹配【按平均分】,【按最高分】,【去掉最低分的平均分】,【去掉最高分的平均分】,【去掉最高分和最低分的平均分】";
+                }
             }
             if (invalidCode==200) {
                 if (!string.IsNullOrWhiteSpace(reviewRule.distribute))
@@ -589,7 +605,12 @@ namespace TEAMModelOS.SDK
                             msg="作品分配匹配规则为【学段,学科】,但报名填写表单未配置。";
                         }
                     }
-                    else {
+                    else if (reviewRule.distribute.Equals("none"))
+                    {
+                        invalidCode=200;
+                    }
+                    else  
+                    {
                         invalidCode=30;
                         msg=$"作品分配匹配规则未识别【{reviewRule.distribute}】。";
                     }

+ 111 - 74
TEAMModelOS/ClientApp/src/view/signupActivity/createActivity.vue

@@ -24,7 +24,7 @@
                             <Input v-special-char v-model="createData.address" placeholder="请输入活动地点" />
                         </FormItem>
                         <FormItem label="时间" prop="stime">
-                            <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="getCreateTime" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                            <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="(date, type) => setActTime(date, type, 0)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                         </FormItem>
                         <FormItem label="主办" class="unit-box">
                             <div v-for="(item, index) in createData.zb" :key="index">
@@ -128,7 +128,7 @@
                                         <div>
                                             <Form ref="contestData" :model="contestData.sign" :rules="contestRule" :label-width="80">
                                                 <FormItem label="报名时间" prop="stime">
-                                                    <DatePicker v-model="actAllTime[1]" :editable="false" :options="beforeAct" @on-change="getActTime" type="datetimerange" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                                                    <DatePicker v-model="actAllTime[1]" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 1)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                                                 </FormItem>
                                                 <FormItem label="报名人数">
                                                     <InputNumber :min="0" v-model="contestData.sign.limit" />
@@ -166,7 +166,7 @@
                                         <div v-show="skWork">
                                             <Form ref="contestUpload" :model="contestUpload" :rules="contestRuleUpload" :label-width="80">
                                                 <FormItem label="上传时间" prop="stime">
-                                                    <DatePicker v-model="actAllTime[2]" ref="workPicker" :editable="false" :options="beforeAct" @on-change="getWorkTime" type="datetimerange" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                                                    <DatePicker v-model="actAllTime[2]" ref="workPicker" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 2)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                                                 </FormItem>
                                                 <FormItem label="作品类型">
                                                     <RadioGroup v-model="contestUpload.type">
@@ -208,8 +208,8 @@
                                         <div v-show="skReview">
                                             <Form ref="contestReview" :model="contestReview" :rules="contestRuleReview" :label-width="80">
                                                 <FormItem label="评审时间" prop="stime">
-                                                    <DatePicker v-model="actAllTime[3]" ref="reviewPicker" :editable="false" :options="beforeAct" type="datetimerange" format="yyyy-MM-dd HH:mm"
-                                                        :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px" @on-change="getReviewTime">
+                                                    <DatePicker v-model="actAllTime[3]" ref="reviewPicker" :editable="false" :options="beforeAct" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
+                                                        :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px" @on-change="(date, type) => setActTime(date, type, 3)">
                                                     </DatePicker>
                                                 </FormItem>
                                                 <FormItem label="评审规则" prop="rule">
@@ -236,7 +236,7 @@
                                         <div v-show="skPublic">
                                             <Form ref="contestScore" :model="contestScore" :rules="contestRuleUpload" :label-width="80">
                                                 <FormItem label="公示时间" prop="stime">
-                                                    <DatePicker v-model="actAllTime[4]" ref="scorePicker" :editable="false" :options="beforeAct" @on-change="getPublicTime" type="datetimerange" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px"></DatePicker>
+                                                    <DatePicker v-model="actAllTime[4]" ref="scorePicker" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 4)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px"></DatePicker>
                                                 </FormItem>
                                             </Form>
                                         </div>
@@ -934,14 +934,21 @@ export default {
                     this.$Message.success('创建成功!')
                     this.$router.go(-1)
                 } else {
-                    this.$api.blob.deletePrefix({
-                        "cntr": this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
-                        "prefix": `activity/${this.createData.id}`
-                    }).then(res => {
-                        if(res.status) {
-                            console.log('删除成功');
-                        }
-                    })
+                    if(res.code === 25 || res.code === 26 || res.code === 27) {
+                        this.$Message.warning('填报信息未配置学段、学科,无法进行作品分配!')
+                    } else {
+                        this.$Message.warning('保存失败')
+                    }
+                    if(params.Activity.poster || params.Activity.attachment.length) {
+                        this.$api.blob.deletePrefix({
+                            "cntr": this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
+                            "prefix": `activity/${this.createData.id}`
+                        }).then(res => {
+                            if(res.status) {
+                                console.log('删除成功');
+                            }
+                        })
+                    }
                 }
             }).finally(() => {
                 this.isLoading = false
@@ -1075,6 +1082,10 @@ export default {
                             })
                         }
                     }
+                    if(!this.createData.modules.length) {
+                        this.$Message.warning('请先选择一个模块')
+                        break
+                    }
                     if(needBreak) break
                     // 加入发布活动页面前需保存学校列表、填报信息
                     this.createData.invitedSchools = []
@@ -1169,75 +1180,100 @@ export default {
         last() {
             this.current -= 1
         },
-        // 获取大活动的进行时间
-        getCreateTime(data) {
-            this.actAllTime[0] = data.filter(item => {
+        setActTime(date, type, index) {
+            let actTime = date.filter(item => {
                 return item
             })
-            this.createData.stime = this.actAllTime[0].length > 1 ? (new Date(this.actAllTime[0][0])).getTime() : null
-            this.createData.etime = this.actAllTime[0].length > 1 ? (new Date(this.actAllTime[0][1])).getTime() : null
-        },
-        // 优课评选的报名时间
-        getActTime(data) {
-            let actTime = data.filter(item => {
-                return item
-            })
-            this.contestData.sign.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
-            this.contestData.sign.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
-        },
-        // 优课评选的上传时间
-        getWorkTime(data) {
-            let workTime = data.filter(item => {
-                return item
-            })
-            if(workTime.length > 1 && !this.contestData.sign.etime) {
-                this.$refs.workPicker[0].handleClear()
-                this.$Message.warning('请先设置报名时间')
-                return
+            // 没有选择结束的时分秒,需将结束时间默认为 23:59:59
+            if(actTime.length > 1 && actTime[1].slice(-8) === '00:00:00' && type === 'date') {
+                actTime[1] = actTime[1].slice(0, -8) + '23:59:59'
             }
-            if(workTime.length > 1 && (new Date(workTime[1])).getTime() < this.contestData.sign.etime) {
-                this.$refs.workPicker[0].handleClear()
-                this.$Message.warning('上传结束时间不能早于报名时间')
-                return
+            switch (index) {
+                case 0:
+                    this.createData.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
+                    this.createData.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
+                    this.actAllTime.splice(0, 1, actTime)
+                    this.spliceTime(['sign', 'upload', 'review', 'score'])
+                    break
+                case 1:
+                    this.contestData.sign.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
+                    this.contestData.sign.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
+                    this.actAllTime.splice(1, 1, actTime)
+                    this.spliceTime(['upload', 'review', 'score'])
+                    break
+                case 2:
+                    if(actTime.length > 1 && !this.contestData.sign.etime) {
+                        // this.$refs.workPicker[0].handleClear()
+                        this.$Message.warning('请先设置报名时间')
+                        this.spliceTime(['upload'])
+                    } else if(actTime.length > 1 && (new Date(actTime[1])).getTime() < this.contestData.sign.etime) {
+                        // this.$refs.workPicker[0].handleClear()
+                        this.$Message.warning('上传结束时间不能早于报名时间')
+                        this.spliceTime(['upload'])
+                    } else if(actTime.length > 1) {
+                        this.contestUpload.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
+                        this.contestUpload.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
+                        this.actAllTime.splice(2, 1, actTime)
+                    }
+                    this.spliceTime(['review', 'score'])
+                    break
+                case 3:
+                    if(actTime.length > 1 && (!this.contestData.sign.etime || !this.contestUpload.etime)) {
+                        // this.$refs.reviewPicker[0].handleClear()
+                        this.$Message.warning('请先设置报名时间、上传时间')
+                        this.spliceTime(['review'])
+                    } else if(actTime.length > 1 && ((new Date(actTime[0])).getTime() < this.contestData.sign.etime || (new Date(actTime[0])).getTime() < this.contestUpload.etime)) {
+                        // this.$refs.reviewPicker[0].handleClear()
+                        this.$Message.warning('评审必须在报名、上传结束后进行')
+                        this.spliceTime(['review'])
+                    } else if(actTime.length > 1) {
+                        this.contestReview.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
+                        this.contestReview.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
+                        this.actAllTime.splice(3, 1, actTime)
+                    }
+                    this.spliceTime(['score'])
+                    break
+                case 4:
+                    if(actTime.length > 1 && !this.contestReview.etime) {
+                        // this.$refs.scorePicker[0].handleClear()
+                        this.$Message.warning('请先设置评审时间')
+                        this.spliceTime(['score'])
+                    } else if(actTime.length > 1 && (new Date(actTime[0])).getTime() < this.contestReview.etime) {
+                        // this.$refs.scorePicker[0].handleClear()
+                        this.$Message.warning('公示必须在评审结束后进行')
+                        this.spliceTime(['score'])
+                    } else if(actTime.length > 1) {
+                        this.contestScore.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
+                        this.contestScore.etime = actTime.length > 1 ? (new Date(actTime[1])).getTime() : null
+                        this.actAllTime.splice(4, 1, actTime)
+                    }
+                    break
+                default:
+                    break
             }
-            this.contestUpload.stime = workTime.length > 1 ? (new Date(workTime[0])).getTime() : null
-            this.contestUpload.etime = workTime.length > 1 ? (new Date(workTime[1])).getTime() : null
         },
-        // 优课评选的评审时间
-        getReviewTime(data) {
-            let reviewTime = data.filter(item => {
-                return item
-            })
-            if(reviewTime.length > 1 && (!this.contestData.sign.etime || !this.contestUpload.etime)) {
-                this.$refs.reviewPicker[0].handleClear()
-                this.$Message.warning('请先设置报名时间、上传时间')
-                return
+        spliceTime(type) {
+            console.log(type);
+            if(type.includes('sign')) {
+                this.contestData.sign.stime = null
+                this.contestData.sign.etime = null
+                this.actAllTime.splice(1, 1, [])
             }
-            if(reviewTime.length > 1 && ((new Date(reviewTime[0])).getTime() < this.contestData.sign.etime || (new Date(reviewTime[0])).getTime() < this.contestUpload.etime)) {
-                this.$refs.reviewPicker[0].handleClear()
-                this.$Message.warning('评审必须在报名、上传结束后进行')
-                return
+            if(type.includes('upload')) {
+                this.contestUpload.stime = null
+                this.contestUpload.etime = null
+                this.actAllTime.splice(2, 1, [])
             }
-            this.contestReview.stime = reviewTime.length > 1 ? (new Date(reviewTime[0])).getTime() : null
-            this.contestReview.etime = reviewTime.length > 1 ? (new Date(reviewTime[1])).getTime() : null
-        },
-        // 优课评选的公示时间
-        getPublicTime(data) {
-            let publicTime = data.filter(item => {
-                return item
-            })
-            if(publicTime.length > 1 && !this.contestReview.etime) {
-                this.$refs.scorePicker[0].handleClear()
-                this.$Message.warning('请先设置评审时间')
-                return
+            if(type.includes('review')) {
+                this.contestReview.stime = null
+                this.contestReview.etime = null
+                this.actAllTime.splice(3, 1, [])
             }
-            if(publicTime.length > 1 && (new Date(publicTime[0])).getTime() < this.contestReview.etime) {
-                this.$refs.scorePicker[0].handleClear()
-                this.$Message.warning('公示必须在评审结束后进行')
-                return
+            if(type.includes('score')) {
+                this.contestScore.stime = null
+                this.contestScore.etime = null
+                this.actAllTime.splice(4, 1, [])
             }
-            this.contestScore.stime = publicTime.length > 1 ? (new Date(publicTime[0])).getTime() : null
-            this.contestScore.etime = publicTime.length > 1 ? (new Date(publicTime[1])).getTime() : null
         },
         // 文件展示
         customUpload(file) {
@@ -1408,6 +1444,7 @@ export default {
                     this.ruleInfo = this._.cloneDeep(this.reviewList[index])
                     if(type === 'copy') {
                         this.ruleInfo.isAdd = true
+                        this.ruleInfo.name = this.ruleInfo.name + '(复制)'
                     }
                 }
                 this.ruleDrawerAdd = type === 'edit' ? 1 : 2

+ 26 - 9
TEAMModelOS/ClientApp/src/view/signupActivity/infoComponent/editActInfo.vue

@@ -1,5 +1,5 @@
 <template>
-    <div>
+    <div class="edit-act">
         <Loading v-show="isLoading"></Loading>
         <Form :model="editInfo" :label-width="80" ref="editInfo" :rules="editDataRule">
             <FormItem label="名称" prop="name">
@@ -15,7 +15,7 @@
                 <Input v-special-char v-model="editInfo.address" placeholder="请输入活动地点" />
             </FormItem>
             <FormItem label="时间" prop="stime">
-                <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="getCreateTime" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="getCreateTime" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
             </FormItem>
             <FormItem label="主办" class="unit-box">
                 <div v-for="(item, index) in editInfo.zb" :key="index">
@@ -150,8 +150,8 @@ export default {
                     }
                     this.actAllTime = [[]]
                     // 处理时间显示
-                    this.actAllTime[0].push(this.$tools.formatTime(this.actInfo.stime, 'yyyy-MM-dd hh:mm'))
-                    this.actAllTime[0].push(this.$tools.formatTime(this.actInfo.etime, 'yyyy-MM-dd hh:mm'))
+                    this.actAllTime[0].push(this.$tools.formatTime(this.actInfo.stime, 'yyyy-MM-dd hh:mm:ss'))
+                    this.actAllTime[0].push(this.$tools.formatTime(this.actInfo.etime, 'yyyy-MM-dd hh:mm:ss'))
                     // 基本信息回显
                     this.posterFile = {
                         url: this.editInfo.poster,
@@ -170,13 +170,16 @@ export default {
     },
     methods: {
         // 获取大活动的进行时间
-        getCreateTime(data) {
-            console.log('52fg6regge65e', data);
-            this.actAllTime[0] = data.filter(item => {
+        getCreateTime(data, type) {
+            let times = data.filter(item => {
                 return item
             })
-            this.editInfo.stime = this.actAllTime[0].length > 1 ? (new Date(this.actAllTime[0][0])).getTime() : null
-            this.editInfo.etime = this.actAllTime[0].length > 1 ? (new Date(this.actAllTime[0][1])).getTime() : null
+            if(times.length > 1 && times[1].slice(-8) === '00:00:00' && type === 'date') {
+                times[1] = times[1].slice(0, -8) + '23:59:59'
+            }
+            this.editInfo.stime = times.length > 1 ? (new Date(times[0])).getTime() : null
+            this.editInfo.etime = times.length > 1 ? (new Date(times[1])).getTime() : null
+            this.actAllTime.splice(0, 1, times)
         },
         editUnit(type, unit, index) {
             if(type === 'add') {
@@ -359,4 +362,18 @@ export default {
 </script>
 
 <style lang="less">
+.edit-act .unit-box {
+    position: relative;
+
+    .ivu-icon-md-add-circle {
+        position: absolute;
+        top: 6px;
+        right: 0;
+    }
+
+    .ivu-icon {
+        margin-left: 10px;
+        cursor: pointer;
+    }
+}
 </style>

+ 52 - 28
TEAMModelOS/ClientApp/src/view/signupActivity/infoComponent/editContest.vue

@@ -9,13 +9,13 @@
                 </span>
             </FormItem>
             <FormItem label="报名时间" prop="signEtime">
-                <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="data => getCreateTime(data, 0)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="(data, type) => getCreateTime(data, type, 0)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
             </FormItem>
         </Form>
         <template v-if="conModules.includes('upload')">
             <Form :model="uploadInfo" :label-width="80" ref="uploadInfo" :rules="editDataRule">
                 <FormItem label="上传时间" prop="uploadEtime">
-                    <DatePicker v-model="actAllTime[1]" ref="workPicker" :editable="false" @on-change="data => getCreateTime(data, 1)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                    <DatePicker v-model="actAllTime[1]" ref="workPicker" :editable="false" @on-change="(data, type) => getCreateTime(data, type, 1)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                 </FormItem>
                 <FormItem label="文件类型" v-if="uploadInfo?.fileType" prop="fileType">
                     <div class="tab-check">
@@ -39,14 +39,14 @@
         <template v-if="conModules.includes('review')">
             <Form :model="reviewInfo" :label-width="80" ref="reviewInfo" :rules="editDataRule">
                 <FormItem label="评审时间" prop="reviewEtime">
-                    <DatePicker v-model="actAllTime[2]" ref="reviewPicker" :editable="false" @on-change="data => getCreateTime(data, 2)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                    <DatePicker v-model="actAllTime[2]" ref="reviewPicker" :editable="false" @on-change="(data, type) => getCreateTime(data, type, 2)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                 </FormItem>
             </Form>
         </template>
         <template v-if="conModules.includes('score')">
             <Form :model="scoreInfo" :label-width="80" ref="scoreInfo" :rules="editDataRule">
                 <FormItem label="公示时间" prop="scoreEtime">
-                    <DatePicker v-model="actAllTime[3]" ref="scorePicker" :editable="false" @on-change="data => getCreateTime(data, 3)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
+                    <DatePicker v-model="actAllTime[3]" ref="scorePicker" :editable="false" @on-change="(data, type) => getCreateTime(data, type, 3)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                 </FormItem>
             </Form>
         </template>
@@ -152,8 +152,8 @@ export default {
                         limit: this.contestInfo.sign.limit,
                     }
                     this.actAllTime = [[], [], [], []]
-                    this.actAllTime[0].push(this.$tools.formatTime(this.contestInfo.sign.stime, 'yyyy-MM-dd hh:mm'))
-                    this.actAllTime[0].push(this.$tools.formatTime(this.contestInfo.sign.etime, 'yyyy-MM-dd hh:mm'))
+                    this.actAllTime[0].push(this.$tools.formatTime(this.contestInfo.sign.stime, 'yyyy-MM-dd hh:mm:ss'))
+                    this.actAllTime[0].push(this.$tools.formatTime(this.contestInfo.sign.etime, 'yyyy-MM-dd hh:mm:ss'))
                     if(this.contestInfo.modules.includes('upload')) {
                         this.uploadInfo = {
                             uploadStime: this.contestInfo.upload.stime,
@@ -175,24 +175,24 @@ export default {
                                 return item
                             })
                         }
-                        this.actAllTime[1].push(this.$tools.formatTime(this.contestInfo.upload.stime, 'yyyy-MM-dd hh:mm'))
-                        this.actAllTime[1].push(this.$tools.formatTime(this.contestInfo.upload.etime, 'yyyy-MM-dd hh:mm'))
+                        this.actAllTime[1].push(this.$tools.formatTime(this.contestInfo.upload.stime, 'yyyy-MM-dd hh:mm:ss'))
+                        this.actAllTime[1].push(this.$tools.formatTime(this.contestInfo.upload.etime, 'yyyy-MM-dd hh:mm:ss'))
                     }
                     if(this.contestInfo.modules.includes('review')) {
                         this.reviewInfo = {
                             reviewStime: this.contestInfo.review.stime,
                             reviewEtime: this.contestInfo.review.etime
                         }
-                        this.actAllTime[2].push(this.$tools.formatTime(this.contestInfo.review.stime, 'yyyy-MM-dd hh:mm'))
-                        this.actAllTime[2].push(this.$tools.formatTime(this.contestInfo.review.etime, 'yyyy-MM-dd hh:mm'))
+                        this.actAllTime[2].push(this.$tools.formatTime(this.contestInfo.review.stime, 'yyyy-MM-dd hh:mm:ss'))
+                        this.actAllTime[2].push(this.$tools.formatTime(this.contestInfo.review.etime, 'yyyy-MM-dd hh:mm:ss'))
                     }
                     if(this.contestInfo.modules.includes('score')) {
                         this.scoreInfo = {
                             scoreStime: this.contestInfo.score.stime,
                             scoreEtime: this.contestInfo.score.etime
                         }
-                        this.actAllTime[3].push(this.$tools.formatTime(this.contestInfo.score.stime, 'yyyy-MM-dd hh:mm'))
-                        this.actAllTime[3].push(this.$tools.formatTime(this.contestInfo.score.etime, 'yyyy-MM-dd hh:mm'))
+                        this.actAllTime[3].push(this.$tools.formatTime(this.contestInfo.score.stime, 'yyyy-MM-dd hh:mm:ss'))
+                        this.actAllTime[3].push(this.$tools.formatTime(this.contestInfo.score.etime, 'yyyy-MM-dd hh:mm:ss'))
                     }
                     // 处理时间显示
                     let that = this
@@ -214,31 +214,45 @@ export default {
         },
     },
     methods: {
-        getCreateTime(data, index) {
-            console.log(data);
+        getCreateTime(data, type, index) {
             let times = data.filter(item => {
                 return item
             })
+            // 没有选择结束的时分秒,需将结束时间默认为 23:59:59
+            if(times.length > 1 && times[1].slice(-8) === '00:00:00' && type === 'date') {
+                times[1] = times[1].slice(0, -8) + '23:59:59'
+            }
+            console.log('1fergfewf5', times, type);
             switch (index) {
                 case 0:
                     this.signInfo.signStime = times.length > 1 ? (new Date(times[0])).getTime() : null
                     this.signInfo.signEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
                     this.actAllTime = [[], [], [], []]
                     this.actAllTime[0] = times
+                    this.uploadInfo.uploadStime = null
+                    this.uploadInfo.uploadEtime = null
+                    this.reviewInfo.reviewStime = null
+                    this.reviewInfo.reviewEtime = null
+                    this.scoreInfo.scoreStime = null
+                    this.scoreInfo.scoreEtime = null
                     break
                 case 1:
                     if(times.length > 1 && !this.signInfo.signEtime) {
                         // this.$refs.workPicker.handleClear()
                         this.$Message.warning('请先设置报名时间')
                         this.actAllTime.splice(1, 1, [])
-                    }
-                    if(times.length > 1 && (new Date(times[1])).getTime() < this.signInfo.signEtime) {
+                        this.uploadInfo.uploadStime = null
+                        this.uploadInfo.uploadEtime = null
+                    } else if(times.length > 1 && (new Date(times[1])).getTime() < this.signInfo.signEtime) {
                         this.$Message.warning('上传结束时间不能早于报名时间')
                         this.actAllTime.splice(1, 1, [])
+                        this.uploadInfo.uploadStime = null
+                        this.uploadInfo.uploadEtime = null
+                    } else if(times.length > 1) {
+                        this.uploadInfo.uploadStime = times.length > 1 ? (new Date(times[0])).getTime() : null
+                        this.uploadInfo.uploadEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
+                        this.actAllTime[1] = times
                     }
-                    this.uploadInfo.uploadStime = times.length > 1 ? (new Date(times[0])).getTime() : null
-                    this.uploadInfo.uploadEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
-                    
                     this.actAllTime.splice(2, 1, [])
                     this.actAllTime.splice(3, 1, [])
                     break
@@ -246,26 +260,36 @@ export default {
                     if(times.length > 1 && (!this.signInfo.signEtime || !this.uploadInfo.uploadEtime)) {
                         this.$Message.warning('请先设置报名时间、上传时间')
                         this.actAllTime.splice(2, 1, [])
-                    }
-                    if(times.length > 1 && (new Date(times[0])).getTime() < this.signInfo.signEtime || (new Date(times[0])).getTime() < this.uploadInfo.uploadEtime) {
+                        this.reviewInfo.reviewStime = null
+                        this.reviewInfo.reviewEtime = null
+                    } else if(times.length > 1 && (new Date(times[0])).getTime() < this.signInfo.signEtime || (new Date(times[0])).getTime() < this.uploadInfo.uploadEtime) {
                         this.$Message.warning('评审必须在报名、上传结束后进行')
                         this.actAllTime.splice(2, 1, [])
+                        this.reviewInfo.reviewStime = null
+                        this.reviewInfo.reviewEtime = null
+                    } else if(times.length > 1) {
+                        this.reviewInfo.reviewStime = times.length > 1 ? (new Date(times[0])).getTime() : null
+                        this.reviewInfo.reviewEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
+                        this.actAllTime[2] = times
                     }
-                    this.reviewInfo.reviewStime = times.length > 1 ? (new Date(times[0])).getTime() : null
-                    this.reviewInfo.reviewEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
                     this.actAllTime.splice(3, 1, [])
                     break
                 case 3:
                     if(times.length > 1 && !this.reviewInfo.reviewEtime) {
                         this.$Message.warning('请先设置评审时间')
                         this.actAllTime.splice(3, 1, [])
-                    }
-                    if(times.length > 1 && (new Date(times[0])).getTime() < this.reviewInfo.reviewEtime) {
+                        this.scoreInfo.scoreStime = null
+                        this.scoreInfo.scoreEtime = null
+                    } else if(times.length > 1 && (new Date(times[0])).getTime() < this.reviewInfo.reviewEtime) {
                         this.$Message.warning('公示必须在评审结束后进行')
                         this.actAllTime.splice(3, 1, [])
+                        this.scoreInfo.scoreStime = null
+                        this.scoreInfo.scoreEtime = null
+                    } else if(times.length > 1) {
+                        this.scoreInfo.scoreStime = times.length > 1 ? (new Date(times[0])).getTime() : null
+                        this.scoreInfo.scoreEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
+                        this.actAllTime.splice(3, 1, times)
                     }
-                    this.scoreInfo.scoreStime = times.length > 1 ? (new Date(times[0])).getTime() : null
-                    this.scoreInfo.scoreEtime = times.length > 1 ? (new Date(times[1])).getTime() : null
                     break
                 default:
                     break
@@ -338,7 +362,7 @@ export default {
             this.$api.areaActivity.manageAct(params).then(res => {
                 if(res.code === 200) {
                     this.$Message.success("保存成功")
-                    this.$emit('saveContest', res?.activity)
+                    this.$emit('saveContest', res?.contest)
                 } else {
                     this.$Message.warning("保存失败")
                 }

+ 146 - 9
TEAMModelOS/ClientApp/src/view/signupActivity/infoComponent/ruleDrawer.vue

@@ -1,10 +1,16 @@
 <template>
     <div>
         <template v-if="ruleInfo">
-            <div v-if="!ruleDrawerAdd" class="see-rule">
+            <p style="float: right;" v-if="needEdit" v-show="!ruleType">
+                <Button type="primary" size="small" @click="ruleType = 1">编辑</Button>
+            </p>
+            <div v-if="!ruleType" class="see-rule">
                 <p style="font-size: 18px; font-weight: bold;">{{ ruleInfo.name }}</p>
-                <p style="margin: 5px 0 10px 0;">描述:{{ ruleInfo.desc }}</p>
-                <!-- <p style="margin: 5px 0;">总分:{{ ruleInfo.score }}</p> -->
+                <p style="margin: 5px 0 10px 0;">规则描述:{{ ruleInfo.desc }}</p>
+                <p style="margin: 5px 0 10px 0;">评审方式:{{ ruleInfo.scoreDetail ? '对细项评分' : '只打总分' }}</p>
+                <p style="margin: 5px 0 10px 0;">评审次数:{{ ruleInfo.taskCount }}</p>
+                <p style="margin: 5px 0 10px 0;">统分规则:{{ scoreWord[ruleInfo.scoreRule] }}</p>
+                <p style="margin: 5px 0 10px 0;">作品分配:{{ distributeWord[ruleInfo.distribute] }}</p>
                 <div class="create-form">
                     <div class="rule-header">
                         <span>分项</span>
@@ -30,6 +36,33 @@
                     <FormItem label="规则描述">
                         <Input v-special-char v-model="ruleInfo.desc" placeholder="请输入规则描述" />
                     </FormItem>
+                    <FormItem label="评审方式">
+                        <RadioGroup v-model="ruleInfo.scoreDetail">
+                            <Radio :label="0">
+                                <span>只打总分</span>
+                            </Radio>
+                            <Radio :label="1">
+                                <span>对细项评分</span>
+                            </Radio>
+                        </RadioGroup>
+                    </FormItem>
+                    <FormItem label="评审次数">
+                        <InputNumber v-model="ruleInfo.taskCount" :min="1" :precision="0" />
+                    </FormItem>
+                    <FormItem label="统分规则">
+                        <Select v-model="ruleInfo.scoreRule">
+                            <Option v-for="item in scoreRuleList" :value="item.value" :key="item.value" :disabled="item.disabled">{{ item.label }}</Option>
+                        </Select>
+                    </FormItem>
+                    <FormItem label="作品分配">
+                        <Select v-model="ruleInfo.distribute">
+                            <Option v-for="item in distributeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
+                        </Select>
+                        <span>
+                            <Icon type="md-alert" color="#ffad16" size="17" />
+                            填报信息的学段、学科需与专家信息一致才能匹配成功
+                        </span>
+                    </FormItem>
                     <!-- <FormItem label="规则分值">
                         <Input v-model="ruleInfo.score" placeholder="请输入分值" />
                     </FormItem> -->
@@ -57,7 +90,7 @@
                     <Button type="info" @click="addRule()">添加分项</Button>
                 </div>
                 <!-- 创建时 -->
-                <div v-show="ruleDrawerAdd === 2" style="margin: 10px 0; display: flex; justify-content: space-between;">
+                <div v-show="ruleType === 2" style="margin: 10px 0; display: flex; justify-content: space-between;">
                     <Button type="primary" @click="save('once')">仅本次活动使用</Button>
                     <div style="text-align: center;">
                         <Button type="primary" @click="save('mould')">保存为模板</Button>
@@ -68,8 +101,9 @@
                     </div>
                 </div>
                 <!-- 编辑时 -->
-                <div v-show="ruleDrawerAdd === 1">
+                <div v-show="ruleType === 1">
                     <Button type="primary" @click="saveEdit()">保存</Button>
+                    <Button @click="cancelEdit()" style="margin-left: 10px;">取消</Button>
                 </div>
             </template>
         </template>
@@ -91,22 +125,63 @@ export default {
                 return undefined
             }
         },
+        needEdit: {
+            type: Boolean,
+            default: false,
+        },
     },
     data () {
         return {
             ruleInfo: undefined,
+            ruleType: -1,
+            scoreRuleList: [],
+            scoreWord: {
+                only: '按评审分数',
+                avg: '按平均分',
+                top: '按最高分',
+                rmLowAvg: '去掉最低分的平均分',
+                rmTopAvg: '去掉最高分的平均分',
+                rmLowTopAvg: '去掉最高分和最低分的平均分',
+            },
+            distributeList: [],
+            distributeWord: {
+                none: '不需要匹配',
+                period: '只匹配学段',
+                subject: '只匹配学科',
+                periodAndSubject: '同时匹配学科和学段',
+            },
         }
     },
     created () {
+        this.ruleType = this.ruleDrawerAdd
         this.ruleInfo = this.ruleDrawerAdd === 2 && !this.ruleInfoParent?.id ? {
             name: '',
             desc: null,
+            scoreDetail: 0,
+            taskCount: 1,
+            scoreRule: 'only',
+            distribute: 'none',
             owner: this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
             sourceName: this.ruleInfoParent?.name,
             upsertAsTemplate: 0, //是否存为模板 0否  1是
             trees: this.dataRuleMould,
             isAdd: true, //判断是否为新增
-        } : this.ruleInfoParent
+        } : this._.cloneDeep(this.ruleInfoParent)
+        this.scoreRuleList = [
+            {label: '按评审分数', value: 'only', disabled: false },
+            {label: '按平均分', value: 'avg', disabled: true },
+            {label: '按最高分', value: 'top', disabled: true },
+            {label: '去掉最低分的平均分', value: 'rmLowAvg', disabled: true},
+            {label: '去掉最高分的平均分', value: 'rmTopAvg', disabled: true},
+            {label: '去掉最高分和最低分的平均分', value: 'rmLowTopAvg', disabled: true},
+        ]
+        this.distributeList = [
+            {label: '不需要匹配', value: 'none'},
+            {label: '只匹配学段', value: 'period'},
+            {label: '只匹配学科', value: 'subject'},
+            {label: '同时匹配学科和学段', value: 'periodAndSubject'},
+        ]
+        console.log('fregege64', this.ruleType);
     },
     watch: {
         ruleDrawerAdd: {
@@ -115,12 +190,17 @@ export default {
                 this.ruleInfo = n === 2 && !this.ruleInfoParent?.id ? {
                     name: '',
                     desc: null,
+                    scoreDetail: 0,
+                    taskCount: 1,
+                    scoreRule: 'only',
+                    distribute: 'none',
                     owner: this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
                     sourceName: this.ruleInfoParent?.name,
                     upsertAsTemplate: 0, //是否存为模板 0否  1是
                     trees: this.dataRuleMould,
                     isAdd: true, //判断是否为新增
-                } : this.ruleInfoParent
+                } : this._.cloneDeep(this.ruleInfoParent)
+                this.ruleType = n
             },
         },
         ruleInfoParent: {
@@ -129,15 +209,40 @@ export default {
                 this.ruleInfo = this.ruleDrawerAdd === 2 && !n?.id ? {
                     name: '',
                     desc: null,
+                    scoreDetail: 0,
+                    taskCount: 1,
+                    scoreRule: 'only',
+                    distribute: 'none',
                     owner: this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
                     sourceName: this.ruleInfoParent?.name,
                     upsertAsTemplate: 0, //是否存为模板 0否  1是
                     trees: this.dataRuleMould,
                     isAdd: true, //判断是否为新增
-                } : n
+                } : this._.cloneDeep(n)
             },
             deep: true,
         },
+        "ruleInfo.taskCount": {
+            handler(n, o) {
+                this.scoreRuleList = this.scoreRuleList.map(item => {
+                    if(n === 1) {
+                        item.disabled = item.value != 'only'
+                    } else if(n === 2) {
+                        item.disabled = item.value === 'only' || item.value === 'rmLowAvg' || item.value === 'rmTopAvg' || item.value === 'rmLowTopAvg'
+                    } else if(n === 3) {
+                        item.disabled = item.value === 'only' || item.value === 'rmLowTopAvg'
+                    } else {
+                        item.disabled = item.value === 'only'
+                    }
+                    return item
+                })
+                if(n === 1) {
+                    this.ruleInfo.scoreRule = 'only'
+                } else if(n < 4) {
+                    this.ruleInfo.scoreRule = 'avg'
+                }
+            },
+        },
     },
     computed: {
         isArea() {
@@ -248,7 +353,39 @@ export default {
         },
         // 编辑完成后保存
         saveEdit() {
-            this.$emit('saveRule', {info: this.ruleInfo, isEdit: true})
+            if(this.needEdit) {
+                let params = {
+                    grant_type: 'rule-update',
+                    reviewConfig: this.ruleInfo
+                }
+                this.$api.areaActivity.manageAct(params).then(res => {
+                    if(res?.reviewRule) {
+                        this.ruleType = this.ruleDrawerAdd
+                        this.$emit('saveRule', {info: res?.reviewRule, isEdit: true})
+                        this.$Message.success('编辑成功')
+                    } else if(res.code === 25 || res.code === 26 || res.code === 27) {
+                        this.$Message.warning('填报信息未配置学段、学科,无法进行作品分配!')
+                    } else {
+                        this.$Message.warning('编辑失败')
+                    }
+                })
+            }
+        },
+        cancelEdit() {
+            this.ruleInfo = this.ruleDrawerAdd === 2 && !this.ruleInfoParent?.id ? {
+                name: '',
+                desc: null,
+                scoreDetail: 0,
+                taskCount: 1,
+                scoreRule: 'only',
+                distribute: 'none',
+                owner: this.isArea ? this.areaId : this.$store.state.userInfo.schoolCode,
+                sourceName: this.ruleInfoParent?.name,
+                upsertAsTemplate: 0, //是否存为模板 0否  1是
+                trees: this.dataRuleMould,
+                isAdd: true, //判断是否为新增
+            } : this._.cloneDeep(this.ruleInfoParent)
+            this.ruleType = this.ruleDrawerAdd
         },
     },
 }

+ 6 - 14
TEAMModelOS/ClientApp/src/view/signupActivity/infoComponent/skContent.vue

@@ -128,7 +128,7 @@
             </div>
         </template>
         <Drawer title="评审规则" :width="50" v-model="ruleDrawer">
-            <RuleDrawer :ruleDrawerAdd="0" :ruleInfoParent="ruleInfo" @saveRule="saveRule" />
+            <RuleDrawer :ruleDrawerAdd="0" :ruleInfoParent="ruleInfo" @saveRule="saveRule" :needEdit="true" />
         </Drawer>
         <Drawer title="教师报名信息" :width="25" v-model="teaDrawer">
             <Form :model="teaSignInfo" :label-width="80">
@@ -288,7 +288,6 @@ export default {
             ],
             applicationList: [],
             processShow: false,
-            isTmd: false,
             workPro: false,
             ruleDrawer: false,
             processColumns: [
@@ -620,8 +619,8 @@ export default {
             this.$api.areaActivity.manageAct(params).then(res => {
                 if(res.code === 200) {
                     let lists = res?.inviteEnrollTeachers.map(item => {
-                        item.joinTime = item.signContestTime ? this.$tools.formatTime(item.signContestTime, 'yyyy-MM-dd') : '-'
-                        item.uploadTime = item.uploadContestTime ? this.$tools.formatTime(item.uploadContestTime, 'yyyy-MM-dd') : '-'
+                        item.joinTime = item.signContestTime ? this.$tools.formatTime(item.signContestTime, 'yyyy-MM-dd hh:mm:ss') : '-'
+                        item.uploadTime = item.uploadContestTime ? this.$tools.formatTime(item.uploadContestTime, 'yyyy-MM-dd hh:mm:ss') : '-'
                         item.teamNameContest = item.teamNameContest || '-'
                         return item
                     })
@@ -665,11 +664,9 @@ export default {
         },
         saveRule(data) {
             let {info, isEdit} = data
-            /* if(isEdit) {
-                this.reviewList[this.reviewSel] = info
-            } else {
-                this.reviewList.push(info)
-            } */
+            if(isEdit) {
+                this.$parent.ruleInfo = info
+            }
             this.ruleDrawer = false
         },
         getTeaInfo(data) {
@@ -762,11 +759,6 @@ export default {
                 label: this.addAwardWord
             })
         },
-        searchPro(value) {
-            this.isSearch = true
-            console.log(value);
-            this.isTmd = value === '111'
-        },
     }
 }
 </script>

+ 80 - 24
TEAMModelOS/ClientApp/src/view/signupActivity/infoGoing.vue

@@ -14,7 +14,7 @@
                     {{ actInfo.name }}
                 </p>
                 <div class="btn-box" v-show="isArea || actInfo.scope === 'school'">
-                    <Button type="primary" size="small" @click="editModal = true" style="margin-right: 10px;">编辑</Button>
+                    <Button type="primary" size="small" @click="editArtModal = true" style="margin-right: 10px;">编辑</Button>
                     <Button type="warning" size="small" @click="delAct()">删除</Button>
                 </div>
                 <!-- <div class="btn-box">
@@ -49,11 +49,8 @@
                                 <span v-else>
                                     所有学校
                                 </span>
-                            </p>
-                            <p v-else-if="actInfo.scope === 'school'">
-                                老师:
-                                <span>
-                                    <span v-for="item in inviteTeachers" :key="item.id" style="margin-right: 10px;">{{ item.name }}</span>
+                                <span v-if="actInfo.invitedSchools.length">
+                                    <Icon type="md-add-circle" size="16" color="green" style="cursor: pointer;" @click="addSchoolModal = true" />
                                 </span>
                             </p>
                             <p>免责声明:{{ actInfo.mzsm || '-' }}</p>
@@ -136,6 +133,18 @@
                 <editContest :actInfo="actInfo" :contestInfo="contestInfo" :editModal="editConModal" @saveInfo="saveContest"></editContest>
             </vuescroll>
         </Modal>
+        <Modal v-model="addSchoolModal" title="添加学校" width="40" :footer-hide="true">
+            <Form>
+                <FormItem label="学校" v-show="isArea">
+                    <Select v-model="selSchools" multiple filterable>
+                        <Option :value="item.id" v-for="(item) in showSchools" :key="item.id" :disabled="item.disabled">
+                            {{ item.name }}
+                        </Option>
+                    </Select>
+                </FormItem>
+                <Button type="success" long @click="saveSchool()">保存</Button>
+            </Form>
+        </Modal>
     </div>
 </template>
 
@@ -207,7 +216,10 @@ export default {
             schoolList: [],
             editArtModal: false,
             editConModal: false,
+            addSchoolModal: false,
             actInfo: undefined,
+            selSchools: [],
+            showSchools: [],
         }
     },
     created () {
@@ -242,16 +254,45 @@ export default {
             this.$api.areaActivity.manageAct(params).then(res => {
                 if(res.code === 200) {
                     res.contest.modules.forEach(item => {
-                        res.contest[item].startTime = this.$tools.formatTime(res.contest[item].stime, 'yyyy-MM-dd')
-                        res.contest[item].endTime = this.$tools.formatTime(res.contest[item].etime, 'yyyy-MM-dd')
+                        res.contest[item].startTime = this.$tools.formatTime(res.contest[item].stime, 'yyyy-MM-dd hh:mm:ss')
+                        res.contest[item].endTime = this.$tools.formatTime(res.contest[item].etime, 'yyyy-MM-dd hh:mm:ss')
                     })
                     this.contestInfo = res.contest
                     this.ruleInfo = res.reviewRule
+                    if(this.actInfo.scope != 'school' && this.actInfo.invitedSchools.length) {
+                        this.getSchoolList()
+                    }
                 }
             }).finally(() => {
                 this.isLoading = false
             })
         },
+        // 获取学校列表
+        getSchoolList() {
+            if(this.isArea) {
+                // 醍摩豆学区可以查看所有学校,scope: pubilc
+                let params = {
+                    grant_type: 'schools',
+                    scope: this.actInfo.scope,
+                    areaId: this.actInfo.owner
+                }
+                this.$api.areaActivity.inviteTarget(params).then(res => {
+                    if(res.code === 200) {
+                        this.showSchools = res.schools.map(item => {
+                            let info = {
+                                id: item.id,
+                                name: item.name,
+                                picture: item.picture
+                            }
+                            if(this.actInfo.invitedSchools.find(sch => sch.id === item.id)) {
+                                info.disabled = true
+                            }
+                            return info
+                        })
+                    }
+                })
+            }
+        },
         getInviteTea() {
             let params = {
                 grant_type: 'invited-teachers',
@@ -322,8 +363,8 @@ export default {
         saveInfo(info) {
             let sas = this.actInfo.sas
             this.actInfo = info
-            this.actInfo.startTime = this.$tools.formatTime(this.actInfo.stime, 'yyyy-MM-dd')
-            this.actInfo.endTime = this.$tools.formatTime(this.actInfo.etime, 'yyyy-MM-dd')
+            this.actInfo.startTime = this.$tools.formatTime(this.actInfo.stime, 'yyyy-MM-dd hh:mm:ss')
+            this.actInfo.endTime = this.$tools.formatTime(this.actInfo.etime, 'yyyy-MM-dd hh:mm:ss')
             this.actInfo.sas = sas
             this.actInfo.poster = !info.poster ? require('@/assets/image/no-poster-cn1.png') : `${info.poster}?${sas}`
             this.actInfo.attachment.forEach(attach => {
@@ -331,24 +372,39 @@ export default {
                     attach.url = `${attach.url}?${sas}`
                 }
             })
-            this.editModal = false
+            this.editArtModal = false
         },
         saveContest(info) {
-            /* this.contestInfo.sign.stime = info.signStime
-            this.contestInfo.sign.stime = info.signEtime
-            this.contestInfo.sign.startTime = this.$tools.formatTime(info.signStime, 'yyyy-MM-dd')
-            this.contestInfo.sign.endTime = this.$tools.formatTime(info.signEtime, 'yyyy-MM-dd')
-            this.contestInfo.sign.limit = info.limit
-            this.contestInfo.sign.stime = info.signStime
-            this.contestInfo.sign.stime = info.signEtime
-            this.contestInfo.sign.startTime = this.$tools.formatTime(info.signStime, 'yyyy-MM-dd')
-            this.contestInfo.sign.endTime = this.$tools.formatTime(info.signEtime, 'yyyy-MM-dd')
-            this.contestInfo.sign.stime = info.signStime
-            this.contestInfo.sign.stime = info.signEtime
-            this.contestInfo.sign.startTime = this.$tools.formatTime(info.signStime, 'yyyy-MM-dd')
-            this.contestInfo.sign.endTime = this.$tools.formatTime(info.signEtime, 'yyyy-MM-dd') */
+            info.contest.modules.forEach(item => {
+                info.contest[item].startTime = this.$tools.formatTime(info.contest[item].stime, 'yyyy-MM-dd hh:mm:ss')
+                info.contest[item].endTime = this.$tools.formatTime(info.contest[item].etime, 'yyyy-MM-dd hh:mm:ss')
+            })
+            console.log(111111111);
+            this.contestInfo = info
             this.editConModal = false
         },
+        saveSchool() {
+            if(!this.selSchools.length) {
+                this.$Message.warning('请先选择学校')
+                return
+            }
+            let params = {
+                grant_type: 'invite-remove-school',
+                activityId: this.actInfo.id,
+                invitedSchools: [],
+            }
+            this.showSchools.forEach(item => {
+                if(this.selSchools.includes(item.id)) {
+                    params.invitedSchools.push(item)
+                }
+            })
+            this.$api.areaActivity.manageAct(params).then(res => {
+                if(res.code === 200) {
+                    this.actInfo.invitedSchools = this.actInfo.invitedSchools.concat(params.invitedSchools)
+                    this.addSchoolModal = false
+                }
+            })
+        },
     }
 }
 </script>

+ 2 - 2
TEAMModelOS/ClientApp/src/view/signupActivity/infoReleased.vue

@@ -227,8 +227,8 @@ export default {
             this.$api.areaActivity.manageAct(params).then(res => {
                 if(res.code === 200) {
                     res.contest.modules.forEach(item => {
-                        res.contest[item].startTime = this.$tools.formatTime(res.contest[item].stime, 'yyyy-MM-dd')
-                        res.contest[item].endTime = this.$tools.formatTime(res.contest[item].etime, 'yyyy-MM-dd')
+                        res.contest[item].startTime = this.$tools.formatTime(res.contest[item].stime, 'yyyy-MM-dd hh:mm:ss')
+                        res.contest[item].endTime = this.$tools.formatTime(res.contest[item].etime, 'yyyy-MM-dd hh:mm:ss')
                     })
                     
                     this.contestInfo = res.contest

+ 2 - 2
TEAMModelOS/ClientApp/src/view/signupActivity/processActivity.vue

@@ -104,8 +104,8 @@ export default {
                         sasData.sas = this.$store.state.user.schoolProfile.blob_sas
                     } */
                     this.activityList = res.activities.map(item => {
-                        item.startTime = this.$tools.formatTime(item.stime, 'yyyy-MM-dd')
-                        item.endTime = this.$tools.formatTime(item.etime, 'yyyy-MM-dd')
+                        item.startTime = this.$tools.formatTime(item.stime, 'yyyy-MM-dd hh:mm:ss')
+                        item.endTime = this.$tools.formatTime(item.etime, 'yyyy-MM-dd hh:mm:ss')
                         item.poster = !item.poster ? require('@/assets/image/no-poster-cn1.png') : `${item.poster}?${item.sas}`
                         item.attachment.forEach(attach => {
                             if(attach) {

+ 6 - 2
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -388,7 +388,7 @@ namespace TEAMModelOS.Controllers
                                 bool checkReviewStime = false;
                                 long now = DateTimeOffset.Now.ToUnixTimeMilliseconds();
                                 //需要检查评审时间
-                                if (contest.modules.Contains("review") && contest.review!= null  && now>contest.review.stime)
+                                if (contest.modules.Contains("review") && contest.review!= null  && now<contest.review.stime)
                                 {
                                     checkReviewStime = true;
                                 }
@@ -920,7 +920,11 @@ namespace TEAMModelOS.Controllers
                                             owner= reviewRuleDB.owner,
                                             sourceName= reviewRuleDB.sourceName,
                                             trees=tree,
-                                            desc=reviewRuleDB.desc
+                                            desc=reviewRuleDB.desc,
+                                            distribute=reviewRuleDB.distribute,
+                                            taskCount=reviewRuleDB.taskCount,
+                                            scoreDetail=reviewRuleDB.scoreDetail,
+                                            scoreRule=reviewRuleDB.scoreRule,
                                         };
                                     }
                                 }