This commit is contained in:
=
2025-10-19 18:46:32 +08:00
52 changed files with 413 additions and 136 deletions
@@ -204,7 +204,7 @@ public class FamilyActivityApplyController {
if(Lang.isEmpty(courseList)) { if(Lang.isEmpty(courseList)) {
return Result.success(new ArrayList<>()); return Result.success(new ArrayList<>());
} }
List<String> assortList = courseList.stream().map(FamilyCourse::getAssort).filter(StrUtil::isNotBlank).toList(); List<String> assortList = courseList.stream().map(FamilyCourse::getAssort).filter(StrUtil::isNotBlank).distinct().toList();
return Result.success(assortList); return Result.success(assortList);
} }
@@ -210,6 +210,9 @@ public class FamilyUserManageController {
excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22)); excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22));
for (FamilyCourse c : courseList) { for (FamilyCourse c : courseList) {
if(!c.isMobileSign()) {
continue;
}
String courseId = c.getId(); String courseId = c.getId();
String courseName = c.getCourseName(); String courseName = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList());
@@ -208,7 +208,7 @@ public class TrainSignUpApplyController {
if (Lang.isEmpty(courseList)) { if (Lang.isEmpty(courseList)) {
return Result.success(new ArrayList<>()); return Result.success(new ArrayList<>());
} }
List<String> assortList = courseList.stream().map(TrainSignUpCourse::getAssort).filter(StrUtil::isNotBlank).toList(); List<String> assortList = courseList.stream().map(TrainSignUpCourse::getAssort).filter(StrUtil::isNotBlank).distinct().toList();
return Result.success(assortList); return Result.success(assortList);
} }
@@ -208,6 +208,9 @@ public class TrainSignUpUserManageController {
excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22)); excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22));
for (TrainSignUpCourse c : courseList) { for (TrainSignUpCourse c : courseList) {
if(!c.isMobileSign()) {
continue;
}
String courseId = c.getId(); String courseId = c.getId();
String courseName = c.getCourseName(); String courseName = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList());
@@ -133,8 +133,8 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl<Tr
u.id as userId, u.id as userId,
u.loginname, u.loginname,
u.username, u.username,
u.unitname, u.unitName,
u.unionname, u.unionName,
u.sex, u.sex,
ifnull(tsuu.mobile, u.mobile) as mobile, ifnull(tsuu.mobile, u.mobile) as mobile,
tsuu.signUpTime, tsuu.signUpTime,
@@ -36,8 +36,8 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl<TrainSignUpBlack
u.username, u.username,
u.loginname, u.loginname,
ifnull(tsuu.mobile, u.mobile) as mobile, ifnull(tsuu.mobile, u.mobile) as mobile,
u.unitname, u.unitName,
u.unionname, u.unionName,
tsuc.courseName, tsuc.courseName,
tsuu.state, tsuu.state,
( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId $var) courseTotal, ( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId $var) courseTotal,
@@ -80,6 +80,7 @@ public class EvaluateMineController {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(info.year)", "=", year); cnd.andEX("YEAR(info.year)", "=", year);
cnd.and("info.loginName", "=", SecurityUtil.getUserLoginname()); cnd.and("info.loginName", "=", SecurityUtil.getUserLoginname());
cnd.desc("info.createdAt");
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination); return Result.success(pagination);
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.SysOfficeTemplateUtil; import com.budwk.app.base.utils.SysOfficeTemplateUtil;
@@ -10,6 +11,7 @@ import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.vo.ProcessTaskVO; import com.budwk.app.flow.vo.ProcessTaskVO;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply;
import com.budwk.app.zhgh.dayofficework.fund.member.service.FundMemberService; import com.budwk.app.zhgh.dayofficework.fund.member.service.FundMemberService;
import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.XWPFTemplate;
@@ -21,6 +23,7 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
@@ -51,7 +54,13 @@ public class FundMemberCommonController {
@At @At
@SaCheckPermission("fundMember") @SaCheckPermission("fundMember")
public Result info(@Valid String id) { public Result info(@Valid String id) {
FundMemberApply fundMember = fundMemberService.fetch(id); FundMemberApply fundMember;
Sys_user user = dao.fetch(Sys_user.class, Cnd.where("id", "=", id));
if (Lang.isNotEmpty(user)) {
fundMember = fundMemberService.fetch(Cnd.where("loginname", "=", user.getLoginname()));
} else {
fundMember = fundMemberService.fetch(id);
}
return Result.success(fundMember); return Result.success(fundMember);
} }
@@ -66,6 +75,9 @@ public class FundMemberCommonController {
docData.put("birthday", DateUtil.format(fundMember.getBirthday(), "yyyy年MM月dd日")); docData.put("birthday", DateUtil.format(fundMember.getBirthday(), "yyyy年MM月dd日"));
docData.put("joinWorkTime", DateUtil.format(fundMember.getJoinWorkTime(), "yyyy年MM月dd日")); docData.put("joinWorkTime", DateUtil.format(fundMember.getJoinWorkTime(), "yyyy年MM月dd日"));
docData.put("retireTime", DateUtil.format(fundMember.getRetireTime(), "yyyy年MM月dd日")); docData.put("retireTime", DateUtil.format(fundMember.getRetireTime(), "yyyy年MM月dd日"));
if (StrUtil.isNotBlank(fundMember.getAvatar())) {
docData.put("avatar", sysOfficeTemplateUtil.createPictureRenderData(fundMember.getAvatar()));
}
// 流程实例 // 流程实例
ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
@@ -8,12 +8,15 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.views.View_user; import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals; import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberHis; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberHis;
@@ -100,7 +103,11 @@ public class FundMemberQueryController {
public void exportExcel(Integer year, String unionId, HttpServletResponse response) { public void exportExcel(Integer year, String unionId, HttpServletResponse response) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("YEAR(submitTime)", "=", year); cnd.and("YEAR(submitTime)", "=", year);
cnd.andEX("unionId", "=", unionId); if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
} else {
cnd.andEX("unionId", "=", unionId);
}
cnd.andEX(FundMemberApply::getIsJoin, "=", 1); cnd.andEX(FundMemberApply::getIsJoin, "=", 1);
cnd.asc("unionId"); cnd.asc("unionId");
List<FundMemberApply> list = fundMemberService.query(cnd); List<FundMemberApply> list = fundMemberService.query(cnd);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.dayofficework.fund.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.constant.FlowConst;
@@ -12,6 +13,7 @@ import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply;
import com.budwk.app.zhgh.dayofficework.fund.member.service.FundMemberService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
@@ -37,6 +39,8 @@ public class FundMemberWriteController {
@Inject @Inject
private FlowEngine flowEngine; private FlowEngine flowEngine;
@Inject @Inject
private FundMemberService fundMemberService;
@Inject
private FlowCommonService flowCommonService; private FlowCommonService flowCommonService;
@At("") @At("")
@@ -51,6 +55,9 @@ public class FundMemberWriteController {
@ApiOperation("保存申请") @ApiOperation("保存申请")
@SLog(tag = "建言献策-填写申请", msg = "保存申请") @SLog(tag = "建言献策-填写申请", msg = "保存申请")
public Result save(@Param("data") FundMemberApply fundMember) { public Result save(@Param("data") FundMemberApply fundMember) {
if (StrUtil.isBlank(fundMember.getId())) {
fundMemberService.validateApply();
}
dao.insertOrUpdate(fundMember); dao.insertOrUpdate(fundMember);
return Result.success(); return Result.success();
} }
@@ -62,6 +69,9 @@ public class FundMemberWriteController {
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基金会员-填写申请", msg = "提交申请") @SLog(tag = "基金会员-填写申请", msg = "提交申请")
public Result submit(@Param("data") FundMemberApply fundMember) { public Result submit(@Param("data") FundMemberApply fundMember) {
if (StrUtil.isBlank(fundMember.getId())) {
fundMemberService.validateApply();
}
fundMember.setSubmitTime(new Date()); fundMember.setSubmitTime(new Date());
fundMember.setIsJoin(true); fundMember.setIsJoin(true);
dao.insertOrUpdate(fundMember); dao.insertOrUpdate(fundMember);
@@ -86,6 +96,9 @@ public class FundMemberWriteController {
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基金会员-填写申请", msg = "重新提交申请") @SLog(tag = "基金会员-填写申请", msg = "重新提交申请")
public Result submitAgain(@Param("data") FundMemberApply fundMember, @Param("taskId") Long taskId) { public Result submitAgain(@Param("data") FundMemberApply fundMember, @Param("taskId") Long taskId) {
if (StrUtil.isBlank(fundMember.getId())) {
fundMemberService.validateApply();
}
dao.insertOrUpdate(fundMember); dao.insertOrUpdate(fundMember);
Dict dict = Dict.create(); Dict dict = Dict.create();
@@ -103,4 +116,12 @@ public class FundMemberWriteController {
return Result.success(box); return Result.success(box);
} }
@At
@SaCheckPermission("fundMember.write")
@ApiOperation("校验是否有申请在流程中")
public Result validateApply(){
fundMemberService.validateApply();
return Result.success();
}
} }
@@ -4,4 +4,9 @@ import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply;
public interface FundMemberService extends BaseService<FundMemberApply> { public interface FundMemberService extends BaseService<FundMemberApply> {
/**
* 验证是否已经申请了
*/
void validateApply();
} }
@@ -1,14 +1,39 @@
package com.budwk.app.zhgh.dayofficework.fund.member.service.impl; package com.budwk.app.zhgh.dayofficework.fund.member.service.impl;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply; import com.budwk.app.zhgh.dayofficework.fund.member.models.FundMemberApply;
import com.budwk.app.zhgh.dayofficework.fund.member.service.FundMemberService; import com.budwk.app.zhgh.dayofficework.fund.member.service.FundMemberService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
@IocBean(args = {"refer:dao"}) @IocBean(args = {"refer:dao"})
public class FundMemberServiceImpl extends BaseServiceImpl<FundMemberApply> implements FundMemberService { public class FundMemberServiceImpl extends BaseServiceImpl<FundMemberApply> implements FundMemberService {
public FundMemberServiceImpl(Dao dao) { public FundMemberServiceImpl(Dao dao) {
super(dao); super(dao);
} }
@Override
public void validateApply() {
FundMemberApply apply = dao().fetch(FundMemberApply.class,
Cnd.where(FundMemberApply::getLoginName, "=", SecurityUtil.getUserLoginname())
.and("isJoin", "=", 1)
.desc("submitTime"));
if (Lang.isEmpty(apply)) {
return;
}
int count = dao().count(ProcessInstance.class, Cnd.where("businessNo", "=", apply.getId())
.and(ProcessInstance::getState, "=", ProcessTaskStateEnum.DOING.getCode()));
if (count > 0) {
throw new RuntimeException("您有申请流程正在进行中,请等待流程结束后再次操作");
}
}
} }
@@ -64,7 +64,7 @@ public class HonorManageController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
h.*, h.*,
u.loginname, u.loginName,
prize.`name` AS prizeName, prize.`name` AS prizeName,
type.`name` AS typeName, type.`name` AS typeName,
`level`.`name` AS levelName, `level`.`name` AS levelName,
@@ -208,7 +208,7 @@ public class LiteracyApplyController {
if (Lang.isEmpty(courseList)) { if (Lang.isEmpty(courseList)) {
return Result.success(new ArrayList<>()); return Result.success(new ArrayList<>());
} }
List<String> assortList = courseList.stream().map(LiteracyCourse::getAssort).filter(StrUtil::isNotBlank).toList(); List<String> assortList = courseList.stream().map(LiteracyCourse::getAssort).filter(StrUtil::isNotBlank).distinct().toList();
return Result.success(assortList); return Result.success(assortList);
} }
@@ -208,6 +208,9 @@ public class LiteracyUserManageController {
excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22)); excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22));
for (LiteracyCourse c : courseList) { for (LiteracyCourse c : courseList) {
if(!c.isMobileSign()) {
continue;
}
String courseId = c.getId(); String courseId = c.getId();
String courseName = c.getCourseName(); String courseName = c.getCourseName();
List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); List<NutMap> v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList());
@@ -100,7 +100,7 @@ public class MeetingMineController {
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("name", "like", "%" + pageForm.getSearchKeyword() + "%"); seg.or("name", "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or("name", "like", "%" + pageForm.getSearchKeyword() + "%"); seg.or("address", "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg); cnd.and(seg);
} }
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
@@ -7,6 +7,7 @@ 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;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings; import org.nutz.lang.Strings;
@@ -50,8 +51,11 @@ public class ExecutiveCommitteeMemberServiceImpl extends BaseServiceImpl impleme
cnd.andEX("op.unitId", "=", pageForm.getUnitId()); cnd.andEX("op.unitId", "=", pageForm.getUnitId());
cnd.andEX("it.unionid", "=", pageForm.getUnionId()); cnd.andEX("it.unionid", "=", pageForm.getUnionId());
cnd.andEX("op.delegationId", "=", pageForm.getDelegationId()); cnd.andEX("op.delegationId", "=", pageForm.getDelegationId());
if (Strings.isNotBlank(pageForm.getSearchName()) && Strings.isNotBlank(pageForm.getSearchKeyword())) { if (Strings.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(pageForm.getSearchName(), "LIKE", "%" + pageForm.getSearchKeyword() + "%"); SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("op.userName", pageForm.getSearchKeyword());
group.orLike("op.loginName", pageForm.getSearchKeyword());
cnd.and(group);
} }
cnd.desc("pushCount"); cnd.desc("pushCount");
cnd.asc("op.firstLetter"); cnd.asc("op.firstLetter");
@@ -0,0 +1,14 @@
package com.budwk.app.zhgh.staffmanage.personnelcheck.controller;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @version 1.0
* @Author FKY
* @nameCheckTaskGroupAuditController
* @Date 2025/10/17 16:46
* @注释
*/
@IocBean
public class CheckTaskGroupAuditController {
}
@@ -1,5 +1,16 @@
package com.budwk.app.zhgh.staffmanage.personnelcheck.controller; package com.budwk.app.zhgh.staffmanage.personnelcheck.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.staffmanage.personnelcheck.service.CheckTaskCommonService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/** /**
* @version 1.0 * @version 1.0
* @Author FKY * @Author FKY
@@ -7,5 +18,28 @@ package com.budwk.app.zhgh.staffmanage.personnelcheck.controller;
* @Date 2025/10/15 10:48 * @Date 2025/10/15 10:48
* @注释 * @注释
*/ */
@Slf4j
@IocBean
@Api("个人核对")
@Ok("json:full")
@At("/platform/personnel/check/verification/manage")
public class CheckTaskSingleController { public class CheckTaskSingleController {
@Inject
private Dao dao;
@Inject
private CheckTaskCommonService checkTaskCommonService;
@At("/")
@SaCheckPermission("personnel.check.verification.single")
@Ok("beetl:/platform/zhgh/staffmanage/personnelcheck/single/index.html")
public void index() {
}
@At
@SaCheckPermission("personnel.check.verification.single")
public Result getSingleCheckTask(){
return Result.success();
}
} }
@@ -1,6 +1,8 @@
package com.budwk.app.zhgh.staffmanage.personnelcheck.controller; package com.budwk.app.zhgh.staffmanage.personnelcheck.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
@@ -40,8 +42,8 @@ import org.nutz.mvc.upload.UploadAdaptor;
*/ */
@Slf4j @Slf4j
@IocBean @IocBean
@Ok("json:full")
@Api("核对任务") @Api("核对任务")
@Ok("json:full")
@At("/platform/personnel/check/verification/manage") @At("/platform/personnel/check/verification/manage")
public class CheckTaskVerificationController { public class CheckTaskVerificationController {
@@ -79,9 +81,6 @@ public class CheckTaskVerificationController {
@SaCheckPermission("personnel.check.verification.manage") @SaCheckPermission("personnel.check.verification.manage")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doAddOrModify(@Param("baseData") String data, TempFile file){ public Result doAddOrModify(@Param("baseData") String data, TempFile file){
log.info("=================================主体数据:{}", data);
log.info("=================================导入文件:{}", file);
CheckTaskVerificationVO vo = JSONUtil.toBean(data, CheckTaskVerificationVO.class); CheckTaskVerificationVO vo = JSONUtil.toBean(data, CheckTaskVerificationVO.class);
if (StrUtil.isNotBlank(vo.getId())) { if (StrUtil.isNotBlank(vo.getId())) {
@@ -89,14 +88,28 @@ public class CheckTaskVerificationController {
// 1.重新配置核对字段,filedConfigData // 1.重新配置核对字段,filedConfigData
dao.clear(CheckTaskFiledConfig.class, Cnd.where("taskId", "=", vo.getId())); dao.clear(CheckTaskFiledConfig.class, Cnd.where("taskId", "=", vo.getId()));
// 2.重新设置待核对人员表,personnelData // 2.重新设置待核对人员表,personnelData
// dao.clear(Check) dao.clear(CheckTaskPersonnel.class, Cnd.where("taskId", "=", vo.getId()));
} }
// 修改审核流程配置 // 插入逻辑
// 1.界面可能会对相关审核步骤做修改,修改审核流程配置
dao.update(vo.getBusinessConfig()); dao.update(vo.getBusinessConfig());
// 2.新增或者修改事项任务
CheckTaskVerification verification = new CheckTaskVerification();
verification.setId(vo.getId());
verification.setCreateTime(vo.getCreateTime() == null ? DateUtil.date() : vo.getCreateTime());
verification.setYear(DateUtil.year(verification.getCreateTime()));
dao.insertOrUpdate(verification);
// 3.往字段表里面插入数据,最好做下字段映射,把相关字段与数据库的字段对应
// todo 字段映射
// 4.读取文件,构造数据(动态字段 data),往 CheckTaskPersonnel 表中插入数据
// todo 读取文件 转换成数据
log.info("=================================数据转换:{}", vo);
return Result.success(); return Result.success();
} }
@@ -36,6 +36,12 @@ public class CheckTaskVerificationVO {
@ApiModelProperty("结束时间") @ApiModelProperty("结束时间")
private Date endTime; private Date endTime;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("状态")
private String status;
@ApiModelProperty("业务配置数据") @ApiModelProperty("业务配置数据")
private CheckTaskBusinessConfig businessConfig; private CheckTaskBusinessConfig businessConfig;
@@ -97,11 +97,11 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
for (NutMap union : mapUnions) { for (NutMap union : mapUnions) {
// 福利人数 // 福利人数
long teacherSum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId", "").equals(union.getString("id"))).count(); long teacherSum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count();
union.put("teacherSum", teacherSum); union.put("teacherSum", teacherSum);
// 已选人数 // 已选人数
long selectedNum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count(); long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count();
union.put("selectedNum", selectedNum); union.put("selectedNum", selectedNum);
// 未选人数 // 未选人数
@@ -109,7 +109,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
// 各选项的选择人数 // 各选项的选择人数
for (WelfareProjectSubjectOption option : welfareOptions) { for (WelfareProjectSubjectOption option : welfareOptions) {
long count = userSelections.stream().filter(v -> v.getString("welfareUnionId").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); long count = userSelections.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count();
union.put(option.getId(), count); union.put(option.getId(), count);
} }
} }
@@ -553,7 +553,7 @@ td.no-b {
} }
.el-transfer__buttons { .el-transfer__buttons {
width: 200px; /*width: 200px;*/
text-align: center; text-align: center;
} }
@@ -51,7 +51,6 @@ const userInfo = {
<el-table-column label="单选" width="160"> <el-table-column label="单选" width="160">
<template v-slot="{row}"> <template v-slot="{row}">
<el-radio <el-radio
:label="row.id"
@change.native="getCurrentRow(row)" @change.native="getCurrentRow(row)"
:disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber" :disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber"
v-model="afterAdjustCourse" v-model="afterAdjustCourse"
@@ -108,8 +108,8 @@ layout("/layouts/platform.html"){
{ label: "姓名", prop: "username" }, { label: "姓名", prop: "username" },
{ label: "工号", prop: "loginname" }, { label: "工号", prop: "loginname" },
{ label: "联系方式", prop: "mobile" }, { label: "联系方式", prop: "mobile" },
{ label: "单位", prop: "unitName", sortable: true }, { label: "单位", prop: "unitname", sortable: true },
{ label: "分工会", prop: "unionName", sortable: true }, { label: "分工会", prop: "unionname", sortable: true },
{ label: "课程", prop: "courseNames", sortable: true }, { label: "课程", prop: "courseNames", sortable: true },
{ label: "缺席次数", prop: "absentCount" }, { label: "缺席次数", prop: "absentCount" },
{ label: "是否黑名单", prop: "isDisabled", sortable: true } { label: "是否黑名单", prop: "isDisabled", sortable: true }
@@ -192,7 +192,7 @@ var ACTIVITY_SPORTS_APPLY_USER = {
prop="mobile" width="150"> prop="mobile" width="150">
<template v-slot="{row}"> <template v-slot="{row}">
<el-input placeholder="请输入联系方式" <el-input placeholder="请输入联系方式"
v-model="row.mobile"></el-input> v-model="row.mobile" maxlength="11"></el-input>
</template> </template>
</el-table-column> </el-table-column>
@@ -18,6 +18,13 @@ layout("/layouts/platform.html"){
.el-carousel__container { .el-carousel__container {
height: 250px !important; height: 250px !important;
} }
.one-line {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
<guava ref="guava"> <guava ref="guava">
@@ -125,10 +132,13 @@ layout("/layouts/platform.html"){
报名未开始 报名未开始
</el-tag> </el-tag>
</div> </div>
<div class="text e-item"> <el-tooltip :disabled="item.address.length <= 15"
<span style="color: gray">活动地址:</span> :content="item.address" placement="top">
{{item.address}} <div class="text e-item one-line">
</div> <span style="color: gray">活动地址:</span>
{{ item.address }}
</div>
</el-tooltip>
<div class="text e-item"> <div class="text e-item">
<span style="color: gray">报名时间:</span> <span style="color: gray">报名时间:</span>
{{$moment(item.applyStartTime).format('YYYY/MM/DD HH:mm')}} {{$moment(item.applyStartTime).format('YYYY/MM/DD HH:mm')}}
@@ -7,7 +7,7 @@ layout("/layouts/platform.html"){
<template> <template>
<el-card shadow="never"> <el-card shadow="never">
<search @search="activityInfoData"> <search @search="activityInfoData">
<search-item label=""> <search-item label="年度">
<el-date-picker <el-date-picker
@change="activityInfoData" @change="activityInfoData"
placeholder="选择年" placeholder="选择年"
@@ -40,12 +40,12 @@ layout("/layouts/platform.html"){
</el-select> </el-select>
</search-item> </search-item>
<search-item label="院级工会"> <search-item label="所属工会">
<el-select <el-select
@change="unionIdChange" @change="unionIdChange"
clearable clearable
filterable filterable
placeholder="院级工会筛选" placeholder="请选择所属工会"
style="width: 100%; font-weight: bold" style="width: 100%; font-weight: bold"
v-model="pageForm.unionid" v-model="pageForm.unionid"
> >
@@ -51,7 +51,6 @@ const userInfo = {
<el-table-column label="单选" width="160"> <el-table-column label="单选" width="160">
<template v-slot="{row}"> <template v-slot="{row}">
<el-radio <el-radio
:label="row.id"
@change.native="getCurrentRow(row)" @change.native="getCurrentRow(row)"
:disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber" :disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber"
v-model="afterAdjustCourse" v-model="afterAdjustCourse"
@@ -206,6 +205,9 @@ const userInfo = {
async getCourse(val) { async getCourse(val) {
const {data} = await this.$axios.post(loc() + "/getCourse", {activityId: val}) const {data} = await this.$axios.post(loc() + "/getCourse", {activityId: val})
this.courseList = data this.courseList = data
},
async getUnitList() {
this.unitList = await this.$businessTool.listUnit(this.registerForm.unionId)
} }
}, },
async created() { async created() {
@@ -108,8 +108,8 @@ layout("/layouts/platform.html"){
{ label: "姓名", prop: "username" }, { label: "姓名", prop: "username" },
{ label: "工号", prop: "loginname" }, { label: "工号", prop: "loginname" },
{ label: "联系方式", prop: "mobile" }, { label: "联系方式", prop: "mobile" },
{ label: "单位", prop: "unitName", sortable: true }, { label: "单位", prop: "unitname", sortable: true },
{ label: "分工会", prop: "unionName", sortable: true }, { label: "分工会", prop: "unionname", sortable: true },
{ label: "课程", prop: "courseNames", sortable: true }, { label: "课程", prop: "courseNames", sortable: true },
{ label: "缺席次数", prop: "absentCount" }, { label: "缺席次数", prop: "absentCount" },
{ label: "是否黑名单", prop: "isDisabled", sortable: true } { label: "是否黑名单", prop: "isDisabled", sortable: true }
@@ -145,7 +145,7 @@ layout("/layouts/platform.html"){
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$axios.post('/platform/article/write/submitAgain', { this.$axios.post('/platform/article/write/submitAgain', {
info: JSON.stringify(this.formData), article: JSON.stringify(this.formData),
taskId: GetQueryString("taskId") taskId: GetQueryString("taskId")
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
@@ -236,7 +236,6 @@ layout("/layouts/platform.html"){
openAdd() { openAdd() {
this.stepActive = 0 this.stepActive = 0
this.dialogVisible = true this.dialogVisible = true
this.formData={}
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.formRef.resetFields() this.$refs.formRef.resetFields()
}) })
@@ -60,6 +60,10 @@ layout("/layouts/platform.html"){
}, },
methods: { methods: {
openApply(row) { openApply(row) {
if(this.$moment().isAfter(this.$moment(row.endTime))) {
this.$message.warning('申请时间已截止')
return
}
$.post("/platform/evaluate/apply/valid", {id: row.id}).then((res) => { $.post("/platform/evaluate/apply/valid", {id: row.id}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
const {msg, data} = res const {msg, data} = res
@@ -16,7 +16,9 @@ const fundMemberInfo = {
<el-descriptions-item label="家庭住址">{{viewData.address}}</el-descriptions-item> <el-descriptions-item label="家庭住址">{{viewData.address}}</el-descriptions-item>
<el-descriptions-item label="手机电话">{{viewData.mobile}}</el-descriptions-item> <el-descriptions-item label="手机电话">{{viewData.mobile}}</el-descriptions-item>
<el-descriptions-item label="住宅号码">{{viewData.homePhone}}</el-descriptions-item> <el-descriptions-item label="住宅号码">{{viewData.homePhone}}</el-descriptions-item>
<el-descriptions-item label="照片">{{viewData.avatar}}</el-descriptions-item> <el-descriptions-item label="照片">
<img :src="viewData.avatar" alt="" style="width: 120px;height: 150px" v-if="viewData.avatar">
</el-descriptions-item>
</el-descriptions> </el-descriptions>
<template v-for="task in doneTasks"> <template v-for="task in doneTasks">
@@ -64,8 +64,9 @@ layout("/layouts/platform.html"){
</el-table> </el-table>
<!--#include("/layouts/pagination.html"){}#--> <!--#include("/layouts/pagination.html"){}#-->
</el-card> </el-card>
<template #edit>
<template #edit>
<fund-member-info ref="fundMemberInfoRef"></fund-member-info>
</template> </template>
</guava> </guava>
</div> </div>
@@ -82,12 +82,12 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="手机号码" prop="mobile"> <el-form-item label="手机号码" prop="mobile">
<el-input v-model="formData.mobile" placeholder="请输入手机号码"></el-input> <el-input v-model="formData.mobile" placeholder="请输入手机号码" maxlength="11"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="住宅号码" prop="homePhone"> <el-form-item label="住宅号码" prop="homePhone">
<el-input v-model="formData.homePhone" placeholder="请输入住宅电话"></el-input> <el-input v-model="formData.homePhone" placeholder="请输入住宅电话" maxlength="20"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -209,7 +209,7 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$axios.post('/platform/suggestionBox/write/submitAgain', { this.$axios.post('/platform/fundMember/write/submitAgain', {
data: JSON.stringify(this.formData), data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId") taskId: GetQueryString("taskId")
}).then(res => { }).then(res => {
@@ -244,10 +244,14 @@ layout("/layouts/platform.html"){
idCard: idCard idCard: idCard
} }
} }
} },
}, },
created() { created() {
this.init() this.init()
if(!this.bizId){
this.$axios.post('/platform/fundMember/write/validateApply')
}
} }
}) })
</script> </script>
@@ -34,7 +34,7 @@ layout("/layouts/platform.html"){
</search-item> </search-item>
<search-item label="获奖工会"> <search-item label="获奖工会">
<el-select v-model="pageForm.unionName" placeholder="请选择获奖工会" @change="doSearch" style="width: 100%" clearable> <el-select v-model="pageForm.unionName" placeholder="请选择获奖工会" @change="doSearch" style="width: 100%" clearable>
<el-option v-for="o in unionList" :key="o.id" :label="o.unionname" :value="o.unionname"></el-option> <el-option v-for="o in unionList" :key="o.id" :label="o.name" :value="o.id"></el-option>
</el-select> </el-select>
</search-item> </search-item>
</search> </search>
@@ -262,8 +262,7 @@ layout("/layouts/platform.html"){
unitName unitName
}, },
openEdit(row) { openEdit(row) {
this.$store.dispatch("pjaxRoute", "/platform/honor/registration?id=" + row.id) commonUtil.pjaxPush("/platform/honor/registration?id=" + row.id)
// window.location.href = "/platform/honor/registration?id=" + row.id
}, },
async doDelete(row) { async doDelete(row) {
const { id } = row const { id } = row
@@ -325,6 +324,7 @@ layout("/layouts/platform.html"){
} }
}, },
async honorTypeChange(val) { async honorTypeChange(val) {
this.tableData = []
this.honorPrizeList = await this.getHonorPrize(val) this.honorPrizeList = await this.getHonorPrize(val)
const data = this.honorTypeList.find((v) => v.id === val) const data = this.honorTypeList.find((v) => v.id === val)
if (data) { if (data) {
@@ -334,6 +334,7 @@ layout("/layouts/platform.html"){
} }
}, },
async created() { async created() {
this.unionList = await this.$businessTool.listUnion()
await this.initData() await this.initData()
await this.pageData() await this.pageData()
} }
@@ -230,9 +230,9 @@ layout("/layouts/platform.html"){
</el-row> </el-row>
<el-row type="flex" :gutter="20"> <el-row type="flex" :gutter="20">
<el-col :span="12" v-if="formData.honorType== 'HONOR_LIST'"> <el-col :span="12" v-if="formData.queryTypeCode == 'HONOR_LIST'">
<el-form-item label="参加比赛名称" prop="gameName"> <el-form-item label="参加比赛名称" prop="gameName">
<el-input v-model="formData.gameName" maxlength="100"></el-input> <el-input v-model="formData.gameName" maxlength="100" placeholder="请输入参加比赛名称"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@@ -303,7 +303,7 @@ layout("/layouts/platform.html"){
if (res.code === 0) { if (res.code === 0) {
this.$message.success("操作成功,即将跳转至台账界面") this.$message.success("操作成功,即将跳转至台账界面")
setTimeout(() => { setTimeout(() => {
pjaxReplace("/platform/honor/manage") commonUtil.pjaxPush("/platform/honor/manage")
}, 500) }, 500)
} else { } else {
this.$message.error(res.msg) this.$message.error(res.msg)
@@ -423,6 +423,7 @@ layout("/layouts/platform.html"){
}, },
created() { created() {
this.initData() this.initData()
this.isEdit = GetQueryString("id")
if (GetQueryString("id")) { if (GetQueryString("id")) {
this.findData(GetQueryString("id")) this.findData(GetQueryString("id"))
} }
@@ -51,7 +51,6 @@ const userInfo = {
<el-table-column label="单选" width="160"> <el-table-column label="单选" width="160">
<template v-slot="{row}"> <template v-slot="{row}">
<el-radio <el-radio
:label="row.id"
@change.native="getCurrentRow(row)" @change.native="getCurrentRow(row)"
:disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber" :disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber"
v-model="afterAdjustCourse" v-model="afterAdjustCourse"
@@ -108,8 +108,8 @@ layout("/layouts/platform.html"){
{ label: "姓名", prop: "username" }, { label: "姓名", prop: "username" },
{ label: "工号", prop: "loginname" }, { label: "工号", prop: "loginname" },
{ label: "联系方式", prop: "mobile" }, { label: "联系方式", prop: "mobile" },
{ label: "所属工会", prop: "unionName", sortable: true }, { label: "所属工会", prop: "unionname", sortable: true },
{ label: "所属单位", prop: "unitName", sortable: true }, { label: "所属单位", prop: "unitname", sortable: true },
{ label: "课程", prop: "courseNames", sortable: true }, { label: "课程", prop: "courseNames", sortable: true },
{ label: "缺席次数", prop: "absentCount" }, { label: "缺席次数", prop: "absentCount" },
{ label: "是否黑名单", prop: "isDisabled", sortable: true } { label: "是否黑名单", prop: "isDisabled", sortable: true }
@@ -231,6 +231,10 @@ const basicForm = {
}, },
methods: { methods: {
next() { next() {
if(!this.formData.typeId) {
this.$message.warning('请选择会议类型')
return
}
const type = this.typeOptions.find(o => o.id === this.formData.typeId) const type = this.typeOptions.find(o => o.id === this.formData.typeId)
if(type.designId === 'JDHHY' && !this.formData.teacherCongressSessionId) { if(type.designId === 'JDHHY' && !this.formData.teacherCongressSessionId) {
this.$message.warning('请选择所属教代会') this.$message.warning('请选择所属教代会')
@@ -6,18 +6,8 @@ layout("/layouts/platform.html"){
<guava ref="guava"> <guava ref="guava">
<el-card shadow="never"> <el-card shadow="never">
<search @search="doSearch"> <search @search="doSearch">
<search-item label="关键字"> <search-item label="姓名/工号">
<el-input v-model="pageForm.searchKeyword" placeholder="请填写内容"> <el-input v-model="pageForm.searchKeyword" placeholder="请输入姓名或工号"></el-input>
<el-select
slot="prepend"
v-model="pageForm.searchName"
placeholder="查询"
style="width: 100px;"
>
<el-option label="工号" value="op.loginName"></el-option>
<el-option label="姓名" value="op.userName"></el-option>
</el-select>
</el-input>
</search-item> </search-item>
<search-item label="教代会"> <search-item label="教代会">
<el-select <el-select
@@ -0,0 +1,25 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
formData: {}
}
},
methods: {
},
created() {
}
})
</script>
<!--#
}
#-->
@@ -111,6 +111,7 @@ const filterUser = {
</el-card> </el-card>
<el-card shadow="never"> <el-card shadow="never">
<table-tool label="此名单只显示未在此福利项目中的人员"></table-tool>
<el-table :data="tableData" <el-table :data="tableData"
@sort-change="pageOrder" @sort-change="pageOrder"
ref="tableRef" ref="tableRef"
@@ -224,12 +225,17 @@ const filterUser = {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(async () => { }).then(async () => {
this.submitLoading = true;
try { try {
const loading = this.$loading({
lock: true,
text: "数据保存中,请稍后...",
spinner: "el-icon-loading"
})
const { code, data, msg } = await this.$axios.post("/platform/welfare/project/mange/addWelfareUser", { const { code, data, msg } = await this.$axios.post("/platform/welfare/project/mange/addWelfareUser", {
pageForm: JSON.stringify(this.pageForm), pageForm: JSON.stringify(this.pageForm),
projectId: this.projectId projectId: this.projectId
}) })
loading.close()
if (code === 0) { if (code === 0) {
this.$message.success(msg) this.$message.success(msg)
this.visible = false this.visible = false
@@ -114,7 +114,7 @@ layout("/layouts/platform.html"){
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col span="12"> <el-col :span="12">
<el-form-item prop="provideTime" label="发放时间"> <el-form-item prop="provideTime" label="发放时间">
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
@@ -12,7 +12,7 @@ const welfareOption = {
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" header-align="center" label="图片" width="120"> <el-table-column align="center" header-align="center" label="图片" width="200">
<template slot-scope="{row}"> <template slot-scope="{row}">
<file-upload :upload_number="1" :value.sync="row.imgUrl" <file-upload :upload_number="1" :value.sync="row.imgUrl"
accept=".jpg,.jpeg,.png" accept=".jpg,.jpeg,.png"
@@ -157,32 +157,32 @@ const welfareOption = {
}, },
style: /*language=CSS*/ ` style: /*language=CSS*/ `
.welfare-option { /deep/ .welfare-option {
} }
.welfare-option .el-card__body{ /deep/ .welfare-option .el-card__body{
padding: 0; padding: 0;
} }
.welfare-option .el-upload-list__item{ /deep/ .welfare-option .el-upload-list__item{
width: 100px; width: 100px;
height: 100px; height: 100px;
} }
.welfare-option .imgUrl .el-upload--picture-card { /deep/ .welfare-option .imgUrl .el-upload--picture-card {
width: 100px; width: 100px;
height: 100px; height: 100px;
} }
.welfare-option .imgUrl .el-upload--picture-card i { /deep/ .welfare-option .imgUrl .el-upload--picture-card i {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.preview-image { /deep/ .preview-image {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: block; display: block;
@@ -238,10 +238,16 @@ const addUser = {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(async () => { }).then(async () => {
const loading = this.$loading({
lock: true,
text: "数据保存中,请稍后...",
spinner: "el-icon-loading"
})
const { code, data, msg } = await this.$axios.post("/platform/welfare/list/mange/addWelfareUser", { const { code, data, msg } = await this.$axios.post("/platform/welfare/list/mange/addWelfareUser", {
pageForm: JSON.stringify(this.pageForm), pageForm: JSON.stringify(this.pageForm),
projectId: this.projectId projectId: this.projectId
}) })
loading.close()
if (code === 0) { if (code === 0) {
this.$message.success(msg) this.$message.success(msg)
this.visible = false this.visible = false
@@ -30,6 +30,12 @@ layout("/layouts/platform_h5.html"){
</van-dropdown-menu> </van-dropdown-menu>
</van-sticky> </van-sticky>
<van-tabs v-if="assortList.length > 0" type="card" color="#1867B0"
style="margin-top: 10px" @click="tabClick">
<van-tab v-for="item in assortList" :name="item" :title="item">
</van-tab>
</van-tabs>
<table-list api="/platform/family/apply/pageData" <table-list api="/platform/family/apply/pageData"
:page_form.sync="pageForm" :page_form.sync="pageForm"
ref="tableListRef" ref="tableListRef"
@@ -117,6 +123,7 @@ layout("/layouts/platform_h5.html"){
courseTypeId: null, courseTypeId: null,
activityId: GetQueryString('id'), activityId: GetQueryString('id'),
dataType: GetQueryString('dataType'), dataType: GetQueryString('dataType'),
assortTypes: [],
}, },
typeOptions: [], typeOptions: [],
assortOptions: [], assortOptions: [],
@@ -125,10 +132,18 @@ layout("/layouts/platform_h5.html"){
introduceRow: {}, introduceRow: {},
activity: {}, activity: {},
assortList: [],
weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'}, weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'},
} }
}, },
methods: { methods: {
tabClick(name) {
this.pageForm.assortTypes = []
this.pageForm.assortTypes.push(name)
this.pageForm.assortTypes = JSON.stringify(this.pageForm.assortTypes)
this.doSearch()
},
refresh() { refresh() {
this.doSearch() this.doSearch()
}, },
@@ -197,6 +212,7 @@ layout("/layouts/platform_h5.html"){
} }
}, },
async onReady() { async onReady() {
this.queryCourseAssort()
const typeList = await this.getCourseTypeList() const typeList = await this.getCourseTypeList()
this.sourceTypeOptions = clone(typeList) this.sourceTypeOptions = clone(typeList)
this.typeOptions = [ this.typeOptions = [
@@ -221,6 +237,15 @@ layout("/layouts/platform_h5.html"){
const resp = await this.$axios.post("/platform/family/type/getAllType") const resp = await this.$axios.post("/platform/family/type/getAllType")
return resp.data return resp.data
}, },
queryCourseAssort() {
this.$axios.post("/platform/family/apply/queryCourseAssort", {activityId: this.pageForm.activityId})
.then((resp) => {
this.assortList = resp.data
if(this.assortList.length > 0) {
this.pageForm.assortTypes = JSON.stringify([this.assortList[0]])
}
})
},
doSearch() { doSearch() {
this.$nextTick(() => { this.$nextTick(() => {
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
@@ -24,6 +24,12 @@ layout("/layouts/platform_h5.html"){
</van-dropdown-menu> </van-dropdown-menu>
</van-sticky> </van-sticky>
<van-tabs v-if="assortList.length > 0" type="card" color="#1867B0"
style="margin-top: 10px" @click="tabClick">
<van-tab v-for="item in assortList" :name="item" :title="item">
</van-tab>
</van-tabs>
<table-list api="/platform/trainSignUp/apply/pageData" <table-list api="/platform/trainSignUp/apply/pageData"
:page_form.sync="pageForm" :page_form.sync="pageForm"
ref="tableListRef" ref="tableListRef"
@@ -110,6 +116,7 @@ layout("/layouts/platform_h5.html"){
courseTypeId: null, courseTypeId: null,
activityId: GetQueryString('id'), activityId: GetQueryString('id'),
dataType: GetQueryString('dataType'), dataType: GetQueryString('dataType'),
assortTypes: [],
}, },
typeOptions: [], typeOptions: [],
assortOptions: [], assortOptions: [],
@@ -118,11 +125,18 @@ layout("/layouts/platform_h5.html"){
introduceRow: {}, introduceRow: {},
activity: {}, activity: {},
assortList: [],
weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'}, weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'},
} }
}, },
methods: { methods: {
tabClick(name) {
this.pageForm.assortTypes = []
this.pageForm.assortTypes.push(name)
this.pageForm.assortTypes = JSON.stringify(this.pageForm.assortTypes)
this.doSearch()
},
refresh() { refresh() {
this.doSearch() this.doSearch()
}, },
@@ -191,6 +205,7 @@ layout("/layouts/platform_h5.html"){
} }
}, },
async onReady() { async onReady() {
this.queryCourseAssort()
const typeList = await this.getCourseTypeList() const typeList = await this.getCourseTypeList()
this.sourceTypeOptions = clone(typeList) this.sourceTypeOptions = clone(typeList)
this.typeOptions = [ this.typeOptions = [
@@ -215,6 +230,15 @@ layout("/layouts/platform_h5.html"){
const resp = await this.$axios.post("/platform/trainSignUp/type/getAllType") const resp = await this.$axios.post("/platform/trainSignUp/type/getAllType")
return resp.data return resp.data
}, },
queryCourseAssort() {
this.$axios.post("/platform/trainSignUp/apply/queryCourseAssort", {activityId: this.pageForm.activityId})
.then((resp) => {
this.assortList = resp.data
if(this.assortList.length > 0) {
this.pageForm.assortTypes = JSON.stringify([this.assortList[0]])
}
})
},
doSearch() { doSearch() {
this.$nextTick(() => { this.$nextTick(() => {
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
@@ -24,6 +24,12 @@ layout("/layouts/platform_h5.html"){
</van-dropdown-menu> </van-dropdown-menu>
</van-sticky> </van-sticky>
<van-tabs v-if="assortList.length > 0" type="card" color="#1867B0"
style="margin-top: 10px" @click="tabClick">
<van-tab v-for="item in assortList" :name="item" :title="item">
</van-tab>
</van-tabs>
<table-list api="/platform/literacy/apply/pageData" <table-list api="/platform/literacy/apply/pageData"
:page_form.sync="pageForm" :page_form.sync="pageForm"
ref="tableListRef" ref="tableListRef"
@@ -110,6 +116,7 @@ layout("/layouts/platform_h5.html"){
courseTypeId: null, courseTypeId: null,
activityId: GetQueryString('id'), activityId: GetQueryString('id'),
dataType: GetQueryString('dataType'), dataType: GetQueryString('dataType'),
assortTypes: [],
}, },
typeOptions: [], typeOptions: [],
assortOptions: [], assortOptions: [],
@@ -118,11 +125,18 @@ layout("/layouts/platform_h5.html"){
introduceRow: {}, introduceRow: {},
activity: {}, activity: {},
assortList: [],
weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'}, weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'},
} }
}, },
methods: { methods: {
tabClick(name) {
this.pageForm.assortTypes = []
this.pageForm.assortTypes.push(name)
this.pageForm.assortTypes = JSON.stringify(this.pageForm.assortTypes)
this.doSearch()
},
refresh() { refresh() {
this.doSearch() this.doSearch()
}, },
@@ -191,6 +205,7 @@ layout("/layouts/platform_h5.html"){
} }
}, },
async onReady() { async onReady() {
this.queryCourseAssort()
const typeList = await this.getCourseTypeList() const typeList = await this.getCourseTypeList()
this.sourceTypeOptions = clone(typeList) this.sourceTypeOptions = clone(typeList)
this.typeOptions = [ this.typeOptions = [
@@ -215,6 +230,15 @@ layout("/layouts/platform_h5.html"){
const resp = await this.$axios.post("/platform/literacy/type/getAllType") const resp = await this.$axios.post("/platform/literacy/type/getAllType")
return resp.data return resp.data
}, },
queryCourseAssort() {
this.$axios.post("/platform/literacy/apply/queryCourseAssort", {activityId: this.pageForm.activityId})
.then((resp) => {
this.assortList = resp.data
if(this.assortList.length > 0) {
this.pageForm.assortTypes = JSON.stringify([this.assortList[0]])
}
})
},
doSearch() { doSearch() {
this.$nextTick(() => { this.$nextTick(() => {
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
@@ -258,34 +258,34 @@ const selectView = {
} }
}, },
style: /*language=CSS*/ ` style: /*language=CSS*/ `
.welfare-view { /deep/ .welfare-view {
background: #f7f8fa; background: #f7f8fa;
overflow-y: auto; overflow-y: auto;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
} }
/* 内容区域样式 */ /* 内容区域样式 */
.welfare-view__content { /deep/ .welfare-view__content {
padding: 16px; padding: 16px;
height: 100%; height: 100%;
} }
/* 卡片通用样式 */ /* 卡片通用样式 */
.welfare-card { /deep/ .welfare-card {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
margin-bottom: 12px; margin-bottom: 12px;
overflow: hidden; overflow: hidden;
} }
.welfare-card__header { /deep/ .welfare-card__header {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 16px; padding: 16px;
position: relative; position: relative;
} }
.welfare-card__header::after { /deep/ .welfare-card__header::after {
content: ''; content: '';
position: absolute; position: absolute;
left: 16px; left: 16px;
@@ -296,64 +296,64 @@ const selectView = {
transform: scaleY(0.5); transform: scaleY(0.5);
} }
.welfare-card__header i { /deep/ .welfare-card__header i {
font-size: 16px; font-size: 16px;
margin-right: 6px; margin-right: 6px;
color: var(--color-primary); color: var(--color-primary);
} }
.welfare-card__header span { /deep/ .welfare-card__header span {
font-size: 15px; font-size: 15px;
font-weight: 500; font-weight: 500;
color: #323233; color: #323233;
} }
.welfare-card__content { /deep/ .welfare-card__content {
padding: 16px; padding: 16px;
} }
/* 信息行样式 */ /* 信息行样式 */
.info-row { /deep/ .info-row {
display: flex; display: flex;
margin-bottom: 12px; margin-bottom: 12px;
align-items: center; align-items: center;
} }
.info-row:last-child { /deep/ .info-row:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.info-row__label { /deep/ .info-row__label {
width: 70px; width: 70px;
color: #969799; color: #969799;
font-size: 14px; font-size: 14px;
flex-shrink: 0; flex-shrink: 0;
} }
.info-row__value { /deep/ .info-row__value {
flex: 1; flex: 1;
color: #323233; color: #323233;
font-size: 14px; font-size: 14px;
min-width: 0; min-width: 0;
} }
.info-row--time { /deep/ .info-row--time {
align-items: flex-start; align-items: flex-start;
} }
.info-row--time .info-row__value { /deep/ .info-row--time .info-row__value {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 4px; gap: 4px;
} }
.time-item { /deep/ .time-item {
position: relative; position: relative;
padding-left: 42px; padding-left: 42px;
line-height: 20px; line-height: 20px;
} }
.time-item--start::before { /deep/ .time-item--start::before {
content: "开始:"; content: "开始:";
position: absolute; position: absolute;
left: 0; left: 0;
@@ -361,7 +361,7 @@ const selectView = {
font-size: 12px; font-size: 12px;
} }
.time-item--end::before { /deep/ .time-item--end::before {
content: "结束:"; content: "结束:";
position: absolute; position: absolute;
left: 0; left: 0;
@@ -370,15 +370,15 @@ const selectView = {
} }
/* 选择列表样式 */ /* 选择列表样式 */
.selections-container { /deep/ .selections-container {
margin-bottom: 12px; margin-bottom: 12px;
} }
.selection-list { /deep/ .selection-list {
padding: 8px 16px; padding: 8px 16px;
} }
.selection-item { /deep/ .selection-item {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 12px; padding: 12px;
@@ -389,15 +389,15 @@ const selectView = {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
} }
.selection-item:active { /deep/ .selection-item:active {
background: #f8f9fa; background: #f8f9fa;
} }
.selection-item:last-child { /deep/ .selection-item:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.selection-item__image { /deep/ .selection-item__image {
width: 72px; width: 72px;
height: 72px; height: 72px;
margin-right: 12px; margin-right: 12px;
@@ -407,19 +407,19 @@ const selectView = {
flex-shrink: 0; flex-shrink: 0;
} }
.selection-item__image img { /deep/ .selection-item__image img {
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
.selection-item__content { /deep/ .selection-item__content {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
padding: 4px 0; padding: 4px 0;
} }
.selection-item__name { /deep/ .selection-item__name {
font-size: 15px; font-size: 15px;
font-weight: 500; font-weight: 500;
color: #323233; color: #323233;
@@ -429,7 +429,7 @@ const selectView = {
white-space: nowrap; white-space: nowrap;
} }
.selection-item__meta { /deep/ .selection-item__meta {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 13px; font-size: 13px;
@@ -437,7 +437,7 @@ const selectView = {
line-height: 1.4; line-height: 1.4;
} }
.selection-item__count { /deep/ .selection-item__count {
display: flex; display: flex;
align-items: center; align-items: center;
margin-right: 16px; margin-right: 16px;
@@ -446,7 +446,7 @@ const selectView = {
border-radius: 4px; border-radius: 4px;
} }
.selection-item__time { /deep/ .selection-item__time {
display: flex; display: flex;
align-items: center; align-items: center;
background: #f7f8fa; background: #f7f8fa;
@@ -454,19 +454,19 @@ const selectView = {
border-radius: 4px; border-radius: 4px;
} }
.selection-item__meta i { /deep/ .selection-item__meta i {
margin-right: 4px; margin-right: 4px;
font-size: 14px; font-size: 14px;
} }
.selection-item__arrow { /deep/ .selection-item__arrow {
color: #c8c9cc; color: #c8c9cc;
font-size: 16px; font-size: 16px;
padding: 0 0 0 12px; padding: 0 0 0 12px;
} }
/* 空状态样式 */ /* 空状态样式 */
.empty-state { /deep/ .empty-state {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@@ -474,42 +474,42 @@ const selectView = {
color: #969799; color: #969799;
} }
.empty-state__icon { /deep/ .empty-state__icon {
font-size: 48px; font-size: 48px;
margin-bottom: 8px; margin-bottom: 8px;
} }
/* 详情弹窗样式 */ /* 详情弹窗样式 */
.welfare-detail { /deep/ .welfare-detail {
padding: 20px 16px; padding: 20px 16px;
max-height: 60vh; max-height: 60vh;
overflow-y: auto; overflow-y: auto;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
} }
.welfare-detail__content { /deep/ .welfare-detail__content {
font-size: 14px; font-size: 14px;
line-height: 1.6; line-height: 1.6;
color: #323233; color: #323233;
} }
.rich-text { /deep/ .rich-text {
overflow-x: hidden; overflow-x: hidden;
} }
.rich-text img { /deep/ .rich-text img {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
margin: 8px 0; margin: 8px 0;
border-radius: 4px; border-radius: 4px;
} }
.rich-text p { /deep/ .rich-text p {
margin: 8px 0; margin: 8px 0;
} }
/* 阻止嵌套 action-sheet 时的背景重叠 */ /* 阻止嵌套 action-sheet 时的背景重叠 */
.no-overlay { /deep/ .no-overlay {
background-color: transparent !important; background-color: transparent !important;
} }
` `