Переглянути джерело

各个时间互斥重新判断

XW 1 рік тому
батько
коміт
5d3bbaa9d5

+ 50 - 32
TEAMModelOS/ClientApp/src/view/signupActivity/createActivity.vue

@@ -31,7 +31,7 @@
                                 <Input v-special-char v-model="createData.address" :placeholder="$t('activity.placeholder.field3')" />
                             </FormItem>
                             <FormItem :label="$t('ability.video.time')" prop="stime">
-                                <DatePicker :value="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>
+                                <DatePicker :value="actAllTime[0]" :editable="false" @on-open-change="(type) => dateOpenChange(type, 0)" @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="$t('activity.host')" class="unit-box">
                                 <div v-for="(item, index) in createData.zb" :key="index">
@@ -135,7 +135,7 @@
                                             <div>
                                                 <Form ref="contestData" :model="contestData.sign" :rules="contestRule" :label-width="80">
                                                     <FormItem :label="$t('activity.timeList.enroll')" prop="stime">
-                                                        <DatePicker :value="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>
+                                                        <DatePicker :value="actAllTime[1]" :editable="false" :options="beforeAct" @on-open-change="(type) => dateOpenChange(type, 1)" @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="$t('activity.enrollNum')">
                                                         <InputNumber :min="0" v-model="contestData.sign.limit" />
@@ -173,7 +173,7 @@
                                             <div v-show="skWork">
                                                 <Form ref="contestUpload" :model="contestUpload" :rules="contestRuleUpload" :label-width="80">
                                                     <FormItem :label="$t('activity.timeList.upload')" prop="stime">
-                                                        <DatePicker :value="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>
+                                                        <DatePicker :value="actAllTime[2]" ref="workPicker" :editable="false" :options="beforeAct" @on-open-change="(type) => dateOpenChange(type, 2)" @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="$t('activity.workType')">
                                                         <RadioGroup v-model="contestUpload.type">
@@ -221,7 +221,7 @@
                                                 <Form ref="contestReview" :model="contestReview" :rules="contestRuleReview" :label-width="80">
                                                     <FormItem :label="$t('activity.timeList.review')" prop="stime">
                                                         <DatePicker :value="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)">
+                                                            :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px" @on-open-change="(type) => dateOpenChange(type, 3)" @on-change="(date, type) => setActTime(date, type, 3)">
                                                         </DatePicker>
                                                     </FormItem>
                                                     <FormItem :label="$t('activity.reviewRule')" prop="rule">
@@ -248,7 +248,7 @@
                                             <div v-show="skPublic">
                                                 <Form ref="contestScore" :model="contestScore" :rules="contestRuleUpload" :label-width="80">
                                                     <FormItem :label="$t('activity.timeList.score')" prop="stime">
-                                                        <DatePicker :value="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>
+                                                        <DatePicker :value="actAllTime[4]" ref="scorePicker" :editable="false" :options="beforeAct" @on-open-change="(type) => dateOpenChange(type, 4)" @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>
@@ -1218,6 +1218,48 @@ export default {
         last() {
             this.current -= 1
         },
+        dateOpenChange(dateType, type) {
+            // 日历关闭时判断是否时间重叠
+            if(!dateType && this.actAllTime[type].length) {
+                switch (type) {
+                    case 2:
+                        if(!this.contestData.sign.etime) {
+                            // this.$refs.workPicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field16'))
+                            this.spliceTime(['upload'])
+                        } else if((new Date(this.actAllTime[2][1])).getTime() < this.contestData.sign.etime) {
+                            // this.$refs.workPicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field17'))
+                            this.spliceTime(['upload'])
+                        }
+                        break
+                    case 3:
+                        if((!this.contestData.sign.etime || !this.contestUpload.etime)) {
+                            // this.$refs.reviewPicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field18'))
+                            this.spliceTime(['review'])
+                        } else if(((new Date(this.actAllTime[3][0])).getTime() < this.contestData.sign.etime || (new Date(this.actAllTime[3][0])).getTime() < this.contestUpload.etime)) {
+                            // this.$refs.reviewPicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field19'))
+                            this.spliceTime(['review'])
+                        }
+                        break
+                    case 4:
+                        if(!this.contestReview.etime) {
+                            // this.$refs.scorePicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field20'))
+                            this.spliceTime(['score'])
+                        } else if((new Date(this.actAllTime[4][0])).getTime() < this.contestReview.etime) {
+                            // this.$refs.scorePicker[0].handleClear()
+                            this.$Message.warning(this.$t('activity.message.field21'))
+                            this.spliceTime(['score'])
+                        }
+                        break
+                    default:
+                        break
+                }
+            }
+        },
         setActTime(date, type, index) {
             let actTime = date.filter(item => {
                 return item
@@ -1240,15 +1282,7 @@ export default {
                     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.$t('activity.message.field16'))
-                        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.$t('activity.message.field17'))
-                        this.spliceTime(['upload'])
-                    } else if(actTime.length > 1) {
+                    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)
@@ -1256,15 +1290,7 @@ export default {
                     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.$t('activity.message.field18'))
-                        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.$t('activity.message.field19'))
-                        this.spliceTime(['review'])
-                    } else if(actTime.length > 1) {
+                    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)
@@ -1272,15 +1298,7 @@ export default {
                     this.spliceTime(['score'])
                     break
                 case 4:
-                    if(actTime.length > 1 && !this.contestReview.etime) {
-                        // this.$refs.scorePicker[0].handleClear()
-                        this.$Message.warning(this.$t('activity.message.field20'))
-                        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.$t('activity.message.field21'))
-                        this.spliceTime(['score'])
-                    } else if(actTime.length > 1) {
+                    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)

+ 66 - 45
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, 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>
+                <DatePicker v-model="actAllTime[0]" :editable="false" @on-open-change="(type) => dateOpenChange(type, 0)" @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, 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>
+                    <DatePicker v-model="actAllTime[1]" ref="workPicker" :editable="false" @on-open-change="(type) => dateOpenChange(type, 1)" @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, 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>
+                    <DatePicker v-model="actAllTime[2]" ref="reviewPicker" :editable="false" @on-open-change="(type) => dateOpenChange(type, 2)" @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, 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>
+                    <DatePicker v-model="actAllTime[3]" ref="scorePicker" :editable="false" @on-open-change="(type) => dateOpenChange(type, 3)" @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>
@@ -205,6 +205,42 @@ export default {
         },
     },
     methods: {
+        dateOpenChange(dateType, type) {
+            // 日历关闭时判断是否时间重叠
+            if(!dateType && this.actAllTime[type].length) {
+                switch (type) {
+                    case 1:
+                        if(!this.signInfo.signEtime) {
+                            this.$Message.warning('请先设置报名时间')
+                            this.spliceTime(['upload'])
+                        } else if((new Date(this.actAllTime[1][1])).getTime() < this.signInfo.signEtime) {
+                            this.$Message.warning('上传结束时间不能早于报名时间')
+                            this.spliceTime(['upload'])
+                        }
+                        break
+                    case 2:
+                        if(!this.signInfo.signEtime || !this.uploadInfo.uploadEtime) {
+                            this.$Message.warning('请先设置报名时间、上传时间')
+                            this.spliceTime(['review'])
+                        } else if((new Date(this.actAllTime[2][0])).getTime() < this.signInfo.signEtime || (new Date(this.actAllTime[2][0])).getTime() < this.uploadInfo.uploadEtime) {
+                            this.$Message.warning('评审必须在报名、上传结束后进行')
+                            this.spliceTime(['review'])
+                        }
+                        break
+                    case 3:
+                        if(!this.reviewInfo.reviewEtime) {
+                            this.$Message.warning('请先设置评审时间')
+                            this.spliceTime(['score'])
+                        } else if((new Date(this.actAllTime[3][0])).getTime() < this.reviewInfo.reviewEtime) {
+                            this.$Message.warning('公示必须在评审结束后进行')
+                            this.spliceTime(['score'])
+                        }
+                        break
+                    default:
+                        break
+                }
+            }
+        },
         getCreateTime(data, type, index) {
             let times = data.filter(item => {
                 return item
@@ -213,33 +249,16 @@ export default {
             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
+                    this.spliceTime(['upload', 'review', 'score'])
                     break
                 case 1:
-                    if(times.length > 1 && !this.signInfo.signEtime) {
-                        // this.$refs.workPicker.handleClear()
-                        this.$Message.warning('请先设置报名时间')
-                        this.actAllTime.splice(1, 1, [])
-                        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) {
+                    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
@@ -248,17 +267,7 @@ export default {
                     this.actAllTime.splice(3, 1, [])
                     break
                 case 2:
-                    if(times.length > 1 && (!this.signInfo.signEtime || !this.uploadInfo.uploadEtime)) {
-                        this.$Message.warning('请先设置报名时间、上传时间')
-                        this.actAllTime.splice(2, 1, [])
-                        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) {
+                    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
@@ -266,17 +275,7 @@ export default {
                     this.actAllTime.splice(3, 1, [])
                     break
                 case 3:
-                    if(times.length > 1 && !this.reviewInfo.reviewEtime) {
-                        this.$Message.warning('请先设置评审时间')
-                        this.actAllTime.splice(3, 1, [])
-                        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) {
+                    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)
@@ -286,6 +285,28 @@ export default {
                     break
             }
         },
+        spliceTime(type) {
+            if(type.includes('sign')) {
+                this.signInfo.signStime = null
+                this.signInfo.signEtime = null
+                this.actAllTime.splice(0, 1, [])
+            }
+            if(type.includes('upload')) {
+                this.uploadInfo.uploadStime = null
+                this.uploadInfo.uploadEtime = null
+                this.actAllTime.splice(1, 1, [])
+            }
+            if(type.includes('review')) {
+                this.reviewInfo.reviewStime = null
+                this.reviewInfo.reviewEtime = null
+                this.actAllTime.splice(2, 1, [])
+            }
+            if(type.includes('score')) {
+                this.scoreInfo.scoreStime = null
+                this.scoreInfo.scoreEtime = null
+                this.actAllTime.splice(3, 1, [])
+            }
+        },
         saveInfo() {
             let saving = true
             this.$refs['signInfo'].validate((valid) => {