@ -83,8 +83,16 @@
< / div >
< / div >
< div class = "right" >
< el -dropdown v-if ="item.playingStages && item.playingStages.length > 1" class="m-l-10" @command="e => chooseStage(e, item)" >
< el -button type = "primary" style = "background-color: #f96d6d;border: 0;" >
选择竞赛 < i class = "el-icon-arrow-down el-icon--right" > < / i >
< / e l - b u t t o n >
< el -dropdown -menu slot = "dropdown" >
< el -dropdown -item v-for ="(stage, i) in item.playingStages" :key="i" :command ="stage" > 进入 {{ stage.stageName }} < / el -dropdown -item >
< / e l - d r o p d o w n - m e n u >
< / e l - d r o p d o w n >
< p class = "status"
v - if = "item.status != 4 || (item.status == 4 && item.curStage)"
v - else - if = "item.status != 4 || (item.status == 4 && item.curStage)"
: class = "{wait: item.status == 0,signing: item.status == 2,signed: item.status == 1,playing: item.status == 4 && item.curStage,finish: item.status == 3 || item.status == 5}" : title = "item.status == 4 ? item.stageName : statusList[item.status]"
@ click . stop = "signup(item)" > { { item . status == 4 ? item . stageName : statusList [ item . status ] } } < / p >
< p class = "end-text" v-if ="item.end" >
@ -279,6 +287,7 @@ export default {
'SET_SOURCE'
] ) ,
getList ( ) {
this . clearTimer ( )
const { form } = this
const scope = form . competitionScope
const data = {
@ -312,16 +321,6 @@ export default {
this . listData = records
this . totals = data . total
this . handleStatus ( )
/ / 如 果 是 登 录 前 点 报 名 去 登 录 的 , 则 跳 转 到 该 赛 事 , t o M a t c h 存 的 是 点 击 的 赛 事 i d , 通 过 s c r o l l I n t o V i e w 去 跳 到 赛 事 的 位 置
const id = this . toMatch
if ( id ) {
this . $nextTick ( ( ) => {
this . SET _SOURCE ( '' )
const item = records . find ( e => e . id === id )
item && this . toDetail ( item )
} )
}
this . loadIns . close ( )
} ) . catch ( res => {
this . loadIns . close ( )
@ -330,82 +329,92 @@ export default {
/ / 定 时 处 理 时 间 及 状 态
handleStatus ( ) {
this . listData . map ( item => {
let total = ''
let time = ''
let status = ''
let signUpStartTime = new Date ( this . core . dateCompatible ( item . signUpStartTime ) ) / / 报 名 开 始 时 间
let signUpEndTime = new Date ( this . core . dateCompatible ( item . signUpEndTime ) ) / / 报 名 结 束 时 间
let playStartTime = new Date ( this . core . dateCompatible ( item . playStartTime ) ) / / 比 赛 开 始 时 间
let playEndTime = new Date ( this . core . dateCompatible ( item . playEndTime ) ) / / 比 赛 结 束 时 间
let timer = setInterval ( ( ) => {
const now = new Date ( )
if ( now < signUpStartTime ) { / / 报 名 没 开 始
status = 0
total = signUpStartTime - now
} else if ( now > signUpStartTime && now < signUpEndTime ) { / / 报 名 进 行 中
/ / w h e t h e r T o S i g n U p 0 已 报 名 , 1 未 报 名
status = item . whetherToSignUp === 0 ? 1 : 2 / / 1 已 报 名 , 2 立 即 报 名
total = signUpEndTime - now
} else if ( now > signUpEndTime && now < playStartTime ) { / / 报 名 结 束 了 , 但 比 赛 没 开 始
status = 3
total = playStartTime - now
} else if ( now > playStartTime && now < playEndTime ) { / / 比 赛 进 行 中
/ / 进 行 中 的 赛 事 , 则 遍 历 每 个 阶 段 的 开 始 结 束 时 间 , 看 阶 段 比 赛 是 否 开 始
let curStage = null
const stages = item . competitionStageList
if ( stages ) {
for ( const i in stages ) {
const e = stages [ i ]
const startTime = new Date ( e . startTime )
const endTime = new Date ( e . endTime )
if ( now < startTime ) { / / 阶 段 比 赛 未 开 始 , 不 显 示 进 入 比 赛 按 钮
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '阶段开始' )
total = startTime - now
break
} else if ( now >= startTime && now <= endTime ) { / / 阶 段 比 赛 进 行 中 , 显 示 进 入 比 赛 按 钮
if ( ( item . whetherToSignUp === 0 || ! util . local . get ( Setting . tokenKey ) ) && e . method !== 2 ) this . $set ( item , 'stageName' , e . count ? '已提交' : '进入' + e . stageName ) / / 报 名 了 并 且 没 参 加 比 赛 才 能 进 入 比 赛
this . $set ( item , 'endText' , '阶段结束' )
curStage = e
total = endTime - now
break
} else if ( stages [ i + 1 ] && now > endTime && now < new Date ( stages [ i + 1 ] . startTime ) ) { / / 过 了 该 阶 段 的 结 束 时 间 , 但 是 没 到 下 个 阶 段 的 开 始 时 间 , 不 显 示 进 入 比 赛 按 钮
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '阶段开始' )
total = new Date ( stages [ i + 1 ] . startTime ) - now
break
} else if ( i === stages . length - 1 ) { / / 当 前 时 间 在 比 赛 开 始 结 束 时 间 之 间 , 并 且 是 最 后 一 个 阶 段 结 束 时 间 之 后
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '竞赛结束' )
total = playEndTime - now
break
if ( item . signUpStartTime && item . signUpEndTime && item . playStartTime && item . playEndTime ) {
let total = ''
let time = ''
let status = ''
let signUpStartTime = new Date ( this . core . dateCompatible ( item . signUpStartTime ) ) / / 报 名 开 始 时 间
let signUpEndTime = new Date ( this . core . dateCompatible ( item . signUpEndTime ) ) / / 报 名 结 束 时 间
let playStartTime = new Date ( this . core . dateCompatible ( item . playStartTime ) ) / / 比 赛 开 始 时 间
let playEndTime = new Date ( this . core . dateCompatible ( item . playEndTime ) ) / / 比 赛 结 束 时 间
let timer = setInterval ( ( ) => {
const now = new Date ( )
if ( now < signUpStartTime ) { / / 报 名 没 开 始
status = 0
total = signUpStartTime - now
} else if ( now > signUpStartTime && now < signUpEndTime ) { / / 报 名 进 行 中
/ / w h e t h e r T o S i g n U p 0 已 报 名 , 1 未 报 名
status = item . whetherToSignUp === 0 ? 1 : 2 / / 1 已 报 名 , 2 立 即 报 名
total = signUpEndTime - now
} else if ( now > signUpEndTime && now < playStartTime ) { / / 报 名 结 束 了 , 但 比 赛 没 开 始
status = 3
total = playStartTime - now
} else if ( now > playStartTime && now < playEndTime ) { / / 比 赛 进 行 中
/ / 如 果 是 完 整 比 赛
if ( item . releaseType ) {
/ / 进 行 中 的 赛 事 , 则 遍 历 每 个 阶 段 的 开 始 结 束 时 间 , 看 阶 段 比 赛 是 否 开 始
let curStage = null
const stages = item . competitionStageList
if ( stages ) {
item . playingStages = [ ]
stages . forEach ( e => {
if ( now >= new Date ( e . startTime ) && now <= new Date ( e . endTime ) && e . method !== 2 ) item . playingStages . push ( e )
} )
for ( const i in stages ) {
const e = stages [ i ]
const startTime = new Date ( e . startTime )
const endTime = new Date ( e . endTime )
if ( now < startTime ) { / / 阶 段 比 赛 未 开 始 , 不 显 示 进 入 比 赛 按 钮
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '阶段开始' )
total = startTime - now
break
} else if ( now >= startTime && now <= endTime ) { / / 阶 段 比 赛 进 行 中 , 显 示 进 入 比 赛 按 钮
if ( ( item . whetherToSignUp === 0 || ! util . local . get ( Setting . tokenKey ) ) && e . method !== 2 ) this . $set ( item , 'stageName' , e . count ? '已提交' : '进入' + e . stageName ) / / 报 名 了 并 且 没 参 加 比 赛 才 能 进 入 比 赛
this . $set ( item , 'endText' , '阶段结束' )
curStage = e
total = endTime - now
break
} else if ( stages [ i + 1 ] && now > endTime && now < new Date ( stages [ i + 1 ] . startTime ) ) { / / 过 了 该 阶 段 的 结 束 时 间 , 但 是 没 到 下 个 阶 段 的 开 始 时 间 , 不 显 示 进 入 比 赛 按 钮
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '阶段开始' )
total = new Date ( stages [ i + 1 ] . startTime ) - now
break
} else if ( i === stages . length - 1 ) { / / 当 前 时 间 在 比 赛 开 始 结 束 时 间 之 间 , 并 且 是 最 后 一 个 阶 段 结 束 时 间 之 后
this . $set ( item , 'stageName' , '' )
this . $set ( item , 'endText' , '竞赛结束' )
total = playEndTime - now
break
}
}
}
item . curStage = curStage
} else { / / 仅 发 布 信 息
this . $set ( item , 'endText' , '竞赛结束' )
total = playEndTime - now
}
status = 4
} else if ( now > playEndTime ) { / / 比 赛 结 束
status = 5
}
item . curStage = curStage
status = 4
} else if ( now > playEndTime ) { / / 比 赛 结 束
status = 5
}
this . $set ( item , 'status' , status )
total = total / 1000
-- total
if ( total > 86400 ) { / / 超 过 一 天 则 显 示 天 数
clearInterval ( timer )
this . $set ( item , 'end' , Math . floor ( total / 86400 ) + '天' )
} else if ( total > 0 ) { / / 一 天 之 内 , 显 示 时 分 秒
let hours = Math . floor ( total / ( 60 * 60 ) )
let minutes = Math . floor ( total % ( 60 * 60 ) / 60 )
let seconds = Math . floor ( total % ( 60 * 60 ) % 60 )
time = ` ${ this . core . formateTime ( hours ) } : ${ this . core . formateTime ( minutes ) } : ${ this . core . formateTime ( seconds ) } `
if ( total > 0 ) this . $set ( item , 'end' , time )
} else if ( item . status === 5 ) { / / 竞 赛 结 束 , 清 除 定 时 器
clearInterval ( timer )
}
console . log ( 33 , this . listData )
} , 1000 )
this . timerList . push ( timer )
this . $set ( item , 'status' , status )
total = total / 1000
-- total
if ( total > 86400 ) { / / 超 过 一 天 则 显 示 天 数
/ / c l e a r I n t e r v a l ( t i m e r )
this . $set ( item , 'end' , Math . floor ( total / 86400 ) + '天' )
} else if ( total > 0 ) { / / 一 天 之 内 , 显 示 时 分 秒
let hours = Math . floor ( total / ( 60 * 60 ) )
let minutes = Math . floor ( total % ( 60 * 60 ) / 60 )
let seconds = Math . floor ( total % ( 60 * 60 ) % 60 )
time = ` ${ this . core . formateTime ( hours ) } : ${ this . core . formateTime ( minutes ) } : ${ this . core . formateTime ( seconds ) } `
if ( total > 0 ) this . $set ( item , 'end' , time )
} else if ( item . status === 5 ) { / / 竞 赛 结 束 , 清 除 定 时 器
clearInterval ( timer )
}
} , 1000 )
this . timerList . push ( timer )
}
} )
} ,
/ / 清 除 定 时 器
@ -456,7 +465,6 @@ export default {
this . $router . push ( ` /touristMatch/details?id= ${ item . id } ` ) ;
} ,
handleCurrentChange ( val ) {
this . clearTimer ( )
this . page = val ;
this . getData ( ) ;
} ,
@ -509,6 +517,11 @@ export default {
util . successMsg ( '报名成功!' )
} ) . catch ( res => { } )
} ,
/ / 选 择 要 进 入 的 阶 段
chooseStage ( e , item ) {
item . curStage = e
this . signup ( item )
} ,
/ / 判 断 是 否 能 进 赛 事
getAllow ( item ) {
/ / 是 否 允 许 参 加 赛 事 ( 淘 汰 赛 制 )