This commit is contained in:
那些花儿
2025-05-09 11:22:14 +08:00
24 changed files with 191 additions and 88 deletions
@@ -117,6 +117,10 @@ public class ClientAuthController {
@ApiOperation(value = "发送短信验证码", nickname = "/send-sms-code", httpMethod = "POST") @ApiOperation(value = "发送短信验证码", nickname = "/send-sms-code", httpMethod = "POST")
public Object sendSmsCode(String phone) { public Object sendSmsCode(String phone) {
try { try {
int count = dao.count(Client_user.class, Cnd.where("phone", "=", phone));
if (count == 0) {
return Result.error("手机号码未注册");
}
validateService.getSmsCode(phone); validateService.getSmsCode(phone);
return Result.success(NutMap.NEW().addv("key", RedisConstant.UCENTER_SMSCODE + phone)).addMsg("发送成功"); return Result.success(NutMap.NEW().addv("key", RedisConstant.UCENTER_SMSCODE + phone)).addMsg("发送成功");
} catch (BaseException e) { } catch (BaseException e) {
@@ -140,7 +144,7 @@ public class ClientAuthController {
@AdaptBy(type = JsonAdaptor.class) @AdaptBy(type = JsonAdaptor.class)
public Result updateUserInfo(Client_user user) { public Result updateUserInfo(Client_user user) {
user.setId(StpClientUtil.STP.getLoginIdAsLong()); user.setId(StpClientUtil.STP.getLoginIdAsLong());
user.setAvatar("https://tdesign.gtimg.com/mobile/demos/avatar1.png"); // user.setAvatar("https://tdesign.gtimg.com/mobile/demos/avatar1.png");
dao.updateIgnoreNull(user); dao.updateIgnoreNull(user);
return Result.success(user); return Result.success(user);
} }
@@ -1,6 +1,7 @@
package com.budwk.app.client.auth.service; package com.budwk.app.client.auth.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.utils.PwdUtil; import com.budwk.app.base.utils.PwdUtil;
@@ -69,6 +70,8 @@ public class ClientAuthServiceImpl implements ClientAuthService {
validateService.checkSMSCode(registerBody.getPhone(), registerBody.getSmsCode()); validateService.checkSMSCode(registerBody.getPhone(), registerBody.getSmsCode());
Client_user user = BeanUtil.copyProperties(registerBody, Client_user.class); Client_user user = BeanUtil.copyProperties(registerBody, Client_user.class);
int gender = IdcardUtil.getGenderByIdCard(user.getIdCard());
user.setSex(gender==1?"男":"女");
dao.insert(user); dao.insert(user);
StpClientUtil.STP.login(user.getId()); StpClientUtil.STP.login(user.getId());
StpClientUtil.STP.checkLogin(); StpClientUtil.STP.checkLogin();
@@ -24,6 +24,7 @@ import org.nutz.mvc.annotation.GET;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List; import java.util.List;
@IocBean @IocBean
@@ -95,7 +96,9 @@ public class ClientActivityController {
group.or(ActUser::getUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); group.or(ActUser::getUserId, "=", StpClientUtil.STP.getLoginIdAsLong());
group.or(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong()); group.or(ActUser::getSignUpUserId, "=", StpClientUtil.STP.getLoginIdAsLong());
ActUser actUser = dao.fetch(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(group)); ActUser actUser = dao.fetch(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId).and(group));
if (actUser == null) {
return Result.success(Collections.emptyList());
}
List<ActUser> list = dao.query(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId) List<ActUser> list = dao.query(ActUser.class, Cnd.where(ActUser::getActivityId, "=", activityId)
.and(ActUser::getSignUpUserId, "=", actUser.getSignUpUserId())); .and(ActUser::getSignUpUserId, "=", actUser.getSignUpUserId()));
return Result.success(list); return Result.success(list);
@@ -1,5 +1,6 @@
package com.budwk.app.client.module.activity.service.impl; package com.budwk.app.client.module.activity.service.impl;
import cn.hutool.core.util.IdcardUtil;
import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
@@ -62,6 +63,8 @@ public class ClientActivityServiceImpl extends BaseServiceImpl<Activity> impleme
clientUser.setPhone(user.getPhone()); clientUser.setPhone(user.getPhone());
clientUser.setIdCard(user.getIdCard()); clientUser.setIdCard(user.getIdCard());
clientUser.setUnitId(selfUser.getUnitId()); clientUser.setUnitId(selfUser.getUnitId());
int gender = IdcardUtil.getGenderByIdCard(clientUser.getIdCard());
clientUser.setSex(gender==1?"男":"女");
dao().insert(clientUser); dao().insert(clientUser);
} else { } else {
// 验证用户之前是不是已经报名 别人帮报 自己报 管理员报 // 验证用户之前是不是已经报名 别人帮报 自己报 管理员报
@@ -76,7 +79,7 @@ public class ClientActivityServiceImpl extends BaseServiceImpl<Activity> impleme
user.setActivityId(signVO.getActivityId()); user.setActivityId(signVO.getActivityId());
user.setUserId(clientUser.getId()); user.setUserId(clientUser.getId());
user.setUnitId(selfUser.getUnitId()); user.setUnitId(selfUser.getUnitId());
user.setUnitName(signVO.getUnitName()); user.setUnitName(selfUser.getUnit().getName());
user.setSignUpContacts(signVO.getContactName()); user.setSignUpContacts(signVO.getContactName());
user.setSignUpMobile(signVO.getContactPhone()); user.setSignUpMobile(signVO.getContactPhone());
user.setSignUpUserId(StpClientUtil.STP.getLoginIdAsLong()); user.setSignUpUserId(StpClientUtil.STP.getLoginIdAsLong());
@@ -20,6 +20,7 @@ import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
@@ -157,7 +158,7 @@ public class ActUserController {
@At @At
@SaCheckPermission("activity.user") @SaCheckPermission("activity.user")
@SLog(tag = "报名人员管理", msg = "删除报名人员") @SLog(tag = "报名人员管理", msg = "删除报名人员")
public Result doDeleteActUser(String id){ public Result doDeleteActUser(Long id){
dao.delete(ActUser.class, id); dao.delete(ActUser.class, id);
return Result.success(); return Result.success();
} }
@@ -171,10 +172,17 @@ public class ActUserController {
return Result.success(); return Result.success();
} }
@At
@SaCheckPermission("activity.user")
@SLog(tag = "报名人员管理", msg = "设置已签到")
public Result proxySignIn(Long id){
dao.update(ActUser.class, Chain.make("isSignIn",1).add("signInTime",LocalDateTime.now()),Cnd.where(ActUser::getId,"=",id));
return Result.success();
}
@At @At
@SaCheckPermission("activity.user") @SaCheckPermission("activity.user")
public Result findSignUserInfo(String id){ public Result findSignUserInfo(Long id){
return Result.success(dao.fetch(ActUser.class, Cnd.where(ActUser::getId, "=", id))); return Result.success(dao.fetch(ActUser.class, Cnd.where(ActUser::getId, "=", id)));
} }
@@ -85,7 +85,6 @@ public class ActWonderfulMomentController {
} }
@At @At
@SaCheckLogin(type = StpClientUtil.TYPE)
public Result getWonderfulMoment(@Param("id") Long id) { public Result getWonderfulMoment(@Param("id") Long id) {
Cnd cnd = Cnd.where("published", "=", true).andEX("id", "=", id); Cnd cnd = Cnd.where("published", "=", true).andEX("id", "=", id);
cnd.desc("publishTime"); cnd.desc("publishTime");
@@ -106,14 +105,12 @@ public class ActWonderfulMomentController {
} }
@At("/getWonderfulMomentById/?") @At("/getWonderfulMomentById/?")
@SaCheckLogin(type = StpClientUtil.TYPE)
public Result getWonderfulMomentById(Long id) { public Result getWonderfulMomentById(Long id) {
ActWonderfulMoment moment = wonderfulMomentService.fetch(id); ActWonderfulMoment moment = wonderfulMomentService.fetch(id);
return Result.success(moment); return Result.success(moment);
} }
@At("/handleWonderfulMoment/?") @At("/handleWonderfulMoment/?")
@SaCheckLogin(type = StpClientUtil.TYPE)
public Result handleWonderfulMoment(Long id) { public Result handleWonderfulMoment(Long id) {
ActWonderfulMoment moment = wonderfulMomentService.fetch(id); ActWonderfulMoment moment = wonderfulMomentService.fetch(id);
moment.setReadCount(moment.getReadCount() + 1); moment.setReadCount(moment.getReadCount() + 1);
@@ -167,7 +167,6 @@ public class ActivityManageController {
@At @At
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckLogin(type = StpClientUtil.TYPE)
public Result getActivity() { public Result getActivity() {
List<Activity> activityList = activityService.query(Cnd.NEW()); List<Activity> activityList = activityService.query(Cnd.NEW());
return Result.success(activityList); return Result.success(activityList);
@@ -37,7 +37,8 @@ public class SysHomeController {
// if (StpUtil.hasRole("sysadmin")) { // if (StpUtil.hasRole("sysadmin")) {
// return "beetl:/platform/sys/dashboard.html"; // return "beetl:/platform/sys/dashboard.html";
// } // }
return "beetl:/platform/sys/home.html"; // return "beetl:/platform/sys/home.html";
return "beetl:/platform/activity/manage/index.html";
} }
@At("/403") @At("/403")
@@ -51,7 +51,7 @@ public class ValidateService {
// throw new BaseException("请1分钟之后再试"); // throw new BaseException("请1分钟之后再试");
} }
ThreadUtil.execute(() -> { ThreadUtil.execute(() -> {
smsSendServer.sendCode(mobile, "验证码为:" + text); smsSendServer.sendCode(mobile, text);
log.debug("sms code:::" + text); log.debug("sms code:::" + text);
redisService.setex(RedisConstant.UCENTER_SMSCODE + mobile, 300, text); redisService.setex(RedisConstant.UCENTER_SMSCODE + mobile, 300, text);
redisService.setex(RedisConstant.UCENTER_SMSCODE + mobile + ":LOCK", 60, text); redisService.setex(RedisConstant.UCENTER_SMSCODE + mobile + ":LOCK", 60, text);
@@ -146,7 +146,7 @@ public class UploadController {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write("Invalid file path"); response.getWriter().write("Invalid file path");
} }
String fullPath = "D:/files" + filepath; String fullPath = "C:/files" + filepath;
File file = new File(fullPath); File file = new File(fullPath);
if (!file.exists() || !file.isFile()) { if (!file.exists() || !file.isFile()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+4 -4
View File
@@ -23,7 +23,7 @@ jetty:
#结合ftp使用,或用nginx代理ftp路径 #结合ftp使用,或用nginx代理ftp路径
#staticPath: E:/project/NutzWk/upload #staticPath: E:/project/NutzWk/upload
#开发模式静态资源 #开发模式静态资源
staticPathLocal: E:/project/hmd_gbhd/src/main/resources/static staticPathLocal: C:/dev/projects/hmc_gbhd/src/main/resources/static
security: security:
tokenName: token tokenName: token
@@ -52,9 +52,9 @@ redis:
#nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378 #nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378
jdbc: jdbc:
url: jdbc:mysql://192.168.21.207:3306/hmc_gbhd?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true url: jdbc:mysql://127.0.0.1:3306/hmc_gbhd?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root username: root
password: root password: dd3s@#2025
validationQuery: select 1 validationQuery: select 1
maxActive: 150 maxActive: 150
testWhileIdle: true testWhileIdle: true
@@ -69,7 +69,7 @@ xsssql:
beetl: beetl:
RESOURCE: RESOURCE:
#本地路径,开发时设置本地路径,便于调试 #本地路径,开发时设置本地路径,便于调试
rootLocal: E:/project/hmd_gbhd/src/main/resources/views/ rootLocal: C:/dev/projects/hmc_gbhd/src/main/resources/views/
root: views/ root: views/
DELIMITER_STATEMENT_START: '<!--#' DELIMITER_STATEMENT_START: '<!--#'
DELIMITER_STATEMENT_END: '#-->' DELIMITER_STATEMENT_END: '#-->'
@@ -66,7 +66,8 @@ module.exports = {
console.log(v) console.log(v)
if (v.code === 0) { if (v.code === 0) {
console.log(v.data) console.log(v.data)
insertImgFn(v.data) insertImgFn('/open/file/upload/download?filepath='+v.data)
// insertImgFn(v.data)
} else { } else {
this.$message.error(v.msg) this.$message.error(v.msg)
} }
@@ -40,13 +40,13 @@ const actQrCode = {
width: 150, width: 150,
height: 150 height: 150
}) })
signUpCode.makeCode("https://192.168.41.118:5173" + "/pages/activity/detail/index?id=" + this.actId) signUpCode.makeCode("https://3skj.ltd" + "/pages/activity/detail/index?id=" + this.actId)
let signInCode = new QRCode(document.getElementById("signInCode"), { let signInCode = new QRCode(document.getElementById("signInCode"), {
width: 150, width: 150,
height: 150 height: 150
}) })
signInCode.makeCode("https://192.168.41.118:5173" + "/pages/activity/scan-sign/index?id=" + this.actId) signInCode.makeCode("https://3skj.ltd" + "/pages/activity/scan-sign/index?id=" + this.actId)
}, },
download() { download() {
// 获取base64 // 获取base64
@@ -36,7 +36,6 @@ const itemForm = {
</el-table-column> </el-table-column>
<el-table-column label="图片"> <el-table-column label="图片">
<template #default="{row}"> <template #default="{row}">
{{row.img}}
<image-upload v-model="row.img" :maxCount="1"></image-upload> <image-upload v-model="row.img" :maxCount="1"></image-upload>
</template> </template>
</el-table-column> </el-table-column>
@@ -97,7 +97,7 @@ layout("/layouts/platform_1.html"){
{{row.isStay?'住宿':'不住宿'}} {{row.isStay?'住宿':'不住宿'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物资发放" prop="isGrant"> <el-table-column label="物品发放" prop="isGrant">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.isGrant" type="success">已发放</el-tag> <el-tag v-if="scope.row.isGrant" type="success">已发放</el-tag>
<el-tag v-else type="danger">未发放</el-tag> <el-tag v-else type="danger">未发放</el-tag>
@@ -106,9 +106,9 @@ layout("/layouts/platform_1.html"){
<el-table-column label="操作" fixed="right" width="200"> <el-table-column label="操作" fixed="right" width="200">
<template #default="{row}"> <template #default="{row}">
<el-button v-if="!row.isGrant || row.isGrant === 0" type="primary" size="mini" <el-button v-if="!row.isGrant || row.isGrant === 0" type="primary" size="mini"
@click="doGrant(row, true)">设为已发放物资 @click="doGrant(row, true)">设为已发放物品
</el-button> </el-button>
<el-button v-else type="danger" size="mini" @click="doGrant(row, false)">设为未发放物资</el-button> <el-button v-else type="danger" size="mini" @click="doGrant(row, false)">设为未发放物品</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -38,6 +38,30 @@ layout("/layouts/platform_1.html"){
clearable @keyup.enter.native="doSearch"></el-input> clearable @keyup.enter.native="doSearch"></el-input>
</div> </div>
</div> </div>
<div class="search-item">
<div class="search-item-label">签到状态</div>
<div class="search-item-option">
<el-select v-model="pageForm.isSignIn" placeholder="请选择发放状态" clearable>
<el-option label="已签到" :value="1"></el-option>
<el-option label="未签到" :value="0"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属单位</div>
<div class="search-item-option">
<el-select placeholder="请选择所属单位"
style="width: 100%;" clearable
filterable
@change="setModifyFormUnit"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
</div>
</div>
<div class="search-query"> <div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button> <el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
@@ -47,13 +71,8 @@ layout("/layouts/platform_1.html"){
<el-card shadow="never" class="mt-3"> <el-card shadow="never" class="mt-3">
<el-row type="flex" style="justify-content: flex-end" class="mb-3"> <el-row type="flex" style="justify-content: flex-end" class="mb-3">
<el-button type="primary" size="small" @click="openAddUser">添加报名人员</el-button> <el-button icon="el-icon-plus" type="primary" size="small" @click="openAddUser">添加报名人员</el-button>
<el-button type="primary" size="small" @click="doExport">导出</el-button> <el-button icon="el-icon-plus" type="primary" size="small" @click="doExport">导出</el-button>
<el-radio-group v-model="pageForm.isSignIn" type="primary" class="ml-3"@change="doSearch">
<el-radio-button :label="1">全部</el-radio-button>
<el-radio-button :label="2">已签到</el-radio-button>
<el-radio-button :label="3">未签到</el-radio-button>
</el-radio-group>
</el-row> </el-row>
<el-table v-loading="tableLoading" show-overflow-tooltip :data="tableData"> <el-table v-loading="tableLoading" show-overflow-tooltip :data="tableData">
<el-table-column label="序号" type="index" header-align="center" align="center" <el-table-column label="序号" type="index" header-align="center" align="center"
@@ -67,13 +86,15 @@ layout("/layouts/platform_1.html"){
<el-table-column label="报名时间" prop="signUpTime"></el-table-column> <el-table-column label="报名时间" prop="signUpTime"></el-table-column>
<el-table-column label="是否签到" prop="isSignIn"> <el-table-column label="是否签到" prop="isSignIn">
<template slot-scope="{row}"> <template slot-scope="{row}">
{{row.isSignIn?'已签到':'未签到'}} <el-tag v-if="row.isSignIn" size="mini" type="success">已签到</el-tag>
<el-tag v-else size="mini" type="info">未签到</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" width="250"> <el-table-column label="操作" fixed="right" width="300">
<template #default="scope"> <template #default="scope">
<el-button type="text" @click="openModify">修改</el-button> <el-button type="primary" size="mini" @click="proxySignIn(scope.row.id)" v-if="!scope.row.isSignIn">签到</el-button>
<el-button type="text" class="text-danger" @click="onTableRowDelete(scope.row.id)">删除</el-button> <el-button type="primary" size="mini" @click="openModify(scope.row)">修改</el-button>
<el-button type="danger" size="mini" @click="doRemove(scope.row.id)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -86,7 +107,14 @@ layout("/layouts/platform_1.html"){
<el-input v-model="formData.activityName" readonly></el-input> <el-input v-model="formData.activityName" readonly></el-input>
</el-form-item> </el-form-item>
<el-form-item label="参加单位" prop="unitName"> <el-form-item label="参加单位" prop="unitName">
<el-input v-model="formData.unitName" placeholder="请输入参加单位"></el-input> <el-select placeholder="请选择所属单位"
style="width: 100%;" clearable
@change="setFormDataUnit"
v-model="formData.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
<!-- <el-input v-model="formData.unitName" placeholder="请输入参加单位"></el-input>-->
</el-form-item> </el-form-item>
<el-form-item label="联系人" prop="contactName"> <el-form-item label="联系人" prop="contactName">
<el-input v-model="formData.contactName" placeholder="请输入联系人"></el-input> <el-input v-model="formData.contactName" placeholder="请输入联系人"></el-input>
@@ -104,8 +132,8 @@ layout("/layouts/platform_1.html"){
placeholder="请输入内容" placeholder="请输入内容"
@select="handleSelect($event, row)" @select="handleSelect($event, row)"
></el-autocomplete> ></el-autocomplete>
<!-- <el-input v-model="row.userName" maxlength="50"--> <!-- <el-input v-model="row.userName" maxlength="50"-->
<!-- placeholder="请输入姓名"></el-input>--> <!-- placeholder="请输入姓名"></el-input>-->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="性别" prop="sex" width="200"> <el-table-column label="性别" prop="sex" width="200">
@@ -185,7 +213,14 @@ layout("/layouts/platform_1.html"){
<el-input v-model="modifyForm.position"></el-input> <el-input v-model="modifyForm.position"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="所属单位" prop="unitName"> <el-form-item label="所属单位" prop="unitName">
<el-input v-model="modifyForm.unitName"></el-input> <el-select placeholder="请选择所属单位"
style="width: 100%;" clearable
@change="setModifyFormUnit"
v-model="modifyForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
<!-- <el-input v-model="modifyForm.unitName"></el-input>-->
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@@ -203,7 +238,6 @@ layout("/layouts/platform_1.html"){
data() { data() {
return { return {
pageForm: { pageForm: {
isSignIn: 1,
year: new Date().getFullYear() + '', year: new Date().getFullYear() + '',
}, },
activityList: [], activityList: [],
@@ -276,9 +310,40 @@ layout("/layouts/platform_1.html"){
contactPhone: [{required: true, message: '请填写联系电话', trigger: ['blur', 'change']}], contactPhone: [{required: true, message: '请填写联系电话', trigger: ['blur', 'change']}],
userList: [{required: true, message: '请添加报名人员', trigger: ['blur', 'change']}] userList: [{required: true, message: '请添加报名人员', trigger: ['blur', 'change']}]
}, },
units: [],
} }
}, },
methods: { methods: {
setFormDataUnit(val) {
if (!val) {
this.formData.unitName = ''
return
}
this.formData.unitName = this.units.find(item => item.id === this.formData.unitId).name
},
setModifyFormUnit(val) {
if (!val) {
this.modifyForm.unitName = ''
return
}
this.modifyForm.unitName = this.units.find(item => item.id === this.modifyForm.unitId).name
},
doRemove(id) {
this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post('/platform/activity/user/doDeleteActUser', {id})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
} else {
this.$message.warning('操作失败')
}
})
},
doExport() { doExport() {
window.open("/platform/activity/user/doExport?activityId=" + this.pageForm.activityId + "&searchKeyword=" + this.pageForm.searchKeyword) window.open("/platform/activity/user/doExport?activityId=" + this.pageForm.activityId + "&searchKeyword=" + this.pageForm.searchKeyword)
}, },
@@ -390,6 +455,21 @@ layout("/layouts/platform_1.html"){
} }
}) })
}, },
proxySignIn(id){
this.$confirm('您确定要设为已签到吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post('/platform/activity/user/proxySignIn', {id})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
} else {
this.$message.warning('操作失败')
}
})
},
async getActivityList(){ async getActivityList(){
const resp = await $.post('/platform/activity/user/getActivityList', { const resp = await $.post('/platform/activity/user/getActivityList', {
year: this.pageForm.year year: this.pageForm.year
@@ -401,10 +481,17 @@ layout("/layouts/platform_1.html"){
this.$set(this.pageForm, 'activityId', '') this.$set(this.pageForm, 'activityId', '')
} }
this.pageData() this.pageData()
},
async getUnits(){
const resp = await $.post('/open/common/units')
if (resp.code === 0) {
this.units = resp.data
}
} }
}, },
created() { created() {
this.getActivityList() this.getActivityList()
this.getUnits()
} }
}) })
</script> </script>
+3 -3
View File
@@ -3,7 +3,7 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarTitleText": "uni-app" "navigationBarTitleText": "趣味运动会"
} }
}, },
{ {
@@ -101,7 +101,7 @@
], ],
"globalStyle": { "globalStyle": {
"navigationBarTextStyle": "#000000", "navigationBarTextStyle": "#000000",
"navigationBarTitleText": "uni-app", "navigationBarTitleText": "趣味运动会",
"navigationBarBackgroundColor": "#ffffff", "navigationBarBackgroundColor": "#ffffff",
"backgroundColor": "#F8F8F8" "backgroundColor": "#F8F8F8"
}, },
@@ -118,7 +118,7 @@
"list": [ "list": [
{ {
"pagePath": "pages/index/index", "pagePath": "pages/index/index",
"text": "组件", "text": "首页",
"iconfont": { "iconfont": {
"text": "\ue64d", "text": "\ue64d",
"selectedText": "\ue64d", "selectedText": "\ue64d",
@@ -24,6 +24,7 @@ const viewData = ref(null);
function getWonderfulMoment() { function getWonderfulMoment() {
request.post('/platform/activity/wonderfulMoment/getWonderfulMomentById/' + momentId.value).then(res=>{ request.post('/platform/activity/wonderfulMoment/getWonderfulMomentById/' + momentId.value).then(res=>{
if(res.code === 0){ if(res.code === 0){
res.data.content = res?.data?.content.replaceAll('/open/file/upload/download?filepath=','')
viewData.value = res.data viewData.value = res.data
}else{ }else{
Toast({message: res.msg, theme: 'error'}); Toast({message: res.msg, theme: 'error'});
+2 -6
View File
@@ -106,6 +106,7 @@
<script setup> <script setup>
import {onMounted, ref} from "vue"; import {onMounted, ref} from "vue";
import {onLoad, onShow} from "@dcloudio/uni-app";
import {Toast} from "tdesign-mobile-vue"; import {Toast} from "tdesign-mobile-vue";
import {useRequest} from "@/utils/request"; import {useRequest} from "@/utils/request";
import moment from "moment"; import moment from "moment";
@@ -152,14 +153,9 @@ function handleWonderfulMoment(row) {
}) })
} }
onMounted(() => { onShow(() => {
getActivity() getActivity()
getWonderfulMoment() getWonderfulMoment()
uni.showToast({
title: '欢迎使用',
icon: 'none',
duration: 2000
})
}) })
+1 -1
View File
@@ -52,7 +52,7 @@
</div> </div>
<view class="title-content"> <view class="title-content">
<text class="main-title">HELLO,</text> <text class="main-title">第二届“钟声杯”直属工会趣味运动会</text>
<view class="sub-title-container"> <view class="sub-title-container">
<text class="sub-title">欢迎使用</text> <text class="sub-title">欢迎使用</text>
</view> </view>
+1 -1
View File
@@ -53,7 +53,7 @@
</div> </div>
<view class="title-content"> <view class="title-content">
<text class="main-title">JOIN US</text> <text class="main-title">第二届“钟声杯”直属工会趣味运动会</text>
<view class="sub-title-container"> <view class="sub-title-container">
<text class="sub-title">用户注册</text> <text class="sub-title">用户注册</text>
</view> </view>
+1 -1
View File
@@ -1,3 +1,3 @@
export const config = { export const config = {
fileDomain: 'http://localhost', fileDomain: 'https://3skj.ltd',
} }
+3 -2
View File
@@ -90,7 +90,7 @@ async function routeInterceptor(args, whiteList) {
} else { } else {
console.log('拦截导航,跳转到登录页') console.log('拦截导航,跳转到登录页')
// 保存用户尝试访问的页面,以便登录后跳回 // 保存用户尝试访问的页面,以便登录后跳回
uni.setStorageSync('REDIRECT_URL', targetUrl + args.query) uni.setStorageSync('REDIRECT_URL', targetUrl)
Dialog.confirm({ Dialog.confirm({
title: '提示', title: '提示',
@@ -122,6 +122,7 @@ export const getDefaultWhiteList = () => {
return [ return [
'/pages/index/index', '/pages/index/index',
'/pages/login/index', '/pages/login/index',
'/pages/login/register' '/pages/login/register',
'/pages/activity/list/index'
] ]
} }
+3 -3
View File
@@ -28,13 +28,13 @@ export default defineConfig({
} }
}, },
server: { server: {
https: { /* https: {
cert: fs.readFileSync(path.join(__dirname, 'src/ssl/localhost+2.pem')), cert: fs.readFileSync(path.join(__dirname, 'src/ssl/localhost+2.pem')),
key: fs.readFileSync(path.join(__dirname, 'src/ssl/localhost+2-key.pem')) key: fs.readFileSync(path.join(__dirname, 'src/ssl/localhost+2-key.pem'))
}, },*/
proxy: { proxy: {
'/api': { '/api': {
target: 'http://192.168.41.118:9090', target: 'http://119.91.224.39:9090/',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '') rewrite: (path) => path.replace(/^\/api/, '')
} }