修改了大部分会议中提出的问题

This commit is contained in:
许允枞 2024-09-06 18:02:02 +08:00
parent 3cf8eaa543
commit b502559b6e
20 changed files with 246 additions and 121 deletions

View File

@ -7,13 +7,17 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.job.TaskException;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.service.SysRegisterService; //import com.ruoyi.cms.task.HitTask;
import com.ruoyi.quartz.controller.SysJobController;
import com.ruoyi.quartz.domain.SysJob;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
@ -30,6 +34,12 @@ public class HitCompetitionStudentInfoController extends BaseController {
@Autowired @Autowired
private IHitCompetitionStudentInfoService hitCompetitionStudentInfoService; private IHitCompetitionStudentInfoService hitCompetitionStudentInfoService;
// @Autowired
// private HitTask hitTask;
@Autowired
private SysJobController sysJobController;
/** /**
* 查询大赛学生列表 * 查询大赛学生列表
@ -136,4 +146,25 @@ public class HitCompetitionStudentInfoController extends BaseController {
public AjaxResult getTeamMateInfoByStuId(){ public AjaxResult getTeamMateInfoByStuId(){
return AjaxResult.success(hitCompetitionStudentInfoService.selectTeamMateInfoByStuId()); return AjaxResult.success(hitCompetitionStudentInfoService.selectTeamMateInfoByStuId());
} }
@Log(title = "修改个人赛时间", businessType = BusinessType.UPDATE)
@PutMapping("/updateTime")
public AjaxResult updateTime(@RequestBody LocalDateTime time) {
System.out.println("接收到的时间"+time);
SysJob job = new SysJob();
job.setInvokeTarget("hitTask.scheduleTask");
//将time转化为cron表达式包含年
job.setRemark("修改个人赛时间");
job.setStatus("0");
job.setJobId(4L);
job.setCronExpression("0 "+time.getSecond()+" "+time.getMinute()+" "+time.getHour()+" * * ?");
try {
sysJobController.edit(job);
} catch (SchedulerException e) {
} catch (TaskException e) {
throw new RuntimeException(e);
}
// hitTask.scheduleTask();
return success(time);
}
} }

View File

@ -50,4 +50,8 @@ public class BaseInfo extends BaseEntity
/** 是否可以报名 */ /** 是否可以报名 */
private String registerStatus; private String registerStatus;
/** 技术支持手机号 */
@Excel(name = "技术支持手机号")
private String technologyNumber;
} }

View File

@ -65,4 +65,10 @@ public interface HitCompetitionStudentInfoMapper extends BaseMapper<HitCompetiti
* @return 结果 * @return 结果
*/ */
public int deleteHitCompetitionStudentInfoByIds(String[] ids); public int deleteHitCompetitionStudentInfoByIds(String[] ids);
/**
* 将学校不足15名的参赛人员全部设置为可以参加地区选拔
* @return
*/
public int updateStudentByLessThan();
} }

View File

@ -167,7 +167,10 @@ public class HitRegistrationTeachInfoServiceImpl implements IHitRegistrationTeac
validateCaptcha(username, user.getCode(), user.getUuid()); validateCaptcha(username, user.getCode(), user.getUuid());
} }
if (StringUtils.isEmpty(username)) { boolean validPhoneNumber = isValidPhoneNumber(username);
if (!validPhoneNumber) {
msg = "手机号码格式不正确";
}else if (StringUtils.isEmpty(username)) {
msg = "用户名不能为空"; msg = "用户名不能为空";
} else if (StringUtils.isEmpty(password)) { } else if (StringUtils.isEmpty(password)) {
msg = "用户密码不能为空"; msg = "用户密码不能为空";
@ -239,6 +242,13 @@ public class HitRegistrationTeachInfoServiceImpl implements IHitRegistrationTeac
throw new CaptchaException(); throw new CaptchaException();
} }
} }
// 方法用于判断是否是有效的手机号
public static boolean isValidPhoneNumber(String phoneNumber) {
// 中国手机号正则表达式
String regex = "^1[3-9]\\d{9}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
} }

View File

@ -6,9 +6,12 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://61.156.90.46:3360/hgd_website?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true # url: jdbc:mysql://61.156.90.46:3360/hgd_website?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true
username: obrhgd url: jdbc:mysql://localhost:3306/hgd_website?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true
password: Obr7890&*() # username: obrhgd
username: root
# password: Obr7890&*()
password: 123456
# master: # master:
# url: jdbc:mysql://localhost:3306/ry-cms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://localhost:3306/ry-cms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root # username: root

View File

@ -16,7 +16,7 @@ ruoyi:
# 开发环境配置 # 开发环境配置
server: server:
# 服务器的HTTP端口默认为8080 # 服务器的HTTP端口默认为8080
port: 8081 port: 8080
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: /hgdWebsite context-path: /hgdWebsite
@ -74,7 +74,7 @@ spring:
# 数据库索引 # 数据库索引
database: 9 database: 9
# 密码 # 密码
password: password: 123456
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
lettuce: lettuce:

View File

@ -17,7 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectBaseInfoVo"> <sql id="selectBaseInfoVo">
select id, web_name, contact_number, contact_email, address, web_img, record_info, copyright_info, register_status from base_info select id, web_name, contact_number, contact_email, address, web_img, record_info, copyright_info, register_status, technology_number from base_info
</sql> </sql>

View File

@ -133,6 +133,20 @@
</trim> </trim>
where id = #{id} where id = #{id}
</update> </update>
<update id="updateStudentByLessThan">
UPDATE hit_competition_student_info
SET is_preliminary = 1
WHERE school_name IN (
SELECT school_name
FROM (
SELECT school_name
FROM hit_competition_student_info
GROUP BY school_name
HAVING COUNT(*) &lt; 15
) AS temp
);
</update>
<delete id="deleteHitCompetitionStudentInfoById" parameterType="String"> <delete id="deleteHitCompetitionStudentInfoById" parameterType="String">
delete from hit_competition_student_info where id = #{id} delete from hit_competition_student_info where id = #{id}

View File

@ -6,9 +6,12 @@ spring:
druid: druid:
# 主库数据源 # 主库数据源
master: master:
url: jdbc:mysql://122.51.230.86:3306/hgd_website?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://61.156.90.46:3360/hgd_website?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true
username: hgdRoot url: jdbc:mysql://localhost:3306/hgd_website?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true
password: qqzcy@1014 # username: obrhgd
username: root
# password: Obr7890&*()
password: 123456
# master: # master:
# url: jdbc:mysql://localhost:3306/ry-cms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://localhost:3306/ry-cms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root # username: root

View File

@ -16,10 +16,10 @@ ruoyi:
# 开发环境配置 # 开发环境配置
server: server:
# 服务器的HTTP端口默认为8080 # 服务器的HTTP端口默认为8080
port: 8089 port: 8080
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /hgdWebsite
tomcat: tomcat:
# tomcat的URI编码 # tomcat的URI编码
uri-encoding: UTF-8 uri-encoding: UTF-8
@ -72,9 +72,9 @@ spring:
# 端口默认为6379 # 端口默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 9
# 密码 # 密码
password: password: 123456
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
lettuce: lettuce:

View File

@ -35,6 +35,12 @@
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>com.ruoyi</groupId>-->
<!-- <artifactId>ruoyi-admin</artifactId>-->
<!-- <version>3.8.8</version>-->
<!-- </dependency>-->
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,20 @@
//package com.ruoyi.quartz.task;
//
//
//import com.ruoyi.cms.mapper.HitCompetitionStudentInfoMapper;
//import org.springframework.stereotype.Component;
//
//
//@Component("hitTask")
//public class HitTask {
//
// private HitCompetitionStudentInfoMapper hitCompetitionStudentInfoMapper;
//
//
// public void scheduleTask() {
// // 这里是你要执行的任务
// System.out.println("用户选定的时间到了,执行任务...");
//// hitCompetitionStudentInfoMapper.updateStudentByLessThan();
//
// }
//}

View File

@ -4,6 +4,8 @@ VUE_APP_TITLE = 虚拟仿真实验教学中心
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'
# 若依管理系统/开发环境 # 若依管理系统/开发环境
VUE_APP_BASE_API = 'http://192.168.31.25:8080' # VUE_APP_BASE_API = 'http://192.168.31.25:8080'
VUE_APP_BASE_API = 'http://localhost:8080/hgdWebsite'
# VUE_APP_BASE_API = '/dev-api'
# 路由懒加载 # 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@ -42,3 +42,11 @@ export function delInfo(id) {
method: 'delete' method: 'delete'
}) })
} }
// 修改个人赛时间
export function updateTime(time) {
return request({
url: '/system/hit_stu_info/updateTime',
data: time,
method: 'put'
})
}

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="baseInfo"> <div class="baseInfo">
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="名称" prop="webName"> <el-form-item label="名称" prop="webName">
<el-input v-model="form.webName" placeholder="请输入名称"/> <el-input v-model="form.webName" placeholder="请输入名称"/>
</el-form-item> </el-form-item>
@ -11,6 +11,9 @@
<el-form-item label="联系邮箱" prop="contactEmail"> <el-form-item label="联系邮箱" prop="contactEmail">
<el-input v-model="form.contactEmail" placeholder="请输入联系邮箱"/> <el-input v-model="form.contactEmail" placeholder="请输入联系邮箱"/>
</el-form-item> </el-form-item>
<el-form-item label="技术支持手机号" prop="technologyNumber">
<el-input v-model="form.technologyNumber" placeholder="请输入技术支持手机号"/>
</el-form-item>
<el-form-item label="地址" prop="address"> <el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址"/> <el-input v-model="form.address" placeholder="请输入地址"/>
</el-form-item> </el-form-item>

View File

@ -3,21 +3,11 @@
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="学生姓名" prop="stuName"> <el-form-item label="学生姓名" prop="stuName">
<el-input <el-input v-model="queryParams.stuName" placeholder="请输入学生姓名" clearable @keyup.enter.native="handleQuery" />
v-model="queryParams.stuName"
placeholder="请输入学生姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item label="院系名称" prop="collegeName"> <el-form-item label="院系名称" prop="collegeName">
<el-input <el-input v-model="queryParams.collegeName" placeholder="请输入院系名称" clearable @keyup.enter.native="handleQuery" />
v-model="queryParams.collegeName"
placeholder="请输入院系名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -25,30 +15,27 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- <template> -->
时间<el-date-picker v-model="selectedTime" type="datetime" placeholder="选择时间" @change="onTimeSelect"></el-date-picker>
<!-- </template> -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
type="danger" @click="handleDelete">删除</el-button>
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col> </el-col>
<!-- <el-col :span="1.5">--> <!-- <el-col :span="1.5">-->
<!-- <el-button--> <!-- <el-button-->
<!-- type="warning"--> <!-- type="warning"-->
<!-- plain--> <!-- plain-->
<!-- icon="el-icon-download"--> <!-- icon="el-icon-download"-->
<!-- size="mini"--> <!-- size="mini"-->
<!-- @click="handleExport"--> <!-- @click="handleExport"-->
<!-- v-hasPermi="['system:info:export']"--> <!-- v-hasPermi="['system:info:export']"-->
<!-- >导出</el-button>--> <!-- >导出</el-button>-->
<!-- </el-col>--> <!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -63,60 +50,40 @@
<el-table-column label="所属赛区" align="center" prop="division" /> <el-table-column label="所属赛区" align="center" prop="division" />
<el-table-column label="手机号" align="center" prop="phoneNumber" /> <el-table-column label="手机号" align="center" prop="phoneNumber" />
<el-table-column label="邮箱" align="center" prop="email" /> <el-table-column label="邮箱" align="center" prop="email" />
<el-table-column label="学生证" align="center" prop="studentIdCard" > <el-table-column label="学生证" align="center" prop="studentIdCard">
<template slot-scope="scope"> <template slot-scope="scope">
<image-preview :src="scope.row.studentIdCard" :width="50" :height="50"/> <image-preview :src="scope.row.studentIdCard" :width="50" :height="50" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="个人选拔赛分数" align="center" prop="trialsScore" width="300"> <el-table-column label="个人选拔赛分数" align="center" prop="trialsScore" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input-number v-model="scope.row.trialsScore" :precision="2" :step="0.1" ></el-input-number> <el-input-number v-model="scope.row.trialsScore" :precision="2" :step="0.1"></el-input-number>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否进入初赛" align="center" prop="isPreliminary" > <el-table-column label="是否进入初赛" align="center" prop="isPreliminary">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="!scope.row.isPreliminary">待审核</div> <div v-if="!scope.row.isPreliminary">待审核</div>
<div v-else-if="scope.row.isPreliminary==1">已入选</div> <div v-else-if="scope.row.isPreliminary == 1">已入选</div>
<div v-else>未入选</div> <div v-else>未入选</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" type="text" icon="el-icon-edit"
size="mini" v-if="!scope.row.isPreliminary || scope.row.isPreliminary == 0"
type="text" @click="updateStatus(scope.row, 1)">入选</el-button>
icon="el-icon-edit"
v-if="!scope.row.isPreliminary||scope.row.isPreliminary==0"
@click="updateStatus(scope.row,1)"
>入选</el-button>
<el-button <el-button size="mini" type="text" v-else icon="el-icon-edit"
size="mini" @click="updateStatus(scope.row, 0)">取消入选</el-button>
type="text" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
v-else
icon="el-icon-edit"
@click="updateStatus(scope.row,0)"
>取消入选</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
v-show="total>0" @pagination="getList" />
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改大赛学生对话框 --> <!-- 添加或修改大赛学生对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@ -170,12 +137,13 @@
</template> </template>
<script> <script>
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/hit/stuInfo"; import { listInfo, getInfo, delInfo, addInfo, updateInfo, updateTime } from "@/api/hit/stuInfo";
export default { export default {
name: "Info", name: "Info",
data() { data() {
return { return {
selectedTime: null, //
// //
loading: true, loading: true,
// //
@ -302,7 +270,7 @@ export default {
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.id) this.ids = selection.map(item => item.id)
this.single = selection.length!==1 this.single = selection.length !== 1
this.multiple = !selection.length this.multiple = !selection.length
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
@ -322,7 +290,7 @@ export default {
}); });
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
updateStatus(data,type) { updateStatus(data, type) {
data.isPreliminary = type data.isPreliminary = type
updateInfo(data).then(response => { updateInfo(data).then(response => {
this.$modal.msgSuccess("成功"); this.$modal.msgSuccess("成功");
@ -352,18 +320,47 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除大赛学生编号为"' + ids + '"的数据项?').then(function() { this.$modal.confirm('是否确认删除大赛学生编号为"' + ids + '"的数据项?').then(function () {
return delInfo(ids); return delInfo(ids);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => { });
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('system/info/export', { this.download('system/info/export', {
...this.queryParams ...this.queryParams
}, `info_${new Date().getTime()}.xlsx`) }, `info_${new Date().getTime()}.xlsx`)
},
//
onTimeSelect() {
// const date = new Date(this.selectedTime);
// const year = date.getFullYear();
// const month = String(date.getMonth() + 1).padStart(2, '0');
// const day = String(date.getDate()).padStart(2, '0');
// const hours = String(date.getHours()).padStart(2, '0');
// const minutes = String(date.getMinutes()).padStart(2, '0');
// const seconds = String(date.getSeconds()).padStart(2, '0');
// const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
// this.selectedTime = formattedDate; // 'Z'
console.log("选择的时间", this.selectedTime);
if (this.selectedTime) {
this.sendTimeToBackend(this.selectedTime);
}
},
//
sendTimeToBackend(time) {
updateTime(time)
.then(response => {
this.$message.success('定时任务设置成功');
})
.catch(error => {
this.$message.error('请求失败,请检查网络');
});
} }
} }
}; };

View File

@ -1,4 +1,3 @@
<template> <template>
<div class="index-footer"> <div class="index-footer">
<div class="footer"> <div class="footer">
@ -8,27 +7,32 @@
<img :src="baseInfo.webImg" /> <img :src="baseInfo.webImg" />
</div> </div>
<div class="logo-size"> <div class="logo-size">
{{this.baseInfo.webName}} {{ this.baseInfo.webName }}
</div> </div>
</div> </div>
<div class="footer-contact"> <div class="footer-contact">
<div class="p"> <div class="p">
<img src="../../../assets/gw/tel.png" alt=""> <img src="../../../assets/gw/tel.png" alt="">
<div class="pp">电话{{this.baseInfo.contactNumber}}</div> <div class="pp">电话{{ this.baseInfo.contactNumber }}</div>
</div> </div>
<div class="p"> <div class="p">
<img src="../../../assets/gw/email.png" alt=""> <img src="../../../assets/gw/email.png" alt="">
<div class="pp">邮箱{{this.baseInfo.contactEmail}}</div> <div class="pp">邮箱{{ this.baseInfo.contactEmail }}</div>
</div> </div>
<div class="p"> <div class="p">
<img src="../../../assets/gw/address.png" alt=""> <img src="../../../assets/gw/address.png" alt="">
<div class="pp">地址{{ this.baseInfo.address }}</div> <div class="pp">地址{{ this.baseInfo.address }}</div>
</div>
<div class="p" style="margin-top: 15px;">
<img src="../../../assets/gw/tel.png" alt="">
<div class="pp">技术支持{{ this.baseInfo.technologyNumber }}</div>
</div> </div>
@ -61,13 +65,13 @@ import { getBaseInfo, } from '@/api/gw/home'
export default { export default {
data() { data() {
return { return {
baseInfo:"", baseInfo: "",
} }
}, },
mounted() { mounted() {
this.getWebBaseInfo() this.getWebBaseInfo()
}, },
methods:{ methods: {
getWebBaseInfo() { getWebBaseInfo() {
getBaseInfo().then(res => { getBaseInfo().then(res => {
this.baseInfo = res.data this.baseInfo = res.data
@ -75,7 +79,7 @@ export default {
}) })
}, },
toTop(){ toTop() {
window.scrollTo({ top: 0, behavior: 'smooth' }); window.scrollTo({ top: 0, behavior: 'smooth' });
} }
} }
@ -100,8 +104,7 @@ export default {
/* align-items: center; */ /* align-items: center; */
} }
.index-footer .footer .logo .footer-contact { .index-footer .footer .logo .footer-contact {}
}
.index-footer .footer .logo .footer-contact .p { .index-footer .footer .logo .footer-contact .p {
display: inline-block; display: inline-block;
@ -211,12 +214,14 @@ export default {
line-height: 18px; line-height: 18px;
} }
.logo-box { .logo-box {
width: 50px; width: 50px;
height: 50px; height: 50px;
background: #fff; background: #fff;
} }
.logo-box img{
.logo-box img {
width: 50px; width: 50px;
height: 50px; height: 50px;
} }
@ -228,6 +233,7 @@ export default {
margin-left: 20px; margin-left: 20px;
} }
.d-s { .d-s {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -48,7 +48,7 @@
<div> <div>
<el-form :model="loginForm" ref="loginForm"> <el-form :model="loginForm" ref="loginForm">
<el-form-item prop="username"> <el-form-item prop="username">
<el-input placeholder="号" v-model="loginForm.username" ></el-input> <el-input placeholder="手机号" v-model="loginForm.username" ></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input placeholder="密码" v-model="loginForm.password" type="password"></el-input> <el-input placeholder="密码" v-model="loginForm.password" type="password"></el-input>
@ -87,7 +87,7 @@
<el-input placeholder="姓名" v-model="registerForm.nickName" type="text"></el-input> <el-input placeholder="姓名" v-model="registerForm.nickName" type="text"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input placeholder="号(登录账号)" v-model="registerForm.username" type="text"></el-input> <el-input placeholder="手机号(登录账号)" v-model="registerForm.username" type="text"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
@ -357,22 +357,32 @@ export default {
submitRegister() { submitRegister() {
this.$refs.registerForm.validate(valid => { this.$refs.registerForm.validate(valid => {
if (valid) { if (valid) {
//
const phoneRegex = /^1[3-9]\d{9}$/;
if (!phoneRegex.test(this.registerForm.username)) {
this.$alert("<font color='red'>请输入有效的手机号。</font>", '系统提示', {
dangerouslyUseHTMLString: true,
type: 'error'
});
return;
}
this.loading = true; this.loading = true;
register(this.registerForm).then(res => { register(this.registerForm).then(res => {
const username = this.registerForm.username; const username = this.registerForm.username;
this.registerDialog = false this.registerDialog = false;
this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', { this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
type: 'success' type: 'success'
}).then(() => { }).then(() => {
this.$router.push("/virtually"); this.$router.push("/virtually");
}).catch(() => {}); }).catch(() => { });
}).catch(() => { }).catch(() => {
this.loading = false; this.loading = false;
if (this.captchaEnabled) { if (this.captchaEnabled) {
this.getCode(); this.getCode();
} }
}) });
} }
}); });
}, },

View File

@ -27,15 +27,15 @@
<div> <div>
<el-steps :active="active" finish-status="success" align-center> <el-steps :active="active" finish-status="success" align-center>
<el-step title="个人选拔赛报名"></el-step> <el-step title="个人选拔赛报名"></el-step>
<el-step title="赛报名"></el-step> <el-step title="地区选拔赛报名"></el-step>
<el-step title="确认报名团队"></el-step> <el-step title="确认报名团队"></el-step>
<el-step title="赛报名结果"></el-step> <el-step title="地区选拔赛报名结果"></el-step>
<el-step title="比赛资料上传"></el-step> <el-step title="比赛资料上传"></el-step>
</el-steps> </el-steps>
<div class="step-box" v-if="active == 0"> <div class="step-box" v-if="active == 0">
<div class="step-box-title"> <div class="step-box-title">
<el-form label-width="80px" :model="signUpForm" :rules="rules" ref="form"> <el-form label-width="80px" :model="signUpForm" :rules="rules" ref="form">
<el-form-item label="号" prop="studentId" > <el-form-item label="手机号" prop="studentId" >
<el-input v-model="signUpForm.studentId" disabled></el-input> <el-input v-model="signUpForm.studentId" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名" prop="stuName"> <el-form-item label="姓名" prop="stuName">
@ -84,7 +84,7 @@
<el-form-item label="邮箱" prop="email"> <el-form-item label="邮箱" prop="email">
<el-input v-model="signUpForm.email"></el-input> <el-input v-model="signUpForm.email"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="学生证" prop="studentIdCard"> <el-form-item label="学生证、卡" prop="studentIdCard" label-width="95px">
<image-upload :limit="1" v-model="signUpForm.studentIdCard"></image-upload> <image-upload :limit="1" v-model="signUpForm.studentIdCard"></image-upload>
</el-form-item> </el-form-item>
@ -95,12 +95,13 @@
</div> </div>
</div> </div>
<div class="step-box" v-if="active == 1" style="position: relative" > <div class="step-box" v-if="active == 1" style="position: relative" >
<div class="step-box-title" style="font-size: 20px;margin-top: 8%" v-if="signUpForm.trialsScore == null">个人选拔赛成绩未出请耐心等待</div> <!-- <div class="step-box-title" style="font-size: 20px;margin-top: 8%" v-if="signUpForm.trialsScore == null">个人选拔赛成绩未出请耐心等待</div> -->
<div class="step-box-title" style="font-size: 20px;margin-top: 8%" v-if="signUpForm.trialsScore == null">成绩仅供参考最终选择由指导老师和领队老师做决定</div>
<div class="step-box-title" style="font-size: 20px;margin-top: 8%" v-if="signUpForm.trialsScore != null && signUpForm.isPreliminary == false"> <div class="step-box-title" style="font-size: 20px;margin-top: 8%" v-if="signUpForm.trialsScore != null && signUpForm.isPreliminary == false">
很遗憾个人选拔赛未通过您的个人成绩为 : {{ signUpForm.trialsScore }}</div> 很遗憾个人选拔赛未通过您的个人成绩为 : {{ signUpForm.trialsScore }}</div>
<div style="position: absolute;left: 15%; top: 30%" v-if="signUpForm.trialsScore" > <div style="position: absolute;left: 15%; top: 30%" v-if="signUpForm.trialsScore" >
<div style="font-size: 24px"> <div style="font-size: 24px">
赛成绩 地区选拔赛成绩
</div> </div>
<div style="font-size: 24px;color:#ff0000;margin-top: 15px" > <div style="font-size: 24px;color:#ff0000;margin-top: 15px" >
{{ signUpForm.trialsScore }} {{ signUpForm.trialsScore }}
@ -170,7 +171,8 @@
<el-input v-model="preliminaryForm.sampleAddress"></el-input> <el-input v-model="preliminaryForm.sampleAddress"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="附件" prop="uploadFile"> <el-form-item label="附件" prop="uploadFile">
<file-upload :fileSize="20" :fileType="['doc','docx','pdf','zip']" v-model="preliminaryForm.uploadFile"></file-upload> <!-- <file-upload :fileSize="20" :fileType="['doc','docx','pdf','zip']" v-model="preliminaryForm.uploadFile"></file-upload> -->
<file-upload :fileSize="20" :fileType="['pdf']" v-model="preliminaryForm.uploadFile"></file-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -237,7 +239,7 @@
</div> </div>
</div> </div>
<div class="step-box" v-if="active == 3"> <div class="step-box" v-if="active == 3">
<div class="step-box-title" style="font-size: 20px;margin-top: 8%">赛报名提交成功请通过大赛通知获取通过信息</div> <div class="step-box-title" style="font-size: 20px;margin-top: 8%">地区选拔赛报名提交成功请通过大赛通知获取通过信息</div>
</div> </div>
</div> </div>
@ -369,7 +371,7 @@ export default {
{ required: true, message: "学校名称不能为空", trigger: "blur" } { required: true, message: "学校名称不能为空", trigger: "blur" }
], ],
studentId: [ studentId: [
{ required: true, message: "号不能为空", trigger: "blur" } { required: true, message: "手机号不能为空", trigger: "blur" }
], ],
collegeName: [ collegeName: [
{ required: true, message: "院系名称不能为空", trigger: "blur" } { required: true, message: "院系名称不能为空", trigger: "blur" }
@ -381,7 +383,7 @@ export default {
{ required: true, message: "专业名称不能为空", trigger: "blur" } { required: true, message: "专业名称不能为空", trigger: "blur" }
], ],
studentIdCard: [ studentIdCard: [
{ required: true, message: "学生证不能为空", trigger: "blur" } { required: true, message: "学生证、卡不能为空", trigger: "blur" }
], ],
phoneNumber: [ phoneNumber: [
{ required: true, message: "手机号不能为空", trigger: "blur" } { required: true, message: "手机号不能为空", trigger: "blur" }
@ -625,7 +627,7 @@ export default {
if (valid) { if (valid) {
PreliminaryRegistration(this.preliminaryForm).then(res => { PreliminaryRegistration(this.preliminaryForm).then(res => {
if (res.code === 200) { if (res.code === 200) {
this.$modal.msgSuccess("赛报名提交成功") this.$modal.msgSuccess("地区选拔赛报名提交成功")
this.fetchRegistrationInformation() this.fetchRegistrationInformation()
} else { } else {
this.$modal.msgError("报名失败") this.$modal.msgError("报名失败")

View File

@ -35,7 +35,7 @@ module.exports = {
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`, target: `http://localhost:8081`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ['^' + process.env.VUE_APP_BASE_API]: ''