From 4e3e96ad6814124726c1578d853f4f30acd0e34a Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Tue, 30 Sep 2025 15:19:52 +0800 Subject: [PATCH] commit --- .../controller/CheckInActivityController.java | 113 +++++++ .../controller/CheckInApplyController.java | 146 +++++++++ .../controller/CheckInListController.java | 70 ++++ .../controller/CheckInRecordsController.java | 81 +++++ .../controller/CheckInSummaryController.java | 134 ++++++++ .../zhgh/checkIn/model/CheckInActivity.java | 73 +++++ .../zhgh/checkIn/model/CheckInContent.java | 61 ++++ .../zhgh/checkIn/model/CheckInPraise.java | 48 +++ .../service/CheckInActivityService.java | 14 + .../checkIn/service/CheckInApplyService.java | 14 + .../impl/CheckInActivityServiceImpl.java | 22 ++ .../service/impl/CheckInApplyServiceImpl.java | 22 ++ .../resources/locales/zh_CN/system.properties | 6 +- .../static/assets/platform/css/h5.css | 310 ++++++++++++++++++ .../components/plugins/VantFileUpload.vue | 4 +- .../components/plugins/h5/TableColumn.vue | 62 ++++ .../components/plugins/h5/TableList.vue | 290 ++++++++++++++++ .../views/mobile/checkIn/apply/friend.js | 162 +++++++++ .../views/mobile/checkIn/apply/index.html | 173 ++++++++++ .../views/mobile/checkIn/apply/mine.js | 240 ++++++++++++++ .../views/mobile/checkIn/list/index.html | 130 ++++++++ src/main/resources/views/mobile/platform.html | 9 +- .../views/platform/checkIn/manage/index.html | 264 +++++++++++++++ .../views/platform/checkIn/records/index.html | 189 +++++++++++ .../views/platform/checkIn/summary/index.html | 128 ++++++++ 25 files changed, 2758 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInActivityController.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInApplyController.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInListController.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInRecordsController.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInSummaryController.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInActivity.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInContent.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInPraise.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInActivityService.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInApplyService.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInActivityServiceImpl.java create mode 100644 src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInApplyServiceImpl.java create mode 100644 src/main/resources/static/assets/platform/css/h5.css create mode 100644 src/main/resources/static/components/plugins/h5/TableColumn.vue create mode 100644 src/main/resources/static/components/plugins/h5/TableList.vue create mode 100644 src/main/resources/views/mobile/checkIn/apply/friend.js create mode 100644 src/main/resources/views/mobile/checkIn/apply/index.html create mode 100644 src/main/resources/views/mobile/checkIn/apply/mine.js create mode 100644 src/main/resources/views/mobile/checkIn/list/index.html create mode 100644 src/main/resources/views/platform/checkIn/manage/index.html create mode 100644 src/main/resources/views/platform/checkIn/records/index.html create mode 100644 src/main/resources/views/platform/checkIn/summary/index.html diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInActivityController.java b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInActivityController.java new file mode 100644 index 0000000..de2a229 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInActivityController.java @@ -0,0 +1,113 @@ +package io.v.nutz.zhgh.checkIn.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.result.Result; +import io.v.nutz.web.commons.slog.annotation.SLog; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.checkIn.model.CheckInActivity; +import io.v.nutz.zhgh.checkIn.model.CheckInContent; +import io.v.nutz.zhgh.checkIn.model.CheckInPraise; +import io.v.nutz.zhgh.checkIn.service.CheckInActivityService; +import io.v.nutz.zhgh.zgfw.model.condolence.Condolence; +import org.apache.shiro.authz.annotation.RequiresAuthentication; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @ClassName CheckActivityController + * @Author JyuHsin + * @Date 2025/9/29 9:56 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/checkIn/manage") +@Ok("json:full") +public class CheckInActivityController { + + @Inject + private Dao dao; + @Inject + private CheckInActivityService activityService; + + @At("") + @Ok("beetl:/platform/checkIn/manage/index.html") + @RequiresPermissions("checkIn.manage") + public void index() {} + + @At + @RequiresPermissions("checkIn.manage") + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year) { + Sql sql = Sqls.create(""" + SELECT + c.*, + u.username AS userName + FROM + check_in_activity c + LEFT JOIN sys_user u ON c.createdBy = u.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and(Cnd.likeEX("name", pageForm.getSearchKeyword())); + cnd.andEX("year(creatTime)", "=", year); + + sql.setCondition(cnd); + Pagination pagination = activityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @RequiresPermissions("checkIn.manage") + @SLog(tag = "主题打卡活动-活动管理", msg = "新增/修改活动") + public Result submit(CheckInActivity activity) { + if(StrUtil.isBlank(activity.getId())) { + activity.setCreatTime(DateUtil.now()); + } + activityService.insertOrUpdate(activity); + return Result.success(); + } + + @At + @RequiresPermissions("checkIn.manage") + @SLog(tag = "主题打卡活动-活动管理", msg = "删除活动") + public Result delete(String id) { + activityService.delete(id); + dao.clear(CheckInContent.class, Cnd.where("activityId", "=", id)); + dao.clear(CheckInPraise.class, Cnd.where("activityId", "=", id)); + return Result.success(); + } + + @At + @RequiresAuthentication + public Result selectOne(String id) { + CheckInActivity check = activityService.fetch(id); + int count = dao.count(CheckInContent.class, Cnd.where("activityId", "=", id).and("userId", "=", ShiroUtil.getUserId())); + + NutMap nutMap = Lang.obj2nutmap(check); + nutMap.put("checkCount", count); + return Result.success(nutMap); + } + + @At + @RequiresAuthentication + public Result selectAll() { + List list = activityService.query(Cnd.where("enable", "=", true).desc("creatTime")); + return Result.success(list); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInApplyController.java b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInApplyController.java new file mode 100644 index 0000000..7babb7a --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInApplyController.java @@ -0,0 +1,146 @@ +package io.v.nutz.zhgh.checkIn.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.result.Result; +import io.v.nutz.web.commons.slog.annotation.SLog; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.ActivityUserScope; +import io.v.nutz.zhgh.checkIn.model.CheckInActivity; +import io.v.nutz.zhgh.checkIn.model.CheckInContent; +import io.v.nutz.zhgh.checkIn.model.CheckInPraise; +import io.v.nutz.zhgh.checkIn.service.CheckInApplyService; +import org.apache.shiro.authz.annotation.RequiresAuthentication; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +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; +import org.nutz.mvc.annotation.Param; + +/** + * @ClassName CheckInApplyController + * @Author JyuHsin + * @Date 2025/9/29 15:37 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/checkIn/apply") +@Ok("json:full") +public class CheckInApplyController { + + @Inject + private Dao dao; + @Inject + private CheckInApplyService applyService; + + @At("") + @Ok("beetl:/platform/checkIn/apply/index.html") + @RequiresAuthentication + public void index() {} + + @At("/h5") + @Ok("beetl:/mobile/checkIn/apply/index.html") + @RequiresAuthentication + public void h5Index() {} + + @At + @RequiresAuthentication + public Result pageData(PageForm pageForm, + @Param(value = "id") String id, + @Param(value = "day") String day, + @Param(value = "active") Integer active, + @Param(value = "order") Boolean order) { + Sql sql = Sqls.create(""" + SELECT + c.*, + u.sex, + u.userName as userName, + u.unitname as unitName, + u.unionname as unionName, + ( SELECT count( 1 ) FROM check_in_praise WHERE contentId = c.id ) AS praiseCount, + ( SELECT count( 1 ) FROM check_in_praise WHERE contentId = c.id AND userId = @userId) AS praised + FROM + `check_in_content` c + LEFT JOIN USER u ON c.userId = u.id + $condition + """).setParam("userId", ShiroUtil.getUserId()); + Cnd cnd = Cnd.NEW(); + cnd.and("c.activityId", "=", id); + cnd.andEX("left(c.creatTime, 10)", "=", day); + switch (active) { + case 0 -> cnd.and("c.open", "=", true); + case 1 -> cnd.and("c.userId", "=", ShiroUtil.getUserId()); + } + if(order) { + cnd.desc("praiseCount"); + } else { + cnd.desc("c.creatTime"); + } + + sql.setCondition(cnd); + + if(active == 1) { + pageForm.setPageSize(1000); + } + Pagination pagination = applyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @RequiresAuthentication + public Result validate(String activityId) { + CheckInActivity activity = dao.fetch(CheckInActivity.class, activityId); + + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId()).and("userId", "=", ShiroUtil.getUserId())); + if(count == 0) { + return Result.error("抱歉,您不在此次活动范围内"); + } + return Result.success(); + } + + @At + @RequiresAuthentication + @SLog(tag = "主题打卡活动-主题打卡", msg = "新增/修改打卡") + public Result submit(CheckInContent content) { + content.setUserId(ShiroUtil.getUserId()); + content.setCreatTime(DateUtil.now()); + dao.insertOrUpdate(content); + return Result.success(); + } + + @At + @RequiresAuthentication + @SLog(tag = "主题打卡活动-主题打卡", msg = "删除打卡") + public Result delete(String id) { + dao.delete(CheckInContent.class, id); + dao.clear(CheckInPraise.class, Cnd.where("contentId" ,"=", id)); + return Result.success(); + } + + @At + @RequiresAuthentication + @SLog(tag = "主题打卡活动-主题打卡", msg = "点赞/取消点赞") + public Result praise(String activityId, String id) { + Cnd cnd = Cnd.where("contentId", "=", id).and("userId", "=", ShiroUtil.getUserId()); + int count = dao.count(CheckInPraise.class, cnd); + if(count > 0) { + dao.clear(CheckInPraise.class, cnd); + } else { + CheckInPraise praise = new CheckInPraise(); + praise.setActivityId(activityId); + praise.setContentId(id); + praise.setUserId(ShiroUtil.getUserId()); + praise.setCreatTime(DateUtil.now()); + dao.insert(praise); + } + return Result.success(); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInListController.java b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInListController.java new file mode 100644 index 0000000..5cfc5f6 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInListController.java @@ -0,0 +1,70 @@ +package io.v.nutz.zhgh.checkIn.controller; + +import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.result.Result; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.checkIn.service.CheckInActivityService; +import io.v.nutz.zhgh.checkIn.service.CheckInApplyService; +import org.apache.shiro.authz.annotation.RequiresAuthentication; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +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; +import org.nutz.mvc.annotation.Param; + +/** + * @ClassName CheckInApplyController + * @Author JyuHsin + * @Date 2025/9/29 14:59 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/checkIn/list") +@Ok("json:full") +public class CheckInListController { + + @Inject + private Dao dao; + @Inject + private CheckInActivityService activityService; + + @At("") + @Ok("beetl:/platform/checkIn/list/index.html") + @RequiresAuthentication + public void index() {} + + @At("/h5") + @Ok("beetl:/mobile/checkIn/list/index.html") + @RequiresAuthentication + public void h5Index() {} + + @At + @RequiresAuthentication + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year) { + Sql sql = Sqls.create(""" + SELECT + c.*, + u.username AS userName, + (select groupName from activity_user_scope where groupId = c.groupId limit 1) as groupName + FROM + check_in_activity c + LEFT JOIN sys_user u ON c.createdBy = u.id + $condition + """).setParam("userId", ShiroUtil.getUserId()); + Cnd cnd = Cnd.NEW(); + cnd.and("enable", "=", true); + cnd.and(Cnd.likeEX("name", pageForm.getSearchKeyword())); + cnd.andEX("year(creatTime)", "=", year); + + sql.setCondition(cnd); + Pagination pagination = activityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInRecordsController.java b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInRecordsController.java new file mode 100644 index 0000000..ecc6c8d --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInRecordsController.java @@ -0,0 +1,81 @@ +package io.v.nutz.zhgh.checkIn.controller; + +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.result.Result; +import io.v.nutz.zhgh.checkIn.service.CheckInApplyService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +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; +import org.nutz.mvc.annotation.Param; + +/** + * @ClassName CheckInRecordsController + * @Author JyuHsin + * @Date 2025/9/30 13:56 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/checkIn/records") +@Ok("json:full") +public class CheckInRecordsController { + + @Inject + private Dao dao; + @Inject + private CheckInApplyService applyService; + + @At("") + @Ok("beetl:/platform/checkIn/records/index.html") + @RequiresPermissions("checkIn.records") + public void index() {} + + @At + @RequiresPermissions("checkIn.manage") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "day") String day, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId) { + Sql sql = Sqls.create(""" + select + c.*, + ca.name as activityName, + u.username as userName, + u.unitname as unitName, + u.unionname as unionName + from + check_in_content c + left join user u on u.id = c.userId + left join check_in_activity ca on ca.id = c.activityId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("c.activityId", "=", activityId); + cnd.andEX("left(c.creatTime, 10)", "=", day); + cnd.andEX("u.unionId", "=", unionId); + cnd.andEX("u.unitId", "=", unitId); + + if(StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.orLike("u.username", pageForm.getSearchKeyword()); + group.orLike("u.loginname", pageForm.getSearchKeyword()); + cnd.and(group); + } + + cnd.desc("c.creatTime"); + cnd.desc("u.unionId"); + sql.setCondition(cnd); + Pagination pagination = applyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInSummaryController.java b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInSummaryController.java new file mode 100644 index 0000000..f515d3d --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/controller/CheckInSummaryController.java @@ -0,0 +1,134 @@ +package io.v.nutz.zhgh.checkIn.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.result.Result; +import io.v.nutz.base.utils.ViTool; +import io.v.nutz.zhgh.checkIn.service.CheckInActivityService; +import io.v.nutz.zhgh.checkIn.service.CheckInApplyService; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName CheckInSummaryController + * @Author JyuHsin + * @Date 2025/9/30 14:28 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/checkIn/summary") +@Ok("json:full") +public class CheckInSummaryController { + + @Inject + private Dao dao; + @Inject + private CheckInApplyService applyService; + + @At("") + @Ok("beetl:/platform/checkIn/summary/index.html") + @RequiresPermissions("checkIn.summary") + public void index() { + } + + @At + @RequiresPermissions("checkIn.summary") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId) { + Sql sql = generateSql(pageForm, activityId, unionId, unitId); + Pagination pagination = applyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @Ok("void") + @RequiresPermissions("checkIn.summary") + public void export(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId, + HttpServletResponse response) { + Sql sql = generateSql(pageForm, activityId, unionId, unitId); + List listMap = applyService.listMap(sql); + + List entityList = new ArrayList<>(); + entityList.add(new ExcelExportEntity("活动名称","activityName",20)); + entityList.add(new ExcelExportEntity("打卡人","userName",20)); + entityList.add(new ExcelExportEntity("打卡人工号","loginName",20)); + entityList.add(new ExcelExportEntity("打卡次数","checkCount",10)); + entityList.add(new ExcelExportEntity("所属单位","unitName",60)); + entityList.add(new ExcelExportEntity("所属工会","unionName",60)); + + try { + response.setContentType("application/octet-stream"); + response.setHeader("content-disposition", "attachment;filename=" + + URLEncoder.encode("打卡人员.xlsx", StandardCharsets.UTF_8)); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, listMap); + workbook.write(response.getOutputStream()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private Sql generateSql(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId) { + Sql sql = Sqls.create(""" + select + c.*, + ca.name as activityName, + u.username as userName, + u.loginname as loginName, + u.unitname as unitName, + u.unionname as unionName, + count(userId) as checkCount + from + check_in_content c + left join user u on u.id = c.userId + left join check_in_activity ca on ca.id = c.activityId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("c.activityId", "=", activityId); + cnd.andEX("u.unionId", "=", unionId); + cnd.andEX("u.unitId", "=", unitId); + + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.orLike("u.username", pageForm.getSearchKeyword()); + group.orLike("u.loginname", pageForm.getSearchKeyword()); + cnd.and(group); + } + + cnd.groupBy("c.userId"); + cnd.desc("checkCount"); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInActivity.java b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInActivity.java new file mode 100644 index 0000000..ac3e859 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInActivity.java @@ -0,0 +1,73 @@ +package io.v.nutz.zhgh.checkIn.model; + +import io.v.nutz.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @ClassName CheckActivity + * @Author JyuHsin + * @Date 2025/9/29 9:46 + * @Version 1.0 + * @Description TODO + */ +@Data +@Table +@Comment("主题打卡") +@EqualsAndHashCode(callSuper = true) +@TableMeta("{'mysql-charset':'utf8mb4'}") +public class CheckInActivity extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("活动名称") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String name; + + @Column + @Comment("月打卡率") + @ColDefine(type = ColType.VARCHAR, width = 10) + private String rate; + + @Column + @Comment("开始时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String startTime; + + @Column + @Comment("结束时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String endTime; + + @Column + @Comment("活动介绍") + @ColDefine(type = ColType.TEXT) + private String introduce; + + @Column + @Comment("是否开启") + @ColDefine(type = ColType.BOOLEAN) + private Boolean enable; + + @Column + @Comment("创建时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String creatTime; + + @Column + @Comment("封面图") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String cover; + + @Column + @Comment("分组Id") + @ColDefine(type = ColType.INT) + private Integer groupId; +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInContent.java b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInContent.java new file mode 100644 index 0000000..8d17241 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInContent.java @@ -0,0 +1,61 @@ +package io.v.nutz.zhgh.checkIn.model; + +import io.v.nutz.base.model.BaseModel; +import io.v.nutz.sys.models.Sys_file; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +/** + * @ClassName CheckContent + * @Author JyuHsin + * @Date 2025/9/29 9:51 + * @Version 1.0 + * @Description TODO + */ +@Data +@Table +@Comment("打卡内容") +@EqualsAndHashCode(callSuper = true) +@TableMeta("{'mysql-charset':'utf8mb4'}") +public class CheckInContent extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("活动id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String activityId; + + @Column + @Comment("打卡内容") + @ColDefine(type = ColType.TEXT) + private String content; + + @Column + @Comment("打卡人") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("打卡时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String creatTime; + + @Column + @Comment("是否公开") + @ColDefine(type = ColType.BOOLEAN) + private Boolean open; + + @Column + @Comment("附件") + @ColDefine(type = ColType.MYSQL_JSON) + private List files; +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInPraise.java b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInPraise.java new file mode 100644 index 0000000..b0fcfc7 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/model/CheckInPraise.java @@ -0,0 +1,48 @@ +package io.v.nutz.zhgh.checkIn.model; + +import io.v.nutz.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @ClassName CheckPraise + * @Author JyuHsin + * @Date 2025/9/29 9:55 + * @Version 1.0 + * @Description TODO + */ +@Data +@Table +@Comment("点赞记录") +@EqualsAndHashCode(callSuper = true) +@TableMeta("{'mysql-charset':'utf8mb4'}") +public class CheckInPraise extends BaseModel { + + @Name + @Comment("ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("活动id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String activityId; + + @Column + @Comment("内容id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String contentId; + + @Column + @Comment("点赞人") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userId; + + @Column + @Comment("点赞时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String creatTime; +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInActivityService.java b/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInActivityService.java new file mode 100644 index 0000000..c7e552f --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInActivityService.java @@ -0,0 +1,14 @@ +package io.v.nutz.zhgh.checkIn.service; + +import io.v.nutz.base.service.BaseService; +import io.v.nutz.zhgh.checkIn.model.CheckInActivity; + +/** + * @ClassName CheckInActivityService + * @Author JyuHsin + * @Date 2025/9/29 10:11 + * @Version 1.0 + * @Description TODO + */ +public interface CheckInActivityService extends BaseService { +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInApplyService.java b/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInApplyService.java new file mode 100644 index 0000000..cf917f8 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/service/CheckInApplyService.java @@ -0,0 +1,14 @@ +package io.v.nutz.zhgh.checkIn.service; + +import io.v.nutz.base.service.BaseService; +import io.v.nutz.zhgh.checkIn.model.CheckInContent; + +/** + * @ClassName CheckInApplyService + * @Author JyuHsin + * @Date 2025/9/29 14:59 + * @Version 1.0 + * @Description TODO + */ +public interface CheckInApplyService extends BaseService { +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInActivityServiceImpl.java b/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInActivityServiceImpl.java new file mode 100644 index 0000000..ba51ba5 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInActivityServiceImpl.java @@ -0,0 +1,22 @@ +package io.v.nutz.zhgh.checkIn.service.impl; + +import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.zhgh.checkIn.model.CheckInActivity; +import io.v.nutz.zhgh.checkIn.service.CheckInActivityService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @ClassName CheckInActivityServiceImpl + * @Author JyuHsin + * @Date 2025/9/29 10:12 + * @Version 1.0 + * @Description TODO + */ +@IocBean(args = {"refer:dao"}) +public class CheckInActivityServiceImpl extends BaseServiceImpl implements CheckInActivityService { + + public CheckInActivityServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInApplyServiceImpl.java b/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInApplyServiceImpl.java new file mode 100644 index 0000000..1f1541b --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/checkIn/service/impl/CheckInApplyServiceImpl.java @@ -0,0 +1,22 @@ +package io.v.nutz.zhgh.checkIn.service.impl; + +import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.zhgh.checkIn.model.CheckInContent; +import io.v.nutz.zhgh.checkIn.service.CheckInApplyService; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @ClassName CheckInApplyServiceImpl + * @Author JyuHsin + * @Date 2025/9/29 14:59 + * @Version 1.0 + * @Description TODO + */ +@IocBean(args = {"refer:dao"}) +public class CheckInApplyServiceImpl extends BaseServiceImpl implements CheckInApplyService { + + public CheckInApplyServiceImpl(Dao dao) { + super(dao); + } +} diff --git a/src/main/resources/locales/zh_CN/system.properties b/src/main/resources/locales/zh_CN/system.properties index f2c7b8c..6f4e456 100644 --- a/src/main/resources/locales/zh_CN/system.properties +++ b/src/main/resources/locales/zh_CN/system.properties @@ -10,8 +10,8 @@ system.send=提 交 system.sending=正在提交... system.cancel=取 消 system.confirm=确 认 -system.success=处理成功 -system.error=处理失败 +system.success=操作成功 +system.error=操作失败 system.paramserror=表单参数错误 system.ok=确定 system.close=取消 @@ -78,4 +78,4 @@ globals.button.disable=禁 用 globals.table.column.operation=操作 globals.table.column.true=是 -globals.table.column.false=否 \ No newline at end of file +globals.table.column.false=否 diff --git a/src/main/resources/static/assets/platform/css/h5.css b/src/main/resources/static/assets/platform/css/h5.css new file mode 100644 index 0000000..f129def --- /dev/null +++ b/src/main/resources/static/assets/platform/css/h5.css @@ -0,0 +1,310 @@ +:root { + --tab-bar-height: 50px; + --color-primary: #1867b0; + --color-black: #000; +} + +* { + margin: 0; + -webkit-tap-highlight-color: transparent; +} + +html, body, #app { + -webkit-user-select: none; + user-select: none; + width: 100%; + height: 100%; +} + +body { + background-color: #f7f8fa; + overflow-x: hidden; + font-size: 16px +} + +.main-page { + height: 100%; +} + +.page-wrapper { + height: 100%; + overflow-y: auto; +} + +.page-showtabbar .page-wrapper { + height: calc(100% - var(--tab-bar-height) - env(safe-area-inset-bottom)); + overflow-y: auto; +} + +#container { + /*padding: 10px;*/ + display: block; + box-sizing: border-box; + height: 100%; + width: 100%; +} + +.direction-column-field.van-field { + display: flex; + flex-direction: column; + row-gap: 10px; +} + +.direction-column-field.van-field .van-field__label { + max-width: 100%; + padding-right: 0; +} + +.form-button-cell { + background: #f1f1f1 !important; +} + +.table-list .table-card { + margin: 10px; + border-radius: 10px; + background: #FFF; + padding: 15px; + position: relative; +} + +.table-list .table-card .van-cell { + padding: 5px; +} + +.table-list .table-card .van-cell:not(:last-child)::after { + border-bottom: none; +} + +.table-list .table-card .table-card-footer .van-cell__value { + display: flex; + justify-content: flex-end; + gap: 10px; + margin-top: 10px; + flex-wrap: wrap; +} + +.van-search .van-search__content .van-field__field-wrap { + width: 100%; +} + +.w-e-toolbar { + z-index: 11 !important; +} + +.w-e-text-container { + z-index: 10 !important; +} + +.van-cell-rich-text, .van-cell-rich-text img, .van-cell-rich-text image { + max-width: 100%; + white-space: normal; +} + +.process-title { + font-size: 15px; + color: var(--color-black); + font-weight: 600; + margin: 10px 0 10px 0 !important; + padding: 10px; + position: relative; + line-height: 1.1; + font-family: inherit; + /*background: #f1f1f1;*/ +} + +.process-title::before { + content: ""; + width: 5px; + background: var(--color-primary); + display: inline-block; + position: absolute; + left: 0; + top: 0; + bottom: 0; +} + +.custom-list-loading { + background-color: unset; +} + +.custom-list-loading .van-icon { + font-size: 108px; +} + +.list-card { + margin: 20px 10px; + background: #FFFFFF; + border-radius: 10px; + padding: 15px; + border-bottom: 1px solid #ededed; + box-sizing: border-box; +} + +.list-card:not(:last-child) { + margin-bottom: 10px; +} + +.list-card-title { + font-weight: bolder; +} + +.list-card-body { + display: flex; +} + +.list-card-body-img { + flex: 0 0 auto; + width: 130px; + height: 90px; +} + +.list-card-body-img img { + width: 100%; + height: 100%; + border-radius: 5px; + object-fit: cover; +} + + +.list-card-body-content { + flex: 1; +} + + +.list-card-footer { + display: flex; + justify-content: flex-end; + gap: 10px; + margin-top: 10px; + flex-wrap: wrap; +} + +.list-card-footer .van-button { + +} + +/*************************覆盖vant默认CSS********************************/ +.van-dropdown-menu__bar{ + box-shadow: unset; +} + + +/*****************************申请表单CSS********************************/ +.form-container { + padding-bottom: 80px; + background: #f9f9f9; +} + +.form-container .form-group { + margin-bottom: 12px; +} + +.form-container .form-actions { + position: fixed; + bottom: 0; + left: 0; + right: 0; + display: flex; + justify-content: space-around; + padding: 12px 16px; + background-color: #ffffff; + box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05); + z-index: 100; +} + +.form-container .form-actions .van-button { + flex: 1; + margin: 0 8px; + border-radius: 4px; + height: 40px; + font-size: 15px; +} + +.form-container .van-cell-group { + margin-bottom: 12px; + overflow: hidden; +} + +.form-container .van-cell-group__title { + font-size: 15px; + color: var(--color-black); + font-weight: 600; + padding: 10px; + position: relative; +} + +.form-container .van-cell-group__title::before{ + content: ""; + width: 5px; + background: var(--color-primary); + display: inline-block; + position: absolute; + left: 0; + top: 0; + bottom: 0; +} + +.form-container .van-field__label { + width: 90px; + color: #323233; + font-size: 14px; +} + +.form-container .van-field__value { + color: #323233; +} + +.form-container .van-cell { + padding: 12px 16px; +} + +.form-container .van-cell:not(:last-child)::after { + left: 16px; + right: 16px; +} + +.form-container .direction-column-field .van-field__label { + width: auto; +} + +.form-container .direction-column-field .van-field__body { + display: block; +} + +.form-container .direction-column-field .van-field__control { + margin-top: 8px; +} + +/***************************查看详情CSS********************************/ +.detail-container { + background: #f9f9f9 +} + +.detail-container .van-cell-group__title{ + font-size: 15px; + color: var(--color-black); + font-weight: 600; + padding: 10px; + position: relative; +} + +.detail-container .van-cell-group__title::before{ + content: ""; + width: 5px; + background: var(--color-primary); + display: inline-block; + position: absolute; + left: 0; + top: 0; + bottom: 0; +} + +.detail-container .direction-column-cell{ + display: flex; + flex-direction: column; +} + +.detail-container .direction-column-cell .van-cell__value{ + text-align: left; +} + diff --git a/src/main/resources/static/components/plugins/VantFileUpload.vue b/src/main/resources/static/components/plugins/VantFileUpload.vue index 06da4e6..8b0b3df 100644 --- a/src/main/resources/static/components/plugins/VantFileUpload.vue +++ b/src/main/resources/static/components/plugins/VantFileUpload.vue @@ -451,7 +451,7 @@ module.exports = { const lastIndexOf = file.name.lastIndexOf(".") const type = this.type.map(v => v.toLowerCase()).includes(file.name.substr(lastIndexOf + 1).toLowerCase()) if (!type) { - this.$message.warning(`上传文件只能是 ${this.type.map(v => v.toLowerCase()).join("/")} 格式!`); + this.$toast(`上传文件只能是 ${this.type.map(v => v.toLowerCase()).join("/")} 格式!`); return false; } return true; @@ -668,4 +668,4 @@ module.exports = { .van-image-preview .van-image-preview__close-icon--top-right { font-size: 50px !important; } - \ No newline at end of file + diff --git a/src/main/resources/static/components/plugins/h5/TableColumn.vue b/src/main/resources/static/components/plugins/h5/TableColumn.vue new file mode 100644 index 0000000..d486646 --- /dev/null +++ b/src/main/resources/static/components/plugins/h5/TableColumn.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/main/resources/static/components/plugins/h5/TableList.vue b/src/main/resources/static/components/plugins/h5/TableList.vue new file mode 100644 index 0000000..83d5be5 --- /dev/null +++ b/src/main/resources/static/components/plugins/h5/TableList.vue @@ -0,0 +1,290 @@ + + + + diff --git a/src/main/resources/views/mobile/checkIn/apply/friend.js b/src/main/resources/views/mobile/checkIn/apply/friend.js new file mode 100644 index 0000000..35e4af0 --- /dev/null +++ b/src/main/resources/views/mobile/checkIn/apply/friend.js @@ -0,0 +1,162 @@ +const friend = { + template: + /*language=HTML*/ + ` +
+ +
+
+ 获赞排行 +
+
+ + +
+
+
+ + +
+
+
{{item.userName}}
+
{{item.unitName}}
+
+
+
+
{{item.content}}
+ + + + + +
+ +
+
+
+ +
+
+ `, + data() { + return { + row: {}, + pageForm: { + pageNumber: 1, + pageSize: 5, + totalCount: 0, + order: false, + }, + tableData: [], + finished: false, + loading: false, + } + }, + methods: { + onOpen(row) { + this.row = row + this.pageForm.pageNumber = 1 + this.tableData = [] + this.finished = false + this.selectCheckData() + }, + onOrder() { + this.pageForm.order = !this.pageForm.order + this.pageForm.pageNumber = 1 + this.tableData = [] + this.finished = false + const toast = vant.Toast.loading({message: '获取排行中...', forbidClick: true, loadingType: 'spinner'}) + setTimeout(() => { + this.selectCheckData() + toast.clear() + }, 200) + }, + onPraise(row) { + this.pageForm.pageNumber = 1 + this.tableData = [] + this.finished = false + this.$axios.post("/platform/checkIn/apply/praise", { id: row.id, activityId: this.row.id }).then(res => { + if (res.code === 0) { + this.$toast(res.msg) + this.selectCheckData() + } + }) + }, + onImage(files, index) { + vant.ImagePreview({ + images: files.map(o => CREATE_PREVIEW_URL(o.id)), + startPosition: index, + }) + }, + selectCheckData() { + this.loading = true + this.$set(this.pageForm, 'id', this.row.id) + this.$set(this.pageForm, 'active', 0) + this.$axios.post('/platform/checkIn/apply/pageData', this.pageForm) + .then(res => { + if (res.code === 0) { + res.data.list.forEach(item => { + if(item.files && item.files.length > 0) { + item.files = JSON.parse(item.files) + } + }) + this.tableData = this.tableData.concat(res.data.list) + if (this.tableData.length === res.data.totalCount) { + this.finished = true + } else { + this.pageForm.pageNumber++ + } + } + this.loading = false + }) + }, + }, + style: /*language=CSS*/ ` + .cards-container .sort { + text-align: right; + font-size: 14px; + margin: 10px 10px 10px 0; + } + .cards-container .sort i { + font-size: 16px; + margin-left: 2px; + } + ` +} diff --git a/src/main/resources/views/mobile/checkIn/apply/index.html b/src/main/resources/views/mobile/checkIn/apply/index.html new file mode 100644 index 0000000..2b11d94 --- /dev/null +++ b/src/main/resources/views/mobile/checkIn/apply/index.html @@ -0,0 +1,173 @@ + + + + +
+ + +
+ +
+
+ +
+ + + 动态 + 我的 + +
+ + + + diff --git a/src/main/resources/views/mobile/checkIn/apply/mine.js b/src/main/resources/views/mobile/checkIn/apply/mine.js new file mode 100644 index 0000000..3f759ff --- /dev/null +++ b/src/main/resources/views/mobile/checkIn/apply/mine.js @@ -0,0 +1,240 @@ +const mine = { + template: + /*language=HTML*/ + ` +
+ +
+ + +
+
+
+
+ + +
+
+
{{item.userName}}
+
{{item.unitName}}
+
+
+
+
{{item.content}}
+ + + + + +
+ +
+
+ +
+ + + +
+ + + + + +
+ 提交 +
+ + +
+ `, + data() { + return { + row: {}, + tableData: [], + pageForm: { + pageNumber: 1, + pageSize: 5, + totalCount: 0 + }, + writeVisible: false, + openVisible: false, + formData: { + content: '', + files: [], + open: false, + openName: '仅自己可见', + }, + sourceTableData: [], + } + }, + methods: { + async onOpen(row) { + this.row = row + this.$set(this.formData, 'activityId', row.id) + await this.selectCheckData() + this.onCalendar(new Date()) + }, + onCalendar(date) { + const day = this.$moment(date).format('YYYY-MM-DD') + this.tableData = this.sourceTableData.filter(o => this.$moment(o.creatTime).format('YYYY-MM-DD') === day) + }, + onFormatter(day) { + const d = this.$moment(day.date).format('YYYY-MM-DD') + const sourceData = this.sourceTableData.map(o => this.$moment(o.creatTime).format('YYYY-MM-DD')) + day.bottomInfo = sourceData.includes(d) ? '已打卡' : '' + day.className = sourceData.includes(d) ? 'text-success' : '' + return day + }, + onPraise(row) { + this.$axios.post("/platform/checkIn/apply/praise", { id: row.id, activityId: this.row.id }).then(res => { + if (res.code === 0) { + this.$toast(res.msg) + this.selectCheckData() + } + }) + }, + onApply() { + this.writeVisible = true + }, + onSubmit() { + this.$dialog.confirm({ + title: "提示", + message: "您确定要提交吗?" + }).then(() => { + const formData = clone(this.formData) + formData.files = JSON.stringify(formData.files) + this.$axios.post("/platform/checkIn/apply/submit", formData).then(res => { + if (res.code === 0) { + this.$toast(res.msg) + this.writeVisible = false + } + }) + }) + }, + onDelete(row) { + this.$dialog.confirm({ + title: "提示", + message: "您确定要删除吗?" + }).then(() => { + this.$axios.post("/platform/checkIn/apply/delete", {id: row.id}).then(res => { + if (res.code === 0) { + this.$toast(res.msg) + this.selectCheckData() + } + }) + }) + }, + onImage(files, index) { + vant.ImagePreview({ + images: files.map(o => CREATE_PREVIEW_URL(o.id)), + startPosition: index, + }) + }, + async selectCheckData() { + this.$set(this.pageForm, 'id', this.row.id) + this.$set(this.pageForm, 'active', 1) + this.$set(this.pageForm, 'order', false) + const res = await this.$axios.post('/platform/checkIn/apply/pageData', this.pageForm) + if(res.code === 0) { + this.sourceTableData = res.data.list + this.tableData = res.data.list + this.tableData.forEach(item => { + if(item.files && item.files.length > 0) { + item.files = JSON.parse(item.files) + } + }) + } + }, + }, + style: /*language=CSS*/ ` + .cards-container .van-calendar { + border-radius: 20px 20px 0 0; + margin-top: -20px; + } + .van-cell::after { + border: none !important; + } + .form-content { + padding: 10px; + height: calc(100vh - 46px - 44px); + overflow-y: auto + } + .custom-image { + background-color: white; + } + .van-calendar__bottom-info { + bottom: 1px !important; + } + .text-success .van-calendar__bottom-info { + color: #0e9558; + font-weight: bolder; + } + .van-calendar__selected-day .van-calendar__bottom-info { + color: white; + font-weight: bolder; + } + ` +} diff --git a/src/main/resources/views/mobile/checkIn/list/index.html b/src/main/resources/views/mobile/checkIn/list/index.html new file mode 100644 index 0000000..50368ba --- /dev/null +++ b/src/main/resources/views/mobile/checkIn/list/index.html @@ -0,0 +1,130 @@ + + + + +
+ + + + + + + + + + + + + +
+
+ +
+ {{ infoRow.name }} + {{ infoRow.rate + '%' }} + {{ infoRow.startTime }} + {{ infoRow.endTime }} + {{ infoRow.enable ? '启用' : '禁用' }} + {{ infoRow.groupName }} + + + +
+
+
+ + + 去打卡 + + + +
+
+
+ +
+ + + + diff --git a/src/main/resources/views/mobile/platform.html b/src/main/resources/views/mobile/platform.html index 2697ab1..71511db 100644 --- a/src/main/resources/views/mobile/platform.html +++ b/src/main/resources/views/mobile/platform.html @@ -17,7 +17,8 @@ - + + - + + @@ -76,9 +78,12 @@ + diff --git a/src/main/resources/views/platform/checkIn/records/index.html b/src/main/resources/views/platform/checkIn/records/index.html new file mode 100644 index 0000000..ca8cede --- /dev/null +++ b/src/main/resources/views/platform/checkIn/records/index.html @@ -0,0 +1,189 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 暂无 + + + + + 取 消 + + + +
+ + diff --git a/src/main/resources/views/platform/checkIn/summary/index.html b/src/main/resources/views/platform/checkIn/summary/index.html new file mode 100644 index 0000000..382ddd1 --- /dev/null +++ b/src/main/resources/views/platform/checkIn/summary/index.html @@ -0,0 +1,128 @@ + + +
+ + + + + + + + + + + + + + + + + +
+ +