diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/Preliminary.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/Preliminary.java index d176b68..7668e2a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/Preliminary.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/Preliminary.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; +import java.util.List; + /** * 大赛预报名表 preliminary */ @@ -58,6 +60,9 @@ public class Preliminary { private String racetrack; + /** 团队成员 */ + private List teammate; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/vo/HitRegInfoUserImportVo.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/vo/HitRegInfoUserImportVo.java index ead2b99..4628f07 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/vo/HitRegInfoUserImportVo.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/domain/vo/HitRegInfoUserImportVo.java @@ -32,5 +32,11 @@ public class HitRegInfoUserImportVo extends BaseEntity @Excel(name = "化验分") private BigDecimal assayScore; + /** + * 赛道 + */ + @Excel(name = "赛道", dictType = "com_racetrack") + private String racetrack; + private Long userId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/mapper/HitRegInfoUserMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/mapper/HitRegInfoUserMapper.java index 9faa423..0075746 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/mapper/HitRegInfoUserMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/mapper/HitRegInfoUserMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.cms.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.cms.domain.HitRegInfoUser; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,8 +13,7 @@ import java.util.List; * @author ruoyi * @date 2024-09-01 */ -public interface HitRegInfoUserMapper extends BaseMapper -{ +public interface HitRegInfoUserMapper extends BaseMapper { /** * 查询报名相关人员信息 * @@ -61,4 +61,13 @@ public interface HitRegInfoUserMapper extends BaseMapper * @return 结果 */ public int deleteHitRegInfoUserByIds(Long[] ids); + + /** + * 根据用户id和赛道查询 + * + * @param userId + * @param racetrack + * @return + */ + HitRegInfoUser selectByUserIdAndRacetrack(@Param("userId") Long userId, @Param("racetrack") String racetrack); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitRegInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitRegInfoServiceImpl.java index 046cebe..7accc0d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitRegInfoServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitRegInfoServiceImpl.java @@ -549,9 +549,12 @@ public class HitRegInfoServiceImpl implements IHitRegInfoService { if (!StringUtils.isEmpty(item.getMobile())) { try { HitRegInfoUser hitRegInfoUser = BeanUtil.copyProperties(item, HitRegInfoUser.class); + //根据赛道查询团队id + HitRegInfoUser queryRegUser = hitRegInfoUserMapper.selectByUserIdAndRacetrack(item.getUserId(), item.getRacetrack()); hitRegInfoUserMapper.update(hitRegInfoUser, new LambdaUpdateWrapper() .eq(HitRegInfoUser::getUserId, item.getUserId()) + .eq(HitRegInfoUser::getRegId, queryRegUser.getRegId()) .between(HitRegInfoUser::getCreateTime, DateUtil.beginOfYear(now), DateUtil.endOfYear(now))); } catch (Exception e) { log.error("更新学生信息失败,phoneNumber: " + item.getMobile(), e); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitTeamsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitTeamsServiceImpl.java index 1b78695..6bcf8eb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitTeamsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/cms/service/impl/HitTeamsServiceImpl.java @@ -75,17 +75,34 @@ public class HitTeamsServiceImpl extends ServiceImpl i throw new Exception("当前团队名已存在,请修改团队名"); } - //判断所选三个队员是否存在待确认 - if (preliminary.getTeammateOne().equals(preliminary.getTeammateTwo())) { - throw new Exception("队员不可重复"); - } - HitRegInfo hitRegInfo1 = regInfoService.selectHitByUserId2(preliminary.getTeammateOne(),preliminary.getRacetrack()); - if (ObjectUtils.isNotEmpty(hitRegInfo1)) { - throw new Exception("队员1已存在组队信息,不可重复组队"); - } - HitRegInfo hitRegInfo2 = regInfoService.selectHitByUserId2(preliminary.getTeammateTwo(),preliminary.getRacetrack()); - if (ObjectUtils.isNotEmpty(hitRegInfo2)) { - throw new Exception("队员2已存在组队信息,不可重复组队"); + // 判断是否是产业赛道 + if (preliminary.getRacetrack().contains("2")) { + // 循环队友判断是否存在 + // 判断队友是否超过十人 + if (preliminary.getTeammate().size() > 10) { + throw new Exception("当前团队人数已超过十人,请修改"); + } + for (Long userId : preliminary.getTeammate()) { + HitRegInfo hitRegInfo = regInfoService.selectHitByUserId2(userId,preliminary.getRacetrack()); + if (ObjectUtils.isNotEmpty(hitRegInfo)) { + // 通过userId查询用户信息 + SysUser sysUser = userService.selectUserById(userId); + throw new Exception(sysUser.getNickName() + "该学生已存在组队信息,不可重复组队"); + } + } + }else { + //判断所选三个队员是否存在待确认 + if (preliminary.getTeammateOne().equals(preliminary.getTeammateTwo())) { + throw new Exception("队员不可重复"); + } + HitRegInfo hitRegInfo1 = regInfoService.selectHitByUserId2(preliminary.getTeammateOne(),preliminary.getRacetrack()); + if (ObjectUtils.isNotEmpty(hitRegInfo1)) { + throw new Exception("队员1已存在组队信息,不可重复组队"); + } + HitRegInfo hitRegInfo2 = regInfoService.selectHitByUserId2(preliminary.getTeammateTwo(),preliminary.getRacetrack()); + if (ObjectUtils.isNotEmpty(hitRegInfo2)) { + throw new Exception("队员2已存在组队信息,不可重复组队"); + } } //获取当前用户信息信息 SysUser user = SecurityUtils.getLoginUser().getUser(); @@ -120,27 +137,43 @@ public class HitTeamsServiceImpl extends ServiceImpl i hitRegInfoUser1.setCreateTime(new Date()); regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser1); - //插入人员信息 - HitRegInfoUser hitRegInfoUser2 = new HitRegInfoUser(); - hitRegInfoUser2.setRegId(hitRegInfo.getId()); - hitRegInfoUser2.setUserId(preliminary.getTeammateOne()); - SysUser sysUser = userService.selectUserById(preliminary.getTeammateOne()); - hitRegInfoUser2.setUserName(sysUser.getNickName()); - hitRegInfoUser2.setType("1"); - hitRegInfoUser2.setStatus("0"); - hitRegInfoUser2.setCreateTime(new Date()); - regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser2); + // 判断是否是产业赛道 + if (preliminary.getRacetrack().contains("2")) { + // 循环添加队友信息 + for (Long userId : preliminary.getTeammate()) { + HitRegInfoUser hitRegInfoUser = new HitRegInfoUser(); + hitRegInfoUser.setRegId(hitRegInfo.getId()); + hitRegInfoUser.setUserId(userId); + SysUser sysUser = userService.selectUserById(userId); + hitRegInfoUser.setUserName(sysUser.getNickName()); + hitRegInfoUser.setType("1"); + hitRegInfoUser.setStatus("0"); + hitRegInfoUser.setCreateTime(new Date()); + regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser); + } + }else { + //插入人员信息 + HitRegInfoUser hitRegInfoUser2 = new HitRegInfoUser(); + hitRegInfoUser2.setRegId(hitRegInfo.getId()); + hitRegInfoUser2.setUserId(preliminary.getTeammateOne()); + SysUser sysUser = userService.selectUserById(preliminary.getTeammateOne()); + hitRegInfoUser2.setUserName(sysUser.getNickName()); + hitRegInfoUser2.setType("1"); + hitRegInfoUser2.setStatus("0"); + hitRegInfoUser2.setCreateTime(new Date()); + regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser2); - //插入人员信息 - HitRegInfoUser hitRegInfoUser3 = new HitRegInfoUser(); - hitRegInfoUser3.setRegId(hitRegInfo.getId()); - hitRegInfoUser3.setUserId(preliminary.getTeammateTwo()); - SysUser sysUser1 = userService.selectUserById(preliminary.getTeammateTwo()); - hitRegInfoUser3.setUserName(sysUser1.getNickName()); - hitRegInfoUser3.setType("1"); - hitRegInfoUser3.setStatus("0"); - hitRegInfoUser3.setCreateTime(new Date()); - regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser3); + //插入人员信息 + HitRegInfoUser hitRegInfoUser3 = new HitRegInfoUser(); + hitRegInfoUser3.setRegId(hitRegInfo.getId()); + hitRegInfoUser3.setUserId(preliminary.getTeammateTwo()); + SysUser sysUser1 = userService.selectUserById(preliminary.getTeammateTwo()); + hitRegInfoUser3.setUserName(sysUser1.getNickName()); + hitRegInfoUser3.setType("1"); + hitRegInfoUser3.setStatus("0"); + hitRegInfoUser3.setCreateTime(new Date()); + regInfoUserMapper.insertHitRegInfoUser(hitRegInfoUser3); + } HitRegInfoUser hitRegInfoUser4 = new HitRegInfoUser(); hitRegInfoUser4.setRegId(hitRegInfo.getId()); diff --git a/ruoyi-admin/src/main/resources/mapper/cms/CmsContentMapper.xml b/ruoyi-admin/src/main/resources/mapper/cms/CmsContentMapper.xml index 87c87b3..05b6d67 100644 --- a/ruoyi-admin/src/main/resources/mapper/cms/CmsContentMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/cms/CmsContentMapper.xml @@ -127,7 +127,7 @@ and accessory_url = #{accessoryUrl} and del_flag = #{delFlag} - order by sort_num ASC, create_time desc, update_time desc + order by sort_num IS NULL, sort_num ASC, update_time desc, create_time desc + insert into hit_reg_info_user diff --git a/ruoyi-ui/src/components/RegisterTeam/registerTeam.vue b/ruoyi-ui/src/components/RegisterTeam/registerTeam.vue index 91973db..b43eb77 100644 --- a/ruoyi-ui/src/components/RegisterTeam/registerTeam.vue +++ b/ruoyi-ui/src/components/RegisterTeam/registerTeam.vue @@ -18,20 +18,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + +
@@ -59,7 +59,7 @@
-
+
+
+ + + + + +
+
@@ -194,7 +212,7 @@ export default { schoolName: '', racetrackArr: [], competition: [], - ldTeacherInfo: { teacherName: '' }, + ldTeacherInfo: {teacherName: ''}, teamName: '', teammateOne: '', teammateTwo: '', @@ -261,7 +279,21 @@ export default { ], teacherTwo: [ {required: false, message: '请选择指导老师2', trigger: 'change'} + ], + teammate: [ + {required: true, message: '请选择队友', trigger: 'change'}, + { + validator: (rule, value, callback) => { + if (value && value.length > 10) { + callback(new Error('最多只能选择10个队友')); + } else { + callback(); + } + }, + trigger: 'change' + } ] + } }; }, @@ -276,7 +308,7 @@ export default { }, // 表单提交 handleSubmit() { - console.log('表单提交',this.formData) + console.log('表单提交', this.formData) this.$refs.form.validate(valid => { if (valid) { this.$emit('submit', this.formData); diff --git a/ruoyi-ui/src/layout/index.vue b/ruoyi-ui/src/layout/index.vue index dba4393..c99ad50 100644 --- a/ruoyi-ui/src/layout/index.vue +++ b/ruoyi-ui/src/layout/index.vue @@ -97,7 +97,7 @@ export default { transition: width 0.28s; } - .hideSidebar .fixed-header { + .hideSidebar .fixed-header { width: calc(100% - 54px); } diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 9c1febd..ee6874d 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -48,6 +48,13 @@ export const constantRoutes = [ component: () => import('@/views/home'), hidden: true }, + { + path: '',//首页 + name:'virtually', + meta: { title: '首页' }, + component: () => import('@/views/home'), + hidden: true + }, { path: '/list',//查看更多 列表页 name:'list', @@ -146,8 +153,13 @@ export const constantRoutes = [ component: () => import('@/views/error/401'), hidden: true }, + // { + // path: '/index', + // component: () => import('@/views/index'), + // hidden: false + // }, { - path: '', + path: '/', component: Layout, redirect: 'index', children: [ diff --git a/ruoyi-ui/src/views/officialWebsite/Components/header.vue b/ruoyi-ui/src/views/officialWebsite/Components/header.vue index 7dc34a1..904a9eb 100644 --- a/ruoyi-ui/src/views/officialWebsite/Components/header.vue +++ b/ruoyi-ui/src/views/officialWebsite/Components/header.vue @@ -43,18 +43,24 @@ 进入后台 - 退出登录 + 退出
- +
- + + + - + @@ -209,11 +215,11 @@ export default { } } return { - isLoggedIn: false, // 是否登录 + isLoggedIn: false, // 是否 value: false, currentUser: '', //当前用户 codeUrl: '', //验证码地址 - showLoginDialog: false, // 是否显示登录对话框 + showLoginDialog: false, // 是否显示对话框 registerDialog: false, // 是否显示注册对话框 baseInfo: '', imgurl: process.env.VUE_APP_BASE_API, @@ -221,6 +227,7 @@ export default { show_search: true, categoryQuery: {}, tabindex: 0, + passwordType: 'password', // 添加密码类型控制 tablist: [ { name: '首页' }, { name: '中心概括' }, @@ -329,7 +336,7 @@ export default { this.tabindex = this.msg this.getCode() this.getCookie() // 页面加载完毕调用 - this.isLoggedIn = getToken() ? true : false // 检查 localStorage 中的登录状态 + this.isLoggedIn = getToken() ? true : false // 检查 localStorage 中的状态 if (this.isLoggedIn) { this.loadUserInfo() } @@ -361,6 +368,14 @@ export default { document.body.removeChild(link); }, + showPassword() { + if (this.passwordType === 'password') { + this.passwordType = 'text' + } else { + this.passwordType = 'password' + } + }, + //用户信息 loadUserInfo() { getHomeUserInfo().then(response => { @@ -631,4 +646,10 @@ export default { text-align: center; } +.el-icon-view { + cursor: pointer; + line-height: 38px; + font-size: 16px; +} + diff --git a/ruoyi-ui/src/views/officialWebsite/committee.vue b/ruoyi-ui/src/views/officialWebsite/committee.vue index 4d1fb25..a2d69b5 100644 --- a/ruoyi-ui/src/views/officialWebsite/committee.vue +++ b/ruoyi-ui/src/views/officialWebsite/committee.vue @@ -164,17 +164,17 @@ export default { this.onelist = data } }, - goDeatail(data) { - if (data.linkType == 0) { - this.$router.push({ - name: 'details', - query: { id: data.id } - }) - } - if (data.linkType == 1) { - window.open(data.link, '_blank') - } - }, + // goDeatail(data) { + // if (data.linkType == 0) { + // this.$router.push({ + // name: 'details', + // query: { id: data.id } + // }) + // } + // if (data.linkType == 1) { + // window.open(data.link, '_blank') + // } + // }, getContentByCategoryId(id) { getListById(id).then(res => { this.dataList = res.data diff --git a/ruoyi-ui/src/views/officialWebsite/competition.vue b/ruoyi-ui/src/views/officialWebsite/competition.vue index 579c1f6..c9abfd0 100644 --- a/ruoyi-ui/src/views/officialWebsite/competition.vue +++ b/ruoyi-ui/src/views/officialWebsite/competition.vue @@ -159,17 +159,17 @@
- - - + + {{ item.label }} - - + +
@@ -189,7 +189,7 @@
-
+
+
+ + + + + +
+
@@ -464,7 +482,7 @@ :key="item.value" :label="item.value" :checked="checked" @change="checked=!checked" - :disabled="item.disabled" + :disabled="item.disabled || item.raw.remark == 0" > {{ item.label }} @@ -607,6 +625,7 @@ import { import {getTab, getbanner} from '@/api/gw/home' import {getToken} from '@/utils/auth' import log from "@/views/monitor/job/log.vue"; +import Vue from "vue"; export default { components: { @@ -668,9 +687,11 @@ export default { // racetrackArr: [] }, showCompetition: false, + showSelectTeammate: false, //初赛表 preliminaryForm: { teamName: '', + teammate:[], division: '', schoolName: '', teammateOne: '', @@ -681,6 +702,8 @@ export default { racetrackArr: [], competition: [], racetrack: '', + tdStudentList:[], + }, //队员 teammateInfo: { @@ -776,6 +799,22 @@ export default { {required: true, message: '不能为空', trigger: 'blur'}, {pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur'} ], + racetrack: [ + {required: true, message: '不能为空', trigger: 'blur'} + ], + teammate: [ + {required: true, message: '请选择队友', trigger: 'change'}, + { + validator: (rule, value, callback) => { + if (value && value.length > 10) { + callback(new Error('最多只能选择10个队友')); + } else { + callback(); + } + }, + trigger: 'change' + } + ], sampleAddress: [ {required: true, message: '不能为空', trigger: 'blur'} @@ -949,9 +988,7 @@ export default { }, // 选择团队赛赛道 selectRacetrack(data) { - console.log('赛道', data) this.preliminaryForm.racetrack = data - console.log('赛道', this.preliminaryForm.racetrack) // 查询选择的赛道是否报过名 const params = { racetrack: data @@ -959,7 +996,7 @@ export default { this.currentActive = 9 queryIfReg(params).then(res => { if (res.data) { - console.log(res.data,666) + console.log(res.data, 666) this.preliminaryForm.hitRegInfo = res.data if (res.data.auditStatus == 1) { this.teamActive = 3 @@ -973,7 +1010,7 @@ export default { } else { this.teamActive = 1 } - console.log('此时的步骤',this.teamActive) + console.log('此时的步骤', this.preliminaryForm.racetrack) this.showSelectRacetrack = false }) }, @@ -1012,8 +1049,10 @@ export default { this.updateSignUpForm(response.data) this.studentForm = response.data this.teamForm = response.data.hitRegInfo - this.teamForm.racetrackArr = [] + if (this.teamForm) { + this.teamForm.racetrackArr = [] + console.log('赛道', this.teamForm.racetrackArr) //将字符串转为数组 this.teamForm.competition = this.teamForm.competition.split(',') if (this.teamForm.racetrack) { @@ -1183,15 +1222,31 @@ export default { }, changeRacetrack() { //将数组转换为字符串 - this.preliminaryForm.racetrack = this.arrayToString(this.preliminaryForm.racetrackArr) + // this.preliminaryForm.racetrack = this.arrayToString(this.preliminaryForm.racetrackArr) // 判断赛道中是否包含1 - if (this.preliminaryForm.racetrackArr.includes('1')) { + + if (this.preliminaryForm.racetrack.includes('1')) { this.showCompetition = true - } else { + } else { this.showCompetition = false this.preliminaryForm.competition = [] } - console.log(this.preliminaryForm.racetrack) + console.log('赛道', this.preliminaryForm.racetrack) + if (this.preliminaryForm.racetrack == 2) { + // 直接使用 Vue.set 确保 teammate 是响应式的 + if (!this.preliminaryForm.hasOwnProperty('teammate')) { + Vue.set(this.preliminaryForm, 'teammate', []); + } else { + this.preliminaryForm.teammate = []; // 如果已经是响应式,直接赋值即可 + } + } + + // this.preliminaryForm.tdStudentList = res.data.map(item => ({ + // ...item, + // userId: String(item.userId) + // })) + + }, changeUpdateTeamRacetrack() { //将数组转换为字符串