diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java b/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java new file mode 100644 index 00000000..36ae34d2 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventListener.java @@ -0,0 +1,13 @@ +package com.budwk.app.base.event.role; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventListener + * @Date 2025/9/3 17:13 + * @注释 + */ +public interface RoleEventListener { + + void receive(RoleEventMsg message); +} diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java b/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java new file mode 100644 index 00000000..c1e5213f --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventMsg.java @@ -0,0 +1,67 @@ +package com.budwk.app.base.event.role; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventMsg + * @Date 2025/9/3 17:14 + * @注释 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RoleEventMsg { + + /** + * 用户id + */ + private List userIds; + + /** + * 角色code + */ + private String roleCode; + + /** + * 单位id + */ + private String unitId; + + /** + * 操作类型 + */ + private Integer operationType; + + /** + * 添加角色 + */ + public static final int ADD_ROLE = 1; + + /** + * 删除角色 + */ + public static final int REMOVE_ROLE = 2; + + /** + * 更新角色 + */ + public static final int RENEW_ROLE = 3; + + + public RoleEventMsg(String unitId, String roleCode, Integer operationType){ + this.unitId = unitId; + this.operationType = operationType; + } + + public RoleEventMsg(List userIds, String roleCode, Integer operationType){ + this.userIds = userIds; + this.roleCode = roleCode; + this.operationType = operationType; + } +} diff --git a/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java b/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java new file mode 100644 index 00000000..59ae31a1 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/role/RoleEventPublisher.java @@ -0,0 +1,21 @@ +package com.budwk.app.base.event.role; + +import org.nutz.mvc.Mvcs; + +/** + * @version 1.0 + * @Author zzr + * @name:RoleEventPublisher + * @Date 2025/9/3 17:14 + * @注释 + */ +public class RoleEventPublisher { + + public static void broadcast(RoleEventMsg event){ + String[] names = Mvcs.getIoc().getNamesByType(RoleEventListener.class); + for (String name : names) { + RoleEventListener listener = Mvcs.getIoc().get(RoleEventListener.class, name); + listener.receive(event); + } + } +} diff --git a/src/main/java/com/budwk/app/base/param/PageForm.java b/src/main/java/com/budwk/app/base/param/PageForm.java index 979eec18..1b12d287 100644 --- a/src/main/java/com/budwk/app/base/param/PageForm.java +++ b/src/main/java/com/budwk/app/base/param/PageForm.java @@ -11,7 +11,7 @@ import javax.validation.constraints.Positive; * @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。 */ @Data -public class PageForm { +public class PageForm { @NotNull(message = "pageNumber不能为空") @Min(value = 1, message = "pageNumber最小为1") @@ -30,8 +30,19 @@ public class PageForm { private String searchKeyword; + /*======================流程参数==============================*/ + + /** + * 是否审核 + */ private Boolean audit; + /** + * 业务ID + */ + private String bizId; + + public PageForm defaultSort(String column, String order) { this.setPageOrderName(column); this.setPageOrderBy(order); diff --git a/src/main/java/com/budwk/app/base/service/BaseService.java b/src/main/java/com/budwk/app/base/service/BaseService.java index 86f54302..9f51a75e 100644 --- a/src/main/java/com/budwk/app/base/service/BaseService.java +++ b/src/main/java/com/budwk/app/base/service/BaseService.java @@ -884,7 +884,6 @@ public interface BaseService { */ Pagination listPageMap(Integer pageNumber, int pageSize, Condition cnd); - /** * DataTable Page * @@ -950,4 +949,12 @@ public interface BaseService { * @return */ NutMap data(int length, int start, int draw, Cnd cnd, String linkName); + + /** + * 获取Map + * @param sql + * @return + */ + NutMap fetchMap(Sql sql); + } diff --git a/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java b/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java index e02fe83f..8d99b411 100644 --- a/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java +++ b/src/main/java/com/budwk/app/base/service/impl/BaseServiceImpl.java @@ -1436,4 +1436,12 @@ public class BaseServiceImpl extends EntityService implements BaseService< re.put("recordsTotal", length); return re; } + + @Override + public NutMap fetchMap(Sql sql) { + sql.setCallback(Sqls.callback.map()); + execute(sql); + NutMap result = (NutMap)sql.getResult(); + return result; + } } diff --git a/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java b/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java index e7b7f8c2..875ea991 100644 --- a/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java +++ b/src/main/java/com/budwk/app/bpm/param/BpmProcessInstancePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.bpm.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.bpm.models.BpmProcessInstance; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel(description = "流程实例查询参数") @Data -public class BpmProcessInstancePageForm extends PageForm { +public class BpmProcessInstancePageForm extends PageForm { @ApiModelProperty("流程实例名称") private String processInstanceName; diff --git a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java similarity index 98% rename from src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java rename to src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java index 4cf7d75a..4443724f 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenterController.java @@ -25,7 +25,7 @@ import java.util.Map; @IocBean @At("/flow/todoCenter") @Ok("json:full") -public class FlowTodoCenter { +public class FlowTodoCenterController { @Inject private Dao dao; @@ -44,6 +44,7 @@ public class FlowTodoCenter { Sql sql = Sqls.create(""" SELECT t.id AS taskId, + t.taskName AS taskKey, t.displayName AS taskName, t.taskState, t.formKey, @@ -79,6 +80,7 @@ public class FlowTodoCenter { Sql sql = Sqls.create(""" SELECT t.id AS taskId, + t.taskName AS taskKey, t.displayName AS taskName, t.taskState, t.formKey, diff --git a/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java b/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java new file mode 100644 index 00000000..67b3983a --- /dev/null +++ b/src/main/java/com/budwk/app/flow/handler/FlowClubPresidentByArgsAssignmentHandler.java @@ -0,0 +1,55 @@ +package com.budwk.app.flow.handler; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.AssignmentHandler; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.engine.model.TaskModel; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.web.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.club.model.SysClubManager; +import org.nutz.json.Json; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * 获取协会审批人根据流程变量参数(clubId) 必传 + */ +public class FlowClubPresidentByArgsAssignmentHandler implements AssignmentHandler { + @Override + public List assign(TaskModel model, Execution execution) { + String clubId = execution.getArgs().getStr("clubId"); + + if (StrUtil.isBlank(clubId)) { + throw new BaseException("参数 clubId 不能为空"); + } + + CommonService commonService = ServiceContext.find(CommonService.class); + List users = commonService.findUserInfoByRoleCode(Sys_user_role::getClubId, clubId, RoleConstant.CLUB_PRESIDENT); + + if(Lang.isEmpty(users)) { + throw new BaseException("未查询到相关审批人"); + } + + return users.stream().map(Sys_user::getId).toList(); + } + + @Override + public String getMessage() { + return "获取协会会长(根据args中的clubId)"; + } + + @Override + public int getOrder() { + return AssignmentHandler.super.getOrder(); + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java new file mode 100644 index 00000000..95809f28 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessInstanceStartEventListener.java @@ -0,0 +1,21 @@ +package com.budwk.app.flow.listenter; + +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * 流程实例开始事件监听器 + */ +@IocBean +public class ProcessInstanceStartEventListener implements ProcessEventListener { + @Override + public void onEvent(ProcessEvent event) { + // TODO: 可以对接到学校OA的流程实例进行同步 + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_INSTANCE_START) { + Long sourceId = event.getSourceId(); + System.out.println("流程实例开始事件:" + sourceId); + } + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java new file mode 100644 index 00000000..553c49f3 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskEndEventListener.java @@ -0,0 +1,28 @@ +package com.budwk.app.flow.listenter; + +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * 流程任务完成事件监听器 + */ +@IocBean +public class ProcessTaskEndEventListener implements ProcessEventListener { + + @Inject + private Dao dao; + + @Override + public void onEvent(ProcessEvent event) { + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_END) { + Long sourceId = event.getSourceId(); + ProcessTask task = dao.fetch(ProcessTask.class, sourceId); + System.out.println("流程任务完成事件:" + task.getDisplayName()); + } + } +} diff --git a/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java new file mode 100644 index 00000000..fa56f367 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/listenter/ProcessTaskStartEventListener.java @@ -0,0 +1,64 @@ +package com.budwk.app.flow.listenter; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.event.ProcessEvent; +import com.budwk.app.flow.engine.event.ProcessEventListener; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.entity.ProcessTaskActor; +import com.budwk.app.flow.enums.ProcessEventTypeEnum; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * 流程任务开始监听器 + */ +@IocBean +public class ProcessTaskStartEventListener implements ProcessEventListener { + + @Inject + private Dao dao; + + @Override + public void onEvent(ProcessEvent event) { + if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_START) { + Long sourceId = event.getSourceId(); + ProcessTask task = dao.fetch(ProcessTask.class, sourceId); + sendMessage( task); + } + } + + + private void sendMessage(ProcessTask task) { + // 说明是流程开始 用户首次完成任务 + if (task.getTaskParentId() == 0 && task.getTaskName().equals("startTask")) { + return; + } + + // 节点名称 + String taskDisplayName = task.getDisplayName(); + // 实例名称 + Long instanceId = task.getProcessInstanceId(); + ProcessInstance instance = dao.fetch(ProcessInstance.class, instanceId); + String instanceName = Json.fromJson(NutMap.class, instance.getVariable()).getString(FlowConst.PROCESS_INSTANCE_NAME); + + // 任务接收人 + List taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId())); + + for (ProcessTaskActor taskActor : taskActors) { + // 模拟发送消息 + String message = StrUtil.format("{}您有一条待办任务,实例:{},任务:{}", taskActor.getActorName(), instanceName, taskDisplayName); + System.out.println(message); + } + + + } + +} diff --git a/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java b/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java new file mode 100644 index 00000000..24f90de3 --- /dev/null +++ b/src/main/java/com/budwk/app/sys/listener/SysRoleEventListener.java @@ -0,0 +1,108 @@ +package com.budwk.app.sys.listener; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.event.role.RoleEventListener; +import com.budwk.app.base.event.role.RoleEventMsg; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:SysRoleEventListener + * @Date 2025/9/3 17:35 + * @注释 + */ +@IocBean +public class SysRoleEventListener implements RoleEventListener { + + @Inject + private Dao dao; + + @Override + @Aop(TransAop.READ_COMMITTED) + public void receive(RoleEventMsg message) { + if (ObjectUtil.isAllEmpty(message.getUserIds(), message.getUnitId(), message.getRoleCode())) { + return; + } + switch (message.getOperationType()) { + case RoleEventMsg.ADD_ROLE -> { + addRole(message); + } + case RoleEventMsg.REMOVE_ROLE -> { + removeRole(message); + } + case RoleEventMsg.RENEW_ROLE -> { + removeRole(message); + addRole(message); + } + } + } + + + /** + * 添加角色 + * @param message 订阅消息 + */ + private void addRole(RoleEventMsg message) { + Sys_role role = dao.fetch(Sys_role.class, Cnd.where("code", "=", message.getRoleCode())); + + if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getRoleCode())) { + List roleList = message.getUserIds().stream().map(item -> { + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(item); + userRole.setUnitId(StrUtil.isNotBlank(message.getUnitId()) ? message.getUnitId() : null); + userRole.setRoleId(role.getId()); + return userRole; + }).toList(); + dao.insert(roleList); + } else if (ObjectUtil.isAllNotEmpty(message.getUnitId(), message.getRoleCode())) { + List userList = dao.query(Sys_user.class, Cnd.where("unitId", "=", message.getUnitId())); + List roleList = userList.stream().map(item -> { + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(item.getId()); + userRole.setUnitId(item.getUnitId()); + userRole.setRoleId(role.getId()); + return userRole; + }).toList(); + dao.insert(roleList); + } + } + + + /** + * 删除角色 + * @param message 订阅消息 + */ + private void removeRole(RoleEventMsg message) { + // 判断传过来的东西 + if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getUnitId(), message.getRoleCode())) { + dao.clear(Sys_user_role.class, + Cnd.where("userId", "in", message.getUserIds()) + .and("unitId", "=", message.getUnitId()) + .and("roleCode", "=", message.getRoleCode()) + ); + } else if (ObjectUtil.isAllNotEmpty(message.getUserIds(), message.getRoleCode())) { + dao.clear(Sys_user_role.class, + Cnd.where("userId", "in", message.getUserIds()) + .and("roleCode", "=", message.getRoleCode()) + ); + } else if (ObjectUtil.isAllNotEmpty(message.getUnitId(), message.getUnitId())) { + dao.clear(Sys_user_role.class, + Cnd.where("unitId", "in", message.getUnitId()) + .and("roleCode", "=", message.getRoleCode()) + ); + } + } + +} diff --git a/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java b/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java index c35614fb..b43b21e3 100644 --- a/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysDataUserPullPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_user_source; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("用户数据拉取分页参数") -public class SysDataUserPullPageForm extends PageForm { +public class SysDataUserPullPageForm extends PageForm { @ApiModelProperty("拉取日期") private String pullTime; diff --git a/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java b/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java index 580cfca7..b7d6d3c5 100644 --- a/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysDataUserUpdatePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.views.View_user; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("用户数据更新分页参数") -public class SysDataUserUpdatePageForm extends PageForm { +public class SysDataUserUpdatePageForm extends PageForm { @ApiModelProperty("姓名") private String userName; diff --git a/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java b/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java index 0e466b48..c2e6a60e 100644 --- a/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java +++ b/src/main/java/com/budwk/app/sys/param/SysHomeActivityPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.sys.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_home_activity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel("系统首页活动管理查询参数") -public class SysHomeActivityPageForm extends PageForm { +public class SysHomeActivityPageForm extends PageForm { @ApiModelProperty("活动名称") private String name; diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index 09d26758..2b6b9ea2 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -7,6 +7,8 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HtmlUtil; import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.event.role.RoleEventMsg; +import com.budwk.app.base.event.role.RoleEventPublisher; import com.budwk.app.base.utils.ConditionGroupUtil; import com.budwk.app.base.utils.PwdUtil; import com.budwk.app.sys.annotation.DataCenterColumn; @@ -16,6 +18,7 @@ import com.budwk.app.sys.services.SysDataUserUpdateService; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.sys.services.SysUserService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType; import lombok.extern.slf4j.Slf4j; @@ -161,9 +164,9 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService Map userMap = sysUsers.stream().collect(Collectors.toMap(Sys_user::getLoginname, sysUser -> sysUser)); // 准备数据集合 - List needDoUpdateList = new ArrayList<>(); - List needInitUserList = new ArrayList<>(); - List histories = new ArrayList<>(); + List needDoUpdateList = new CopyOnWriteArrayList<>(); + List needInitUserList = new CopyOnWriteArrayList<>(); + List histories = new CopyOnWriteArrayList<>(); List addMemberUserIds = Collections.synchronizedList(new ArrayList<>()); List removeMemberUserIds = Collections.synchronizedList(new ArrayList<>()); @@ -380,6 +383,13 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService }); } + // 6. 处理其他任务 + // 6.1 更新提案的校领导角色,发送订阅 + ProposalConfig config = dao.fetch(ProposalConfig.class, Cnd.where("delFlag", "=", false).desc("updatedAt")); + for (String unitId : config.getSchoolLeaderUnitIds()) { + RoleEventPublisher.broadcast(new RoleEventMsg(unitId, RoleConstant.PROPOSAL_BRANCH_SCHOOL_LEADER.name(), RoleEventMsg.RENEW_ROLE)); + } + long endTime = System.currentTimeMillis(); log.info("全量更新用户数据完成,耗时: {} 毫秒", (endTime - startTime)); diff --git a/src/main/java/com/budwk/app/web/commons/base/Globals.java b/src/main/java/com/budwk/app/web/commons/base/Globals.java index 02dbf1fd..20535a3f 100644 --- a/src/main/java/com/budwk/app/web/commons/base/Globals.java +++ b/src/main/java/com/budwk/app/web/commons/base/Globals.java @@ -38,7 +38,7 @@ public class Globals { //文件访问域名 public static String AppFileDomain = ""; //学校代码 - public static String SchoolCode = "HMC"; + public static String SchoolCode = "OTHER"; //系统自定义参数 public static NutMap MyConfig = NutMap.NEW(); //自定义路由 diff --git a/src/main/java/com/budwk/app/web/controllers/open/commons/service/CommonService.java b/src/main/java/com/budwk/app/web/controllers/open/commons/service/CommonService.java index 69e93660..e647ee79 100644 --- a/src/main/java/com/budwk/app/web/controllers/open/commons/service/CommonService.java +++ b/src/main/java/com/budwk/app/web/controllers/open/commons/service/CommonService.java @@ -5,6 +5,7 @@ import com.budwk.app.base.service.BaseService; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user_role; import org.nutz.dao.Cnd; +import org.nutz.dao.util.lambda.PFun; import javax.validation.Valid; import java.util.List; @@ -62,7 +63,7 @@ public interface CommonService extends BaseService { */ List findUserRoleByRoleCode(@Valid List roleCode); - List findUserInfoByRoleCode(Function column, String columnValue, RoleConstant... roleConstants); + List findUserInfoByRoleCode(PFun name, String columnValue, RoleConstant... roleConstants); /** diff --git a/src/main/java/com/budwk/app/web/controllers/open/commons/service/impl/CommonServiceImpl.java b/src/main/java/com/budwk/app/web/controllers/open/commons/service/impl/CommonServiceImpl.java index 072bd5b6..182aeba8 100644 --- a/src/main/java/com/budwk/app/web/controllers/open/commons/service/impl/CommonServiceImpl.java +++ b/src/main/java/com/budwk/app/web/controllers/open/commons/service/impl/CommonServiceImpl.java @@ -14,10 +14,13 @@ 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.lambda.LambdaQuery; +import org.nutz.dao.util.lambda.PFun; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Function; @@ -85,9 +88,15 @@ public class CommonServiceImpl extends BaseServiceImpl implements CommonService } @Override - public List findUserInfoByRoleCode(Function column, String columnValue, RoleConstant... roleConstant) { + public List findUserInfoByRoleCode(PFun name, String columnValue, RoleConstant... roleConstant) { + String column = LambdaQuery.resolve(name); - return null; + List list = Arrays.stream(roleConstant).map(o -> { + Sys_role role = sysRoleService.getByCode(o.name()); + return role.getId(); + }).toList(); + + return findUserInfoByRoleCode(column, columnValue, list); } @Override diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareApplyController.java index f7ccce8f..8104017e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareApplyController.java @@ -1,15 +1,25 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; +import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import io.swagger.annotations.ApiOperation; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; @@ -22,8 +32,11 @@ 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.validation.Valid; +import java.math.BigDecimal; +import java.util.List; /** * @version 1.0 @@ -43,6 +56,8 @@ public class ActivityDeclareApplyController { @Inject private FlowEngine flowEngine; @Inject + private FlowCommonService flowCommonService; + @Inject private ActivityDeclareService activityDeclareService; @At("") @@ -57,84 +72,73 @@ public class ActivityDeclareApplyController { public void form() { } - @At - @SaCheckPermission("activityDeclare.apply") - @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/apply/view.html") - public void view() { - } - @At - @ApiOperation("活动申报,我的申请列表") - @SaCheckPermission("activityDeclare.apply") - public Result pageData(CommonPageParam pageParam) { - Sql sql = Sqls.create(""" - SELECT - info.id, - info.userName, - info.loginName, - info.applyTime, - info.activityName, - info.activityAddress, - info.startTime, - info.endTime, - info.declareUnitName, - info.activityType, - info.activityContent, - info.activityNumber, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariable, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, - (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId - FROM - activity_declare_info info - LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - $condition - """); - Cnd cnd = Cnd.NEW(); - pageParam.buildSearch(cnd, "info."); - if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); - } - sql.setCondition(cnd); - Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); - return Result.success().addData(pagination); - } - - - @At - @ApiOperation("活动申报,查看活动申报") - @SaCheckPermission("activityDeclare.apply") - public Result findOne(@Valid String id) { - ActivityDeclareInfo info = dao.fetch(ActivityDeclareInfo.class, id); - return Result.success().addData(info); - } - - - @At - @ApiOperation("删除活动申报") - @Aop(TransAop.READ_COMMITTED) + @ApiOperation("保存申请") @SaCheckPermission("member.apply.submit") - @SLog(tag = "活动申报", msg = "删除活动申报id: ${args[0]}") - public Result onDelete(@Valid String id) { - dao.clear(ActivityDeclareInfo.class, Cnd.where("id", "=", id)); - // 删除流程相关 - flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + @SLog(tag = "活动申报", msg = "保存申请,申请人: ${args[0].username}") + public Result save(@Param("data") ActivityDeclareInfo activityDeclareInfo) { + // 计算预算总金额 + double sum = activityDeclareInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getBudgetPrice(), 0D)) + .sum(); + activityDeclareInfo.setBudgetMoney(new BigDecimal(sum)); + dao.insertOrUpdate(activityDeclareInfo); return Result.success(); } + + + @At + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "活动申报", msg = "提交申请,申请人: ${args[0].username}") + public Result submit(@Param("data") ActivityDeclareInfo activityDeclareInfo){ + activityDeclareInfo.setYear(ObjectUtil.defaultIfNull(activityDeclareInfo.getYear(), DateUtil.thisYear())); + // 计算预算总金额 + double sum = activityDeclareInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getBudgetPrice(), 0D)) + .sum(); + activityDeclareInfo.setBudgetMoney(new BigDecimal(sum)); + // 保存数据 + dao.insertOrUpdate(activityDeclareInfo); + + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, activityDeclareInfo); + args.set("type", activityDeclareInfo.getActivityType()); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("HDSB", activityDeclareInfo.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "活动申报", msg = "重新提交申请,申请人: ${args[0].username}") + public Result submitAgain(@Param("data") ActivityDeclareInfo activityDeclareInfo, @Param("taskId") Long taskId) { + activityDeclareInfo.setYear(ObjectUtil.defaultIfNull(activityDeclareInfo.getYear(), DateUtil.thisYear())); + // 计算预算总金额 + double sum = activityDeclareInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getBudgetPrice(), 0D)) + .sum(); + activityDeclareInfo.setBudgetMoney(new BigDecimal(sum)); + dao.insertOrUpdate(activityDeclareInfo); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + dict.set("type", activityDeclareInfo.getActivityType()); + flowCommonService.executeTask(dict); + return Result.success(); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareBranchUnionController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareBranchUnionController.java index 66a864ba..ab98ae88 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareBranchUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareBranchUnionController.java @@ -1,17 +1,28 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; import io.swagger.annotations.ApiOperation; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -50,7 +61,67 @@ public class ActivityDeclareBranchUnionController { @ApiOperation("分工会审核列表") @SaCheckPermission("activityDeclare.branchUnion") public Result pageData(CommonPageParam pageParam) { - return Result.success(); + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_declare_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "54f481d7-3239-4cd2-882d-e1cc18ea86eb"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareClubPrincipalController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareClubPrincipalController.java index fcb7c0a9..07ddd47e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareClubPrincipalController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareClubPrincipalController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -19,6 +34,8 @@ import org.nutz.mvc.annotation.Ok; @At("/platform/activityDeclare/clubPrincipal") public class ActivityDeclareClubPrincipalController { + @Inject + private ActivityDeclareService activityDeclareService; @At("") @SaCheckPermission("activityDeclare.clubPrincipal") @@ -31,4 +48,72 @@ public class ActivityDeclareClubPrincipalController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/form.html") public void form() { } + + + @At + @ApiOperation("活动申报,协会负责人审核列表") + @SaCheckPermission("activityDeclare.clubPrincipal") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_declare_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "06d5979b-b52f-4df1-8974-087568322cd6"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java new file mode 100644 index 00000000..02776333 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareMineController.java @@ -0,0 +1,296 @@ +package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.BpmProcessConstant; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; +import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.vo.ProcessTaskVO; +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.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +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 javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.*; + +/** + * @version 1.0 + * @Author zzr + * @name:ActivityDeclareMineController + * @Date 2025/8/26 10:14 + * @注释 + */ +@Slf4j +@IocBean +@Ok("json") +@ApiOperation("我的活动申报") +@At("/platform/activityDeclare/mine") +public class ActivityDeclareMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + @Inject + private ActivityDeclareService activityDeclareService; + + @At("") + @SaCheckPermission("activityDeclare.mine") + @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/mine/index.html") + public void index() { + } + + + @At + @ApiOperation("活动申报,我的申请列表") + @SaCheckPermission("activityDeclare.mine") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + activity_declare_info info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) { + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + cnd.and("info.unionId", "=", SecurityUtil.getUnionId()); + } else { + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + } + } + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + sql.setCondition(cnd); + Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } + + + @At + @ApiOperation("活动申报,查看活动申报") + @SaCheckPermission("activityDeclare.mine") + public Result findOne(@Valid String id) { + ActivityDeclareInfo info = dao.fetch(ActivityDeclareInfo.class, id); + return Result.success().addData(info); + } + + + @At + @ApiOperation("删除活动申报") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("activityDeclare.mine") + @SLog(tag = "活动申报", msg = "删除活动申报id: ${args[0]}") + public Result onDelete(@Valid String id) { + dao.clear(ActivityDeclareInfo.class, Cnd.where("id", "=", id)); + // 删除流程相关 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + + // 如果有报销的流程,也一并删除 + ActivityReimbursementInfo reimbursementInfo = dao.fetch(ActivityReimbursementInfo.class, Cnd.where("declareId", "=", id)); + if (Lang.isNotEmpty(reimbursementInfo)) { + dao.clear(ActivityReimbursementInfo.class, Cnd.where("id", "=", reimbursementInfo.getId())); + // 删除流程相关 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(reimbursementInfo.getId()); + } + return Result.success(); + } + + + @At + @Ok("void") + @SaCheckPermission("activityDeclare.mine") + @SLog(tag = "活动申报", msg = "导出活动申报表") + public void doExportDeclare(@Valid String id, HttpServletResponse response) { + HashMap docData = new HashMap<>(); + + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId + FROM + `activity_declare_info` info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + ins.state = 20 AND info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap info = (NutMap) sql.getResult(); + + String activityContent = info.getString("activityContent"); + info.put("activityContent", sysOfficeTemplateUtil.convertRichTextToDocText(activityContent)); + + docData.put("schoolName", Globals.AppName); + docData.put("info", info); + + List doneTaskVos = new ArrayList<>(); + List doneTaskList = flowEngine.processTaskService().getDoneTaskList(info.getLong("instanceId"), null); + for (ProcessTask doneTask : doneTaskList) { + ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + doneTaskVos.add(taskVO); + } + + // 分工会审核 + doneTaskVos.stream().filter(task -> "分工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("fgh", approval); + }); + + // 协会负责人审核 + doneTaskVos.stream().filter(task -> "协会负责人审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xh", approval); + }); + + // 校工会负责人审核 + doneTaskVos.stream().filter(task -> "校工会负责人审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xfzr", approval); + }); + + // 校工会主席审核 + doneTaskVos.stream().filter(task -> "校工会主席审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xzx", approval); + }); + + String budgetsStr = info.getString("budgets"); + List list = JSONUtil.parseArray(budgetsStr).toList(ActivityBudgetVO.class); + for (int i = 0; i < list.size(); i++) { + list.get(i).setRanking(i + 1); + } + docData.put("budgets", list); + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + Configure config = Configure.builder() + .bind("budgets", policy) + .build(); + + String fileName = Globals.AppName + "【" + info.getString("activityName") + "】申报表.docx"; + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("activity_declare"), config).render(docData).writeAndClose(byteArrayOutputStream); + CommonDownloadUtil.download(fileName, byteArrayOutputStream.toByteArray(), response); + } catch (IOException e) { + log.error("活动申报表导出失败,id:{},错误信息:{}", id, e.getMessage()); + } + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolPrincipalController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolPrincipalController.java index a2d007dd..4ec50776 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolPrincipalController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolPrincipalController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -19,6 +34,9 @@ import org.nutz.mvc.annotation.Ok; @At("/platform/activityDeclare/schoolPrincipal") public class ActivityDeclareSchoolPrincipalController { + @Inject + private ActivityDeclareService activityDeclareService; + @At("") @SaCheckPermission("activityDeclare.schoolPrincipal") @@ -31,4 +49,72 @@ public class ActivityDeclareSchoolPrincipalController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/form.html") public void form() { } + + + @At + @ApiOperation("活动申报,校工会负责人审核列表") + @SaCheckPermission("activityDeclare.schoolPrincipal") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_declare_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "5b511275-143f-4ecd-8eff-7c8ad1456b1b"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolUnionController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolUnionController.java index 6fd5f1e9..8d048064 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/controller/ActivityDeclareSchoolUnionController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.service.ActivityDeclareService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -19,6 +34,9 @@ import org.nutz.mvc.annotation.Ok; @At("/platform/activityDeclare/schoolUnion") public class ActivityDeclareSchoolUnionController { + @Inject + private ActivityDeclareService activityDeclareService; + @At("") @SaCheckPermission("activityDeclare.schoolUnion") @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/schoolunion/index.html") @@ -30,4 +48,71 @@ public class ActivityDeclareSchoolUnionController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/declare/schoolunion/form.html") public void form() { } + + @At + @ApiOperation("活动申报,校工会审核列表") + @SaCheckPermission("activityDeclare.schoolUnion") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_declare_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "81428a9b-63c0-44b8-a28c-17d282c2cc8e"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityDeclareService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/interceptor/ActivityDeclareInterceptor.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/interceptor/ActivityDeclareInterceptor.java index 5482d2bc..c0fcd37a 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/interceptor/ActivityDeclareInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/interceptor/ActivityDeclareInterceptor.java @@ -1,5 +1,17 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.interceptor; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowInterceptor; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.json.Json; + /** * @version 1.0 * @Author zzr @@ -7,5 +19,21 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.interceptor; * @Date 2025/8/1 11:05 * @注释 */ -public class ActivityDeclareInterceptor { +public class ActivityDeclareInterceptor implements FlowInterceptor { + + @Override + public void intercept(Execution execution) { + String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); + + Dao dao = ServiceContext.find(Dao.class); + ActivityDeclareInfo declareInfo = Json.fromJson(ActivityDeclareInfo.class, formDataStr); + declareInfo.setYear(DateUtil.thisYear()); + // 设置流程变量 + execution.getArgs().set("type", declareInfo.getActivityType()); + dao.insertOrUpdate(declareInfo); + + execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(declareInfo)); + int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); + dao.update(ProcessInstance.class, Chain.make("businessNo", declareInfo.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/models/ActivityDeclareInfo.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/models/ActivityDeclareInfo.java index 275d8aa7..7f471887 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/models/ActivityDeclareInfo.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/declare/models/ActivityDeclareInfo.java @@ -2,12 +2,13 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.models; import cn.hutool.json.JSONObject; import com.budwk.app.base.model.BaseModel; -import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudget; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -90,14 +91,14 @@ public class ActivityDeclareInfo extends BaseModel { private String activityAddress; @Column - @Comment("活动开始时间") - @ColDefine(type = ColType.VARCHAR, width = 30) - private String startTime; + @Comment("活动计划开始时间") + @ColDefine(type = ColType.DATETIME) + private Date planStartTime; @Column - @Comment("活动结束时间") - @ColDefine(type = ColType.VARCHAR, width = 30) - private String endTime; + @Comment("活动计划结束时间") + @ColDefine(type = ColType.DATETIME) + private Date planEndTime; @Column @Comment("活动类型") @@ -105,7 +106,7 @@ public class ActivityDeclareInfo extends BaseModel { private String activityType; @Column - @Comment("活动内容") + @Comment("活动方案及简介") @ColDefine(type = ColType.TEXT) private String activityContent; @@ -122,6 +123,10 @@ public class ActivityDeclareInfo extends BaseModel { @Column @Comment("活动经费预算") @ColDefine(type = ColType.MYSQL_JSON) - private List budgets; + private List budgets; + @Column + @Comment("预算总金额") + @ColDefine(customType = "decimal(10,2)") + private BigDecimal budgetMoney; } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java index 93bca1c4..546b1636 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementApplyController.java @@ -1,12 +1,22 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; @@ -19,11 +29,16 @@ import org.nutz.dao.sql.Sql; import org.nutz.ioc.aop.Aop; 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 javax.validation.Valid; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; /** * @version 1.0 @@ -43,6 +58,8 @@ public class ActivityReimbursementApplyController { @Inject private FlowEngine flowEngine; @Inject + private FlowCommonService flowCommonService; + @Inject private ActivityReimbursementService activityReimbursementService; @At("") @@ -57,75 +74,164 @@ public class ActivityReimbursementApplyController { public void form() { } + @At - @SaCheckPermission("activityReimbursement.apply") - @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/apply/view.html") - public void view() { + @ApiOperation("保存申请") + @SaCheckPermission("member.apply.submit") + @SLog(tag = "活动申报", msg = "保存申请,申请人: ${args[0].username}") + public Result save(@Param("data") ActivityReimbursementInfo activityReimbursementInfo) { + if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { + activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getDeclareId()); + } + // 计算实际总金额 + double sum = activityReimbursementInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) + .sum(); + activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); + dao.insertOrUpdate(activityReimbursementInfo); + return Result.success(); } @At - @ApiOperation("活动报销,我的申请列表") - @SaCheckPermission("activityDeclare.apply") - public Result pageData(CommonPageParam pageParam) { - Sql sql = Sqls.create(""" + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "活动申报", msg = "提交申请,申请人: ${args[0].username}") + public Result submit(@Param("data") ActivityReimbursementInfo activityReimbursementInfo){ + if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { + activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getDeclareId()); + } + activityReimbursementInfo.setYear(ObjectUtil.defaultIfNull(activityReimbursementInfo.getYear(), DateUtil.thisYear())); + // 计算实际总金额 + double sum = activityReimbursementInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) + .sum(); + activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); + dao.insertOrUpdate(activityReimbursementInfo); + + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, activityReimbursementInfo); + args.set("type", activityReimbursementInfo.getActivityType()); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("HDBX", activityReimbursementInfo.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "活动申报", msg = "重新提交申请,申请人: ${args[0].username}") + public Result submitAgain(@Param("data") ActivityReimbursementInfo activityReimbursementInfo, @Param("taskId") Long taskId) { + if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) { + activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getDeclareId()); + } + activityReimbursementInfo.setYear(ObjectUtil.defaultIfNull(activityReimbursementInfo.getYear(), DateUtil.thisYear())); + // 计算实际总金额 + double sum = activityReimbursementInfo.getBudgets().stream() + .mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D)) + .sum(); + activityReimbursementInfo.setActualMoney(new BigDecimal(sum)); + dao.insertOrUpdate(activityReimbursementInfo); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + + @At + @ApiOperation("获取当前用户活动报销") + @SaCheckPermission("activityReimbursement.apply") + public Result getActivityReimbursementByUser(String id) { + if (StrUtil.isNotBlank(id)) { + ActivityReimbursementInfo reimbursementInfo = dao.fetch(ActivityReimbursementInfo.class, id); + ActivityDeclareInfo info = dao.fetch(ActivityDeclareInfo.class, reimbursementInfo.getDeclareId()); + return Result.success().addData(List.of(info)); + } + + // 查询已经报销成功的记录 + Sql reiSql = Sqls.create(""" SELECT - info.id, - info.userName, - info.loginName, - info.applyTime, - info.activityName, - info.activityAddress, - info.startTime, - info.endTime, - info.declareUnitName, - info.activityType, - info.activityContent, - info.activityNumber, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariable, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, - (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId + info.declareId FROM activity_reimbursement_info info - LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + userId = @userId + AND ins.state IN (10, 20) + """).setParam("userId", SecurityUtil.getUserId()); + reiSql.setCallback(Sqls.callback.strList()); + dao.execute(reiSql); + List reiDecIdList = reiSql.getList(String.class); + + Sql sql = Sqls.create("select declareId from activity_reimbursement_info where userId = @userId").setParam("userId", SecurityUtil.getUserId()); + sql.setCallback(Sqls.callback.strList()); + dao.execute(sql); + List declareIdList = sql.getList(String.class); + + Sql applySql = Sqls.create(""" + SELECT + info.* + FROM + activity_declare_info info + LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo $condition """); Cnd cnd = Cnd.NEW(); - pageParam.buildSearch(cnd, "info."); - if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + if (Lang.isNotEmpty(declareIdList)) { + cnd.and("info.id", "not in", declareIdList); } - sql.setCondition(cnd); - Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); - return Result.success().addData(pagination); + if (Lang.isNotEmpty(reiDecIdList)) { + cnd.and("info.id", "not in", reiDecIdList); + } + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + cnd.and("ins.state", "=", 20); + applySql.setCondition(cnd); + + List resultList = activityReimbursementService.listMap(applySql); + return Result.success().addData(resultList); } + @At - @ApiOperation("删除活动报销") - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("member.apply.submit") - @SLog(tag = "活动报销", msg = "删除活动报销id: ${args[0]}") - public Result onDelete(@Valid String id) { - dao.clear(ActivityReimbursementInfo.class, Cnd.where("id", "=", id)); - // 删除流程相关 - flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); - return Result.success(); + @ApiOperation("获取收款人卡号") + @SaCheckPermission("activityReimbursement.apply") + public Result getCardNumberByPayeeId(String username) { + Sql sql = Sqls.create(""" + SELECT + JT.bankName, + JT.bankCardNum + FROM + activity_reimbursement_info AS info, + JSON_TABLE( + budgets, + '$[*]' COLUMNS( + username VARCHAR(255) PATH '$.username', + bankName VARCHAR(255) PATH '$.bankName', + bankCardNum VARCHAR(255) PATH '$.bankCardNum' + ) + ) AS JT + WHERE + JT.username = @username + ORDER BY info.applyTime DESC LIMIT 1 + """).setParam("username", username); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap map = (NutMap) sql.getResult(); + return Result.success().addData(map); } + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBoardController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBoardController.java new file mode 100644 index 00000000..5ea50cb9 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBoardController.java @@ -0,0 +1,274 @@ +package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.activity.declarereimbursement.enums.ActivityDeclareReimbursement; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @version 1.0 + * @Author zzr + * @name:ActivityReimbursementBoardController + * @Date 2025/8/26 16:10 + * @注释 + */ +@IocBean +@Ok("json") +@ApiOperation("活动报销图表展示") +@At("/platform/activityReimbursement/board") +public class ActivityReimbursementBoardController { + + @Inject + private Dao dao; + @Inject + private ActivityReimbursementService activityReimbursementService; + + + @At("") + @SaCheckPermission("activityReimbursement.board") + @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/board/index.html") + public void index() { + } + + + @At + @ApiOperation("获取参与人数和活动报销经费数据") + @SaCheckPermission("activityReimbursement.board") + public Result getNumData(Integer startYear, Integer endYear){ + Sql schoolSignNum = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, false).setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()); + Sql unionSignNum = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, false).setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()); + Sql clubSignNum = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, false).setParam("type", ActivityDeclareReimbursement.CLUB.name()); + + Sql schoolActivityMoney = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()); + Sql unionActivityMoney = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()); + Sql clubActivityMoney = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.CLUB.name()); + HashMap result = new HashMap() {{ + put("schoolSignNum", activityReimbursementService.listMap(schoolSignNum).stream().mapToInt(v->v.getInt("activityNum")).sum()); + put("unionSignNum", activityReimbursementService.listMap(unionSignNum).stream().mapToInt(v->v.getInt("activityNum")).sum()); + put("clubSignNum", activityReimbursementService.listMap(clubSignNum).stream().mapToInt(v->v.getInt("activityNum")).sum()); + put("schoolActivityMoney", activityReimbursementService.count(schoolActivityMoney)); + put("unionActivityMoney", activityReimbursementService.count(unionActivityMoney)); + put("clubActivityMoney", activityReimbursementService.count(clubActivityMoney)); + }}; + + return Result.success(result); + } + + + @At + @ApiOperation("获取活动的类型数量柱状图") + @SaCheckPermission("activityReimbursement.board") + public Result getActivityTypeChart(Integer startYear, Integer endYear){ + Sql sql = Sqls.create(""" + SELECT + count(1) + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo + WHERE + ins.state = 30 + AND info.activityType = @type + AND info.`year` = @year + """); + + List list = new ArrayList<>(); + if (startYear == null || endYear == null) { + int nowYear = DateUtil.thisYear(); + startYear = nowYear - 9; + endYear = nowYear; + } + + for (int i = startYear; i <= endYear; i++) { + final int year = i; + list.add(new NutMap() {{ + put("year", year); + put("type", "校工会活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()).setParam("year", year))); + }}); + + list.add(new NutMap() {{ + put("year", year); + put("type", "分工会活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()).setParam("year", year))); + }}); + + list.add(new NutMap() {{ + put("year", year); + put("type", "社团活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.CLUB.name()).setParam("year", year))); + }}); + } + return Result.success().addData(list); + } + + + @At + @ApiOperation("获取活动的类型数量饼图") + @SaCheckPermission("activityReimbursement.board") + public Result getActivityTypePieNum(Integer startYear, Integer endYear){ + Sql sql = Sqls.create(""" + SELECT + count(1) + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo + WHERE + ins.state = 30 + AND activityType = @type + AND `year` <= @startYear + AND `year` >= @endYear + """).setParam("startYear", startYear).setParam("endYear", endYear); + + List list = new ArrayList<>(); + list.add(new NutMap() {{ + put("type", "校工会活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()))); + }}); + list.add(new NutMap() {{ + put("type", "分工会活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()))); + }}); + list.add(new NutMap() {{ + put("type", "社团活动"); + put("num", activityReimbursementService.count(sql.setParam("type", ActivityDeclareReimbursement.CLUB.name()))); + }}); + return Result.success(list); + } + + + @At + @ApiOperation("获取活动的经费统计图") + @SaCheckPermission("activityReimbursement.board") + public Result getActivityMoneyChart(Integer startYear, Integer endYear){ + Sql sql = Sqls.create(""" + SELECT + IFNULL(sum(info.actualMoney), 0) money + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo + WHERE + ins.state = 30 + AND info.activityType = @type + AND info.`year` = @year + """); + + List list = new ArrayList<>(); + if (startYear == null || endYear == null) { + int nowYear = DateUtil.thisYear(); + startYear = nowYear - 9; + endYear = nowYear; + } + + for (int i = startYear; i <= endYear; i++) { + final int year = i; + list.add(new NutMap() {{ + put("year", year); + put("type", "校工会费用"); + put("num", activityReimbursementService.list(sql.setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()).setParam("year", year)).get(0).getDouble("money")); + }}); + + list.add(new NutMap() {{ + put("year", year); + put("type", "分工会费用"); + put("num", activityReimbursementService.list(sql.setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()).setParam("year", year)).get(0).getDouble("money")); + }}); + + list.add(new NutMap() {{ + put("year", year); + put("type", "社团费用"); + put("num", activityReimbursementService.list(sql.setParam("type", ActivityDeclareReimbursement.CLUB.name()).setParam("year", year)).get(0).getDouble("money")); + }}); + } + + return Result.success(list); + } + + + @At + @ApiOperation("获取活动的经费饼图") + @SaCheckPermission("activityReimbursement.board") + public Result getActivityMoneyPieNum(Integer startYear, Integer endYear){ + Sql schoolSql = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.SCHOOL_UNION.name()); + Sql unionSql = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.BRANCH_UNION.name()); + Sql clubSql = activityReimbursementService.getActivityUserNumAndMoneySql(startYear, endYear, true).setParam("type", ActivityDeclareReimbursement.CLUB.name()); + + List list = new ArrayList<>(); + list.add(new NutMap() {{ + put("type", "校工会费用"); + put("num", activityReimbursementService.count(schoolSql)); + }}); + list.add(new NutMap() {{ + put("type", "分工会费用"); + put("num", activityReimbursementService.count(unionSql)); + }}); + list.add(new NutMap() {{ + put("type", "社团费用"); + put("num", activityReimbursementService.count(clubSql)); + }}); + return Result.success().addData(list); + } + + + @At + @ApiOperation("所有工会的报销费用或活动数统计") + @SaCheckPermission("activityReimbursement.board") + public Result allUnionActivityAndMoney(Integer year, Boolean isUnionMoney){ + Sql sql = Sqls.create(""" + SELECT + su.`name` AS unionname, + $unionSql + FROM + sys_union su + LEFT JOIN activity_reimbursement_info info ON su.id = info.unionId + AND info.activityType = "BRANCH_UNION" + AND info.`year` = @year + GROUP BY + su.`name` + ORDER BY + su.unionCode ASC + """).setParam("year", year); + sql.setVar("unionSql", isUnionMoney ? new Static(" COALESCE(SUM(info.actualMoney), 0) AS money ") : new Static(" count(info.id) as money ")); + List list = activityReimbursementService.listMap(sql); + return Result.success(list); + } + + + @At + @ApiOperation("所有协会的报销费用或活动数统计") + @SaCheckPermission("activityReimbursement.board") + public Result allClubActivityAndMoney(Integer year, Boolean isClubMoney) { + Sql sql = Sqls.create(""" + SELECT + sc.clubName, + $clubSql + FROM + sys_club sc + LEFT JOIN activity_reimbursement_info info ON sc.id = info.clubId + AND info.`year` = @year + AND info.activityType = "CLUB" + GROUP BY + sc.id + ORDER BY + sc.clubCode ASC + """).setParam("year", year); + sql.setVar("clubSql", isClubMoney ? new Static(" COALESCE(SUM(info.actualMoney), 0) AS money ") : new Static(" count(info.id) as money ")); + List list = activityReimbursementService.listMap(sql); + return Result.success(list); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBranchUnionController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBranchUnionController.java index 90005932..30cfbc79 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBranchUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementBranchUnionController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -15,10 +30,13 @@ import org.nutz.mvc.annotation.Ok; */ @IocBean @Ok("json") -@ApiOperation("活动申报,分工会管理员审核") +@ApiOperation("活动报销,分工会管理员审核") @At("/platform/activityReimbursement/branchUnion") public class ActivityReimbursementBranchUnionController { + @Inject + private ActivityReimbursementService activityReimbursementService; + @At("") @SaCheckPermission("activityReimbursement.branchUnion") @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/index.html") @@ -30,4 +48,72 @@ public class ActivityReimbursementBranchUnionController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/form.html") public void form() { } + + + @At + @ApiOperation("活动报销,分工会审核列表") + @SaCheckPermission("activityReimbursement.branchUnion") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "1e4cc473-beae-427d-b9dc-c1c4d0eb07c8"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementClubPrincipalController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementClubPrincipalController.java index a20a4ed3..36ff63a4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementClubPrincipalController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementClubPrincipalController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -15,10 +30,12 @@ import org.nutz.mvc.annotation.Ok; */ @IocBean @Ok("json") -@ApiOperation("活动申报,协会负责人审核") +@ApiOperation("活动报销,协会负责人审核") @At("/platform/activityReimbursement/clubPrincipal") public class ActivityReimbursementClubPrincipalController { + @Inject + private ActivityReimbursementService activityReimbursementService; @At("") @SaCheckPermission("activityReimbursement.clubPrincipal") @@ -31,4 +48,73 @@ public class ActivityReimbursementClubPrincipalController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/form.html") public void form() { } + + + @At + @ApiOperation("活动报销,协会负责人审核列表") + @SaCheckPermission("activityReimbursement.clubPrincipal") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "5afcf810-7a8b-4896-9aa7-c99995e0856b"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementMineController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementMineController.java new file mode 100644 index 00000000..a83b127a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementMineController.java @@ -0,0 +1,379 @@ +package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.convert.NumberChineseFormatter; +import cn.hutool.core.convert.NumberWordFormatter; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +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.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.vo.ProcessTaskVO; +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.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +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 javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; + +/** + * @version 1.0 + * @Author zzr + * @name:ActivityReimbursementMineController + * @Date 2025/8/26 11:16 + * @注释 + */ +@IocBean +@Ok("json") +@Slf4j +@ApiOperation("我的活动报销") +@At("/platform/activityReimbursement/mine") +public class ActivityReimbursementMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + @Inject + private ActivityReimbursementService activityReimbursementService; + + @At("") + @SaCheckPermission("activityReimbursement.mine") + @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/mine/index.html") + public void index() { + } + + @At + @ApiOperation("活动报销,我的申请列表") + @SaCheckPermission("activityReimbursement.mine") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.declareId, + info.userName, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.startTime, + info.endTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + activity_reimbursement_info info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) { + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + cnd.and("info.unionId", "=", SecurityUtil.getUnionId()); + } else { + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + } + } + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } +// cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } + + @At + @ApiOperation("活动报销,查看活动报销") + @SaCheckPermission("activityReimbursement.mine") + public Result findOne(@Valid String id) { + ActivityReimbursementInfo info = dao.fetch(ActivityReimbursementInfo.class, id); + return Result.success().addData(info); + } + + + @At + @ApiOperation("删除活动报销") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("activityReimbursement.mine") + @SLog(tag = "活动报销", msg = "删除活动报销id: ${args[0]}") + public Result onDelete(@Valid String id) { + dao.clear(ActivityReimbursementInfo.class, Cnd.where("id", "=", id)); + // 删除流程相关 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + + @At + @Ok("void") + @SaCheckPermission("activityReimbursement.mine") + @SLog(tag = "活动报销", msg = "导出报销凭证") + public void doExportReimbursement(@Valid String id, HttpServletResponse response) { + HashMap docData = new HashMap<>(); + + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId + FROM + `activity_reimbursement_info` info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + ins.state = 20 AND info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap info = (NutMap) sql.getResult(); + + String activityContent = info.getString("activityContent"); + if (activityContent != null) { + // 检查是否以

标签开头并以

标签结尾 + if (activityContent.startsWith("

") && activityContent.endsWith("

")) { + // 去除最外层的

标签 + activityContent = activityContent.substring(3, activityContent.length() - 4); + } + // 对处理后的内容进行富文本转换 + info.put("activityContent", sysOfficeTemplateUtil.convertRichTextToDocText(activityContent)); + } + + + double actualMoneyNum = info.getDouble("actualMoney"); + // 分离整数和小数部分 + long integerPart = (long) actualMoneyNum; + int decimalPartValue = (int) Math.round((actualMoneyNum - integerPart) * 100); + + // 转换整数部分为中文大写 + String integerChinese = NumberChineseFormatter.format(integerPart, true) + "元"; + + // 处理小数部分 + String decimalChinese = ""; + int jiao = decimalPartValue / 10; + int fen = decimalPartValue % 10; + + if (jiao > 0) { + decimalChinese += NumberChineseFormatter.format(jiao, true) + "角"; + } + if (fen > 0) { + decimalChinese += NumberChineseFormatter.format(fen, true) + "分"; + } + + // 如果没有小数部分,添加"整"字 + if (decimalChinese.isEmpty()) { + decimalChinese = "整"; + } + + // 组合结果 + String actualMoneyChinese = integerChinese + decimalChinese; + info.put("actualMoney", actualMoneyChinese); + + docData.put("schoolName", Globals.AppName); + docData.put("info", info); + // 使用BigDecimal确保精确处理 + BigDecimal bd = BigDecimal.valueOf(actualMoneyNum).setScale(2, RoundingMode.HALF_UP); + String moneyStr = bd.toPlainString(); + + // 分割整数和小数部分 + String[] parts = moneyStr.split("\\."); + String integerPartStr = parts[0]; + String decimalPartStr = parts.length > 1 ? parts[1] : "00"; + + // 确保小数部分是两位 + if (decimalPartStr.length() < 2) { + decimalPartStr = String.format("%-2s", decimalPartStr).replace(' ', '0'); + } else if (decimalPartStr.length() > 2) { + decimalPartStr = decimalPartStr.substring(0, 2); + } + + // 处理小数部分(角和分) + int jiaoDigit = 0, fenDigit = 0; + if (decimalPartStr.length() >= 1) jiaoDigit = Character.getNumericValue(decimalPartStr.charAt(0)); + if (decimalPartStr.length() >= 2) fenDigit = Character.getNumericValue(decimalPartStr.charAt(1)); + + // 处理整数部分(各位数值) + String reversed = new StringBuilder(integerPartStr).reverse().toString(); + String[] units = {"元", "十位", "百位", "千位", "万位", "十万位", "百万位"}; + Map digits = new HashMap<>(); + + for (int i = 0; i < reversed.length(); i++) { + if (i >= units.length) break; + digits.put(units[i], Character.getNumericValue(reversed.charAt(i))); + } + + // 按照one到nine的顺序设置字段(从百万位到分位) + Map digitFields = new HashMap<>(); + + // one: 百万位 + digitFields.put("one", digits.getOrDefault("百万位", 0)); + // two: 十万位 + digitFields.put("two", digits.getOrDefault("十万位", 0)); + // three: 万位 + digitFields.put("three", digits.getOrDefault("万位", 0)); + // four: 千位 + digitFields.put("four", digits.getOrDefault("千位", 0)); + // five: 百位 + digitFields.put("five", digits.getOrDefault("百位", 0)); + // six: 十位 + digitFields.put("six", digits.getOrDefault("十位", 0)); + // seven: 元位 + digitFields.put("seven", digits.getOrDefault("元", 0)); + // eight: 角 + digitFields.put("eight", jiaoDigit); + // nine: 分 + digitFields.put("nine", fenDigit); + + // 将数字字段添加到info中 + info.putAll(digitFields); + + + List doneTaskVos = new ArrayList<>(); + List doneTaskList = flowEngine.processTaskService().getDoneTaskList(info.getLong("instanceId"), null); + for (ProcessTask doneTask : doneTaskList) { + ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + doneTaskVos.add(taskVO); + } + + // 分工会审核 + doneTaskVos.stream().filter(task -> "分工会审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("fgh", approval); + }); + + // 协会负责人审核 + doneTaskVos.stream().filter(task -> "协会负责人审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xh", approval); + }); + + // 校工会负责人审核 + doneTaskVos.stream().filter(task -> "校工会负责人审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xfzr", approval); + }); + + // 校工会主席审核 + doneTaskVos.stream().filter(task -> "校工会主席审核".equals(task.getDisplayName())) + .max(Comparator.comparing(ProcessTaskVO::getCreatedAt)) + .ifPresent(v -> { + Dict taskFormData = v.getTaskFormData(); + HashMap approval = new HashMap<>(); + + approval.put("date", DateUtil.format(v.getFinishTime(), "yyyy年MM月dd日")); + approval.put("user", taskFormData.getStr("tf_userName")); + if (StrUtil.isNotBlank(taskFormData.getStr("tf_sign"))) { + approval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(taskFormData.getStr("tf_sign"))); + } + approval.put("opinion", taskFormData.getStr("tf_opinion")); + docData.put("xzx", approval); + }); + + String budgetsStr = info.getString("budgets"); + List list = JSONUtil.parseArray(budgetsStr).toList(ActivityBudgetVO.class); + for (int i = 0; i < list.size(); i++) { + list.get(i).setRanking(i + 1); + } + + docData.put("budgets", list); + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + Configure config = Configure.builder() + .bind("budgets", policy) + .build(); + + String fileName = Globals.AppName + "【" + info.getString("activityName") + "】报销凭证表.docx"; + + try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("activity_reimbursement_voucher"), config).render(docData).writeAndClose(byteArrayOutputStream); + CommonDownloadUtil.download(fileName, byteArrayOutputStream.toByteArray(), response); + } catch (IOException e) { + log.error("报销凭证表导出失败,id:{},错误信息:{}", id, e.getMessage()); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolPrincipalController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolPrincipalController.java index 062b2f66..54f7189b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolPrincipalController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolPrincipalController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -15,10 +30,12 @@ import org.nutz.mvc.annotation.Ok; */ @IocBean @Ok("json") -@ApiOperation("活动申报,校工会负责人审核") +@ApiOperation("活动报销,校工会负责人审核") @At("/platform/activityReimbursement/schoolPrincipal") public class ActivityReimbursementSchoolPrincipalController { + @Inject + private ActivityReimbursementService activityReimbursementService; @At("") @SaCheckPermission("activityReimbursement.schoolPrincipal") @@ -31,4 +48,72 @@ public class ActivityReimbursementSchoolPrincipalController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/form.html") public void form() { } + + + @At + @ApiOperation("活动报销,校工会负责人审核列表") + @SaCheckPermission("activityReimbursement.schoolPrincipal") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "6dd2e8b3-fd0d-4b35-bb2a-1eef227cba96"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolUnionController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolUnionController.java index 86c1df02..bf52c35f 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementSchoolUnionController.java @@ -1,11 +1,26 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Cnd; +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.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -15,10 +30,13 @@ import org.nutz.mvc.annotation.Ok; */ @IocBean @Ok("json") -@ApiOperation("活动申报,校工会审核") +@ApiOperation("活动报销,校工会审核") @At("/platform/activityReimbursement/schoolUnion") public class ActivityReimbursementSchoolUnionController { + @Inject + private ActivityReimbursementService activityReimbursementService; + @At("") @SaCheckPermission("activityReimbursement.schoolUnion") @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html") @@ -30,4 +48,72 @@ public class ActivityReimbursementSchoolUnionController { @Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/form.html") public void form() { } + + + @At + @ApiOperation("活动报销,校工会审核列表") + @SaCheckPermission("activityReimbursement.schoolUnion") + public Result pageData(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.mobile, + info.loginName, + info.applyTime, + info.activityName, + info.activityAddress, + info.planStartTime, + info.planEndTime, + info.declareUnitName, + info.activityType, + info.activityContent, + info.activityNumber, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + + cnd.and("t.taskName", "=", "47bfdf53-288c-4352-a403-0653483b54eb"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (pageParam.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/interceptor/ActivityReimbursementInterceptor.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/interceptor/ActivityReimbursementInterceptor.java index cd5b136d..63d0ff77 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/interceptor/ActivityReimbursementInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/interceptor/ActivityReimbursementInterceptor.java @@ -1,5 +1,16 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.interceptor; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowInterceptor; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.json.Json; + /** * @version 1.0 * @Author zzr @@ -7,5 +18,21 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.intercept * @Date 2025/8/1 11:05 * @注释 */ -public class ActivityReimbursementInterceptor { +public class ActivityReimbursementInterceptor implements FlowInterceptor { + + @Override + public void intercept(Execution execution) { + String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); + + Dao dao = ServiceContext.find(Dao.class); + ActivityReimbursementInfo reimbursementInfo = Json.fromJson(ActivityReimbursementInfo.class, formDataStr); + reimbursementInfo.setDeclareId(reimbursementInfo.getId()); + // 设置流程变量 + execution.getArgs().set("type", reimbursementInfo.getActivityType()); + dao.insertOrUpdate(reimbursementInfo); + + execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(reimbursementInfo)); + int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); + dao.update(ProcessInstance.class, Chain.make("businessNo", reimbursementInfo.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java index 19846f7e..fde498c4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/models/ActivityReimbursementInfo.java @@ -5,7 +5,10 @@ import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityD import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -20,11 +23,32 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) public class ActivityReimbursementInfo extends ActivityDeclareInfo { + @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 declareId; + @Column + @Comment("实际总金额") + @ColDefine(customType = "decimal(10,2)") + private BigDecimal actualMoney; + + @Column + @Comment("活动开始时间") + @ColDefine(type = ColType.DATETIME) + private Date startTime; + + @Column + @Comment("活动结束时间") + @ColDefine(type = ColType.DATETIME) + private Date endTime; + @Column @Comment("发票") @ColDefine(type = ColType.MYSQL_JSON) diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java index 71d8820c..67705587 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java @@ -2,6 +2,7 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service; import com.budwk.app.base.service.BaseService; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; +import org.nutz.dao.sql.Sql; /** * @version 1.0 @@ -11,4 +12,7 @@ import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.Act * @注释 */ public interface ActivityReimbursementService extends BaseService { + + + Sql getActivityUserNumAndMoneySql(Integer startYear, Integer endYear, Boolean isActivityMoney); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java index c12eed1e..03594d07 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java @@ -4,6 +4,8 @@ import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.IocBean; /** @@ -18,4 +20,37 @@ public class ActivityReimbursementServiceImpl extends BaseServiceImpl= @startYear + AND info.`year` <= @endYear + """) + .setParam("startYear", startYear).setParam("endYear", endYear); + } else { + return Sqls.create(""" + SELECT + info.activityNumber AS activityNum + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo + WHERE + ins.state = 30 + AND info.activityType = @type + AND info.`year` >= @startYear + AND info.`year` <= @endYear + """).setParam("startYear", startYear).setParam("endYear", endYear); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudget.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudgetVO.java similarity index 94% rename from src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudget.java rename to src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudgetVO.java index c543e0fd..e59d01bf 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudget.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/ActivityBudgetVO.java @@ -13,7 +13,9 @@ import lombok.Data; */ @Data @ApiModel("费用预算") -public class ActivityBudget { +public class ActivityBudgetVO { + + private Integer ranking; @ApiModelProperty(value = "名称") private String name; diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java index b58e4a19..f86720e1 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/vo/CommonPageParam.java @@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.param.PageForm; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo; import com.budwk.app.zhgh.activity.declarereimbursement.enums.ActivityDeclareReimbursement; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -23,7 +22,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; @Data @ApiModel("通用分页参数") @EqualsAndHashCode(callSuper = true) -public class CommonPageParam extends PageForm { +public class CommonPageParam extends PageForm { private Integer year; @@ -51,10 +50,10 @@ public class CommonPageParam extends PageForm { RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name())) { cnd.and(prefix + "unionid", "=", SecurityUtil.getUnionId()); - } - - if (AuthUtil.hasRoleOr(RoleConstant.CLUB_MANAGER.name(), RoleConstant.CLUB_PRESIDENT.name())) { + } else if (AuthUtil.hasRoleOr(RoleConstant.CLUB_MANAGER.name(), RoleConstant.CLUB_PRESIDENT.name())) { // cnd.and(prefix + "clubId", "=", ); + } else { + cnd.andEX(prefix + "userId", "=", SecurityUtil.getUserId()); } } else { cnd.andEX(prefix + "unionId", "=", this.getUnionId()); diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyUserServiceImpl.java index 5436089e..e9fa7e17 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyUserServiceImpl.java @@ -40,7 +40,7 @@ public class FamilyUserServiceImpl extends BaseServiceImpl impl u.unionname, tsuc.courseName, tsuu.state, - ( SELECT count( 1 ) FROM family_user_course WHERE userId = tsuu.userId $var) tourseTotal, + ( SELECT count( 1 ) FROM family_user_course WHERE userId = tsuu.userId $var) courseTotal, ( SELECT count( 1 ) FROM family_user_course WHERE userId = tsuu.userId AND isAttend = 0 and tsuu.state!=2 AND now()> courseEndTime $var) AS absentCount, if(tsubl.isDisabled=1,true,false) isDisabled, group_CONCAT( tsuc.courseName ) AS courseNames diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/constant/ColumnFormTypeEnum.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/constant/ColumnFormTypeEnum.java new file mode 100644 index 00000000..630f672b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/constant/ColumnFormTypeEnum.java @@ -0,0 +1,24 @@ +package com.budwk.app.zhgh.activity.literacy.constant; + +import com.budwk.app.base.annotation.DictEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author JyuHsin + * @Date 2022/11/18 + * @Description + */ +@Getter +@DictEnum(key = "ColumnFormTypeEnum", name = "控件类型") +@AllArgsConstructor +public enum ColumnFormTypeEnum { + + INPUT("INPUT", "输入框"), + SELECT("SELECT", "选择框"), + //RADIO("RADIO", "单选框"),//选项数组 + FILE("FILE", "文件"); + + private String code; + private String description; +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityAddController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityAddController.java new file mode 100644 index 00000000..b19a159b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityAddController.java @@ -0,0 +1,96 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zxy + * @Description 新建活动 + * @createTime 2022年03月07日 10:16:00 + */ +@Slf4j +@IocBean +@Api(tags = "新建品牌活动") +@At("/platform/literacy/manage/activity") +public class LiteracyActivityAddController { + + @Inject + private Dao dao; + @Inject + private LiteracyActivityService literacySignUpActivityManageService; + + @At + @Ok("json:full") + @ApiOperation("品牌活动新增/修改") + @SaCheckPermission("literacy.manage.activity") + @SLog(tag = "品牌活动-活动管理", msg = "新增/修改活动") + public Result doHandle(LiteracyActivity activity) { + if (StrUtil.isBlank(activity.getId())) { + literacySignUpActivityManageService.add(activity, null); + } else { + literacySignUpActivityManageService.edit(activity); + } + return Result.success(); + } + + @At + @Ok("json:full") + @ApiOperation("获取分工会人数限制") + @SaCheckPermission("literacy.manage.activity") + public Result getUnionLimit(@Param(value = "activityScopeId") String activityScopeId) { + Sql sql = Sqls.create(""" + SELECT + gh.id, + gh.name, + gh.unioncode, + (select count(1) from `vw_user` where unionid = gh.id $cnd) as teacherCount, + NULL as ratio, + NULL as limitCount + FROM + sys_union gh + order by gh.unioncode + """); + if (StrUtil.isNotBlank(activityScopeId)) { + sql.setVar("cnd", "AND id in (select userId from activity_user_scope where groupId = '" + activityScopeId + "')"); + } + List list = literacySignUpActivityManageService.listMap(sql); + return Result.success().addData(list); + } + + @At + @Ok("json:full") + @ApiOperation("获取报名人员数量") + @SaCheckPermission("literacy.manage.activity") + public Result getRegisterUserCount(@Param(value = "courseId") String courseId) { + return Result.success().addData(dao.count(LiteracyUser.class, Cnd.where("courseId", "=", courseId))); + } + + @At + @Ok("json:full") + @ApiOperation("获取历史活动列表") + @SaCheckPermission("literacy.manage.activity") + public Result getHistoricalActList() { + List query = dao.query(LiteracyActivity.class, Cnd.NEW().desc("activityStartTime")); + return Result.success().addData(query); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityApplyController.java new file mode 100644 index 00000000..03557139 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityApplyController.java @@ -0,0 +1,176 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivityCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +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.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动报名") +@At("/platform/literacy/manage/apply") +public class LiteracyActivityApplyController { + + @Inject + private LiteracyActivityService literacyActivityService; + @Inject + private SysDictService dictService; + @Inject + private LiteracyActivityStatisticsService statisticsService; + + @At("") + @SaCheckPermission("literacy.manage.apply") + @Ok("beetl:/platform/zhgh/activity/literacy/apply/index.html") + public void index() { + } + + @At + @ApiOperation("活动查询") + @SaCheckPermission("literacy.manage.apply") + public Result activityData(PageForm pageForm, + @Param(value = "year") Integer year, + @Param(value = "activityType") Integer activityType) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("`year`", "=", year); + //查询报名中 + if (activityType == 2) { + cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime")); + }//查询已结束的 + else if (activityType == 3) { + cnd.and(new Static("now() > activityEndTime")); + } + + if (AuthUtil.hasRole("H04") && !AuthUtil.hasRoleOr("sysadmin, A06")) { + cnd.and("activityMode", "=", 2).and("createdBy", "=", SecurityUtil.getUserId()); + } + + Pagination pagination = literacyActivityService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + List literacyActivities = pagination.getList(); + Map literacyTypeMap = dictService.getSubListByCode("LITERACY_SIGNUP_TYPE").stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); + literacyActivities.forEach(v -> v.setLiteracyType(literacyTypeMap.get(v.getLiteracyType()))); + return Result.success(pagination); + } + + @At + @ApiOperation("分活动查询") + @SaCheckPermission("literacy.manage.apply") + public Result pageData(PageForm pageForm, + @Param(value = "courseTypeId") String courseTypeId, + @Param(value = "activityId") String activityId, + @Param(value = "assortTypes") String[] assortTypes) { + Sql sql = Sqls.create(""" + SELECT + tsuc.id, + tsuc.activityId, + tsuc.courseName, + tsuc.coursePeopleNumber, + tsuc.courseLocation, + tsuc.courseType, + tsuc.courseLocationCoordinates, + tsuc.courseReservedNumber, + tsuc.courseInstructor, + tsuc.campus, + tsuc.unionLimit, + tsuc.isMobileSign, + tsuc.signType, + tsuc.isReceiveGift, + tsuc.giftType, + tsuc.reserveMode, + tsuc.waitingNum, + tsuc.assort, + type.typeName, + tsuc.courseIsLimitApply + FROM + `literacy_course` tsuc + LEFT JOIN literacy_type type ON type.id = tsuc.courseType + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("type.id", "=", courseTypeId); + cnd.and("tsuc.activityId", "=", activityId); + if(Lang.isNotEmpty(assortTypes)) { + cnd.and("tsuc.assort", "in", assortTypes); + } + + List courseArray = literacyActivityService.dao().query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + courseArray = literacyActivityService.filterCourseByHostUnion(courseArray); + cnd.and("tsuc.id", "in", courseArray.stream().map(LiteracyCourse::getId).toList()); + + cnd.asc("tsuc.orderNum"); + cnd.asc("type.code"); + sql.setCondition(cnd); + + Pagination pagination = literacyActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List courseList = pagination.getList(); + + courseList.forEach(c -> { + c.put("hasRegisterNum", statisticsService.queryCourseCount(c.getString("id"), c.getString("courseType"))); + c.put("hasWaitingNum", statisticsService.queryCourseWaitCount(c.getString("id"), c.getString("courseType"))); + //当前用户是否报过 + c.put("isSign", literacyActivityService.isSignCourseByUser(c.getString("id"), SecurityUtil.getUserId())); + + if(StrUtil.isNotBlank(c.getString("unionLimit"))) { + List unionLimit = Json.fromJsonAsList(NutMap.class, c.getString("unionLimit")); + if(Lang.isNotEmpty(unionLimit)) { + NutMap nutMap = unionLimit.stream().filter(o -> o.getString("id").equals(SecurityUtil.getUnionId())).findFirst().orElse(null); + if(nutMap != null) { + c.put("coursePeopleNumber", nutMap.getInt("limitCount")); + } + } + } + }); + return Result.success(pagination); + } + + @At + @ApiOperation("获取分活动时间") + @SaCheckPermission("literacy.manage.apply") + public Result getCourseTime(String id) { + List list = literacyActivityService.dao().query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", id)); + return Result.success(list); + } + + @At + @ApiOperation("查询分类标识集合") + @SaCheckPermission("literacy.manage.apply") + public Result queryCourseAssort(String activityId) { + List courseList = literacyActivityService.dao().query(LiteracyCourse.class, Cnd.where(LiteracyCourse::getActivityId, "=", activityId).asc(LiteracyCourse::getOrderNum)); + if(Lang.isEmpty(courseList)) { + return Result.success(new ArrayList<>()); + } + List assortList = courseList.stream().map(LiteracyCourse::getAssort).filter(StrUtil::isNotBlank).toList(); + return Result.success(assortList); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityController.java new file mode 100644 index 00000000..6bc4ade8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyActivityController.java @@ -0,0 +1,144 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.zhgh.activity.literacy.models.*; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +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 org.nutz.trans.Trans; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description 培训报名 活动管理 + * @createTime 2022年02月23日 09:57:00 + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动管理") +@At("/platform/literacy/manage/activity") +public class LiteracyActivityController { + + @Inject + private LiteracyActivityService literacySignUpActivityManageService; + @Inject + private Dao dao; + + @At("") + @SaCheckPermission("literacy.manage.activity") + @Ok("beetl:/platform/zhgh/activity/literacy/manage/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.manage.activity") + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year, + @Param(value = "activityName") String activityName) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + cnd.and(Cnd.likeEX("activityName", activityName)); + cnd.orderBy("createdAt", "desc"); + return Result.success().addData(literacySignUpActivityManageService.pageData(pageForm, cnd)); + } + + @At + @ApiOperation("活动删除") + @SaCheckPermission("literacy.manage.activity") + @SLog(tag = "品牌活动-活动管理", msg = "删除活动") + public Result onDelete(String id) { + Trans.exec(() -> { + literacySignUpActivityManageService.delete(id); + dao.clear(LiteracyCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyActivityCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyUser.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyUserCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyActivity.class, Cnd.where("id", "=", id)); + dao.clear(LiteracyTypeLimit.class, Cnd.where("activityId", "=", id)); + dao.delete(Sys_home_activity.class, id); + }); + return Result.success(); + } + + @At + @ApiOperation("活动状态变更") + @SaCheckPermission("literacy.manage.activity") + public Result activityStatusChange(LiteracyActivity activity) { + literacySignUpActivityManageService.updateActivityStatus(activity); + dao.update(Sys_home_activity.class, + Chain.make("enable", !activity.isDisabled()), + Cnd.where("id", "=", activity.getId())); + return Result.success(); + } + + @At + @ApiOperation("查询单个活动") + @SaCheckPermission("literacy.manage.activity") + public Result findOne(@Param("id") @NotNull String id) { + NutMap dataMap = literacySignUpActivityManageService.findOne(id, null, ""); + String activityStartTime = dataMap.getString("activityStartTime"); + String activityEndTime = dataMap.getString("activityEndTime"); + if(StrUtil.isNotBlank(activityStartTime) && StrUtil.isNotBlank(activityEndTime)) { + dataMap.put("activityTime", List.of(activityStartTime, activityEndTime)); + } else { + dataMap.put("activityTime", new ArrayList<>()); + } + + String activitySignUpStartTime = dataMap.getString("activitySignUpStartTime"); + String activitySignUpEndTime = dataMap.getString("activitySignUpEndTime"); + if(StrUtil.isNotBlank(activitySignUpStartTime) && StrUtil.isNotBlank(activitySignUpEndTime)) { + dataMap.put("activitySignTime", List.of(activitySignUpStartTime, activitySignUpEndTime)); + } else { + dataMap.put("activitySignTime", new ArrayList<>()); + } + + List courseList = dataMap.getList("courseList", NutMap.class); + + //查询所有的课程类型 + List literacySignUpTypeList = dao.query(LiteracyType.class, Cnd.NEW()); + Map typeMap = literacySignUpTypeList.stream().collect(Collectors.toMap(LiteracyType::getId, LiteracyType::getTypeName)); + + courseList.forEach(v -> { + + List courseTimeList = v.getList("courseTimeList", NutMap.class); + //选择课程日期 下拉框 + List setUpCourseData = courseTimeList.stream().map(cd -> cd.getString("courseDate")).distinct().collect(Collectors.toList()); + v.put("setUpCourseData", setUpCourseData); + + courseTimeList.forEach(ct -> { + String courseStartTime = DateUtil.format(ct.getTime("courseStartTime"), "HH:mm"); + String courseEndTime = DateUtil.format(ct.getTime("courseEndTime"), "HH:mm"); + ct.put("courseStartTime", courseStartTime); + ct.put("courseEndTime", courseEndTime); + }); + + v.put("courseTypeName", typeMap.get(v.getString("courseType"))); + }); + + return Result.success().addData(dataMap); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyTypeController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyTypeController.java new file mode 100644 index 00000000..f84c0598 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyTypeController.java @@ -0,0 +1,167 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.EnumUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.entity.annotation.ColType; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.Strings; +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; + +/** + * @Author JyuHsin + * @Date 2022/9/22 + * @Description + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动类型管理") +@At("/platform/literacy/manage/type") +public class LiteracyTypeController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + + @At("") + @SaCheckPermission("literacy.manage.type") + @Ok("beetl:/platform/zhgh/activity/literacy/type/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.manage.type") + public Result pageData(PageForm pageForm, + @Param(value = "typeName") String typeName) { + Cnd cnd = Cnd.NEW(); + Sql sql = Sqls.create(""" + select * from literacy_type $condition + """); + if (Strings.isNotBlank(typeName)) { + cnd.and("typeName", "like", "%" + typeName + "%"); + } + if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } else { + cnd.asc("xh"); + } + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List list = pagination.getList(); + list.forEach(item -> { + Cnd c = Cnd.NEW(); + c.and("typeId", "=", item.getString("id")); + c.asc("columnIndex"); + List signColumns = dao.query(LiteracyMobileSignColumn.class, c); + item.put("literacyMobileSignColumnList", signColumns); + + }); + return Result.success().addData(pagination); + } + + @At + @ApiOperation("活动类型新增") + @SaCheckPermission("literacy.manage.type") + @SLog(tag = "品牌活动-类型管理", msg = "活动类型新增") + public Result doAdd(@Param("data") String data) throws Exception { + LiteracyType type = Json.fromJson(LiteracyType.class, data); + int count = dao.count(LiteracyType.class, Cnd.where("code", "=", type.getCode())); + if (count > 0) { + return Result.error("编码重复!"); + } + int totalCount = dao.count(LiteracyType.class); + type.setXh(totalCount + 1); + dao.insertWith(type, "literacyMobileSignColumnList"); + return Result.success(); + } + + @At + @ApiOperation("活动类型修改") + @SaCheckPermission("literacy.manage.type") + @SLog(tag = "品牌活动-类型管理", msg = "活动类型修改") + public Result doEdit(LiteracyType type) { + int count = dao.count(LiteracyType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId())); + if (count > 0) { + return Result.error("编码重复!"); + } + dao.update(type); + dao.clear(LiteracyMobileSignColumn.class, Cnd.where("typeId", "=", type.getId())); + dao.insertLinks(type, "literacyMobileSignColumnList"); + return Result.success(); + } + + @At + @ApiOperation("活动类型删除") + @SaCheckPermission("literacy.manage.type") + @SLog(tag = "品牌活动-类型管理", msg = "活动类型删除") + public Object doDelete(@Param(value = "id") String id) { + dao.clear(LiteracyType.class, Cnd.where("id", "=", id)); + dao.clear(LiteracyMobileSignColumn.class, Cnd.where("typeId", "=", id)); + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("排序号变更") + @SaCheckPermission("literacy.manage.type") + public Object xhChange(String id, Integer xh, boolean toDown) { + if (toDown) { + LiteracyType next = dao.fetch(LiteracyType.class, Cnd.where("xh", "=", xh + 1)); + next.setXh(next.getXh() - 1); + dao.update(next); + dao.update(LiteracyType.class, Chain.make("xh", xh + 1), Cnd.where("id", "=", id)); + } else { + LiteracyType pre = dao.fetch(LiteracyType.class, Cnd.where("xh", "=", xh - 1)); + pre.setXh(pre.getXh() + 1); + dao.update(pre); + dao.update(LiteracyType.class, Chain.make("xh", xh - 1), Cnd.where("id", "=", id)); + } + return Result.success(); + } + + @At + @ApiOperation("获取所有类型") + @SaCheckLogin + public Result getAllType(@Param(value = "id") String id) { + List literacyTypeList = dao.query(LiteracyType.class, Cnd.NEW().andEX("id", "=", id).asc("xh")); + dao.fetchLinks(literacyTypeList, "literacyMobileSignColumnList", Cnd.NEW().asc("columnIndex")); + return Result.success().addData(literacyTypeList); + } + + @At + @ApiOperation("自定义表单字段类型") + @SaCheckPermission("literacy.manage.type") + public Result getColumnType() { + List names = EnumUtil.getNames(ColType.class); + names.add("JSON"); + return Result.success(names); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserAdjustController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserAdjustController.java new file mode 100644 index 00000000..04f38766 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserAdjustController.java @@ -0,0 +1,179 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivityCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUserCourse; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author JyuHsin + * @Date 2022/9/21 + * @Description 人员调整 + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "品牌活动人员调整") +@At("/platform/literacy/manage/userAdjust") +public class LiteracyUserAdjustController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + @Inject + private LiteracyActivityService literacyActivityManageService; + @Inject + private LiteracyActivityStatisticsService literacyActivityStatisticsService; + + @At("") + @SaCheckPermission("literacy.manage.activity.adjust") + @Ok("beetl:/platform/zhgh/activity/literacy/userAdjust/index.html") + public void index() { + } + + /** + * 活动list + * @param year 年度 + * @return + */ + @At + @ApiOperation("活动列表") + @SaCheckPermission("literacy.manage.activity.adjust") + public Result activityList(@Param(value = "year") Integer year) { + List activityList = dao.query(LiteracyActivity.class, Cnd.NEW().andEX("year", "=", year).andEX("isDisabled", "=", false).desc("activityStartTime")); + return Result.success(activityList); + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.manage.activity.adjust") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId) { + Pagination pagination = literacyActivityStatisticsService.pageData(pageForm, activityId); + return Result.success(pagination); + } + + @At + @ApiOperation("子活动查询") + @SaCheckPermission("literacy.manage.activity.adjust") + public Result getCourse(String activityId) { + Sql sql = Sqls.create(""" + SELECT + tsuc.id, + tsuc.courseName, + tsuc.coursePeopleNumber, + tsuc.courseType, + tsuc.courseLocation, + tsuc.courseInstructor, + tsuc.courseReservedNumber, + tsuc.waitingNum, + tsuc.reserveMode + FROM + `literacy_course` tsuc + WHERE + tsuc.activityId = @activityId + ORDER BY courseName asc + """); + sql.setParam("activityId", activityId); + List courseList = baseService.listMap(sql); + courseList.forEach(c -> { + c.put("registerNum", literacyActivityStatisticsService.queryCourseCount(c.getString("id"), c.getString("courseType"))); + c.put("hasWaitingNum", literacyActivityStatisticsService.queryCourseWaitCount(c.getString("id"), c.getString("courseType"))); + }); + return Result.success(courseList); + } + + @At + @ApiOperation("报名用户列表") + @SaCheckPermission("literacy.manage.activity.adjust") + public Result registerUserList(@Param("courseId") String courseId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId, + @Param(value = "searchName") String searchName, + @Param(value = "searchKeyword") String searchKeyword) { + List list = literacyActivityStatisticsService.registerUserList(courseId, unionId, unitId, searchName, searchKeyword); + return Result.success(list); + } + + @At + @ApiOperation("人员调整") + @SaCheckPermission("literacy.manage.activity.adjust") + @SLog(tag = "品牌活动-人员调整", msg = "人员调整") + public Result adjust(String activityId, String oldCourseId, String newCourseId, String userId) { + + Cnd oldCnd = Cnd.where("activityId", "=", activityId) + .and("courseId", "=", oldCourseId).and("userId", "=", userId); + + Cnd newCnd = Cnd.where("activityId", "=", activityId) + .and("courseId", "=", newCourseId).and("userId", "=", userId); + + //旧的报名信息 + LiteracyUser oldliteracyUser = dao.fetch(LiteracyUser.class, oldCnd); + oldliteracyUser.setCourseId(newCourseId); + oldliteracyUser.setSignUpTime(DateUtil.date()); + dao.update(oldliteracyUser); + + //新的课程的信息,上课时间 + List activityCourseList = dao.query(LiteracyActivityCourse.class, Cnd.where("activityId", "=", activityId) + .and("courseId", "=", newCourseId)); + //先清楚旧的信息 + dao.clear(LiteracyUserCourse.class, oldCnd); + //添加新的信息 + List literacyUserCourseList = new ArrayList<>(); + activityCourseList.forEach(item -> { + LiteracyUserCourse course = new LiteracyUserCourse(); + course.setActivityCourseId(activityId); + course.setCourseId(newCourseId); + course.setUserId(userId); + course.setCourseStartTime(item.getCourseStartTime()); + course.setCourseEndTime(item.getCourseEndTime()); + course.setActivityCourseId(item.getId()); + literacyUserCourseList.add(course); + }); + dao.insert(literacyUserCourseList); + return Result.success(); + } + + @At + @ApiOperation("删除报名人员") + @SaCheckPermission("literacy.manage.activity.adjust") + @SLog(tag = "品牌活动-人员调整", msg = "删除报名人员") + public Result deleteSignUser(String activityId, String courseId, String userId) { + + //删除 + Cnd cnd = Cnd.NEW(); + cnd.and("activityId", "=", activityId); + cnd.and("courseId", "=", courseId); + cnd.and("userId", "=", userId); + + dao.clear(LiteracyUser.class, cnd); + dao.clear(LiteracyUserCourse.class, cnd); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserBlackListManageController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserBlackListManageController.java new file mode 100644 index 00000000..f65366e3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/manage/LiteracyUserBlackListManageController.java @@ -0,0 +1,347 @@ +package com.budwk.app.zhgh.activity.literacy.controller.manage; + +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyBlackListService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Chain; +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.Strings; +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.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description 人员管理 + * @createTime 2022年03月07日 14:27:00 + */ +@IocBean +@Ok("json:full") +@Api(tags = "亲子活动人员黑名单") +@At("/platform/literacy/userManage") +public class LiteracyUserBlackListManageController { + + @Inject + private Dao dao; + @Inject + private LiteracyBlackListService literacyBlackListService; + + @At("") + @SaCheckPermission("literacy.user.activity") + @Ok("beetl:/platform/zhgh/activity/literacy/userManage/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.user.activity") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "courseId") String courseId, + @Param(value = "year") Integer year, + @Param(value = "userKeyWord") String userKeyWord) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.activityId", "=", activityId); + cnd.andEX("tsuu.courseId", "=", courseId); + cnd.andEX("act.year", "=", year); + if (StrUtil.isNotBlank(userKeyWord)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + cnd.and(seg.andLike("u.username", userKeyWord).orLike("u.loginname", userKeyWord)); + } + if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + + Pagination pagination = literacyBlackListService.pageData(pageForm, cnd, activityId, courseId); + return Result.success(pagination); + } + + @At + @ApiOperation("报名人员处理") + @SaCheckPermission("literacy.user.activity") + @SLog(tag = "品牌活动-人员管理", msg = "报名人员处理") + public Result doHandleUser(@Param("userId") String userId) { + literacyBlackListService.doHandleUser(userId); + return Result.success(); + } + + @At + @ApiOperation("根据活动Id获取子活动") + @SaCheckPermission("literacy.user.activity") + public Result getCourseByActivityId(@Param("activityId") String activityId) { + List list = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + return Result.success(list); + } + + @At + @ApiOperation("获取子活动具体时间") + @SaCheckPermission("literacy.user.activity") + public Result attendClassRecord(String userId) { + literacyBlackListService.attendClassRecord(userId); + return Result.success(); + } + + @At + @ApiOperation("获取候补人员") + @SaCheckPermission("literacy.user.activity") + public Result getReserveUser(String courseId) { + Sql sql = Sqls.create(""" + SELECT + uc.* , + (select signUpTime from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as signUpTime, + (select state from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as state, + u.username, + u.loginname, + u.mobile, + u.unitName, + u.unionName + FROM + literacy_user_course uc LEFT JOIN `vw_user` u on uc.userId = u.id + WHERE uc.courseId = @courseId and uc.isAttend = false HAVING state = 2 order by signUpTime desc + """).setParam("courseId", courseId); + return Result.success(literacyBlackListService.listMap(sql)); + } + + @At + @ApiOperation("补充人员") + @SaCheckPermission("literacy.user.activity") + @SLog(tag = "品牌活动-人员管理", msg = "补充人员") + public Result reserveSingUp(String[] ids, String courseId) { + //先查询这个课程有多少个未签到的人员 + Sql sql = Sqls.create(""" + SELECT + uc.* , + (select signUpTime from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as signUpTime, + (select state from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as state + FROM + literacy_user_course uc + WHERE uc.courseId = @courseId and uc.isAttend = false HAVING state = 1 order by signUpTime desc + """).setParam("courseId", courseId); + List list = literacyBlackListService.listMap(sql); + if(ids.length > list.size()) { + return Result.error("您选择了" + ids.length + "位,未签到人员只有" + list.size() + "位"); + } + //ids的长度为几,就搞几个 + List mapList = list.subList(0, ids.length); + List idList = mapList.stream().map(o -> o.getString("userId")).collect(Collectors.toList()); + //将这几个没签到的设置为4 + dao.update(LiteracyUser.class, Chain.make("state", 4), Cnd.where("courseId", "=", courseId) + .and("userId", "in", idList)); + //将补充的设置为1 + dao.update(LiteracyUser.class, Chain.make("state", 1), Cnd.where("courseId", "=", courseId) + .and("userId", "in", ids)); + return Result.success(); + } + + @At + @Ok("void") + @ApiOperation("导出签到人员") + public void exportSignPerson(@Param(value = "activityId") String activityId, + HttpServletResponse response) { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + + Sql sql = Sqls.create(""" + SELECT + uc.*, + DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel, + DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel, + DATE_FORMAT(uc.attendTime, '%Y-%m-%d %H:%i:%s') as attendTimeExcel, + u.username, + u.loginname, + u.unitName, + u.unionName, + u.sex + FROM + literacy_user_course uc + left join literacy_course course on uc.courseId = course.id + left join `vw_user` u on u.id = uc.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("uc.activityId", "=", activityId); + cnd.and("course.isMobileSign", "=", true); + cnd.desc("isAttend").desc("attendTime"); + sql.setCondition(cnd); + + List userList = literacyBlackListService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("是否签到", "isAttend", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22)); + + for (LiteracyCourse c : courseList) { + String courseId = c.getId(); + String courseName = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(courseName); + + List currentEntities = new ArrayList<>(excelCommonExportEntity); + for (NutMap userSignData : v) { + if(!userSignData.getBoolean("isAttend")) { + userSignData.put("isAttend", "未签到"); + userSignData.put("attendTimeExcel", "未签到"); + }else { + userSignData.put("isAttend", "已签到"); + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", courseName); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + try { + String fileName = activity.getActivityName() + "签到人员名单.xls"; + String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", disposition); + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook,(ExportParams) map.get("title"),(List) map.get("entity"),(Collection) map.get("data")); + } + + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @At + @Ok("void") + @ApiOperation("导出领取人员") + public void exportGiftPerson(@Param(value = "activityId") String activityId, + HttpServletResponse response) { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + + Sql sql = Sqls.create(""" + SELECT + uc.*, + DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel, + DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel, + DATE_FORMAT(uc.receiveTime, '%Y-%m-%d %H:%i:%s') as receiveTimeExcel, + u.username, + u.loginname, + u.unitName, + u.unionName, + u.sex + FROM + literacy_user_course uc + left join literacy_course course on uc.courseId = course.id + left join `vw_user` u on u.id = uc.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("uc.activityId", "=", activityId); + cnd.and("course.isReceiveGift", "=", true).and("course.giftType" ,"=", 1); + cnd.desc("isReceive").desc("receiveTime"); + sql.setCondition(cnd); + + List userList = literacyBlackListService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("是否领取", "isReceive", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("领取时间", "receiveTimeExcel", 22)); + + for (LiteracyCourse c : courseList) { + String courseId = c.getId(); + String courseName = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(courseName); + + List currentEntities = new ArrayList<>(excelCommonExportEntity); + for (NutMap userSignData : v) { + if(!userSignData.getBoolean("isReceive")) { + userSignData.put("isReceive", "未领取"); + userSignData.put("receiveTimeExcel", "未领取"); + }else { + userSignData.put("isReceive", "已领取"); + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", courseName); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + try { + String fileName = activity.getActivityName() + "礼品领取人员名单.xls"; + String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", disposition); + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook,(ExportParams) map.get("title"),(List) map.get("entity"),(Collection) map.get("data")); + } + + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityController.java new file mode 100644 index 00000000..36b464de --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityController.java @@ -0,0 +1,373 @@ +package com.budwk.app.zhgh.activity.literacy.controller.mobile; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; +import com.budwk.app.zhgh.activity.literacy.models.*; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.util.cri.Static; +import org.nutz.integration.jedis.RedisService; +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.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年02月25日 13:44:00 + */ +@IocBean +@Ok("json:full") +@Api(tags = "亲子活动移动端") +@At("/platform/mobile/literacyActivity") +public class MLiteracyActivityController { + + private static final String REDIS_KEY_PREFIX = "m_literacy_activity"; + private final ReentrantLock lock = new ReentrantLock(true); + @Inject + private Dao dao; + @Inject + private LiteracyActivityService literacyActivityService; + @Inject + private RedisService redisService; + @Inject + private LiteracyActivityStatisticsService statisticsService; + + @At("/literacyList") + @Ok("beetl:/platform/zhghh5/activity/literacy/literacyList/index.html") + @SaCheckPermission("h5.literacy.sign") + public void literacyList() { + } + + @At("/literacyInfo") + @Ok("beetl:/platform/zhghh5/activity/literacy/literacyInfo/index.html") + @SaCheckPermission("h5.literacy.sign") + public void literacyInfo() { + } + + @At("/activityInfo") + @Ok("beetl:/platform/zhghh5/activity/literacy/activityInfo/index.html") + @SaCheckPermission("h5.literacy.sign") + public void activityInfo() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("h5.literacy.sign") + public Result pageData(PageForm pageForm, + @Param(value = "activityStatus") int activityStatus, + @Param(value = "year") Integer year, + @Param(value = "activityType") Integer activityType) { + Pagination pagination = literacyActivityService.mPageData(pageForm, year, activityStatus, activityType); + return Result.success(pagination); + } + + /** + * @param id 活动id + * @param tabIndex 0全部 1我的 + * @return + */ + @At + @ApiOperation("查询单个活动") + @SaCheckPermission("h5.literacy.sign") + public Result findOne(@Param("id") String id, + @Param(value = "tabIndex") Integer tabIndex, + @Param(value = "fromMode") String fromMode) { + Cnd cnd = Cnd.NEW(); + if (tabIndex > 0) { + List mySignCourseList = dao.query(LiteracyUser.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("activityId", "=", id)); + List mySignCourseIdList = mySignCourseList.stream().map(LiteracyUser::getCourseId).collect(Collectors.toList()); + cnd.and("id", "in", mySignCourseIdList); + } + NutMap nutMap = literacyActivityService.findOne(id, cnd, fromMode); + List courseList = nutMap.getAsList("courseList", LiteracyCourse.class); + courseList.forEach(v -> { + if (v.getCourseIsLimitApply() != null && v.getCourseIsLimitApply() && v.getIsSign()) { + LiteracyActivityCourse course = dao.fetch(LiteracyActivityCourse.class, Cnd.where("courseId", "=", v.getId())); + v.setCourseTimeName(DateUtil.format(course.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(course.getCourseEndTime(), "HH:mm") + "段"); + } + }); + return Result.success(nutMap); + } + + @At + @ApiOperation("查询子活动时间段") + @SaCheckPermission("h5.literacy.sign") + public Object getCourseTimeSelectList(String courseId) { + // 查课程的时间段 + List courseList = dao.query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", courseId)); + + // 查课程的报名人数 + List applyUserList = dao.query(LiteracyUserCourse.class, Cnd.where("courseId", "=", courseId)); + // 按照课程下面时间段去分组 + Map> collectMap = applyUserList.stream().collect(Collectors.groupingBy(LiteracyUserCourse::getActivityCourseId)); + List list = courseList.stream().map(v -> { + String id = v.getId(); + NutMap nutMap = NutMap.NEW(); + List literacyUserCourses = collectMap.get(id); + int remainingNum = v.getCourseLimitNum() != null ? v.getCourseLimitNum() : 0; + if (Lang.isNotEmpty(literacyUserCourses)) { + remainingNum = v.getCourseLimitNum() - literacyUserCourses.size(); + } + nutMap.put("remainingNum", remainingNum); + nutMap.put("text", DateUtil.format(v.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(v.getCourseEndTime(), "HH:mm") + "段(剩" + remainingNum + ")"); + nutMap.put("value", id); + return nutMap; + }).filter(v-> v.getInt("remainingNum") != 0).toList(); + return Result.success(list); + } + + @At + @ApiOperation("活动报名") + @SaCheckPermission("h5.literacy.sign") + @SLog(tag = "品牌活动-活动报名", msg = "活动报名") + public Result doSignUp(LiteracyUser literacyUser) { + try { + lock.lock(); + boolean courseByUser = literacyActivityService.isSignCourseByUser(literacyUser.getCourseId(), SecurityUtil.getUserId()); + if(courseByUser) { + return Result.error("您已报过该活动"); + } + //判断人数 + int number = 0; + LiteracyCourse course = literacyActivityService.dao().fetch(LiteracyCourse.class, literacyUser.getCourseId()); + LiteracyType type = literacyActivityService.dao().fetch(LiteracyType.class, course.getCourseType()); + if(type != null) { + if(type.getIsBringFamily() && type.getIsAddFamily()) { + List mobileColumnsValue = literacyUser.getMobileColumnsValue(); + NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); + number = map != null ? map.getInt("columnValue") : 0; + } + } + boolean signFull = literacyActivityService.isSignFull(course, number); + if(signFull) { + return Result.error("当前报名人数已满"); + } + boolean signFullByUnionId = literacyActivityService.isSignFullByUnionId(course, number); + if(signFullByUnionId) { + return Result.error("该活动您所在的分工会名额不足"); + } + literacyActivityService.doSignUp(literacyUser); + return Result.success("报名成功"); + } catch (Exception e) { + e.printStackTrace(); + return Result.success("报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("取消报名") + @SaCheckPermission("h5.literacy.sign") + @SLog(tag = "品牌活动-活动报名", msg = "取消报名") + public Result cancelSignUp(@Param("activityId") String activityId, @Param("courseId") String courseId) { + String userId = SecurityUtil.getUserId(); + //取消分两种情况 + //第一种没有设置分工会人数限制,那么将候补的人按时间倒叙往上补 + //第二种如果设置了分工会人数限制,那么只将本分工会的候补人员按照时间倒叙往上补,如果本分工会没有候补人员,则名额空出来,由校工会手动调整 + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + LiteracyCourse course = dao.fetch(LiteracyCourse.class, courseId); + LiteracyType type = dao.fetch(LiteracyType.class, course.getCourseType()); + //如果是正常报名取消了,将候补报名的按时间倒叙第一个改为正常报名 + Cnd cnd = Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId) + .and("state", "=", 2); + //如果设置了分工会报名人数限制,则只查本分工会 + if (Lang.isNotEmpty(course.getUnionLimit())) { + cnd.and(new Static(" userId in (select id from user where unionid = '%s')".formatted(SecurityUtil.getUnionId()))); + } + cnd.asc("signUpTime"); + if (!type.getIsBringFamily() && course.getReserveMode() == 2) { + List signUpUsers = dao.query(LiteracyUser.class, cnd); + int thisSignUpUserCount = dao.count(LiteracyUser.class, + Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId) + .and("state", "in", List.of(1, 3))); + if (!signUpUsers.isEmpty() && thisSignUpUserCount > 0) { + LiteracyUser literacyUser = signUpUsers.get(0); + literacyUser.setState(1); + dao.update(literacyUser); + Sys_user user = dao.fetch(Sys_user.class, literacyUser.getUserId()); + //msgApi.sendTextMsg("【" + activity.getActivityName() + "】已候补成功,请按时参加活动!", user.getLoginname()); + } + } + //删除报名记录 + dao.clear("literacy_user_course", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + + dao.clear("literacy_user", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + return Result.success(); + } + + @At + @ApiOperation("签到") + @SaCheckPermission("h5.literacy.sign") + @SLog(tag = "品牌活动-活动报名", msg = "签到") + public Result doQd(@Param("id") String id, @Param("courseId") String courseId, @Param("point") Double[] points) { + LiteracyCourse course = dao.fetch(LiteracyCourse.class, courseId); + List coursePoints = course.getCourseLocationCoordinates(); +// if (Lang.isNotEmpty(coursePoints)) { +// //需要签到 +// if (ArrayUtil.isEmpty(points) || ArrayUtil.hasNull(points)) { +// return Result.error().addMsg("请获取当前的坐标信息"); +// } +// Double[] coursePointArray = coursePoints.toArray(new Double[]{}); +// float distance = AMapUtils.calculateLineDistance(new LatLng(points[0], points[1]), new LatLng(coursePointArray[0], coursePointArray[1])); +// +// if (distance > 500) { +// return Result.error().addMsg("请到签到点位附近签到"); +// } +// } + literacyActivityService.doQd(id); + return Result.success(); + } + + /** + * 签到信息 + * + * @param activityId + * @return + */ + @At + @ApiOperation("获取签到信息") + @SaCheckPermission("h5.literacy.sign") + public Result getQdInfoList(@Param("activityId") String activityId) { + List list = literacyActivityService.qdInfoByUserId(SecurityUtil.getUserId(), activityId); + return Result.success(list); + } + + @At + @ApiOperation("验证是否能报名") + @SaCheckPermission("h5.literacy.sign") + public Result validateSignUp(String courseId, + @Param(value = "currentFamilyNumber") Integer currentFamilyNumber) { + try { + lock.lock(); + if(StrUtil.isBlank(courseId)) { + return Result.error("报名信息为空"); + } + + currentFamilyNumber = currentFamilyNumber != null ? currentFamilyNumber : 0; + LiteracyCourse course = dao.fetch(LiteracyCourse.class, courseId); + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, course.getActivityId()); + + //判断时间 + if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { + return Result.error("报名未开始"); + } + if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { + return Result.error("报名已结束"); + } + + //判断活动组别 + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getActivityGroupId()).and("userId", "=", SecurityUtil.getUserId())); + if(count == 0) { + return Result.error("抱歉,您没有此次活动的权限"); + } + + //判断是否报名 + boolean courseByUser = literacyActivityService.isSignCourseByUser(courseId, SecurityUtil.getUserId()); + if(courseByUser) { + return Result.error("抱歉,您已经报名"); + } + + //判断活动人数 + boolean signFull = literacyActivityService.isSignFull(course, currentFamilyNumber); + if(signFull) { + return Result.error("名额剩余数量不足"); + } + + //判断活动限制 + boolean signCourse = literacyActivityService.isSignCourse(course, activity); + if(!signCourse) { + if(activity.getRestrictLimit() != 3) { + return Result.error("您选择的类型已达上限,不能再报该类型的了"); + } else { + return Result.error(activity.getActivityName() + "限制报" + activity.getLimitNum() + "个活动,已达上限"); + } + } + + //判断分工会人数限制 + boolean signFullByUnionId = literacyActivityService.isSignFullByUnionId(course, currentFamilyNumber); + if(signFullByUnionId) { + return Result.error("您所在的分工会名额不足"); + } + + return Result.success(); + }catch (Exception e) { + e.printStackTrace(); + return Result.error("报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("验证子活动是否能报名") + @SaCheckPermission("h5.literacy.sign") + public Object validateSourceSignUp(String activityCourseId, String courseId) { + try { + lock.lock(); + // 该时间段下已报名的人数 + int count = dao.count(LiteracyUserCourse.class, Cnd.where("activityCourseId", "=", activityCourseId) + .and("courseId", "=", courseId)); + // 获取改时间段下的活动课程限制报名人数 + LiteracyActivityCourse course = dao.fetch(LiteracyActivityCourse.class, activityCourseId); + Integer courseLimitNum = course.getCourseLimitNum(); + // 报名加上自己,如果大于了限制人数,那就无法报名 + if (count + 1 > courseLimitNum) { + return Result.error("该时间段名额已报满,请选择其他时段报名"); + } else { + return Result.success(); + } + } catch (Exception e) { + e.printStackTrace(); + return Result.error("报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("二维码签到") + @SaCheckPermission("h5.literacy.sign") + @SLog(tag = "品牌活动-活动报名", msg = "二维码签到") + public Result codeSign(String id, String codeCourseId, String clickCourseId) { + if(StrUtil.isBlank(codeCourseId) || StrUtil.isBlank(clickCourseId)) { + return Result.error("签到失败,没有获取到扫描信息"); + } + if(!codeCourseId.equals(clickCourseId)) { + return Result.error("签到失败,二维码与您当前签到信息不符"); + } + dao.update(LiteracyUserCourse.class, Chain.make("isAttend", true) + .add("attendTime", new Date()), Cnd.where("id", "=", id)); + return Result.success(); + } + +} + + diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityScannerQrCodeController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityScannerQrCodeController.java new file mode 100644 index 00000000..0a8c6c5b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/mobile/MLiteracyActivityScannerQrCodeController.java @@ -0,0 +1,201 @@ +package com.budwk.app.zhgh.activity.literacy.controller.mobile; + +import lombok.extern.slf4j.Slf4j; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * 品牌活动扫码 + */ +@IocBean +@At("/platform/mobile/literacyActivityScannerQrCode") +@Ok("json:full") +@Slf4j +public class MLiteracyActivityScannerQrCodeController { + + /*@Inject + private WxTokenUtil; + + @Inject + private literacyActivityService literacyActivityService; + + @Inject + private Dao dao; + + @At("") + @Ok("beetl:/mobile/scannerQrCode.html") + public void scannerQrCode() { + + } + + *//** + * 微信js验证 + * + * @param url + * @return + *//* + @At("/auth/sign") + @ViReturn + @RequiresAuthentication + public Object wxAuthSign(String url) { + String jsapi_ticket = wxTokenUtil.jsTicket(); + return sign(jsapi_ticket, url); + } + + *//** + * 二维码信息 + * + * @param userId 用户id + * @param signId 签到记录id + * @param activityId 活动id + * @return + *//* + @At("/qrCodeInfo") + @RequiresAuthentication + public Object qrCodeInfo(@Param("userId") String userId, @Param("signId") String signId, @Param("activityId") String activityId) { + if (StrUtil.isBlank(userId) || StrUtil.isBlank(signId) || StrUtil.isBlank(activityId)) { + return Result.error("参数错误"); + } + try { +// Sql activitySql = Sqls.create("select activityName,cover from literacy_activity where id = @activityId"); +// activitySql.setParam("activityId",activityId); +// NutMap activityMap = (NutMap) Daos.query(dao, activitySql.toString(), Sqls.callback.map()); + + Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from literacy_user_course where id = @signId"); + signSql.setParam("signId", signId); + NutMap attendInfo = (NutMap) Daos.query(dao, signSql.toString(), Sqls.callback.map()); + Sql userSql = Sqls.create("select id,username,loginname,unitname,unionname,sex from `user` where id = @userId"); + userSql.setParam("userId", userId); + NutMap userMap = (NutMap) Daos.query(dao, userSql.toString(), Sqls.callback.map()); + return Result.success(Map.of("signInfo", attendInfo, "userInfo", userMap)); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("获取信息失败"); + } + } + + @At("/signInfo") + @RequiresAuthentication + public Object signInfo(@Param("signId") String signId) { + if (StrUtil.isBlank(signId)) { + return Result.error("参数错误"); + } + try { + Sql signSql = Sqls.create("select isAttend,attendTime from literacy_user_course where id = @signId"); + signSql.setParam("signId", signId); + NutMap signInfo = literacyActivityService.fetch(signSql); + return Result.success(signInfo); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("获取信息失败"); + } + } + + *//** + * 发放礼品 + * + * @param signId + * @return + *//* + @At("/grantGiftByQrCode") + @RequiresAuthentication + public Object grantGiftByQrCode(@Param("signId") String signId) { + if (StrUtil.isBlank(signId)) { + return Result.error("参数错误"); + } + try { + Chain chain = Chain.make("isReceive", 1); + chain.add("receiveTime", new Date()); + chain.add("giftScannerCodeUserId", ShiroUtil.getPrincipalProperty("id")); + dao.update(literacyUserCourse.class, chain, Cnd.where("id", "=", signId)); + Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from literacy_user_course where id = @signId"); + signSql.setParam("signId", signId); + NutMap signInfo = literacyActivityService.fetch(signSql); + return Result.success(signInfo); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("获取信息失败"); + } + } + + *//** + * 二维码扫描确认签到 + * + * @param signId + * @return + *//* + @At("/confirmSignByQrCode") + @RequiresAuthentication + public Object confirmSignByQrCode(@Param("signId") String signId) { + if (StrUtil.isBlank(signId)) { + return Result.error("参数错误"); + } + try { + Chain chain = Chain.make("isAttend", 1); + chain.add("attendTime", new Date()); + chain.add("signScannerCodeUserId", ShiroUtil.getPrincipalProperty("id")); + dao.update(literacyUserCourse.class, chain, Cnd.where("id", "=", signId)); + + Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from literacy_user_course where id = @signId"); + signSql.setParam("signId", signId); + NutMap signInfo = literacyActivityService.fetch(signSql); + return Result.success(signInfo); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("获取信息失败"); + } + } + + + public static Map sign(String jsapi_ticket, String url) { + Map ret = new HashMap(); + String nonce_str = create_nonce_str(); + String timestamp = create_timestamp(); + String string1; + String signature = ""; + + //注意这里参数名必须全部小写,且必须有序 + string1 = "jsapi_ticket=" + jsapi_ticket + + "&noncestr=" + nonce_str + + "×tamp=" + timestamp + + "&url=" + url; + System.out.println(string1); + + try { + MessageDigest crypt = MessageDigest.getInstance("SHA-1"); + crypt.reset(); + crypt.update(string1.getBytes("UTF-8")); + signature = byteToHex(crypt.digest()); + } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ret.put("url", url); + ret.put("jsapi_ticket", jsapi_ticket); + ret.put("nonceStr", nonce_str); + ret.put("timestamp", timestamp); + ret.put("signature", signature); + + return ret; + } + + private static String byteToHex(final byte[] hash) { + Formatter formatter = new Formatter(); + for (byte b : hash) { + formatter.format("%02x", b); + } + String result = formatter.toString(); + formatter.close(); + return result; + } + + private static String create_nonce_str() { + return UUID.randomUUID().toString(); + } + + private static String create_timestamp() { + return Long.toString(System.currentTimeMillis() / 1000); + }*/ + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/statistics/LiteracyActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/statistics/LiteracyActivityStatisticsController.java new file mode 100644 index 00000000..59d557b0 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/controller/statistics/LiteracyActivityStatisticsController.java @@ -0,0 +1,254 @@ +package com.budwk.app.zhgh.activity.literacy.controller.statistics; + +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.sys.models.Sys_file; +import com.budwk.app.sys.utils.SysFileMinIoUtil; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyType; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Chain; +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.json.Json; +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 javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * @author zxy + * @Description 培训报名 统计 + * @createTime 2022年02月23日 09:57:00 + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "品牌活动统计") +@At("/platform/literacy/statistics/activity") +public class LiteracyActivityStatisticsController { + + @Inject + private LiteracyActivityService literacyActivityManageService; + @Inject + private LiteracyActivityStatisticsService literacyActivityStatisticsService; + @Inject + private Dao dao; + + @At("") + @SaCheckPermission("literacy.statistics.activity") + @Ok("beetl:/platform/zhgh/activity/literacy/statistics/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.statistics.activity") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId) { + Pagination pagination = literacyActivityStatisticsService.pageData(pageForm, activityId); + return Result.success(pagination); + } + + /** + * 活动list + * + * @param year 年度 + * @return + */ + @At + @ApiOperation("活动列表") + @SaCheckPermission("literacy.statistics.activity") + public Result activityList(@Param(value = "year") Integer year) { + List list = dao.query(LiteracyActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); + return Result.success(list); + } + + /** + * 培训班报名人员list + * + * @param courseId + * @return + */ + @At + @ApiOperation("报名人员列表") + @SaCheckPermission("literacy.statistics.activity") + public Result registerUserList(@Param(value = "courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.registerUserList(courseId)); + } + + @At + @ApiOperation("报名动态列") + @SaCheckPermission("literacy.statistics.activity") + public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.getTaleColumnInfo(courseId)); + } + + /** + * 培训班上课签到信息 + * + * @param courseId + * @return + */ + @At + @ApiOperation("获取签到信息") + @SaCheckPermission("literacy.statistics.activity") + public Result getSignInfo(@Param("courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.getSignInfo(courseId)); + } + + @At + @ApiOperation("开放报名") + @SaCheckPermission("literacy.statistics.activity") + public Result signChange(@Param("courseId") String courseId, @Param("openOtherUnion") Boolean openOtherUnion) { + dao.update(LiteracyCourse.class, Chain.make("openOtherUnion", openOtherUnion) + , Cnd.where("id", "=", courseId)); + return Result.success(); + } + + @At + @Ok("void") + @ApiOperation("导出签到名单") + @SaCheckPermission("literacy.statistics.activity") + public void exportSignUser(@Param(value = "activityId") String activityId, + HttpServletResponse response) throws IOException { + try { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + Sql sql = Sqls.create(""" + SELECT + ts.*, + CONCAT(DATE_FORMAT(ac.courseStartTime, '%H:%i:%s'),'至',DATE_FORMAT(ac.courseEndTime, '%H:%i:%s')) AS courseTime, + u.username, + u.loginname, + u.sex, + ifnull(ts.mobile, u.mobile) as mobile, + u.birthday, + tsc.courseName + FROM + literacy_user ts + left join literacy_activity_course ac on ts.activityCourseId = ac.id + left join `vw_user` u on u.id = ts. userId + left join literacy_course tsc on tsc.id = ts.courseId + WHERE + ts.activityId = @activityId + """).setParam("activityId", activityId); + List userList = literacyActivityManageService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List literacyTypeList = dao.query(LiteracyType.class, Cnd.NEW()); + dao.fetchLinks(literacyTypeList, "literacyMobileSignColumnList", Cnd.NEW().asc("columnIndex")); + Map typeMap = literacyTypeList.stream().collect(Collectors.toMap(LiteracyType::getId, o -> o)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("手机号", "mobile", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("生日", "birthday", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("报名时段", "courseTime", 20)); + + for (LiteracyCourse c : courseList) { + String k = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseName").equals(k)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(k); + userExportParams.setType(ExcelType.HSSF); + + List currentEntities = new ArrayList<>(); + currentEntities.addAll(excelCommonExportEntity); + + LiteracyType signUpType = typeMap.get(c.getCourseType()); + if (Lang.isNotEmpty(signUpType.getLiteracyMobileSignColumnList())) { + for (LiteracyMobileSignColumn column : signUpType.getLiteracyMobileSignColumnList()) { + ExcelExportEntity entity = new ExcelExportEntity(); + entity.setName(column.getColumnName()); + entity.setKey(column.getColumnCode()); + entity.setWidth(20); + if (column.getColumnFormType().equals("FILE")) { + entity.setType(2); + entity.setExportImageType(2); + } + currentEntities.add(entity); + } + } + for (NutMap userSignData : v) { + String mobileColumnsValueStr = userSignData.getString("mobileColumnsValue"); + if (StrUtil.isNotBlank(mobileColumnsValueStr)) { + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, mobileColumnsValueStr); + for (NutMap cv : mobileColumnsValue) { + if (!"FILE".equals(cv.getString("columnFormType"))) { + userSignData.put(cv.getString("columnCode"), cv.getString("columnValue")); + } else { + if (StrUtil.isNotBlank(cv.getString("columnValue"))) { + List columnValue = Json.fromJsonAsList(JSONObject.class, cv.getString("columnValue")); + if (columnValue.size() == 1) { + JSONObject sysFile = columnValue.get(0); + Sys_file file = dao.fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", sysFile.get("url"))); + byte[] imageBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath()); + if (imageBytes.length > 0) { + userSignData.put(cv.getString("columnCode"), imageBytes); + } + } + } + } + } + + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", k); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook, (ExportParams) map.get("title"), (List) map.get("entity"), (Collection) map.get("data")); + } + workbook.write(response.getOutputStream()); + workbook.close(); + + CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xlsx", workbook, response); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivity.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivity.java new file mode 100644 index 00000000..20ab61a1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivity.java @@ -0,0 +1,136 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.services.SysHomeConvert; +import lombok.Data; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.Lang; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author zxy + * @Description 培训报名活动 + * @createTime 2022年02月23日 08:57:00 + */ +@Table +@Data +@Accessors(chain = true) +public class LiteracyActivity extends BaseModel implements Serializable, SysHomeConvert { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("活动名称") + private String activityName; + + @Column + @ColDefine(type = ColType.INT) + @Comment("年度") + private Integer year; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动报名开始时间") + private Date activitySignUpStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动报名开始时间") + private Date activitySignUpEndTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动开始时间") + private Date activityStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动结束时间") + private Date activityEndTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private boolean isDisabled; + + @Column + @ColDefine(customType = "longtext") + @Comment("活动介绍") + private String introduce; + + @Column + @ColDefine(type = ColType.INT, width = 10) + @Comment("活动限制标识") + private Integer restrictLimit; + + @Column + @ColDefine(type = ColType.INT, width = 10) + @Comment("活动限制报名个数") + private Integer limitNum; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("活动封面") + private String cover; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("微信群二维码") + private String wechat; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("上课前是否通知") + private boolean notice; + + @Column + @Comment("活动范围Id") + @ColDefine(type = ColType.INT, width = 32) + private Integer activityGroupId; + + @Column + @Comment("活动范围名称") + @ColDefine(type = ColType.VARCHAR, width = 40) + private String activityGroupName; + + /** + * 所有的培训班 + */ + @Many(field = "activityId") + private List courseList; + + @Many(field = "activityId") + private List typeLimits; + + @Column + @Comment("活动类型") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String literacyType; + + @Override + public Sys_home_activity covertToSysHomeActivity() { + Sys_home_activity sysHomeActivity = new Sys_home_activity(); + sysHomeActivity.setId(this.getId()); + sysHomeActivity.setName(this.getActivityName()); + sysHomeActivity.setCover(this.getCover()); + sysHomeActivity.setUrl("/platform/literacy/manage/apply"); + sysHomeActivity.setH5Url("/platform/mobile/literacyActivity/literacyList"); + if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { + sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); + sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); + } + sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId()); + sysHomeActivity.setEnable(!this.isDisabled()); + sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); + return sysHomeActivity; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivityCourse.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivityCourse.java new file mode 100644 index 00000000..9a59ce7b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyActivityCourse.java @@ -0,0 +1,56 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; + +/** + * @author zxy + * @Description 活动下的课程 + * @createTime 2022年02月23日 09:26:00 + */ +@Table +@Data +@Accessors(chain = true) +public class LiteracyActivityCourse { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程开始时间") + private Date courseStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程结束时间") + private Date courseEndTime; + + @Column + @ColDefine(type = ColType.DATE) + @Comment("课程时间") + private Date courseDate; + + @Column + @ColDefine(type = ColType.INT, width = 4) + @Comment("限制人数") + private Integer courseLimitNum; + + private Integer hasRegisterNum; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyBlackList.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyBlackList.java new file mode 100644 index 00000000..9b0c5eeb --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyBlackList.java @@ -0,0 +1,31 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @author zxy + * @Description 黑名单 + * @createTime 2022年03月07日 14:32:00 + */ +@Table +@Data +public class LiteracyBlackList { + + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户id") + private String userId; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private Boolean isDisabled; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyCourse.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyCourse.java new file mode 100644 index 00000000..b00d6e2e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyCourse.java @@ -0,0 +1,160 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.util.NutMap; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zxy + * @Description 培训班信息 + * @createTime 2022年02月23日 09:04:00 + */ +@Table +@Data +@Accessors(chain = true) +public class LiteracyCourse extends BaseModel implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("课程名称") + private String courseName; + + @Column + @ColDefine(type = ColType.INT) + @Comment("课程人数") + private int coursePeopleNumber; + + @Column + @ColDefine(type = ColType.INT) + @Default(value = "0") + @Comment("预留名额") + private int courseReservedNumber; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("课程地点") + private String courseLocation; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程类型") + private String courseType; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("课程地点坐标") + private List courseLocationCoordinates; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("课程讲师") + private String courseInstructor; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("校区") + private String campus; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("报名人数是否限制") + private Boolean courseIsLimitApply; + + @Column + @ColDefine(type = ColType.INT) + @Comment("序号") + private int orderNum; + + @Many(field = "courseId") + private List courseTimeList; + + //已报人数 + private Integer hasRegisterNum; + + private Boolean isBringFamily; + + private Boolean isAddFamily; + + //是否报过该课程 + private Boolean isSign; + + //还能报该类型的课程吗 + private Boolean canSignThisCourseType; + + @Column + @Comment("分工会人数限制") + @ColDefine(type = ColType.MYSQL_JSON) + private List unionLimit; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("移动端是否签到") + private boolean isMobileSign; + + @Column + @ColDefine(type = ColType.INT) + @Comment("签到方式 1.扫描二维码签到 2.被扫 3.gps签到") + private Integer signType; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("移动端是否签收礼品") + private boolean isReceiveGift; + + @Column + @ColDefine(type = ColType.INT) + @Comment("领取礼品方式 1.扫描二维码 2.线下") + private Integer giftType; + + @Column + @ColDefine(type = ColType.INT) + @Comment("预留名额方式 1.报名人员减少模式 2.报名人数不变模式") + private Integer reserveMode; + + @Column + @Comment("承办工会") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String hostUnionId; + + @Column + @Comment("对内报名时间") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String interTime; + + @Column + @Comment("是否开放给其他工会") + @ColDefine(type = ColType.BOOLEAN, width = 4) + private Boolean openOtherUnion; + + @Column + @Comment("分类标识") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String assort; + + @Column + @ColDefine(type = ColType.INT) + @Default(value = "0") + @Comment("候补名额数") + private Integer waitingNum; + + //候补已报人数 + private Integer hasWaitingNum; + + private String courseTimeName; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyMobileSignColumn.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyMobileSignColumn.java new file mode 100644 index 00000000..f1687898 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyMobileSignColumn.java @@ -0,0 +1,79 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +@Table("literacy_mobile_sign_column") +@Data +public class LiteracyMobileSignColumn { + + private static final long serialVersionUID = 1L; + + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + /** + * train_sign_up_type id + */ + @Column + @Comment("类型id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String typeId; + + @Column + @Comment("字段名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnName; + + @Column + @Comment("字段编码") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnCode; + + @Column + @Comment("字段值") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnValue; + + @Column + @Comment("字段类型") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnType; + + @Column + @Comment("下拉框的值") + @ColDefine(type = ColType.MYSQL_JSON) + private List selectValues; + + @Column + @Comment("是否必填") + @ColDefine(type = ColType.BOOLEAN) + private Boolean isRequired; + + @Column + @Comment("控件类型") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnFormType; + + @Column + @Comment("文件个数") + @ColDefine(type = ColType.INT) + private Integer fileNumber; + + @Column + @Comment("文件类型") + @ColDefine(type = ColType.MYSQL_JSON) + private List fileType; + + @Column + @Comment("序号") + @ColDefine(type = ColType.INT, width = 1) + private Integer columnIndex; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyType.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyType.java new file mode 100644 index 00000000..15fea80f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyType.java @@ -0,0 +1,68 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * TODO + * + * @author 赵欣雨 + * @date 2020/8/18 9:16 + */ +@Data +@Table("literacy_type") +@EqualsAndHashCode(callSuper = true) +public class LiteracyType extends BaseModel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("类型编码") + @ColDefine(type = ColType.VARCHAR, width = 80) + private String code; + + @Column + @Comment("类型名称") + @ColDefine(type = ColType.VARCHAR, width = 80) + private String typeName; + + @Column + @Comment("序号") + @ColDefine(type = ColType.INT, width = 1) + private Integer xh; + + @Column + @Comment("是否携带家属") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isBringFamily; + + @Column + @Comment("家属纳入总人数") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isAddFamily; + + @Column + @Comment("本人纳入总人数") + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean selfAddFamily; + + @Many(field = "typeId") + private List literacyMobileSignColumnList; +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyTypeLimit.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyTypeLimit.java new file mode 100644 index 00000000..b3085818 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyTypeLimit.java @@ -0,0 +1,40 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; + +/** + * @Author JyuHsin + * @Date 2022/9/22 + * @Description + */ +@Table("literacy_type_limit") +@Data +public class LiteracyTypeLimit implements Serializable { + + private static final long serialVersionUID = 1L; + + @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 typeId; + + @Column + @Comment("限制个数") + @ColDefine(type = ColType.INT, width = 10) + private int limitNum; +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUser.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUser.java new file mode 100644 index 00000000..3b3acf4f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUser.java @@ -0,0 +1,88 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.util.NutMap; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author zxy + * @Description 报名人员 报名记录 + * @createTime 2022年02月23日 09:34:00 + */ +@Table +@Data +@Accessors(chain = true) +@TableIndexes({@Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSEID", fields = {"courseId"}, unique = false)}) +public class LiteracyUser implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户ID") + private String userId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("工会ID") + private String unionId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("单位ID") + private String unitId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("工会") + private String unionName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("单位") + private String unitName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("联系方式") + private String mobile; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("报名时间") + private Date signUpTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动课程时段id") + private String activityCourseId; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("手机端报名字段和值") + private List mobileColumnsValue; + + @Column + @ColDefine(type = ColType.INT) + @Comment("用户报名状态(1.正常 2.待报名成功 3.也是正常,但是是从2变为1的 4.废弃[就是没签到的意思])") + private Integer state; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUserCourse.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUserCourse.java new file mode 100644 index 00000000..0ba75453 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/models/LiteracyUserCourse.java @@ -0,0 +1,89 @@ +package com.budwk.app.zhgh.activity.literacy.models; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author zxy + * @Description 用户课程表 + * @createTime 2022年02月23日 09:38:00 + */ +@Table +@Data +@Accessors(chain = true) +@TableIndexes({ + @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_USERID", fields = {"userId"}, unique = false), + @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_COURSEID", fields = {"courseId"}, unique = false) +}) +public class LiteracyUserCourse implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户ID") + private String userId; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程开始时间") + private Date courseStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程结束时间") + private Date courseEndTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否上课") + private boolean isAttend; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("上课打卡时间") + private Date attendTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否领取礼品") + private Boolean isReceive; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("领取礼品时间") + private Date receiveTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("签到扫码人员id(二维码模式)") + private String signScannerCodeUserId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("礼品扫码人员id(二维码模式)") + private String giftScannerCodeUserId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("关联literacy_sign_up_activity_course表的id") + private String activityCourseId; + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityService.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityService.java new file mode 100644 index 00000000..dbf9abdb --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityService.java @@ -0,0 +1,129 @@ +package com.budwk.app.zhgh.activity.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import org.nutz.dao.Cnd; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年02月23日 17:14:00 + */ +public interface LiteracyActivityService extends BaseService { + + /** + * 添加活动 + * + * @param activity 活动信息 + * @param course 培训班信息 + */ + void add(LiteracyActivity activity, LiteracyCourse course); + + /** + * 编辑活动 + * + * @param activity 活动信息 + */ + void edit(LiteracyActivity activity); + + /** + * 更新活动状态 + * + * @param activity 活动信息 + */ + void updateActivityStatus(LiteracyActivity activity); + + /** + * 查询单条活动信息 + * + * @param id 活动ID + * @return 返回的数据与前端符合 + */ + NutMap findOne(String id, Cnd cnd, String fromMode); + + /** + * pc分页查询 + * + * @param pageForm + * @param cnd + * @return + */ + Pagination pageData(PageForm pageForm, Cnd cnd); + + + /** + * 手机端分页查询 + * + * @param pageForm 分页 + * @param year 年度 + * @param activityStatus 报名状态 0全部 1进行中 2结束 + * @return + */ + Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, Integer activityType); + + /** + * 手机端报名 + * + * @param trainSignUpUser 活动ID + */ + void doSignUp(LiteracyUser trainSignUpUser) throws Exception; + + /** + * 异步插入每个报名成功人员的课程数据 + * + * @param activityId + * @param courseId + * @param userId + */ + void asyncInsertUserCourse(String activityId, String courseId, String userId); + + /** + * 该培训班每个分工会名额是否报满 + * @return + */ + boolean isSignFullByUnionId(LiteracyCourse course, Integer currentFamilyNumber); + + /** + * 该培训班是否报满 + */ + boolean isSignFull(LiteracyCourse course, Integer currentFamilyNumber); + + /** + * 还能报该类型的培训班吗 比如书画班最多报一项 健身班两项 + * @return + */ + boolean isSignCourse(LiteracyCourse course, LiteracyActivity activity); + + /** + * 当前用户是否已报过该培训班 + * + * @param courseId + * @param userId + * @return + */ + boolean isSignCourseByUser(String courseId, String userId); + + /** + * 手机端签到 + * + * @param id 每个培训班每节课每个用户的记录ID + */ + void doQd(String id); + + /** + * 某个用户的签到信息 + * + * @param userId 用户id + * @param activityId 活动id + */ + List qdInfoByUserId(String userId, String activityId); + + List filterCourseByHostUnion(List courseList); +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityStatisticsService.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityStatisticsService.java new file mode 100644 index 00000000..02a43dc4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyActivityStatisticsService.java @@ -0,0 +1,68 @@ +package com.budwk.app.zhgh.activity.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import org.nutz.lang.util.NutMap; + +import java.util.List; +import java.util.Map; + +/** + * @author zxy + * @Description 报名统计service + * @createTime 2022年03月03日 10:00:00 + */ +public interface LiteracyActivityStatisticsService extends BaseService { + + /** + * 统计分页 + * + * @param pageForm + * @param activityId + * @return + */ + Pagination pageData(PageForm pageForm, String activityId); + + /** + * 该课程下的报名人员信息 + * + * @param courseId + * @return + */ + List registerUserList(String courseId); + + List getTaleColumnInfo(String courseId); + + /** + * 该课程下的报名人员信息 + * + * @param courseId + * @return + */ + List registerUserList(String courseId, String unionId, String unitId, String searchName, String searchKeyword); + + /** + * 获取每个课程的签到情况 + * + * @param courseId + * @return k->每个培训班每节课的上课时间 v->上课记录list + */ + Map> getSignInfo(String courseId); + + /** + * 报名人员list 导出 + * @param activityId + * @return + */ + List baoMingUserList(String activityId); + + int queryCourseCount(String courseId, String courseType); + + int queryCourseWaitCount(String courseId, String courseType); + + int queryCourseCount(String courseId, String courseType, String unionId); + + int queryCourseWaitCount(String courseId, String courseType, String unionId); +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyBlackListService.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyBlackListService.java new file mode 100644 index 00000000..15003233 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/LiteracyBlackListService.java @@ -0,0 +1,43 @@ +package com.budwk.app.zhgh.activity.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyBlackList; +import org.nutz.dao.Cnd; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年03月07日 14:29:00 + */ +public interface LiteracyBlackListService extends BaseService { + + /** + * 分页 + * + * @param pageForm 分页 + * @return Pagination + */ + Pagination pageData(PageForm pageForm, Cnd cnd, String activityId, String courseId); + + /** + * 拉黑、解封用户 + * + * @param userId + */ + void doHandleUser(String userId); + + /** + * 上课记录 + * + * @param userId + * @return + */ + List attendClassRecord(String userId); + + +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityServiceImpl.java new file mode 100644 index 00000000..4a1fde18 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityServiceImpl.java @@ -0,0 +1,473 @@ +package com.budwk.app.zhgh.activity.literacy.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.literacy.models.*; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.async.Async; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +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.Static; +import org.nutz.ioc.aop.Aop; +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 java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年02月23日 17:14:00 + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class LiteracyActivityServiceImpl extends BaseServiceImpl implements LiteracyActivityService { + + @Inject + private LiteracyActivityStatisticsService statisticsService; + + public LiteracyActivityServiceImpl(Dao dao) { + super(dao); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void add(LiteracyActivity activity, LiteracyCourse course) { + + dao().insert(activity); + + //插入类型限制 + List typeLimits = activity.getTypeLimits(); + typeLimits.forEach(v -> v.setActivityId(activity.getId())); + dao().insert(typeLimits); + + List courseList = activity.getCourseList(); + for (LiteracyCourse v : courseList) { + v.setActivityId(activity.getId()); + v.setOpenOtherUnion(false); + dao().insert(v); + this.setCourseTimeAndInsert(v); + } + + if (!activity.isDisabled()) { + Sys_home_activity sysHomeActivity = activity.covertToSysHomeActivity(); + dao().insertOrUpdate(sysHomeActivity); + } + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void edit(LiteracyActivity activity) { + + //修改活动 + update(activity); + + //修改类型限制 + List typeLimits = activity.getTypeLimits(); + typeLimits.forEach(v -> v.setActivityId(activity.getId())); + if(Lang.isNotEmpty(typeLimits)) { + insertOrUpdate(typeLimits); + } + + List courseList = activity.getCourseList(); + courseList.forEach(v -> { + v.setActivityId(activity.getId()); + dao().insertOrUpdate(v); + if (Lang.isNotEmpty(v.getCourseTimeList())) { + this.setCourseTimeAndInsert(v); + } + }); + + //查询原来的活动 + List oldCourseList = dao().query(LiteracyCourse.class, Cnd.where("activityId", "=", activity.getId())); + //原来的培训班id + List oldCourseIdList = oldCourseList.stream().map(LiteracyCourse::getId).toList(); + + //原来的上课时间 + List oldActCourseTimeList = dao().query(LiteracyActivityCourse.class, Cnd.where("activityId", "=", activity.getId())); + + //现在的上课时间 + List nowCourseTimeListId = new ArrayList<>(); + activity.getCourseList().forEach(v -> { + if (v.getCourseTimeList() != null) { + nowCourseTimeListId.addAll(v.getCourseTimeList().stream().map(LiteracyActivityCourse::getId).toList()); + } + }); + + List deleteCourseTimeListId = oldActCourseTimeList.stream().map(LiteracyActivityCourse::getId).filter(id -> !nowCourseTimeListId.contains(id)).collect(Collectors.toList()); + List courseIdList = courseList.stream().map(LiteracyCourse::getId).collect(Collectors.toList()); + + //删除关联的培训班 + List deleteIdList = oldCourseIdList.stream().filter(v -> !courseIdList.contains(v)).collect(Collectors.toList()); + dao().clear(LiteracyCourse.class, Cnd.where("id", "in", deleteIdList)); + + dao().clear(LiteracyActivityCourse.class, Cnd.where("id", "in", deleteCourseTimeListId)); + dao().clear(LiteracyUser.class, Cnd.where("courseId", "not in", courseIdList).and("activityId", "=", activity.getId())); + dao().clear(LiteracyUserCourse.class, Cnd.where("courseId", "not in", courseIdList).and("activityId", "=", activity.getId())); + + //查询修改过培训时间的记录 + Sql tsuucSql = Sqls.create(""" + SELECT + tsuuc.id, + tsuac.courseStartTime, + tsuac.courseEndTime + FROM + `literacy_user_course` tsuuc + LEFT JOIN literacy_activity_course tsuac ON tsuac.id = tsuuc.activityCourseId + where tsuuc.courseStartTime != tsuac.courseStartTime or tsuuc.courseEndTime != tsuac.courseEndTime + """); + List tsuucList = listMap(tsuucSql); + tsuucList.forEach(v -> { + Chain chain = Chain.make("courseStartTime", v.getTime("courseStartTime")); + chain.add("courseEndTime", v.getTime("courseEndTime")); + Cnd cnd = Cnd.where("id", "=", v.getString("id")); + dao().update("literacy_user_course", chain, cnd); + }); + + if (!activity.isDisabled()) { + Sys_home_activity sysHomeActivity = activity.covertToSysHomeActivity(); + dao().insertOrUpdate(sysHomeActivity); + } else { + dao().delete(Sys_home_activity.class, activity.getId()); + } + } + + private void setCourseTimeAndInsert(LiteracyCourse course) { + course.getCourseTimeList().forEach(courseTime -> { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(courseTime.getCourseDate()); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DATE); + + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(courseTime.getCourseStartTime()); + startCalendar.set(year, month, day); + courseTime.setCourseStartTime(startCalendar.getTime()); + + Calendar endCalendar = Calendar.getInstance(); + endCalendar.setTime(courseTime.getCourseEndTime()); + endCalendar.set(year, month, day); + courseTime.setCourseEndTime(endCalendar.getTime()); + + courseTime.setActivityId(course.getActivityId()); + courseTime.setCourseId(course.getId()); + dao().insertOrUpdate(courseTime); + }); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void updateActivityStatus(LiteracyActivity activity) { + updateIgnoreNull(activity); + } + + @Override + public NutMap findOne(String id, Cnd cnd, String fromMode) { + if (Lang.isEmpty(cnd)) { + cnd = Cnd.NEW(); + } + + cnd.asc("orderNum").asc("campus").desc("courseLocation").asc("courseType").asc("courseName"); + List courseArray = dao().query(LiteracyCourse.class, cnd.and("activityId", "=", id)); + + if (StrUtil.isNotBlank(fromMode) && "mobile".equals(fromMode)) { + courseArray = this.filterCourseByHostUnion(courseArray); + } + + LiteracyActivity activity = fetchLinks(dao().fetch(LiteracyActivity.class, id), "^(conditionStructure|typeLimits)$"); + activity.setCourseList(courseArray); + + List courseList = activity.getCourseList(); + + courseList.forEach(c -> { + if (StrUtil.isNotBlank(c.getCourseType())) { + dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); + int courseCount = statisticsService.queryCourseCount(c.getId(), c.getCourseType()); + c.setHasRegisterNum(courseCount); + int courseWaitCount = statisticsService.queryCourseWaitCount(c.getId(), c.getCourseType()); + c.setHasWaitingNum(courseWaitCount); + //当前用户是否报过 + c.setIsSign(isSignCourseByUser(c.getId(), SecurityUtil.getUserId())); + } + }); + return Lang.obj2nutmap(activity); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd) { + Pagination pagination = listPageLinks(pageForm.getPageNumber(), pageForm.getPageSize(), cnd, "^(courseList)$"); + return pagination; + } + + @Override + public Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, Integer activityType) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + switch (activityStatus) { + case 2 -> { + cnd.and(new Static("activitySignUpStartTime < now()")); + cnd.and(new Static("activitySignUpEndTime > now()")); + } + case 3 -> { + cnd.and(new Static("activityStartTime < now()")); + cnd.and(new Static("activityEndTime > now()")); + } + case 4 -> cnd.and(new Static("activityEndTime < now()")); + case 5 -> cnd.and(new Static("activityStartTime < now()")); + case 6 -> cnd.and(new Static("activityStartTime > now()")); + } + if (activityType != null && activityType == 1) { + cnd.and(new Static("id in (select activityId from literacy_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + cnd.and("isDisabled", "=", 0); + cnd.orderBy("activityEndTime", "desc"); + cnd.orderBy("isDisabled", "desc"); + cnd.orderBy("createdAt", "desc"); + return listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void doSignUp(LiteracyUser literacyUser) throws Exception { + String userId = SecurityUtil.getUserId(); + + //查询课程 + LiteracyCourse course = dao().fetch(LiteracyCourse.class, literacyUser.getCourseId()); + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //如果这个课程的预留名额方式为报名人数不变 + if (course.getReserveMode() == 2) { + //如果当前报名+已报小于这个课程限制人数 + //课程已报人数 + int normalCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType()); + //+1是算自己 + int hasRegisterNum = type.getSelfAddFamily() ? normalCount + 1 : 0; + literacyUser.setState((hasRegisterNum + course.getCourseReservedNumber()) > course.getCoursePeopleNumber() ? 2 : 1); + } else { + literacyUser.setState(1); + } + + View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + literacyUser.setUnionId(SecurityUtil.getUnionId()); + literacyUser.setUnionName(user.getUnionName()); + literacyUser.setUnitId(SecurityUtil.getUnitId()); + literacyUser.setUnitName(user.getUnitName()); + literacyUser.setUserId(userId); + literacyUser.setSignUpTime(new Date()); + + dao().insert(literacyUser); + + if (StrUtil.isNotBlank(literacyUser.getActivityCourseId())) { + LiteracyActivityCourse fetch = dao().fetch(LiteracyActivityCourse.class, literacyUser.getActivityCourseId()); + LiteracyUserCourse userCourse = new LiteracyUserCourse(); + userCourse.setActivityId(literacyUser.getActivityId()); + userCourse.setCourseId(literacyUser.getCourseId()); + userCourse.setUserId(literacyUser.getUserId()); + userCourse.setCourseStartTime(fetch.getCourseStartTime()); + userCourse.setCourseEndTime(fetch.getCourseEndTime()); + userCourse.setAttend(false); + userCourse.setAttendTime(null); + userCourse.setActivityCourseId(fetch.getId()); + dao().insert(userCourse); + } else { + asyncInsertUserCourse(literacyUser.getActivityId(), literacyUser.getCourseId(), literacyUser.getUserId()); + } + } + + @Async + @Override + public void asyncInsertUserCourse(String activityId, String courseId, String userId) { + log.info("异步插入{}的上课信息,课程ID为{},活动ID为{}", userId, courseId, activityId); + List courseList = dao().query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", courseId)); + List list = new ArrayList<>(); + courseList.forEach(v -> { + LiteracyUserCourse userCourse = new LiteracyUserCourse(); + userCourse.setActivityId(activityId); + userCourse.setCourseId(courseId); + userCourse.setUserId(userId); + userCourse.setCourseStartTime(v.getCourseStartTime()); + userCourse.setCourseEndTime(v.getCourseEndTime()); + userCourse.setAttend(false); + userCourse.setAttendTime(null); + userCourse.setActivityCourseId(v.getId()); + list.add(userCourse); + }); + dao().insert(list); + } + + /** + * 该培训班每个分工会名额是否报满 + * @return + */ + @Override + public boolean isSignFullByUnionId(LiteracyCourse course, Integer currentFamilyNumber) { + List unionLimit = course.getUnionLimit(); + if (Lang.isEmpty(unionLimit)) { + return false; + } + String unionId = SecurityUtil.getUnionId(); + NutMap unionLimitMap = unionLimit.stream().filter(v -> v.getString("id").equals(unionId)).findAny().orElse(null); + if (Lang.isEmpty(unionLimitMap)) { + return true; + } + + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //分工会限制人数 + int limitCount = unionLimitMap.getInt("limitCount"); + + //该课程已经报名的总人数 + int hasSignCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType(), unionId); + int hasWaitCount = statisticsService.queryCourseWaitCount(course.getId(), course.getCourseType()); + + //+1是算自己 + int current = type.getSelfAddFamily() ? 1 : 0; + currentFamilyNumber = type.getIsBringFamily() && type.getIsAddFamily() ? currentFamilyNumber : 0; + //如果还有正常名额 + if(limitCount - hasSignCount > 0) { + return (hasSignCount + current + currentFamilyNumber) > limitCount; + } else { + return (hasWaitCount + current + currentFamilyNumber) > course.getWaitingNum(); + } + } + + @Override + public boolean isSignFull(LiteracyCourse course, Integer currentFamilyNumber) { + //课程限制人数 + int coursePeopleNumber = course.getCoursePeopleNumber(); + if (coursePeopleNumber == 0) { + return true; + } + //查询课程对应的类型 + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //课程已报人数 + int hasSignCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType()); + int hasWaitCount = statisticsService.queryCourseWaitCount(course.getId(), course.getCourseType()); + + //+1是算自己 + int current = type.getSelfAddFamily() ? 1 : 0; + currentFamilyNumber = type.getIsBringFamily() && type.getIsAddFamily() ? currentFamilyNumber : 0; + //如果还有正常名额 + if(coursePeopleNumber - hasSignCount > 0) { + return (hasSignCount + current + currentFamilyNumber + course.getCourseReservedNumber()) > coursePeopleNumber; + } else { + return (hasWaitCount + current + currentFamilyNumber) > course.getWaitingNum(); + } + } + + @Override + public boolean isSignCourse(LiteracyCourse course, LiteracyActivity activity) { + //培训班类型 + String courseType = course.getCourseType(); + + Sql sql = Sqls.create(""" + SELECT + count( tsus.id ) + FROM + `literacy_user` tsus + LEFT JOIN literacy_course tsuc ON tsuc.id = tsus.courseId + WHERE + tsuc.courseType = @courseType + AND tsus.userId = @userId + AND tsus.activityId = @activityId + """); + sql.setParam("courseType", courseType); + sql.setParam("activityId", activity.getId()); + sql.setParam("userId", SecurityUtil.getUserId()); + int hasRegisterNum = count(sql); + + //第一种无限制报名 + if (activity.getRestrictLimit() == null || activity.getRestrictLimit() == 1) { + return true; + } else if (activity.getRestrictLimit() == 2) { + LiteracyTypeLimit literacyTypeLimit = dao().fetch(LiteracyTypeLimit.class, Cnd.where("typeId", "=", courseType).and("activityId", "=", activity.getId())); + if (literacyTypeLimit == null) { + return true; + } + //此类型的班最多可报几项 + int personMaxRegisterNum = literacyTypeLimit.getLimitNum(); + if (personMaxRegisterNum == 0) { + return true; + } + return hasRegisterNum < personMaxRegisterNum; + } else if (activity.getRestrictLimit() == 3) { + //第三种,限制报几个,不跟类型挂钩 + int aCount = dao().count(LiteracyUser.class, Cnd.where("activityId", "=", activity.getId()).and("userId", "=", SecurityUtil.getUserId())); + return aCount < activity.getLimitNum(); + } + return false; + } + + @Override + public boolean isSignCourseByUser(String courseId, String userId) { + return dao().count(LiteracyUser.class, Cnd.where("courseId", "=", courseId).and("userId", "=", userId)) > 0; + } + + @Override + public void doQd(String id) { + NutMap updateMap = NutMap.NEW(); + updateMap.put("isAttend", true); + updateMap.put("attendTime", new Date()); + dao().update(LiteracyUserCourse.class, Chain.from(updateMap), Cnd.where("id", "=", id)); + } + + @Override + public List qdInfoByUserId(String userId, String activityId) { + Sql sql = Sqls.create(""" + SELECT + c.*, + t.courseLocationCoordinates, + t.isMobileSign, + t.signType, + t.isReceiveGift, + t.giftType, + (select state from literacy_user su where su.activityId = c.activityId and su.courseId = c.courseId and su.userId = c.userId) as state + FROM + `literacy_user_course` c + LEFT JOIN literacy_course t ON t.id = c.courseId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("c.activityId", "=", activityId); + cnd.and("c.userId", "=", userId); + cnd.asc("c.courseStartTime"); + + sql.setCondition(cnd); + return listMap(sql); + } + + @Override + public List filterCourseByHostUnion(List courseList) { + if (Lang.isEmpty(courseList)) { + return new ArrayList<>(); + } + return courseList.stream().filter(o -> { + if (StrUtil.isBlank(o.getInterTime()) || o.getOpenOtherUnion() == null || o.getOpenOtherUnion()) { + return true; + } else { + if (SecurityUtil.getUnionId().equals(o.getHostUnionId())) { + return true; + } else { + int compare = cn.hutool.core.date.DateUtil.compare(cn.hutool.core.date.DateUtil.date(), cn.hutool.core.date.DateUtil.parse(o.getInterTime()), "yyyy-MM-dd HH:mm"); + return compare >= 0; + } + } + }).toList(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java new file mode 100644 index 00000000..e7a2ed64 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java @@ -0,0 +1,260 @@ +package com.budwk.app.zhgh.activity.literacy.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyType; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyActivityStatisticsService; +import lombok.extern.slf4j.Slf4j; +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.IocBean; +import org.nutz.json.Json; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年03月03日 10:02:00 + */ +@IocBean(args = {"refer:dao"}) +@Slf4j +public class LiteracyActivityStatisticsServiceImpl extends BaseServiceImpl implements LiteracyActivityStatisticsService { + + public LiteracyActivityStatisticsServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, String activityId) { + Sql sql = Sqls.create(""" + SELECT + tsuc.id, + tsuc.courseName, + tsuc.coursePeopleNumber, + tsuc.courseReservedNumber, + type.typeName as courseType, + tsuc.courseLocation, + tsuc.courseInstructor, + tsuc.reserveMode, + tsuc.isMobileSign, + tsuc.hostUnionId, + tsuc.interTime, + tsuc.waitingNum, + tsuc.openOtherUnion, + tsuc.courseType as cType + FROM + `literacy_course` tsuc + LEFT JOIN + literacy_type type on tsuc.courseType = type.id + WHERE + tsuc.activityId = @activityId + ORDER BY tsuc.orderNum + """); + sql.setParam("activityId", activityId); + Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List courseList = pagination.getList(); + courseList.forEach(c -> { + c.put("registerNum", queryCourseCount(c.getString("id"), c.getString("cType"))); + c.put("hasWaitingNum", queryCourseWaitCount(c.getString("id"), c.getString("cType"))); + }); + return pagination; + } + + @Override + public List registerUserList(String courseId) { + Sql sql = Sqls.create(""" + SELECT + u.loginname, + u.username, + u.sex, + tsuu.unionId, + tsuu.unionName, + tsuu.unitId, + tsuu.unitName, + ifnull(tsuu.mobile, u.mobile) as mobile, + tsuu.signUpTime, + tsuu.state, + tsuu.mobileColumnsValue + FROM + literacy_user tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ),u.unionid desc, u.unitid desc + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.courseId", "=", courseId); + sql.setCondition(cnd); + List list = listMap(sql); + list.forEach(o -> { + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); + if(Lang.isNotEmpty(mobileColumnsValue)) { + mobileColumnsValue.forEach(m -> { + o.put(m.getString("columnCode"), m.getString("columnValue")); + }); + } + }); + return list; + } + + @Override + public List getTaleColumnInfo(String courseId) { + LiteracyCourse course = dao().fetch(LiteracyCourse.class, courseId); + LiteracyType upType = dao().fetch(LiteracyType.class, course.getCourseType()); + dao().fetchLinks(upType, "literacyMobileSignColumnList", Cnd.NEW().asc("columnIndex")); + + List columnList = upType.getLiteracyMobileSignColumnList(); + List columnTableList = columnList.stream().map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList()); + return columnTableList; + } + + @Override + public List registerUserList(String courseId, String unionId, String unitId, String searchName, String searchKeyword) { + Sql sql = Sqls.create(""" + SELECT + tsuu.id, + u.id as userId, + u.loginname, + u.username, + u.unitname, + u.unionname, + u.sex, + ifnull(tsuu.mobile, u.mobile) as mobile, + tsuu.signUpTime, + tsuu.state + FROM + literacy_user tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ),u.unionid desc, u.unitid desc + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.courseId", "=", courseId); + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitid", "=", unitId); + if (StrUtil.isNotBlank(searchKeyword)) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.andLike("username", searchKeyword).orLike("loginname", searchKeyword); + cnd.and(group); + } + sql.setCondition(cnd); + return listMap(sql); + } + + @Override + public Map> getSignInfo(String courseId) { + Sql sql = Sqls.create(""" + SELECT + tsuuc.courseStartTime, + tsuuc.courseEndTime, + tsuuc.isAttend, + tsuuc.attendTime, + u.username, + u.loginname, + u.unitname, + u.unionname + FROM + `literacy_user_course` tsuuc + LEFT JOIN `vw_user` u ON u.id = tsuuc.userId + WHERE + tsuuc.courseId = @courseId + """); + sql.setParam("courseId", courseId); + List list = listMap(sql); + + Map> courseTimeMap = list.stream().map(v -> { + String courseTime = v.getString("courseStartTime") + " 至 " + v.getString("courseEndTime"); + v.put("courseTime", courseTime); + return v; + }).collect(Collectors.groupingBy(v -> v.getString("courseTime"))); + + // 使用Stream API进行降序排序 + Map> sortedDataMap = courseTimeMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); + + return sortedDataMap; + } + + @Override + public List baoMingUserList(String activityId) { + Sql sql = Sqls.create(""" + SELECT + u.loginname, + u.username, + u.unitname, + u.unionname, + u.sex, + u.mobile, + uc.courseName, + uc.campus + FROM + `literacy_user` uu + RIGHT JOIN literacy_course uc ON uc.id = uu.courseId + LEFT JOIN `vw_user` u ON u.id = uu.userId + WHERE + uc.activityId = @activityId + ORDER BY u.unitCode,u.unioncode,u.sex + """); + sql.setParam("activityId", activityId); + return listMap(sql); + } + + @Override + public int queryCourseCount(String courseId, String courseType) { + return this.queryCourseCount(courseId, courseType, null); + } + + @Override + public int queryCourseWaitCount(String courseId, String courseType) { + return this.queryCourseWaitCount(courseId, courseType, null); + } + + @Override + public int queryCourseCount(String courseId, String courseType, String unionId) { + return this.calcSignCount(courseId, courseType, unionId, List.of(1, 3)); + } + + @Override + public int queryCourseWaitCount(String courseId, String courseType, String unionId) { + return this.calcSignCount(courseId, courseType, unionId, List.of(2)); + } + + private int calcSignCount(String courseId, String courseType, String unionId, List stateList) { + if(StrUtil.isBlank(courseId) || StrUtil.isBlank(courseType)) { + return 0; + } + LiteracyType type = dao().fetch(LiteracyType.class, courseType); + AtomicInteger hasRegisterNum = new AtomicInteger(); + List signUpUsers = dao().query(LiteracyUser.class, Cnd.where("courseId", "=", courseId) + .and("state", "in", stateList) + .andEX("unionId", "=", unionId)); + signUpUsers.forEach(item -> { + if (type.getSelfAddFamily()) { + hasRegisterNum.getAndIncrement(); + } + if(type.getIsBringFamily() && type.getIsAddFamily()) { + List mobileColumnsValue = item.getMobileColumnsValue(); + NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); + int number = map != null ? map.getInt("columnValue") : 0; + hasRegisterNum.addAndGet(number); + } + }); + return hasRegisterNum.get(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyUserServiceImpl.java new file mode 100644 index 00000000..5bb18fdb --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/literacy/service/impl/LiteracyUserServiceImpl.java @@ -0,0 +1,103 @@ +package com.budwk.app.zhgh.activity.literacy.service.impl; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.activity.literacy.models.LiteracyBlackList; +import com.budwk.app.zhgh.activity.literacy.service.LiteracyBlackListService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Criteria; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年03月07日 14:29:00 + */ +@IocBean(args = {"refer:dao"}) +public class LiteracyUserServiceImpl extends BaseServiceImpl implements LiteracyBlackListService { + + public LiteracyUserServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd, String activityId, String courseId) { + Sql sql = Sqls.create(""" + SELECT + u.id AS userId, + u.username, + u.loginname, + ifnull(tsuu.mobile, u.mobile) as mobile, + u.unitname, + u.unionname, + tsuc.courseName, + tsuu.state, + ( SELECT count( 1 ) FROM literacy_user_course WHERE userId = tsuu.userId $var) courseTotal, + ( SELECT count( 1 ) FROM literacy_user_course WHERE userId = tsuu.userId AND isAttend = 0 and tsuu.state!=2 AND now()> courseEndTime $var) AS absentCount, + if(tsubl.isDisabled=1,true,false) isDisabled, + group_CONCAT( tsuc.courseName ) AS courseNames + FROM + `literacy_user` tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + LEFT JOIN literacy_activity act on act.id = tsuu.activityId + LEFT JOIN literacy_course tsuc ON tsuc.id = tsuu.courseId + LEFT JOIN literacy_black_list tsubl on tsubl.userId = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ) + """); + cnd.groupBy("tsuu.userId"); + Criteria varCnd = Cnd.cri(); + varCnd.where().setTop(false); + varCnd.where().andEX("activityId", "=", activityId); + varCnd.where().andEX("courseId", "=", courseId); + if (!varCnd.where().isEmpty()) { + sql.vars().set("var", "and " + varCnd.toSql(null)); + } + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + + @Override + public void doHandleUser(String userId) { + LiteracyBlackList blackRecord = dao().fetch(LiteracyBlackList.class, Cnd.where("userId", "=", userId)); + if (Lang.isEmpty(blackRecord)) { + LiteracyBlackList blackList = new LiteracyBlackList(); + blackList.setUserId(userId); + blackList.setIsDisabled(true); + dao().insert(blackList); + } else { +// blackRecord.setIsDisabled(!blackRecord.getIsDisabled()); +// dao().update(blackRecord); + dao().delete(blackRecord); + } + + } + + @Override + public List attendClassRecord(String userId) { + Sql sql = Sqls.create(""" + SELECT + c.courseName, + uc.courseStartTime, + courseEndTime, + uc.isAttend, + uc.attendTime + FROM + `literacy_user_course` uc + LEFT JOIN literacy_course c ON c.id = uc.courseId + WHERE + uc.userId = @userId + """); + sql.setParam("userId", userId); + return listMap(sql); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java index 2ba4a613..aed40ef3 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java @@ -40,7 +40,7 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl courseEndTime $var) AS absentCount, if(tsubl.isDisabled=1,true,false) isDisabled, group_CONCAT( tsuc.courseName ) AS courseNames diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java index 9013964a..4c7f20d7 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java @@ -128,6 +128,7 @@ public class ClubUserJoinApplyController { Dict args = Dict.create(); args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, clubUserApply); + args.set("clubId", clubUserApply.getClubId()); ProcessInstance instance = flowEngine.startProcessInstanceByKey("XHRH", clubUserApply.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java index b9f8d54f..3b206bac 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java @@ -27,6 +27,7 @@ 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; import javax.validation.Valid; @@ -49,7 +50,8 @@ public class ClubUserJoinMineController { @At @SaCheckPermission("club.join.mine") - public Result pageData(@Valid PageForm pageForm){ + public Result pageData(@Valid PageForm pageForm, + @Param("year") Integer year){ Sql sql = Sqls.create(""" SELECT info.*, @@ -83,6 +85,7 @@ public class ClubUserJoinMineController { """); Cnd cnd = Cnd.NEW(); cnd.and("info.userId", "=", SecurityUtil.getUserId()); + cnd.andEX("year(info.applyDate)", "=", year); cnd.groupBy("info.id"); cnd.desc("info.applyDate"); sql.setCondition(cnd); @@ -117,7 +120,8 @@ public class ClubUserJoinMineController { u.unionName, u.technicalTitle, u.education, - u.academicDegree + u.academicDegree, + u.position FROM club_user_apply cua LEFT JOIN vw_user u ON u.id = cua.userId diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java b/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java index 71fb98ef..e747fdd5 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java @@ -337,8 +337,8 @@ public class ClubStatisticsController { sum( CASE WHEN cu.userId is not null $myCondition THEN 1 ELSE 0 END ) AS total, sum( CASE WHEN su.userState in ('在职', '在岗') $myCondition THEN 1 ELSE 0 END ) AS `work`, sum( CASE WHEN su.userState in ('退休') $myCondition THEN 1 ELSE 0 END ) AS retire, - sum( CASE WHEN su.sex = '男' $myCondition THEN 1 ELSE 0 END ) AS man, - sum( CASE WHEN su.sex = '女' $myCondition THEN 1 ELSE 0 END ) AS woman, + sum( CASE WHEN su.sex like '%男%' $myCondition THEN 1 ELSE 0 END ) AS man, + sum( CASE WHEN su.sex like '%女%' $myCondition THEN 1 ELSE 0 END ) AS woman, sum( CASE WHEN cu.roleCode != 'CLUB_MEMBER' AND 1 = 1 $myCondition THEN 1 ELSE 0 END ) AS governing_body FROM sys_club club diff --git a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserImportVo.java b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserImportVo.java index bf9b81ad..553f8cfd 100644 --- a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserImportVo.java +++ b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserImportVo.java @@ -27,9 +27,6 @@ public class ClubUserImportVo { @ExcelProperty("姓名") private String username; - @ExcelProperty("协会职务") - private String clubPosition; - @ExcelIgnore private String errorInfo; } diff --git a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserJoinVo.java b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserJoinVo.java index 2070791b..7c7137ba 100644 --- a/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserJoinVo.java +++ b/src/main/java/com/budwk/app/zhgh/club/vo/ClubUserJoinVo.java @@ -18,4 +18,8 @@ public class ClubUserJoinVo extends ClubUserApply { private String unionName; private String sex; private String mobile; + private String technicalTitle; + private String education; + private String academicDegree; + private String position; } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java index dcbbcab5..2539b66d 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java @@ -114,6 +114,8 @@ public class ArticleClubApprovalController { } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java index a64099e0..2d4a51bb 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java @@ -102,7 +102,9 @@ public class ArticleExamineController { """); Cnd cnd = Cnd.NEW(); cnd.and("t.taskName", "=", "27f618b9-bff8-4382-87c9-d9abd9f5963c"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } if (approval) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java index 0cd38833..72fa1134 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java @@ -86,6 +86,10 @@ public class ArticleMineController { Cnd cnd = Cnd.NEW(); cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); + // 添加标题模糊查询,仅当标题不为空时 + if (pageForm.getTitle() != null && !pageForm.getTitle().trim().isEmpty()) { + cnd.andEX("info.title", "LIKE", "%" + pageForm.getTitle().trim() + "%"); + } cnd.desc("info.submitTime"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java index 89d6e629..c191c596 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; import com.budwk.app.zhgh.dayofficework.article.service.ArticleService; import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO; @@ -42,15 +43,34 @@ public class ArticleQueryController { public Result pageData(@Valid ArticleInfoPageParam pageForm) { Sql sql = Sqls.create(""" SELECT - info.*, + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + info.origin, ins.id AS instanceId, - ins.processDefineId instanceProcessDefineId + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime FROM article info - LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id $condition """); Cnd cnd = Cnd.NEW(); + cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode()); cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); if (StrUtil.isNotBlank(pageForm.getTitle())) { cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); @@ -65,7 +85,6 @@ public class ArticleQueryController { }else{ cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } - cnd.groupBy("info.id"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java index 6d84a7ff..270143fe 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java @@ -2,12 +2,14 @@ package com.budwk.app.zhgh.dayofficework.article.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.PageUtil; import com.budwk.app.bpm.service.BpmService; import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; @@ -87,7 +89,9 @@ public class ArticleSchoolUnionApprovalController { """); Cnd cnd = Cnd.NEW(); cnd.and("t.taskName", "=", "749b6917-58ba-4564-8701-4bd2491fcb98"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } if (approval) { cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java index f94981e9..9daa058c 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java @@ -87,6 +87,7 @@ public class ArticleWriteController { args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, article); args.set("origin", article.getOrigin()); + args.set("clubId",article.getClubId()); ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 @@ -109,6 +110,8 @@ public class ArticleWriteController { Dict dict = Dict.create(); dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + dict.set("origin", article.getOrigin()); + dict.set("clubId",article.getClubId()); flowCommonService.executeTask(dict); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java index 0c2a27a7..d59cd719 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/param/ArticleInfoPageParam.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.dayofficework.article.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.dayofficework.article.models.Article; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @Data @ApiModel(value = "稿件分页查询参数") -public class ArticleInfoPageParam extends PageForm
{ +public class ArticleInfoPageParam extends PageForm { @ApiModelProperty("稿件标题") private String title; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java index b4d8e171..deb8a0ee 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/controller/EvaluateActivityController.java @@ -58,7 +58,7 @@ public class EvaluateActivityController { @At @SaCheckPermission("evaluation.activity") @ApiOperation("获取评优评先活动列表") - public Result pageData(@Valid PageForm pageForm, Integer year, String searchKeyword) { + public Result pageData(@Valid PageForm pageForm, Integer year, String searchKeyword) { Sql sql = Sqls.create(""" SELECT eva.*, diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java index 188d9d20..94ad602b 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/evaluation/vo/EvaluatePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.dayofficework.evaluation.vo; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +9,7 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) @ApiModel("评优评先分页参数") @Data -public class EvaluatePageForm extends PageForm { +public class EvaluatePageForm extends PageForm { @ApiModelProperty("年度") private Integer year; diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingOnlineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingOnlineController.java index 4a5e794a..13c2f331 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingOnlineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingOnlineController.java @@ -32,9 +32,7 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -85,8 +83,8 @@ public class MeetingOnlineController { cnd.andEX("info.typeId", "=", typeId); if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.orLike("info.meetingName", pageForm.getSearchKeyword()); - seg.orLike("info.location", pageForm.getSearchKeyword()); + seg.orLike("info.name", pageForm.getSearchKeyword()); + seg.orLike("info.address", pageForm.getSearchKeyword()); cnd.and(seg); } cnd.desc("info.createTime"); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingStatisticsController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingStatisticsController.java new file mode 100644 index 00000000..dde013ed --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/controller/MeetingStatisticsController.java @@ -0,0 +1,182 @@ +package com.budwk.app.zhgh.dayofficework.meeting.controller; + +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingInfo; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingTimePeriodUser; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingType; +import com.budwk.app.zhgh.dayofficework.meeting.service.MeetingInfoService; +import com.budwk.app.zhgh.dayofficework.meeting.service.MeetingUserService; +import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; +import com.budwk.app.zhgh.democratic.workercongress.models.Worker_congress_delegate; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +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.Strings; +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.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @ClassName MeetingStatisticsController + * @Author JyuHsin + * @Date 2025/8/29 17:59 + * @Version 1.0 + * @Description TODO + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "会议统计") +@At("/platform/meeting/statistics") +public class MeetingStatisticsController { + + @Inject + private Dao dao; + @Inject + private MeetingInfoService infoService; + @Inject + private SysRoleService roleService; + @Inject + private MeetingUserService userService; + + @At("") + @SaCheckPermission("meeting.statistics") + @Ok("beetl:/platform/zhgh/dayofficework/meeting/statistics/index.html") + public void index() {} + + @At + @ApiOperation("分页查询") + @SaCheckPermission("meeting.statistics") + public Result pageData(PageForm pageForm, + @Param("year") Integer year, + @Param("typeId") String typeId) { + Cnd cnd = Cnd.NEW(); + Sql sql = Sqls.create(""" + SELECT + info.*, + type.name as typeName, + @qrCodeUrl as qrCodeUrl + FROM + meeting_info info + LEFT JOIN meeting_type type ON type.id = info.typeId + $condition + """); + sql.setParam("qrCodeUrl", ""); + cnd.andEX("year(info.createTime)", "=", year); + cnd.andEX("info.typeId", "=", typeId); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("info.name", pageForm.getSearchKeyword()); + seg.orLike("info.address", pageForm.getSearchKeyword()); + cnd.and(seg); + } + cnd.desc("info.createTime"); + sql.setCondition(cnd); + Pagination pagination = infoService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("获取会议时间段") + @SaCheckPermission("meeting.statistics") + public Result view(String meetingId) { + MeetingInfo info = dao.fetch(MeetingInfo.class, meetingId); + MeetingType type = dao.fetch(MeetingType.class, info.getTypeId()); + + if("JDHHY".equals(type.getDesignId())) { + List listMap = userService.queryMeetingCount( + meetingId, + "teacher_congress_delegate", + RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL.name(), + RoleConstant.TEACHER_CONGRESS_DELEGATE_ATTENDANCE.name(), + info.getTeacherCongressSessionId() + ); + return Result.success(listMap); + } else if("GDHHY".equals(type.getDesignId())) { + List listMap = userService.queryMeetingCount( + meetingId, + "worker_congress_delegate", + RoleConstant.WORKER_CONGRESS_DELEGATE_FORMAL.name(), + RoleConstant.WORKER_CONGRESS_DELEGATE_ATTENDANCE.name(), + info.getWorkerCongressSessionId() + ); + return Result.success(listMap); + } + return Result.success(); + } + + @At + @ApiOperation("获取人员名单") + @SaCheckPermission("meeting.statistics") + public Result queryUserTable(PageForm pageForm, + String meetingId, + String type, + String unionId, + String unitId, + String periodId) { + MeetingInfo info = dao.fetch(MeetingInfo.class, meetingId); + MeetingType meetingType = dao.fetch(MeetingType.class, info.getTypeId()); + + Pagination pagination = userService.queryUserTable(pageForm, info, meetingType, type, unionId, unitId, periodId); + return Result.success(pagination); + } + + @At + @Ok("void") + @SaCheckPermission("meeting.statistics") + public void exportUser(@Param(value = "periodId") String periodId, + @Param(value = "meetingId") String meetingId, + @Param(value = "exportColumns") NutMap[] exportColumns, + HttpServletResponse response) { + List entityList = new ArrayList<>(); + entityList.add(new ExcelExportEntity("姓名", "userName", 20)); + entityList.add(new ExcelExportEntity("工号", "loginName", 20)); + entityList.add(new ExcelExportEntity("单位", "unitName", 30)); + entityList.add(new ExcelExportEntity("分工会", "unionName", 35)); + + MeetingInfo info = dao.fetch(MeetingInfo.class, meetingId); + MeetingType meetingType = dao.fetch(MeetingType.class, info.getTypeId()); + + Workbook workbook = new XSSFWorkbook(); + for (NutMap exportColumn : exportColumns) { + List listMap = userService.queryUserTable(info, meetingType, exportColumn.getString("prop"), periodId); + ExcelExportService service = new ExcelExportService(); + ExportParams exportParams = new ExportParams(); + exportParams.setTitle(exportColumn.getString("label")); + exportParams.setSheetName(exportColumn.getString("label")); + exportParams.setType(ExcelType.XSSF); + service.createSheetForMap(workbook, exportParams, entityList, listMap); + } + + CommonDownloadUtil.download("人员列表.xlsx", workbook, response); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/MeetingUserService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/MeetingUserService.java new file mode 100644 index 00000000..0af3f086 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/MeetingUserService.java @@ -0,0 +1,36 @@ +package com.budwk.app.zhgh.dayofficework.meeting.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingInfo; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingTimePeriodUser; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingType; +import org.nutz.lang.util.NutMap; + +import java.awt.*; +import java.util.List; + +/** + * @ClassName MeetingUserService + * @Author JyuHsin + * @Date 2025/9/1 10:46 + * @Version 1.0 + * @Description TODO + */ +public interface MeetingUserService extends BaseService { + + Pagination queryUserTable(PageForm pageForm, + MeetingInfo info, + MeetingType meetingType, + String type, + String unionId, + String unitId, + String periodId); + + List queryUserTable(MeetingInfo info, MeetingType meetingType, String type, String periodId); + + List queryMeetingCount(String meetingId, String tableName, String formalRoleCode, String attendanceRoleCode, String sessionId); + + List queryDelegateIds(Class delegateClass, String sessionId, String roleCode); +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingOnlineServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingOnlineServiceImpl.java index 73cc7a0d..34103c5b 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingOnlineServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingOnlineServiceImpl.java @@ -84,18 +84,18 @@ public class MeetingOnlineServiceImpl extends BaseServiceImpl imple MeetingTimePeriod timePeriod = dao().fetch(MeetingTimePeriod.class, timePeriodId); Sql sql = Sqls.create(""" SELECT - (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId) as shouldComeNumber, - (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and (joinStatus is null or (joinStatus is not null ) and signStatus is null)) as actualComeNumber, - (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and signStatus = 1) as signInNumber, - (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and joinStatus = 0 ) as leaveNumber + (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId) as totalCount, + (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and joinStatus = 1 and signStatus = 0) as noComeCount, + (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and signStatus = 1) as comeCount, + (select count(1) from meeting_time_period_user where timePeriodId = @timePeriodId and joinStatus = 0) as leaveCount """); sql.setParam("timePeriodId", timePeriodId); NutMap dataMap = (NutMap) Daos.query(dao(), sql.toString(), Sqls.callback.map()); List> list = new ArrayList<>(); - list.add(Map.of("label", "应到人数", "key", "shouldComeNumber", "value", dataMap.getInt("shouldComeNumber", 0))); - list.add(Map.of("label", "未到人数", "key", "actualComeNumber", "value", dataMap.getInt("actualComeNumber", 0))); - list.add(Map.of("label", "签到人数", "key", "signInNumber", "value", dataMap.getInt("signInNumber", 0))); + list.add(Map.of("label", "应到人数", "key", "totalCount", "value", dataMap.getInt("totalCount", 0))); + list.add(Map.of("label", "未到人数", "key", "noComeCount", "value", dataMap.getInt("noComeCount", 0))); + list.add(Map.of("label", "签到人数", "key", "comeCount", "value", dataMap.getInt("comeCount", 0))); //如果是教代会,就查询签到的正式代表和列席代表各多少人 MeetingInfo meetingInfo = dao().fetch(MeetingInfo.class, timePeriod.getMeetingId()); @@ -118,7 +118,7 @@ public class MeetingOnlineServiceImpl extends BaseServiceImpl imple Worker_congress_delegate.class ); } - list.add(Map.of("label", "请假人数", "key", "leaveNumber", "value", dataMap.getInt("leaveNumber", 0))); + list.add(Map.of("label", "请假人数", "key", "leaveCount", "value", dataMap.getInt("leaveCount", 0))); return list; } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingUserServiceImpl.java new file mode 100644 index 00000000..09b1c6f4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/meeting/service/impl/MeetingUserServiceImpl.java @@ -0,0 +1,176 @@ +package com.budwk.app.zhgh.dayofficework.meeting.service.impl; + +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingInfo; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingTimePeriodUser; +import com.budwk.app.zhgh.dayofficework.meeting.model.MeetingType; +import com.budwk.app.zhgh.dayofficework.meeting.service.MeetingUserService; +import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; +import com.budwk.app.zhgh.democratic.workercongress.models.Worker_congress_delegate; +import lombok.extern.slf4j.Slf4j; +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.Strings; +import org.nutz.lang.util.NutMap; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @ClassName MeetingUserServiceImpl + * @Author JyuHsin + * @Date 2025/9/1 10:47 + * @Version 1.0 + * @Description TODO + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class MeetingUserServiceImpl extends BaseServiceImpl implements MeetingUserService { + + @Inject + private SysRoleService roleService; + + public MeetingUserServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination queryUserTable(PageForm pageForm, MeetingInfo info, MeetingType meetingType, String type, String unionId, String unitId, String periodId) { + Sql sql = this.generateSql(pageForm, info, meetingType.getDesignId(), type, unionId, unitId, periodId); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + @Override + public List queryUserTable(MeetingInfo info, MeetingType meetingType, String type, String periodId) { + Sql sql = this.generateSql(null, info, meetingType.getDesignId(), type, null, null, periodId); + return listMap(sql); + } + + @Override + public List queryMeetingCount(String meetingId, String tableName, String formalRoleCode, String attendanceRoleCode, String sessionId) { + Sys_role formalRole = roleService.getByCode(formalRoleCode); + Sys_role attendanceRole = roleService.getByCode(attendanceRoleCode); + + Sql sql = Sqls.create(""" + SELECT + mtp.*, + count( mtpu.id ) AS totalCount, + sum( CASE WHEN mtpu.joinStatus = 0 THEN 1 ELSE 0 END ) AS leaveCount, + sum( CASE WHEN mtpu.signStatus = 1 THEN 1 ELSE 0 END ) AS comeCount, + sum( CASE WHEN mtpu.joinStatus = 1 AND mtpu.signStatus = 0 THEN 1 ELSE 0 END ) AS noComeCount, + sum( CASE WHEN (mtpu.signStatus = 1) AND (d.roleId = @formalRole) AND d.sessionId = @sessionId THEN 1 ELSE 0 END) as formalRoleCount, + sum( CASE WHEN (mtpu.signStatus = 1) AND (d.roleId = @attendanceRole) AND d.sessionId = @sessionId THEN 1 ELSE 0 END) as attendanceRoleCount + FROM + meeting_time_period mtp + LEFT JOIN meeting_time_period_user mtpu ON mtpu.timePeriodId = mtp.id + LEFT JOIN $tableName d on d.userId = mtpu.userId and d.sessionId = @sessionId + $condition + """); + sql.setParam("formalRole", formalRole.getId()); + sql.setParam("attendanceRole", attendanceRole.getId()); + sql.setParam("sessionId", sessionId); + + Cnd cnd = Cnd.NEW(); + cnd.and("mtp.meetingId", "=", meetingId); + cnd.desc("mtp.startTime"); + cnd.groupBy("mtp.id"); + + sql.setVar("tableName", tableName); + sql.setCondition(cnd); + return listMap(sql); + } + + @Override + public List queryDelegateIds(Class delegateClass, String sessionId, String roleCode) { + Sys_role role = roleService.getByCode(roleCode); + + List result = new ArrayList<>(); + // 查询代表 + List list = dao().query(delegateClass, Cnd.where("sessionId", "=", sessionId)); + for (T delegate : list) { + try { + // 获取 roleId 字段值 + Field roleIdField = delegateClass.getDeclaredField("roleId"); + roleIdField.setAccessible(true); + String roleId = (String) roleIdField.get(delegate); + + // 获取 userId 字段值 + Field userIdField = delegateClass.getDeclaredField("userId"); + userIdField.setAccessible(true); + String userId = (String) userIdField.get(delegate); + + if(Objects.equals(roleId, role.getId())) { + result.add(userId); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + log.error(e.getMessage()); + } + } + return result; + } + + private Sql generateSql(PageForm pageForm, + MeetingInfo info, + String designId, + String type, + String unionId, + String unitId, + String periodId) { + Sql sql = Sqls.create(""" + select + mtpu.*, + u.sex, + u.mobile + from + meeting_time_period_user mtpu + left join vw_user u on u.id = mtpu.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + switch (type) { + case "comeCount" -> cnd.and(MeetingTimePeriodUser::getSignStatus, "=", true); + case "formalRoleCount" -> { + cnd.and(MeetingTimePeriodUser::getSignStatus, "=", true); + if ("JDHHY".equals(designId)) { + cnd.and(MeetingTimePeriodUser::getUserId, "in", this.queryDelegateIds(Teacher_congress_delegate.class, info.getTeacherCongressSessionId(), RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL.name())); + } else if ("GDHHY".equals(designId)) { + cnd.and(MeetingTimePeriodUser::getUserId, "in", this.queryDelegateIds(Worker_congress_delegate.class, info.getWorkerCongressSessionId(), RoleConstant.WORKER_CONGRESS_DELEGATE_FORMAL.name())); + } + } + case "attendanceRoleCount" -> { + cnd.and(MeetingTimePeriodUser::getSignStatus, "=", true); + if ("JDHHY".equals(designId)) { + cnd.and(MeetingTimePeriodUser::getUserId, "in", this.queryDelegateIds(Teacher_congress_delegate.class, info.getTeacherCongressSessionId(), RoleConstant.TEACHER_CONGRESS_DELEGATE_ATTENDANCE.name())); + } else if ("GDHHY".equals(designId)) { + cnd.and(MeetingTimePeriodUser::getUserId, "in", this.queryDelegateIds(Worker_congress_delegate.class, info.getWorkerCongressSessionId(), RoleConstant.WORKER_CONGRESS_DELEGATE_ATTENDANCE.name())); + } + } + case "leaveCount" -> cnd.and(MeetingTimePeriodUser::getJoinStatus, "=", false); + case "noComeCount" -> cnd.and(MeetingTimePeriodUser::getJoinStatus, "=", true).and(MeetingTimePeriodUser::getSignStatus, "=", false); + } + cnd.and(MeetingTimePeriodUser::getTimePeriodId, "=", periodId); + cnd.andEX("mtpu.unitId", "=", unitId); + cnd.andEX("mtpu.unionId", "=", unionId); + if (pageForm != null && Strings.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("mtpu.userName", pageForm.getSearchKeyword()); + seg.orLike("mtpu.loginName", pageForm.getSearchKeyword()); + cnd.and(seg); + } + cnd.desc("mtpu.unitId"); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/site/service/impl/SiteApplyServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/site/service/impl/SiteApplyServiceImpl.java index 73babb5d..516694c9 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/site/service/impl/SiteApplyServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/site/service/impl/SiteApplyServiceImpl.java @@ -1,5 +1,6 @@ package com.budwk.app.zhgh.dayofficework.site.service.impl; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.enums.ProcessInstanceStateEnum; @@ -54,7 +55,7 @@ public class SiteApplyServiceImpl extends BaseServiceImpl implements sql.setCondition(cnd); List applyList = listEntity(sql); long hasReserve = applyList.stream().filter(o -> o.getApplyUserId().equals(SecurityUtil.getUserId())).count(); - if(hasReserve > 0) { + if(StrUtil.isBlank(apply.getId()) && hasReserve > 0) { return Map.of(false, "您已预约该时间段"); } int count = applyList.stream().mapToInt(SiteApply::getJoinCount).sum(); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java index c72b7bf2..38ab256a 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/param/GrassrootsCongressPageForm.java @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode; */ @EqualsAndHashCode(callSuper = true) @Data -public class GrassrootsCongressPageForm extends PageForm { +public class GrassrootsCongressPageForm extends PageForm { private Integer year; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java index d7577e8f..21609f7f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/export/ProposalExportComprehensiveController.java @@ -10,6 +10,7 @@ import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; +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; @@ -48,7 +49,34 @@ public class ProposalExportComprehensiveController { @SaCheckPermission("proposal.query.comprehensive") @ApiOperation(value = "分页列表") public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) { - Sql sql = proposalExportService.exportComprehensiveSql(pageForm); + Sql sql = Sqls.create(""" + SELECT + info.*, + COUNT(p.consolidationIds) > 0 AS isConsolidation, + type.name AS typeName, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.displayName curTaskName, + JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames + FROM + proposal_info info + LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id + LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + $condition + """); Cnd cnd = Cnd.NEW(); ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); cnd.groupBy("info.id"); @@ -60,10 +88,10 @@ public class ProposalExportComprehensiveController { @At @Ok("void") - @ApiOperation("导出提案汇总表excel") + @ApiOperation("导出汇总表excel") @SaCheckPermission("proposal.query.comprehensive") - public void exportProposalSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ - proposalExportService.exportProposalSummaryAsExcel(pageForm, response); + public void exportSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ + proposalExportService.exportSummaryAsExcel(pageForm, response); } @@ -91,4 +119,12 @@ public class ProposalExportComprehensiveController { proposalExportService.exportFeedBackAsZip(pageForm, response); } + @At + @Ok("void") + @ApiOperation("导出征集表ZIP") + @SaCheckPermission("proposal.query.comprehensive") + public void exportCollectZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){ + proposalExportService.exportCollectZip(pageForm, response); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java index e1373c54..7e233ae2 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryComprehensiveController.java @@ -60,7 +60,7 @@ public class ProposalQueryComprehensiveController { ins.processDefineId instanceProcessDefineId, t.displayName curTaskName, JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, - JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames FROM proposal_info info LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java index e536676f..00363d62 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryHistoryController.java @@ -53,7 +53,7 @@ public class ProposalQueryHistoryController { ins.processDefineId instanceProcessDefineId, t.displayName curTaskName, JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName, - JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames + caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames FROM proposal_info info LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java index 8b390f1a..5c8f090f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java @@ -91,11 +91,12 @@ public class ProposalQueryUnitReplyController { for (String underTakeId : underTakeIds) { NutMap tableRow = NutMap.NEW(); tableRow.put("id", underTakeId); + if(undertakeMap.get(underTakeId) == null){ + continue; + } tableRow.put("name", undertakeMap.get(underTakeId).getName()); //找出承办提案总数 -// long sum = caseTasks.stream().filter(v -> (Json.fromJson(NutMap.class, v.getVariable())).getString("tf_hostUnitId").equals(underTakeId) || (Json.fromJson(NutMap.class, v.getVariable())).getAsList("helpUnitIds", String.class).contains(underTakeId)).map(ProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size(); - long sum = caseTasks.stream() .filter(v -> { NutMap variable = Json.fromJson(NutMap.class, v.getVariable()); @@ -115,17 +116,22 @@ public class ProposalQueryUnitReplyController { .distinct() .count(); - //找出主办提案数量 + // 主办提案数量 long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count(); - //主办已答复的数量 + // 主办已答复的数量 long hostReplySum = masterUnitTasks.stream().filter(v -> Objects.equals(v.getTaskState(), ProcessTaskStateEnum.FINISHED.getCode())).map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count(); - //主办未答复的数量 + // 主办未答复的数量 long hostNoReplySum = hostSum - hostReplySum; + + // 协办提案数量 + long slaveSum = slaveUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && !variable.getBoolean("isMaster")).count(); + tableRow.put("sum", sum); tableRow.put("hostSum", hostSum); tableRow.put("hostReplySum", hostReplySum); tableRow.put("hostNoReplySum", hostNoReplySum); + tableRow.put("slaveSum", slaveSum); // if (slaveNeedReply) { // //协办提案数量 diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java index 5416a698..0f43d33c 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/models/ProposalInfo.java @@ -112,6 +112,11 @@ public class ProposalInfo extends BaseModel { @ColDefine(type = ColType.TEXT) private String excerpt; + @Column + @Comment("调研情况") + @ColDefine(type = ColType.TEXT) + private String researchFindings; + @Column @Comment("案由") @ColDefine(type = ColType.TEXT) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java index cf7f4dea..acc8d40b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalSearchParam.java @@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.proposal.param; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -13,7 +12,7 @@ import org.nutz.dao.Cnd; */ @EqualsAndHashCode(callSuper = true) @Data -public class ProposalSearchParam extends PageForm { +public class ProposalSearchParam extends PageForm { private String name; private String code; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java index 068e4dc8..3f0c9d51 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalExportService.java @@ -6,6 +6,7 @@ import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensivePa import org.nutz.dao.sql.Sql; import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; /** * @version 1.0 @@ -18,6 +19,7 @@ public interface ProposalExportService extends BaseService { /** * 某些页面的公共SQL,用于导出或者综合查询 + * * @param pageForm * @return */ @@ -25,13 +27,15 @@ public interface ProposalExportService extends BaseService { /** * 导出提案汇总表excel + * * @param pageForm * @param response */ - void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); + void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); /** * 导出提案立案汇总表excel + * * @param pageForm * @param response */ @@ -39,6 +43,7 @@ public interface ProposalExportService extends BaseService { /** * 导出提案统计表zip + * * @param pageForm * @param response */ @@ -46,8 +51,25 @@ public interface ProposalExportService extends BaseService { /** * 导出反馈表 + * * @param pageForm * @param response */ void exportFeedBackAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); + + + /** + * 导出征集表docx + * @param id + * @param byteArrayOutputStream + */ + void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream); + + /** + * 导出征集表zip + * + * @param pageForm + * @param response + */ + void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java index af8eccb5..90d9b39d 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonService.java @@ -32,6 +32,14 @@ public interface ProposalCommonService extends BaseService { */ void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream); + + /** + * 导出征集表 + * @param id + * @param byteArrayOutputStream + */ + void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream); + /** * 根据提案id查询团长 * diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java index b5dc92e3..794e1abb 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java @@ -18,11 +18,17 @@ import com.budwk.app.bpm.models.BpmProcessTask; import com.budwk.app.bpm.service.BpmService; import com.budwk.app.bpm.vo.BpmProcessTaskVo; import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.Sys_role; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session; @@ -204,187 +210,6 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp docData.put("info", info); - //查询附议人信息 - BpmProcessInstance bpmProcessInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", id)); - BpmProcessTask lastestWriteTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name()) - .and(BpmProcessTask::getProcessTaskNodeCode, "=", 10) - .and(BpmProcessTask::getDelFlag, "=", 0) - .desc(BpmProcessTask::getEndOn) - ); - - if (ObjectUtil.isNotEmpty(lastestWriteTask)) { - String lastestWriteTaskId = lastestWriteTask.getId(); - List seconderTasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getPrevTaskId, "=", lastestWriteTaskId) - .and(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name()) - .and(BpmProcessTask::getDelFlag, "=", 0) - .asc(BpmProcessTask::getCreatedOn) - ); - List> seconders = seconderTasks.stream().filter(v -> v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name()) && ObjectUtil.isNotEmpty(v.getExtVariable().getStr("bpmTaskApprovalType").equals("PASS"))).map(v -> { - HashMap seconderApproval = new HashMap<>(); - seconderApproval.put("userName", v.getCreateVariable().getStr("userName")); - seconderApproval.put("loginName", v.getCreateVariable().getStr("loginName")); - seconderApproval.put("unitName", v.getCreateVariable().getStr("unitName")); - return seconderApproval; - }).toList(); - - docData.put("seconders", seconders); - } - - //审批记录 - List nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id); - - //团长审核 - nodeTasks.stream().filter(v -> v.getNodeCode() == 30) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap delegationApproval = new HashMap<>(); - delegationApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - delegationApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - delegationApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - delegationApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("tz", delegationApproval); - }); - - //委员会立案 - nodeTasks.stream().filter(v -> v.getNodeCode() == 60) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap committeeApproval = new HashMap<>(); - committeeApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - committeeApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - committeeApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - committeeApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - committeeApproval.put("hostUnit", v.getExtVariable().getStr("hostUnit")); - if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) { - committeeApproval.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class))); - } - } - docData.put("wyh", committeeApproval); - }); - - //委员会确认承办单位 - nodeTasks.stream().filter(v -> v.getNodeCode() == 70) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap committeeConfirm = new HashMap<>(); - committeeConfirm.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - committeeConfirm.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - committeeConfirm.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - committeeConfirm.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - committeeConfirm.put("hostUnit", v.getExtVariable().getStr("hostUnit")); - if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) { - committeeConfirm.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class))); - } - } - docData.put("wyhConfirm", committeeConfirm); - }); - - //主办单位答复 - nodeTasks.stream().filter(v -> v.getNodeCode() == 80) - .flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster")) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap masterUnderTakeReply = new HashMap<>(); - masterUnderTakeReply.put("name", v.getCreateVariable().getStr("underTakeName")); - masterUnderTakeReply.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - masterUnderTakeReply.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - masterUnderTakeReply.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - masterUnderTakeReply.put("implementState", v.getExtVariable().getStr("implementState")); - masterUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("zbdf", masterUnderTakeReply); - }); - - //协办单位答复 - List> slaveUnderTakeReplyList = new ArrayList<>(); - nodeTasks.stream().filter(v -> v.getNodeCode() == 80).flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster")) - .collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId"))) - .forEach((k, v1) -> { - v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> { - HashMap slaveUnderTakeReply = new HashMap<>(); - slaveUnderTakeReply.put("name", v2.getCreateVariable().getStr("underTakeName")); - slaveUnderTakeReply.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日")); - slaveUnderTakeReply.put("user", v2.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v2.getExtVariable())) { - slaveUnderTakeReply.put("opinion",HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v2.getExtVariable().getStr("approvalOpinion"), ""))); - slaveUnderTakeReply.put("implementState", v2.getExtVariable().getStr("implementState")); - slaveUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature"))); - } - slaveUnderTakeReplyList.add(slaveUnderTakeReply); - }); - }); - docData.put("xbdf", slaveUnderTakeReplyList); - - //主办校领导审批 - nodeTasks.stream().filter(v -> v.getNodeCode() == 90) - .flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster")) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap masterLeaderApproval = new HashMap<>(); - masterLeaderApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - masterLeaderApproval.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - masterLeaderApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - masterLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature"))); - } - docData.put("zbldsp", masterLeaderApproval); - }); - - List> slaveLeaderApprovalList = new ArrayList<>(); - - //协办校领导审批 - nodeTasks.stream().filter(v -> v.getNodeCode() == 90).flatMap(v -> v.getTasks().stream()) - .filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster")) - .collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId"))) - .forEach((k, v1) -> { - v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> { - HashMap slaveLeaderApproval = new HashMap<>(); - slaveLeaderApproval.put("name", v2.getCreateVariable().getStr("underTakeName")); - slaveLeaderApproval.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日")); - slaveLeaderApproval.put("user", v2.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v2.getExtVariable())) { - slaveLeaderApproval.put("opinion", v2.getExtVariable().getStr("approvalOpinion")); - slaveLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature"))); - } - slaveLeaderApprovalList.add(slaveLeaderApproval); - }); - }); - docData.put("xbldsp", slaveLeaderApprovalList); - - //反馈评分 - nodeTasks.stream().filter(v -> v.getNodeCode() == 100) - .flatMap(v -> v.getTasks().stream()) - .max(Comparator.comparing(BpmProcessTaskVo::getEndOn)) - .ifPresent(v -> { - HashMap feedbackScore = new HashMap<>(); - feedbackScore.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日")); - feedbackScore.put("user", v.getActualOwnerUserName()); - if (ObjectUtil.isNotEmpty(v.getExtVariable())) { - feedbackScore.put("opinion", v.getExtVariable().getStr("approvalOpinion")); - String feedBackScore = v.getExtVariable().getStr("feedBackScore", ""); - feedbackScore.put("manyi", feedBackScore.equals("满意") ? "√" : ""); - feedbackScore.put("jibenmanyi", feedBackScore.equals("基本满意") ? "√" : ""); - feedbackScore.put("bumanyi", feedBackScore.equals("不满意") ? "√" : ""); - } - docData.put("fk", feedbackScore); - }); - - AttachmentRenderData attachmentRenderData = Attachments.ofLocal("C:\\Users\\zxy\\Desktop\\1.七届二次教代会提案反馈表(xxx部门).docx").create(); - docData.put("attachment", attachmentRenderData); - LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); @@ -517,6 +342,80 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp } } + @Override + public void exportCollectAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream) { + if (id == null || id.isEmpty()) { + throw new BaseException("提案信息不存在"); + } + + //基本信息 + Sql sql = Sqls.create(""" + SELECT + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + WHERE info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + execute(sql); + NutMap info = (NutMap) sql.getResult(); + HashMap docData = new HashMap<>(info); + + //处理下富文本 + String brief = info.getString("brief"); + String measures = info.getString("measures"); + info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief)); + info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(measures)); + + // 高校 + info.put("schoolName", Globals.AppName); + + // 附议人信息 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); + + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + docData.put("seconders", seconders); + + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); + htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); + + Configure config = Configure.builder() + .bind("seconders", policy) + .bind("brief", htmlRenderPolicy) + .bind("measures", htmlRenderPolicy) + .build(); + + try { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal"), config).render(docData).writeAndClose(byteArrayOutputStream); + } catch (IOException e) { + log.error("提案导出失败{},提案id:{}", e.getMessage(), id); + } + + } + @Override public String getDelegationHeadByProposalId(String proposalId) { ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java index b15e3594..01076f66 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java @@ -8,40 +8,52 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HtmlUtil; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.SysOfficeTemplateUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService; import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; +import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; +import org.ddr.poi.html.HtmlRenderPolicy; 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.json.Json; import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -/** - * @version 1.0 - * @Author zzr - * @name:ProposalExportServiceImpl - * @Date 2024/10/10 10:28 - * @注释 - */ @IocBean(args = {"refer:dao"}) +@Slf4j public class ProposalExportServiceImpl extends BaseServiceImpl implements ProposalExportService { @Inject private ProposalCommonService proposalCommonService; + @Inject + private SysOfficeTemplateUtil sysOfficeTemplateUtil; + public ProposalExportServiceImpl(Dao dao) { super(dao); @@ -139,37 +151,77 @@ public class ProposalExportServiceImpl extends BaseServiceImpl imp } @Override - public void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { - // 自定义导出 excel - Sql sql = exportComprehensiveSql(pageForm); + public void exportSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { + // 基本信息查询 + Sql sql = Sqls.create(""" + SELECT + info.id, + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + $condition + """); Cnd cnd = Cnd.NEW(); ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); cnd.groupBy("info.id"); sql.setCondition(cnd); // 导出的数据 List list = listMap(sql); - for (NutMap row : list) { - String content = HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(row.getString("masterUnderTakeReply"), "")); - row.put("masterUnderTakeReply", content); + // 添加序号,去除富文本,获取附议人 + for (int i = 0; i < list.size(); i++) { + list.get(i).put("index", i + 1); + list.get(i).put("brief",HtmlUtil.cleanHtmlTag(list.get(i).getString("brief"))); + list.get(i).put("measures",HtmlUtil.cleanHtmlTag(list.get(i).getString("measures"))); + + // 流程实例 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id"))); + + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, + Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", + List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + + if (inviteTask != null) { + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + list.get(i).put("secondedUserNames", seconders.stream().map(v->v.getString("userName")).collect(Collectors.joining(","))); + } } List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("序号", "index", 10)); exportEntities.add(new ExcelExportEntity("提案编号", "code", 20)); exportEntities.add(new ExcelExportEntity("提案名称", "name", 20)); - exportEntities.add(new ExcelExportEntity("提案类别", "typeName", 20)); - exportEntities.add(new ExcelExportEntity("提案摘要", "excerpt", 100)); - exportEntities.add(new ExcelExportEntity("单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("提案案由", "brief", 40)); + exportEntities.add(new ExcelExportEntity("代表调研情况", "researchFindings", 40)); + exportEntities.add(new ExcelExportEntity("代表建议措施", "measures", 40)); exportEntities.add(new ExcelExportEntity("提案人", "createUserName", 20)); - exportEntities.add(new ExcelExportEntity("附议人", "secondedUserNames", 40)); - exportEntities.add(new ExcelExportEntity("立案结果", "caseFilingResultName", 20)); - exportEntities.add(new ExcelExportEntity("主办单位", "masterUnderTakeName", 20)); - exportEntities.add(new ExcelExportEntity("协办单位", "slaveUnderTakeNamesStr", 30)); - exportEntities.add(new ExcelExportEntity("承办单位答复", "masterUnderTakeReply", 30)); - exportEntities.add(new ExcelExportEntity("备注", "remark", 30)); - exportEntities.add(new ExcelExportEntity("提案状态", "processInstanceNodeName", 20)); + exportEntities.add(new ExcelExportEntity("提案人电话", "mobile", 20)); + exportEntities.add(new ExcelExportEntity("附议人(两名)", "secondedUserNames", 20)); + exportEntities.add(new ExcelExportEntity("提案单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("拟交办单位", "", 20)); Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, pageForm.getSessionId()); - String title = StrUtil.format("第{}届教职工代表大会第{}次会议提案汇总表", session.getJ(), session.getC()); + String title = StrUtil.format("{}第{}{}教代会提案征集汇总表", Globals.AppName, session.getJ(), session.getC()); ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); @@ -324,6 +376,129 @@ public class ProposalExportServiceImpl extends BaseServiceImpl imp } catch (Exception e) { e.printStackTrace(); } + } + + @Override + public void exportCollectDocx(String id, ByteArrayOutputStream byteArrayOutputStream) { + // 基本信息查询 + Sql sql = Sqls.create(""" + SELECT + info.name, + info.code, + info.researchFindings, + info.brief, + info.measures, + info.createUserName, + tcde.unitName, + tcde.mobile, + type.name AS typeName, + tcs.j, + tcs.c, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + WHERE info.id = @id + """).setParam("id", id); + sql.setCallback(Sqls.callback.map()); + execute(sql); + + NutMap info = (NutMap) sql.getResult(); + // 处理富文本内容 + info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("brief"))); + info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures"))); + + // 添加高校信息 + info.put("schoolName", Globals.AppName); + + // 创建docData,直接复用info中的数据 + HashMap docData = new HashMap<>(info); + + // 流程实例 + ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id)); + + if (instance != null) { + // 查询附议人信息 + ProcessTask inviteTask = dao().fetch(ProcessTask.class, + Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()) + .and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819") + .and(ProcessTask::getTaskState, "in", + List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode())) + .desc(ProcessTask::getCreatedAt)); + + if (inviteTask != null) { + NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); + if (variable != null) { + List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); + docData.put("seconders", seconders != null ? seconders : Collections.emptyList()); + } + } + } + + // 配置渲染策略 + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy(); + htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true); + + Configure config = Configure.builder() + .bind("seconders", policy) + .bind("brief", htmlRenderPolicy) + .bind("measures", htmlRenderPolicy) + .build(); + + try { + XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_collect"), config) + .render(docData) + .writeAndClose(byteArrayOutputStream); + } catch (IOException e) { + log.error("提案导出失败,提案id:{},错误信息:{}", id, e.getMessage()); + } } + + @Override + public void exportCollectZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.code, + info.name + FROM + proposal_info info + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName + $condition + """); + Cnd cnd = Cnd.NEW(); + ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm); + sql.setCondition(cnd); + List list = listMap(sql); + + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ZipOutputStream zipOutputStream = new ZipOutputStream(bos); + for (NutMap proposalRow : list) { + try (ByteArrayOutputStream docxByteArrayOutputStream = new ByteArrayOutputStream()) { + exportCollectDocx(proposalRow.getString("id"), docxByteArrayOutputStream); + ZipEntry zipEntry = new ZipEntry("征集表-" + proposalRow.getString("code") + "-" + proposalRow.getString("name") + ".docx"); + zipOutputStream.putNextEntry(zipEntry); + docxByteArrayOutputStream.writeTo(zipOutputStream); + zipOutputStream.closeEntry(); + } catch (IOException e) { + // 处理单个文件生成失败的情况 + e.printStackTrace(); + } + } + zipOutputStream.close(); + CommonDownloadUtil.download("提案征集表压缩包.zip", bos.toByteArray(), response); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java index 3d4e0785..c6339a9d 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestion/param/SuggestionSearchParam.java @@ -3,7 +3,6 @@ package com.budwk.app.zhgh.democratic.suggestion.param; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.zhgh.democratic.suggestion.models.SuggestionInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -13,7 +12,7 @@ import org.nutz.dao.Cnd; */ @EqualsAndHashCode(callSuper = true) @Data -public class SuggestionSearchParam extends PageForm { +public class SuggestionSearchParam extends PageForm { private String name; private String code; diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java index e4dd2061..12fd8278 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java @@ -10,6 +10,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.democratic.suggestionBox.service.SuggestionBoxService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; @@ -18,7 +19,9 @@ 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.validation.Valid; import java.util.List; @IocBean @@ -39,7 +42,7 @@ public class SuggestionXghController { @At @SaCheckLogin - public Result pageData(PageForm pageForm, String title, Integer year, boolean approval) { + public Result pageData(PageForm pageForm, String taskId, String title, Integer year, boolean approval) { Sql sql = Sqls.create(""" SELECT info.id, @@ -99,5 +102,46 @@ public class SuggestionXghController { return Result.success(pageVO); } - + @At + @SaCheckLogin + @ApiOperation("查询任务") + public Result queryTask(@Valid @Param("taskId") String taskId) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN suggestion_box info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + WHERE t.id = @taskId + """); + sql.setParam("taskId", taskId); + NutMap data = suggestionBoxService.fetchMap(sql); + return Result.success(data); + } } diff --git a/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallBuyHomeController.java b/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallBuyHomeController.java new file mode 100644 index 00000000..04ae04ea --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallBuyHomeController.java @@ -0,0 +1,25 @@ +package com.budwk.app.zhgh.mall.controller.buy; + +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @version 1.0 + * @Author zzr + * @name:MallBuyHomeController + * @Date 2025/8/6 11:14 + * @注释 + */ +@IocBean +@Ok("json:full") +@At("/platform/mall/buy/home") +public class MallBuyHomeController { + + @At("") + @Ok("beetl:/platform/zhgh/mall/buy/home/index.html") + // @SaCheckPermission("mall.category.manage") + public void index() { + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallCartHomeController.java b/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallCartHomeController.java new file mode 100644 index 00000000..c6eb2893 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/controller/buy/MallCartHomeController.java @@ -0,0 +1,25 @@ +package com.budwk.app.zhgh.mall.controller.buy; + +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCartHomeController + * @Date 2025/8/6 16:20 + * @注释 + */ +@IocBean +@Ok("json:full") +@At("/platform/mall/buy/cart") +public class MallCartHomeController { + + @At("") + @Ok("beetl:/platform/zhgh/mall/buy/cart/index.html") + // @SaCheckPermission("mall.category.manage") + public void index() { + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallCategoryManagerController.java b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallCategoryManagerController.java new file mode 100644 index 00000000..d9d73fc8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallCategoryManagerController.java @@ -0,0 +1,150 @@ +package com.budwk.app.zhgh.mall.controller.manage.goods; + +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import com.budwk.app.zhgh.mall.param.goods.MallCategorySearchParams; +import com.budwk.app.zhgh.mall.service.goods.MallCategoryService; +import com.budwk.app.zhgh.mall.models.vo.goods.MallCategoryVO; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.validation.Valid; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategoryManagerController + * @Date 2025/7/16 9:23 + * @注释 商品分类 + */ +@IocBean +@Ok("json:full") +@At("/platform/mall/category/manage") +public class MallCategoryManagerController { + + @Inject + private Dao dao; + @Inject + private MallCategoryService categoryService; + + @At("") + @Ok("beetl:/platform/zhgh/mall/manage/goods/category/index.html") + // @SaCheckPermission("mall.category.manage") + public void index() { + } + + /** + * 查询某分类下的全部子分类列表 + * @param parentId + * @return + */ + @At("/all-children") + // @SaCheckPermission("mall.category.manage") + public Result list(@Valid String parentId){ + List query = dao.query(MallCategory.class, Cnd.where("parentId", "=", parentId).asc("sortOrder")); + return Result.success(query); + } + + /** + * 查询全部分类列表 + * @param categorySearchParams + * @return + */ + @At("/allChildren") + // @SaCheckPermission("mall.category.manage") + public Result list(MallCategorySearchParams categorySearchParams){ + List mallCategoryVOList = categoryService.listCategory(categorySearchParams); + return Result.success(mallCategoryVOList); + } + + @At + @SLog(tag = "商品分类", msg = "添加商品分类") + // @SaCheckPermission("mall.category.manage") + public Result saveCategory(MallCategory category){ + if (category.getParentId() != null && !"0".equals(category.getParentId())) { + int count = dao.count(MallCategory.class, Cnd.where("id", "=", category.getParentId())); + if (count == 0) { + return Result.error("该分类名称已存在"); + } + if (category.getLevel() >= 4) { + return Result.error("最多为三级分类,添加失败"); + } + } + + categoryService.saveCategory(category); + return Result.success(); + } + + + @At + @SLog(tag = "商品分类", msg = "修改商品分类") + // @SaCheckPermission("mall.category.manage") + public Result updateCategory(@Valid MallCategoryVO category) { + int count = dao.count(MallCategory.class, Cnd.where(MallCategory::getId, "=", category.getId())); + if (count == 0) { + return Result.error("该分类不存在"); + } + + //判断父分类与子分类的状态是否一致 + if (category.getParentId() != null && !"0".equals(category.getParentId())) { + MallCategory parentCategory = dao.fetch(MallCategory.class, Cnd.where(MallCategory::getId, "=", category.getParentId())); + if (!parentCategory.getDelFlag().equals(category.getDelFlag())) { + return Result.error("父分类与子分类状态不一致"); + } + } + + dao.update(category); + return Result.success(); + } + + + @At + @SLog(tag = "商品分类", msg = "删除商品分类") + // @SaCheckPermission("mall.category.manage") + public Result delAllByIds(@Valid String id) { + MallCategory category = new MallCategory(); + category.setParentId(id); + + Cnd cnd = Cnd.NEW(); + cnd.andEX("level", "=", category.getLevel()); + cnd.andEX("name", "=", category.getName()); + cnd.andEX("parentId", "=", category.getParentId()); + cnd.andEX("id", "<>", category.getId()); + cnd.andEX("delFlag", "=", false); + cnd.asc("sortOrder"); + List list = dao.query(MallCategory.class, cnd); + + if (Lang.isNotEmpty(list)) { + return Result.error("此类别下存在子类别不能删除"); + } + +// int count = dao.count(MallGoods.class, Cnd.where(MallGoods::getCategoryPath, "=", category.getId()).and(MallGoods::getDelFlag, "=", false)); +// if (count > 0) { +// return Result.error("此类别下存在商品不能删除"); +// } + + dao.clear(MallCategory.class, Cnd.where(MallCategory::getId, "=", id)); + return Result.success(); + } + + + @At + @SLog(tag = "商品分类", msg = "后台 禁用/启用 分类") + // @SaCheckPermission("mall.category.manage") + public Result disable(@Valid String id, Boolean enableOperations){ + int count = dao.count(MallCategory.class, Cnd.where(MallCategory::getId, "=", id)); + if (count == 0) { + return Result.error("商品分类不存在"); + } + + categoryService.updateCategoryStatus(id, enableOperations); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsManageController.java b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsManageController.java new file mode 100644 index 00000000..73ab6e1b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsManageController.java @@ -0,0 +1,31 @@ +package com.budwk.app.zhgh.mall.controller.manage.goods; + +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 + * @Author zzr + * @name:MallGoodsStoreController + * @Date 2025/7/16 17:02 + * @注释 商品仓库管理 + */ +@IocBean +@Ok("json:full") +@At("/platform/mall/goods/manage") +public class MallGoodsManageController { + + @Inject + private Dao dao; + + @At("") + @Ok("beetl:/platform/zhgh/mall/goods/goodsManage.html") + // @SaCheckPermission("mall.goods.manage") + public void index() { + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsStoreController.java b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsStoreController.java new file mode 100644 index 00000000..d57f97e2 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/controller/manage/goods/MallGoodsStoreController.java @@ -0,0 +1,67 @@ +package com.budwk.app.zhgh.mall.controller.manage.goods; + +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.vo.goods.MallGoodsVO; +import com.budwk.app.zhgh.mall.service.goods.MallGoodsService; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +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; + +import javax.validation.Valid; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsStoreController + * @Date 2025/7/16 17:09 + * @注释 商品添加管理 + */ +@IocBean +@Ok("json:full") +@At("/platform/mall/goods/store") +public class MallGoodsStoreController { + + @Inject + private Dao dao; + @Inject + private MallGoodsService goodsService; + + @At("") + // @SaCheckPermission("mall.goods.store") + @Ok("beetl:/platform/zhgh/mall/manage/goods/add/index.html") + public void index() { + } + + + @At + @Aop(TransAop.READ_COMMITTED) + // @SaCheckPermission("mall.goods.store") + @SLog(tag = "添加商品", msg = "商品名称:${args[0].goodsName}") + public Result save(@Valid MallGoodsOperationDTO goodsOperationDTO) { + goodsService.addGoods(goodsOperationDTO); + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + // @SaCheckPermission("mall.goods.store") + @SLog(tag = "修改商品", msg = "商品名称:${args[0].goodsName}") + public Result update(@Valid @Param("goodsOperationDTO") MallGoodsOperationDTO goodsOperationDTO, @Param("goodsId") String goodsId){ + goodsService.editGoods(goodsOperationDTO, goodsId); + return Result.success(); + } + + @At + // @SaCheckPermission("mall.goods.store") + public Result getGoodsStoreById(@Valid String id){ + MallGoodsVO goodsVO = goodsService.getGoodsVO(id); + return Result.success().addData(goodsVO); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/dto/GoodsDTO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/dto/GoodsDTO.java deleted file mode 100644 index 74d6b9e6..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/dto/GoodsDTO.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.dto; - -import com.budwk.app.zhgh.mall.manage.models.goods.entity.GoodsGalleryDO; -import com.budwk.app.zhgh.mall.manage.models.goods.entity.GoodsParamsDO; -import com.budwk.app.zhgh.mall.manage.models.goods.vo.ExchangeVO; -import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import javax.validation.Valid; -import javax.validation.constraints.*; -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 商品vo - * - * @author fk - * @version v2.0 - * @since v7.0.0 - * 2018年3月21日 上午11:25:10 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsDTO implements Serializable { - - @Serial - private static final long serialVersionUID = 3922135264669953741L; - - @ApiModelProperty("商品id") - private Long goodsId; - - @ApiModelProperty("分类id") - private Long categoryId; - - /** - * 用作显示 - */ - @ApiModelProperty("分类名称") - private String categoryName; - - @ApiModelProperty("店铺分类id") - @Min(value = 0, message = "店铺分类值不正确") - private Long shopCatId; - - @ApiModelProperty("品牌id") - private Long brandId; - - @ApiModelProperty("商品名称") - @NotEmpty(message = "商品名称不能为空") - private String goodsName; - - @ApiModelProperty("商品编号") - @Length(max = 30,message = "商品编号太长,不能超过30个字符") - private String sn; - - @ApiModelProperty("商品价格") - @NotNull(message = "商品价格不能为空") - @Min(value = 0, message = "商品价格不能为负数") - @Max(value = 99999999, message = "商品价格不能超过99999999") - private Double price; - - @ApiModelProperty("成本价格") - @NotNull(message = "成本价格不能为空") - @Min(value = 0, message = "成本价格不能为负数") - @Max(value = 99999999, message = "成本价格不能超过99999999") - private Double cost; - - @ApiModelProperty("市场价格") - @NotNull(message = "市场价格不能为空") - @Min(value = 0, message = "市场价格不能为负数") - @Max(value = 99999999, message = "市场价格不能超过99999999") - private Double mktprice; - - @ApiModelProperty("重量") - @NotNull(message = "商品重量不能为空") - @Min(value = 0, message = "重量不能为负数") - @Max(value = 99999999,message = "重量不能超过99999999") - private Double weight; - - @ApiModelProperty("谁承担运费0:买家承担,1:卖家承担") - @NotNull(message = "承担运费不能为空") - @Min(value = 0, message = "承担运费值不正确") - @Max(value = 1, message = "承担运费值不正确") - private Integer goodsTransfeeCharge; - - @ApiModelProperty("详情") - private String intro; - - @ApiModelProperty("是否有规格0没有1有") - private Integer haveSpec; - - @ApiModelProperty("库存") - @Max(value = 99999999, message = "库存不能超过99999999") - private Integer quantity; - - @ApiModelProperty("是否上架,1上架 0下架") - @Min(value = 0, message = "是否上架值不正确") - @Max(value = 1, message = "是否上架值不正确") - private Integer marketEnable; - - @ApiModelProperty("商品参数") - @Valid - private List goodsParamsList; - - @ApiModelProperty("商品相册") - @NotNull(message = "商品相册图片不能为空") - @Size(min = 1,message = "商品相册图片不能为空") - private List goodsGalleryList; - - @ApiModelProperty("积分兑换对象,不是积分兑换商品可以不传") - private ExchangeVO exchange; - - @ApiModelProperty("sku数据变化或者组合变化判断 0:没变化,1:变化") - private Integer hasChanged; - - @ApiModelProperty("seo标题") - private String pageTitle; - - @ApiModelProperty("seo关键字") - private String metaKeywords; - - @ApiModelProperty("seo描述") - private String metaDescription; - - @ApiModelProperty("商品的评论数量") - private Integer commentNum; - - @ApiModelProperty("运费模板id,不需要运费模板时值是0") - private Long templateId; - - @ApiModelProperty("商品是否审核") - private Integer isAuth; - - @ApiModelProperty("可用库存") - private Integer enableQuantity; - - @ApiModelProperty("商品移动端详情数据集合") - private List introList; - - @ApiModelProperty("商品视频") - private String goodsVideo; - - @Override - public String toString() { - return "GoodsDTO{" + - "goodsId=" + goodsId + - ", categoryId=" + categoryId + - ", categoryName='" + categoryName + '\'' + - ", shopCatId=" + shopCatId + - ", brandId=" + brandId + - ", goodsName='" + goodsName + '\'' + - ", sn='" + sn + '\'' + - ", price=" + price + - ", cost=" + cost + - ", mktprice=" + mktprice + - ", weight=" + weight + - ", goodsTransfeeCharge=" + goodsTransfeeCharge + - ", intro='" + intro + '\'' + - ", haveSpec=" + haveSpec + - ", quantity=" + quantity + - ", marketEnable=" + marketEnable + - ", goodsParamsList=" + goodsParamsList + - ", goodsGalleryList=" + goodsGalleryList + - ", exchange=" + exchange + - ", hasChanged=" + hasChanged + - ", pageTitle='" + pageTitle + '\'' + - ", metaKeywords='" + metaKeywords + '\'' + - ", metaDescription='" + metaDescription + '\'' + - ", commentNum=" + commentNum + - ", templateId=" + templateId + - ", isAuth=" + isAuth + - ", enableQuantity=" + enableQuantity + - ", introList=" + introList + - ", goodsVideo='" + goodsVideo + '\'' + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/BrandDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/BrandDO.java deleted file mode 100644 index d4f84cfe..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/BrandDO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 品牌实体 - * - * @author fky - * - */ -@Data -@Table("mall_brand") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class BrandDO implements Serializable { - - @Serial - private static final long serialVersionUID = 9122931201151887L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long brandId; - - /** - * 品牌名称 - */ - @Column - @Comment("品牌名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String name; - - /** - * 品牌图标 - */ - @Column - @Comment("品牌图标") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String logo; - - /** - * 是否删除,0删除1未删除 - */ - @Column - @Comment("是否删除") - @ColDefine(type = ColType.INT) - private Integer disabled; - - @Override - public String toString() { - return "[brandId=" + brandId + ", name=" + name + ", logo=" + logo + ", disabled=" + disabled + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryBrandDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryBrandDO.java deleted file mode 100644 index 29f544b1..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryBrandDO.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 分类品牌关联表实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Comment("分类品牌关联表实体") -@Table("mall_category_brand") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class CategoryBrandDO implements Serializable { - - @Serial - private static final long serialVersionUID = 3315719881926878L; - /** - * 分类id - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long id; - - /** - * 分类id - */ - @Column - @Comment("分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - - /** - * 品牌id - */ - @Column - @Comment("品牌id") - @ColDefine(customType = "bigint") - private Long brandId; - - public CategoryBrandDO(Long categoryId, Long brandId) { - super(); - this.categoryId = categoryId; - this.brandId = brandId; - } - - @Override - public String toString() { - return "CategoryBrandDO [categoryId=" + categoryId + ", brandId=" + brandId + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryDO.java deleted file mode 100644 index f10bbd51..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategoryDO.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.NotEmpty; -import java.io.Serial; -import java.io.Serializable; -import java.util.Objects; - - -/** - * 商品分类实体 - * - * @author fky - * - */ -@Data -@Comment("商品分类实体") -@Table("mall_category") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class CategoryDO implements Serializable { - - @Serial - private static final long serialVersionUID = 1964321416223565L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long categoryId; - - /** - * 分类名称 - */ - @Column - @Comment("分类名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String name; - - /** - * 分类父id - */ - @Column - @Comment("分类父id,顶级0") - @ColDefine(customType = "bigint") - private Long parentId; - - /** - * 分类父子路径 - */ - @Column - @Comment("分类父子路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String categoryPath; - - /** - * 该分类下商品数量 - */ - @Column - @Comment("该分类下商品数量") - @ColDefine(type = ColType.INT) - private Integer goodsCount; - - /** - * 分类排序 - */ - @Column - @Comment("分类排序") - @ColDefine(type = ColType.INT) - private Integer categoryOrder; - - /** - * 分类图标 - */ - @Column - @Comment("分类图标") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String image; - - /** - * 是否显示 YES:是,NO:否 - */ - @Column - @Comment("是否显示 YES:是,NO:否") - @ColDefine(type = ColType.VARCHAR, width = 10) - private String isShow; - - /** - * 分类广告图片 - */ - @Column - @Comment("分类广告图片") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String advImage; - - /** - * 分类广告图片链接 - */ - @Column - @Comment("分类广告图片链接") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String advImageLink; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CategoryDO that = (CategoryDO) o; - return Objects.equals(categoryId, that.categoryId) && - Objects.equals(name, that.name) && - Objects.equals(parentId, that.parentId) && - Objects.equals(categoryPath, that.categoryPath) && - Objects.equals(goodsCount, that.goodsCount) && - Objects.equals(categoryOrder, that.categoryOrder) && - Objects.equals(image, that.image) && - Objects.equals(isShow, that.isShow) && - Objects.equals(advImage, that.advImage) && - Objects.equals(advImageLink, that.advImageLink); - } - - @Override - public int hashCode() { - return Objects.hash(categoryId, name, parentId, categoryPath, goodsCount, categoryOrder, image, isShow, advImage, advImageLink); - } - - @Override - public String toString() { - return "CategoryDO{" + - "categoryId=" + categoryId + - ", name='" + name + '\'' + - ", parentId=" + parentId + - ", categoryPath='" + categoryPath + '\'' + - ", goodsCount=" + goodsCount + - ", categoryOrder=" + categoryOrder + - ", image='" + image + '\'' + - ", isShow='" + isShow + '\'' + - ", advImage='" + advImage + '\'' + - ", advImageLink='" + advImageLink + '\'' + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategorySpecDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategorySpecDO.java deleted file mode 100644 index 0c4c2fd5..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/CategorySpecDO.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 分类规格关联表实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_category_spec") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class CategorySpecDO implements Serializable { - - @Serial - private static final long serialVersionUID = 3127259064985991L; - - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long id; - - /** - * 分类id - */ - @Column - @Comment("分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - - /** - * 规格id - */ - @Column - @Comment("规格id") - @ColDefine(customType = "bigint") - private Long specId; - - public CategorySpecDO(Long categoryId, Long specId) { - super(); - this.categoryId = categoryId; - this.specId = specId; - } - - @Override - public String toString() { - return "CategorySpecDO [categoryId=" + categoryId + ", specId=" + specId + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsDO.java deleted file mode 100644 index b49d41e2..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsDO.java +++ /dev/null @@ -1,307 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import cn.hutool.json.JSONUtil; -import com.budwk.app.zhgh.mall.manage.models.goods.dto.GoodsDTO; -import com.budwk.app.zhgh.mall.manage.models.goods.enums.GoodsType; -import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serializable; -import java.util.List; - -/** - * 草稿商品实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_draft_goods") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class DraftGoodsDO implements Serializable { - - private static final long serialVersionUID = 7646662730625878L; - - /** - * 草稿商品id - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long draftGoodsId; - /** - * 商品编号 - */ - @Column - @Comment("商品编号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private String sn; - /** - * 商品名称 - */ - @Column - @Comment("商品名称") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String goodsName; - /** - * 商品品牌ID - */ - @Column - @Comment("商品品牌ID") - @ColDefine(customType = "bigint") - private Long brandId; - /** - * 商品分类ID - */ - @Column - @Comment("商品分类ID") - @ColDefine(customType = "bigint") - private Long categoryId; - /** - * 商品重量 - */ - @Column - @Comment("商品重量") - @ColDefine(type = ColType.DOUBLE) - private Double weight; - /** - * 商品详情 - */ - @Column - @Comment("商品详情") - @ColDefine(type = ColType.MYSQL_JSON) - private String intro; - /** - * 商品价格 - */ - @Column - @Comment("商品价格") - @ColDefine(type = ColType.DOUBLE) - private Double price; - /** - * 商品成本价 - */ - @Column - @Comment("商品成本价") - @ColDefine(type = ColType.DOUBLE) - private Double cost; - /** - * 商品市场价 - */ - @Column - @Comment("商品市场价") - @ColDefine(type = ColType.DOUBLE) - private Double mktprice; - /** - * 商品类型 - */ - @Column - @Comment("商品类型") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String goodsType; - /** - * 是否开启规格 - */ - @Column - @Comment("是否开启规格") - @ColDefine(type = ColType.INT) - private Integer haveSpec; - /** - * 商品添加时间 - */ - @Column - @Comment("商品添加时间") - @ColDefine(customType = "bigint") - private Long createTime; - /** - * 商品总库存 - */ - @Column - @Comment("商品总库存") - @ColDefine(type = ColType.INT) - private Integer quantity; - /** - * 商品原始图片 - */ - @Column - @Comment("商品原始图片") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String original; - /** - * 商品所属卖家ID - */ - @Column - @Comment("商品所属卖家ID") - @ColDefine(customType = "bigint") - private Long sellerId; - /** - * 商品所属店铺类目ID - */ - @Column - @Comment("商品所属店铺类目ID") - @ColDefine(customType = "bigint") - private Long shopCatId; - /** - * 商品运费模板ID - */ - @Column - @Comment("商品运费模板ID") - @ColDefine(customType = "bigint") - private Long templateId; - /** - * 是否为买家承担运费 - */ - @Column - @Comment("是否为买家承担运费") - @ColDefine(type = ColType.INT) - private Integer goodsTransfeeCharge; - /** - * 商品所属店铺名称 - */ - @Column - @Comment("商品所属店铺名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String sellerName; - /** - * seo 标题 - */ - @Column - @Comment("seo 标题") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String pageTitle; - /** - * seo关键字 - */ - @Column - @Comment("seo关键字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String metaKeywords; - /** - * seo描述 - */ - @Column - @Comment("seo描述") - @ColDefine(type = ColType.MYSQL_JSON) - private String metaDescription; - /** - * 积分商品需要的金额 - */ - @Column - @Comment("积分商品需要的金额") - @ColDefine(type = ColType.DOUBLE) - private Double exchangeMoney; - /** - * 积分商品需要的积分 - */ - @Column - @Comment("积分商品需要的积分") - @ColDefine(type = ColType.INT) - private Integer exchangePoint; - /** - * 积分商品的分类id - */ - @Column - @Comment("积分商品的分类id") - @ColDefine(customType = "bigint") - private Long exchangeCategoryId; - - /** - * 商品移动端详情 - */ - @Column - @Comment("商品移动端详情") - @ColDefine(type = ColType.MYSQL_JSON) - private String mobileIntro; - - /** - * 商品视频 - */ - @Column - @Comment("商品视频") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String goodsVideo; - - private List galleryList; - - public DraftGoodsDO(GoodsDTO goodsVO) { - - this.draftGoodsId = goodsVO.getGoodsId(); - this.categoryId = goodsVO.getCategoryId(); - this.shopCatId = goodsVO.getShopCatId(); - this.brandId = goodsVO.getBrandId(); - this.goodsName = goodsVO.getGoodsName(); - this.sn = goodsVO.getSn(); - this.price = goodsVO.getPrice() == null ? 0 : goodsVO.getPrice(); - this.cost = goodsVO.getCost() == null ? 0 : goodsVO.getCost(); - this.mktprice = goodsVO.getMktprice() == null ? 0 : goodsVO.getMktprice(); - this.weight = goodsVO.getWeight() == null ? 0 : goodsVO.getWeight(); - this.goodsTransfeeCharge = goodsVO.getGoodsTransfeeCharge(); - this.intro = goodsVO.getIntro(); - this.haveSpec = goodsVO.getHaveSpec(); - if (goodsVO.getExchange() != null && goodsVO.getExchange().getEnableExchange() == 1) { - this.goodsType = GoodsType.POINT.name(); - this.exchangeMoney = goodsVO.getExchange().getExchangeMoney(); - this.exchangePoint = goodsVO.getExchange().getExchangePoint(); - this.exchangeCategoryId = goodsVO.getExchange().getCategoryId(); - } else { - this.goodsType = GoodsType.NORMAL.name(); - this.exchangeMoney = 0.00; - this.exchangePoint = 0; - this.exchangeCategoryId = 1L; - } - this.pageTitle = goodsVO.getPageTitle(); - this.metaKeywords = goodsVO.getMetaKeywords(); - this.metaDescription = goodsVO.getMetaDescription(); - this.templateId = goodsVO.getTemplateId(); - - List introList = goodsVO.getIntroList(); - if (introList != null && !introList.isEmpty()) { - this.mobileIntro = JSONUtil.toJsonStr(introList); - } - - this.goodsVideo = goodsVO.getGoodsVideo(); - } - - @Override - public String toString() { - return "DraftGoodsDO{" + - "draftGoodsId=" + draftGoodsId + - ", sn='" + sn + '\'' + - ", goodsName='" + goodsName + '\'' + - ", brandId=" + brandId + - ", categoryId=" + categoryId + - ", weight=" + weight + - ", intro='" + intro + '\'' + - ", price=" + price + - ", cost=" + cost + - ", mktprice=" + mktprice + - ", goodsType='" + goodsType + '\'' + - ", haveSpec=" + haveSpec + - ", createTime=" + createTime + - ", quantity=" + quantity + - ", original='" + original + '\'' + - ", sellerId=" + sellerId + - ", shopCatId=" + shopCatId + - ", templateId=" + templateId + - ", goodsTransfeeCharge=" + goodsTransfeeCharge + - ", sellerName='" + sellerName + '\'' + - ", pageTitle='" + pageTitle + '\'' + - ", metaKeywords='" + metaKeywords + '\'' + - ", metaDescription='" + metaDescription + '\'' + - ", exchangeMoney=" + exchangeMoney + - ", exchangePoint=" + exchangePoint + - ", exchangeCategoryId=" + exchangeCategoryId + - ", mobileIntro='" + mobileIntro + '\'' + - ", goodsVideo='" + goodsVideo + '\'' + - ", galleryList=" + galleryList + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsParamsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsParamsDO.java deleted file mode 100644 index 3995d152..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsParamsDO.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 草稿商品参数表实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_draft_goods_params") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class DraftGoodsParamsDO implements Serializable { - - @Serial - private static final long serialVersionUID = 1137617128769441L; - - /** - * ID - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long id; - /** - * 草稿ID - */ - @Column - @Comment("草稿id") - @ColDefine(customType = "bigint") - private Long draftGoodsId; - /** - * 参数ID - */ - @Column - @Comment("参数id") - @ColDefine(customType = "bigint") - private Long paramId; - /** - * 参数名 - */ - @Column - @Comment("参数名") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String paramName; - /** - * 参数值 - */ - @Column - @Comment("参数值") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String paramValue; - - public DraftGoodsParamsDO(GoodsParamsDO param) { - this.paramId = param.getParamId(); - this.paramName = param.getParamName(); - this.paramValue = param.getParamValue(); - } - - @Override - public String toString() { - return "DraftGoodsParamsDO [id=" + id + ", draftGoodsId=" + draftGoodsId + ", paramId=" + paramId - + ", paramName=" + paramName + ", paramValue=" + paramValue + "]"; - } - - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsSkuDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsSkuDO.java deleted file mode 100644 index fee17a1c..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/DraftGoodsSkuDO.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsSkuVO; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 草稿商品sku实体 - * - * @author fky - * - */ -@Data -@Table("mall_draft_goods_sku") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class DraftGoodsSkuDO implements Serializable { - - @Serial - private static final long serialVersionUID = 5684194304207265L; - - /** - * 主键ID - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long draftSkuId; - /** - * 草稿id - */ - @Column - @Comment("草稿id") - @ColDefine(customType = "bigint") - private Long draftGoodsId; - /** - * 货号 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private String sn; - /** - * 总库存 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private Integer quantity; - /** - * 价格 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private Double price; - /** - * 规格 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private String specs; - /** - * 成本 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private Double cost; - /** - * 重量 - */ - @Column - @Comment("货号") - @ColDefine(type = ColType.VARCHAR, width = 50) - private Double weight; - - public DraftGoodsSkuDO() { - } - - public DraftGoodsSkuDO(GoodsSkuVO skuVO) { - this.setDraftGoodsId(skuVO.getGoodsId()); - this.setSn(skuVO.getSn()); - this.setPrice(skuVO.getPrice()); - this.setCost(skuVO.getCost()); - this.setWeight(skuVO.getWeight()); - this.setQuantity(skuVO.getQuantity()); - this.setSpecs(skuVO.getSpecs()); - } - - @Override - public String toString() { - return "DraftGoodsSkuDO [draftSkuId=" + draftSkuId + ", draftGoodsId=" + draftGoodsId + ", sn=" + sn - + ", quantity=" + quantity + ", price=" + price + ", specs=" + specs + ", cost=" + cost + ", weight=" - + weight + "]"; - } - - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsDO.java deleted file mode 100644 index ab8ed26b..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsDO.java +++ /dev/null @@ -1,481 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import com.budwk.app.zhgh.mall.manage.models.goods.dto.GoodsDTO; -import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsMobileIntroVO; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; -import java.util.List; -import java.util.Objects; - -/** - * 商品实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_goods") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsDO implements Serializable { - - @Serial - private static final long serialVersionUID = 9115135430405642L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long goodsId; - /** - * 商品名称 - */ - @Column - @Comment("商品名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String goodsName; - /** - * 商品编号 - */ - @Column - @Comment("商品编号") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String sn; - /** - * 品牌id - */ - @Column - @Comment("品牌id") - @ColDefine(customType = "bigint") - private Long brandId; - /** - * 分类id - */ - @Column - @Comment("分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - /** - * 商品类型normal普通point积分 - */ - @Column - @Comment("商品类型NORMAL普通POINT积分") - @ColDefine(type = ColType.VARCHAR, width = 120) - private String goodsType; - /** - * 重量 - */ - @Column - @Comment("重量") - @ColDefine(type = ColType.DOUBLE) - private Double weight; - /** - * 上架状态 1上架 0下架 - */ - @Column - @Comment("上架状态 1上架 0下架") - @ColDefine(type = ColType.INT) - private Integer marketEnable; - /** - * 详情 - */ - @Column - @Comment("详情") - @ColDefine(type = ColType.MYSQL_JSON) - private String intro; - /** - * 商品价格 - */ - @Column - @Comment("商品价格") - @ColDefine(type = ColType.DOUBLE) - private Double price; - /** - * 成本价格 - */ - @Column - @Comment("成本价格") - @ColDefine(type = ColType.DOUBLE) - private Double cost; - /** - * 市场价格 - */ - @Column - @Comment("市场价格") - @ColDefine(type = ColType.DOUBLE) - private Double mktprice; - /** - * 是否有规格0没有 1有 - */ - @Column - @Comment("是否有规格0没有 1有") - @ColDefine(type = ColType.INT) - private Integer haveSpec; - /** - * 创建时间 - */ - @Column - @Comment("创建时间") - @ColDefine(customType = "bigint") - private Long createTime; - /** - * 最后修改时间 - */ - @Column - @Comment("最后修改时间") - @ColDefine(customType = "bigint") - private Long lastModify; - /** - * 浏览数量 - */ - @Column - @Comment("浏览数量") - @ColDefine(type = ColType.INT) - private Integer viewCount; - /** - * 购买数量 - */ - @Column - @Comment("购买数量") - @ColDefine(type = ColType.INT) - private Integer buyCount; - /** - * 是否被删除0 删除 1未删除 - */ - @Column - @Comment("是否被删除0 删除 1未删除") - @ColDefine(type = ColType.INT) - private Integer disabled; - /** - * 库存 - */ - @Column - @Comment("库存") - @ColDefine(type = ColType.INT) - private Integer quantity; - /** - * 可用库存 - */ - @Column - @Comment("可用库存") - @ColDefine(type = ColType.INT) - private Integer enableQuantity; - /** - * 如果是积分商品需要使用的积分 - */ - @Column - @Comment("如果是积分商品需要使用的积分") - @ColDefine(type = ColType.INT) - private Integer point; - /** - * seo标题 - */ - @Column - @Comment("seo标题") - @ColDefine(type = ColType.VARCHAR, width = 120) - private String pageTitle; - /** - * seo关键字 - */ - @Column - @Comment("seo关键字") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String metaKeywords; - /** - * seo描述 - */ - @Column - @Comment("seo描述") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String metaDescription; - /** - * 商品好评率 - */ - @Column - @Comment("商品好评率") - @ColDefine(type = ColType.DOUBLE) - private Double grade; - /** - * 缩略图路径 - */ - @Column - @Comment("缩略图路径") - @ColDefine(type = ColType.VARCHAR, width = 120) - private String thumbnail; - /** - * 大图路径 - */ - @Column - @Comment("大图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String big; - /** - * 小图路径 - */ - @Column - @Comment("小图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String small; - /** - * 原图路径 - */ - @Column - @Comment("原图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String original; - /** - * 卖家id - */ - @Column - @Comment("卖家id") - @ColDefine(customType = "bigint") - private Long sellerId; - /** - * 店铺分类id - */ - @Column - @Comment("店铺分类id") - @ColDefine(customType = "bigint") - private Long shopCatId; - /** - * 评论数量 - */ - @Column - @Comment("评论数量") - @ColDefine(type = ColType.INT) - private Integer commentNum; - /** - * 运费模板id - */ - @Column - @Comment("运费模板id") - @ColDefine(customType = "bigint") - private Long templateId; - /** - * 谁承担运费0:买家承担,1:卖家承担 - */ - @Column - @Comment("谁承担运费0:买家承担,1:卖家承担") - @ColDefine(type = ColType.INT) - private Integer goodsTransfeeCharge; - /** - * 卖家名字 - */ - @Column - @Comment("卖家名字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String sellerName; - /** - * 0 需要审核 并且待审核,1 不需要审核 2需要审核 且审核通过 3 需要审核 且审核未通过 - */ - @Column - @Comment("0 待审核,1 审核通过 2 未通过") - @ColDefine(type = ColType.INT) - private Integer isAuth; - /** - * 审核信息 - */ - @Column - @Comment("审核信息") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String authMessage; - - /** - * 下架原因 - */ - @Column - @Comment("下架原因") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String underMessage; - - @Column - @Comment("是否自营0否 1是") - @ColDefine(type = ColType.INT) - private Integer selfOperated; - - /** - * 商品移动端详情 - */ - @Column - @Comment("商品移动端详情") - @ColDefine(type = ColType.MYSQL_JSON) - private String mobileIntro; - - /** - * 商品视频 - */ - @Column - @Comment("商品视频") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String goodsVideo; - - /** - * 搜索优先级 - */ - @Column - @Comment("搜索优先级") - @ColDefine(type = ColType.INT) - private Integer priority; - - @JsonIgnore - protected String scanRounds; - - public GoodsDO(GoodsDTO goodsVO) { - this.goodsId = goodsVO.getGoodsId(); - this.categoryId = goodsVO.getCategoryId(); - this.shopCatId = goodsVO.getShopCatId(); - this.brandId = goodsVO.getBrandId(); - this.goodsName = goodsVO.getGoodsName(); - this.sn = goodsVO.getSn(); - this.price = goodsVO.getPrice(); - this.cost = goodsVO.getCost(); - this.mktprice = goodsVO.getMktprice(); - this.weight = goodsVO.getWeight(); - this.goodsTransfeeCharge = goodsVO.getGoodsTransfeeCharge(); - this.intro = goodsVO.getIntro(); - this.haveSpec = goodsVO.getHaveSpec(); - this.templateId = goodsVO.getTemplateId(); - this.pageTitle = goodsVO.getPageTitle(); - this.metaKeywords = goodsVO.getMetaKeywords(); - this.metaDescription = goodsVO.getMetaDescription(); - this.marketEnable = goodsVO.getMarketEnable() != 1 ? 0 : 1; - - if (StrUtil.isNotBlank(this.pageTitle)) { - this.pageTitle = goodsVO.getGoodsName(); - } - if (StrUtil.isNotBlank(this.metaKeywords)) { - this.metaKeywords = goodsVO.getGoodsName(); - } - if (StrUtil.isNotBlank(this.metaDescription)) { - this.metaDescription = goodsVO.getGoodsName(); - } - - List introList = goodsVO.getIntroList(); - if (introList != null && introList.size() != 0) { - this.mobileIntro = JSONUtil.toJsonStr(introList); - } else { - this.mobileIntro = ""; - } - - this.goodsVideo = goodsVO.getGoodsVideo(); - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - GoodsDO goodsDO = (GoodsDO) o; - return Objects.equals(goodsId, goodsDO.goodsId) && - Objects.equals(goodsName, goodsDO.goodsName) && - Objects.equals(sn, goodsDO.sn) && - Objects.equals(brandId, goodsDO.brandId) && - Objects.equals(categoryId, goodsDO.categoryId) && - Objects.equals(goodsType, goodsDO.goodsType) && - Objects.equals(weight, goodsDO.weight) && - Objects.equals(marketEnable, goodsDO.marketEnable) && - Objects.equals(intro, goodsDO.intro) && - Objects.equals(price, goodsDO.price) && - Objects.equals(cost, goodsDO.cost) && - Objects.equals(mktprice, goodsDO.mktprice) && - Objects.equals(haveSpec, goodsDO.haveSpec) && - Objects.equals(createTime, goodsDO.createTime) && - Objects.equals(lastModify, goodsDO.lastModify) && - Objects.equals(viewCount, goodsDO.viewCount) && - Objects.equals(buyCount, goodsDO.buyCount) && - Objects.equals(disabled, goodsDO.disabled) && - Objects.equals(quantity, goodsDO.quantity) && - Objects.equals(enableQuantity, goodsDO.enableQuantity) && - Objects.equals(point, goodsDO.point) && - Objects.equals(pageTitle, goodsDO.pageTitle) && - Objects.equals(metaKeywords, goodsDO.metaKeywords) && - Objects.equals(metaDescription, goodsDO.metaDescription) && - Objects.equals(grade, goodsDO.grade) && - Objects.equals(thumbnail, goodsDO.thumbnail) && - Objects.equals(big, goodsDO.big) && - Objects.equals(small, goodsDO.small) && - Objects.equals(original, goodsDO.original) && - Objects.equals(sellerId, goodsDO.sellerId) && - Objects.equals(shopCatId, goodsDO.shopCatId) && - Objects.equals(commentNum, goodsDO.commentNum) && - Objects.equals(templateId, goodsDO.templateId) && - Objects.equals(goodsTransfeeCharge, goodsDO.goodsTransfeeCharge) && - Objects.equals(sellerName, goodsDO.sellerName) && - Objects.equals(isAuth, goodsDO.isAuth) && - Objects.equals(authMessage, goodsDO.authMessage) && - Objects.equals(underMessage, goodsDO.underMessage) && - Objects.equals(selfOperated, goodsDO.selfOperated) && - Objects.equals(mobileIntro, goodsDO.mobileIntro) && - Objects.equals(goodsVideo, goodsDO.goodsVideo); - } - - @Override - public int hashCode() { - return Objects.hash(goodsId, goodsName, sn, brandId, categoryId, goodsType, weight, marketEnable, intro, price, cost, mktprice, haveSpec, createTime, lastModify, viewCount, buyCount, disabled, quantity, enableQuantity, point, pageTitle, metaKeywords, metaDescription, grade, thumbnail, big, small, original, sellerId, shopCatId, commentNum, templateId, goodsTransfeeCharge, sellerName, isAuth, authMessage, underMessage, selfOperated, mobileIntro, goodsVideo); - } - - @Override - public String toString() { - return "GoodsDO{" + - "goodsId=" + goodsId + - ", goodsName='" + goodsName + '\'' + - ", sn='" + sn + '\'' + - ", brandId=" + brandId + - ", categoryId=" + categoryId + - ", goodsType='" + goodsType + '\'' + - ", weight=" + weight + - ", marketEnable=" + marketEnable + - ", intro='" + intro + '\'' + - ", price=" + price + - ", cost=" + cost + - ", mktprice=" + mktprice + - ", haveSpec=" + haveSpec + - ", createTime=" + createTime + - ", lastModify=" + lastModify + - ", viewCount=" + viewCount + - ", buyCount=" + buyCount + - ", disabled=" + disabled + - ", quantity=" + quantity + - ", enableQuantity=" + enableQuantity + - ", point=" + point + - ", pageTitle='" + pageTitle + '\'' + - ", metaKeywords='" + metaKeywords + '\'' + - ", metaDescription='" + metaDescription + '\'' + - ", grade=" + grade + - ", thumbnail='" + thumbnail + '\'' + - ", big='" + big + '\'' + - ", small='" + small + '\'' + - ", original='" + original + '\'' + - ", sellerId=" + sellerId + - ", shopCatId=" + shopCatId + - ", commentNum=" + commentNum + - ", templateId=" + templateId + - ", goodsTransfeeCharge=" + goodsTransfeeCharge + - ", sellerName='" + sellerName + '\'' + - ", isAuth=" + isAuth + - ", authMessage='" + authMessage + '\'' + - ", underMessage='" + underMessage + '\'' + - ", selfOperated=" + selfOperated + - ", mobileIntro='" + mobileIntro + '\'' + - ", goodsVideo='" + goodsVideo + '\'' + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsGalleryDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsGalleryDO.java deleted file mode 100644 index 90ca2bc1..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsGalleryDO.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serializable; - - -/** - * 商品相册实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_goods_gallery") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsGalleryDO implements Serializable { - - private static final long serialVersionUID = 8150217189133447L; - - /** - * 主键 - */ - @Id - @Column - @Comment("图片的主键id") - @ColDefine(customType = "bigint") - private Long imgId; - /** - * 商品主键 - */ - @Column - @Comment("商品主键") - @ColDefine(customType = "bigint") - private Long goodsId; - /** - * 缩略图路径 - */ - @Column - @Comment("缩略图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String thumbnail; - /** - * 小图路径 - */ - @Column - @Comment("小图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String small; - /** - * 大图路径 - */ - @Column - @Comment("大图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String big; - /** - * 原图路径 - */ - @Column - @Comment("原图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String original; - /** - * 极小图路径 - */ - @Column - @Comment("极小图路径") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String tiny; - /** - * 是否是默认图片1 0没有默认 - */ - @Column - @Comment("是否是默认图片1 0没有默认") - @ColDefine(type = ColType.INT) - private Integer isdefault; - /** - * 排序 - */ - @Column - @Comment("排序") - @ColDefine(type = ColType.INT) - private Integer sort; - - @Override - public String toString() { - return "GoodsGalleryDO [imgId=" + imgId + ", goodsId=" + goodsId + ", thumbnail=" + thumbnail + ", small=" - + small + ", big=" + big + ", original=" + original + ", tiny=" + tiny + ", isdefault=" + isdefault - + ", sort=" + sort + "]"; - } - - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsParamsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsParamsDO.java deleted file mode 100644 index 26edef80..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsParamsDO.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import cn.hutool.core.util.StrUtil; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serializable; - - -/** - * 商品关联参数值实体 - * - * @author fky - * - */ -@Data -@Table("mall_goods_params") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsParamsDO implements Serializable { - - private static final long serialVersionUID = 4134870721776090L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long id; - /** - * 商品id - */ - @Column - @Comment("商品id") - @ColDefine(customType = "bigint") - private Long goodsId; - /** - * 参数id - */ - @Column - @Comment("参数id") - @ColDefine(customType = "bigint") - private Long paramId; - /** - * 参数名字 - */ - @Column - @Comment("参数名字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String paramName; - /** - * 参数值 - */ - @Column - @Comment("参数值") - @ColDefine(type = ColType.VARCHAR, width = 120) - @Length(max = 100, message = "参数值字符不能大于120") - private String paramValue; - - - public String getParamValue() { - if (StrUtil.isNotBlank(paramValue)) { - return ""; - } - return paramValue; - } - - @Override - public String toString() { - return "GoodsParamsDO [id=" + id + ", goodsId=" + goodsId + ", paramId=" + paramId + ", paramName=" + paramName - + ", paramValue=" + paramValue + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsSkuDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsSkuDO.java deleted file mode 100644 index 5440724d..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/GoodsSkuDO.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import cn.hutool.core.builder.EqualsBuilder; -import cn.hutool.core.builder.HashCodeBuilder; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.hibernate.validator.constraints.Length; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.Max; -import java.io.Serial; -import java.io.Serializable; - - -/** - * 商品sku实体 - * - * @author fky - * - */ -@Data -@Table("mall_goods_sku") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsSkuDO implements Serializable { - - @Serial - private static final long serialVersionUID = 5102510694003249L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long skuId; - /** - * 商品id - */ - @Column - @Comment("商品id") - @ColDefine(customType = "bigint") - private Long goodsId; - /** - * 商品名称 - */ - @Column - @Comment("商品名称") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String goodsName; - /** - * 商品编号 - */ - @Column - @Comment("商品编号") - @ColDefine(type = ColType.VARCHAR, width = 30) - @Length(max = 30,message = "商品规格编号太长,不能超过30个字符") - private String sn; - - /** - * 库存 - */ - @Column - @Comment("库存") - @ColDefine(type = ColType.INT) - @Max(value = 99999999, message = "库存不能超过99999999") - private Integer quantity; - /** - * 可用库存 - */ - @Column - @Comment("可用库存") - @ColDefine(type = ColType.INT) - private Integer enableQuantity; - /** - * 商品价格 - */ - @Column - @Comment("商品价格") - @ColDefine(type = ColType.DOUBLE) - @Max(value = 99999999, message = "价格不能超过99999999") - private Double price; - /** - * 规格信息json - */ - @Column - @Comment("规格信息json") - @ColDefine(type = ColType.MYSQL_JSON) - private String specs; - /** - * 成本价格 - */ - @Column - @Comment("成本价格") - @ColDefine(type = ColType.DOUBLE) - @Max(value = 99999999, message = "成本价格不能超过99999999") - private Double cost; - /** - * 重量 - */ - @Column - @Comment("重量") - @ColDefine(type = ColType.DOUBLE) - @Max(value = 99999999, message = "重量不能超过99999999") - private Double weight; - /** - * 卖家id - */ - @Column - @Comment("卖家id") - @ColDefine(customType = "bigint") - private Long sellerId; - /** - * 卖家名称 - */ - @Column - @Comment("卖家名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String sellerName; - /** - * 分类id - */ - @Column - @Comment("分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - /** - * 缩略图 - */ - @Column - @Comment("缩略图") - @ColDefine(type = ColType.VARCHAR, width = 500) - private String thumbnail; - - @Column - @Comment("hash_code") - @ColDefine(type = ColType.INT) - private Integer hashCode; - - /** - * 运费模板ID(非数据库字段) - */ - private Long templateId; - - @JsonIgnore - protected String scanRounds; - - @Override - public String toString() { - return "GoodsSkuDO{" + - "skuId=" + skuId + - ", goodsId=" + goodsId + - ", goodsName='" + goodsName + '\'' + - ", sn='" + sn + '\'' + - ", quantity=" + quantity + - ", enableQuantity=" + enableQuantity + - ", price=" + price + - ", specs='" + specs + '\'' + - ", cost=" + cost + - ", weight=" + weight + - ", sellerId=" + sellerId + - ", sellerName='" + sellerName + '\'' + - ", categoryId=" + categoryId + - ", thumbnail='" + thumbnail + '\'' + - ", hashCode=" + hashCode + - ", templateId=" + templateId + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - GoodsSkuDO that = (GoodsSkuDO) o; - - return new EqualsBuilder() - .append(getSkuId(), that.getSkuId()) - .append(getGoodsId(), that.getGoodsId()) - .append(getGoodsName(), that.getGoodsName()) - .append(getSn(), that.getSn()) - .append(getQuantity(), that.getQuantity()) - .append(getEnableQuantity(), that.getEnableQuantity()) - .append(getPrice(), that.getPrice()) - .append(getSpecs(), that.getSpecs()) - .append(getCost(), that.getCost()) - .append(getWeight(), that.getWeight()) - .append(getSellerId(), that.getSellerId()) - .append(getSellerName(), that.getSellerName()) - .append(getCategoryId(), that.getCategoryId()) - .append(getThumbnail(), that.getThumbnail()) - .append(hashCode, that.hashCode) - .append(getTemplateId(), that.getTemplateId()) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(17, 37) - .append(getSkuId()) - .append(getGoodsId()) - .append(getGoodsName()) - .append(getSn()) - .append(getQuantity()) - .append(getEnableQuantity()) - .append(getPrice()) - .append(getSpecs()) - .append(getCost()) - .append(getWeight()) - .append(getSellerId()) - .append(getSellerName()) - .append(getCategoryId()) - .append(getThumbnail()) - .append(hashCode) - .append(getTemplateId()) - .toHashCode(); - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParameterGroupDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParameterGroupDO.java deleted file mode 100644 index b27ac8f1..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParameterGroupDO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.hibernate.validator.constraints.Length; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.NotEmpty; -import java.io.Serializable; - - -/** - * 参数组实体 - * - * @author fky - * - */ -@Data -@Table("mall_parameter_group") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class ParameterGroupDO implements Serializable { - - private static final long serialVersionUID = 2394621849767871L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long groupId; - /** - * 参数组名称 - */ - @Column - @Comment("参数组名称") - @ColDefine(type = ColType.VARCHAR, width = 50) - @NotEmpty(message = "参数组名称不能为空") - @Length(max = 50, message = "参数组名称不能超过50字") - private String groupName; - /** - * 关联分类id - */ - @Column - @Comment("关联分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - /** - * 排序 - */ - @Column - @Comment("id") - @ColDefine(type = ColType.INT) - private Integer sort; - - @Override - public String toString() { - return "ParameterGroupDO [groupId=" + groupId + ", groupName=" + groupName + ", categoryId=" + categoryId - + ", sort=" + sort + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParametersDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParametersDO.java deleted file mode 100644 index 5f99103b..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/ParametersDO.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import org.hibernate.validator.constraints.Length; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.io.Serializable; - - -/** - * 参数实体 - * - * @author fky - * - */ -@Data -@Table("mall_parameters") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class ParametersDO implements Serializable { - - private static final long serialVersionUID = 320610453789555L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long paramId; - /** - * 参数名称 - */ - @Column - @Comment("参数名称") - @ColDefine(type = ColType.VARCHAR, width = 50) - @NotEmpty(message = "参数名称必填") - @Length(max = 50, message = "参数名称不能超过50字") - private String paramName; - /** - * 参数类型1 输入项 2 选择项 - */ - @Column - @Comment("参数类型1 输入项 2 选择项") - @ColDefine(type = ColType.INT) - @NotNull(message = "参数类型必选") - @Min(value = 1,message = "参数类型传值不正确") - @Max(value = 2,message = "参数类型传值不正确") - private Integer paramType; - /** - * 选择值,当参数类型是选择项2时,必填,逗号分隔 - */ - @Column - @Comment("选择值") - @ColDefine(type = ColType.VARCHAR, width = 50) - private String options; - /** - * 是否可索引,0 不显示 1 显示 - */ - @Column - @Comment("是否可索引必选") - @ColDefine(type = ColType.INT) - @NotNull(message = "是否可索引必选") - @Min(value = 0,message = "是否可索引传值不正确") - @Max(value = 1,message = "是否可索引传值不正确") - private Integer isIndex; - /** - * 是否必填是 1 否 0 - */ - @Column - @Comment("是否必填") - @ColDefine(type = ColType.INT) - @NotNull(message = "是否必填必选") - @Min(value = 0,message = "是否必填传值不正确") - @Max(value = 1,message = "是否必填传值不正确") - private Integer required; - /** - * 参数分组id - */ - @Column - @Comment("参数分组id") - @ColDefine(customType = "bigint") - @NotNull(message = "所属参数组不能为空") - private Long groupId; - /** - * 分类id - */ - @Column - @Comment("分类id") - @ColDefine(customType = "bigint") - private Long categoryId; - /** - * 排序 - */ - @Column - @Comment("参数组名称") - @ColDefine(type = ColType.INT) - private Integer sort; - - @Override - public String toString() { - return "ParametersDO [paramId=" + paramId + ", paramName=" + paramName + ", paramType=" + paramType - + ", options=" + options + ", isIndex=" + isIndex + ", required=" + required + ", groupId=" + groupId - + ", categoryId=" + categoryId + ", sort=" + sort + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/QuantityLog.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/QuantityLog.java deleted file mode 100644 index 8c69d992..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/QuantityLog.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import cn.hutool.core.builder.EqualsBuilder; -import cn.hutool.core.builder.HashCodeBuilder; -import com.budwk.app.zhgh.mall.manage.models.goods.vo.GoodsQuantityVO; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import java.io.Serial; -import java.io.Serializable; - - -/** - * 库存日志表实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@Table("mall_quantity_log") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class QuantityLog implements Serializable { - - @Serial - private static final long serialVersionUID = 6427256120262393L; - - /** - * 日志id - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long logId; - /** - * 订单编号 - */ - @Column - @Comment("订单编号") - @ColDefine(type = ColType.VARCHAR, width = 100) - @NotEmpty(message = "订单编号不能为空") - private String orderSn; - /** - * 商品id - */ - @Column - @Comment("商品id") - @ColDefine(customType = "bigint") - @NotEmpty(message = "商品id不能为空") - private Long goodsId; - /** - * sku id - */ - @Column - @Comment("sku id") - @ColDefine(customType = "bigint") - private Long skuId; - /** - * 库存数 - */ - @Column - @Comment("库存数") - @ColDefine(type = ColType.INT) - @NotEmpty(message = "库存数不能为空") - private Integer quantity; - /** - * 可用库存 - */ - @Column - @Comment("可用库存") - @ColDefine(type = ColType.INT) - @Min(message = "必须为数字", value = 0) - private Integer enableQuantity; - /** - * 操作时间 - */ - @Column - @Comment("操作时间") - @ColDefine(customType = "bigint") - private Long opTime; - - @Column - @Comment("日志类型") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String logType; - - @Column - @Comment("原因") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String reason; - - public QuantityLog(GoodsQuantityVO goodsQuantity) { - this.skuId = goodsQuantity.getSkuId(); - this.quantity = goodsQuantity.getQuantity(); - - this.goodsId = goodsQuantity.getGoodsId(); - } - - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - QuantityLog that = (QuantityLog) o; - - return new EqualsBuilder() - .append(orderSn, that.orderSn) - .append(goodsId, that.goodsId) - .append(skuId, that.skuId) - .append(quantity, that.quantity) - .append(enableQuantity, that.enableQuantity) - .append(logType, that.logType) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(17, 37) - .append(orderSn) - .append(goodsId) - .append(skuId) - .append(quantity) - .append(enableQuantity) - .append(logType) - .toHashCode(); - } - - @Override - public String toString() { - return "QuantityLog{" + - "logId=" + logId + - ", orderSn='" + orderSn + '\'' + - ", goodsId=" + goodsId + - ", skuId=" + skuId + - ", quantity=" + quantity + - ", enableQuantity=" + enableQuantity + - ", opTime=" + opTime + - ", logType='" + logType + '\'' + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecValuesDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecValuesDO.java deleted file mode 100644 index 10f92e0f..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecValuesDO.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serializable; - - -/** - * 规格值实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_spec_values") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class SpecValuesDO implements Serializable { - - private static final long serialVersionUID = 5356147177823233L; - - /** - * 主键 - */ - @Id - @Column - @Comment("规格值id") - @ColDefine(customType = "bigint") - private Long specValueId; - /** - * 规格项id - */ - @Column - @Comment("规格项id") - @ColDefine(customType = "bigint") - private Long specId; - /** - * 规格值名字 - */ - @Column - @Comment("规格值名字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String specValue; - /** - * 所属卖家 - */ - @Column - @Comment("所属卖家") - @ColDefine(customType = "bigint") - private Long sellerId; - - /** - * 规格名称 - */ - @Column - @Comment("规格名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String specName; - - public SpecValuesDO(Long specId, String specValue, Long sellerId) { - super(); - this.specId = specId; - this.specValue = specValue; - this.sellerId = sellerId; - } - - @Override - public String toString() { - return "SpecValuesDO [specValueId=" + specValueId + ", specId=" + specId + ", specValue=" + specValue - + ", sellerId=" + sellerId + "]"; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecificationDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecificationDO.java deleted file mode 100644 index c6ee3d27..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/SpecificationDO.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; -import org.nutz.dao.entity.annotation.*; - -import javax.validation.constraints.NotEmpty; -import java.io.Serializable; - - -/** - * 规格项实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_specification") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class SpecificationDO implements Serializable { - - private static final long serialVersionUID = 5111769180376075L; - - /** - * 主键 - */ - @Id - @Column - @Comment("id") - @ColDefine(customType = "bigint") - private Long specId; - /** - * 规格项名称 - */ - @Column - @Comment("规格项名称") - @ColDefine(type = ColType.VARCHAR, width = 100) - @NotEmpty(message = "规格项名称不能为空") - private String specName; - /** - * 是否被删除0 删除 1 没有删除 - */ - @Column - @Comment("参数名称") - @ColDefine(type = ColType.INT) - private Integer disabled; - /** - * 规格描述 - */ - @Column - @Comment("规格描述") - @ColDefine(type = ColType.VARCHAR, width = 50) - @Length(max = 50, message = "规格备注为0到50个字符之间") - private String specMemo; - /** - * 所属卖家 0属于平台 - */ - @Column - @Comment("所属卖家 0属于平台") - @ColDefine(customType = "bigint") - private Long sellerId; - - public SpecificationDO(String specName, Integer disabled, String specMemo, Long sellerId) { - super(); - this.specName = specName; - this.disabled = disabled; - this.specMemo = specMemo; - this.sellerId = sellerId; - } - - @Override - public String toString() { - return "SpecificationDO [specId=" + specId + ", specName=" + specName + ", disabled=" + disabled + ", specMemo=" - + specMemo + ", sellerId=" + sellerId + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagGoodsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagGoodsDO.java deleted file mode 100644 index 723514c8..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagGoodsDO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 标签商品关联实体 - * - * @author fky - * - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Table("mall_tag_goods") -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class TagGoodsDO implements Serializable { - - @Serial - private static final long serialVersionUID = 9467335201085494L; - - @Id - @Column - @Comment("规格值id") - @ColDefine(customType = "bigint") - private Long id; - - /** - * 标签id - */ - @Column - @Comment("标签id") - @ColDefine(customType = "bigint") - private Long tagId; - /** - * 商品id - */ - @Column - @Comment("商品id") - @ColDefine(customType = "bigint") - private Long goodsId; - - public TagGoodsDO(Long tagId, Long goodsId) { - super(); - this.tagId = tagId; - this.goodsId = goodsId; - } - - @Override - public String toString() { - return "TagGoodsDO{" + - "tagId=" + tagId + - ", goodsId=" + goodsId + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagsDO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagsDO.java deleted file mode 100644 index a7a82042..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/entity/TagsDO.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.entity; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.nutz.dao.entity.annotation.*; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 商品标签实体 - * - * @author fky - * - */ -@Data -@Table("mall_tags") -@NoArgsConstructor -@AllArgsConstructor -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class TagsDO implements Serializable { - - @Serial - private static final long serialVersionUID = 1899720595535600L; - - /** - * 主键 - */ - @Id - @Column - @Comment("规格值id") - @ColDefine(customType = "bigint") - private Long tagId; - /** - * 标签名字 - */ - @Column - @Comment("标签名字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String tagName; - /** - * 所属卖家 - */ - @Column - @Comment("所属卖家") - @ColDefine(customType = "bigint") - private Long sellerId; - /** - * 关键字 - */ - @Column - @Comment("关键字") - @ColDefine(type = ColType.VARCHAR, width = 100) - private String mark; - - public TagsDO(String tagName, Long sellerId, String mark) { - super(); - this.tagName = tagName; - this.sellerId = sellerId; - this.mark = mark; - } - - @Override - public String toString() { - return "TagsDO{" + - "tagId=" + tagId + - ", tagName='" + tagName + '\'' + - ", sellerId=" + sellerId + - ", mark='" + mark + '\'' + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsOperate.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsOperate.java deleted file mode 100644 index a2c44e32..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsOperate.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 商品操作枚举 - * @author fky - */ -public enum GoodsOperate { - /** - * 下架 - */ - UNDER, - /** - * 还原 - */ - REVRET, - /** - * 放入回收站 - */ - RECYCLE, - /** - * 删除 - */ - DELETE - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsType.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsType.java deleted file mode 100644 index 702e9695..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/GoodsType.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 商品类型枚举 - * @author fky - */ -public enum GoodsType { - /** - * 正常商品 - */ - NORMAL("正常商品"), - /** - * 积分商品 - */ - POINT("积分商品"); - - private String description; - - GoodsType(String description) { - this.description = description; - - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/Permission.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/Permission.java deleted file mode 100644 index b686eae7..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/Permission.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - - -/** - * 权限枚举 - * @author fky - */ -public enum Permission { - - /** - * 卖家权限 - */ - SELLER, - - /** - * 买家权限 - */ - BUYER, - - /** - * 管理员权限 - */ - ADMIN, - - /** - * 不验证权限 - */ - CLIENT - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityLogType.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityLogType.java deleted file mode 100644 index 1b70a59a..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityLogType.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 库存日志类型 - * @author fky - */ -public enum QuantityLogType { - - /** - * 订单创建扣减库存 - */ - ORDER_CREATE, - - /** - * 订单取消 - */ - ORDER_CANCEL, - - /** - * 库存回滚 - */ - ROLLBACK, - - /** - * 发货 - */ - SHIP, - - /** - * 退货 - */ - RETURN -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityType.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityType.java deleted file mode 100644 index b258d9c8..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/QuantityType.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 库存数类型 - * @author fky - */ -public enum QuantityType { - - /** - * 实际的库存,包含了待发货的 - */ - actual, - - /** - * 可以售的库存,不包含待发货的 - */ - enable - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/StockType.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/StockType.java deleted file mode 100644 index 171d9759..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/StockType.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 缓存中库存类型 - * 用于更新缓存等操作使用 - * @author fky - */ -public enum StockType { - - - /** - * sku实际的库存,包含了待发货的 - */ - SKU_STOCK_ACTUAL, - - /** - * sku可以售的库存,不包含待发货的 - */ - SKU_STOCK_ENABLE, - - /** - * goods实际的库存,包含了待发货的 - */ - GOODS_STOCK_ACTUAL, - - /** - * goods可以售的库存,不包含待发货的 - */ - GOODS_STOCK_ENABLE, - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/TagType.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/TagType.java deleted file mode 100644 index 7c08b02a..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/enums/TagType.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.enums; - -/** - * 标签类型 - * @author fky - */ -public enum TagType { - - /** - * 热卖排行 - */ - HOT("hot","热卖排行"), - /** - * 新品推荐 - */ - NEW("new","新品推荐"), - /** - * 推荐商品 - */ - RECOMMEND("recommend","推荐商品"); - - private String mark; - private String tagName; - - TagType(String mark,String tagName) { - - this.mark = mark; - this.tagName = tagName; - } - - public String mark(){ - return this.mark; - } - - public String tagName(){ - return this.tagName; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/ExchangeVO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/ExchangeVO.java deleted file mode 100644 index 7e3626fa..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/ExchangeVO.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.vo; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 商品的积分兑换信息 - * @author fky - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class ExchangeVO implements Serializable{ - - @Serial - private static final long serialVersionUID = 4702156500500693965L; - - /** 是否允许兑换 */ - @ApiModelProperty("是否允许积分兑换") - private Integer enableExchange; - - /** 兑换所需金额 */ - @ApiModelProperty("兑换所需金额") - private Double exchangeMoney; - - /** 商品所属积分分类 */ - @ApiModelProperty("积分兑换所属分类") - private Long categoryId; - - /** 兑换所需积分 */ - @ApiModelProperty("积分兑换使用的积分") - private Integer exchangePoint; - - @Override - public String toString() { - return "ExchangeVO [enableExchange=" + enableExchange + ", exchangeMoney=" + exchangeMoney + ", categoryId=" - + categoryId + ", exchangePoint=" + exchangePoint + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsMobileIntroVO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsMobileIntroVO.java deleted file mode 100644 index f5869460..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsMobileIntroVO.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.vo; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Objects; - -/** - * 商品移动端详情VO - * @author fky - */ -@Data -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsMobileIntroVO implements Serializable { - - @Serial - private static final long serialVersionUID = 7556885109369605084L; - - @ApiModelProperty("类型 text:文字,image:图片") - private String type; - - @ApiModelProperty("内容") - private String content; - - @ApiModelProperty("是否选中") - private Boolean checked; - - @ApiModelProperty("是否选中编辑") - private Boolean editChecked; - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - GoodsMobileIntroVO that = (GoodsMobileIntroVO) o; - return Objects.equals(type, that.type) && - Objects.equals(content, that.content) && - Objects.equals(checked, that.checked) && - Objects.equals(editChecked, that.editChecked); - } - - @Override - public int hashCode() { - return Objects.hash(type, content, checked, editChecked); - } - - @Override - public String toString() { - return "GoodsMobileIntroVO{" + - "type='" + type + '\'' + - ", content='" + content + '\'' + - ", checked=" + checked + - ", editChecked=" + editChecked + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsQuantityVO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsQuantityVO.java deleted file mode 100644 index 2fab8a39..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsQuantityVO.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.vo; - - -import cn.hutool.core.builder.EqualsBuilder; -import cn.hutool.core.builder.HashCodeBuilder; -import com.budwk.app.zhgh.mall.manage.models.goods.enums.QuantityType; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * 商品库存vo - * @author fky - */ -@Data -@NoArgsConstructor -public class GoodsQuantityVO implements Cloneable{ - - private Long goodsId; - - private Long skuId; - - private Integer quantity; - - private QuantityType quantityType; - - - public GoodsQuantityVO(Long goodsId, Long skuId, Integer quantity ) { - super(); - this.goodsId = goodsId; - this.skuId = skuId; - this.quantity = quantity; - - } - - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - - public Integer getQuantity() { - if ( quantity==null){ - return 0; - } - - return quantity; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - GoodsQuantityVO that = (GoodsQuantityVO) o; - - return new EqualsBuilder() - .append(goodsId, that.goodsId) - .append(skuId, that.skuId) - .append(quantity, that.quantity) - .append(quantityType, that.quantityType) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(17, 37) - .append(goodsId) - .append(skuId) - .append(quantity) - .append(quantityType) - .toHashCode(); - } - - @Override - public String toString() { - return "GoodsQuantityVO{" + - "goodsId=" + goodsId + - ", skuId=" + skuId + - ", quantity=" + quantity + - ", quantityType=" + quantityType + - '}'; - } - - -} - diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsSkuVO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsSkuVO.java deleted file mode 100644 index e382c316..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/GoodsSkuVO.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.vo; - -import cn.hutool.json.JSONUtil; -import com.budwk.app.zhgh.mall.manage.models.goods.entity.DraftGoodsSkuDO; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.Max; -import java.io.Serial; -import java.io.Serializable; -import java.util.List; - -/** - * 商品sku - * @author fky - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class GoodsSkuVO implements Serializable { - - @Serial - private static final long serialVersionUID = -666090547834195127L; - - /** - * 主键 - */ - @ApiModelProperty("sku表主键") - private Long skuId; - /** - * 商品id - */ - @ApiModelProperty("商品id") - private Long goodsId; - /** - * 商品名称 - */ - @ApiModelProperty("商品名称") - private String goodsName; - /** - * 商品编号 - */ - @ApiModelProperty("商品编号") - @Length(max = 30,message = "商品规格编号太长,不能超过30个字符") - private String sn; - - /** - * 库存 - */ - @ApiModelProperty("库存") - @Max(value = 99999999, message = "库存不能超过99999999") - - private Integer quantity; - /** - * 可用库存 - */ - @ApiModelProperty("可用库存") - - private Integer enableQuantity; - /** - * 商品价格 - */ - @ApiModelProperty("商品价格") - @Max(value = 99999999, message = "价格不能超过99999999") - private Double price; - /** - * 规格信息json - */ - @ApiModelProperty("规格信息json") - private String specs; - /** - * 成本价格 - */ - @ApiModelProperty("成本价格") - @Max(value = 99999999, message = "成本价格不能超过99999999") - private Double cost; - /** - * 重量 - */ - @ApiModelProperty("重量") - @Max(value = 99999999, message = "重量不能超过99999999") - private Double weight; - /** - * 卖家id - */ - @ApiModelProperty("卖家id") - private Long sellerId; - /** - * 卖家名称 - */ - @ApiModelProperty("卖家名称") - private String sellerName; - /** - * 分类id - */ - @ApiModelProperty("分类id") - private Long categoryId; - /** - * 缩略图 - */ - @ApiModelProperty("缩略图") - private String thumbnail; - - - @ApiModelProperty("hash_code") - private Integer hashCode; - - /** - * 运费模板ID(非数据库字段) - */ - @ApiModelProperty("运费模板ID") - private Long templateId; - - @JsonIgnore - protected String scanRounds; - - @ApiModelProperty("规格列表") - private List specList; - - @ApiModelProperty("谁承担运费0:买家承担,1:卖家承担") - private Integer goodsTransfeeCharge; - - @ApiModelProperty("是否被删除 0 删除 1 未删除") - private Integer disabled; - - @ApiModelProperty("上架状态 0下架 1上架") - private Integer marketEnable; - - @ApiModelProperty("商品类型NORMAL普通POINT积分") - private String goodsType; - - @ApiModelProperty("最后修改时间") - private Long lastModify; - - @ApiModelProperty("运费脚本") - private List scripts; - - public List getSpecList() { - if (this.getSpecs() != null) { - return JSONUtil.toList(this.getSpecs(), SpecValueVO.class); - } - - return specList; - } - - public GoodsSkuVO(DraftGoodsSkuDO draftSku) { - this.setCost(draftSku.getCost()); - this.setPrice(draftSku.getPrice()); - this.setQuantity(draftSku.getQuantity()); - this.setSkuId(draftSku.getDraftSkuId()); - this.setSn(draftSku.getSn()); - this.setWeight(draftSku.getWeight()); - this.setSpecList(JSONUtil.toList(draftSku.getSpecs(), SpecValueVO.class)); - } - - - @Override - public String toString() { - return "GoodsSkuVO{" + - "specList=" + specList + - ", goodsTransfeeCharge=" + goodsTransfeeCharge + - ", disabled=" + disabled + - ", marketEnable=" + marketEnable + - ", goodsType='" + goodsType + '\'' + - ", lastModify=" + lastModify + - ", scripts=" + scripts + - '}'; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/SpecValueVO.java b/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/SpecValueVO.java deleted file mode 100644 index 06a82907..00000000 --- a/src/main/java/com/budwk/app/zhgh/mall/manage/models/goods/vo/SpecValueVO.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.budwk.app.zhgh.mall.manage.models.goods.vo; - -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * 规格值实体 - * @author fky - */ -@Data -@NoArgsConstructor -@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class) -public class SpecValueVO implements Serializable { - - /** - * 序列号 - */ - private static final long serialVersionUID = 1426807099688672502L; - - /** - * 主键 - */ - @ApiModelProperty("规格值id") - private Long specValueId; - /** - * 规格项id - */ - @ApiModelProperty("规格项id") - private Long specId; - /** - * 规格值名字 - */ - @ApiModelProperty("规格值名字") - private String specValue; - /** - * 所属卖家 - */ - @ApiModelProperty("所属卖家") - private Long sellerId; - - /** - * 规格名称 - */ - @ApiModelProperty("规格名称") - private String specName; - - /** - * 商品sku——id - */ - @ApiModelProperty("sku_id") - private Long skuId; - /** - * 商品大图 - */ - @ApiModelProperty("商品大图") - private String big; - /** - * 商品小图 - */ - @ApiModelProperty("商品小图") - private String small; - /** - * 商品缩略图 - */ - @ApiModelProperty("商品缩略图") - private String thumbnail; - /** - * 商品极小图 - */ - @ApiModelProperty("商品极小图") - private String tiny; - - /** - * 规格类型,1图片 0 非图片 - */ - @ApiModelProperty("该规格是否有图片,1 有 0 没有") - private Integer specType; - /** - * 规格图片 - */ - @ApiModelProperty("规格的图片") - private String specImage; - - @Override - public String toString() { - return "SpecValueVO [skuId=" + skuId + ", big=" + big + ", small=" + small + ", thumbnail=" + thumbnail - + ", tiny=" + tiny + ", specType=" + specType + ", specImage=" + specImage + "]"; - } - -} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsImportDTO.java b/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsImportDTO.java new file mode 100644 index 00000000..dac33b87 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsImportDTO.java @@ -0,0 +1,71 @@ +package com.budwk.app.zhgh.mall.models.dto.goods; + +import cn.hutool.json.JSONObject; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsImportDTO + * @Date 2025/7/16 17:16 + * @注释 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MallGoodsImportDTO { + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品卖点") + private String sellingPoint; + + @ApiModelProperty(value = "商品分类") + private MallCategory category; + + @ApiModelProperty(value = "运费模板") + private String template; + + @ApiModelProperty(value = "计量单位") + private String goodsUnit; + + @ApiModelProperty(value = "发布状态") + private Boolean release; + + @ApiModelProperty(value = "商品图片") + private List images; + private List goodsGalleryFiles; + + @ApiModelProperty(value = "成本价") + private Double cost; + + @ApiModelProperty(value = "销售价") + private Double price; + + @ApiModelProperty(value = "库存") + private Integer quantity; + + @ApiModelProperty(value = "重量") + private Double weight; + + @ApiModelProperty(value = "货号") + private String sn; + + @ApiModelProperty(value = "详情") + private String intro; + + @ApiModelProperty(value = "规格项") + private String skuKey; + + @ApiModelProperty(value = "规格值") + private String skuValue; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsOperationDTO.java b/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsOperationDTO.java new file mode 100644 index 00000000..f235a042 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/dto/goods/MallGoodsOperationDTO.java @@ -0,0 +1,106 @@ +package com.budwk.app.zhgh.mall.models.dto.goods; + +import cn.hutool.json.JSONObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import org.hibernate.validator.constraints.Length; +import org.nutz.lang.util.NutMap; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsOperationDTO + * @Date 2025/7/16 17:13 + * @注释 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MallGoodsOperationDTO implements Serializable { + + @Serial + private static final long serialVersionUID = -509667581371776913L; + + @ApiModelProperty(hidden = true) + private String goodsId; + + @ApiModelProperty(value = "商品价格", required = true) + @NotNull(message = "商品价格不能为空") + @Min(value = 0, message = "商品价格不能为负数") + @Max(value = 99999999, message = "商品价格不能超过99999999") + private Double price; + + @ApiModelProperty(value = "分类path") + private String categoryPath; + + @ApiModelProperty(value = "商品名称", required = true) + @NotEmpty(message = "商品名称不能为空") + @Length(max = 50, message = "商品名称不能超过50个字符") + private String goodsName; + + @ApiModelProperty(value = "详情") + private String intro; + + @ApiModelProperty(value = "商品移动端详情") + private String mobileIntro; + + @ApiModelProperty(value = "库存") + @Min(value = 0, message = "库存不能为负数") + @Max(value = 99999999, message = "库存不能超过99999999") + private Integer quantity; + + @ApiModelProperty(value = "是否立即发布") + private Boolean release; + + @ApiModelProperty(value = "是否是推荐商品") + private Boolean recommend; + + @ApiModelProperty(value = "商品图片") + private List goodsGalleryFiles; + + @ApiModelProperty(value = "卖点") + private String sellingPoint; + + @ApiModelProperty(value = "是否有规格", hidden = true) + private String haveSpec; + + @ApiModelProperty(value = "商品描述") + private String info; + + @ApiModelProperty(value = "是否重新生成sku数据") + private Boolean regeneratorSkuFlag = true; + + @ApiModelProperty(value = "商品类型") + private String goodsType; + + /** + * 商品视频 + */ + @ApiModelProperty(value = "商品视频") + private String goodsVideo; + + + @ApiModelProperty(value = "sku列表") + @Valid + private List skuList; + + @ApiModelProperty(value = "是否为商品模版") + private Boolean goodsTemplateFlag = false; + + + @ApiModelProperty(value = "注意事项") + private String needingAttention; + + @ApiModelProperty(value = "浏览权限") + private String browsePermissions; + + public String getGoodsName() { + return goodsName.replace(",", ""); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallCategory.java b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallCategory.java new file mode 100644 index 00000000..688de206 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallCategory.java @@ -0,0 +1,54 @@ +package com.budwk.app.zhgh.mall.models.entity.goods; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.math.BigDecimal; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategory + * @Date 2025/7/15 15:59 + * @注释 + */ +@Data +@Table +@EqualsAndHashCode(callSuper = true) +public class MallCategory 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("父id, 根节点为0") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String parentId; + + @Column + @Comment("层级, 从0开始") + @ColDefine(type = ColType.INT) + private Integer level; + + @Column + @Comment("排序值") + @ColDefine(type = ColType.INT) + private Integer sortOrder; + + @Column + @Comment("分类图标") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String image; + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoods.java b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoods.java new file mode 100644 index 00000000..a9f440e1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoods.java @@ -0,0 +1,196 @@ +package com.budwk.app.zhgh.mall.models.entity.goods; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.http.HtmlUtil; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.model.BaseModel; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.enums.GoodsStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.eclipse.jetty.util.StringUtil; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Map; + + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoods + * @Date 2025/7/15 15:17 + * @注释 商城商品 + */ +@Data +@Table +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class MallGoods 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 goodsName; + + @Column + @Comment("商品价格") + @ColDefine(type = ColType.DOUBLE) + private Double price; + + @Column + @Comment("分类path") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String categoryPath; + + @Column + @Comment("计量单位") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String goodsUnit; + + @Column + @Comment("卖点") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String sellingPoint; + + @Column + @Comment("上架状态") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String marketEnable; + + @Column + @Comment("pc端详情") + @ColDefine(type = ColType.TEXT) + private String intro; + + @Column + @Comment("购买数量") + @ColDefine(type = ColType.INT) + private Integer buyCount; + + @Column + @Comment("库存") + @ColDefine(type = ColType.INT) + private Integer quantity; + + @Column + @Comment("商品好评率") + @ColDefine(type = ColType.DOUBLE) + private Double grade; + + @Column + @Comment("缩略图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String thumbnail; + + @Column + @Comment("小图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String small; + + @Column + @Comment("原图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String original; + + @Column + @Comment("评论数量") + @ColDefine(type = ColType.INT) + private Integer commentNum; + + @Column + @Comment("运费模板id") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String templateId; + + @Column + @Comment("是否自营") + @ColDefine(type = ColType.BOOLEAN) + private Boolean selfOperated; + + @Column + @Comment("商品移动端详情") + @ColDefine(type = ColType.TEXT) + private String mobileIntro; + + @Column + @Comment("商品视频") + @ColDefine(type = ColType.VARCHAR) + private String goodsVideo; + + @Column + @Comment("是否为推荐商品") + @ColDefine(type = ColType.BOOLEAN) + private Boolean recommend; + + @Column + @Comment("商品类型") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String goodsType; + + @Column + @Comment("商品参数json") + @ColDefine(type = ColType.MYSQL_JSON) + private String params; + + + public MallGoods(MallGoodsOperationDTO goodsOperationDTO) { + this.goodsName = goodsOperationDTO.getGoodsName(); + this.categoryPath = goodsOperationDTO.getCategoryPath(); + this.recommend = goodsOperationDTO.getRecommend(); + this.sellingPoint = goodsOperationDTO.getSellingPoint(); + this.intro = goodsOperationDTO.getIntro(); + this.mobileIntro = goodsOperationDTO.getMobileIntro(); + this.goodsVideo = goodsOperationDTO.getGoodsVideo(); + this.price = goodsOperationDTO.getPrice(); + //如果立即上架则 + this.marketEnable = Boolean.TRUE.equals(goodsOperationDTO.getRelease()) ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name(); + this.goodsType = goodsOperationDTO.getGoodsType(); + this.grade = 100D; + + //循环sku,判定sku是否有效 + for (Map sku : goodsOperationDTO.getSkuList()) { + //判定参数不能为空 + if ((!sku.containsKey("price") || StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0)) { + throw new BaseException("商品SKU价格不能小于等于0"); + } +// if ((!sku.containsKey("cost") || StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0)) { +// throw new BaseException("商品SKU成本价不能小于等于0"); +// } + if (!sku.containsKey("quantity") || StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) { + throw new BaseException("商品库存数量不能为负数"); + } + sku.values().forEach(i -> { + if (CharSequenceUtil.isBlank(i.toString())) { + throw new BaseException("规格值不能为空!"); + } + }); + + + } + } + + public String getIntro() { + if (CharSequenceUtil.isNotEmpty(intro)) { + return HtmlUtil.unescape(intro); + } + return intro; + } + + public String getMobileIntro() { + if (CharSequenceUtil.isNotEmpty(mobileIntro)) { + return HtmlUtil.unescape(mobileIntro); + } + return mobileIntro; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoodsSku.java b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoodsSku.java new file mode 100644 index 00000000..003adebf --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/entity/goods/MallGoodsSku.java @@ -0,0 +1,210 @@ +package com.budwk.app.zhgh.mall.models.entity.goods; + +import com.budwk.app.base.model.BaseModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsSku + * @Date 2025/7/15 17:33 + * @注释 商品sku(库存) + */ +@Data +@Table +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class MallGoodsSku 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 = 100) + private String goodsId; + + @Column + @Comment("规格信息json") + @ColDefine(type = ColType.MYSQL_JSON) + private String specs; + + @Column + @Comment("规格信息") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String simpleSpecs; + + @Column + @Comment("配送模版id") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String freightTemplateId; + + @Column + @Comment("商品名称") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String goodsName; + + @Column + @Comment("商品编号") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String sn; + + @Column + @Comment("分类path") + @ColDefine(type = ColType.TEXT) + private String categoryPath; + + @Column + @Comment("计量单位") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String goodsUnit; + + @Column + @Comment("卖点") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String sellingPoint; + + @Column + @Comment("重量") + @ColDefine(type = ColType.DOUBLE) + private Double weight; + + @Column + @Comment("上架状态") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String marketEnable; + + @Column + @Comment("商品详情") + @ColDefine(type = ColType.TEXT) + private String intro; + + @Column + @Comment("商品价格") + @ColDefine(type = ColType.DOUBLE) + private Double price; + + @Column + @Comment("商品价格") + @ColDefine(type = ColType.INT) + private Integer viewCount; + + @Column + @Comment("购买数量") + @ColDefine(type = ColType.INT) + private Integer buyCount; + + @Column + @Comment("库存") + @ColDefine(type = ColType.INT) + private Integer quantity; + + @Column + @Comment("商品好评率") + @ColDefine(type = ColType.DOUBLE) + private Double grade; + + @Column + @Comment("缩略图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String thumbnail; + + @Column + @Comment("大图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String big; + + @Column + @Comment("小图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String small; + + @Column + @Comment("原图路径") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String original; + + @Column + @Comment("评论数量") + @ColDefine(type = ColType.INT) + private Integer commentNum; + + @Column + @Comment("运费模板id") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String templateId; + + @Column + @Comment("商品移动端详情") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String mobileIntro; + + @Column + @Comment("商品视频") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String goodsVideo; + + @Column + @Comment("是否为推荐商品") + @ColDefine(type = ColType.BOOLEAN) + private Boolean recommend; + + @Column + @Comment("商品类型") + @ColDefine(type = ColType.VARCHAR, width = 100) + private String goodsType; + + @ApiModelProperty(value = "预警数量") + @Column + @Comment("预警数量") + @ColDefine(type = ColType.INT) + private Integer alertQuantity; + + public Double getWeight() { + if (weight == null) { + return 0d; + } + return weight; + } + + public Integer getAlertQuantity() { + if(alertQuantity == null){ + return 0; + } + return alertQuantity; + } + + + /** + * 设置规格商品的基本商品信息 + * + * @param goods 基本商品信息 + */ + public MallGoodsSku(MallGoods goods) { + //商品基本信息 + this.goodsId = goods.getId(); + this.goodsName = goods.getGoodsName(); + this.goodsType = goods.getGoodsType(); + this.goodsVideo = goods.getGoodsVideo(); + this.sellingPoint = goods.getSellingPoint(); + this.categoryPath = goods.getCategoryPath(); + this.marketEnable = goods.getMarketEnable(); + this.intro = goods.getIntro(); + this.mobileIntro = goods.getMobileIntro(); + this.goodsUnit = goods.getGoodsUnit(); + this.grade = 100D; + this.alertQuantity = 0; + this.freightTemplateId = goods.getTemplateId(); + this.recommend = goods.getRecommend(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStatusEnum.java b/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStatusEnum.java new file mode 100644 index 00000000..22492f29 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStatusEnum.java @@ -0,0 +1,28 @@ +package com.budwk.app.zhgh.mall.models.enums; + +/** + * 商品类型枚举 + * + * @author pikachu + * @since 2020-02-26 23:24:13 + */ +public enum GoodsStatusEnum { + /** + * 上架 + */ + UPPER("上架"), + /** + * 下架 + */ + DOWN("下架"); + + private final String description; + + GoodsStatusEnum(String description) { + this.description = description; + } + + public String description() { + return description; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStockTypeEnum.java b/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStockTypeEnum.java new file mode 100644 index 00000000..b6768f14 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/enums/GoodsStockTypeEnum.java @@ -0,0 +1,32 @@ +package com.budwk.app.zhgh.mall.models.enums; + +/** + * 库存操作类型 + */ +public enum GoodsStockTypeEnum { + + + SUB("减"), + + ADD("增"); + + private final String description; + + GoodsStockTypeEnum(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + // 根据描述获取枚举实例 + public static GoodsStockTypeEnum fromDescription(String description) { + for (GoodsStockTypeEnum type : GoodsStockTypeEnum.values()) { + if (type.getDescription().equals(description)) { + return type; + } + } + throw new IllegalArgumentException("No matching enum constant for description: " + description); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallCategoryVO.java b/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallCategoryVO.java new file mode 100644 index 00000000..97697523 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallCategoryVO.java @@ -0,0 +1,69 @@ +package com.budwk.app.zhgh.mall.models.vo.goods; + +import cn.hutool.core.bean.BeanUtil; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Comparator; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategoryVO + * @Date 2025/7/16 10:56 + * @注释 分类VO + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MallCategoryVO { + + @ApiModelProperty(value = "id") + private String id; + + @ApiModelProperty(value = "分类名称") + private String name; + + @ApiModelProperty(value = "父id, 根节点为0") + private String parentId; + + @ApiModelProperty(value = "层级, 从0开始") + private Integer level; + + @ApiModelProperty(value = "排序值") + private Integer sortOrder; + + @ApiModelProperty(value = "图片名称") + private String image; + + @ApiModelProperty(value = "父节点名称") + private String parentTitle; + + @ApiModelProperty("子分类列表") + private List children; + + @ApiModelProperty("删除标识") + private Boolean delFlag; + + public MallCategoryVO(MallCategory category) { + BeanUtil.copyProperties(category, this); + } + + public List getChildren() { + + if (children != null) { + children.sort(new Comparator() { + @Override + public int compare(MallCategoryVO o1, MallCategoryVO o2) { + return o1.getSortOrder().compareTo(o2.getSortOrder()); + } + }); + return children; + } + return null; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallGoodsVO.java b/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallGoodsVO.java new file mode 100644 index 00000000..06535eea --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/models/vo/goods/MallGoodsVO.java @@ -0,0 +1,91 @@ +package com.budwk.app.zhgh.mall.models.vo.goods; + +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoodsSku; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsVO + * @Date 2025/7/17 16:31 + * @注释 + */ +@Data +public class MallGoodsVO { + + @ApiModelProperty(value = "id") + private String id; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品价格") + private Double price; + + @ApiModelProperty(value = "分类path") + private String categoryPath; + + @ApiModelProperty(value = "计量单位") + private String goodsUnit; + + @ApiModelProperty(value = "卖点") + private String sellingPoint; + + @ApiModelProperty(value = "上架状态") + private String marketEnable; + + @ApiModelProperty(value = "pc端详情") + private String intro; + + @ApiModelProperty(value = "购买数量") + private Integer buyCount; + + @ApiModelProperty(value = "库存") + private Integer quantity; + + @ApiModelProperty(value = "商品好评率") + private Double grade; + + @ApiModelProperty(value = "缩略图路径") + private String thumbnail; + + @ApiModelProperty(value = "小图路径") + private String small; + + @ApiModelProperty(value = "原图路径") + private String original; + + @ApiModelProperty(value = "评论数量") + private Integer commentNum; + + @ApiModelProperty(value = "运费模板id") + private String templateId; + + @ApiModelProperty(value = "是否自营") + private Boolean selfOperated; + + @ApiModelProperty(value = "商品移动端详情") + private String mobileIntro; + + @ApiModelProperty(value = "商品视频") + private String goodsVideo; + + @ApiModelProperty(value = "是否为推荐商品") + private Boolean recommend; + + @ApiModelProperty(value = "商品类型") + private String goodsType; + + @ApiModelProperty(value = "商品参数json") + private String params; + + @ApiModelProperty(value = "分类名称") + private List categoryName; + + @ApiModelProperty(value = "sku列表") + private List skuList; + +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/param/goods/MallCategorySearchParams.java b/src/main/java/com/budwk/app/zhgh/mall/param/goods/MallCategorySearchParams.java new file mode 100644 index 00000000..1a94ca5a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/param/goods/MallCategorySearchParams.java @@ -0,0 +1,38 @@ +package com.budwk.app.zhgh.mall.param.goods; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategorySearchParams + * @Date 2025/7/16 10:45 + * @注释 + */ +@Data +public class MallCategorySearchParams { + + @ApiModelProperty(value = "分类名称") + private String name; + + @ApiModelProperty(value = "父id") + private String parentId; + + @ApiModelProperty(value = "层级") + private Integer level; + + @ApiModelProperty(value = "排序值") + private BigDecimal sortOrder; + + @ApiModelProperty(value = "佣金比例") + private BigDecimal commissionRate; + + @ApiModelProperty(value = "父节点名称") + private String parentTitle; + + @ApiModelProperty(value = "是否禁用") + private Boolean deleteFlag; +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallCategoryService.java b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallCategoryService.java new file mode 100644 index 00000000..76525079 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallCategoryService.java @@ -0,0 +1,25 @@ +package com.budwk.app.zhgh.mall.service.goods; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import com.budwk.app.zhgh.mall.param.goods.MallCategorySearchParams; +import com.budwk.app.zhgh.mall.models.vo.goods.MallCategoryVO; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategoryService + * @Date 2025/7/16 9:42 + * @注释 + */ +public interface MallCategoryService extends BaseService { + + + void saveCategory(MallCategory category); + + List listCategory(MallCategorySearchParams categorySearchParams); + + void updateCategoryStatus(String id, Boolean enableOperations); +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsService.java b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsService.java new file mode 100644 index 00000000..c37dbff0 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsService.java @@ -0,0 +1,46 @@ +package com.budwk.app.zhgh.mall.service.goods; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoods; +import com.budwk.app.zhgh.mall.models.vo.goods.MallGoodsVO; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsService + * @Date 2025/7/16 17:03 + * @注释 + */ +public interface MallGoodsService extends BaseService { + + /** + * 添加商品 + * + * @param goodsOperationDTO 商品查询条件 + */ + void addGoods(MallGoodsOperationDTO goodsOperationDTO); + + /** + * 修改商品 + * + * @param goodsOperationDTO 商品查询条件 + * @param goodsId 商品ID + */ + void editGoods(MallGoodsOperationDTO goodsOperationDTO, String goodsId); + + /** + * 修改商品库存数量 + * + * @param goodsId 商品ID + */ + void updateStock(String goodsId); + + /** + * 查询商品VO + * + * @param goodsId 商品id + * @return 商品VO + */ + MallGoodsVO getGoodsVO(String goodsId); +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsSkuService.java b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsSkuService.java new file mode 100644 index 00000000..b6b5561f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/goods/MallGoodsSkuService.java @@ -0,0 +1,79 @@ +package com.budwk.app.zhgh.mall.service.goods; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoods; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoodsSku; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:GoodsSkuService + * @Date 2025/7/16 18:05 + * @注释 + */ +public interface MallGoodsSkuService extends BaseService { + + /** + * 添加商品sku + * + * @param goods 商品信息 + * @param goodsOperationDTO 商品操作信息 + */ + void add(MallGoods goods, MallGoodsOperationDTO goodsOperationDTO); + + + /** + * 更新商品sku + * + * @param goods 商品信息 + * @param goodsOperationDTO 商品操作信息 + */ + void update(MallGoods goods, MallGoodsOperationDTO goodsOperationDTO); + + + /** + * 获取最新商品库存 + * + * @param goodsId 商品ID + * @return 库存数量 + */ + Integer getGoodsStock(String goodsId); + + + /** + * 修改商品库存字段 + * + * @param goodsSkus + */ + void updateGoodsStock(List goodsSkus); + + + /** + * 更新SKU库存 + * + * @param skuId SKUId + * @param quantity 设置的库存数量 + */ + void updateStock(String skuId, Integer quantity); + void updateStock(String skuId, Integer quantity,String type); + + + /** + * 批量渲染商品sku + * + * @param goodsSkuList SKU基础数据列表 + * @param goodsOperationDTO 商品操作信息 + */ + void renderGoodsSkuList(List goodsSkuList, MallGoodsOperationDTO goodsOperationDTO); + + /** + * 获取goodsId下所有的goodsSku + * + * @param goodsId 商品id + * @return goodsSku列表 + */ + List getGoodsListByGoodsId(String goodsId); +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallCategoryServiceImpl.java b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallCategoryServiceImpl.java new file mode 100644 index 00000000..787fd152 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallCategoryServiceImpl.java @@ -0,0 +1,129 @@ +package com.budwk.app.zhgh.mall.service.impl.goods; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import com.budwk.app.zhgh.mall.param.goods.MallCategorySearchParams; +import com.budwk.app.zhgh.mall.service.goods.MallCategoryService; +import com.budwk.app.zhgh.mall.models.vo.goods.MallCategoryVO; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallCategoryServiceImpl + * @Date 2025/7/16 10:27 + * @注释 + */ +@IocBean(args = {"refer:dao"}) +public class MallCategoryServiceImpl extends BaseServiceImpl implements MallCategoryService { + + public MallCategoryServiceImpl(Dao dao) { + super(dao); + } + + + @Override + public void saveCategory(MallCategory category) { + if (category.getParentId() != null && !("0").equals(category.getParentId())) { + MallCategory parentCategory = dao().fetch(MallCategory.class, Cnd.where("id", "=", category.getParentId())); + category.setDelFlag(parentCategory.getDelFlag()); + } + dao().insert(category); + } + + + @Override + public List listCategory(MallCategorySearchParams categorySearchParams) { + + // 获取全部分类 + List list = dao().query(MallCategory.class, Cnd.where(MallCategory::getDelFlag, "=", false)); + + // 构造分类树 + List categoryVOList = new ArrayList<>(); + for (MallCategory category : list) { + if (("0").equals(category.getParentId())) { + MallCategoryVO categoryVO = new MallCategoryVO(category); + categoryVO.setChildren(findChildren(list, categoryVO)); + categoryVOList.add(categoryVO); + } + } + categoryVOList.sort(Comparator.comparing(MallCategoryVO::getSortOrder)); + + return categoryVOList; + } + + + @Override + public void updateCategoryStatus(String id, Boolean enableOperations) { + //禁用子分类 + MallCategoryVO categoryVO = new MallCategoryVO(dao().fetch(MallCategory.class, Cnd.where(MallCategory::getId, "=", id))); + List ids = new ArrayList<>(); + ids.add(categoryVO.getId()); + this.findAllChild(categoryVO); + this.findAllChildIds(categoryVO, ids); + + dao().update(MallCategory.class, Chain.make("delFlag", enableOperations), Cnd.where(MallCategory::getId, "in", ids)); + } + + + /** + * 递归树形VO + * + * @param categories 分类列表 + * @param categoryVO 分类VO + * @return 分类VO列表 + */ + private List findChildren(List categories, MallCategoryVO categoryVO) { + List children = new ArrayList<>(); + categories.forEach(item -> { + if (item.getParentId().equals(categoryVO.getId())) { + MallCategoryVO temp = new MallCategoryVO(item); + temp.setChildren(findChildren(categories, temp)); + children.add(temp); + } + }); + return children; + } + + + /** + * 条件查询分类 + * + * @param category 分类VO + */ + private void findAllChild(MallCategoryVO category) { + List categories = dao().query(MallCategory.class, Cnd.where("parentId", "=", category.getId())); + + List categoryVOList = new ArrayList<>(); + + for (MallCategory category1 : categories) { + categoryVOList.add(new MallCategoryVO(category1)); + } + category.setChildren(categoryVOList); + if (!categoryVOList.isEmpty()) { + categoryVOList.forEach(this::findAllChild); + } + } + + /** + * 获取所有的子分类ID + * + * @param category 分类 + * @param ids ID列表 + */ + private void findAllChildIds(MallCategoryVO category, List ids) { + if (category.getChildren() != null && !category.getChildren().isEmpty()) { + for (MallCategoryVO child : category.getChildren()) { + ids.add(child.getId()); + this.findAllChildIds(child, ids); + } + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsServiceImpl.java new file mode 100644 index 00000000..a2a92e14 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsServiceImpl.java @@ -0,0 +1,144 @@ +package com.budwk.app.zhgh.mall.service.impl.goods; + +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.entity.goods.MallCategory; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoods; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoodsSku; +import com.budwk.app.zhgh.mall.models.vo.goods.MallGoodsVO; +import com.budwk.app.zhgh.mall.service.goods.MallCategoryService; +import com.budwk.app.zhgh.mall.service.goods.MallGoodsService; +import com.budwk.app.zhgh.mall.service.goods.MallGoodsSkuService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsServiceImpl + * @Date 2025/7/16 17:04 + * @注释 + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class MallGoodsServiceImpl extends BaseServiceImpl implements MallGoodsService { + + public MallGoodsServiceImpl(Dao dao) { + super(dao); + } + + @Inject + private MallCategoryService categoryService; + @Inject + private MallGoodsSkuService goodsSkuService; + + @Override + public void addGoods(MallGoodsOperationDTO goodsOperationDTO) { + MallGoods goods = new MallGoods(goodsOperationDTO); + // 判断商品信息 + this.checkGoods(goods); + dao().insert(goods); + //添加商品sku信息 + goodsSkuService.add(goods, goodsOperationDTO); + } + + + @Override + public void editGoods(MallGoodsOperationDTO goodsOperationDTO, String goodsId) { + MallGoods goods = new MallGoods(goodsOperationDTO); + goods.setId(goodsId); + //检查商品信息 + this.checkGoods(goods); + //修改商品 + dao().update(goods); + //修改商品sku信息 + this.goodsSkuService.update(goods, goodsOperationDTO); + } + + @Override + public void updateStock(String goodsId) { + Integer stock = goodsSkuService.getGoodsStock(goodsId); + dao().update(MallGoods.class, Chain.make("quantity", stock), Cnd.where("id", "=", goodsId)); + } + + + @Override + public MallGoodsVO getGoodsVO(String goodsId) { + //查询商品信息 + MallGoods goods = dao().fetch(MallGoods.class ,goodsId); + if (goods == null) { + log.error("商品ID为{}的商品不存在", goodsId); + throw new BaseException("商品不存在"); + } + MallGoodsVO goodsVO = new MallGoodsVO(); + //赋值 + BeanUtils.copyProperties(goods, goodsVO); + //商品id + goodsVO.setId(goods.getId()); + + //商品sku赋值 + List goodsListByGoodsId = goodsSkuService.getGoodsListByGoodsId(goodsId); + if (goodsListByGoodsId != null && !goodsListByGoodsId.isEmpty()) { + goodsVO.setSkuList(goodsListByGoodsId); + } + //商品分类名称赋值 + List categoryName = new ArrayList<>(); + String categoryPath = goods.getCategoryPath(); + String[] strArray = categoryPath.split(","); + List categories = categoryService.dao().query(MallCategory.class, Cnd.where("id", "in", Arrays.asList(strArray))); + for (MallCategory category : categories) { + categoryName.add(category.getName()); + } + goodsVO.setCategoryName(categoryName); + + return goodsVO; + } + + /** + * 检查商品 + * @param goods 商品 + */ + public void checkGoods(MallGoods goods){ + // 判断是通过草稿加的还是手动新增 + if (goods.getId() != null) { + // 如果有Id,就去判断库里面有没有 + MallGoods sourceGoods = dao().fetch(MallGoods.class, Cnd.where("id", "=", goods.getId())); + if (sourceGoods == null) { + log.error("商品ID为{}的商品不存在", goods.getId()); + throw new BaseException("商品不存在"); + } + } else { + //评论次数 + goods.setCommentNum(0); + //购买次数 + goods.setBuyCount(0); + //购买次数 + goods.setQuantity(0); + //商品评分 + goods.setGrade(100.0); + } + } + + + /** + * 添加商品默认图片 + * + * @param origin 图片 + * @param goods 商品 + */ + private void setGoodsGalleryParam(String origin, MallGoods goods) { + goods.setOriginal(origin); + goods.setSmall(origin); + goods.setThumbnail(origin); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsSkuServiceImpl.java b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsSkuServiceImpl.java new file mode 100644 index 00000000..5945c5a2 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/mall/service/impl/goods/MallGoodsSkuServiceImpl.java @@ -0,0 +1,284 @@ +package com.budwk.app.zhgh.mall.service.impl.goods; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.mall.models.dto.goods.MallGoodsOperationDTO; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoods; +import com.budwk.app.zhgh.mall.models.entity.goods.MallGoodsSku; +import com.budwk.app.zhgh.mall.models.enums.GoodsStockTypeEnum; +import com.budwk.app.zhgh.mall.service.goods.MallGoodsService; +import com.budwk.app.zhgh.mall.service.goods.MallGoodsSkuService; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +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.aop.Aop; +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 java.util.*; +import java.util.stream.Collectors; + +/** + * @version 1.0 + * @Author zzr + * @name:MallGoodsSkuServiceImpl + * @Date 2025/7/16 18:05 + * @注释 + */ +@IocBean(args = {"refer:dao"}) +public class MallGoodsSkuServiceImpl extends BaseServiceImpl implements MallGoodsSkuService { + + public MallGoodsSkuServiceImpl(Dao dao) { + super(dao); + } + + @Inject + private MallGoodsService goodsService; + + + @Override + public void add(MallGoods goods, MallGoodsOperationDTO goodsOperationDTO) { + // 是否存在规格 + if (Lang.isEmpty(goodsOperationDTO.getSkuList())) { + throw new BaseException("规格必须填写!"); + } + // 检查是否需要生成索引 + List goodsSkus = buildBatch(goods, goodsOperationDTO.getSkuList()); + renderGoodsSkuList(goodsSkus, goodsOperationDTO); + + if (!goodsSkus.isEmpty()) { + dao().insertOrUpdate(goodsSkus); + this.updateGoodsStock(goodsSkus); + } + } + + @Override + public void update(MallGoods goods, MallGoodsOperationDTO goodsOperationDTO) { + // 是否存在规格 + if (Lang.isEmpty(goodsOperationDTO.getSkuList())) { + throw new BaseException("规格必须填写!"); + } + List skuList = new ArrayList<>(); + + // 去遍历新的sku + for (Map skuInfo : goodsOperationDTO.getSkuList()) { + MallGoodsSku sku = new MallGoodsSku(goods); + builderSingle(sku, skuInfo); + renderGoodsSku(sku, goodsOperationDTO); + skuList.add(sku); + } + + if (Lang.isNotEmpty(skuList)) { + Cnd cnd = Cnd.NEW(); + cnd.and(MallGoodsSku::getGoodsId, "=", goods.getId()); + List ids = skuList.stream().map(MallGoodsSku::getId).filter(StrUtil::isNotBlank).toList(); + if (Lang.isNotEmpty(ids)) { + cnd.and(MallGoodsSku::getId, "not in", ids); + } + // 删除旧sku + dao().clear(MallGoodsSku.class, cnd); + // 修改或新增sku + dao().insertOrUpdate(skuList); + // 请计算库存 + updateGoodsStock(skuList); + } + } + + @Override + public Integer getGoodsStock(String goodsId) { + Sql sql = Sqls.create("select id,quantity from mall_goods_sku where goodsId = @id").setParam("id", goodsId); + sql.setCallback(Sqls.callback.maps()); + dao().execute(sql); + List skuInfos = (List) sql.getResult(); + + int stock = 0; + + for (NutMap map : skuInfos) { + stock += map.getInt("quantity"); + } + return stock; + } + + + @Override + @Aop(TransAop.READ_COMMITTED) + public void updateGoodsStock(List goodsSkus) { + Map> groupByGoodsIds = goodsSkus.stream().collect(Collectors.groupingBy(MallGoodsSku::getGoodsId)); + + //统计每个商品的库存 + for (String goodsId : groupByGoodsIds.keySet()) { + //库存 + Integer quantity = 0; + for (MallGoodsSku goodsSku : goodsSkus) { + if (goodsId.equals(goodsSku.getGoodsId())) { + quantity += goodsSku.getQuantity(); + } + this.updateStock(goodsSku.getId(), goodsSku.getQuantity()); + } + //保存商品库存结果 + goodsService.updateStock(goodsId); + } + } + + + @Override + public void updateStock(String skuId, Integer quantity) { + MallGoodsSku goodsSku = dao().fetch(MallGoodsSku.class, skuId); + if (Lang.isNotEmpty(goodsSku)) { + goodsSku.setQuantity(quantity); + dao().update(MallGoodsSku.class, Chain.make("quantity", quantity), Cnd.where(MallGoodsSku::getId, "=", skuId)); + } + } + + @Override + public void updateStock(String skuId, Integer quantity, String type) { + MallGoodsSku goodsSku = dao().fetch(MallGoodsSku.class, skuId); + if (Lang.isNotEmpty(goodsSku)) { + //计算修改库存 + if (type.equals(GoodsStockTypeEnum.ADD.name())) { + quantity = Convert.toInt(NumberUtil.add(goodsSku.getQuantity(), quantity)); + } else { + quantity = Convert.toInt(NumberUtil.sub(goodsSku.getQuantity(), quantity)); + } + goodsSku.setQuantity(quantity); + + dao().update(MallGoodsSku.class, Chain.make("quantity", quantity), Cnd.where(MallGoodsSku::getId, "=", skuId)); + } + } + + + /** + * 批量渲染商品sku + * + * @param goodsSkuList sku集合 + * @param goodsOperationDTO 商品操作DTO + */ + @Override + public void renderGoodsSkuList(List goodsSkuList, MallGoodsOperationDTO goodsOperationDTO) { + // 商品销售模式渲染器 + for (MallGoodsSku goodsSku : goodsSkuList) { + renderGoodsSku(goodsSku, goodsOperationDTO); + } + } + + @Override + public List getGoodsListByGoodsId(String goodsId) { + return dao().query(MallGoodsSku.class, Cnd.where("goodsId", "=", goodsId)); + } + + /** + * 渲染商品sku + * + * @param goodsSku sku + * @param goodsOperationDTO 商品操作DTO + */ + void renderGoodsSku(MallGoodsSku goodsSku, MallGoodsOperationDTO goodsOperationDTO) { + extendOldSkuValue(goodsSku); + + List goodsImages = goodsOperationDTO.getGoodsGalleryFiles(); + if (goodsImages == null || goodsImages.isEmpty()) { + return; + } + + JSONObject jsonObject = JSONUtil.parseObj(goodsSku.getSpecs()); + List images = jsonObject.getBeanList("images", String.class); + String imageUrl = ""; + if (Lang.isNotEmpty(images)) { + imageUrl = images.get(0); + } else { + imageUrl = goodsImages.get(0).getStr("url"); + } + + goodsSku.setBig(imageUrl); + goodsSku.setOriginal(imageUrl); + goodsSku.setThumbnail(imageUrl); + goodsSku.setSmall(imageUrl); + } + + + /** + * 将原sku的一些不会直接传递的值放到新的sku中 + * + * @param goodsSku 商品sku + */ + private void extendOldSkuValue(MallGoodsSku goodsSku) { + if (StrUtil.isNotBlank(goodsSku.getGoodsId())) { + MallGoodsSku oldSku = dao().fetch(MallGoodsSku.class, Cnd.where(MallGoodsSku::getId, "=", goodsSku.getId())); + if (Lang.isNotEmpty(oldSku)) { + goodsSku.setCommentNum(oldSku.getCommentNum()); + goodsSku.setViewCount(oldSku.getViewCount()); + goodsSku.setBuyCount(oldSku.getBuyCount()); + goodsSku.setGrade(oldSku.getGrade()); + } + } + } + + /** + * 批量构建商品sku + * + * @param goods 商品 + * @return 商品sku + */ + public List buildBatch(MallGoods goods, List skuList) { + Assert.notEmpty(skuList, "skuList不能为空"); + Assert.notNull(goods, "goods不能为空"); + List goodsSkus = new ArrayList<>(); + for (Map skuInfo : skuList) { + MallGoodsSku goodsSku = new MallGoodsSku(goods); + builderSingle(goodsSku, skuInfo); + goodsSkus.add(goodsSku); + } + return goodsSkus; + } + + private static void builderSingle(MallGoodsSku goodsSku, Map skuInfo) { + Assert.notNull(goodsSku, "goodsSku不能为空"); + Assert.notEmpty(skuInfo, "skuInfo不能为空"); + //规格简短信息 + StringBuilder simpleSpecs = new StringBuilder(); + //商品名称 + StringBuilder goodsName = new StringBuilder(goodsSku.getGoodsName()); + //规格值 + Map specMap = new LinkedHashMap<>(); + + // 原始规格项 + String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight", "alertQuantity"}; + //获取规格信息 + for (Map.Entry spec : skuInfo.entrySet()) { + //保存新增规格信息 + if (!CollUtil.contains(Arrays.asList(ignoreOriginKeys), spec.getKey()) && spec.getValue() != null) { + specMap.put(spec.getKey(), spec.getValue()); + if (!"images".equals(spec.getKey())) { + //设置商品名称 + goodsName.append(" ").append(spec.getValue()); + //规格简短信息 + simpleSpecs.append(" ").append(spec.getValue()); + } + } + } + //设置规格信息 + goodsSku.setGoodsName(goodsName.toString()); + + //规格信息 + goodsSku.setId(Convert.toStr(skuInfo.get("id"), "")); + goodsSku.setSn(Convert.toStr(skuInfo.get("sn"))); + goodsSku.setWeight(Convert.toDouble(skuInfo.get("weight"), 0D)); + goodsSku.setPrice(Convert.toDouble(skuInfo.get("price"), 0D)); + goodsSku.setQuantity(Convert.toInt(skuInfo.get("quantity"), 0)); + goodsSku.setSpecs(JSONUtil.toJsonStr(specMap)); + goodsSku.setSimpleSpecs(simpleSpecs.toString()); + goodsSku.setAlertQuantity(Convert.toInt(skuInfo.get("alertQuantity"), 0)); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpApplyController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpApplyController.java index 63bb6348..7b141906 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpApplyController.java @@ -1,18 +1,26 @@ package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; 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.result.Result; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo; import com.budwk.app.zhgh.staffbenefit.difficulthelp.service.DifficultHelpCommonService; import com.budwk.app.zhgh.staffbenefit.difficulthelp.vo.DifficultHelpPageParam; +import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.nutz.aop.interceptor.ioc.TransAop; @@ -28,8 +36,11 @@ import org.nutz.lang.Strings; 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.validation.Valid; +import java.util.Date; +import java.util.List; /** * @version 1.0 @@ -49,6 +60,8 @@ public class DifficultHelpApplyController { @Inject private FlowEngine flowEngine; @Inject + private FlowCommonService flowCommonService; + @Inject private DifficultHelpCommonService difficultHelpCommonService; @At("") @@ -65,55 +78,58 @@ public class DifficultHelpApplyController { @At - @ApiOperation("困难补助申请,我的申请列表") - @SaCheckPermission("difficultHelp.apply") - public Result pageData(DifficultHelpPageParam pageParam) { - Sql sql = Sqls.create(""" - SELECT - info.id, - info.proxyUserName, - info.proxyLoginName, - info.userName, - info.loginName, - info.unitName, - info.unionName, - info.subsidyStandards, - info.applyTime, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariale, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, - (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId - FROM - difficult_help_info info - LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - $condition - """); - Cnd cnd = Cnd.NEW(); - pageParam.buildSearch(cnd, "info."); - if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { - cnd.desc("info.applyTime"); - } else { - cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); - } - sql.setCondition(cnd); - Pagination pagination = difficultHelpCommonService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); - return Result.success().addData(pagination); + @ApiOperation("保存申请") + @SaCheckPermission("member.apply.submit") + @SLog(tag = "困难补助申请", msg = "保存申请,填写人: ${args[0].proxyUserName}") + public Result save(@Param("data") DifficultHelpInfo difficultHelpInfo) { + difficultHelpInfo.setApplyTime(ObjectUtil.defaultIfNull(difficultHelpInfo.getApplyTime(), new Date())); + dao.insertOrUpdate(difficultHelpInfo); + return Result.success(); } + @At + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "困难补助申请", msg = "提交申请,填写人: ${args[0].proxyUserName}") + public Result submit(@Param("data") DifficultHelpInfo difficultHelpInfo){ + difficultHelpInfo.setApplyTime(new Date()); + dao.insertOrUpdate(difficultHelpInfo); + + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, difficultHelpInfo); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("KNBF", difficultHelpInfo.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "困难补助申请", msg = "重新提交申请,填写人: ${args[0].proxyUserName}") + public Result submitAgain(@Param("data") DifficultHelpInfo difficultHelpInfo, @Param("taskId") Long taskId) { + difficultHelpInfo.setApplyTime(ObjectUtil.defaultIfNull(difficultHelpInfo.getApplyTime(), new Date())); + dao.insertOrUpdate(difficultHelpInfo); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + + @At @ApiOperation("获取受助人") @SaCheckPermission("difficultHelp.apply") @@ -155,16 +171,4 @@ public class DifficultHelpApplyController { return Result.success().addData(pagination.getList()); } - - - @At - @Aop(TransAop.READ_COMMITTED) - @ApiOperation("困难帮扶删除申请") - @SLog(tag = "困难帮扶申请", msg = "删除困难帮扶申请") - public Result onDelete(@Valid String id){ - dao.clear(DifficultHelpInfo.class, Cnd.where("id", "=", id)); - // 流程相关操作 - flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); - return Result.success(); - } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpBranchUnionApprovalController.java index 198d850b..32f1e6ba 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpBranchUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpBranchUnionApprovalController.java @@ -71,7 +71,8 @@ public class DifficultHelpBranchUnionApprovalController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpMineController.java new file mode 100644 index 00000000..b014de26 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpMineController.java @@ -0,0 +1,127 @@ +package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo; +import com.budwk.app.zhgh.staffbenefit.difficulthelp.service.DifficultHelpCommonService; +import com.budwk.app.zhgh.staffbenefit.difficulthelp.vo.DifficultHelpPageParam; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +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 javax.validation.Valid; + +/** + * @version 1.0 + * @Author zzr + * @name:DifficultHelpViewController + * @Date 2025/7/31 11:50 + * @注释 + */ +@IocBean +@Ok("json") +@ApiOperation("困难补助查看") +@At("/platform/difficultHelp/mine") +public class DifficultHelpMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private DifficultHelpCommonService difficultHelpCommonService; + + @At("") + @SaCheckPermission("difficultHelp.mine") + @Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/mine/index.html") + public void index() { + } + + + @At + @ApiOperation("困难补助申请,我的申请列表") + @SaCheckPermission("difficultHelp.mine") + public Result pageData(DifficultHelpPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.proxyUserName, + info.proxyLoginName, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.subsidyStandards, + info.applyTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + difficult_help_info info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + pageParam.buildSearch(cnd, "info."); + if (StrUtil.isAllBlank(pageParam.getPageOrderName(), pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy("info." + pageParam.getPageOrderName(), PageUtil.getOrder(pageParam.getPageOrderBy())); + } + sql.setCondition(cnd); + Pagination pagination = difficultHelpCommonService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); + return Result.success().addData(pagination); + } + + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("删除困难补助申请") + @SaCheckPermission("difficultHelp.mine") + @SLog(tag = "困难补助申请", msg = "删除困难补助申请,id: ${args[0]}") + public Result onDelete(@Valid String id){ + dao.clear(DifficultHelpInfo.class, Cnd.where("id", "=", id)); + // 删除流程相关操作 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + + @At + @ApiModelProperty("获取困难补助申请") + @SaCheckPermission("difficultHelp.mine") + public Result findOne(String id) { + DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id); + return Result.success().addData(helpInfo); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpReadingController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpReadingController.java index 9bc0865c..3109e2ff 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpReadingController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpReadingController.java @@ -1,20 +1,25 @@ package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; +import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.zhgh.staffbenefit.difficulthelp.service.DifficultHelpCommonService; import com.budwk.app.zhgh.staffbenefit.difficulthelp.vo.DifficultHelpPageParam; import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; 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.aop.Aop; 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; /** * @version 1.0 @@ -32,6 +37,8 @@ public class DifficultHelpReadingController { @Inject private Dao dao; @Inject + private FlowEngine flowEngine; + @Inject private DifficultHelpCommonService difficultHelpCommonService; @At("") @@ -59,7 +66,8 @@ public class DifficultHelpReadingController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -68,19 +76,32 @@ public class DifficultHelpReadingController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariable + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId FROM difficult_help_info info LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id $condition """); Cnd cnd = Cnd.NEW(); pageParam.buildSearch(cnd, "info."); + cnd.groupBy("t.id"); + sql.setCondition(cnd); Pagination pagination = difficultHelpCommonService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql); return Result.success().addData(pagination); } + @At + @SaCheckLogin + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("删除") + public Result delete(@Param("id") String id) { + difficultHelpCommonService.delete(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpSchoolUnionApprovalController.java index 0908b1b1..4624de20 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpSchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpSchoolUnionApprovalController.java @@ -72,6 +72,7 @@ public class DifficultHelpSchoolUnionApprovalController { ins.businessNo, ins.state instanceState, ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpViewController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpViewController.java deleted file mode 100644 index 31036922..00000000 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/controller/DifficultHelpViewController.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.budwk.app.zhgh.staffbenefit.difficulthelp.controller; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import com.budwk.app.base.result.Result; -import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo; -import com.budwk.app.zhgh.staffbenefit.difficulthelp.service.DifficultHelpCommonService; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; -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 - * @Author zzr - * @name:DifficultHelpViewController - * @Date 2025/7/31 11:50 - * @注释 - */ -@IocBean -@Ok("json") -@ApiOperation("困难补助查看") -@At("/platform/difficultHelp/view") -public class DifficultHelpViewController { - - @Inject - private Dao dao; - @Inject - private DifficultHelpCommonService difficultHelpCommonService; - - @At("") - @SaCheckPermission("difficultHelp.apply") - @Ok("beetl:/platform/zhgh/staffbenefit/difficulthelp/view/index.html") - public void index() { - } - - - @At - @ApiModelProperty("获取困难补助申请") - @SaCheckPermission("difficultHelp.apply") - public Result findOne(String id) { - DifficultHelpInfo helpInfo = dao.fetch(DifficultHelpInfo.class, id); - return Result.success().addData(helpInfo); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/interceptor/DifficultHelpSaveInterceptor.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/interceptor/DifficultHelpSaveInterceptor.java index 8ae79f5c..306f4141 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/interceptor/DifficultHelpSaveInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/interceptor/DifficultHelpSaveInterceptor.java @@ -28,13 +28,13 @@ public class DifficultHelpSaveInterceptor implements FlowInterceptor { String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); Dao dao = ServiceContext.find(Dao.class); - DifficultHelpInfo article = Json.fromJson(DifficultHelpInfo.class, formDataStr); - article.setApplyTime(new Date()); - dao.insertOrUpdate(article); + DifficultHelpInfo difficultHelpInfo = Json.fromJson(DifficultHelpInfo.class, formDataStr); + difficultHelpInfo.setApplyTime(new Date()); + dao.insertOrUpdate(difficultHelpInfo); - execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(article)); + execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(difficultHelpInfo)); int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); - dao.update(ProcessInstance.class, Chain.make("businessNo", article.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); + dao.update(ProcessInstance.class, Chain.make("businessNo", difficultHelpInfo.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java index 1f5e65ef..888278b8 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/difficulthelp/vo/DifficultHelpPageParam.java @@ -5,7 +5,6 @@ import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.param.PageForm; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.staffbenefit.difficulthelp.models.DifficultHelpInfo; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -23,7 +22,7 @@ import java.util.List; */ @Data @EqualsAndHashCode(callSuper = true) -public class DifficultHelpPageParam extends PageForm { +public class DifficultHelpPageParam extends PageForm { private String year; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyBranchUnionApprovalController.java index 7210d56f..43c03a83 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyBranchUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyBranchUnionApprovalController.java @@ -90,7 +90,8 @@ public class MemberApplyBranchUnionApprovalController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -133,6 +134,7 @@ public class MemberApplyBranchUnionApprovalController { } else { cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); sql.setCondition(cnd); Pagination pagination = memberApplyRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyController.java index 6f964df7..4ffafa63 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyController.java @@ -1,21 +1,22 @@ package com.budwk.app.zhgh.staffmanage.member.controller.apply; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.annotation.SaMode; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.lang.Dict; 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.result.Result; -import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.bpm.enums.BpmProcessInstanceStatusEnum; -import com.budwk.app.bpm.models.BpmProcessInstance; +import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; -import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm; import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; import io.swagger.annotations.ApiOperation; import org.nutz.aop.interceptor.ioc.TransAop; @@ -27,11 +28,12 @@ import org.nutz.dao.util.cri.Static; import org.nutz.ioc.aop.Aop; 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.validation.Valid; +import java.util.List; /** * 会员申请 @@ -46,6 +48,8 @@ public class MemberApplyController { @Inject private FlowEngine flowEngine; @Inject + private FlowCommonService flowCommonService; + @Inject private MemberCommonService memberCommonService; @At("") @@ -54,85 +58,70 @@ public class MemberApplyController { public void index() { } - @At - @Ok("beetl:/platform/zhgh/staffmanage/member/apply/submit/form.html") - @SaCheckPermission("member.apply.submit") - public void form() { - } @At - @ApiOperation("会员入会申请,我的申请列表") + @ApiOperation("保存申请") @SaCheckPermission("member.apply.submit") - public Result pageData(MemberApplyPageForm pageForm) { - Sql sql = Sqls.create(""" - SELECT - info.id, - info.userName, - info.loginName, - info.unitName, - info.unionName, - info.userState, - info.preparedBy, - info.personType, - info.sign, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariale, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, - (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId - FROM - member_apply_record info - LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - $condition - """); - Cnd cnd = Cnd.NEW(); - MemberApplyPageForm.buildSearch(cnd, pageForm); - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyDateTime"); - } else { - cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } - sql.setCondition(cnd); - Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); - return Result.success().addData(pagination); - } - - - @At - @ApiOperation("删除入会申请") - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("member.apply.submit") - @SLog(tag = "会员入会申请", msg = "删除入会申请id: ${args[0]}") - public Result onDelete(@Valid String id) { - dao.clear(MemberApplyRecord.class, Cnd.where("id", "=", id)); - // 流程相关操作 - flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + @SLog(tag = "会员入会申请", msg = "保存申请,申请人: ${args[0].username}") + public Result save(@Param("data") MemberApplyRecord memberApplyRecord) { + dao.insertOrUpdate(memberApplyRecord); return Result.success(); } @At - @ApiOperation("根据申请或修改,查询不同数据") - @SaCheckPermission(value = {"member.apply.submit","member.branchUnion.record","member.schoolUnion.record"}, mode = SaMode.OR) - public Result findOne(@Valid String id, @Valid Boolean isEdit) { - if (isEdit) { - MemberApplyRecord record = dao.fetch(MemberApplyRecord.class,id); - return Result.success(record); + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "会员入会申请", msg = "提交申请,申请人: ${args[0].username}") + public Result submit(@Param("data") MemberApplyRecord memberApplyRecord){ + // 开启流程实例 + Dict args = Dict.create(); + // 设置流程变量 + if ("HMC".equals(Globals.SchoolCode)) { + args.set("origin", "HMC"); + memberApplyRecord.setOrigin("HMC"); + } else { + args.set("origin", "OTHER"); + memberApplyRecord.setOrigin("OTHER"); } - View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", id)); - return Result.success(user); + dao.insertOrUpdate(memberApplyRecord); + + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, memberApplyRecord); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("HYRH", memberApplyRecord.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "会员入会申请", msg = "重新提交申请,申请人: ${args[0].username}") + public Result submitAgain(@Param("data") MemberApplyRecord memberApplyRecord, @Param("taskId") Long taskId) { + Dict dict = Dict.create(); + // 设置流程变量 + if ("HMC".equals(Globals.SchoolCode)) { + dict.set("origin", "HMC"); + memberApplyRecord.setOrigin("HMC"); + } else { + dict.set("origin", "OTHER"); + memberApplyRecord.setOrigin("OTHER"); + } + + dao.insertOrUpdate(memberApplyRecord); + + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); } @@ -149,7 +138,6 @@ public class MemberApplyController { } - @At @SaCheckPermission("member.apply.submit") public Result getApplyUserByUnionOperate(@Valid String keyWord){ @@ -173,19 +161,6 @@ public class MemberApplyController { return Result.success(pagination.getList()); } - /** - * 校验当前申请人是否有未走完的流程,只有等流程走完才能再次申请 - * @return - */ - @At - @SaCheckPermission("member.apply.submit") - @ApiOperation("校验当前申请人是否有未走完的流程") - public Result validateApply(){ - int count = dao.count(BpmProcessInstance.class, Cnd.where("processInstanceInitiatorId", "=", SecurityUtil.getUserId()) - .and("processInstanceStatus", "=", BpmProcessInstanceStatusEnum.RUNNING.name())); - return Result.success().addData(count); - } - /** * 获取当前登录用户信息,是用来判断当前用户是否是会员 diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyMineController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyMineController.java new file mode 100644 index 00000000..ec32bbae --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyMineController.java @@ -0,0 +1,140 @@ +package com.budwk.app.zhgh.staffmanage.member.controller.apply; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; +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.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; +import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm; +import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +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 javax.validation.Valid; + +/** + * 我的申请 + * @author fky + */ +@IocBean +@Ok("json:full") +@ApiOperation("会员入会申请,查看") +@At("/platform/member/apply/mine") +public class MemberApplyMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private MemberCommonService memberCommonService; + + @At("") + @Ok("beetl:/platform/zhgh/staffmanage/member/apply/mine/index.html") + @SaCheckPermission("member.apply.mine") + public void index() { + } + + + @At + @ApiOperation("会员入会申请,我的申请列表") + @SaCheckPermission("member.apply.mine") + public Result pageData(MemberApplyPageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.userState, + info.preparedBy, + info.personType, + info.sign, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + member_apply_record info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + MemberApplyPageForm.buildSearch(cnd, pageForm); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) { + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + cnd.and("info.unionId", "=", SecurityUtil.getUnionId()); + } else { + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + } + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyDateTime"); + } else { + cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success().addData(pagination); + } + + + @At + @ApiOperation("删除入会申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.mine") + @SLog(tag = "会员入会申请", msg = "删除入会申请id: ${args[0]}") + public Result onDelete(@Valid String id) { + dao.clear(MemberApplyRecord.class, Cnd.where("id", "=", id)); + // 流程相关操作 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + + /** + * 获取申请信息 + * @param id + * @return + */ + @At + @ApiOperation("获取申请信息") + @SaCheckPermission(value = {"member.apply.mine", "member.apply.branchUnionApproval", "member.apply.branchUnionApproval"}, mode = SaMode.OR) + public Result findMemberApplyRecord(@Valid String id) { + MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id); + return Result.success().addData(record); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplySchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplySchoolUnionApprovalController.java index 48445e77..afcc6bda 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplySchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplySchoolUnionApprovalController.java @@ -85,11 +85,13 @@ public class MemberApplySchoolUnionApprovalController { info.userState, info.preparedBy, info.personType, + info.origin, info.sign, ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -130,6 +132,7 @@ public class MemberApplySchoolUnionApprovalController { } else { cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); sql.setCondition(cnd); Pagination pagination = memberApplyRecordService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyViewController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyViewController.java deleted file mode 100644 index a3dcff87..00000000 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/apply/MemberApplyViewController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.budwk.app.zhgh.staffmanage.member.controller.apply; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.annotation.SaMode; -import com.budwk.app.base.annotation.SLog; -import com.budwk.app.base.constant.BpmProcessConstant; -import com.budwk.app.base.constant.RoleConstant; -import com.budwk.app.base.page.Pagination; -import com.budwk.app.base.result.Result; -import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo; -import com.budwk.app.web.commons.auth.utils.AuthUtil; -import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; -import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberApplyPageForm; -import com.budwk.app.zhgh.staffmanage.member.service.MemberApplyRecordService; -import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; -import com.budwk.app.zhgh.staffmanage.member.vo.MemberCommonVo; -import io.swagger.annotations.ApiOperation; -import org.nutz.aop.interceptor.ioc.TransAop; -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.aop.Aop; -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 javax.validation.Valid; -import java.util.List; - -/** - * 我的申请 - * @author fky - */ -@IocBean -@Ok("json:full") -@ApiOperation("会员入会申请,查看") -@At("/platform/member/apply/view") -public class MemberApplyViewController { - - @Inject - private Dao dao; - @Inject - private BpmService bpmService; - @Inject - private MemberCommonService memberCommonService; - @Inject - private MemberApplyRecordService memberApplyRecordService; - - @At("") - @Ok("beetl:/platform/zhgh/staffmanage/member/apply/view/index.html") - @SaCheckPermission("member.apply.submit") - public void index() { - } - - /** - * 获取申请信息 - * @param id - * @return - */ - @At - @ApiOperation("获取申请信息") - @SaCheckPermission(value = {"member.apply.submit", "member.apply.branchUnionApproval", "member.apply.branchUnionApproval"}, mode = SaMode.OR) - public Result findMemberApplyRecord(@Valid String id) { - MemberApplyRecord record = dao.fetch(MemberApplyRecord.class, id); - return Result.success().addData(record); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberBranchUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberBranchUnionAuditController.java index 09ec5c84..55576258 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberBranchUnionAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberBranchUnionAuditController.java @@ -64,8 +64,6 @@ public class MemberBranchUnionAuditController { @Inject private Dao dao; @Inject - private BpmService bpmService; - @Inject private CommonService commonService; @Inject private MemberCommonService memberCommonService; @@ -106,7 +104,8 @@ public class MemberBranchUnionAuditController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -115,12 +114,16 @@ public class MemberBranchUnionAuditController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke FROM wf_process_task t LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId LEFT JOIN member_change_record info ON info.id = ins.businessNo LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 $condition """); Cnd cnd = Cnd.NEW(); @@ -140,21 +143,10 @@ public class MemberBranchUnionAuditController { } else { cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); sql.setCondition(cnd); Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success().addData(pagination); } - - - @At - @ApiOperation("分工会审核撤回") - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("member.change.branchUnion.audit") - @SLog(tag = "会员管理-分工会管理", type = "memberBranchUnionManage", msg = "分工会审核撤回") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java index f1b00071..183e86c6 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java @@ -2,43 +2,40 @@ package com.budwk.app.zhgh.staffmanage.member.controller.change; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; -import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; -import com.budwk.app.base.constant.BpmProcessConstant; -import com.budwk.app.base.constant.RoleConstant; -import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; -import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.sys.models.Sys_union; import com.budwk.app.sys.models.Sys_unit; -import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; -import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; -import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm; import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; -import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; 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.aop.Aop; 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; -import java.util.stream.Stream; @Slf4j @IocBean @@ -50,10 +47,12 @@ public class MemberChangeApplyController { @Inject private Dao dao; @Inject - private BpmService bpmService; + private FlowEngine flowEngine; @Inject private CommonService commonService; @Inject + private FlowCommonService flowCommonService; + @Inject private MemberCommonService memberCommonService; @At("") @@ -68,54 +67,59 @@ public class MemberChangeApplyController { public void form() { } + @At - @ApiOperation("会员变更申请,我的申请列表") - @SaCheckPermission("member.change.apply") - public Result pageData(MemberChangePageForm pageForm) { - Sql sql = Sqls.create(""" - SELECT - info.id, - info.username, - info.loginname, - info.sex, - info.unitName, - info.unionName, - info.userState, - info.preparedBy, - info.personType, - info.changeTypes, - info.applyDateTime, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariale, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariale - FROM - member_change_record info - LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id - LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id - AND t.taskState = 10 - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - $condition - """); - Cnd cnd = Cnd.NEW(); - pageForm.buildSearch(cnd, "info."); - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyDateTime"); - } else { - cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + @ApiOperation("保存申请") + @SaCheckPermission("member.apply.submit") + @SLog(tag = "会员变更申请", msg = "保存申请,申请人: ${args[0].username}") + public Result save(@Param("data") MemberChangeRecord memberChangeRecord) { + // 校验是否有变更 + memberCommonService.validateChangeAndSetBasicData(memberChangeRecord); + dao.insertOrUpdate(memberChangeRecord); + return Result.success(); + } + + + @At + @ApiOperation("提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "会员变更申请", msg = "提交申请,申请人: ${args[0].username}") + public Result submit(@Param("data") MemberChangeRecord memberChangeRecord){ + // 校验是否有变更 + memberCommonService.validateChangeAndSetBasicData(memberChangeRecord); + dao.insertOrUpdate(memberChangeRecord); + + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, memberChangeRecord); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("HYBG", memberChangeRecord.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); } - sql.setCondition(cnd); - Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); - return Result.success().addData(pagination); + return Result.success(); + } + + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.apply.submit") + @SLog(tag = "会员变更申请", msg = "重新提交申请,申请人: ${args[0].username}") + public Result submitAgain(@Param("data") MemberChangeRecord memberChangeRecord, @Param("taskId") Long taskId) { + // 校验是否有变更 + memberCommonService.validateChangeAndSetBasicData(memberChangeRecord); + dao.insertOrUpdate(memberChangeRecord); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java index d8785c62..13123973 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java @@ -15,13 +15,17 @@ import com.budwk.app.bpm.models.BpmProcessInstance; import com.budwk.app.bpm.models.BpmProcessTask; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +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.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType; import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm; import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; @@ -69,6 +73,7 @@ public class MemberChangeManageController { @At + @ApiOperation("页面数据") @SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR) public Result pageData(MemberManagePageForm pageForm){ Sql sql = memberCommonService.getSql(pageForm, "schoolUnion"); @@ -100,8 +105,10 @@ public class MemberChangeManageController { record.setChangeTypes(changeTypes); } + boolean schoolRoleBool = AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name(), RoleConstant.SYSADMIN.name()); + record.setApplyDateTime(DateUtil.date()); - record.setChangeOrigin("党委会变更"); + record.setChangeOrigin(schoolRoleBool ? MemberChangeOrigin.SCHOOL_UNION.name() : MemberChangeOrigin.BRANCH_UNION.name()); dao.insertOrUpdate(record); bpmService.startSubmitProcessInstance(BpmProcessConstant.MEMBER_CHANGE.name(), @@ -124,7 +131,7 @@ public class MemberChangeManageController { bpmService.completeTask(param.getProcessInstanceTaskId(), param.getBpmTaskApprovalTypeEnum(), variables, List.of(SecurityUtil.getUserLoginname())); // 如果有校工会或者超管的角色,直接审核通过了 - if (AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name(), RoleConstant.SYSADMIN.name())) { + if (schoolRoleBool) { BpmProcessInstance committeeInstance = dao.fetch(BpmProcessInstance.class, Cnd.where("processInstanceBusinessId", "=", record.getId())); BpmProcessTask committeeTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", committeeInstance.getId()) .desc(BpmProcessTask::getCreatedAt)); @@ -142,4 +149,22 @@ public class MemberChangeManageController { } return Result.success(); } + + + @At + @ApiOperation("获取该人员所有的变更信息") + @SaCheckPermission(value = {"member.change.mange", "staff.member.change.mange"}, mode = SaMode.OR) + public Result getAllChangeMemberInfo(String userId){ + List mapList = memberCommonService.getAllChangeInfo(userId); + if (Lang.isEmpty(mapList)) { + return Result.error("未获取到异动数据"); + } + + View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId)); + NutMap map = Lang.obj2nutmap(user); + map.put("user",user); + map.put("allChangeInfo", mapList); + return Result.success(map); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeMineController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeMineController.java new file mode 100644 index 00000000..18719775 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeMineController.java @@ -0,0 +1,159 @@ +package com.budwk.app.zhgh.staffmanage.member.controller.change; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +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.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; +import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberChangePageForm; +import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +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 javax.validation.Valid; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:MemberChangeMineController + * @Date 2025/2/14 11:13 + * @注释 + */ + +@IocBean +@Ok("json:full") +@ApiModel("会员变更申请查看") +@At("/platform/member/change/mine") +public class MemberChangeMineController { + + @Inject + private Dao dao; + @Inject + private FlowEngine flowEngine; + @Inject + private MemberCommonService memberCommonService; + + + @At("") + @Ok("beetl:/platform/zhgh/staffmanage/member/change/mine/index.html") + @SaCheckPermission("member.change.mine") + public void index() { + } + + + @At + @ApiOperation("会员变更申请,我的申请列表") + @SaCheckPermission("member.change.mine") + public Result pageData(MemberChangePageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.username, + info.loginname, + info.sex, + info.unitName, + info.unionName, + info.userState, + info.preparedBy, + info.personType, + info.changeTypes, + info.applyDateTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + member_change_record info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + pageForm.buildSearch(cnd, "info."); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) { + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + cnd.and("info.unionId", "=", SecurityUtil.getUnionId()); + } else { + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + } + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyDateTime"); + } else { + cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success().addData(pagination); + } + + + @At + @ApiOperation("个人申请撤回") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.change.mine") + @SLog(tag = "会员变更申请", msg = "撤回申请") + public Result doRevoke(@Valid String id){ +// bpmService.revokeApply(id); + return Result.success(); + } + + + @At + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("member.change.mine") + @SLog(tag = "会员变更申请", msg = "删除变更申请,id: ${args[0]}") + public Result onDelete(@Valid String id){ + dao.clear(MemberChangeRecord.class, Cnd.where("id", "=", id)); + // 流程相关操作 + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + + @At + @ApiOperation("根据id查询变更记录") + @SaCheckPermission("member.change.mine") + public Result findMemberChangeRecord(String id){ + MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id); + NutMap nutMap = Lang.obj2nutmap(record); + + List changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id")); + nutMap.put("changeInfos", changeInfos); + return Result.success().addData(nutMap); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeViewController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeViewController.java deleted file mode 100644 index 2ce50fce..00000000 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberChangeViewController.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.budwk.app.zhgh.staffmanage.member.controller.change; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import com.budwk.app.base.annotation.SLog; -import com.budwk.app.base.result.Result; -import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; -import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiOperation; -import org.nutz.aop.interceptor.ioc.TransAop; -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.aop.Aop; -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 javax.validation.Valid; -import java.util.List; - -/** - * @version 1.0 - * @Author zzr - * @name:MemberChangeMineController - * @Date 2025/2/14 11:13 - * @注释 - */ - -@IocBean -@Ok("json:full") -@ApiModel("会员变更申请查看") -@At("/platform/member/change/view") -public class MemberChangeViewController { - - @Inject - private Dao dao; - @Inject - private BpmService bpmService; - @Inject - private MemberCommonService memberCommonService; - - - @At("") - @Ok("beetl:/platform/zhgh/staffmanage/member/change/view/index.html") - @SaCheckPermission("member.change.apply") - public void index() { - } - - - @At - @ApiOperation("个人申请撤回") - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("member.change.apply") - @SLog(tag = "会员变更申请", msg = "撤回申请") - public Result doRevoke(@Valid String id){ - bpmService.revokeApply(id); - return Result.success(); - } - - - @At - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("member.change.apply") - @SLog(tag = "会员入会申请", msg = "删除申请") - public Result doDelete(String id){ - dao.clear(MemberChangeRecord.class, Cnd.where("id", "=", id)); - bpmService.deleteInstance(id); - return Result.success(); - } - - - @At - @ApiOperation("根据id查询变更记录") - @SaCheckPermission("member.change.apply") - public Result findMemberChangeRecord(String id){ - MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id); - NutMap nutMap = Lang.obj2nutmap(record); - - List changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id")); - nutMap.put("changeInfos", changeInfos); - return Result.success().addData(nutMap); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberSchoolUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberSchoolUnionAuditController.java index 079b2328..015b515e 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberSchoolUnionAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/change/MemberSchoolUnionAuditController.java @@ -102,7 +102,8 @@ public class MemberSchoolUnionAuditController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -111,12 +112,16 @@ public class MemberSchoolUnionAuditController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke FROM wf_process_task t LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId LEFT JOIN member_change_record info ON info.id = ins.businessNo LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 $condition """); Cnd cnd = Cnd.NEW(); @@ -136,6 +141,7 @@ public class MemberSchoolUnionAuditController { } else { cnd.orderBy("info." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); sql.setCondition(cnd); Pagination pagination = memberCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success().addData(pagination); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplyBranchApprovalInterceptor.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplyBranchApprovalInterceptor.java index efd3e136..c1ab941a 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplyBranchApprovalInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplyBranchApprovalInterceptor.java @@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffmanage.member.interceptor; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowInterceptor; @@ -45,7 +46,8 @@ public class MemberApplyBranchApprovalInterceptor implements FlowInterceptor { // 判断是否改变了工会关系 View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", record.getUserId())); - if (!ObjectUtil.equals(user.getUnionId(), record.getAllocationUnionId())) { + if (StrUtil.isAllNotBlank(user.getUnionId(), record.getAllocationUnionId()) + && !ObjectUtil.equals(user.getUnionId(), record.getAllocationUnionId())) { // 去判断特殊人员表里面有没有这些人,有的话先删除再增加 if (dao.count(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId())) > 0) { dao.clear(SpecialStaff.class, Cnd.where("userId", "=", record.getUserId())); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplySchoolApprovalInterceptor.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplySchoolApprovalInterceptor.java index f2ecb869..a8081588 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplySchoolApprovalInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/interceptor/MemberApplySchoolApprovalInterceptor.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.staffmanage.member.interceptor; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowInterceptor; import com.budwk.app.flow.engine.core.Execution; @@ -30,13 +31,16 @@ public class MemberApplySchoolApprovalInterceptor implements FlowInterceptor { String allocationUnionId = execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "allocation_unionId"); Dao dao = ServiceContext.find(Dao.class); - dao.update(MemberApplyRecord.class, Chain.make("allocationUnionId", allocationUnionId), - Cnd.where(MemberApplyRecord::getId, "=", record.getId())); + if (StrUtil.isNotBlank(allocationUnionId)) { + dao.update(MemberApplyRecord.class, Chain.make("allocationUnionId", allocationUnionId), + Cnd.where(MemberApplyRecord::getId, "=", record.getId())); + } // 判断如果是审核通过,并且不是HMC, 去修改用户表的基础数据 - boolean submitType = execution.getArgs().getInt("submitType").equals(ProcessSubmitTypeEnum.AGREE.getCode()); + boolean submitType = execution.getArgs().getInt(FlowConst.SUBMIT_TYPE).equals(ProcessSubmitTypeEnum.AGREE.getCode()); if (submitType) { if (!"HMC".equals(record.getOrigin())) { + // 不是HMC,去修改用户表基础数据 Sys_user sysUser = new Sys_user(); BeanUtil.copyProperties(record, sysUser); sysUser.setId(record.getUserId()); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberApplyRecord.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberApplyRecord.java index d610ed2f..49ee2c38 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberApplyRecord.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberApplyRecord.java @@ -34,21 +34,18 @@ public class MemberApplyRecord extends BaseModel { @Column @Comment("用户id") @ColDefine(type = ColType.VARCHAR, width = 32) - @NotBlank(message = "用户不能为空") @Size(max = 32) private String userId; @Column @Comment("姓名") @ColDefine(type = ColType.VARCHAR, width = 100) - @NotBlank(message = "姓名不能为空") @Size(max = 100) private String username; @Column @Comment("工号") @ColDefine(type = ColType.VARCHAR, width = 100) - @NotBlank(message = "工号不能为空") @Size(max = 100) private String loginname; @@ -60,66 +57,63 @@ public class MemberApplyRecord extends BaseModel { @Column @Comment("单位id") @ColDefine(type = ColType.VARCHAR, width = 32) - @NotBlank(message = "单位id不能为空") @Size(max = 32) private String unitId; @Column @Comment("单位名称") @ColDefine(type = ColType.VARCHAR, width = 200) - @NotBlank(message = "单位名称不能为空") @Size(max = 200) private String unitName; @Column @Comment("工会id") @ColDefine(type = ColType.VARCHAR, width = 32) - @NotBlank(message = "工会id不能为空") @Size(max = 32) private String unionId; @Column @Comment("工会名称") @ColDefine(type = ColType.VARCHAR, width = 50) - @NotBlank(message = "工会名称不能为空") @Size(max = 50) private String unionName; @Column @Comment("性别") @ColDefine(type = ColType.VARCHAR, width = 10) - @NotBlank(message = "性别不能为空") @Size(max = 10) private String sex; @Column @Comment("证件号码") @ColDefine(type = ColType.VARCHAR, width = 30) - @NotBlank(message = "证件号码不能为空") @Size(max = 30) private String idCard; @Column @Comment("民族") @ColDefine(type = ColType.VARCHAR, width = 20) - @NotBlank(message = "民族不能为空") @Size(max = 20) private String nation; @Column @Comment("政治面貌") @ColDefine(type = ColType.VARCHAR, width = 100) - @NotBlank(message = "政治面貌不能为空") @Size(max = 100) private String political; @Column @Comment("学历") @ColDefine(type = ColType.VARCHAR, width = 20) - @NotBlank(message = "学历不能为空") @Size(max = 20) private String education; + @Column + @Comment("学位") + @ColDefine(type = ColType.VARCHAR, width = 20) + @Size(max = 20) + private String academicDegree; + @Column @Comment("职务") @ColDefine(type = ColType.VARCHAR, width = 50) @@ -129,35 +123,30 @@ public class MemberApplyRecord extends BaseModel { @Column @Comment("在职状态") @ColDefine(type = ColType.VARCHAR, width = 50) - @NotBlank(message = "在职状态不能为空") @Size(max = 50) private String userState; @Column @Comment("人事编制") @ColDefine(type = ColType.VARCHAR, width = 50) - @NotBlank(message = "人事编制不能为空") @Size(max = 50) private String preparedBy; @Column @Comment("人员类别") @ColDefine(type = ColType.VARCHAR, width = 50) - @NotBlank(message = "人员类别不能为空") @Size(max = 50) private String personType; @Column @Comment("手机号码") @ColDefine(type = ColType.VARCHAR, width = 32) - @NotBlank(message = "手机号码不能为空") @Size(max = 32) private String mobile; @Column @Comment("电子邮箱") @ColDefine(type = ColType.VARCHAR, width = 255) - @NotBlank(message = "电子邮箱不能为空") @Size(max = 255) private String email; @@ -191,7 +180,6 @@ public class MemberApplyRecord extends BaseModel { @Column @Comment("个人简况") @ColDefine(type = ColType.VARCHAR, customType = "text") - @NotBlank(message = "个人简况不能为空") private String personalData; @Column diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java index 059ea0c2..75506ca5 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/models/MemberChangeRecord.java @@ -80,9 +80,8 @@ public class MemberChangeRecord extends BaseModel { @Column @Comment("出生日期") - @ColDefine(type = ColType.VARCHAR, width = 10) - @Size(max = 10) - private String birthday; + @ColDefine(type = ColType.DATE) + private Date birthday; @Column @Comment("证件号码") diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java index 56ebdc47..e1e8fd6f 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberApplyPageForm.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; @@ -17,7 +16,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; */ @Data @EqualsAndHashCode(callSuper = true) -public class MemberApplyPageForm extends PageForm { +public class MemberApplyPageForm extends PageForm { private String unionId; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java index 0522a4c0..f6ae3c32 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/param/pageform/MemberChangePageForm.java @@ -2,7 +2,6 @@ package com.budwk.app.zhgh.staffmanage.member.param.pageform; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,7 +17,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; */ @Data @EqualsAndHashCode(callSuper = true) -public class MemberChangePageForm extends PageForm { +public class MemberChangePageForm extends PageForm { // 工会id @ApiModelProperty("工会id") diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/MemberCommonService.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/MemberCommonService.java index 614adce2..8f80c53e 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/MemberCommonService.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/MemberCommonService.java @@ -4,7 +4,6 @@ import com.budwk.app.base.page.Pagination; import com.budwk.app.base.service.BaseService; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.views.View_user; -import com.budwk.app.zhgh.staffmanage.member.models.MemberApplyRecord; import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord; import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm; import org.nutz.dao.sql.Sql; @@ -94,4 +93,11 @@ public interface MemberCommonService extends BaseService { * @param changeList 变更集合 */ void extractChange(NutMap newMap, NutMap sourceMap, String fieldName, Map fieldsMap, List changeList); + + + /** + * 验证变更信息 + * @param record + */ + void validateChangeAndSetBasicData(MemberChangeRecord record); } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java index db31b7c8..c41afbab 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberManageServiceImpl.java @@ -304,12 +304,13 @@ public class MemberManageServiceImpl extends BaseServiceImpl implement history.setChangeTypes(record.getChangeTypes()); history.setChangeOrigin(record.getChangeOrigin()); - // 获取会员角色,加入或退出会员组别,写了之后用处不大,注释了,暂且保留,想优化就把下面注释打开,305行与304-348行取消注释 -// Sys_role role = sysRoleService.getByCode(RoleConstant.MEMBER); + // 获取会员角色,加入或退出会员组别,写了之后用处不大,注释暂且保留,想优化就把下面注释打开 + Sys_role role = sysRoleService.getByCode(RoleConstant.MEMBER); // 加入会员 if (record.getMember()) { // int activityCount = dao().count(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1)); -// int memberCount = dao().count(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId())); + // 如果没有会员角色,新增 + int memberCount = dao().count(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId())); // if (activityCount <= 0) { // // 取消或加入会员组别 // if (record.getIsJoinActivityMemberScope() != null && record.getIsJoinActivityMemberScope()) { @@ -320,23 +321,24 @@ public class MemberManageServiceImpl extends BaseServiceImpl implement // dao().insert(scope); // } // } -// if (memberCount <= 0) { -// Sys_user_role userRole = new Sys_user_role(); -// userRole.setUserId(userId); -// userRole.setRoleId(role.getId()); -// dao().insert(userRole); -// } -// // 杭医特有,其他学校请删除 -// record.setPreparedBy("会员"); -// } else { + if (memberCount <= 0) { + Sys_user_role userRole = new Sys_user_role(); + userRole.setUserId(userId); + userRole.setRoleId(role.getId()); + dao().insert(userRole); + } + // 杭医特有,其他学校请删除 + record.setPreparedBy("会员"); + } else { // if (record.getIsExitActivityMemberScope() != null && record.getIsExitActivityMemberScope()) { // dao().clear(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1)); // } -// dao().clear(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", Roles.MEMBER)); -// // 杭医特有,其他学校请删除 -// record.setPreparedBy("教职工"); -// } -// + // 非会员取消会员角色 + dao().clear(Sys_user_role.class, Cnd.where("userId", "=", userId).and("roleId", "=", role.getId())); + // 杭医特有,其他学校请删除 + record.setPreparedBy("教职工"); + } + // // 加入福利会员 是否加入福利项目 // if (record.getWelfareMember() && record.getIsJoinWelfareProject() != null && record.getIsJoinWelfareProject()) { // WelfareList welfareList = new WelfareList(); @@ -349,7 +351,7 @@ public class MemberManageServiceImpl extends BaseServiceImpl implement // welfareList.setPersonType(record.getPersonType()); // welfareList.setWelfareUnitId(record.getUnitId()); // dao().insert(welfareList); - } +// } // 到此,表明审核通过,需要存储历史数据,并修改用户数据 BeanUtil.copyProperties(record, info); @@ -480,6 +482,24 @@ public class MemberManageServiceImpl extends BaseServiceImpl implement } + @Override + public void validateChangeAndSetBasicData(MemberChangeRecord record) { + // 校验有没有发生变更 + List changeInfos = getChangeInfos(record); + if (Lang.isEmpty(changeInfos)) { + throw new BaseException("未获取到异动数据"); + } + + View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", record.getUserId())); + // 比较有哪些变更类型 + List changeTypes = compareChangeType(record, user); + + record.setChangeTypes(changeTypes); + record.setUserId(SecurityUtil.getUserId()); + // 变更来源 个人 + record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name()); + } + private String booleanVerification(Object value) { // 检查是否为null或空字符串 if (ObjectUtil.isAllEmpty(value, "")) { diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java index 10a06415..9b3379f0 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/service/impl/MemberStatisticsServiceImpl.java @@ -60,7 +60,7 @@ public class MemberStatisticsServiceImpl extends BaseServiceImpl imple cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC"); } - if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(0)) && !"0".equals(pageForm.getAge().get(1))) { + if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(1))) { if (reverseSelection) { cnd.andNot("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray()); } else { diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java index a74b598a..5d97e061 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentChartSummaryController.java @@ -174,7 +174,7 @@ public class MemberPaymentChartSummaryController { ) subquery ON subquery.unionId = un.id GROUP BY un.id, - un.unionname, + un.name, un.unioncode ORDER BY un.unioncode; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java index 6181a141..b6c839af 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/memberCost/controller/MemberPaymentSummaryController.java @@ -5,8 +5,10 @@ import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.constant.RoleConstant; @@ -104,9 +106,9 @@ public class MemberPaymentSummaryController { public Result modify(@Param("ids") String[] ids, String paymentMoney, boolean isPay, String remark) { List idList = Arrays.asList(ids); if (Lang.isNotEmpty(idList)) { - if (!isPay) { + if (isPay) { //未缴费设为已缴费 - memberPaymentService.update(Chain.make("paymentMoney", paymentMoney) + memberPaymentService.update(Chain.make("paymentMoney", NumberUtil.mul(paymentMoney, "100")) .add("remark", remark).add("isPayment", 1) .add("paymentTime", new Date()), Cnd.where("id", "in", idList)); @@ -134,9 +136,16 @@ public class MemberPaymentSummaryController { @ApiOperation("下载导入模版") @SaCheckPermission("member.payment.summary") public void downloadImportTemp(HttpServletResponse response) { + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("工号", "loginname", 20)); + exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); + exportEntities.add(new ExcelExportEntity("缴纳金额", "paymentBase", 20)); + exportEntities.add(new ExcelExportEntity("是否缴费", "isPay", 20)); + exportEntities.add(new ExcelExportEntity("备注", "remark", 20)); + ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); - Workbook workbook = ExcelExportUtil.exportExcel(exportParams, MemberPaymentTemp.class, new ArrayList<>()); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, new ArrayList<>()); CommonDownloadUtil.download("会员缴费导入模版.xlsx", workbook, response); } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java index 2fb56312..493fc088 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/sourcechange/param/SourceChangePageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.staffmanage.sourcechange.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.sys.models.Sys_user_history; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,7 +15,7 @@ import java.util.List; */ @EqualsAndHashCode(callSuper = true) @Data -public class SourceChangePageForm extends PageForm { +public class SourceChangePageForm extends PageForm { private String unionId; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java index 6491de2e..7dec0016 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/specialstaff/param/SpecialStaffPageForm.java @@ -1,7 +1,6 @@ package com.budwk.app.zhgh.staffmanage.specialstaff.param; import com.budwk.app.base.param.PageForm; -import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,7 +13,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -public class SpecialStaffPageForm extends PageForm { +public class SpecialStaffPageForm extends PageForm { private String unionId; diff --git a/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java b/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java index 81da1f02..e414a65e 100644 --- a/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java +++ b/src/main/java/com/budwk/app/zhgh/unionReimburse/controller/UnionReimburseMineController.java @@ -99,6 +99,7 @@ public class UnionReimburseMineController { cnd.and("info.userName", "like", "%" + userName + "%"); } cnd.desc("info.createTime"); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); sql.setCondition(cnd); Pagination pagination = unionReimburseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageManageController.java b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageManageController.java new file mode 100644 index 00000000..831abc84 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageManageController.java @@ -0,0 +1,202 @@ +package com.budwk.app.zhgh.user.childManage.controller; + + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.services.SysDictService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.vo.EnrollmentRegistrationPageForm; +import com.budwk.app.zhgh.user.childManage.models.ChildManage; +import com.budwk.app.zhgh.user.childManage.service.ChildManageService; +import com.budwk.app.zhgh.user.childManage.vo.ChildManagePageForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +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.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@IocBean +@At("/platform/childManage/manage") +@Ok("json:full") +@Slf4j +@Api("子女信息管理") +public class ChildManageManageController { + + @Inject + private ChildManageService childManageService; + @Inject + private SysDictService sysDictService; + + @At("") + @Ok("beetl:/platform/zhgh/user/childManage/manage/index.html") + @SaCheckPermission + public void index() {} + + @At + @ApiOperation("分页查询") + @SaCheckPermission("childManage.manage") + public Result pageData(PageForm pageForm, + Integer year, + String searchName, + String searchKeyword, + String childrenSex, + String unionId, + String unitId, + String childrenGrade) { + Sql sql = Sqls.create(""" + SELECT + info.* + FROM + child_manage info + $condition + """); + Cnd cnd = Cnd.NEW(); + // 模糊查询 + if (searchName != null && !searchName.isEmpty() && searchKeyword != null && !searchKeyword.isEmpty()) { + switch (searchName) { + case "info.childrenName": + cnd.and("info.childrenName", "like", "%" + searchKeyword + "%"); + break; + case "info.guardianUserName": // 合并后的监护人查询 + cnd.and(Cnd.exps("info.guardianUserName1", "like", "%" + searchKeyword + "%") + .or("info.guardianUserName2", "like", "%" + searchKeyword + "%")); + break; + } + } + + // 工会筛选 (查询两个监护人的工会) + if (unionId != null && !unionId.isEmpty()) { + cnd.and(Cnd.exps("info.guardianUnionId1", "=", unionId) + .or("info.guardianUnionId2", "=", unionId)); + } + // 所属单位筛选 (查询两个监护人的单位) + if (unitId != null && !unitId.isEmpty()) { + cnd.and(Cnd.exps("info.guardianUnitId1", "=", unitId) + .or("info.guardianUnitId2", "=", unitId)); + } + + cnd.andEX("YEAR(info.applyTime)", "=", year); + cnd.andEX("info.childrenSex", "=", childrenSex); + cnd.andEX("info.childrenGrade", "=", childrenGrade); + sql.setCondition(cnd); + Pagination pagination = childManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("删除子女信息") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("childManage.manage") + @SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}") + public Result doDelete(String id) { + childManageService.dao().delete(ChildManage.class, id); + return Result.success(); + } + + @At + @Ok("void") + @SaCheckPermission("childManage.manage") + public void doExportExcel(@Param("data") ChildManagePageForm pageForm, HttpServletResponse response) { + try { + Sql sql = childManageService.getSql(pageForm); + List map = childManageService.listMap(sql); + + List dictList = sysDictService.getSubListByCode("CHILD_MANAGE_GRADE"); + + map.forEach(item -> { + // 年龄计算 + String birthday = item.getString("childrenBirthday"); + if (birthday != null && !birthday.isEmpty()) { + item.put("age", calculateAge(birthday)); + } + Sys_dict dict = dictList.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("childrenGrade"))).findFirst().orElse(null); + item.put("childrenGrade", dict.getName()); + }); + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + + entityList.add(new ExcelExportEntity("年级", "childrenGrade", 20)); + entityList.add(new ExcelExportEntity("子女姓名", "childrenName", 20)); + entityList.add(new ExcelExportEntity("性别", "childrenSex", 20)); + entityList.add(new ExcelExportEntity("出生日期", "childrenBirthday", 20)); + entityList.add(new ExcelExportEntity("年龄", "age", 20)); + entityList.add(new ExcelExportEntity("就读学校", "childrenCurrentSchool", 20)); + entityList.add(new ExcelExportEntity("监护人1", "guardianUserName1", 20)); + entityList.add(new ExcelExportEntity("手机号码", "guardianMobile1", 20)); + entityList.add(new ExcelExportEntity("所在单位", "guardianUnitName1", 20)); + entityList.add(new ExcelExportEntity("监护人2", "guardianUserName2", 20)); + entityList.add(new ExcelExportEntity("手机号码", "guardianMobile2", 20)); + entityList.add(new ExcelExportEntity("所在单位", "guardianUnitName2", 20)); + + + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("子女信息管理汇总.xlsx", "UTF-8")); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map); + workbook.write(response.getOutputStream()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + /** + * 计算年龄 + * @param birthday 出生日期 + * @return 年龄 + */ + private String calculateAge(String birthday) { + if (birthday == null || birthday.isEmpty()) { + return ""; + } + + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date birthDate = sdf.parse(birthday); + Calendar birthCal = Calendar.getInstance(); + birthCal.setTime(birthDate); + + Calendar today = Calendar.getInstance(); + int age = today.get(Calendar.YEAR) - birthCal.get(Calendar.YEAR); + + // 检查是否还没过生日 + if (today.get(Calendar.DAY_OF_YEAR) < birthCal.get(Calendar.DAY_OF_YEAR)) { + age--; + } + + return String.valueOf(age >= 0 ? age : 0); + } catch (Exception e) { + log.error("计算年龄失败", e); + return ""; + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageMineController.java b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageMineController.java new file mode 100644 index 00000000..7e8ff689 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageMineController.java @@ -0,0 +1,74 @@ +package com.budwk.app.zhgh.user.childManage.controller; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.user.childManage.models.ChildManage; +import com.budwk.app.zhgh.user.childManage.service.ChildManageService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +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; + +@IocBean +@At("/platform/childManage/mine") +@Ok("json:full") +@Slf4j +@Api("子女信息管理我的") +public class ChildManageMineController { + + @Inject + private ChildManageService childManageService; + + @At("") + @Ok("beetl:/platform/zhgh/user/childManage/mine/index.html") + @SaCheckPermission + public void index() {} + + @At + @ApiOperation("分页查询") + @SaCheckPermission("childManage.mine") + public Result pageData(PageForm pageForm, Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.* + FROM + child_manage info + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("YEAR(info.applyTime)", "=", year); + // 使用 or 条件查询两个监护人字段 + cnd.and(Cnd.exps("info.guardianUserId1", "=", SecurityUtil.getUserId()) + .or("info.guardianUserId2", "=", SecurityUtil.getUserId())); + sql.setCondition(cnd); + Pagination pagination = childManageService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + + @At + @ApiOperation("删除子女信息") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("childManage.mine") + @SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}") + public Result doDelete(String id) { + childManageService.dao().delete(ChildManage.class, id); + return Result.success(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageWriteController.java b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageWriteController.java new file mode 100644 index 00000000..ce7a2df5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/controller/ChildManageWriteController.java @@ -0,0 +1,120 @@ +package com.budwk.app.zhgh.user.childManage.controller; + + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +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.result.Result; +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.zhgh.enrollmentRegistration.model.EnrollmentRegistration; +import com.budwk.app.zhgh.user.childManage.models.ChildManage; +import com.budwk.app.zhgh.user.childManage.service.ChildManageService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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; + +@IocBean +@At("/platform/childManage/write") +@Ok("json:full") +@Slf4j +@Api("子女信息管理信息填写") +public class ChildManageWriteController { + + @Inject + private Dao dao; + @Inject + private ChildManageService childManageService; + + + @At("") + @Ok("beetl:/platform/zhgh/user/childManage/write/index.html") + @SaCheckPermission + public void index() {} + + @At + @ApiOperation("保存子女信息") + @SaCheckPermission("childManage.write") + @SLog(tag = "子女信息管理-信息填写", msg = "保存子女信息") + public Result save(@Param("data") ChildManage childManage) { + if(StrUtil.isBlank(childManage.getId())) childManage.setApplyTime(DateUtil.now()); + dao.insertOrUpdate(childManage); + return Result.success(); + } + + @At + @ApiOperation("查询用户") + @SaCheckPermission("childManage.write") + @SLog(tag = "查询用户", msg = "查询用户") + public Object listUser(String keyword) { + Sql sql = Sqls.create(""" + select + id, + username as userName, + loginname as loginName, + sex, + mobile, + technicalTitle, + IFNULL(unitname, '暂无') as unitName, + unitid as unitId, + unionid as unionId, + unionname as unionName + from + vw_user + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(keyword)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.or(View_user::getLoginname, "like", "%" + keyword + "%"); + seg.or(View_user::getUsername, "like", "%" + keyword + "%"); + cnd.and(seg); + } + if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { + if(AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + cnd.and(View_user::getUnionId, "=", SecurityUtil.getUnionId()); + } else { + cnd.and(View_user::getId, "=", SecurityUtil.getUserId()); + } + + } + sql.setCondition(cnd); + Pagination pagination = childManageService.listPageMap(1, 50, sql); + return Result.success(pagination.getList()); + } + + @At + @SaCheckLogin + @ApiOperation("查询身份证是否重复") + public Result getIsRepeatByIdCard(String idCard, String id) { + int count = childManageService.dao().count(ChildManage.class, + Cnd.where(ChildManage::getChildrenIdCard, "=", idCard) + .and("YEAR(applyTime)", "=", DateUtil.thisYear()) + .andEX(ChildManage::getId, "!=", id)); + + + return Result.success(count); + } + + @At + @SaCheckLogin + public Result findOne(String id) { + return Result.success(childManageService.dao().fetch(ChildManage.class, id)); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java b/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java new file mode 100644 index 00000000..19cd57be --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/h5controller/H5ChildManageController.java @@ -0,0 +1,27 @@ +package com.budwk.app.zhgh.user.childManage.h5controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.extern.slf4j.Slf4j; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @version 1.0 + * @Author hqw + * @name:H5ChildManageController + * @Date 2025/9/4 8:52 + * @注释 + */ +@Slf4j +@IocBean +@Ok("json") +@At("/platform/childManage/manage/h5") +public class H5ChildManageController { + + @At("") + @Ok("beetl:/platform/zhghh5/staffmanage/childmanage/") + @SaCheckPermission("childManage.h5") + public void index() { + } +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/models/ChildManage.java b/src/main/java/com/budwk/app/zhgh/user/childManage/models/ChildManage.java new file mode 100644 index 00000000..83955f5c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/models/ChildManage.java @@ -0,0 +1,186 @@ +package com.budwk.app.zhgh.user.childManage.models; + + +import cn.hutool.json.JSONObject; +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; + +import java.io.Serializable; +import java.util.List; + +/** + * @ClassName ChildManage + * @Author hongqiwei + * @Date 2025/8/30 10:23 + * @Version 1.0 + * @Description TODO + */ + + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("child_manage") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("子女信息管理") +public class ChildManage extends BaseModel implements Serializable { + + + @Column + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Prev(els = {@EL("uuid()")}) + private String id; + + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("guardianUserId1") + private String guardianUserId1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("监护人1(教工)姓名") + private String guardianUserName1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("工号") + private String guardianLoginName1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在工会Id") + private String guardianUnionId1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在工会") + private String guardianUnionName1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("手机号码") + private String guardianMobile1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在单位Id") + private String guardianUnitId1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在单位") + private String guardianUnitName1; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("guardianUserId2") + private String guardianUserId2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("监护人2(教工)姓名") + private String guardianUserName2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("工号") + private String guardianLoginName2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在工会Id") + private String guardianUnionId2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在工会") + private String guardianUnionName2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("手机号码") + private String guardianMobile2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在单位Id") + private String guardianUnitId2; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在单位") + private String guardianUnitName2; + + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("子女姓名") + private String childrenName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("就读年级") + private String childrenGrade; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("入学年份") + private String childrenYear; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("身份证号") + private String childrenIdCard; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("出身年月") + private String childrenBirthday; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("性别") + private String childrenSex; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("国籍") + private String childrenCountry; + + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("现就读学校") + private String childrenCurrentSchool; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("中考总成绩") + private String childrenMiddleScore; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("学科组合") + private String childrenSubjectCombination; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 100) + @Comment("子女户籍所在地") + private String childrenHuKouAddress; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 200) + @Comment("备注") + private String note; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("填写时间") + private String applyTime; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/service/ChildManageService.java b/src/main/java/com/budwk/app/zhgh/user/childManage/service/ChildManageService.java new file mode 100644 index 00000000..bbc30ce5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/service/ChildManageService.java @@ -0,0 +1,10 @@ +package com.budwk.app.zhgh.user.childManage.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.user.childManage.models.ChildManage; +import com.budwk.app.zhgh.user.childManage.vo.ChildManagePageForm; +import org.nutz.dao.sql.Sql; + +public interface ChildManageService extends BaseService { + Sql getSql(ChildManagePageForm pageForm); +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/service/impl/ChildManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/user/childManage/service/impl/ChildManageServiceImpl.java new file mode 100644 index 00000000..17de89e3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/service/impl/ChildManageServiceImpl.java @@ -0,0 +1,62 @@ +package com.budwk.app.zhgh.user.childManage.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.user.childManage.models.ChildManage; +import com.budwk.app.zhgh.user.childManage.service.ChildManageService; +import com.budwk.app.zhgh.user.childManage.vo.ChildManagePageForm; +import lombok.extern.slf4j.Slf4j; +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.IocBean; + + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class ChildManageServiceImpl extends BaseServiceImpl implements ChildManageService { + + public ChildManageServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Sql getSql(ChildManagePageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.* + FROM + child_manage info + $condition + """); + Cnd cnd = Cnd.NEW(); + // 模糊查询 + if (pageForm.getSearchName() != null && !pageForm.getSearchName().isEmpty() && pageForm.getSearchKeyword() != null && !pageForm.getSearchKeyword().isEmpty()) { + switch (pageForm.getSearchName()) { + case "info.childrenName": + cnd.and("info.childrenName", "like", "%" + pageForm.getSearchKeyword() + "%"); + break; + case "info.guardianUserName": // 合并后的监护人查询 + cnd.and(Cnd.exps("info.guardianUserName1", "like", "%" + pageForm.getSearchKeyword() + "%") + .or("info.guardianUserName2", "like", "%" + pageForm.getSearchKeyword() + "%")); + break; + } + } + + // 工会筛选 (查询两个监护人的工会) + if (pageForm.getUnionId() != null && !pageForm.getUnionId().isEmpty()) { + cnd.and(Cnd.exps("info.guardianUnionId1", "=", pageForm.getUnionId()) + .or("info.guardianUnionId2", "=", pageForm.getUnionId())); + } + // 所属单位筛选 (查询两个监护人的单位) + if (pageForm.getUnitId() != null && !pageForm.getUnitId().isEmpty()) { + cnd.and(Cnd.exps("info.guardianUnitId1", "=", pageForm.getUnitId()) + .or("info.guardianUnitId2", "=", pageForm.getUnitId())); + } + + cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear()); + cnd.andEX("info.childrenGrade", "=", pageForm.getChildrenGrade()); + sql.setCondition(cnd); + return sql; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/user/childManage/vo/ChildManagePageForm.java b/src/main/java/com/budwk/app/zhgh/user/childManage/vo/ChildManagePageForm.java new file mode 100644 index 00000000..9fb907a1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/user/childManage/vo/ChildManagePageForm.java @@ -0,0 +1,14 @@ +package com.budwk.app.zhgh.user.childManage.vo; +import com.budwk.app.base.param.PageForm; +import lombok.Data; + +@Data +public class ChildManagePageForm extends PageForm { + + private Integer year; + private String unionId; + private String unitId; + private String childrenGrade; + private String searchName; + private String searchKeyword; +} diff --git a/src/main/java/com/budwk/app/zhgh/user/singleTeacher/param/SingleTeacherPageForm.java b/src/main/java/com/budwk/app/zhgh/user/singleTeacher/param/SingleTeacherPageForm.java index ee34fe1c..e23a382a 100644 --- a/src/main/java/com/budwk/app/zhgh/user/singleTeacher/param/SingleTeacherPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/user/singleTeacher/param/SingleTeacherPageForm.java @@ -14,13 +14,25 @@ public class SingleTeacherPageForm extends PageForm { @ApiModelProperty("分工会ID") private String unionId; - @ApiModelProperty("部门ID") + @ApiModelProperty("单位ID") private String unitId; + @ApiModelProperty("性别") + private String sex; + @ApiModelProperty("婚姻状况") private String maritalStatus; + @ApiModelProperty("学历") + private String education; + @ApiModelProperty("年龄范围") private Integer[] age; + @ApiModelProperty("人员类型") + private String personType; + + @ApiModelProperty("在职状态") + private String userState; + } diff --git a/src/main/java/com/budwk/app/zhgh/user/singleTeacher/service/impl/SingleTeacherServiceImpl.java b/src/main/java/com/budwk/app/zhgh/user/singleTeacher/service/impl/SingleTeacherServiceImpl.java index e34f971c..a6db069a 100644 --- a/src/main/java/com/budwk/app/zhgh/user/singleTeacher/service/impl/SingleTeacherServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/user/singleTeacher/service/impl/SingleTeacherServiceImpl.java @@ -78,7 +78,9 @@ public class SingleTeacherServiceImpl extends BaseServiceImpl imp u.loginname, u.sex, u.unionName, - u.unitName + u.unitName, + u.personType, + u.userState FROM `single_teacher` st LEFT JOIN vw_user u ON u.id = st.userId @@ -93,6 +95,11 @@ public class SingleTeacherServiceImpl extends BaseServiceImpl imp } cnd.where().andBetween("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", pageForm.getAge()[0], pageForm.getAge()[1]); cnd.andEX("u.unionId", "=", pageForm.getUnionId()); + cnd.andEX("u.sex", "=", pageForm.getSex()); + cnd.andEX("u.unitId", "=", pageForm.getUnitId()); + cnd.andEX("u.personType", "=", pageForm.getPersonType()); + cnd.andEX("u.userState", "=", pageForm.getUserState()); + cnd.andEX("st.education", "=", pageForm.getEducation()); cnd.andEX("u.maritalStatus", "=", pageForm.getMaritalStatus()); if (StrUtil.isAllNotBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java index 050d7e74..b77c57c9 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java @@ -96,11 +96,11 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl v.getString("welfareUnionId").equals(union.getString("id"))).count(); + long teacherSum = welfareSelectionList.stream().filter(v -> (union.getString("id")).equals(v.getString("welfareUnionId"))).count(); 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 -> (union.getString("id")).equals(v.getString("welfareUnionId")) && v.getBoolean("has_selected")).count(); union.put("selectedNum", selectedNum); // 未选人数 @@ -108,7 +108,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl 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 -> (union.getString("id")).equals(v.getString("welfareUnionId")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); union.put(option.getId(), count); } } diff --git a/src/main/resources/static/assets/platform/cron/css/easyui.min.css b/src/main/resources/static/assets/platform/cron/css/easyui.min.css deleted file mode 100644 index 3e629550..00000000 --- a/src/main/resources/static/assets/platform/cron/css/easyui.min.css +++ /dev/null @@ -1,2301 +0,0 @@ -.panel { - overflow: hidden; - text-align: left; -} -.panel-header, -.panel-body { - border-width: 1px; - border-style: solid; -} -.panel-header { - padding: 5px; - position: relative; -} -.panel-title { - background: url("images/blank.gif") no-repeat; -} -.panel-header-noborder { - border-width: 0 0 1px 0; -} -.panel-body { - overflow: auto; - border-top-width: 0px; -} -.panel-body-noheader { - border-top-width: 1px; -} -.panel-body-noborder { - border-width: 0px; -} -.panel-with-icon { - padding-left: 18px; -} -.panel-icon, -.panel-tool { - position: absolute; - top: 50%; - margin-top: -8px; - height: 16px; - overflow: hidden; -} -.panel-icon { - left: 5px; - width: 16px; -} -.panel-tool { - right: 5px; - width: auto; -} -.panel-tool a { - display: inline-block; - width: 16px; - height: 16px; - opacity: 0.6; - filter: alpha(opacity=60); - margin: 0 0 0 2px; - vertical-align: top; -} -.panel-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - background-color: #e6e6e6; - -moz-border-radius: 3px 3px 3px 3px; - -webkit-border-radius: 3px 3px 3px 3px; - border-radius: 3px 3px 3px 3px; -} -.panel-loading { - padding: 11px 0px 10px 30px; -} -.panel-noscroll { - overflow: hidden; -} -.panel-fit, -.panel-fit body { - height: 100%; - margin: 0; - padding: 0; - border: 0; - overflow: hidden; -} -.panel-loading { - background: url("images/loading.gif") no-repeat 10px 10px; -} -.panel-tool-close { - background: url("images/panel_tools.png") no-repeat -16px 0px; -} -.panel-tool-min { - background: url("images/panel_tools.png") no-repeat 0px 0px; -} -.panel-tool-max { - background: url("images/panel_tools.png") no-repeat 0px -16px; -} -.panel-tool-restore { - background: url("images/panel_tools.png") no-repeat -16px -16px; -} -.panel-tool-collapse { - background: url("images/panel_tools.png") no-repeat -32px 0; -} -.panel-tool-expand { - background: url("images/panel_tools.png") no-repeat -32px -16px; -} -.panel-header, -.panel-body { - border-color: #d4d4d4; -} -.panel-header { - background-color: #f2f2f2; - background: -webkit-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -moz-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -o-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: linear-gradient(to bottom, #ffffff 0, #f2f2f2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.panel-body { - background-color: #ffffff; - color: #333; - font-size: 12px; -} -.panel-title { - font-size: 12px; - font-weight: bold; - color: #777; - height: 16px; - line-height: 16px; -} -.accordion { - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.accordion .accordion-header { - border-width: 0 0 1px; - cursor: pointer; -} -.accordion .accordion-body { - border-width: 0 0 1px; -} -.accordion-noborder { - border-width: 0; -} -.accordion-noborder .accordion-header { - border-width: 0 0 1px; -} -.accordion-noborder .accordion-body { - border-width: 0 0 1px; -} -.accordion-collapse { - background: url("images/accordion_arrows.png") no-repeat 0 0; -} -.accordion-expand { - background: url("images/accordion_arrows.png") no-repeat -16px 0; -} -.accordion { - background: #ffffff; - border-color: #d4d4d4; -} -.accordion .accordion-header { - background: #f2f2f2; - filter: none; -} -.accordion .accordion-header-selected { - background: #0081c2; -} -.accordion .accordion-header-selected .panel-title { - color: #fff; -} -.window { - overflow: hidden; - padding: 5px; - border-width: 1px; - border-style: solid; -} -.window .window-header { - background: transparent; - padding: 0px 0px 6px 0px; -} -.window .window-body { - border-width: 1px; - border-style: solid; - border-top-width: 0px; -} -.window .window-body-noheader { - border-top-width: 1px; -} -.window .window-header .panel-icon, -.window .window-header .panel-tool { - top: 50%; - margin-top: -11px; -} -.window .window-header .panel-icon { - left: 1px; -} -.window .window-header .panel-tool { - right: 1px; -} -.window .window-header .panel-with-icon { - padding-left: 18px; -} -.window-proxy { - position: absolute; - overflow: hidden; -} -.window-proxy-mask { - position: absolute; - filter: alpha(opacity=5); - opacity: 0.05; -} -.window-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - filter: alpha(opacity=40); - opacity: 0.4; - font-size: 1px; - *zoom: 1; - overflow: hidden; -} -.window, -.window-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.window-shadow { - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.window, -.window .window-body { - border-color: #d4d4d4; -} -.window { - background-color: #f2f2f2; - background: -webkit-linear-gradient(top, #ffffff 0, #f2f2f2 20%); - background: -moz-linear-gradient(top, #ffffff 0, #f2f2f2 20%); - background: -o-linear-gradient(top, #ffffff 0, #f2f2f2 20%); - background: linear-gradient(to bottom, #ffffff 0, #f2f2f2 20%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.window-proxy { - border: 1px dashed #d4d4d4; -} -.window-proxy-mask, -.window-mask { - background: #ccc; -} -.dialog-content { - overflow: auto; -} -.dialog-toolbar { - padding: 2px 5px; -} -.dialog-tool-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.dialog-button { - padding: 5px; - text-align: right; -} -.dialog-button .l-btn { - margin-left: 5px; -} -.dialog-toolbar, -.dialog-button { - background: #f5f5f5; -} -.dialog-toolbar { - border-bottom: 1px solid #e6e6e6; -} -.dialog-button { - border-top: 1px solid #e6e6e6; -} -.combo { - display: inline-block; - white-space: nowrap; - margin: 0; - padding: 0; - border-width: 1px; - border-style: solid; - overflow: hidden; - vertical-align: middle; -} -.combo .combo-text { - font-size: 12px; - border: 0px; - line-height: 20px; - height: 20px; - margin: 0; - padding: 0px 2px; - *margin-top: -1px; - *height: 18px; - *line-height: 18px; - _height: 18px; - _line-height: 18px; - vertical-align: baseline; -} -.combo-arrow { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.combo-arrow-hover { - opacity: 1; - filter: alpha(opacity=100); -} -.combo-panel { - overflow: auto; -} -.combo-arrow { - background: url("images/combo_arrow.png") no-repeat center center; -} -.combo, -.combo-panel { - background-color: #ffffff; -} -.combo { - border-color: #d4d4d4; - background-color: #ffffff; -} -.combo-arrow { - background-color: #f2f2f2; -} -.combo-arrow-hover { - background-color: #e6e6e6; -} -.combobox-item { - padding: 2px; - font-size: 12px; - padding: 3px; - padding-right: 0px; -} -.combobox-item-hover { - background-color: #e6e6e6; - color: #00438a; -} -.combobox-item-selected { - background-color: #0081c2; - color: #fff; -} -.layout { - position: relative; - overflow: hidden; - margin: 0; - padding: 0; - z-index: 0; -} -.layout-panel { - position: absolute; - overflow: hidden; -} -.layout-panel-east, -.layout-panel-west { - z-index: 2; -} -.layout-panel-north, -.layout-panel-south { - z-index: 3; -} -.layout-expand { - position: absolute; - padding: 0px; - font-size: 1px; - cursor: pointer; - z-index: 1; -} -.layout-expand .panel-header, -.layout-expand .panel-body { - background: transparent; - filter: none; - overflow: hidden; -} -.layout-expand .panel-header { - border-bottom-width: 0px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - position: absolute; - font-size: 1px; - display: none; - z-index: 5; -} -.layout-split-proxy-h { - width: 5px; - cursor: e-resize; -} -.layout-split-proxy-v { - height: 5px; - cursor: n-resize; -} -.layout-mask { - position: absolute; - background: #fafafa; - filter: alpha(opacity=10); - opacity: 0.1; - z-index: 4; -} -.layout-button-up { - background: url("images/layout_arrows.png") no-repeat -16px -16px; -} -.layout-button-down { - background: url("images/layout_arrows.png") no-repeat -16px 0; -} -.layout-button-left { - background: url("images/layout_arrows.png") no-repeat 0 0; -} -.layout-button-right { - background: url("images/layout_arrows.png") no-repeat 0 -16px; -} -.layout-split-proxy-h, -.layout-split-proxy-v { - background-color: #bbb; -} -.layout-split-north { - border-bottom: 5px solid #eee; -} -.layout-split-south { - border-top: 5px solid #eee; -} -.layout-split-east { - border-left: 5px solid #eee; -} -.layout-split-west { - border-right: 5px solid #eee; -} -.layout-expand { - background-color: #f2f2f2; -} -.layout-expand-over { - background-color: #f2f2f2; -} -.tabs-container { - overflow: hidden; -} -.tabs-header { - border-width: 1px; - border-style: solid; - border-bottom-width: 0; - position: relative; - padding: 0; - padding-top: 2px; - overflow: hidden; -} -.tabs-header-plain { - border: 0; - background: transparent; -} -.tabs-scroller-left, -.tabs-scroller-right { - position: absolute; - top: auto; - bottom: 0; - width: 18px; - height: 28px !important; - height: 30px; - font-size: 1px; - display: none; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.tabs-scroller-left { - left: 0; -} -.tabs-scroller-right { - right: 0; -} -.tabs-header-plain .tabs-scroller-left, -.tabs-header-plain .tabs-scroller-right { - height: 25px !important; - height: 27px; -} -.tabs-tool { - position: absolute; - bottom: 0; - padding: 1px; - overflow: hidden; - border-width: 1px; - border-style: solid; -} -.tabs-header-plain .tabs-tool { - padding: 0 1px; -} -.tabs-wrap { - position: relative; - left: 0; - overflow: hidden; - width: 100%; - margin: 0; - padding: 0; -} -.tabs-scrolling { - margin-left: 18px; - margin-right: 18px; -} -.tabs-disabled { - opacity: 0.3; - filter: alpha(opacity=30); -} -.tabs { - list-style-type: none; - height: 26px; - margin: 0px; - padding: 0px; - padding-left: 4px; - width: 5000px; - border-style: solid; - border-width: 0 0 1px 0; -} -.tabs li { - float: left; - display: inline-block; - margin: 0 4px -1px 0; - padding: 0; - position: relative; - border: 0; -} -.tabs li a.tabs-inner { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0 10px; - height: 25px; - line-height: 25px; - text-align: center; - white-space: nowrap; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.tabs li.tabs-selected a.tabs-inner { - font-weight: bold; - outline: none; -} -.tabs li.tabs-selected a:hover.tabs-inner { - cursor: default; - pointer: default; -} -.tabs li a.tabs-close, -.tabs-p-tool { - position: absolute; - font-size: 1px; - display: block; - height: 12px; - padding: 0; - top: 50%; - margin-top: -6px; - overflow: hidden; -} -.tabs li a.tabs-close { - width: 12px; - right: 5px; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs-p-tool { - right: 16px; -} -.tabs-p-tool a { - display: inline-block; - font-size: 1px; - width: 12px; - height: 12px; - margin: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.tabs li a:hover.tabs-close, -.tabs-p-tool a:hover { - opacity: 1; - filter: alpha(opacity=100); - cursor: hand; - cursor: pointer; -} -.tabs-with-icon { - padding-left: 18px; -} -.tabs-icon { - position: absolute; - width: 16px; - height: 16px; - left: 10px; - top: 50%; - margin-top: -8px; -} -.tabs-title { - font-size: 12px; -} -.tabs-closable { - padding-right: 8px; -} -.tabs-panels { - margin: 0px; - padding: 0px; - border-width: 1px; - border-style: solid; - border-top-width: 0; - overflow: hidden; -} -.tabs-header-bottom { - border-width: 0 1px 1px 1px; - padding: 0 0 2px 0; -} -.tabs-header-bottom .tabs { - border-width: 1px 0 0 0; -} -.tabs-header-bottom .tabs li { - margin: -1px 4px 0 0; -} -.tabs-header-bottom .tabs li a.tabs-inner { - -moz-border-radius: 0 0 5px 5px; - -webkit-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; -} -.tabs-header-bottom .tabs-tool { - top: 0; -} -.tabs-header-bottom .tabs-scroller-left, -.tabs-header-bottom .tabs-scroller-right { - top: 0; - bottom: auto; -} -.tabs-panels-top { - border-width: 1px 1px 0 1px; -} -.tabs-header-left { - float: left; - border-width: 1px 0 1px 1px; - padding: 0; -} -.tabs-header-right { - float: right; - border-width: 1px 1px 1px 0; - padding: 0; -} -.tabs-header-left .tabs-wrap, -.tabs-header-right .tabs-wrap { - height: 100%; -} -.tabs-header-left .tabs { - height: 100%; - padding: 4px 0 0 4px; - border-width: 0 1px 0 0; -} -.tabs-header-right .tabs { - height: 100%; - padding: 4px 4px 0 0; - border-width: 0 0 0 1px; -} -.tabs-header-left .tabs li, -.tabs-header-right .tabs li { - display: block; - width: 100%; - position: relative; -} -.tabs-header-left .tabs li { - left: auto; - right: 0; - margin: 0 -1px 4px 0; - float: right; -} -.tabs-header-right .tabs li { - left: 0; - right: auto; - margin: 0 0 4px -1px; - float: left; -} -.tabs-header-left .tabs li a.tabs-inner { - display: block; - text-align: left; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.tabs-header-right .tabs li a.tabs-inner { - display: block; - text-align: left; - -moz-border-radius: 0 5px 5px 0; - -webkit-border-radius: 0 5px 5px 0; - border-radius: 0 5px 5px 0; -} -.tabs-panels-right { - float: right; - border-width: 1px 1px 1px 0; -} -.tabs-panels-left { - float: left; - border-width: 1px 0 1px 1px; -} -.tabs-header-noborder, -.tabs-panels-noborder { - border: 0px; -} -.tabs-header-plain { - border: 0px; - background: transparent; -} -.tabs li a.tabs-inner:hover { - background: #e6e6e6; - color: #00438a; - filter: none; -} -.tabs li.tabs-selected a.tabs-inner { - background-color: #ffffff; - color: #777; - background: -webkit-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: -moz-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: -o-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: linear-gradient(to bottom, #ffffff 0, #ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: -moz-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: -o-linear-gradient(top, #ffffff 0, #ffffff 100%); - background: linear-gradient(to bottom, #ffffff 0, #ffffff 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: -moz-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: -o-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: linear-gradient(to right, #ffffff 0, #ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - background: -webkit-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: -moz-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: -o-linear-gradient(left, #ffffff 0, #ffffff 100%); - background: linear-gradient(to right, #ffffff 0, #ffffff 100%); - background-repeat: repeat-y; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); -} -.tabs li a.tabs-inner { - color: #777; - background-color: #f2f2f2; - background: -webkit-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -moz-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -o-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: linear-gradient(to bottom, #ffffff 0, #f2f2f2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.tabs-header, -.tabs-tool { - background-color: #f2f2f2; -} -.tabs-header-plain { - background: transparent; -} -.tabs-header, -.tabs-scroller-left, -.tabs-scroller-right, -.tabs-tool, -.tabs, -.tabs-panels, -.tabs li a.tabs-inner, -.tabs li.tabs-selected a.tabs-inner, -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, -.tabs-header-left .tabs li.tabs-selected a.tabs-inner, -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-color: #d4d4d4; -} -.tabs-p-tool a:hover, -.tabs li a:hover.tabs-close, -.tabs-scroller-over { - background-color: #e6e6e6; -} -.tabs li.tabs-selected a.tabs-inner { - border-bottom: 1px solid #ffffff; -} -.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { - border-top: 1px solid #ffffff; -} -.tabs-header-left .tabs li.tabs-selected a.tabs-inner { - border-right: 1px solid #ffffff; -} -.tabs-header-right .tabs li.tabs-selected a.tabs-inner { - border-left: 1px solid #ffffff; -} -a.l-btn { - background-position: right 0; - text-decoration: none; - display: inline-block; - zoom: 1; - height: 24px; - padding-right: 18px; - cursor: pointer; - outline: none; -} -a.l-btn-plain { - padding-right: 5px; - border: 0; - padding: 1px 6px 1px 1px; -} -a.l-btn-disabled { - color: #ccc; - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -a.l-btn span.l-btn-left { - display: inline-block; - background-position: 0 -48px; - padding: 4px 0px 4px 18px; - line-height: 16px; - height: 16px; -} -a.l-btn-plain span.l-btn-left { - padding-left: 5px; -} -a.l-btn span span.l-btn-text { - display: inline-block; - vertical-align: baseline; - width: auto; - height: 16px; - line-height: 16px; - font-size: 12px; - padding: 0; - margin: 0; -} -a.l-btn span span.l-btn-icon-left { - padding: 0 0 0 20px; - background-position: left center; -} -a.l-btn span span.l-btn-icon-right { - padding: 0 20px 0 0; - background-position: right center; -} -a.l-btn span span span.l-btn-empty { - display: inline-block; - margin: 0; - padding: 0; - width: 16px; -} -a:hover.l-btn { - background-position: right -24px; - outline: none; - text-decoration: none; -} -a:hover.l-btn span.l-btn-left { - background-position: 0 bottom; -} -a:hover.l-btn-plain { - padding: 0 5px 0 0; -} -a:hover.l-btn-disabled { - background-position: right 0; -} -a:hover.l-btn-disabled span.l-btn-left { - background-position: 0 -48px; -} -a.l-btn .l-btn-focus { - outline: #0000ff dotted thin; -} -a.l-btn { - color: #444; - background-image: url("images/linkbutton_bg.png"); - background-repeat: no-repeat; - background: #f5f5f5; - background-repeat: repeat-x; - border: 1px solid #bbb; - background: -webkit-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: -moz-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: -o-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: linear-gradient(to bottom, #ffffff 0, #e6e6e6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -a.l-btn span.l-btn-left { - background-image: url("images/linkbutton_bg.png"); - background-repeat: no-repeat; - background-image: none; -} -a:hover.l-btn { - background: #e6e6e6; - color: #00438a; - border: 1px solid #ddd; - filter: none; -} -a.l-btn-plain, -a.l-btn-plain span.l-btn-left { - background: transparent; - border: 0; - filter: none; -} -a:hover.l-btn-plain { - background: #e6e6e6; - color: #00438a; - border: 1px solid #ddd; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -a.l-btn-disabled, -a:hover.l-btn-disabled { - color: #444; - filter: alpha(opacity=50); - background: #f5f5f5; - color: #444; - background: -webkit-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: -moz-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: -o-linear-gradient(top, #ffffff 0, #e6e6e6 100%); - background: linear-gradient(to bottom, #ffffff 0, #e6e6e6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); - filter: alpha(opacity=50) progid: DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#e6e6e6, GradientType=0); -} -a.l-btn-plain-disabled, -a:hover.l-btn-plain-disabled { - background: transparent; - filter: alpha(opacity=50); -} -a.l-btn-selected, -a:hover.l-btn-selected { - background-position: right -24px; - background: #ddd; - filter: none; -} -a.l-btn-selected span.l-btn-left, -a:hover.l-btn-selected span.l-btn-left { - background-position: 0 bottom; - background-image: none; -} -a.l-btn-plain-selected, -a:hover.l-btn-plain-selected { - background: #ddd; -} -.datagrid .panel-body { - overflow: hidden; - position: relative; -} -.datagrid-view { - position: relative; - overflow: hidden; -} -.datagrid-view1, -.datagrid-view2 { - position: absolute; - overflow: hidden; - top: 0; -} -.datagrid-view1 { - left: 0; -} -.datagrid-view2 { - right: 0; -} -.datagrid-mask { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - opacity: 0.3; - filter: alpha(opacity=30); - display: none; -} -.datagrid-mask-msg { - position: absolute; - top: 50%; - margin-top: -20px; - padding: 12px 5px 10px 30px; - width: auto; - height: 16px; - border-width: 2px; - border-style: solid; - display: none; -} -.datagrid-sort-icon { - padding: 0; -} -.datagrid-toolbar { - height: auto; - padding: 1px 2px; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 2px 1px; -} -.datagrid .datagrid-pager { - margin: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.datagrid .datagrid-pager-top { - border-width: 0 0 1px 0; -} -.datagrid-header { - overflow: hidden; - cursor: default; - border-width: 0 0 1px 0; - border-style: solid; -} -.datagrid-header-inner { - float: left; - width: 10000px; -} -.datagrid-header-row, -.datagrid-row { - height: 25px; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-width: 0 1px 1px 0; - border-style: dotted; - margin: 0; - padding: 0; -} -.datagrid-cell, -.datagrid-cell-group, -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - margin: 0; - padding: 0 4px; - white-space: nowrap; - word-wrap: normal; - overflow: hidden; - height: 18px; - line-height: 18px; - font-weight: normal; - font-size: 12px; -} -.datagrid-header .datagrid-cell { - height: auto; -} -.datagrid-header .datagrid-cell span { - font-size: 12px; -} -.datagrid-cell-group { - text-align: center; -} -.datagrid-header-rownumber, -.datagrid-cell-rownumber { - width: 25px; - text-align: center; - margin: 0; - padding: 0; -} -.datagrid-body { - margin: 0; - padding: 0; - overflow: auto; - zoom: 1; -} -.datagrid-view1 .datagrid-body-inner { - padding-bottom: 20px; -} -.datagrid-view1 .datagrid-body { - overflow: hidden; -} -.datagrid-footer { - overflow: hidden; -} -.datagrid-footer-inner { - border-width: 1px 0 0 0; - border-style: solid; - width: 10000px; - float: left; -} -.datagrid-row-editing .datagrid-cell { - height: auto; -} -.datagrid-header-check, -.datagrid-cell-check { - padding: 0; - width: 27px; - height: 18px; - font-size: 1px; - text-align: center; - overflow: hidden; -} -.datagrid-header-check input, -.datagrid-cell-check input { - margin: 0; - padding: 0; - width: 15px; - height: 18px; -} -.datagrid-resize-proxy { - position: absolute; - width: 1px; - height: 10000px; - top: 0; - cursor: e-resize; - display: none; -} -.datagrid-body .datagrid-editable { - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable table { - width: 100%; - height: 100%; -} -.datagrid-body .datagrid-editable td { - border: 0; - margin: 0; - padding: 0; -} -.datagrid-body .datagrid-editable .datagrid-editable-input { - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; -} -.datagrid-sort-desc .datagrid-sort-icon { - padding: 0 13px 0 0; - background: url("images/datagrid_icons.png") no-repeat -16px center; -} -.datagrid-sort-asc .datagrid-sort-icon { - padding: 0 13px 0 0; - background: url("images/datagrid_icons.png") no-repeat 0px center; -} -.datagrid-row-collapse { - background: url("images/datagrid_icons.png") no-repeat -48px center; -} -.datagrid-row-expand { - background: url("images/datagrid_icons.png") no-repeat -32px center; -} -.datagrid-mask-msg { - background: #ffffff url("images/loading.gif") no-repeat scroll 5px center; -} -.datagrid-header, -.datagrid-td-rownumber { - background-color: #f2f2f2; - background: -webkit-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -moz-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: -o-linear-gradient(top, #ffffff 0, #f2f2f2 100%); - background: linear-gradient(to bottom, #ffffff 0, #f2f2f2 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); -} -.datagrid-cell-rownumber { - color: #333; -} -.datagrid-resize-proxy { - background: #bbb; -} -.datagrid-mask { - background: #ccc; -} -.datagrid-mask-msg { - border-color: #d4d4d4; -} -.datagrid-toolbar, -.datagrid-pager { - background: #f5f5f5; -} -.datagrid-header, -.datagrid-toolbar, -.datagrid-pager, -.datagrid-footer-inner { - border-color: #e6e6e6; -} -.datagrid-header td, -.datagrid-body td, -.datagrid-footer td { - border-color: #ccc; -} -.datagrid-htable, -.datagrid-btable, -.datagrid-ftable { - color: #333; -} -.datagrid-row-alt { - background: #f5f5f5; -} -.datagrid-row-over, -.datagrid-header td.datagrid-header-over { - background: #e6e6e6; - color: #00438a; - cursor: default; -} -.datagrid-row-selected { - background: #0081c2; - color: #fff; -} -.datagrid-body .datagrid-editable .datagrid-editable-input { - border-color: #d4d4d4; -} -.propertygrid .datagrid-view1 .datagrid-body td { - padding-bottom: 1px; - border-width: 0 1px 0 0; -} -.propertygrid .datagrid-group { - height: 21px; - overflow: hidden; - border-width: 0 0 1px 0; - border-style: solid; -} -.propertygrid .datagrid-group span { - font-weight: bold; -} -.propertygrid .datagrid-view1 .datagrid-body td { - border-color: #e6e6e6; -} -.propertygrid .datagrid-view1 .datagrid-group { - border-color: #f2f2f2; -} -.propertygrid .datagrid-view2 .datagrid-group { - border-color: #e6e6e6; -} -.propertygrid .datagrid-group, -.propertygrid .datagrid-view1 .datagrid-body, -.propertygrid .datagrid-view1 .datagrid-row-over, -.propertygrid .datagrid-view1 .datagrid-row-selected { - background: #f2f2f2; -} -.pagination { - zoom: 1; -} -.pagination table { - float: left; - height: 30px; -} -.pagination td { - border: 0; -} -.pagination-btn-separator { - float: left; - height: 24px; - border-left: 1px solid #ccc; - border-right: 1px solid #fff; - margin: 3px 1px; -} -.pagination .pagination-num { - border-width: 1px; - border-style: solid; - margin: 0 2px; - padding: 2px; - width: 2em; - height: auto; -} -.pagination-page-list { - margin: 0px 6px; - padding: 1px 2px; - width: auto; - height: auto; - border-width: 1px; - border-style: solid; -} -.pagination-info { - float: right; - margin: 0 6px 0 0; - padding: 0; - height: 30px; - line-height: 30px; - font-size: 12px; -} -.pagination span { - font-size: 12px; -} -.pagination-first { - background: url("images/pagination_icons.png") no-repeat 0 0; -} -.pagination-prev { - background: url("images/pagination_icons.png") no-repeat -16px 0; -} -.pagination-next { - background: url("images/pagination_icons.png") no-repeat -32px 0; -} -.pagination-last { - background: url("images/pagination_icons.png") no-repeat -48px 0; -} -.pagination-load { - background: url("images/pagination_icons.png") no-repeat -64px 0; -} -.pagination-loading { - background: url("images/loading.gif") no-repeat; -} -.pagination-page-list, -.pagination .pagination-num { - border-color: #d4d4d4; -} -.calendar { - border-width: 1px; - border-style: solid; - padding: 1px; - overflow: hidden; -} -.calendar table { - border-collapse: separate; - font-size: 12px; - width: 100%; - height: 100%; -} -.calendar table td, -.calendar table th { - font-size: 12px; -} -.calendar-noborder { - border: 0; -} -.calendar-header { - position: relative; - height: 22px; -} -.calendar-title { - text-align: center; - height: 22px; -} -.calendar-title span { - position: relative; - display: inline-block; - top: 2px; - padding: 0 3px; - height: 18px; - line-height: 18px; - font-size: 12px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth, -.calendar-nextmonth, -.calendar-prevyear, -.calendar-nextyear { - position: absolute; - top: 50%; - margin-top: -7px; - width: 14px; - height: 14px; - cursor: pointer; - font-size: 1px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-prevmonth { - left: 20px; - background: url("images/calendar_arrows.png") no-repeat -18px -2px; -} -.calendar-nextmonth { - right: 20px; - background: url("images/calendar_arrows.png") no-repeat -34px -2px; -} -.calendar-prevyear { - left: 3px; - background: url("images/calendar_arrows.png") no-repeat -1px -2px; -} -.calendar-nextyear { - right: 3px; - background: url("images/calendar_arrows.png") no-repeat -49px -2px; -} -.calendar-body { - position: relative; -} -.calendar-body th, -.calendar-body td { - text-align: center; -} -.calendar-day { - border: 0; - padding: 1px; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-other-month { - opacity: 0.3; - filter: alpha(opacity=30); -} -.calendar-menu { - position: absolute; - top: 0; - left: 0; - width: 180px; - height: 150px; - padding: 5px; - font-size: 12px; - display: none; - overflow: hidden; -} -.calendar-menu-year-inner { - text-align: center; - padding-bottom: 5px; -} -.calendar-menu-year { - width: 40px; - text-align: center; - border-width: 1px; - border-style: solid; - margin: 0; - padding: 2px; - font-weight: bold; - font-size: 12px; -} -.calendar-menu-prev, -.calendar-menu-next { - display: inline-block; - width: 21px; - height: 21px; - vertical-align: top; - cursor: pointer; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-menu-prev { - margin-right: 10px; - background: url("images/calendar_arrows.png") no-repeat 2px 2px; -} -.calendar-menu-next { - margin-left: 10px; - background: url("images/calendar_arrows.png") no-repeat -45px 2px; -} -.calendar-menu-month { - text-align: center; - cursor: pointer; - font-weight: bold; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.calendar-body th, -.calendar-menu-month { - color: #808080; -} -.calendar-day { - color: #333; -} -.calendar-sunday { - color: #cc2222; -} -.calendar-saturday { - color: #00ee00; -} -.calendar-today { - color: #0000ff; -} -.calendar-menu-year { - border-color: #d4d4d4; -} -.calendar { - border-color: #d4d4d4; -} -.calendar-header { - background: #f2f2f2; -} -.calendar-body, -.calendar-menu { - background: #ffffff; -} -.calendar-body th { - background: #f5f5f5; -} -.calendar-hover, -.calendar-nav-hover, -.calendar-menu-hover { - background-color: #e6e6e6; - color: #00438a; -} -.calendar-hover { - border: 1px solid #ddd; - padding: 0; -} -.calendar-selected { - background-color: #0081c2; - color: #fff; - border: 1px solid #0070a9; - padding: 0; -} -.datebox-calendar-inner { - height: 180px; -} -.datebox-button { - height: 18px; - padding: 2px 5px; - text-align: center; -} -.datebox-button a { - font-size: 12px; -} -.datebox-current, -.datebox-close, -.datebox-ok { - text-decoration: none; - font-weight: bold; - opacity: 0.6; - filter: alpha(opacity=60); -} -.datebox-current, -.datebox-close { - float: left; -} -.datebox-close { - float: right; -} -.datebox-button-hover { - opacity: 1; - filter: alpha(opacity=100); -} -.datebox .combo-arrow { - background-image: url("images/datebox_arrow.png"); - background-position: center center; -} -.datebox-button { - background-color: #f5f5f5; -} -.datebox-current, -.datebox-close, -.datebox-ok { - color: #444; -} -.spinner { - display: inline-block; - white-space: nowrap; - margin: 0; - padding: 0; - border-width: 1px; - border-style: solid; - overflow: hidden; - vertical-align: middle; -} -.spinner .spinner-text { - font-size: 12px; - border: 0px; - line-height: 20px; - height: 20px; - margin: 0; - padding: 0 2px; - *margin-top: -1px; - *height: 18px; - *line-height: 18px; - _height: 18px; - _line-height: 18px; - vertical-align: baseline; -} -.spinner-arrow { - display: inline-block; - overflow: hidden; - vertical-align: top; - margin: 0; - padding: 0; -} -.spinner-arrow-up, -.spinner-arrow-down { - opacity: 0.6; - filter: alpha(opacity=60); - display: block; - font-size: 1px; - width: 18px; - height: 10px; -} -.spinner-arrow-hover { - opacity: 1; - filter: alpha(opacity=100); -} -.spinner { - border-color: #d4d4d4; -} -.spinner-arrow { - background-color: #f2f2f2; -} -.spinner-arrow-hover { - background-color: #e6e6e6; -} -.progressbar { - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - overflow: hidden; -} -.progressbar-text { - text-align: center; - position: absolute; -} -.progressbar-value { - position: relative; - overflow: hidden; - width: 0; - -moz-border-radius: 5px 0 0 5px; - -webkit-border-radius: 5px 0 0 5px; - border-radius: 5px 0 0 5px; -} -.progressbar { - border-color: #d4d4d4; -} -.progressbar-text { - color: #333; - font-size: 12px; -} -.progressbar-value .progressbar-text { - background-color: #0081c2; - color: #fff; -} -.searchbox { - display: inline-block; - white-space: nowrap; - margin: 0; - padding: 0; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.searchbox .searchbox-text { - font-size: 12px; - border: 0; - margin: 0; - padding: 0; - line-height: 20px; - height: 20px; - *margin-top: -1px; - *height: 18px; - *line-height: 18px; - _height: 18px; - _line-height: 18px; - vertical-align: baseline; -} -.searchbox .searchbox-prompt { - font-size: 12px; - color: #ccc; -} -.searchbox-button { - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - vertical-align: top; - cursor: pointer; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox-button-hover { - opacity: 1; - filter: alpha(opacity=100); -} -.searchbox a.l-btn-plain { - height: 20px; - border: 0; - padding: 0 6px 0 0; - vertical-align: top; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - opacity: 0.6; - filter: alpha(opacity=60); -} -.searchbox a.l-btn .l-btn-left { - padding: 2px 0 2px 4px; -} -.searchbox a.l-btn-plain:hover { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - border: 0; - padding: 0 6px 0 0; - opacity: 1; - filter: alpha(opacity=100); -} -.searchbox a.m-btn-plain-active { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.searchbox-button { - background: url("images/searchbox_button.png") no-repeat center center; -} -.searchbox { - border-color: #d4d4d4; - background-color: #fff; -} -.searchbox a.l-btn-plain { - background: #f2f2f2; -} -.slider-disabled { - opacity: 0.5; - filter: alpha(opacity=50); -} -.slider-h { - height: 22px; -} -.slider-v { - width: 22px; -} -.slider-inner { - position: relative; - height: 6px; - top: 7px; - border-width: 1px; - border-style: solid; - border-radius: 5px; -} -.slider-handle { - position: absolute; - display: block; - outline: none; - width: 20px; - height: 20px; - top: -7px; - margin-left: -10px; -} -.slider-tip { - position: absolute; - display: inline-block; - line-height: 12px; - font-size: 12px; - white-space: nowrap; - top: -22px; -} -.slider-rule { - position: relative; - top: 15px; -} -.slider-rule span { - position: absolute; - display: inline-block; - font-size: 0; - height: 5px; - border-width: 0 0 0 1px; - border-style: solid; -} -.slider-rulelabel { - position: relative; - top: 20px; -} -.slider-rulelabel span { - position: absolute; - display: inline-block; - font-size: 12px; -} -.slider-v .slider-inner { - width: 6px; - left: 7px; - top: 0; - float: left; -} -.slider-v .slider-handle { - left: 3px; - margin-top: -10px; -} -.slider-v .slider-tip { - left: -10px; - margin-top: -6px; -} -.slider-v .slider-rule { - float: left; - top: 0; - left: 16px; -} -.slider-v .slider-rule span { - width: 5px; - height: "auto"; - border-left: 0; - border-width: 1px 0 0 0; - border-style: solid; -} -.slider-v .slider-rulelabel { - float: left; - top: 0; - left: 23px; -} -.slider-handle { - background: url("images/slider_handle.png") no-repeat; -} -.slider-inner { - border-color: #d4d4d4; - background: #f2f2f2; -} -.slider-rule span { - border-color: #d4d4d4; -} -.slider-rulelabel span { - color: #333; -} -.menu { - position: absolute; - margin: 0; - padding: 2px; - border-width: 1px; - border-style: solid; - overflow: hidden; -} -.menu-item { - position: relative; - margin: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - border-width: 1px; - border-style: solid; -} -.menu-text { - height: 20px; - line-height: 20px; - float: left; - padding-left: 28px; -} -.menu-icon { - position: absolute; - width: 16px; - height: 16px; - left: 2px; - top: 50%; - margin-top: -8px; -} -.menu-rightarrow { - position: absolute; - width: 16px; - height: 16px; - right: 0; - top: 50%; - margin-top: -8px; -} -.menu-line { - position: absolute; - left: 26px; - top: 0; - height: 2000px; - font-size: 1px; -} -.menu-sep { - margin: 3px 0px 3px 25px; - font-size: 1px; -} -.menu-active { - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.menu-item-disabled { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default; -} -.menu-text, -.menu-text span { - font-size: 12px; -} -.menu-shadow { - position: absolute; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - background: #ccc; - -moz-box-shadow: 2px 2px 3px #cccccc; - -webkit-box-shadow: 2px 2px 3px #cccccc; - box-shadow: 2px 2px 3px #cccccc; - filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); -} -.menu-rightarrow { - background: url("images/menu_arrows.png") no-repeat -32px center; -} -.menu-line { - border-left: 1px solid #ccc; - border-right: 1px solid #fff; -} -.menu-sep { - border-top: 1px solid #ccc; - border-bottom: 1px solid #fff; -} -.menu { - background-color: #fff; - border-color: #e6e6e6; - color: #333; -} -.menu-content { - background: #ffffff; -} -.menu-item { - border-color: transparent; - _border-color: #fff; -} -.menu-active { - border-color: #ddd; - color: #00438a; - background: #e6e6e6; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #333; -} -.m-btn-downarrow { - display: inline-block; - width: 16px; - height: 16px; - line-height: 16px; - font-size: 12px; - _vertical-align: middle; -} -a.m-btn-active { - background-position: bottom right; -} -a.m-btn-active span.l-btn-left { - background-position: bottom left; -} -a.m-btn-plain-active { - background: transparent; - padding: 0 5px 0 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.m-btn-downarrow { - background: url("images/menu_arrows.png") no-repeat 2px center; -} -a.m-btn-plain-active { - border-color: #ddd; - background-color: #e6e6e6; - color: #00438a; -} -.s-btn-downarrow { - display: inline-block; - margin: 0 0 0 4px; - padding: 0 0 0 1px; - width: 14px; - height: 16px; - line-height: 16px; - border-width: 0; - border-style: solid; - font-size: 12px; - _vertical-align: middle; -} -a.s-btn-active { - background-position: bottom right; -} -a.s-btn-active span.l-btn-left { - background-position: bottom left; -} -a.s-btn-plain-active { - background: transparent; - padding: 0 5px 0 0; - border-width: 1px; - border-style: solid; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.s-btn-downarrow { - background: url("images/menu_arrows.png") no-repeat 2px center; - border-color: #bbb; -} -a:hover.l-btn .s-btn-downarrow, -a.s-btn-active .s-btn-downarrow, -a.s-btn-plain-active .s-btn-downarrow { - background-position: 1px center; - padding: 0; - border-width: 0 0 0 1px; -} -a.s-btn-plain-active { - border-color: #ddd; - background-color: #e6e6e6; - color: #00438a; -} -.messager-body { - padding: 10px; - overflow: hidden; -} -.messager-button { - text-align: center; - padding-top: 10px; -} -.messager-icon { - float: left; - width: 32px; - height: 32px; - margin: 0 10px 10px 0; -} -.messager-error { - background: url("images/messager_icons.png") no-repeat scroll -64px 0; -} -.messager-info { - background: url("images/messager_icons.png") no-repeat scroll 0 0; -} -.messager-question { - background: url("images/messager_icons.png") no-repeat scroll -32px 0; -} -.messager-warning { - background: url("images/messager_icons.png") no-repeat scroll -96px 0; -} -.messager-progress { - padding: 10px; -} -.messager-p-msg { - margin-bottom: 5px; -} -.messager-body .messager-input { - width: 100%; - padding: 1px 0; - border: 1px solid #d4d4d4; -} -.tree { - margin: 0; - padding: 0; - list-style-type: none; -} -.tree li { - white-space: nowrap; -} -.tree li ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.tree-node { - height: 18px; - white-space: nowrap; - cursor: pointer; -} -.tree-hit { - cursor: pointer; -} -.tree-expanded, -.tree-collapsed, -.tree-folder, -.tree-file, -.tree-checkbox, -.tree-indent { - display: inline-block; - width: 16px; - height: 18px; - vertical-align: top; - overflow: hidden; -} -.tree-expanded { - background: url("images/tree_icons.png") no-repeat -18px 0px; -} -.tree-expanded-hover { - background: url("images/tree_icons.png") no-repeat -50px 0px; -} -.tree-collapsed { - background: url("images/tree_icons.png") no-repeat 0px 0px; -} -.tree-collapsed-hover { - background: url("images/tree_icons.png") no-repeat -32px 0px; -} -.tree-lines .tree-expanded, -.tree-lines .tree-root-first .tree-expanded { - background: url("images/tree_icons.png") no-repeat -144px 0; -} -.tree-lines .tree-collapsed, -.tree-lines .tree-root-first .tree-collapsed { - background: url("images/tree_icons.png") no-repeat -128px 0; -} -.tree-lines .tree-node-last .tree-expanded, -.tree-lines .tree-root-one .tree-expanded { - background: url("images/tree_icons.png") no-repeat -80px 0; -} -.tree-lines .tree-node-last .tree-collapsed, -.tree-lines .tree-root-one .tree-collapsed { - background: url("images/tree_icons.png") no-repeat -64px 0; -} -.tree-line { - background: url("images/tree_icons.png") no-repeat -176px 0; -} -.tree-join { - background: url("images/tree_icons.png") no-repeat -192px 0; -} -.tree-joinbottom { - background: url("images/tree_icons.png") no-repeat -160px 0; -} -.tree-folder { - background: url("images/tree_icons.png") no-repeat -208px 0; -} -.tree-folder-open { - background: url("images/tree_icons.png") no-repeat -224px 0; -} -.tree-file { - background: url("images/tree_icons.png") no-repeat -240px 0; -} -.tree-loading { - background: url("images/loading.gif") no-repeat center center; -} -.tree-checkbox0 { - background: url("images/tree_icons.png") no-repeat -208px -18px; -} -.tree-checkbox1 { - background: url("images/tree_icons.png") no-repeat -224px -18px; -} -.tree-checkbox2 { - background: url("images/tree_icons.png") no-repeat -240px -18px; -} -.tree-title { - font-size: 12px; - display: inline-block; - text-decoration: none; - vertical-align: top; - white-space: nowrap; - padding: 0 2px; - height: 18px; - line-height: 18px; -} -.tree-node-proxy { - font-size: 12px; - line-height: 20px; - padding: 0 2px 0 20px; - border-width: 1px; - border-style: solid; - z-index: 9900000; -} -.tree-dnd-icon { - display: inline-block; - position: absolute; - width: 16px; - height: 18px; - left: 2px; - top: 50%; - margin-top: -9px; -} -.tree-dnd-yes { - background: url("images/tree_icons.png") no-repeat -256px 0; -} -.tree-dnd-no { - background: url("images/tree_icons.png") no-repeat -256px -18px; -} -.tree-node-top { - border-top: 1px dotted red; -} -.tree-node-bottom { - border-bottom: 1px dotted red; -} -.tree-node-append .tree-title { - border: 1px dotted red; -} -.tree-editor { - border: 1px solid #ccc; - font-size: 12px; - height: 14px !important; - height: 18px; - line-height: 14px; - padding: 1px 2px; - width: 80px; - position: absolute; - top: 0; -} -.tree-node-proxy { - background-color: #ffffff; - color: #333; - border-color: #d4d4d4; -} -.tree-node-hover { - background: #e6e6e6; - color: #00438a; -} -.tree-node-selected { - background: #0081c2; - color: #fff; -} -.validatebox-invalid { - background-image: url("images/validatebox_warning.png"); - background-repeat: no-repeat; - background-position: right center; - border-color: #ffa8a8; - background-color: #fff3f3; - color: #000; -} -.tooltip { - position: absolute; - display: none; - z-index: 9900000; - outline: none; - padding: 5px; - border-width: 1px; - border-style: solid; - border-radius: 5px; - -moz-border-radius: 5px 5px 5px 5px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; -} -.tooltip-content { - font-size: 12px; -} -.tooltip-arrow-outer, -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - line-height: 0; - font-size: 0; - border-style: solid; - border-width: 6px; - border-color: transparent; - _border-color: tomato; - _filter: chroma(color=tomato); -} -.tooltip-right .tooltip-arrow-outer { - left: 0; - top: 50%; - margin: -6px 0 0 -13px; -} -.tooltip-right .tooltip-arrow { - left: 0; - top: 50%; - margin: -6px 0 0 -12px; -} -.tooltip-left .tooltip-arrow-outer { - right: 0; - top: 50%; - margin: -6px -13px 0 0; -} -.tooltip-left .tooltip-arrow { - right: 0; - top: 50%; - margin: -6px -12px 0 0; -} -.tooltip-top .tooltip-arrow-outer { - bottom: 0; - left: 50%; - margin: 0 0 -13px -6px; -} -.tooltip-top .tooltip-arrow { - bottom: 0; - left: 50%; - margin: 0 0 -12px -6px; -} -.tooltip-bottom .tooltip-arrow-outer { - top: 0; - left: 50%; - margin: -13px 0 0 -6px; -} -.tooltip-bottom .tooltip-arrow { - top: 0; - left: 50%; - margin: -12px 0 0 -6px; -} -.tooltip { - background-color: #ffffff; - border-color: #d4d4d4; - color: #333; -} -.tooltip-right .tooltip-arrow-outer { - border-right-color: #d4d4d4; -} -.tooltip-right .tooltip-arrow { - border-right-color: #ffffff; -} -.tooltip-left .tooltip-arrow-outer { - border-left-color: #d4d4d4; -} -.tooltip-left .tooltip-arrow { - border-left-color: #ffffff; -} -.tooltip-top .tooltip-arrow-outer { - border-top-color: #d4d4d4; -} -.tooltip-top .tooltip-arrow { - border-top-color: #ffffff; -} -.tooltip-bottom .tooltip-arrow-outer { - border-bottom-color: #d4d4d4; -} -.tooltip-bottom .tooltip-arrow { - border-bottom-color: #ffffff; -} -.tabs-panels { - border-color: transparent; -} -.tabs li a.tabs-inner { - border-color: transparent; - background: transparent; - filter: none; - color: #0088cc; -} -.menu-active { - background-color: #0081c2; - border-color: #0081c2; - color: #fff; -} -.menu-active-disabled { - border-color: transparent; - background: transparent; - color: #333; -} diff --git a/src/main/resources/static/assets/platform/cron/js/cron.js b/src/main/resources/static/assets/platform/cron/js/cron.js deleted file mode 100644 index 8f6c355f..00000000 --- a/src/main/resources/static/assets/platform/cron/js/cron.js +++ /dev/null @@ -1,14248 +0,0 @@ -function btnFan() { - var txt = $("#cron").val() - if (txt) { - var regs = txt.split(" ") - $("input[name=v_second]").val(regs[0]) - $("input[name=v_min]").val(regs[1]) - $("input[name=v_hour]").val(regs[2]) - $("input[name=v_day]").val(regs[3]) - $("input[name=v_mouth]").val(regs[4]) - $("input[name=v_week]").val(regs[5]) - initObj(regs[0], "second") - initObj(regs[1], "min") - initObj(regs[2], "hour") - initDay(regs[3]) - initMonth(regs[4]) - initWeek(regs[5]) - if (regs.length > 6) { - $("input[name=v_year]").val(regs[6]) - initYear(regs[6]) - } - } -} -function initObj(strVal, strid) { - var ary = null - var objRadio = $("input[name='" + strid + "'") - if (strVal == "*") { - objRadio.eq(0).attr("checked", "checked") - } else { - if (strVal.split("-").length > 1) { - ary = strVal.split("-") - objRadio.eq(1).attr("checked", "checked") - $("#" + strid + "Start_0").numberspinner("setValue", ary[0]) - $("#" + strid + "End_0").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("/").length > 1) { - ary = strVal.split("/") - objRadio.eq(2).attr("checked", "checked") - $("#" + strid + "Start_1").numberspinner("setValue", ary[0]) - $("#" + strid + "End_1").numberspinner("setValue", ary[1]) - } else { - objRadio.eq(3).attr("checked", "checked") - if (strVal != "?") { - ary = strVal.split(",") - for (var i = 0; i < ary.length; i++) { - $("." + strid + "List input[value='" + ary[i] + "']").attr("checked", "checked") - } - } - } - } - } -} -function initDay(strVal) { - var ary = null - var objRadio = $("input[name='day'") - if (strVal == "*") { - objRadio.eq(0).attr("checked", "checked") - } else { - if (strVal == "?") { - objRadio.eq(1).attr("checked", "checked") - } else { - if (strVal.split("-").length > 1) { - ary = strVal.split("-") - objRadio.eq(2).attr("checked", "checked") - $("#dayStart_0").numberspinner("setValue", ary[0]) - $("#dayEnd_0").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("/").length > 1) { - ary = strVal.split("/") - objRadio.eq(3).attr("checked", "checked") - $("#dayStart_1").numberspinner("setValue", ary[0]) - $("#dayEnd_1").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("W").length > 1) { - ary = strVal.split("W") - objRadio.eq(4).attr("checked", "checked") - $("#dayStart_2").numberspinner("setValue", ary[0]) - } else { - if (strVal == "L") { - objRadio.eq(5).attr("checked", "checked") - } else { - objRadio.eq(6).attr("checked", "checked") - ary = strVal.split(",") - for (var i = 0; i < ary.length; i++) { - $(".dayList input[value='" + ary[i] + "']").attr("checked", "checked") - } - } - } - } - } - } - } -} -function initMonth(strVal) { - var ary = null - var objRadio = $("input[name='mouth'") - if (strVal == "*") { - objRadio.eq(0).attr("checked", "checked") - } else { - if (strVal == "?") { - objRadio.eq(1).attr("checked", "checked") - } else { - if (strVal.split("-").length > 1) { - ary = strVal.split("-") - objRadio.eq(2).attr("checked", "checked") - $("#mouthStart_0").numberspinner("setValue", ary[0]) - $("#mouthEnd_0").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("/").length > 1) { - ary = strVal.split("/") - objRadio.eq(3).attr("checked", "checked") - $("#mouthStart_1").numberspinner("setValue", ary[0]) - $("#mouthEnd_1").numberspinner("setValue", ary[1]) - } else { - objRadio.eq(4).attr("checked", "checked") - ary = strVal.split(",") - for (var i = 0; i < ary.length; i++) { - $(".mouthList input[value='" + ary[i] + "']").attr("checked", "checked") - } - } - } - } - } -} -function initWeek(strVal) { - var ary = null - var objRadio = $("input[name='week'") - if (strVal == "*") { - objRadio.eq(0).attr("checked", "checked") - } else { - if (strVal == "?") { - objRadio.eq(1).attr("checked", "checked") - } else { - if (strVal.split("/").length > 1) { - ary = strVal.split("/") - objRadio.eq(2).attr("checked", "checked") - $("#weekStart_0").numberspinner("setValue", ary[0]) - $("#weekEnd_0").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("-").length > 1) { - ary = strVal.split("-") - objRadio.eq(3).attr("checked", "checked") - $("#weekStart_1").numberspinner("setValue", ary[0]) - $("#weekEnd_1").numberspinner("setValue", ary[1]) - } else { - if (strVal.split("L").length > 1) { - ary = strVal.split("L") - objRadio.eq(4).attr("checked", "checked") - $("#weekStart_2").numberspinner("setValue", ary[0]) - } else { - objRadio.eq(5).attr("checked", "checked") - ary = strVal.split(",") - for (var i = 0; i < ary.length; i++) { - $(".weekList input[value='" + ary[i] + "']").attr("checked", "checked") - } - } - } - } - } - } -} -function initYear(strVal) { - var ary = null - var objRadio = $("input[name='year'") - if (strVal == "*") { - objRadio.eq(1).attr("checked", "checked") - } else { - if (strVal.split("-").length > 1) { - ary = strVal.split("-") - objRadio.eq(2).attr("checked", "checked") - $("#yearStart_0").numberspinner("setValue", ary[0]) - $("#yearEnd_0").numberspinner("setValue", ary[1]) - } - } -} -;(function ($) { - $.parser = { - auto: true, - onComplete: function (_1) {}, - plugins: [ - "draggable", - "droppable", - "resizable", - "pagination", - "tooltip", - "linkbutton", - "menu", - "menubutton", - "splitbutton", - "progressbar", - "tree", - "combobox", - "combotree", - "combogrid", - "numberbox", - "validatebox", - "searchbox", - "numberspinner", - "timespinner", - "calendar", - "datebox", - "datetimebox", - "slider", - "layout", - "panel", - "datagrid", - "propertygrid", - "treegrid", - "tabs", - "accordion", - "window", - "dialog" - ], - parse: function (_2) { - var aa = [] - for (var i = 0; i < $.parser.plugins.length; i++) { - var _3 = $.parser.plugins[i] - var r = $(".easyui-" + _3, _2) - if (r.length) { - if (r[_3]) { - r[_3]() - } else { - aa.push({ name: _3, jq: r }) - } - } - } - if (aa.length && window.easyloader) { - var _4 = [] - for (var i = 0; i < aa.length; i++) { - _4.push(aa[i].name) - } - easyloader.load(_4, function () { - for (var i = 0; i < aa.length; i++) { - var _5 = aa[i].name - var jq = aa[i].jq - jq[_5]() - } - $.parser.onComplete.call($.parser, _2) - }) - } else { - $.parser.onComplete.call($.parser, _2) - } - }, - parseOptions: function (_6, _7) { - var t = $(_6) - var _8 = {} - var s = $.trim(t.attr("data-options")) - if (s) { - var _9 = s.substring(0, 1) - var _a = s.substring(s.length - 1, 1) - if (_9 != "{") { - s = "{" + s - } - if (_a != "}") { - s = s + "}" - } - _8 = new Function("return " + s)() - } - if (_7) { - var _b = {} - for (var i = 0; i < _7.length; i++) { - var pp = _7[i] - if (typeof pp == "string") { - if (pp == "width" || pp == "height" || pp == "left" || pp == "top") { - _b[pp] = parseInt(_6.style[pp]) || undefined - } else { - _b[pp] = t.attr(pp) - } - } else { - for (var _c in pp) { - var _d = pp[_c] - if (_d == "boolean") { - _b[_c] = t.attr(_c) ? t.attr(_c) == "true" : undefined - } else { - if (_d == "number") { - _b[_c] = t.attr(_c) == "0" ? 0 : parseFloat(t.attr(_c)) || undefined - } - } - } - } - } - $.extend(_8, _b) - } - return _8 - } - } - $(function () { - var d = $('
').appendTo("body") - $._boxModel = parseInt(d.width()) == 100 - d.remove() - if (!window.easyloader && $.parser.auto) { - $.parser.parse() - } - }) - $.fn._outerWidth = function (_e) { - if (_e == undefined) { - if (this[0] == window) { - return this.width() || document.body.clientWidth - } - return this.outerWidth() || 0 - } - return this.each(function () { - if ($._boxModel) { - $(this).width(_e - ($(this).outerWidth() - $(this).width())) - } else { - $(this).width(_e) - } - }) - } - $.fn._outerHeight = function (_f) { - if (_f == undefined) { - if (this[0] == window) { - return this.height() || document.body.clientHeight - } - return this.outerHeight() || 0 - } - return this.each(function () { - if ($._boxModel) { - $(this).height(_f - ($(this).outerHeight() - $(this).height())) - } else { - $(this).height(_f) - } - }) - } - $.fn._scrollLeft = function (_10) { - if (_10 == undefined) { - return this.scrollLeft() - } else { - return this.each(function () { - $(this).scrollLeft(_10) - }) - } - } - $.fn._propAttr = $.fn.prop || $.fn.attr - $.fn._fit = function (fit) { - fit = fit == undefined ? true : fit - var t = this[0] - var p = t.tagName == "BODY" ? t : this.parent()[0] - var _11 = p.fcount || 0 - if (fit) { - if (!t.fitted) { - t.fitted = true - p.fcount = _11 + 1 - $(p).addClass("panel-noscroll") - if (p.tagName == "BODY") { - $("html").addClass("panel-fit") - } - } - } else { - if (t.fitted) { - t.fitted = false - p.fcount = _11 - 1 - if (p.fcount == 0) { - $(p).removeClass("panel-noscroll") - if (p.tagName == "BODY") { - $("html").removeClass("panel-fit") - } - } - } - } - return { width: $(p).width(), height: $(p).height() } - } -})(jQuery) -;(function ($) { - var _12 = false - function _13(e) { - var _14 = $.data(e.data.target, "draggable") - var _15 = _14.options - var _16 = _14.proxy - var _17 = e.data - var _18 = _17.startLeft + e.pageX - _17.startX - var top = _17.startTop + e.pageY - _17.startY - if (_16) { - if (_16.parent()[0] == document.body) { - if (_15.deltaX != null && _15.deltaX != undefined) { - _18 = e.pageX + _15.deltaX - } else { - _18 = e.pageX - e.data.offsetWidth - } - if (_15.deltaY != null && _15.deltaY != undefined) { - top = e.pageY + _15.deltaY - } else { - top = e.pageY - e.data.offsetHeight - } - } else { - if (_15.deltaX != null && _15.deltaX != undefined) { - _18 += e.data.offsetWidth + _15.deltaX - } - if (_15.deltaY != null && _15.deltaY != undefined) { - top += e.data.offsetHeight + _15.deltaY - } - } - } - if (e.data.parent != document.body) { - _18 += $(e.data.parent).scrollLeft() - top += $(e.data.parent).scrollTop() - } - if (_15.axis == "h") { - _17.left = _18 - } else { - if (_15.axis == "v") { - _17.top = top - } else { - _17.left = _18 - _17.top = top - } - } - } - function _19(e) { - var _1a = $.data(e.data.target, "draggable") - var _1b = _1a.options - var _1c = _1a.proxy - if (!_1c) { - _1c = $(e.data.target) - } - _1c.css({ left: e.data.left, top: e.data.top }) - $("body").css("cursor", _1b.cursor) - } - function _1d(e) { - _12 = true - var _1e = $.data(e.data.target, "draggable") - var _1f = _1e.options - var _20 = $(".droppable") - .filter(function () { - return e.data.target != this - }) - .filter(function () { - var _21 = $.data(this, "droppable").options.accept - if (_21) { - return ( - $(_21).filter(function () { - return this == e.data.target - }).length > 0 - ) - } else { - return true - } - }) - _1e.droppables = _20 - var _22 = _1e.proxy - if (!_22) { - if (_1f.proxy) { - if (_1f.proxy == "clone") { - _22 = $(e.data.target).clone().insertAfter(e.data.target) - } else { - _22 = _1f.proxy.call(e.data.target, e.data.target) - } - _1e.proxy = _22 - } else { - _22 = $(e.data.target) - } - } - _22.css("position", "absolute") - _13(e) - _19(e) - _1f.onStartDrag.call(e.data.target, e) - return false - } - function _23(e) { - var _24 = $.data(e.data.target, "draggable") - _13(e) - if (_24.options.onDrag.call(e.data.target, e) != false) { - _19(e) - } - var _25 = e.data.target - _24.droppables.each(function () { - var _26 = $(this) - if (_26.droppable("options").disabled) { - return - } - var p2 = _26.offset() - if (e.pageX > p2.left && e.pageX < p2.left + _26.outerWidth() && e.pageY > p2.top && e.pageY < p2.top + _26.outerHeight()) { - if (!this.entered) { - $(this).trigger("_dragenter", [_25]) - this.entered = true - } - $(this).trigger("_dragover", [_25]) - } else { - if (this.entered) { - $(this).trigger("_dragleave", [_25]) - this.entered = false - } - } - }) - return false - } - function _27(e) { - _12 = false - _23(e) - var _28 = $.data(e.data.target, "draggable") - var _29 = _28.proxy - var _2a = _28.options - if (_2a.revert) { - if (_2b() == true) { - $(e.data.target).css({ position: e.data.startPosition, left: e.data.startLeft, top: e.data.startTop }) - } else { - if (_29) { - var _2c, top - if (_29.parent()[0] == document.body) { - _2c = e.data.startX - e.data.offsetWidth - top = e.data.startY - e.data.offsetHeight - } else { - _2c = e.data.startLeft - top = e.data.startTop - } - _29.animate({ left: _2c, top: top }, function () { - _2d() - }) - } else { - $(e.data.target).animate({ left: e.data.startLeft, top: e.data.startTop }, function () { - $(e.data.target).css("position", e.data.startPosition) - }) - } - } - } else { - $(e.data.target).css({ position: "absolute", left: e.data.left, top: e.data.top }) - _2b() - } - _2a.onStopDrag.call(e.data.target, e) - $(document).unbind(".draggable") - setTimeout(function () { - $("body").css("cursor", "") - }, 100) - function _2d() { - if (_29) { - _29.remove() - } - _28.proxy = null - } - function _2b() { - var _2e = false - _28.droppables.each(function () { - var _2f = $(this) - if (_2f.droppable("options").disabled) { - return - } - var p2 = _2f.offset() - if (e.pageX > p2.left && e.pageX < p2.left + _2f.outerWidth() && e.pageY > p2.top && e.pageY < p2.top + _2f.outerHeight()) { - if (_2a.revert) { - $(e.data.target).css({ position: e.data.startPosition, left: e.data.startLeft, top: e.data.startTop }) - } - $(this).trigger("_drop", [e.data.target]) - _2d() - _2e = true - this.entered = false - return false - } - }) - if (!_2e && !_2a.revert) { - _2d() - } - return _2e - } - return false - } - $.fn.draggable = function (_30, _31) { - if (typeof _30 == "string") { - return $.fn.draggable.methods[_30](this, _31) - } - return this.each(function () { - var _32 - var _33 = $.data(this, "draggable") - if (_33) { - _33.handle.unbind(".draggable") - _32 = $.extend(_33.options, _30) - } else { - _32 = $.extend({}, $.fn.draggable.defaults, $.fn.draggable.parseOptions(this), _30 || {}) - } - if (_32.disabled == true) { - $(this).css("cursor", "") - return - } - var _34 = null - if (typeof _32.handle == "undefined" || _32.handle == null) { - _34 = $(this) - } else { - _34 = typeof _32.handle == "string" ? $(_32.handle, this) : _32.handle - } - $.data(this, "draggable", { options: _32, handle: _34 }) - _34.unbind(".draggable") - .bind("mousemove.draggable", { target: this }, function (e) { - if (_12) { - return - } - var _35 = $.data(e.data.target, "draggable").options - if (_36(e)) { - $(this).css("cursor", _35.cursor) - } else { - $(this).css("cursor", "") - } - }) - .bind("mouseleave.draggable", { target: this }, function (e) { - $(this).css("cursor", "") - }) - .bind("mousedown.draggable", { target: this }, function (e) { - if (_36(e) == false) { - return - } - $(this).css("cursor", "") - var _37 = $(e.data.target).position() - var _38 = $(e.data.target).offset() - var _39 = { - startPosition: $(e.data.target).css("position"), - startLeft: _37.left, - startTop: _37.top, - left: _37.left, - top: _37.top, - startX: e.pageX, - startY: e.pageY, - offsetWidth: e.pageX - _38.left, - offsetHeight: e.pageY - _38.top, - target: e.data.target, - parent: $(e.data.target).parent()[0] - } - $.extend(e.data, _39) - var _3a = $.data(e.data.target, "draggable").options - if (_3a.onBeforeDrag.call(e.data.target, e) == false) { - return - } - $(document).bind("mousedown.draggable", e.data, _1d) - $(document).bind("mousemove.draggable", e.data, _23) - $(document).bind("mouseup.draggable", e.data, _27) - }) - function _36(e) { - var _3b = $.data(e.data.target, "draggable") - var _3c = _3b.handle - var _3d = $(_3c).offset() - var _3e = $(_3c).outerWidth() - var _3f = $(_3c).outerHeight() - var t = e.pageY - _3d.top - var r = _3d.left + _3e - e.pageX - var b = _3d.top + _3f - e.pageY - var l = e.pageX - _3d.left - return Math.min(t, r, b, l) > _3b.options.edge - } - }) - } - $.fn.draggable.methods = { - options: function (jq) { - return $.data(jq[0], "draggable").options - }, - proxy: function (jq) { - return $.data(jq[0], "draggable").proxy - }, - enable: function (jq) { - return jq.each(function () { - $(this).draggable({ disabled: false }) - }) - }, - disable: function (jq) { - return jq.each(function () { - $(this).draggable({ disabled: true }) - }) - } - } - $.fn.draggable.parseOptions = function (_40) { - var t = $(_40) - return $.extend( - {}, - $.parser.parseOptions(_40, ["cursor", "handle", "axis", { revert: "boolean", deltaX: "number", deltaY: "number", edge: "number" }]), - { disabled: t.attr("disabled") ? true : undefined } - ) - } - $.fn.draggable.defaults = { - proxy: null, - revert: false, - cursor: "move", - deltaX: null, - deltaY: null, - handle: null, - disabled: false, - edge: 0, - axis: null, - onBeforeDrag: function (e) {}, - onStartDrag: function (e) {}, - onDrag: function (e) {}, - onStopDrag: function (e) {} - } - $(function () { - function _41(e) { - var _42 = e.changedTouches, - _43 = _42[0], - _44 = "" - switch (e.type) { - case "touchstart": - _44 = "mousedown" - break - case "touchmove": - _44 = "mousemove" - break - case "touchend": - _44 = "mouseup" - break - default: - return - } - var _45 = document.createEvent("MouseEvent") - _45.initMouseEvent(_44, true, true, window, 1, _43.screenX, _43.screenY, _43.clientX, _43.clientY, false, false, false, false, 0, null) - _43.target.dispatchEvent(_45) - if (_12) { - e.preventDefault() - } - } - if (document.addEventListener) { - document.addEventListener("touchstart", _41, true) - document.addEventListener("touchmove", _41, true) - document.addEventListener("touchend", _41, true) - document.addEventListener("touchcancel", _41, true) - } - }) -})(jQuery) -;(function ($) { - function _46(_47) { - $(_47).addClass("droppable") - $(_47).bind("_dragenter", function (e, _48) { - $.data(_47, "droppable").options.onDragEnter.apply(_47, [e, _48]) - }) - $(_47).bind("_dragleave", function (e, _49) { - $.data(_47, "droppable").options.onDragLeave.apply(_47, [e, _49]) - }) - $(_47).bind("_dragover", function (e, _4a) { - $.data(_47, "droppable").options.onDragOver.apply(_47, [e, _4a]) - }) - $(_47).bind("_drop", function (e, _4b) { - $.data(_47, "droppable").options.onDrop.apply(_47, [e, _4b]) - }) - } - $.fn.droppable = function (_4c, _4d) { - if (typeof _4c == "string") { - return $.fn.droppable.methods[_4c](this, _4d) - } - _4c = _4c || {} - return this.each(function () { - var _4e = $.data(this, "droppable") - if (_4e) { - $.extend(_4e.options, _4c) - } else { - _46(this) - $.data(this, "droppable", { options: $.extend({}, $.fn.droppable.defaults, $.fn.droppable.parseOptions(this), _4c) }) - } - }) - } - $.fn.droppable.methods = { - options: function (jq) { - return $.data(jq[0], "droppable").options - }, - enable: function (jq) { - return jq.each(function () { - $(this).droppable({ disabled: false }) - }) - }, - disable: function (jq) { - return jq.each(function () { - $(this).droppable({ disabled: true }) - }) - } - } - $.fn.droppable.parseOptions = function (_4f) { - var t = $(_4f) - return $.extend({}, $.parser.parseOptions(_4f, ["accept"]), { disabled: t.attr("disabled") ? true : undefined }) - } - $.fn.droppable.defaults = { - accept: null, - disabled: false, - onDragEnter: function (e, _50) {}, - onDragOver: function (e, _51) {}, - onDragLeave: function (e, _52) {}, - onDrop: function (e, _53) {} - } -})(jQuery) -;(function ($) { - var _54 = false - $.fn.resizable = function (_55, _56) { - if (typeof _55 == "string") { - return $.fn.resizable.methods[_55](this, _56) - } - function _57(e) { - var _58 = e.data - var _59 = $.data(_58.target, "resizable").options - if (_58.dir.indexOf("e") != -1) { - var _5a = _58.startWidth + e.pageX - _58.startX - _5a = Math.min(Math.max(_5a, _59.minWidth), _59.maxWidth) - _58.width = _5a - } - if (_58.dir.indexOf("s") != -1) { - var _5b = _58.startHeight + e.pageY - _58.startY - _5b = Math.min(Math.max(_5b, _59.minHeight), _59.maxHeight) - _58.height = _5b - } - if (_58.dir.indexOf("w") != -1) { - var _5a = _58.startWidth - e.pageX + _58.startX - _5a = Math.min(Math.max(_5a, _59.minWidth), _59.maxWidth) - _58.width = _5a - _58.left = _58.startLeft + _58.startWidth - _58.width - } - if (_58.dir.indexOf("n") != -1) { - var _5b = _58.startHeight - e.pageY + _58.startY - _5b = Math.min(Math.max(_5b, _59.minHeight), _59.maxHeight) - _58.height = _5b - _58.top = _58.startTop + _58.startHeight - _58.height - } - } - function _5c(e) { - var _5d = e.data - var t = $(_5d.target) - t.css({ left: _5d.left, top: _5d.top }) - if (t.outerWidth() != _5d.width) { - t._outerWidth(_5d.width) - } - if (t.outerHeight() != _5d.height) { - t._outerHeight(_5d.height) - } - } - function _5e(e) { - _54 = true - $.data(e.data.target, "resizable").options.onStartResize.call(e.data.target, e) - return false - } - function _5f(e) { - _57(e) - if ($.data(e.data.target, "resizable").options.onResize.call(e.data.target, e) != false) { - _5c(e) - } - return false - } - function _60(e) { - _54 = false - _57(e, true) - _5c(e) - $.data(e.data.target, "resizable").options.onStopResize.call(e.data.target, e) - $(document).unbind(".resizable") - $("body").css("cursor", "") - return false - } - return this.each(function () { - var _61 = null - var _62 = $.data(this, "resizable") - if (_62) { - $(this).unbind(".resizable") - _61 = $.extend(_62.options, _55 || {}) - } else { - _61 = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), _55 || {}) - $.data(this, "resizable", { options: _61 }) - } - if (_61.disabled == true) { - return - } - $(this) - .bind("mousemove.resizable", { target: this }, function (e) { - if (_54) { - return - } - var dir = _63(e) - if (dir == "") { - $(e.data.target).css("cursor", "") - } else { - $(e.data.target).css("cursor", dir + "-resize") - } - }) - .bind("mouseleave.resizable", { target: this }, function (e) { - $(e.data.target).css("cursor", "") - }) - .bind("mousedown.resizable", { target: this }, function (e) { - var dir = _63(e) - if (dir == "") { - return - } - function _64(css) { - var val = parseInt($(e.data.target).css(css)) - if (isNaN(val)) { - return 0 - } else { - return val - } - } - var _65 = { - target: e.data.target, - dir: dir, - startLeft: _64("left"), - startTop: _64("top"), - left: _64("left"), - top: _64("top"), - startX: e.pageX, - startY: e.pageY, - startWidth: $(e.data.target).outerWidth(), - startHeight: $(e.data.target).outerHeight(), - width: $(e.data.target).outerWidth(), - height: $(e.data.target).outerHeight(), - deltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(), - deltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height() - } - $(document).bind("mousedown.resizable", _65, _5e) - $(document).bind("mousemove.resizable", _65, _5f) - $(document).bind("mouseup.resizable", _65, _60) - $("body").css("cursor", dir + "-resize") - }) - function _63(e) { - var tt = $(e.data.target) - var dir = "" - var _66 = tt.offset() - var _67 = tt.outerWidth() - var _68 = tt.outerHeight() - var _69 = _61.edge - if (e.pageY > _66.top && e.pageY < _66.top + _69) { - dir += "n" - } else { - if (e.pageY < _66.top + _68 && e.pageY > _66.top + _68 - _69) { - dir += "s" - } - } - if (e.pageX > _66.left && e.pageX < _66.left + _69) { - dir += "w" - } else { - if (e.pageX < _66.left + _67 && e.pageX > _66.left + _67 - _69) { - dir += "e" - } - } - var _6a = _61.handles.split(",") - for (var i = 0; i < _6a.length; i++) { - var _6b = _6a[i].replace(/(^\s*)|(\s*$)/g, "") - if (_6b == "all" || _6b == dir) { - return dir - } - } - return "" - } - }) - } - $.fn.resizable.methods = { - options: function (jq) { - return $.data(jq[0], "resizable").options - }, - enable: function (jq) { - return jq.each(function () { - $(this).resizable({ disabled: false }) - }) - }, - disable: function (jq) { - return jq.each(function () { - $(this).resizable({ disabled: true }) - }) - } - } - $.fn.resizable.parseOptions = function (_6c) { - var t = $(_6c) - return $.extend( - {}, - $.parser.parseOptions(_6c, [ - "handles", - { minWidth: "number", minHeight: "number", maxWidth: "number", maxHeight: "number", edge: "number" } - ]), - { disabled: t.attr("disabled") ? true : undefined } - ) - } - $.fn.resizable.defaults = { - disabled: false, - handles: "n, e, s, w, ne, se, sw, nw, all", - minWidth: 10, - minHeight: 10, - maxWidth: 10000, - maxHeight: 10000, - edge: 5, - onStartResize: function (e) {}, - onResize: function (e) {}, - onStopResize: function (e) {} - } -})(jQuery) -;(function ($) { - function _6d(_6e) { - var _6f = $.data(_6e, "linkbutton").options - var t = $(_6e) - t.addClass("l-btn").removeClass("l-btn-plain l-btn-selected l-btn-plain-selected") - if (_6f.plain) { - t.addClass("l-btn-plain") - } - if (_6f.selected) { - t.addClass(_6f.plain ? "l-btn-selected l-btn-plain-selected" : "l-btn-selected") - } - t.attr("group", _6f.group || "") - t.attr("id", _6f.id || "") - t.html('' + '' + "") - if (_6f.text) { - t.find(".l-btn-text").html(_6f.text) - if (_6f.iconCls) { - t.find(".l-btn-text") - .addClass(_6f.iconCls) - .addClass(_6f.iconAlign == "left" ? "l-btn-icon-left" : "l-btn-icon-right") - } - } else { - t.find(".l-btn-text").html(' ') - if (_6f.iconCls) { - t.find(".l-btn-empty").addClass(_6f.iconCls) - } - } - t.unbind(".linkbutton") - .bind("focus.linkbutton", function () { - if (!_6f.disabled) { - $(this).find(".l-btn-text").addClass("l-btn-focus") - } - }) - .bind("blur.linkbutton", function () { - $(this).find(".l-btn-text").removeClass("l-btn-focus") - }) - if (_6f.toggle && !_6f.disabled) { - t.bind("click.linkbutton", function () { - if (_6f.selected) { - $(this).linkbutton("unselect") - } else { - $(this).linkbutton("select") - } - }) - } - _70(_6e, _6f.selected) - _71(_6e, _6f.disabled) - } - function _70(_72, _73) { - var _74 = $.data(_72, "linkbutton").options - if (_73) { - if (_74.group) { - $('a.l-btn[group="' + _74.group + '"]').each(function () { - var o = $(this).linkbutton("options") - if (o.toggle) { - $(this).removeClass("l-btn-selected l-btn-plain-selected") - o.selected = false - } - }) - } - $(_72).addClass(_74.plain ? "l-btn-selected l-btn-plain-selected" : "l-btn-selected") - _74.selected = true - } else { - if (!_74.group) { - $(_72).removeClass("l-btn-selected l-btn-plain-selected") - _74.selected = false - } - } - } - function _71(_75, _76) { - var _77 = $.data(_75, "linkbutton") - var _78 = _77.options - $(_75).removeClass("l-btn-disabled l-btn-plain-disabled") - if (_76) { - _78.disabled = true - var _79 = $(_75).attr("href") - if (_79) { - _77.href = _79 - $(_75).attr("href", "javascript:void(0)") - } - if (_75.onclick) { - _77.onclick = _75.onclick - _75.onclick = null - } - _78.plain ? $(_75).addClass("l-btn-disabled l-btn-plain-disabled") : $(_75).addClass("l-btn-disabled") - } else { - _78.disabled = false - if (_77.href) { - $(_75).attr("href", _77.href) - } - if (_77.onclick) { - _75.onclick = _77.onclick - } - } - } - $.fn.linkbutton = function (_7a, _7b) { - if (typeof _7a == "string") { - return $.fn.linkbutton.methods[_7a](this, _7b) - } - _7a = _7a || {} - return this.each(function () { - var _7c = $.data(this, "linkbutton") - if (_7c) { - $.extend(_7c.options, _7a) - } else { - $.data(this, "linkbutton", { options: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), _7a) }) - $(this).removeAttr("disabled") - } - _6d(this) - }) - } - $.fn.linkbutton.methods = { - options: function (jq) { - return $.data(jq[0], "linkbutton").options - }, - enable: function (jq) { - return jq.each(function () { - _71(this, false) - }) - }, - disable: function (jq) { - return jq.each(function () { - _71(this, true) - }) - }, - select: function (jq) { - return jq.each(function () { - _70(this, true) - }) - }, - unselect: function (jq) { - return jq.each(function () { - _70(this, false) - }) - } - } - $.fn.linkbutton.parseOptions = function (_7d) { - var t = $(_7d) - return $.extend( - {}, - $.parser.parseOptions(_7d, ["id", "iconCls", "iconAlign", "group", { plain: "boolean", toggle: "boolean", selected: "boolean" }]), - { disabled: t.attr("disabled") ? true : undefined, text: $.trim(t.html()), iconCls: t.attr("icon") || t.attr("iconCls") } - ) - } - $.fn.linkbutton.defaults = { - id: null, - disabled: false, - toggle: false, - selected: false, - group: null, - plain: false, - text: "", - iconCls: null, - iconAlign: "left" - } -})(jQuery) -;(function ($) { - function _7e(_7f) { - var _80 = $.data(_7f, "pagination") - var _81 = _80.options - var bb = (_80.bb = {}) - var _82 = $(_7f).addClass("pagination").html('
') - var tr = _82.find("tr") - function _83(_84) { - var btn = _81.nav[_84] - var a = $('').appendTo(tr) - a.wrap("") - a.linkbutton({ iconCls: btn.iconCls, plain: true }) - .unbind(".pagination") - .bind("click.pagination", function () { - btn.handler.call(_7f) - }) - return a - } - if (_81.showPageList) { - var ps = $('') - ps.bind("change", function () { - _81.pageSize = parseInt($(this).val()) - _81.onChangePageSize.call(_7f, _81.pageSize) - _86(_7f, _81.pageNumber) - }) - for (var i = 0; i < _81.pageList.length; i++) { - $("").text(_81.pageList[i]).appendTo(ps) - } - $("").append(ps).appendTo(tr) - $('
').appendTo(tr) - } - bb.first = _83("first") - bb.prev = _83("prev") - $('
').appendTo(tr) - $('').html(_81.beforePageText).appendTo(tr).wrap("") - bb.num = $('').appendTo(tr).wrap("") - bb.num.unbind(".pagination").bind("keydown.pagination", function (e) { - if (e.keyCode == 13) { - var _85 = parseInt($(this).val()) || 1 - _86(_7f, _85) - return false - } - }) - bb.after = $('').appendTo(tr).wrap("") - $('
').appendTo(tr) - bb.next = _83("next") - bb.last = _83("last") - if (_81.showRefresh) { - $('
').appendTo(tr) - bb.refresh = _83("refresh") - } - if (_81.buttons) { - $('
').appendTo(tr) - for (var i = 0; i < _81.buttons.length; i++) { - var btn = _81.buttons[i] - if (btn == "-") { - $('
').appendTo(tr) - } else { - var td = $("").appendTo(tr) - var a = $('').appendTo(td) - a[0].onclick = eval(btn.handler || function () {}) - a.linkbutton($.extend({}, btn, { plain: true })) - } - } - } - $('
').appendTo(_82) - $('
').appendTo(_82) - } - function _86(_87, _88) { - var _89 = $.data(_87, "pagination").options - var _8a = Math.ceil(_89.total / _89.pageSize) || 1 - _89.pageNumber = _88 - if (_89.pageNumber < 1) { - _89.pageNumber = 1 - } - if (_89.pageNumber > _8a) { - _89.pageNumber = _8a - } - _8b(_87, { pageNumber: _89.pageNumber }) - _89.onSelectPage.call(_87, _89.pageNumber, _89.pageSize) - } - function _8b(_8c, _8d) { - var _8e = $.data(_8c, "pagination").options - var bb = $.data(_8c, "pagination").bb - $.extend(_8e, _8d || {}) - var ps = $(_8c).find("select.pagination-page-list") - if (ps.length) { - ps.val(_8e.pageSize + "") - _8e.pageSize = parseInt(ps.val()) - } - var _8f = Math.ceil(_8e.total / _8e.pageSize) || 1 - bb.num.val(_8e.pageNumber) - bb.after.html(_8e.afterPageText.replace(/{pages}/, _8f)) - var _90 = _8e.displayMsg - _90 = _90.replace(/{from}/, _8e.total == 0 ? 0 : _8e.pageSize * (_8e.pageNumber - 1) + 1) - _90 = _90.replace(/{to}/, Math.min(_8e.pageSize * _8e.pageNumber, _8e.total)) - _90 = _90.replace(/{total}/, _8e.total) - $(_8c).find("div.pagination-info").html(_90) - bb.first.add(bb.prev).linkbutton({ disabled: _8e.pageNumber == 1 }) - bb.next.add(bb.last).linkbutton({ disabled: _8e.pageNumber == _8f }) - _91(_8c, _8e.loading) - } - function _91(_92, _93) { - var _94 = $.data(_92, "pagination").options - var bb = $.data(_92, "pagination").bb - _94.loading = _93 - if (_94.showRefresh) { - if (_94.loading) { - bb.refresh.linkbutton({ iconCls: "pagination-loading" }) - } else { - bb.refresh.linkbutton({ iconCls: "pagination-load" }) - } - } - } - $.fn.pagination = function (_95, _96) { - if (typeof _95 == "string") { - return $.fn.pagination.methods[_95](this, _96) - } - _95 = _95 || {} - return this.each(function () { - var _97 - var _98 = $.data(this, "pagination") - if (_98) { - _97 = $.extend(_98.options, _95) - } else { - _97 = $.extend({}, $.fn.pagination.defaults, $.fn.pagination.parseOptions(this), _95) - $.data(this, "pagination", { options: _97 }) - } - _7e(this) - _8b(this) - }) - } - $.fn.pagination.methods = { - options: function (jq) { - return $.data(jq[0], "pagination").options - }, - loading: function (jq) { - return jq.each(function () { - _91(this, true) - }) - }, - loaded: function (jq) { - return jq.each(function () { - _91(this, false) - }) - }, - refresh: function (jq, _99) { - return jq.each(function () { - _8b(this, _99) - }) - }, - select: function (jq, _9a) { - return jq.each(function () { - _86(this, _9a) - }) - } - } - $.fn.pagination.parseOptions = function (_9b) { - var t = $(_9b) - return $.extend( - {}, - $.parser.parseOptions(_9b, [ - { total: "number", pageSize: "number", pageNumber: "number" }, - { loading: "boolean", showPageList: "boolean", showRefresh: "boolean" } - ]), - { pageList: t.attr("pageList") ? eval(t.attr("pageList")) : undefined } - ) - } - $.fn.pagination.defaults = { - total: 1, - pageSize: 10, - pageNumber: 1, - pageList: [10, 20, 30, 50], - loading: false, - buttons: null, - showPageList: true, - showRefresh: true, - onSelectPage: function (_9c, _9d) {}, - onBeforeRefresh: function (_9e, _9f) {}, - onRefresh: function (_a0, _a1) {}, - onChangePageSize: function (_a2) {}, - beforePageText: "Page", - afterPageText: "of {pages}", - displayMsg: "Displaying {from} to {to} of {total} items", - nav: { - first: { - iconCls: "pagination-first", - handler: function () { - var _a3 = $(this).pagination("options") - if (_a3.pageNumber > 1) { - $(this).pagination("select", 1) - } - } - }, - prev: { - iconCls: "pagination-prev", - handler: function () { - var _a4 = $(this).pagination("options") - if (_a4.pageNumber > 1) { - $(this).pagination("select", _a4.pageNumber - 1) - } - } - }, - next: { - iconCls: "pagination-next", - handler: function () { - var _a5 = $(this).pagination("options") - var _a6 = Math.ceil(_a5.total / _a5.pageSize) - if (_a5.pageNumber < _a6) { - $(this).pagination("select", _a5.pageNumber + 1) - } - } - }, - last: { - iconCls: "pagination-last", - handler: function () { - var _a7 = $(this).pagination("options") - var _a8 = Math.ceil(_a7.total / _a7.pageSize) - if (_a7.pageNumber < _a8) { - $(this).pagination("select", _a8) - } - } - }, - refresh: { - iconCls: "pagination-refresh", - handler: function () { - var _a9 = $(this).pagination("options") - if (_a9.onBeforeRefresh.call(this, _a9.pageNumber, _a9.pageSize) != false) { - $(this).pagination("select", _a9.pageNumber) - _a9.onRefresh.call(this, _a9.pageNumber, _a9.pageSize) - } - } - } - } - } -})(jQuery) -;(function ($) { - function _aa(_ab) { - var _ac = $(_ab) - _ac.addClass("tree") - return _ac - } - function _ad(_ae) { - var _af = [] - _b0(_af, $(_ae)) - function _b0(aa, _b1) { - _b1.children("li").each(function () { - var _b2 = $(this) - var _b3 = $.extend({}, $.parser.parseOptions(this, ["id", "iconCls", "state"]), { checked: _b2.attr("checked") ? true : undefined }) - _b3.text = _b2.children("span").html() - if (!_b3.text) { - _b3.text = _b2.html() - } - var _b4 = _b2.children("ul") - if (_b4.length) { - _b3.children = [] - _b0(_b3.children, _b4) - } - aa.push(_b3) - }) - } - return _af - } - function _b5(_b6) { - var _b7 = $.data(_b6, "tree").options - $(_b6) - .unbind() - .bind("mouseover", function (e) { - var tt = $(e.target) - var _b8 = tt.closest("div.tree-node") - if (!_b8.length) { - return - } - _b8.addClass("tree-node-hover") - if (tt.hasClass("tree-hit")) { - if (tt.hasClass("tree-expanded")) { - tt.addClass("tree-expanded-hover") - } else { - tt.addClass("tree-collapsed-hover") - } - } - e.stopPropagation() - }) - .bind("mouseout", function (e) { - var tt = $(e.target) - var _b9 = tt.closest("div.tree-node") - if (!_b9.length) { - return - } - _b9.removeClass("tree-node-hover") - if (tt.hasClass("tree-hit")) { - if (tt.hasClass("tree-expanded")) { - tt.removeClass("tree-expanded-hover") - } else { - tt.removeClass("tree-collapsed-hover") - } - } - e.stopPropagation() - }) - .bind("click", function (e) { - var tt = $(e.target) - var _ba = tt.closest("div.tree-node") - if (!_ba.length) { - return - } - if (tt.hasClass("tree-hit")) { - _11f(_b6, _ba[0]) - return false - } else { - if (tt.hasClass("tree-checkbox")) { - _e2(_b6, _ba[0], !tt.hasClass("tree-checkbox1")) - return false - } else { - _15d(_b6, _ba[0]) - _b7.onClick.call(_b6, _bd(_b6, _ba[0])) - } - } - e.stopPropagation() - }) - .bind("dblclick", function (e) { - var _bb = $(e.target).closest("div.tree-node") - if (!_bb.length) { - return - } - _15d(_b6, _bb[0]) - _b7.onDblClick.call(_b6, _bd(_b6, _bb[0])) - e.stopPropagation() - }) - .bind("contextmenu", function (e) { - var _bc = $(e.target).closest("div.tree-node") - if (!_bc.length) { - return - } - _b7.onContextMenu.call(_b6, e, _bd(_b6, _bc[0])) - e.stopPropagation() - }) - } - function _be(_bf) { - var _c0 = $(_bf).find("div.tree-node") - _c0.draggable("disable") - _c0.css("cursor", "pointer") - } - function _c1(_c2) { - var _c3 = $.data(_c2, "tree") - var _c4 = _c3.options - var _c5 = _c3.tree - _c3.disabledNodes = [] - _c5.find("div.tree-node") - .draggable({ - disabled: false, - revert: true, - cursor: "pointer", - proxy: function (_c6) { - var p = $('
').appendTo("body") - p.html(' ' + $(_c6).find(".tree-title").html()) - p.hide() - return p - }, - deltaX: 15, - deltaY: 15, - onBeforeDrag: function (e) { - if (_c4.onBeforeDrag.call(_c2, _bd(_c2, this)) == false) { - return false - } - if ($(e.target).hasClass("tree-hit") || $(e.target).hasClass("tree-checkbox")) { - return false - } - if (e.which != 1) { - return false - } - $(this).next("ul").find("div.tree-node").droppable({ accept: "no-accept" }) - var _c7 = $(this).find("span.tree-indent") - if (_c7.length) { - e.data.offsetWidth -= _c7.length * _c7.width() - } - }, - onStartDrag: function () { - $(this).draggable("proxy").css({ left: -10000, top: -10000 }) - _c4.onStartDrag.call(_c2, _bd(_c2, this)) - var _c8 = _bd(_c2, this) - if (_c8.id == undefined) { - _c8.id = "easyui_tree_node_id_temp" - _155(_c2, _c8) - } - _c3.draggingNodeId = _c8.id - }, - onDrag: function (e) { - var x1 = e.pageX, - y1 = e.pageY, - x2 = e.data.startX, - y2 = e.data.startY - var d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) - if (d > 3) { - $(this).draggable("proxy").show() - } - this.pageY = e.pageY - }, - onStopDrag: function () { - $(this).next("ul").find("div.tree-node").droppable({ accept: "div.tree-node" }) - for (var i = 0; i < _c3.disabledNodes.length; i++) { - $(_c3.disabledNodes[i]).droppable("enable") - } - _c3.disabledNodes = [] - var _c9 = _15b(_c2, _c3.draggingNodeId) - if (_c9 && _c9.id == "easyui_tree_node_id_temp") { - _c9.id = "" - _155(_c2, _c9) - } - _c4.onStopDrag.call(_c2, _c9) - } - }) - .droppable({ - accept: "div.tree-node", - onDragEnter: function (e, _ca) { - if (_c4.onDragEnter.call(_c2, this, _bd(_c2, _ca)) == false) { - _cb(_ca, false) - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - $(this).droppable("disable") - _c3.disabledNodes.push(this) - } - }, - onDragOver: function (e, _cc) { - if ($(this).droppable("options").disabled) { - return - } - var _cd = _cc.pageY - var top = $(this).offset().top - var _ce = top + $(this).outerHeight() - _cb(_cc, true) - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - if (_cd > top + (_ce - top) / 2) { - if (_ce - _cd < 5) { - $(this).addClass("tree-node-bottom") - } else { - $(this).addClass("tree-node-append") - } - } else { - if (_cd - top < 5) { - $(this).addClass("tree-node-top") - } else { - $(this).addClass("tree-node-append") - } - } - if (_c4.onDragOver.call(_c2, this, _bd(_c2, _cc)) == false) { - _cb(_cc, false) - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - $(this).droppable("disable") - _c3.disabledNodes.push(this) - } - }, - onDragLeave: function (e, _cf) { - _cb(_cf, false) - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - _c4.onDragLeave.call(_c2, this, _bd(_c2, _cf)) - }, - onDrop: function (e, _d0) { - var _d1 = this - var _d2, _d3 - if ($(this).hasClass("tree-node-append")) { - _d2 = _d4 - } else { - _d2 = _d5 - _d3 = $(this).hasClass("tree-node-top") ? "top" : "bottom" - } - if (_c4.onBeforeDrop.call(_c2, _d1, _14f(_c2, _d0), _d3) == false) { - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - return - } - _d2(_d0, _d1, _d3) - $(this).removeClass("tree-node-append tree-node-top tree-node-bottom") - } - }) - function _cb(_d6, _d7) { - var _d8 = $(_d6).draggable("proxy").find("span.tree-dnd-icon") - _d8.removeClass("tree-dnd-yes tree-dnd-no").addClass(_d7 ? "tree-dnd-yes" : "tree-dnd-no") - } - function _d4(_d9, _da) { - if (_bd(_c2, _da).state == "closed") { - _117(_c2, _da, function () { - _db() - }) - } else { - _db() - } - function _db() { - var _dc = $(_c2).tree("pop", _d9) - $(_c2).tree("append", { parent: _da, data: [_dc] }) - _c4.onDrop.call(_c2, _da, _dc, "append") - } - } - function _d5(_dd, _de, _df) { - var _e0 = {} - if (_df == "top") { - _e0.before = _de - } else { - _e0.after = _de - } - var _e1 = $(_c2).tree("pop", _dd) - _e0.data = _e1 - $(_c2).tree("insert", _e0) - _c4.onDrop.call(_c2, _de, _e1, _df) - } - } - function _e2(_e3, _e4, _e5) { - var _e6 = $.data(_e3, "tree").options - if (!_e6.checkbox) { - return - } - var _e7 = _bd(_e3, _e4) - if (_e6.onBeforeCheck.call(_e3, _e7, _e5) == false) { - return - } - var _e8 = $(_e4) - var ck = _e8.find(".tree-checkbox") - ck.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2") - if (_e5) { - ck.addClass("tree-checkbox1") - } else { - ck.addClass("tree-checkbox0") - } - if (_e6.cascadeCheck) { - _e9(_e8) - _ea(_e8) - } - _e6.onCheck.call(_e3, _e7, _e5) - function _ea(_eb) { - var _ec = _eb.next().find(".tree-checkbox") - _ec.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2") - if (_eb.find(".tree-checkbox").hasClass("tree-checkbox1")) { - _ec.addClass("tree-checkbox1") - } else { - _ec.addClass("tree-checkbox0") - } - } - function _e9(_ed) { - var _ee = _12a(_e3, _ed[0]) - if (_ee) { - var ck = $(_ee.target).find(".tree-checkbox") - ck.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2") - if (_ef(_ed)) { - ck.addClass("tree-checkbox1") - } else { - if (_f0(_ed)) { - ck.addClass("tree-checkbox0") - } else { - ck.addClass("tree-checkbox2") - } - } - _e9($(_ee.target)) - } - function _ef(n) { - var ck = n.find(".tree-checkbox") - if (ck.hasClass("tree-checkbox0") || ck.hasClass("tree-checkbox2")) { - return false - } - var b = true - n.parent() - .siblings() - .each(function () { - if (!$(this).children("div.tree-node").children(".tree-checkbox").hasClass("tree-checkbox1")) { - b = false - } - }) - return b - } - function _f0(n) { - var ck = n.find(".tree-checkbox") - if (ck.hasClass("tree-checkbox1") || ck.hasClass("tree-checkbox2")) { - return false - } - var b = true - n.parent() - .siblings() - .each(function () { - if (!$(this).children("div.tree-node").children(".tree-checkbox").hasClass("tree-checkbox0")) { - b = false - } - }) - return b - } - } - } - function _f1(_f2, _f3) { - var _f4 = $.data(_f2, "tree").options - var _f5 = $(_f3) - if (_f6(_f2, _f3)) { - var ck = _f5.find(".tree-checkbox") - if (ck.length) { - if (ck.hasClass("tree-checkbox1")) { - _e2(_f2, _f3, true) - } else { - _e2(_f2, _f3, false) - } - } else { - if (_f4.onlyLeafCheck) { - $('').insertBefore(_f5.find(".tree-title")) - } - } - } else { - var ck = _f5.find(".tree-checkbox") - if (_f4.onlyLeafCheck) { - ck.remove() - } else { - if (ck.hasClass("tree-checkbox1")) { - _e2(_f2, _f3, true) - } else { - if (ck.hasClass("tree-checkbox2")) { - var _f7 = true - var _f8 = true - var _f9 = _fa(_f2, _f3) - for (var i = 0; i < _f9.length; i++) { - if (_f9[i].checked) { - _f8 = false - } else { - _f7 = false - } - } - if (_f7) { - _e2(_f2, _f3, true) - } - if (_f8) { - _e2(_f2, _f3, false) - } - } - } - } - } - } - function _fb(_fc, ul, _fd, _fe) { - var _ff = $.data(_fc, "tree").options - _fd = _ff.loadFilter.call(_fc, _fd, $(ul).prev("div.tree-node")[0]) - if (!_fe) { - $(ul).empty() - } - var _100 = [] - var _101 = $(ul).prev("div.tree-node").find("span.tree-indent, span.tree-hit").length - _102(ul, _fd, _101) - if (_ff.dnd) { - _c1(_fc) - } else { - _be(_fc) - } - for (var i = 0; i < _100.length; i++) { - _e2(_fc, _100[i], true) - } - setTimeout(function () { - _107(_fc, _fc) - }, 0) - var _103 = null - if (_fc != ul) { - var node = $(ul).prev() - _103 = _bd(_fc, node[0]) - } - _ff.onLoadSuccess.call(_fc, _103, _fd) - function _102(ul, _104, _105) { - for (var i = 0; i < _104.length; i++) { - var li = $("
  • ").appendTo(ul) - var item = _104[i] - if (item.state != "open" && item.state != "closed") { - item.state = "open" - } - var node = $('
    ').appendTo(li) - node.attr("node-id", item.id) - $.data(node[0], "tree-node", { id: item.id, text: item.text, iconCls: item.iconCls, attributes: item.attributes }) - $('').html(_ff.formatter.call(_fc, item)).appendTo(node) - if (_ff.checkbox) { - if (_ff.onlyLeafCheck) { - if (item.state == "open" && (!item.children || !item.children.length)) { - if (item.checked) { - $('').prependTo(node) - } else { - $('').prependTo(node) - } - } - } else { - if (item.checked) { - $('').prependTo(node) - _100.push(node[0]) - } else { - $('').prependTo(node) - } - } - } - if (item.children && item.children.length) { - var _106 = $("
      ").appendTo(li) - if (item.state == "open") { - $('').addClass(item.iconCls).prependTo(node) - $('').prependTo(node) - } else { - $('').addClass(item.iconCls).prependTo(node) - $('').prependTo(node) - _106.css("display", "none") - } - _102(_106, item.children, _105 + 1) - } else { - if (item.state == "closed") { - $('').addClass(item.iconCls).prependTo(node) - $('').prependTo(node) - } else { - $('').addClass(item.iconCls).prependTo(node) - $('').prependTo(node) - } - } - for (var j = 0; j < _105; j++) { - $('').prependTo(node) - } - } - } - } - function _107(_108, ul, _109) { - var opts = $.data(_108, "tree").options - if (!opts.lines) { - return - } - if (!_109) { - _109 = true - $(_108).find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom") - $(_108).find("div.tree-node").removeClass("tree-node-last tree-root-first tree-root-one") - var _10a = $(_108).tree("getRoots") - if (_10a.length > 1) { - $(_10a[0].target).addClass("tree-root-first") - } else { - if (_10a.length == 1) { - $(_10a[0].target).addClass("tree-root-one") - } - } - } - $(ul) - .children("li") - .each(function () { - var node = $(this).children("div.tree-node") - var ul = node.next("ul") - if (ul.length) { - if ($(this).next().length) { - _10b(node) - } - _107(_108, ul, _109) - } else { - _10c(node) - } - }) - var _10d = $(ul).children("li:last").children("div.tree-node").addClass("tree-node-last") - _10d.children("span.tree-join").removeClass("tree-join").addClass("tree-joinbottom") - function _10c(node, _10e) { - var icon = node.find("span.tree-icon") - icon.prev("span.tree-indent").addClass("tree-join") - } - function _10b(node) { - var _10f = node.find("span.tree-indent, span.tree-hit").length - node.next() - .find("div.tree-node") - .each(function () { - $(this) - .children("span:eq(" + (_10f - 1) + ")") - .addClass("tree-line") - }) - } - } - function _110(_111, ul, _112, _113) { - var opts = $.data(_111, "tree").options - _112 = _112 || {} - var _114 = null - if (_111 != ul) { - var node = $(ul).prev() - _114 = _bd(_111, node[0]) - } - if (opts.onBeforeLoad.call(_111, _114, _112) == false) { - return - } - var _115 = $(ul).prev().children("span.tree-folder") - _115.addClass("tree-loading") - var _116 = opts.loader.call( - _111, - _112, - function (data) { - _115.removeClass("tree-loading") - _fb(_111, ul, data) - if (_113) { - _113() - } - }, - function () { - _115.removeClass("tree-loading") - opts.onLoadError.apply(_111, arguments) - if (_113) { - _113() - } - } - ) - if (_116 == false) { - _115.removeClass("tree-loading") - } - } - function _117(_118, _119, _11a) { - var opts = $.data(_118, "tree").options - var hit = $(_119).children("span.tree-hit") - if (hit.length == 0) { - return - } - if (hit.hasClass("tree-expanded")) { - return - } - var node = _bd(_118, _119) - if (opts.onBeforeExpand.call(_118, node) == false) { - return - } - hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded") - hit.next().addClass("tree-folder-open") - var ul = $(_119).next() - if (ul.length) { - if (opts.animate) { - ul.slideDown("normal", function () { - opts.onExpand.call(_118, node) - if (_11a) { - _11a() - } - }) - } else { - ul.css("display", "block") - opts.onExpand.call(_118, node) - if (_11a) { - _11a() - } - } - } else { - var _11b = $('
        ').insertAfter(_119) - _110(_118, _11b[0], { id: node.id }, function () { - if (_11b.is(":empty")) { - _11b.remove() - } - if (opts.animate) { - _11b.slideDown("normal", function () { - opts.onExpand.call(_118, node) - if (_11a) { - _11a() - } - }) - } else { - _11b.css("display", "block") - opts.onExpand.call(_118, node) - if (_11a) { - _11a() - } - } - }) - } - } - function _11c(_11d, _11e) { - var opts = $.data(_11d, "tree").options - var hit = $(_11e).children("span.tree-hit") - if (hit.length == 0) { - return - } - if (hit.hasClass("tree-collapsed")) { - return - } - var node = _bd(_11d, _11e) - if (opts.onBeforeCollapse.call(_11d, node) == false) { - return - } - hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed") - hit.next().removeClass("tree-folder-open") - var ul = $(_11e).next() - if (opts.animate) { - ul.slideUp("normal", function () { - opts.onCollapse.call(_11d, node) - }) - } else { - ul.css("display", "none") - opts.onCollapse.call(_11d, node) - } - } - function _11f(_120, _121) { - var hit = $(_121).children("span.tree-hit") - if (hit.length == 0) { - return - } - if (hit.hasClass("tree-expanded")) { - _11c(_120, _121) - } else { - _117(_120, _121) - } - } - function _122(_123, _124) { - var _125 = _fa(_123, _124) - if (_124) { - _125.unshift(_bd(_123, _124)) - } - for (var i = 0; i < _125.length; i++) { - _117(_123, _125[i].target) - } - } - function _126(_127, _128) { - var _129 = [] - var p = _12a(_127, _128) - while (p) { - _129.unshift(p) - p = _12a(_127, p.target) - } - for (var i = 0; i < _129.length; i++) { - _117(_127, _129[i].target) - } - } - function _12b(_12c, _12d) { - var _12e = _fa(_12c, _12d) - if (_12d) { - _12e.unshift(_bd(_12c, _12d)) - } - for (var i = 0; i < _12e.length; i++) { - _11c(_12c, _12e[i].target) - } - } - function _12f(_130) { - var _131 = _132(_130) - if (_131.length) { - return _131[0] - } else { - return null - } - } - function _132(_133) { - var _134 = [] - $(_133) - .children("li") - .each(function () { - var node = $(this).children("div.tree-node") - _134.push(_bd(_133, node[0])) - }) - return _134 - } - function _fa(_135, _136) { - var _137 = [] - if (_136) { - _138($(_136)) - } else { - var _139 = _132(_135) - for (var i = 0; i < _139.length; i++) { - _137.push(_139[i]) - _138($(_139[i].target)) - } - } - function _138(node) { - node.next() - .find("div.tree-node") - .each(function () { - _137.push(_bd(_135, this)) - }) - } - return _137 - } - function _12a(_13a, _13b) { - var ul = $(_13b).parent().parent() - if (ul[0] == _13a) { - return null - } else { - return _bd(_13a, ul.prev()[0]) - } - } - function _13c(_13d, _13e) { - _13e = _13e || "checked" - var _13f = "" - if (_13e == "checked") { - _13f = "span.tree-checkbox1" - } else { - if (_13e == "unchecked") { - _13f = "span.tree-checkbox0" - } else { - if (_13e == "indeterminate") { - _13f = "span.tree-checkbox2" - } - } - } - var _140 = [] - $(_13d) - .find(_13f) - .each(function () { - var node = $(this).parent() - _140.push(_bd(_13d, node[0])) - }) - return _140 - } - function _141(_142) { - var node = $(_142).find("div.tree-node-selected") - if (node.length) { - return _bd(_142, node[0]) - } else { - return null - } - } - function _143(_144, _145) { - var node = $(_145.parent) - var ul - if (node.length == 0) { - ul = $(_144) - } else { - ul = node.next() - if (ul.length == 0) { - ul = $("
          ").insertAfter(node) - } - } - if (_145.data && _145.data.length) { - var _146 = node.find("span.tree-icon") - if (_146.hasClass("tree-file")) { - _146.removeClass("tree-file").addClass("tree-folder tree-folder-open") - var hit = $('').insertBefore(_146) - if (hit.prev().length) { - hit.prev().remove() - } - } - } - _fb(_144, ul[0], _145.data, true) - _f1(_144, ul.prev()) - } - function _147(_148, _149) { - var ref = _149.before || _149.after - var _14a = _12a(_148, ref) - var li - if (_14a) { - _143(_148, { parent: _14a.target, data: [_149.data] }) - li = $(_14a.target).next().children("li:last") - } else { - _143(_148, { parent: null, data: [_149.data] }) - li = $(_148).children("li:last") - } - if (_149.before) { - li.insertBefore($(ref).parent()) - } else { - li.insertAfter($(ref).parent()) - } - } - function _14b(_14c, _14d) { - var _14e = _12a(_14c, _14d) - var node = $(_14d) - var li = node.parent() - var ul = li.parent() - li.remove() - if (ul.children("li").length == 0) { - var node = ul.prev() - node.find(".tree-icon").removeClass("tree-folder").addClass("tree-file") - node.find(".tree-hit").remove() - $('').prependTo(node) - if (ul[0] != _14c) { - ul.remove() - } - } - if (_14e) { - _f1(_14c, _14e.target) - } - _107(_14c, _14c) - } - function _14f(_150, _151) { - function _152(aa, ul) { - ul.children("li").each(function () { - var node = $(this).children("div.tree-node") - var _153 = _bd(_150, node[0]) - var sub = $(this).children("ul") - if (sub.length) { - _153.children = [] - _152(_153.children, sub) - } - aa.push(_153) - }) - } - if (_151) { - var _154 = _bd(_150, _151) - _154.children = [] - _152(_154.children, $(_151).next()) - return _154 - } else { - return null - } - } - function _155(_156, _157) { - var opts = $.data(_156, "tree").options - var node = $(_157.target) - var _158 = _bd(_156, _157.target) - if (_158.iconCls) { - node.find(".tree-icon").removeClass(_158.iconCls) - } - var data = $.extend({}, _158, _157) - $.data(_157.target, "tree-node", data) - node.attr("node-id", data.id) - node.find(".tree-title").html(opts.formatter.call(_156, data)) - if (data.iconCls) { - node.find(".tree-icon").addClass(data.iconCls) - } - if (_158.checked != data.checked) { - _e2(_156, _157.target, data.checked) - } - } - function _bd(_159, _15a) { - var node = $.extend({}, $.data(_15a, "tree-node"), { target: _15a, checked: $(_15a).find(".tree-checkbox").hasClass("tree-checkbox1") }) - if (!_f6(_159, _15a)) { - node.state = $(_15a).find(".tree-hit").hasClass("tree-expanded") ? "open" : "closed" - } - return node - } - function _15b(_15c, id) { - var node = $(_15c).find("div.tree-node[node-id=" + id + "]") - if (node.length) { - return _bd(_15c, node[0]) - } else { - return null - } - } - function _15d(_15e, _15f) { - var opts = $.data(_15e, "tree").options - var node = _bd(_15e, _15f) - if (opts.onBeforeSelect.call(_15e, node) == false) { - return - } - $("div.tree-node-selected", _15e).removeClass("tree-node-selected") - $(_15f).addClass("tree-node-selected") - opts.onSelect.call(_15e, node) - } - function _f6(_160, _161) { - var node = $(_161) - var hit = node.children("span.tree-hit") - return hit.length == 0 - } - function _162(_163, _164) { - var opts = $.data(_163, "tree").options - var node = _bd(_163, _164) - if (opts.onBeforeEdit.call(_163, node) == false) { - return - } - $(_164).css("position", "relative") - var nt = $(_164).find(".tree-title") - var _165 = nt.outerWidth() - nt.empty() - var _166 = $('').appendTo(nt) - _166.val(node.text).focus() - _166.width(_165 + 20) - _166.height(document.compatMode == "CSS1Compat" ? 18 - (_166.outerHeight() - _166.height()) : 18) - _166.bind("click", function (e) { - return false - }) - .bind("mousedown", function (e) { - e.stopPropagation() - }) - .bind("mousemove", function (e) { - e.stopPropagation() - }) - .bind("keydown", function (e) { - if (e.keyCode == 13) { - _167(_163, _164) - return false - } else { - if (e.keyCode == 27) { - _16b(_163, _164) - return false - } - } - }) - .bind("blur", function (e) { - e.stopPropagation() - _167(_163, _164) - }) - } - function _167(_168, _169) { - var opts = $.data(_168, "tree").options - $(_169).css("position", "") - var _16a = $(_169).find("input.tree-editor") - var val = _16a.val() - _16a.remove() - var node = _bd(_168, _169) - node.text = val - _155(_168, node) - opts.onAfterEdit.call(_168, node) - } - function _16b(_16c, _16d) { - var opts = $.data(_16c, "tree").options - $(_16d).css("position", "") - $(_16d).find("input.tree-editor").remove() - var node = _bd(_16c, _16d) - _155(_16c, node) - opts.onCancelEdit.call(_16c, node) - } - $.fn.tree = function (_16e, _16f) { - if (typeof _16e == "string") { - return $.fn.tree.methods[_16e](this, _16f) - } - var _16e = _16e || {} - return this.each(function () { - var _170 = $.data(this, "tree") - var opts - if (_170) { - opts = $.extend(_170.options, _16e) - _170.options = opts - } else { - opts = $.extend({}, $.fn.tree.defaults, $.fn.tree.parseOptions(this), _16e) - $.data(this, "tree", { options: opts, tree: _aa(this) }) - var data = _ad(this) - if (data.length && !opts.data) { - opts.data = data - } - } - _b5(this) - if (opts.lines) { - $(this).addClass("tree-lines") - } - if (opts.data) { - _fb(this, this, opts.data) - } else { - if (opts.dnd) { - _c1(this) - } else { - _be(this) - } - } - _110(this, this) - }) - } - $.fn.tree.methods = { - options: function (jq) { - return $.data(jq[0], "tree").options - }, - loadData: function (jq, data) { - return jq.each(function () { - _fb(this, this, data) - }) - }, - getNode: function (jq, _171) { - return _bd(jq[0], _171) - }, - getData: function (jq, _172) { - return _14f(jq[0], _172) - }, - reload: function (jq, _173) { - return jq.each(function () { - if (_173) { - var node = $(_173) - var hit = node.children("span.tree-hit") - hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed") - node.next().remove() - _117(this, _173) - } else { - $(this).empty() - _110(this, this) - } - }) - }, - getRoot: function (jq) { - return _12f(jq[0]) - }, - getRoots: function (jq) { - return _132(jq[0]) - }, - getParent: function (jq, _174) { - return _12a(jq[0], _174) - }, - getChildren: function (jq, _175) { - return _fa(jq[0], _175) - }, - getChecked: function (jq, _176) { - return _13c(jq[0], _176) - }, - getSelected: function (jq) { - return _141(jq[0]) - }, - isLeaf: function (jq, _177) { - return _f6(jq[0], _177) - }, - find: function (jq, id) { - return _15b(jq[0], id) - }, - select: function (jq, _178) { - return jq.each(function () { - _15d(this, _178) - }) - }, - check: function (jq, _179) { - return jq.each(function () { - _e2(this, _179, true) - }) - }, - uncheck: function (jq, _17a) { - return jq.each(function () { - _e2(this, _17a, false) - }) - }, - collapse: function (jq, _17b) { - return jq.each(function () { - _11c(this, _17b) - }) - }, - expand: function (jq, _17c) { - return jq.each(function () { - _117(this, _17c) - }) - }, - collapseAll: function (jq, _17d) { - return jq.each(function () { - _12b(this, _17d) - }) - }, - expandAll: function (jq, _17e) { - return jq.each(function () { - _122(this, _17e) - }) - }, - expandTo: function (jq, _17f) { - return jq.each(function () { - _126(this, _17f) - }) - }, - toggle: function (jq, _180) { - return jq.each(function () { - _11f(this, _180) - }) - }, - append: function (jq, _181) { - return jq.each(function () { - _143(this, _181) - }) - }, - insert: function (jq, _182) { - return jq.each(function () { - _147(this, _182) - }) - }, - remove: function (jq, _183) { - return jq.each(function () { - _14b(this, _183) - }) - }, - pop: function (jq, _184) { - var node = jq.tree("getData", _184) - jq.tree("remove", _184) - return node - }, - update: function (jq, _185) { - return jq.each(function () { - _155(this, _185) - }) - }, - enableDnd: function (jq) { - return jq.each(function () { - _c1(this) - }) - }, - disableDnd: function (jq) { - return jq.each(function () { - _be(this) - }) - }, - beginEdit: function (jq, _186) { - return jq.each(function () { - _162(this, _186) - }) - }, - endEdit: function (jq, _187) { - return jq.each(function () { - _167(this, _187) - }) - }, - cancelEdit: function (jq, _188) { - return jq.each(function () { - _16b(this, _188) - }) - } - } - $.fn.tree.parseOptions = function (_189) { - var t = $(_189) - return $.extend( - {}, - $.parser.parseOptions(_189, [ - "url", - "method", - { checkbox: "boolean", cascadeCheck: "boolean", onlyLeafCheck: "boolean" }, - { animate: "boolean", lines: "boolean", dnd: "boolean" } - ]) - ) - } - $.fn.tree.defaults = { - url: null, - method: "post", - animate: false, - checkbox: false, - cascadeCheck: true, - onlyLeafCheck: false, - lines: false, - dnd: false, - data: null, - formatter: function (node) { - return node.text - }, - loader: function (_18a, _18b, _18c) { - var opts = $(this).tree("options") - if (!opts.url) { - return false - } - $.ajax({ - type: opts.method, - url: opts.url, - data: _18a, - dataType: "json", - success: function (data) { - _18b(data) - }, - error: function () { - _18c.apply(this, arguments) - } - }) - }, - loadFilter: function (data, _18d) { - return data - }, - onBeforeLoad: function (node, _18e) {}, - onLoadSuccess: function (node, data) {}, - onLoadError: function () {}, - onClick: function (node) {}, - onDblClick: function (node) {}, - onBeforeExpand: function (node) {}, - onExpand: function (node) {}, - onBeforeCollapse: function (node) {}, - onCollapse: function (node) {}, - onBeforeCheck: function (node, _18f) {}, - onCheck: function (node, _190) {}, - onBeforeSelect: function (node) {}, - onSelect: function (node) {}, - onContextMenu: function (e, node) {}, - onBeforeDrag: function (node) {}, - onStartDrag: function (node) {}, - onStopDrag: function (node) {}, - onDragEnter: function (_191, _192) {}, - onDragOver: function (_193, _194) {}, - onDragLeave: function (_195, _196) {}, - onBeforeDrop: function (_197, _198, _199) {}, - onDrop: function (_19a, _19b, _19c) {}, - onBeforeEdit: function (node) {}, - onAfterEdit: function (node) {}, - onCancelEdit: function (node) {} - } -})(jQuery) -;(function ($) { - function init(_19d) { - $(_19d).addClass("progressbar") - $(_19d).html('
          ') - return $(_19d) - } - function _19e(_19f, _1a0) { - var opts = $.data(_19f, "progressbar").options - var bar = $.data(_19f, "progressbar").bar - if (_1a0) { - opts.width = _1a0 - } - bar._outerWidth(opts.width)._outerHeight(opts.height) - bar.find("div.progressbar-text").width(bar.width()) - bar.find("div.progressbar-text,div.progressbar-value").css({ height: bar.height() + "px", lineHeight: bar.height() + "px" }) - } - $.fn.progressbar = function (_1a1, _1a2) { - if (typeof _1a1 == "string") { - var _1a3 = $.fn.progressbar.methods[_1a1] - if (_1a3) { - return _1a3(this, _1a2) - } - } - _1a1 = _1a1 || {} - return this.each(function () { - var _1a4 = $.data(this, "progressbar") - if (_1a4) { - $.extend(_1a4.options, _1a1) - } else { - _1a4 = $.data(this, "progressbar", { - options: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), _1a1), - bar: init(this) - }) - } - $(this).progressbar("setValue", _1a4.options.value) - _19e(this) - }) - } - $.fn.progressbar.methods = { - options: function (jq) { - return $.data(jq[0], "progressbar").options - }, - resize: function (jq, _1a5) { - return jq.each(function () { - _19e(this, _1a5) - }) - }, - getValue: function (jq) { - return $.data(jq[0], "progressbar").options.value - }, - setValue: function (jq, _1a6) { - if (_1a6 < 0) { - _1a6 = 0 - } - if (_1a6 > 100) { - _1a6 = 100 - } - return jq.each(function () { - var opts = $.data(this, "progressbar").options - var text = opts.text.replace(/{value}/, _1a6) - var _1a7 = opts.value - opts.value = _1a6 - $(this) - .find("div.progressbar-value") - .width(_1a6 + "%") - $(this).find("div.progressbar-text").html(text) - if (_1a7 != _1a6) { - opts.onChange.call(this, _1a6, _1a7) - } - }) - } - } - $.fn.progressbar.parseOptions = function (_1a8) { - return $.extend({}, $.parser.parseOptions(_1a8, ["width", "height", "text", { value: "number" }])) - } - $.fn.progressbar.defaults = { width: "auto", height: 22, value: 0, text: "{value}%", onChange: function (_1a9, _1aa) {} } -})(jQuery) -;(function ($) { - function init(_1ab) { - $(_1ab).addClass("tooltip-f") - } - function _1ac(_1ad) { - var opts = $.data(_1ad, "tooltip").options - $(_1ad) - .unbind(".tooltip") - .bind(opts.showEvent + ".tooltip", function (e) { - _1b4(_1ad, e) - }) - .bind(opts.hideEvent + ".tooltip", function (e) { - _1ba(_1ad, e) - }) - .bind("mousemove.tooltip", function (e) { - if (opts.trackMouse) { - opts.trackMouseX = e.pageX - opts.trackMouseY = e.pageY - _1ae(_1ad) - } - }) - } - function _1af(_1b0) { - var _1b1 = $.data(_1b0, "tooltip") - if (_1b1.showTimer) { - clearTimeout(_1b1.showTimer) - _1b1.showTimer = null - } - if (_1b1.hideTimer) { - clearTimeout(_1b1.hideTimer) - _1b1.hideTimer = null - } - } - function _1ae(_1b2) { - var _1b3 = $.data(_1b2, "tooltip") - if (!_1b3 || !_1b3.tip) { - return - } - var opts = _1b3.options - var tip = _1b3.tip - if (opts.trackMouse) { - t = $() - var left = opts.trackMouseX + opts.deltaX - var top = opts.trackMouseY + opts.deltaY - } else { - var t = $(_1b2) - var left = t.offset().left + opts.deltaX - var top = t.offset().top + opts.deltaY - } - switch (opts.position) { - case "right": - left += t._outerWidth() + 12 + (opts.trackMouse ? 12 : 0) - top -= (tip._outerHeight() - t._outerHeight()) / 2 - break - case "left": - left -= tip._outerWidth() + 12 + (opts.trackMouse ? 12 : 0) - top -= (tip._outerHeight() - t._outerHeight()) / 2 - break - case "top": - left -= (tip._outerWidth() - t._outerWidth()) / 2 - top -= tip._outerHeight() + 12 + (opts.trackMouse ? 12 : 0) - break - case "bottom": - left -= (tip._outerWidth() - t._outerWidth()) / 2 - top += t._outerHeight() + 12 + (opts.trackMouse ? 12 : 0) - break - } - tip.css({ left: left, top: top, zIndex: opts.zIndex != undefined ? opts.zIndex : $.fn.window ? $.fn.window.defaults.zIndex++ : "" }) - opts.onPosition.call(_1b2, left, top) - } - function _1b4(_1b5, e) { - var _1b6 = $.data(_1b5, "tooltip") - var opts = _1b6.options - var tip = _1b6.tip - if (!tip) { - tip = $( - '
          ' + - '
          ' + - '
          ' + - '
          ' + - "
          " - ).appendTo("body") - _1b6.tip = tip - _1b7(_1b5) - } - tip.removeClass("tooltip-top tooltip-bottom tooltip-left tooltip-right").addClass("tooltip-" + opts.position) - _1af(_1b5) - _1b6.showTimer = setTimeout(function () { - _1ae(_1b5) - tip.show() - opts.onShow.call(_1b5, e) - var _1b8 = tip.children(".tooltip-arrow-outer") - var _1b9 = tip.children(".tooltip-arrow") - var bc = "border-" + opts.position + "-color" - _1b8.add(_1b9).css({ borderTopColor: "", borderBottomColor: "", borderLeftColor: "", borderRightColor: "" }) - _1b8.css(bc, tip.css(bc)) - _1b9.css(bc, tip.css("backgroundColor")) - }, opts.showDelay) - } - function _1ba(_1bb, e) { - var _1bc = $.data(_1bb, "tooltip") - if (_1bc && _1bc.tip) { - _1af(_1bb) - _1bc.hideTimer = setTimeout(function () { - _1bc.tip.hide() - _1bc.options.onHide.call(_1bb, e) - }, _1bc.options.hideDelay) - } - } - function _1b7(_1bd, _1be) { - var _1bf = $.data(_1bd, "tooltip") - var opts = _1bf.options - if (_1be) { - opts.content = _1be - } - if (!_1bf.tip) { - return - } - var cc = typeof opts.content == "function" ? opts.content.call(_1bd) : opts.content - _1bf.tip.children(".tooltip-content").html(cc) - opts.onUpdate.call(_1bd, cc) - } - function _1c0(_1c1) { - var _1c2 = $.data(_1c1, "tooltip") - if (_1c2) { - _1af(_1c1) - var opts = _1c2.options - if (_1c2.tip) { - _1c2.tip.remove() - } - if (opts._title) { - $(_1c1).attr("title", opts._title) - } - $.removeData(_1c1, "tooltip") - $(_1c1).unbind(".tooltip").removeClass("tooltip-f") - opts.onDestroy.call(_1c1) - } - } - $.fn.tooltip = function (_1c3, _1c4) { - if (typeof _1c3 == "string") { - return $.fn.tooltip.methods[_1c3](this, _1c4) - } - _1c3 = _1c3 || {} - return this.each(function () { - var _1c5 = $.data(this, "tooltip") - if (_1c5) { - $.extend(_1c5.options, _1c3) - } else { - $.data(this, "tooltip", { options: $.extend({}, $.fn.tooltip.defaults, $.fn.tooltip.parseOptions(this), _1c3) }) - init(this) - } - _1ac(this) - _1b7(this) - }) - } - $.fn.tooltip.methods = { - options: function (jq) { - return $.data(jq[0], "tooltip").options - }, - tip: function (jq) { - return $.data(jq[0], "tooltip").tip - }, - arrow: function (jq) { - return jq.tooltip("tip").children(".tooltip-arrow-outer,.tooltip-arrow") - }, - show: function (jq, e) { - return jq.each(function () { - _1b4(this, e) - }) - }, - hide: function (jq, e) { - return jq.each(function () { - _1ba(this, e) - }) - }, - update: function (jq, _1c6) { - return jq.each(function () { - _1b7(this, _1c6) - }) - }, - reposition: function (jq) { - return jq.each(function () { - _1ae(this) - }) - }, - destroy: function (jq) { - return jq.each(function () { - _1c0(this) - }) - } - } - $.fn.tooltip.parseOptions = function (_1c7) { - var t = $(_1c7) - var opts = $.extend( - {}, - $.parser.parseOptions(_1c7, [ - "position", - "showEvent", - "hideEvent", - "content", - { deltaX: "number", deltaY: "number", showDelay: "number", hideDelay: "number" } - ]), - { _title: t.attr("title") } - ) - t.attr("title", "") - if (!opts.content) { - opts.content = opts._title - } - return opts - } - $.fn.tooltip.defaults = { - position: "bottom", - content: null, - trackMouse: false, - deltaX: 0, - deltaY: 0, - showEvent: "mouseenter", - hideEvent: "mouseleave", - showDelay: 200, - hideDelay: 100, - onShow: function (e) {}, - onHide: function (e) {}, - onUpdate: function (_1c8) {}, - onPosition: function (left, top) {}, - onDestroy: function () {} - } -})(jQuery) -;(function ($) { - $.fn._remove = function () { - return this.each(function () { - $(this).remove() - try { - this.outerHTML = "" - } catch (err) {} - }) - } - function _1c9(node) { - node._remove() - } - function _1ca(_1cb, _1cc) { - var opts = $.data(_1cb, "panel").options - var _1cd = $.data(_1cb, "panel").panel - var _1ce = _1cd.children("div.panel-header") - var _1cf = _1cd.children("div.panel-body") - if (_1cc) { - if (_1cc.width) { - opts.width = _1cc.width - } - if (_1cc.height) { - opts.height = _1cc.height - } - if (_1cc.left != null) { - opts.left = _1cc.left - } - if (_1cc.top != null) { - opts.top = _1cc.top - } - } - opts.fit ? $.extend(opts, _1cd._fit()) : _1cd._fit(false) - _1cd.css({ left: opts.left, top: opts.top }) - if (!isNaN(opts.width)) { - _1cd._outerWidth(opts.width) - } else { - _1cd.width("auto") - } - _1ce.add(_1cf)._outerWidth(_1cd.width()) - if (!isNaN(opts.height)) { - _1cd._outerHeight(opts.height) - _1cf._outerHeight(_1cd.height() - _1ce._outerHeight()) - } else { - _1cf.height("auto") - } - _1cd.css("height", "") - opts.onResize.apply(_1cb, [opts.width, opts.height]) - _1cd.find(">div.panel-body>div").triggerHandler("_resize") - } - function _1d0(_1d1, _1d2) { - var opts = $.data(_1d1, "panel").options - var _1d3 = $.data(_1d1, "panel").panel - if (_1d2) { - if (_1d2.left != null) { - opts.left = _1d2.left - } - if (_1d2.top != null) { - opts.top = _1d2.top - } - } - _1d3.css({ left: opts.left, top: opts.top }) - opts.onMove.apply(_1d1, [opts.left, opts.top]) - } - function _1d4(_1d5) { - $(_1d5).addClass("panel-body") - var _1d6 = $('
          ').insertBefore(_1d5) - _1d6[0].appendChild(_1d5) - _1d6.bind("_resize", function () { - var opts = $.data(_1d5, "panel").options - if (opts.fit == true) { - _1ca(_1d5) - } - return false - }) - return _1d6 - } - function _1d7(_1d8) { - var opts = $.data(_1d8, "panel").options - var _1d9 = $.data(_1d8, "panel").panel - if (opts.tools && typeof opts.tools == "string") { - _1d9.find(">div.panel-header>div.panel-tool .panel-tool-a").appendTo(opts.tools) - } - _1c9(_1d9.children("div.panel-header")) - if (opts.title && !opts.noheader) { - var _1da = $('
          ' + opts.title + "
          ").prependTo(_1d9) - if (opts.iconCls) { - _1da.find(".panel-title").addClass("panel-with-icon") - $('
          ').addClass(opts.iconCls).appendTo(_1da) - } - var tool = $('
          ').appendTo(_1da) - tool.bind("click", function (e) { - e.stopPropagation() - }) - if (opts.tools) { - if (typeof opts.tools == "string") { - $(opts.tools) - .children() - .each(function () { - $(this).addClass($(this).attr("iconCls")).addClass("panel-tool-a").appendTo(tool) - }) - } else { - for (var i = 0; i < opts.tools.length; i++) { - var t = $('').addClass(opts.tools[i].iconCls).appendTo(tool) - if (opts.tools[i].handler) { - t.bind("click", eval(opts.tools[i].handler)) - } - } - } - } - if (opts.collapsible) { - $('') - .appendTo(tool) - .bind("click", function () { - if (opts.collapsed == true) { - _1f5(_1d8, true) - } else { - _1ea(_1d8, true) - } - return false - }) - } - if (opts.minimizable) { - $('') - .appendTo(tool) - .bind("click", function () { - _1fb(_1d8) - return false - }) - } - if (opts.maximizable) { - $('') - .appendTo(tool) - .bind("click", function () { - if (opts.maximized == true) { - _1fe(_1d8) - } else { - _1e9(_1d8) - } - return false - }) - } - if (opts.closable) { - $('') - .appendTo(tool) - .bind("click", function () { - _1db(_1d8) - return false - }) - } - _1d9.children("div.panel-body").removeClass("panel-body-noheader") - } else { - _1d9.children("div.panel-body").addClass("panel-body-noheader") - } - } - function _1dc(_1dd) { - var _1de = $.data(_1dd, "panel") - var opts = _1de.options - if (opts.href) { - if (!_1de.isLoaded || !opts.cache) { - _1de.isLoaded = false - _1df(_1dd) - if (opts.loadingMessage) { - $(_1dd).html($('
          ').html(opts.loadingMessage)) - } - $.ajax({ - url: opts.href, - cache: false, - dataType: "html", - success: function (data) { - _1e0(opts.extractor.call(_1dd, data)) - opts.onLoad.apply(_1dd, arguments) - _1de.isLoaded = true - } - }) - } - } else { - if (opts.content) { - if (!_1de.isLoaded) { - _1df(_1dd) - _1e0(opts.content) - _1de.isLoaded = true - } - } - } - function _1e0(_1e1) { - $(_1dd).html(_1e1) - if ($.parser) { - $.parser.parse($(_1dd)) - } - } - } - function _1df(_1e2) { - var t = $(_1e2) - t.find(".combo-f").each(function () { - $(this).combo("destroy") - }) - t.find(".m-btn").each(function () { - $(this).menubutton("destroy") - }) - t.find(".s-btn").each(function () { - $(this).splitbutton("destroy") - }) - t.find(".tooltip-f").tooltip("destroy") - } - function _1e3(_1e4) { - $(_1e4) - .find("div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible") - .each(function () { - $(this).triggerHandler("_resize", [true]) - }) - } - function _1e5(_1e6, _1e7) { - var opts = $.data(_1e6, "panel").options - var _1e8 = $.data(_1e6, "panel").panel - if (_1e7 != true) { - if (opts.onBeforeOpen.call(_1e6) == false) { - return - } - } - _1e8.show() - opts.closed = false - opts.minimized = false - var tool = _1e8.children("div.panel-header").find("a.panel-tool-restore") - if (tool.length) { - opts.maximized = true - } - opts.onOpen.call(_1e6) - if (opts.maximized == true) { - opts.maximized = false - _1e9(_1e6) - } - if (opts.collapsed == true) { - opts.collapsed = false - _1ea(_1e6) - } - if (!opts.collapsed) { - _1dc(_1e6) - _1e3(_1e6) - } - } - function _1db(_1eb, _1ec) { - var opts = $.data(_1eb, "panel").options - var _1ed = $.data(_1eb, "panel").panel - if (_1ec != true) { - if (opts.onBeforeClose.call(_1eb) == false) { - return - } - } - _1ed._fit(false) - _1ed.hide() - opts.closed = true - opts.onClose.call(_1eb) - } - function _1ee(_1ef, _1f0) { - var opts = $.data(_1ef, "panel").options - var _1f1 = $.data(_1ef, "panel").panel - if (_1f0 != true) { - if (opts.onBeforeDestroy.call(_1ef) == false) { - return - } - } - _1df(_1ef) - _1c9(_1f1) - opts.onDestroy.call(_1ef) - } - function _1ea(_1f2, _1f3) { - var opts = $.data(_1f2, "panel").options - var _1f4 = $.data(_1f2, "panel").panel - var body = _1f4.children("div.panel-body") - var tool = _1f4.children("div.panel-header").find("a.panel-tool-collapse") - if (opts.collapsed == true) { - return - } - body.stop(true, true) - if (opts.onBeforeCollapse.call(_1f2) == false) { - return - } - tool.addClass("panel-tool-expand") - if (_1f3 == true) { - body.slideUp("normal", function () { - opts.collapsed = true - opts.onCollapse.call(_1f2) - }) - } else { - body.hide() - opts.collapsed = true - opts.onCollapse.call(_1f2) - } - } - function _1f5(_1f6, _1f7) { - var opts = $.data(_1f6, "panel").options - var _1f8 = $.data(_1f6, "panel").panel - var body = _1f8.children("div.panel-body") - var tool = _1f8.children("div.panel-header").find("a.panel-tool-collapse") - if (opts.collapsed == false) { - return - } - body.stop(true, true) - if (opts.onBeforeExpand.call(_1f6) == false) { - return - } - tool.removeClass("panel-tool-expand") - if (_1f7 == true) { - body.slideDown("normal", function () { - opts.collapsed = false - opts.onExpand.call(_1f6) - _1dc(_1f6) - _1e3(_1f6) - }) - } else { - body.show() - opts.collapsed = false - opts.onExpand.call(_1f6) - _1dc(_1f6) - _1e3(_1f6) - } - } - function _1e9(_1f9) { - var opts = $.data(_1f9, "panel").options - var _1fa = $.data(_1f9, "panel").panel - var tool = _1fa.children("div.panel-header").find("a.panel-tool-max") - if (opts.maximized == true) { - return - } - tool.addClass("panel-tool-restore") - if (!$.data(_1f9, "panel").original) { - $.data(_1f9, "panel").original = { width: opts.width, height: opts.height, left: opts.left, top: opts.top, fit: opts.fit } - } - opts.left = 0 - opts.top = 0 - opts.fit = true - _1ca(_1f9) - opts.minimized = false - opts.maximized = true - opts.onMaximize.call(_1f9) - } - function _1fb(_1fc) { - var opts = $.data(_1fc, "panel").options - var _1fd = $.data(_1fc, "panel").panel - _1fd._fit(false) - _1fd.hide() - opts.minimized = true - opts.maximized = false - opts.onMinimize.call(_1fc) - } - function _1fe(_1ff) { - var opts = $.data(_1ff, "panel").options - var _200 = $.data(_1ff, "panel").panel - var tool = _200.children("div.panel-header").find("a.panel-tool-max") - if (opts.maximized == false) { - return - } - _200.show() - tool.removeClass("panel-tool-restore") - $.extend(opts, $.data(_1ff, "panel").original) - _1ca(_1ff) - opts.minimized = false - opts.maximized = false - $.data(_1ff, "panel").original = null - opts.onRestore.call(_1ff) - } - function _201(_202) { - var opts = $.data(_202, "panel").options - var _203 = $.data(_202, "panel").panel - var _204 = $(_202).panel("header") - var body = $(_202).panel("body") - _203.css(opts.style) - _203.addClass(opts.cls) - if (opts.border) { - _204.removeClass("panel-header-noborder") - body.removeClass("panel-body-noborder") - } else { - _204.addClass("panel-header-noborder") - body.addClass("panel-body-noborder") - } - _204.addClass(opts.headerCls) - body.addClass(opts.bodyCls) - if (opts.id) { - $(_202).attr("id", opts.id) - } else { - $(_202).attr("id", "") - } - } - function _205(_206, _207) { - $.data(_206, "panel").options.title = _207 - $(_206).panel("header").find("div.panel-title").html(_207) - } - var TO = false - var _208 = true - $(window) - .unbind(".panel") - .bind("resize.panel", function () { - if (!_208) { - return - } - if (TO !== false) { - clearTimeout(TO) - } - TO = setTimeout(function () { - _208 = false - var _209 = $("body.layout") - if (_209.length) { - _209.layout("resize") - } else { - $("body").children("div.panel,div.accordion,div.tabs-container,div.layout").triggerHandler("_resize") - } - _208 = true - TO = false - }, 200) - }) - $.fn.panel = function (_20a, _20b) { - if (typeof _20a == "string") { - return $.fn.panel.methods[_20a](this, _20b) - } - _20a = _20a || {} - return this.each(function () { - var _20c = $.data(this, "panel") - var opts - if (_20c) { - opts = $.extend(_20c.options, _20a) - _20c.isLoaded = false - } else { - opts = $.extend({}, $.fn.panel.defaults, $.fn.panel.parseOptions(this), _20a) - $(this).attr("title", "") - _20c = $.data(this, "panel", { options: opts, panel: _1d4(this), isLoaded: false }) - } - _1d7(this) - _201(this) - if (opts.doSize == true) { - _20c.panel.css("display", "block") - _1ca(this) - } - if (opts.closed == true || opts.minimized == true) { - _20c.panel.hide() - } else { - _1e5(this) - } - }) - } - $.fn.panel.methods = { - options: function (jq) { - return $.data(jq[0], "panel").options - }, - panel: function (jq) { - return $.data(jq[0], "panel").panel - }, - header: function (jq) { - return $.data(jq[0], "panel").panel.find(">div.panel-header") - }, - body: function (jq) { - return $.data(jq[0], "panel").panel.find(">div.panel-body") - }, - setTitle: function (jq, _20d) { - return jq.each(function () { - _205(this, _20d) - }) - }, - open: function (jq, _20e) { - return jq.each(function () { - _1e5(this, _20e) - }) - }, - close: function (jq, _20f) { - return jq.each(function () { - _1db(this, _20f) - }) - }, - destroy: function (jq, _210) { - return jq.each(function () { - _1ee(this, _210) - }) - }, - refresh: function (jq, href) { - return jq.each(function () { - $.data(this, "panel").isLoaded = false - if (href) { - $.data(this, "panel").options.href = href - } - _1dc(this) - }) - }, - resize: function (jq, _211) { - return jq.each(function () { - _1ca(this, _211) - }) - }, - move: function (jq, _212) { - return jq.each(function () { - _1d0(this, _212) - }) - }, - maximize: function (jq) { - return jq.each(function () { - _1e9(this) - }) - }, - minimize: function (jq) { - return jq.each(function () { - _1fb(this) - }) - }, - restore: function (jq) { - return jq.each(function () { - _1fe(this) - }) - }, - collapse: function (jq, _213) { - return jq.each(function () { - _1ea(this, _213) - }) - }, - expand: function (jq, _214) { - return jq.each(function () { - _1f5(this, _214) - }) - } - } - $.fn.panel.parseOptions = function (_215) { - var t = $(_215) - return $.extend( - {}, - $.parser.parseOptions(_215, [ - "id", - "width", - "height", - "left", - "top", - "title", - "iconCls", - "cls", - "headerCls", - "bodyCls", - "tools", - "href", - { cache: "boolean", fit: "boolean", border: "boolean", noheader: "boolean" }, - { collapsible: "boolean", minimizable: "boolean", maximizable: "boolean" }, - { closable: "boolean", collapsed: "boolean", minimized: "boolean", maximized: "boolean", closed: "boolean" } - ]), - { loadingMessage: t.attr("loadingMessage") != undefined ? t.attr("loadingMessage") : undefined } - ) - } - $.fn.panel.defaults = { - id: null, - title: null, - iconCls: null, - width: "auto", - height: "auto", - left: null, - top: null, - cls: null, - headerCls: null, - bodyCls: null, - style: {}, - href: null, - cache: true, - fit: false, - border: true, - doSize: true, - noheader: false, - content: null, - collapsible: false, - minimizable: false, - maximizable: false, - closable: false, - collapsed: false, - minimized: false, - maximized: false, - closed: false, - tools: null, - href: null, - loadingMessage: "Loading...", - extractor: function (data) { - var _216 = /]*>((.|[\n\r])*)<\/body>/im - var _217 = _216.exec(data) - if (_217) { - return _217[1] - } else { - return data - } - }, - onLoad: function () {}, - onBeforeOpen: function () {}, - onOpen: function () {}, - onBeforeClose: function () {}, - onClose: function () {}, - onBeforeDestroy: function () {}, - onDestroy: function () {}, - onResize: function (_218, _219) {}, - onMove: function (left, top) {}, - onMaximize: function () {}, - onRestore: function () {}, - onMinimize: function () {}, - onBeforeCollapse: function () {}, - onBeforeExpand: function () {}, - onCollapse: function () {}, - onExpand: function () {} - } -})(jQuery) -;(function ($) { - function _21a(_21b, _21c) { - var opts = $.data(_21b, "window").options - if (_21c) { - if (_21c.width) { - opts.width = _21c.width - } - if (_21c.height) { - opts.height = _21c.height - } - if (_21c.left != null) { - opts.left = _21c.left - } - if (_21c.top != null) { - opts.top = _21c.top - } - } - $(_21b).panel("resize", opts) - } - function _21d(_21e, _21f) { - var _220 = $.data(_21e, "window") - if (_21f) { - if (_21f.left != null) { - _220.options.left = _21f.left - } - if (_21f.top != null) { - _220.options.top = _21f.top - } - } - $(_21e).panel("move", _220.options) - if (_220.shadow) { - _220.shadow.css({ left: _220.options.left, top: _220.options.top }) - } - } - function _221(_222, _223) { - var _224 = $.data(_222, "window") - var opts = _224.options - var _225 = opts.width - if (isNaN(_225)) { - _225 = _224.window._outerWidth() - } - if (opts.inline) { - var _226 = _224.window.parent() - opts.left = (_226.width() - _225) / 2 + _226.scrollLeft() - } else { - opts.left = ($(window)._outerWidth() - _225) / 2 + $(document).scrollLeft() - } - if (_223) { - _21d(_222) - } - } - function _227(_228, _229) { - var _22a = $.data(_228, "window") - var opts = _22a.options - var _22b = opts.height - if (isNaN(_22b)) { - _22b = _22a.window._outerHeight() - } - if (opts.inline) { - var _22c = _22a.window.parent() - opts.top = (_22c.height() - _22b) / 2 + _22c.scrollTop() - } else { - opts.top = ($(window)._outerHeight() - _22b) / 2 + $(document).scrollTop() - } - if (_229) { - _21d(_228) - } - } - function _22d(_22e) { - var _22f = $.data(_22e, "window") - var win = $(_22e).panel( - $.extend({}, _22f.options, { - border: false, - doSize: true, - closed: true, - cls: "window", - headerCls: "window-header", - bodyCls: "window-body " + (_22f.options.noheader ? "window-body-noheader" : ""), - onBeforeDestroy: function () { - if (_22f.options.onBeforeDestroy.call(_22e) == false) { - return false - } - if (_22f.shadow) { - _22f.shadow.remove() - } - if (_22f.mask) { - _22f.mask.remove() - } - }, - onClose: function () { - if (_22f.shadow) { - _22f.shadow.hide() - } - if (_22f.mask) { - _22f.mask.hide() - } - _22f.options.onClose.call(_22e) - }, - onOpen: function () { - if (_22f.mask) { - _22f.mask.css({ display: "block", zIndex: $.fn.window.defaults.zIndex++ }) - } - if (_22f.shadow) { - _22f.shadow.css({ - display: "block", - zIndex: $.fn.window.defaults.zIndex++, - left: _22f.options.left, - top: _22f.options.top, - width: _22f.window._outerWidth(), - height: _22f.window._outerHeight() - }) - } - _22f.window.css("z-index", $.fn.window.defaults.zIndex++) - _22f.options.onOpen.call(_22e) - }, - onResize: function (_230, _231) { - var opts = $(this).panel("options") - $.extend(_22f.options, { width: opts.width, height: opts.height, left: opts.left, top: opts.top }) - if (_22f.shadow) { - _22f.shadow.css({ - left: _22f.options.left, - top: _22f.options.top, - width: _22f.window._outerWidth(), - height: _22f.window._outerHeight() - }) - } - _22f.options.onResize.call(_22e, _230, _231) - }, - onMinimize: function () { - if (_22f.shadow) { - _22f.shadow.hide() - } - if (_22f.mask) { - _22f.mask.hide() - } - _22f.options.onMinimize.call(_22e) - }, - onBeforeCollapse: function () { - if (_22f.options.onBeforeCollapse.call(_22e) == false) { - return false - } - if (_22f.shadow) { - _22f.shadow.hide() - } - }, - onExpand: function () { - if (_22f.shadow) { - _22f.shadow.show() - } - _22f.options.onExpand.call(_22e) - } - }) - ) - _22f.window = win.panel("panel") - if (_22f.mask) { - _22f.mask.remove() - } - if (_22f.options.modal == true) { - _22f.mask = $('
          ').insertAfter(_22f.window) - _22f.mask.css({ - width: _22f.options.inline ? _22f.mask.parent().width() : _232().width, - height: _22f.options.inline ? _22f.mask.parent().height() : _232().height, - display: "none" - }) - } - if (_22f.shadow) { - _22f.shadow.remove() - } - if (_22f.options.shadow == true) { - _22f.shadow = $('
          ').insertAfter(_22f.window) - _22f.shadow.css({ display: "none" }) - } - if (_22f.options.left == null) { - _221(_22e) - } - if (_22f.options.top == null) { - _227(_22e) - } - _21d(_22e) - if (_22f.options.closed == false) { - win.window("open") - } - } - function _233(_234) { - var _235 = $.data(_234, "window") - _235.window.draggable({ - handle: ">div.panel-header>div.panel-title", - disabled: _235.options.draggable == false, - onStartDrag: function (e) { - if (_235.mask) { - _235.mask.css("z-index", $.fn.window.defaults.zIndex++) - } - if (_235.shadow) { - _235.shadow.css("z-index", $.fn.window.defaults.zIndex++) - } - _235.window.css("z-index", $.fn.window.defaults.zIndex++) - if (!_235.proxy) { - _235.proxy = $('
          ').insertAfter(_235.window) - } - _235.proxy.css({ display: "none", zIndex: $.fn.window.defaults.zIndex++, left: e.data.left, top: e.data.top }) - _235.proxy._outerWidth(_235.window._outerWidth()) - _235.proxy._outerHeight(_235.window._outerHeight()) - setTimeout(function () { - if (_235.proxy) { - _235.proxy.show() - } - }, 500) - }, - onDrag: function (e) { - _235.proxy.css({ display: "block", left: e.data.left, top: e.data.top }) - return false - }, - onStopDrag: function (e) { - _235.options.left = e.data.left - _235.options.top = e.data.top - $(_234).window("move") - _235.proxy.remove() - _235.proxy = null - } - }) - _235.window.resizable({ - disabled: _235.options.resizable == false, - onStartResize: function (e) { - _235.pmask = $('
          ').insertAfter(_235.window) - _235.pmask.css({ - zIndex: $.fn.window.defaults.zIndex++, - left: e.data.left, - top: e.data.top, - width: _235.window._outerWidth(), - height: _235.window._outerHeight() - }) - if (!_235.proxy) { - _235.proxy = $('
          ').insertAfter(_235.window) - } - _235.proxy.css({ zIndex: $.fn.window.defaults.zIndex++, left: e.data.left, top: e.data.top }) - _235.proxy._outerWidth(e.data.width) - _235.proxy._outerHeight(e.data.height) - }, - onResize: function (e) { - _235.proxy.css({ left: e.data.left, top: e.data.top }) - _235.proxy._outerWidth(e.data.width) - _235.proxy._outerHeight(e.data.height) - return false - }, - onStopResize: function (e) { - $.extend(_235.options, { left: e.data.left, top: e.data.top, width: e.data.width, height: e.data.height }) - _21a(_234) - _235.pmask.remove() - _235.pmask = null - _235.proxy.remove() - _235.proxy = null - } - }) - } - function _232() { - if (document.compatMode == "BackCompat") { - return { - width: Math.max(document.body.scrollWidth, document.body.clientWidth), - height: Math.max(document.body.scrollHeight, document.body.clientHeight) - } - } else { - return { - width: Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth), - height: Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) - } - } - } - $(window).resize(function () { - $("body>div.window-mask").css({ width: $(window)._outerWidth(), height: $(window)._outerHeight() }) - setTimeout(function () { - $("body>div.window-mask").css({ width: _232().width, height: _232().height }) - }, 50) - }) - $.fn.window = function (_236, _237) { - if (typeof _236 == "string") { - var _238 = $.fn.window.methods[_236] - if (_238) { - return _238(this, _237) - } else { - return this.panel(_236, _237) - } - } - _236 = _236 || {} - return this.each(function () { - var _239 = $.data(this, "window") - if (_239) { - $.extend(_239.options, _236) - } else { - _239 = $.data(this, "window", { options: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), _236) }) - if (!_239.options.inline) { - document.body.appendChild(this) - } - } - _22d(this) - _233(this) - }) - } - $.fn.window.methods = { - options: function (jq) { - var _23a = jq.panel("options") - var _23b = $.data(jq[0], "window").options - return $.extend(_23b, { closed: _23a.closed, collapsed: _23a.collapsed, minimized: _23a.minimized, maximized: _23a.maximized }) - }, - window: function (jq) { - return $.data(jq[0], "window").window - }, - resize: function (jq, _23c) { - return jq.each(function () { - _21a(this, _23c) - }) - }, - move: function (jq, _23d) { - return jq.each(function () { - _21d(this, _23d) - }) - }, - hcenter: function (jq) { - return jq.each(function () { - _221(this, true) - }) - }, - vcenter: function (jq) { - return jq.each(function () { - _227(this, true) - }) - }, - center: function (jq) { - return jq.each(function () { - _221(this) - _227(this) - _21d(this) - }) - } - } - $.fn.window.parseOptions = function (_23e) { - return $.extend( - {}, - $.fn.panel.parseOptions(_23e), - $.parser.parseOptions(_23e, [{ draggable: "boolean", resizable: "boolean", shadow: "boolean", modal: "boolean", inline: "boolean" }]) - ) - } - $.fn.window.defaults = $.extend({}, $.fn.panel.defaults, { - zIndex: 9000, - draggable: true, - resizable: true, - shadow: true, - modal: false, - inline: false, - title: "New Window", - collapsible: true, - minimizable: true, - maximizable: true, - closable: true, - closed: false - }) -})(jQuery) -;(function ($) { - function _23f(_240) { - var cp = document.createElement("div") - while (_240.firstChild) { - cp.appendChild(_240.firstChild) - } - _240.appendChild(cp) - var _241 = $(cp) - _241.attr("style", $(_240).attr("style")) - $(_240).removeAttr("style").css("overflow", "hidden") - _241.panel({ border: false, doSize: false, bodyCls: "dialog-content" }) - return _241 - } - function _242(_243) { - var opts = $.data(_243, "dialog").options - var _244 = $.data(_243, "dialog").contentPanel - if (opts.toolbar) { - if (typeof opts.toolbar == "string") { - $(opts.toolbar).addClass("dialog-toolbar").prependTo(_243) - $(opts.toolbar).show() - } else { - $(_243).find("div.dialog-toolbar").remove() - var _245 = $('
          ').prependTo(_243) - var tr = _245.find("tr") - for (var i = 0; i < opts.toolbar.length; i++) { - var btn = opts.toolbar[i] - if (btn == "-") { - $('
          ').appendTo(tr) - } else { - var td = $("").appendTo(tr) - var tool = $('').appendTo(td) - tool[0].onclick = eval(btn.handler || function () {}) - tool.linkbutton($.extend({}, btn, { plain: true })) - } - } - } - } else { - $(_243).find("div.dialog-toolbar").remove() - } - if (opts.buttons) { - if (typeof opts.buttons == "string") { - $(opts.buttons).addClass("dialog-button").appendTo(_243) - $(opts.buttons).show() - } else { - $(_243).find("div.dialog-button").remove() - var _246 = $('
          ').appendTo(_243) - for (var i = 0; i < opts.buttons.length; i++) { - var p = opts.buttons[i] - var _247 = $('').appendTo(_246) - if (p.handler) { - _247[0].onclick = p.handler - } - _247.linkbutton(p) - } - } - } else { - $(_243).find("div.dialog-button").remove() - } - var _248 = opts.href - var _249 = opts.content - opts.href = null - opts.content = null - _244.panel({ - closed: opts.closed, - cache: opts.cache, - href: _248, - content: _249, - onLoad: function () { - if (opts.height == "auto") { - $(_243).window("resize") - } - opts.onLoad.apply(_243, arguments) - } - }) - $(_243).window( - $.extend({}, opts, { - onOpen: function () { - if (_244.panel("options").closed) { - _244.panel("open") - } - if (opts.onOpen) { - opts.onOpen.call(_243) - } - }, - onResize: function (_24a, _24b) { - var _24c = $(_243) - _244.panel("panel").show() - _244.panel("resize", { - width: _24c.width(), - height: - _24b == "auto" - ? "auto" - : _24c.height() - - _24c.children("div.dialog-toolbar")._outerHeight() - - _24c.children("div.dialog-button")._outerHeight() - }) - if (opts.onResize) { - opts.onResize.call(_243, _24a, _24b) - } - } - }) - ) - opts.href = _248 - opts.content = _249 - } - function _24d(_24e, href) { - var _24f = $.data(_24e, "dialog").contentPanel - _24f.panel("refresh", href) - } - $.fn.dialog = function (_250, _251) { - if (typeof _250 == "string") { - var _252 = $.fn.dialog.methods[_250] - if (_252) { - return _252(this, _251) - } else { - return this.window(_250, _251) - } - } - _250 = _250 || {} - return this.each(function () { - var _253 = $.data(this, "dialog") - if (_253) { - $.extend(_253.options, _250) - } else { - $.data(this, "dialog", { - options: $.extend({}, $.fn.dialog.defaults, $.fn.dialog.parseOptions(this), _250), - contentPanel: _23f(this) - }) - } - _242(this) - }) - } - $.fn.dialog.methods = { - options: function (jq) { - var _254 = $.data(jq[0], "dialog").options - var _255 = jq.panel("options") - $.extend(_254, { closed: _255.closed, collapsed: _255.collapsed, minimized: _255.minimized, maximized: _255.maximized }) - var _256 = $.data(jq[0], "dialog").contentPanel - return _254 - }, - dialog: function (jq) { - return jq.window("window") - }, - refresh: function (jq, href) { - return jq.each(function () { - _24d(this, href) - }) - } - } - $.fn.dialog.parseOptions = function (_257) { - return $.extend({}, $.fn.window.parseOptions(_257), $.parser.parseOptions(_257, ["toolbar", "buttons"])) - } - $.fn.dialog.defaults = $.extend({}, $.fn.window.defaults, { - title: "New Dialog", - collapsible: false, - minimizable: false, - maximizable: false, - resizable: false, - toolbar: null, - buttons: null - }) -})(jQuery) -;(function ($) { - function show(el, type, _258, _259) { - var win = $(el).window("window") - if (!win) { - return - } - switch (type) { - case null: - win.show() - break - case "slide": - win.slideDown(_258) - break - case "fade": - win.fadeIn(_258) - break - case "show": - win.show(_258) - break - } - var _25a = null - if (_259 > 0) { - _25a = setTimeout(function () { - hide(el, type, _258) - }, _259) - } - win.hover( - function () { - if (_25a) { - clearTimeout(_25a) - } - }, - function () { - if (_259 > 0) { - _25a = setTimeout(function () { - hide(el, type, _258) - }, _259) - } - } - ) - } - function hide(el, type, _25b) { - if (el.locked == true) { - return - } - el.locked = true - var win = $(el).window("window") - if (!win) { - return - } - switch (type) { - case null: - win.hide() - break - case "slide": - win.slideUp(_25b) - break - case "fade": - win.fadeOut(_25b) - break - case "show": - win.hide(_25b) - break - } - setTimeout(function () { - $(el).window("destroy") - }, _25b) - } - function _25c(_25d) { - var opts = $.extend( - {}, - $.fn.window.defaults, - { - collapsible: false, - minimizable: false, - maximizable: false, - shadow: false, - draggable: false, - resizable: false, - closed: true, - style: { - left: "", - top: "", - right: 0, - zIndex: $.fn.window.defaults.zIndex++, - bottom: -document.body.scrollTop - document.documentElement.scrollTop - }, - onBeforeOpen: function () { - show(this, opts.showType, opts.showSpeed, opts.timeout) - return false - }, - onBeforeClose: function () { - hide(this, opts.showType, opts.showSpeed) - return false - } - }, - { title: "", width: 250, height: 100, showType: "slide", showSpeed: 600, msg: "", timeout: 4000 }, - _25d - ) - opts.style.zIndex = $.fn.window.defaults.zIndex++ - var win = $('
          ').html(opts.msg).appendTo("body") - win.window(opts) - win.window("window").css(opts.style) - win.window("open") - return win - } - function _25e(_25f, _260, _261) { - var win = $('
          ').appendTo("body") - win.append(_260) - if (_261) { - var tb = $('
          ').appendTo(win) - for (var _262 in _261) { - $("") - .attr("href", "javascript:void(0)") - .text(_262) - .css("margin-left", 10) - .bind("click", eval(_261[_262])) - .appendTo(tb) - .linkbutton() - } - } - win.window({ - title: _25f, - noheader: _25f ? false : true, - width: 300, - height: "auto", - modal: true, - collapsible: false, - minimizable: false, - maximizable: false, - resizable: false, - onClose: function () { - setTimeout(function () { - win.window("destroy") - }, 100) - } - }) - win.window("window").addClass("messager-window") - win.children("div.messager-button").children("a:first").focus() - return win - } - $.messager = { - show: function (_263) { - return _25c(_263) - }, - alert: function (_264, msg, icon, fn) { - var _265 = "
          " + msg + "
          " - switch (icon) { - case "error": - _265 = '
          ' + _265 - break - case "info": - _265 = '
          ' + _265 - break - case "question": - _265 = '
          ' + _265 - break - case "warning": - _265 = '
          ' + _265 - break - } - _265 += '
          ' - var _266 = {} - _266[$.messager.defaults.ok] = function () { - win.window("close") - if (fn) { - fn() - return false - } - } - var win = _25e(_264, _265, _266) - return win - }, - confirm: function (_267, msg, fn) { - var _268 = '
          ' + "
          " + msg + "
          " + '
          ' - var _269 = {} - _269[$.messager.defaults.ok] = function () { - win.window("close") - if (fn) { - fn(true) - return false - } - } - _269[$.messager.defaults.cancel] = function () { - win.window("close") - if (fn) { - fn(false) - return false - } - } - var win = _25e(_267, _268, _269) - return win - }, - prompt: function (_26a, msg, fn) { - var _26b = - '
          ' + - "
          " + - msg + - "
          " + - "
          " + - '
          ' + - '
          ' - var _26c = {} - _26c[$.messager.defaults.ok] = function () { - win.window("close") - if (fn) { - fn($(".messager-input", win).val()) - return false - } - } - _26c[$.messager.defaults.cancel] = function () { - win.window("close") - if (fn) { - fn() - return false - } - } - var win = _25e(_26a, _26b, _26c) - win.children("input.messager-input").focus() - return win - }, - progress: function (_26d) { - var _26e = { - bar: function () { - return $("body>div.messager-window").find("div.messager-p-bar") - }, - close: function () { - var win = $("body>div.messager-window>div.messager-body:has(div.messager-progress)") - if (win.length) { - win.window("close") - } - } - } - if (typeof _26d == "string") { - var _26f = _26e[_26d] - return _26f() - } - var opts = $.extend({ title: "", msg: "", text: undefined, interval: 300 }, _26d || {}) - var _270 = '
          ' - var win = _25e(opts.title, _270, null) - win.find("div.messager-p-msg").html(opts.msg) - var bar = win.find("div.messager-p-bar") - bar.progressbar({ text: opts.text }) - win.window({ - closable: false, - onClose: function () { - if (this.timer) { - clearInterval(this.timer) - } - $(this).window("destroy") - } - }) - if (opts.interval) { - win[0].timer = setInterval(function () { - var v = bar.progressbar("getValue") - v += 10 - if (v > 100) { - v = 0 - } - bar.progressbar("setValue", v) - }, opts.interval) - } - return win - } - } - $.messager.defaults = { ok: "Ok", cancel: "Cancel" } -})(jQuery) -;(function ($) { - function _271(_272) { - var opts = $.data(_272, "accordion").options - var _273 = $.data(_272, "accordion").panels - var cc = $(_272) - opts.fit ? $.extend(opts, cc._fit()) : cc._fit(false) - if (opts.width > 0) { - cc._outerWidth(opts.width) - } - var _274 = "auto" - if (opts.height > 0) { - cc._outerHeight(opts.height) - var _275 = _273.length ? _273[0].panel("header").css("height", "")._outerHeight() : "auto" - var _274 = cc.height() - (_273.length - 1) * _275 - } - for (var i = 0; i < _273.length; i++) { - var _276 = _273[i] - var _277 = _276.panel("header") - _277._outerHeight(_275) - _276.panel("resize", { width: cc.width(), height: _274 }) - } - } - function _278(_279) { - var _27a = $.data(_279, "accordion").panels - for (var i = 0; i < _27a.length; i++) { - var _27b = _27a[i] - if (_27b.panel("options").collapsed == false) { - return _27b - } - } - return null - } - function _27c(_27d, _27e) { - var _27f = $.data(_27d, "accordion").panels - for (var i = 0; i < _27f.length; i++) { - if (_27f[i][0] == $(_27e)[0]) { - return i - } - } - return -1 - } - function _280(_281, _282, _283) { - var _284 = $.data(_281, "accordion").panels - if (typeof _282 == "number") { - if (_282 < 0 || _282 >= _284.length) { - return null - } else { - var _285 = _284[_282] - if (_283) { - _284.splice(_282, 1) - } - return _285 - } - } - for (var i = 0; i < _284.length; i++) { - var _285 = _284[i] - if (_285.panel("options").title == _282) { - if (_283) { - _284.splice(i, 1) - } - return _285 - } - } - return null - } - function _286(_287) { - var opts = $.data(_287, "accordion").options - var cc = $(_287) - if (opts.border) { - cc.removeClass("accordion-noborder") - } else { - cc.addClass("accordion-noborder") - } - } - function _288(_289) { - var cc = $(_289) - cc.addClass("accordion") - var _28a = [] - cc.children("div").each(function () { - var opts = $.extend({}, $.parser.parseOptions(this), { selected: $(this).attr("selected") ? true : undefined }) - var pp = $(this) - _28a.push(pp) - _28c(_289, pp, opts) - }) - cc.bind("_resize", function (e, _28b) { - var opts = $.data(_289, "accordion").options - if (opts.fit == true || _28b) { - _271(_289) - } - return false - }) - return { accordion: cc, panels: _28a } - } - function _28c(_28d, pp, _28e) { - pp.panel( - $.extend({}, _28e, { - collapsible: false, - minimizable: false, - maximizable: false, - closable: false, - doSize: false, - collapsed: true, - headerCls: "accordion-header", - bodyCls: "accordion-body", - onBeforeExpand: function () { - var curr = _278(_28d) - if (curr) { - var _28f = $(curr).panel("header") - _28f.removeClass("accordion-header-selected") - _28f.find(".accordion-collapse").triggerHandler("click") - } - var _28f = pp.panel("header") - _28f.addClass("accordion-header-selected") - _28f.find(".accordion-collapse").removeClass("accordion-expand") - }, - onExpand: function () { - var opts = $.data(_28d, "accordion").options - opts.onSelect.call(_28d, pp.panel("options").title, _27c(_28d, this)) - }, - onBeforeCollapse: function () { - var _290 = pp.panel("header") - _290.removeClass("accordion-header-selected") - _290.find(".accordion-collapse").addClass("accordion-expand") - } - }) - ) - var _291 = pp.panel("header") - var t = $('').appendTo(_291.children("div.panel-tool")) - t.bind("click", function (e) { - var _292 = $.data(_28d, "accordion").options.animate - _29d(_28d) - if (pp.panel("options").collapsed) { - pp.panel("expand", _292) - } else { - pp.panel("collapse", _292) - } - return false - }) - _291.click(function () { - $(this).find(".accordion-collapse").triggerHandler("click") - return false - }) - } - function _293(_294, _295) { - var _296 = _280(_294, _295) - if (!_296) { - return - } - var curr = _278(_294) - if (curr && curr[0] == _296[0]) { - return - } - _296.panel("header").triggerHandler("click") - } - function _297(_298) { - var _299 = $.data(_298, "accordion").panels - for (var i = 0; i < _299.length; i++) { - if (_299[i].panel("options").selected) { - _29a(i) - return - } - } - if (_299.length) { - _29a(0) - } - function _29a(_29b) { - var opts = $.data(_298, "accordion").options - var _29c = opts.animate - opts.animate = false - _293(_298, _29b) - opts.animate = _29c - } - } - function _29d(_29e) { - var _29f = $.data(_29e, "accordion").panels - for (var i = 0; i < _29f.length; i++) { - _29f[i].stop(true, true) - } - } - function add(_2a0, _2a1) { - var opts = $.data(_2a0, "accordion").options - var _2a2 = $.data(_2a0, "accordion").panels - if (_2a1.selected == undefined) { - _2a1.selected = true - } - _29d(_2a0) - var pp = $("
          ").appendTo(_2a0) - _2a2.push(pp) - _28c(_2a0, pp, _2a1) - _271(_2a0) - opts.onAdd.call(_2a0, _2a1.title, _2a2.length - 1) - if (_2a1.selected) { - _293(_2a0, _2a2.length - 1) - } - } - function _2a3(_2a4, _2a5) { - var opts = $.data(_2a4, "accordion").options - var _2a6 = $.data(_2a4, "accordion").panels - _29d(_2a4) - var _2a7 = _280(_2a4, _2a5) - var _2a8 = _2a7.panel("options").title - var _2a9 = _27c(_2a4, _2a7) - if (opts.onBeforeRemove.call(_2a4, _2a8, _2a9) == false) { - return - } - var _2a7 = _280(_2a4, _2a5, true) - if (_2a7) { - _2a7.panel("destroy") - if (_2a6.length) { - _271(_2a4) - var curr = _278(_2a4) - if (!curr) { - _293(_2a4, 0) - } - } - } - opts.onRemove.call(_2a4, _2a8, _2a9) - } - $.fn.accordion = function (_2aa, _2ab) { - if (typeof _2aa == "string") { - return $.fn.accordion.methods[_2aa](this, _2ab) - } - _2aa = _2aa || {} - return this.each(function () { - var _2ac = $.data(this, "accordion") - var opts - if (_2ac) { - opts = $.extend(_2ac.options, _2aa) - _2ac.opts = opts - } else { - opts = $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), _2aa) - var r = _288(this) - $.data(this, "accordion", { options: opts, accordion: r.accordion, panels: r.panels }) - } - _286(this) - _271(this) - _297(this) - }) - } - $.fn.accordion.methods = { - options: function (jq) { - return $.data(jq[0], "accordion").options - }, - panels: function (jq) { - return $.data(jq[0], "accordion").panels - }, - resize: function (jq) { - return jq.each(function () { - _271(this) - }) - }, - getSelected: function (jq) { - return _278(jq[0]) - }, - getPanel: function (jq, _2ad) { - return _280(jq[0], _2ad) - }, - getPanelIndex: function (jq, _2ae) { - return _27c(jq[0], _2ae) - }, - select: function (jq, _2af) { - return jq.each(function () { - _293(this, _2af) - }) - }, - add: function (jq, _2b0) { - return jq.each(function () { - add(this, _2b0) - }) - }, - remove: function (jq, _2b1) { - return jq.each(function () { - _2a3(this, _2b1) - }) - } - } - $.fn.accordion.parseOptions = function (_2b2) { - var t = $(_2b2) - return $.extend({}, $.parser.parseOptions(_2b2, ["width", "height", { fit: "boolean", border: "boolean", animate: "boolean" }])) - } - $.fn.accordion.defaults = { - width: "auto", - height: "auto", - fit: false, - border: true, - animate: true, - onSelect: function (_2b3, _2b4) {}, - onAdd: function (_2b5, _2b6) {}, - onBeforeRemove: function (_2b7, _2b8) {}, - onRemove: function (_2b9, _2ba) {} - } -})(jQuery) -;(function ($) { - function _2bb(_2bc) { - var opts = $.data(_2bc, "tabs").options - if (opts.tabPosition == "left" || opts.tabPosition == "right") { - return - } - var _2bd = $(_2bc).children("div.tabs-header") - var tool = _2bd.children("div.tabs-tool") - var _2be = _2bd.children("div.tabs-scroller-left") - var _2bf = _2bd.children("div.tabs-scroller-right") - var wrap = _2bd.children("div.tabs-wrap") - tool._outerHeight(_2bd.outerHeight() - (opts.plain ? 2 : 0)) - var _2c0 = 0 - $("ul.tabs li", _2bd).each(function () { - _2c0 += $(this).outerWidth(true) - }) - var _2c1 = _2bd.width() - tool._outerWidth() - if (_2c0 > _2c1) { - _2be.show() - _2bf.show() - if (opts.toolPosition == "left") { - tool.css({ left: _2be.outerWidth(), right: "" }) - wrap.css({ - marginLeft: _2be.outerWidth() + tool._outerWidth(), - marginRight: _2bf._outerWidth(), - width: _2c1 - _2be.outerWidth() - _2bf.outerWidth() - }) - } else { - tool.css({ left: "", right: _2bf.outerWidth() }) - wrap.css({ - marginLeft: _2be.outerWidth(), - marginRight: _2bf.outerWidth() + tool._outerWidth(), - width: _2c1 - _2be.outerWidth() - _2bf.outerWidth() - }) - } - } else { - _2be.hide() - _2bf.hide() - if (opts.toolPosition == "left") { - tool.css({ left: 0, right: "" }) - wrap.css({ marginLeft: tool._outerWidth(), marginRight: 0, width: _2c1 }) - } else { - tool.css({ left: "", right: 0 }) - wrap.css({ marginLeft: 0, marginRight: tool._outerWidth(), width: _2c1 }) - } - } - } - function _2c2(_2c3) { - var opts = $.data(_2c3, "tabs").options - var _2c4 = $(_2c3).children("div.tabs-header") - if (opts.tools) { - if (typeof opts.tools == "string") { - $(opts.tools).addClass("tabs-tool").appendTo(_2c4) - $(opts.tools).show() - } else { - _2c4.children("div.tabs-tool").remove() - var _2c5 = $('
          ').appendTo(_2c4) - for (var i = 0; i < opts.tools.length; i++) { - var tool = $('').appendTo(_2c5) - tool[0].onclick = eval(opts.tools[i].handler || function () {}) - tool.linkbutton($.extend({}, opts.tools[i], { plain: true })) - } - } - } else { - _2c4.children("div.tabs-tool").remove() - } - } - function _2c6(_2c7) { - var opts = $.data(_2c7, "tabs").options - var cc = $(_2c7) - opts.fit ? $.extend(opts, cc._fit()) : cc._fit(false) - cc.width(opts.width).height(opts.height) - var _2c8 = $(_2c7).children("div.tabs-header") - var _2c9 = $(_2c7).children("div.tabs-panels") - if (opts.tabPosition == "left" || opts.tabPosition == "right") { - _2c8._outerWidth(opts.headerWidth) - _2c9._outerWidth(cc.width() - opts.headerWidth) - _2c8.add(_2c9)._outerHeight(opts.height) - var wrap = _2c8.find("div.tabs-wrap") - wrap._outerWidth(_2c8.width()) - _2c8.find(".tabs")._outerWidth(wrap.width()) - } else { - _2c8.css("height", "") - _2c8.find("div.tabs-wrap").css("width", "") - _2c8.find(".tabs").css("width", "") - _2c8._outerWidth(opts.width) - _2bb(_2c7) - var _2ca = opts.height - if (!isNaN(_2ca)) { - _2c9._outerHeight(_2ca - _2c8.outerHeight()) - } else { - _2c9.height("auto") - } - var _2cb = opts.width - if (!isNaN(_2cb)) { - _2c9._outerWidth(_2cb) - } else { - _2c9.width("auto") - } - } - } - function _2cc(_2cd) { - var opts = $.data(_2cd, "tabs").options - var tab = _2ce(_2cd) - if (tab) { - var _2cf = $(_2cd).children("div.tabs-panels") - var _2d0 = opts.width == "auto" ? "auto" : _2cf.width() - var _2d1 = opts.height == "auto" ? "auto" : _2cf.height() - tab.panel("resize", { width: _2d0, height: _2d1 }) - } - } - function _2d2(_2d3) { - var tabs = $.data(_2d3, "tabs").tabs - var cc = $(_2d3) - cc.addClass("tabs-container") - cc.wrapInner('
          ') - $( - '
          ' + - '
          ' + - '
          ' + - '
          ' + - '
            ' + - "
            " + - "
            " - ).prependTo(_2d3) - cc.children("div.tabs-panels") - .children("div") - .each(function (i) { - var opts = $.extend({}, $.parser.parseOptions(this), { selected: $(this).attr("selected") ? true : undefined }) - var pp = $(this) - tabs.push(pp) - _2d9(_2d3, pp, opts) - }) - cc.children("div.tabs-header") - .find(".tabs-scroller-left, .tabs-scroller-right") - .hover( - function () { - $(this).addClass("tabs-scroller-over") - }, - function () { - $(this).removeClass("tabs-scroller-over") - } - ) - cc.bind("_resize", function (e, _2d4) { - var opts = $.data(_2d3, "tabs").options - if (opts.fit == true || _2d4) { - _2c6(_2d3) - _2cc(_2d3) - } - return false - }) - } - function _2d5(_2d6) { - var opts = $.data(_2d6, "tabs").options - var _2d7 = $(_2d6).children("div.tabs-header") - var _2d8 = $(_2d6).children("div.tabs-panels") - _2d7.removeClass("tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right") - _2d8.removeClass("tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right") - if (opts.tabPosition == "top") { - _2d7.insertBefore(_2d8) - } else { - if (opts.tabPosition == "bottom") { - _2d7.insertAfter(_2d8) - _2d7.addClass("tabs-header-bottom") - _2d8.addClass("tabs-panels-top") - } else { - if (opts.tabPosition == "left") { - _2d7.addClass("tabs-header-left") - _2d8.addClass("tabs-panels-right") - } else { - if (opts.tabPosition == "right") { - _2d7.addClass("tabs-header-right") - _2d8.addClass("tabs-panels-left") - } - } - } - } - if (opts.plain == true) { - _2d7.addClass("tabs-header-plain") - } else { - _2d7.removeClass("tabs-header-plain") - } - if (opts.border == true) { - _2d7.removeClass("tabs-header-noborder") - _2d8.removeClass("tabs-panels-noborder") - } else { - _2d7.addClass("tabs-header-noborder") - _2d8.addClass("tabs-panels-noborder") - } - $(".tabs-scroller-left", _2d7) - .unbind(".tabs") - .bind("click.tabs", function () { - $(_2d6).tabs("scrollBy", -opts.scrollIncrement) - }) - $(".tabs-scroller-right", _2d7) - .unbind(".tabs") - .bind("click.tabs", function () { - $(_2d6).tabs("scrollBy", opts.scrollIncrement) - }) - } - function _2d9(_2da, pp, _2db) { - var _2dc = $.data(_2da, "tabs") - _2db = _2db || {} - pp.panel( - $.extend({}, _2db, { - border: false, - noheader: true, - closed: true, - doSize: false, - iconCls: _2db.icon ? _2db.icon : undefined, - onLoad: function () { - if (_2db.onLoad) { - _2db.onLoad.call(this, arguments) - } - _2dc.options.onLoad.call(_2da, $(this)) - } - }) - ) - var opts = pp.panel("options") - var tabs = $(_2da).children("div.tabs-header").find("ul.tabs") - opts.tab = $("
          • ").appendTo(tabs) - opts.tab.append( - '' + '' + '' + "" - ) - opts.tab - .unbind(".tabs") - .bind("click.tabs", { p: pp }, function (e) { - if ($(this).hasClass("tabs-disabled")) { - return - } - _2e1(_2da, _2dd(_2da, e.data.p)) - }) - .bind("contextmenu.tabs", { p: pp }, function (e) { - if ($(this).hasClass("tabs-disabled")) { - return - } - _2dc.options.onContextMenu.call(_2da, e, $(this).find("span.tabs-title").html(), _2dd(_2da, e.data.p)) - }) - $(_2da).tabs("update", { tab: pp, options: opts }) - } - function _2de(_2df, _2e0) { - var opts = $.data(_2df, "tabs").options - var tabs = $.data(_2df, "tabs").tabs - if (_2e0.selected == undefined) { - _2e0.selected = true - } - var pp = $("
            ").appendTo($(_2df).children("div.tabs-panels")) - tabs.push(pp) - _2d9(_2df, pp, _2e0) - opts.onAdd.call(_2df, _2e0.title, tabs.length - 1) - _2bb(_2df) - if (_2e0.selected) { - _2e1(_2df, tabs.length - 1) - } - } - function _2e2(_2e3, _2e4) { - var _2e5 = $.data(_2e3, "tabs").selectHis - var pp = _2e4.tab - var _2e6 = pp.panel("options").title - pp.panel($.extend({}, _2e4.options, { iconCls: _2e4.options.icon ? _2e4.options.icon : undefined })) - var opts = pp.panel("options") - var tab = opts.tab - var _2e7 = tab.find("span.tabs-title") - var _2e8 = tab.find("span.tabs-icon") - _2e7.html(opts.title) - _2e8.attr("class", "tabs-icon") - tab.find("a.tabs-close").remove() - if (opts.closable) { - _2e7.addClass("tabs-closable") - var _2e9 = $('').appendTo(tab) - _2e9.bind("click.tabs", { p: pp }, function (e) { - if ($(this).parent().hasClass("tabs-disabled")) { - return - } - _2eb(_2e3, _2dd(_2e3, e.data.p)) - return false - }) - } else { - _2e7.removeClass("tabs-closable") - } - if (opts.iconCls) { - _2e7.addClass("tabs-with-icon") - _2e8.addClass(opts.iconCls) - } else { - _2e7.removeClass("tabs-with-icon") - } - if (_2e6 != opts.title) { - for (var i = 0; i < _2e5.length; i++) { - if (_2e5[i] == _2e6) { - _2e5[i] = opts.title - } - } - } - tab.find("span.tabs-p-tool").remove() - if (opts.tools) { - var _2ea = $('').insertAfter(tab.find("a.tabs-inner")) - if (typeof opts.tools == "string") { - $(opts.tools).children().appendTo(_2ea) - } else { - for (var i = 0; i < opts.tools.length; i++) { - var t = $('').appendTo(_2ea) - t.addClass(opts.tools[i].iconCls) - if (opts.tools[i].handler) { - t.bind("click", { handler: opts.tools[i].handler }, function (e) { - if ($(this).parents("li").hasClass("tabs-disabled")) { - return - } - e.data.handler.call(this) - }) - } - } - } - var pr = _2ea.children().length * 12 - if (opts.closable) { - pr += 8 - } else { - pr -= 3 - _2ea.css("right", "5px") - } - _2e7.css("padding-right", pr + "px") - } - _2bb(_2e3) - $.data(_2e3, "tabs").options.onUpdate.call(_2e3, opts.title, _2dd(_2e3, pp)) - } - function _2eb(_2ec, _2ed) { - var opts = $.data(_2ec, "tabs").options - var tabs = $.data(_2ec, "tabs").tabs - var _2ee = $.data(_2ec, "tabs").selectHis - if (!_2ef(_2ec, _2ed)) { - return - } - var tab = _2f0(_2ec, _2ed) - var _2f1 = tab.panel("options").title - var _2f2 = _2dd(_2ec, tab) - if (opts.onBeforeClose.call(_2ec, _2f1, _2f2) == false) { - return - } - var tab = _2f0(_2ec, _2ed, true) - tab.panel("options").tab.remove() - tab.panel("destroy") - opts.onClose.call(_2ec, _2f1, _2f2) - _2bb(_2ec) - for (var i = 0; i < _2ee.length; i++) { - if (_2ee[i] == _2f1) { - _2ee.splice(i, 1) - i-- - } - } - var _2f3 = _2ee.pop() - if (_2f3) { - _2e1(_2ec, _2f3) - } else { - if (tabs.length) { - _2e1(_2ec, 0) - } - } - } - function _2f0(_2f4, _2f5, _2f6) { - var tabs = $.data(_2f4, "tabs").tabs - if (typeof _2f5 == "number") { - if (_2f5 < 0 || _2f5 >= tabs.length) { - return null - } else { - var tab = tabs[_2f5] - if (_2f6) { - tabs.splice(_2f5, 1) - } - return tab - } - } - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i] - if (tab.panel("options").title == _2f5) { - if (_2f6) { - tabs.splice(i, 1) - } - return tab - } - } - return null - } - function _2dd(_2f7, tab) { - var tabs = $.data(_2f7, "tabs").tabs - for (var i = 0; i < tabs.length; i++) { - if (tabs[i][0] == $(tab)[0]) { - return i - } - } - return -1 - } - function _2ce(_2f8) { - var tabs = $.data(_2f8, "tabs").tabs - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i] - if (tab.panel("options").closed == false) { - return tab - } - } - return null - } - function _2f9(_2fa) { - var tabs = $.data(_2fa, "tabs").tabs - for (var i = 0; i < tabs.length; i++) { - if (tabs[i].panel("options").selected) { - _2e1(_2fa, i) - return - } - } - if (tabs.length) { - _2e1(_2fa, 0) - } - } - function _2e1(_2fb, _2fc) { - var opts = $.data(_2fb, "tabs").options - var tabs = $.data(_2fb, "tabs").tabs - var _2fd = $.data(_2fb, "tabs").selectHis - if (tabs.length == 0) { - return - } - var _2fe = _2f0(_2fb, _2fc) - if (!_2fe) { - return - } - var _2ff = _2ce(_2fb) - if (_2ff) { - _2ff.panel("close") - _2ff.panel("options").tab.removeClass("tabs-selected") - } - _2fe.panel("open") - var _300 = _2fe.panel("options").title - _2fd.push(_300) - var tab = _2fe.panel("options").tab - tab.addClass("tabs-selected") - var wrap = $(_2fb).find(">div.tabs-header>div.tabs-wrap") - var left = tab.position().left - var _301 = left + tab.outerWidth() - if (left < 0 || _301 > wrap.width()) { - var _302 = left - (wrap.width() - tab.width()) / 2 - $(_2fb).tabs("scrollBy", _302) - } else { - $(_2fb).tabs("scrollBy", 0) - } - _2cc(_2fb) - opts.onSelect.call(_2fb, _300, _2dd(_2fb, _2fe)) - } - function _2ef(_303, _304) { - return _2f0(_303, _304) != null - } - $.fn.tabs = function (_305, _306) { - if (typeof _305 == "string") { - return $.fn.tabs.methods[_305](this, _306) - } - _305 = _305 || {} - return this.each(function () { - var _307 = $.data(this, "tabs") - var opts - if (_307) { - opts = $.extend(_307.options, _305) - _307.options = opts - } else { - $.data(this, "tabs", { options: $.extend({}, $.fn.tabs.defaults, $.fn.tabs.parseOptions(this), _305), tabs: [], selectHis: [] }) - _2d2(this) - } - _2c2(this) - _2d5(this) - _2c6(this) - _2f9(this) - }) - } - $.fn.tabs.methods = { - options: function (jq) { - return $.data(jq[0], "tabs").options - }, - tabs: function (jq) { - return $.data(jq[0], "tabs").tabs - }, - resize: function (jq) { - return jq.each(function () { - _2c6(this) - _2cc(this) - }) - }, - add: function (jq, _308) { - return jq.each(function () { - _2de(this, _308) - }) - }, - close: function (jq, _309) { - return jq.each(function () { - _2eb(this, _309) - }) - }, - getTab: function (jq, _30a) { - return _2f0(jq[0], _30a) - }, - getTabIndex: function (jq, tab) { - return _2dd(jq[0], tab) - }, - getSelected: function (jq) { - return _2ce(jq[0]) - }, - select: function (jq, _30b) { - return jq.each(function () { - _2e1(this, _30b) - }) - }, - exists: function (jq, _30c) { - return _2ef(jq[0], _30c) - }, - update: function (jq, _30d) { - return jq.each(function () { - _2e2(this, _30d) - }) - }, - enableTab: function (jq, _30e) { - return jq.each(function () { - $(this).tabs("getTab", _30e).panel("options").tab.removeClass("tabs-disabled") - }) - }, - disableTab: function (jq, _30f) { - return jq.each(function () { - $(this).tabs("getTab", _30f).panel("options").tab.addClass("tabs-disabled") - }) - }, - scrollBy: function (jq, _310) { - return jq.each(function () { - var opts = $(this).tabs("options") - var wrap = $(this).find(">div.tabs-header>div.tabs-wrap") - var pos = Math.min(wrap._scrollLeft() + _310, _311()) - wrap.animate({ scrollLeft: pos }, opts.scrollDuration) - function _311() { - var w = 0 - var ul = wrap.children("ul") - ul.children("li").each(function () { - w += $(this).outerWidth(true) - }) - return w - wrap.width() + (ul.outerWidth() - ul.width()) - } - }) - } - } - $.fn.tabs.parseOptions = function (_312) { - return $.extend( - {}, - $.parser.parseOptions(_312, [ - "width", - "height", - "tools", - "toolPosition", - "tabPosition", - { fit: "boolean", border: "boolean", plain: "boolean", headerWidth: "number" } - ]) - ) - } - $.fn.tabs.defaults = { - width: "auto", - height: "auto", - headerWidth: 150, - plain: false, - fit: false, - border: true, - tools: null, - toolPosition: "right", - tabPosition: "top", - scrollIncrement: 100, - scrollDuration: 400, - onLoad: function (_313) {}, - onSelect: function (_314, _315) {}, - onBeforeClose: function (_316, _317) {}, - onClose: function (_318, _319) {}, - onAdd: function (_31a, _31b) {}, - onUpdate: function (_31c, _31d) {}, - onContextMenu: function (e, _31e, _31f) {} - } -})(jQuery) -;(function ($) { - var _320 = false - function _321(_322) { - var _323 = $.data(_322, "layout") - var opts = _323.options - var _324 = _323.panels - var cc = $(_322) - if (_322.tagName == "BODY") { - cc._fit() - } else { - opts.fit ? cc.css(cc._fit()) : cc._fit(false) - } - var cpos = { top: 0, left: 0, width: cc.width(), height: cc.height() } - function _325(pp) { - if (pp.length == 0) { - return - } - var opts = pp.panel("options") - var _326 = Math.min(Math.max(opts.height, opts.minHeight), opts.maxHeight) - pp.panel("resize", { width: cc.width(), height: _326, left: 0, top: 0 }) - cpos.top += _326 - cpos.height -= _326 - } - if (_32d(_324.expandNorth)) { - _325(_324.expandNorth) - } else { - _325(_324.north) - } - function _327(pp) { - if (pp.length == 0) { - return - } - var opts = pp.panel("options") - var _328 = Math.min(Math.max(opts.height, opts.minHeight), opts.maxHeight) - pp.panel("resize", { width: cc.width(), height: _328, left: 0, top: cc.height() - _328 }) - cpos.height -= _328 - } - if (_32d(_324.expandSouth)) { - _327(_324.expandSouth) - } else { - _327(_324.south) - } - function _329(pp) { - if (pp.length == 0) { - return - } - var opts = pp.panel("options") - var _32a = Math.min(Math.max(opts.width, opts.minWidth), opts.maxWidth) - pp.panel("resize", { width: _32a, height: cpos.height, left: cc.width() - _32a, top: cpos.top }) - cpos.width -= _32a - } - if (_32d(_324.expandEast)) { - _329(_324.expandEast) - } else { - _329(_324.east) - } - function _32b(pp) { - if (pp.length == 0) { - return - } - var opts = pp.panel("options") - var _32c = Math.min(Math.max(opts.width, opts.minWidth), opts.maxWidth) - pp.panel("resize", { width: _32c, height: cpos.height, left: 0, top: cpos.top }) - cpos.left += _32c - cpos.width -= _32c - } - if (_32d(_324.expandWest)) { - _32b(_324.expandWest) - } else { - _32b(_324.west) - } - _324.center.panel("resize", cpos) - } - function init(_32e) { - var cc = $(_32e) - cc.addClass("layout") - function _32f(cc) { - cc.children("div").each(function () { - var opts = $.parser.parseOptions(this, [ - "region", - { split: "boolean", minWidth: "number", minHeight: "number", maxWidth: "number", maxHeight: "number" } - ]) - var r = opts.region - if (r == "north" || r == "south" || r == "east" || r == "west" || r == "center") { - _331(_32e, opts, this) - } - }) - } - cc.children("form").length ? _32f(cc.children("form")) : _32f(cc) - $('
            ').appendTo(cc) - $('
            ').appendTo(cc) - cc.bind("_resize", function (e, _330) { - var opts = $.data(_32e, "layout").options - if (opts.fit == true || _330) { - _321(_32e) - } - return false - }) - } - function _331(_332, _333, el) { - _333.region = _333.region || "center" - var _334 = $.data(_332, "layout").panels - var cc = $(_332) - var dir = _333.region - if (_334[dir].length) { - return - } - var pp = $(el) - if (!pp.length) { - pp = $("
            ").appendTo(cc) - } - pp.panel( - $.extend( - { minWidth: 10, minHeight: 10, maxWidth: 10000, maxHeight: 10000 }, - { - width: pp.length ? parseInt(pp[0].style.width) || pp.outerWidth() : "auto", - height: pp.length ? parseInt(pp[0].style.height) || pp.outerHeight() : "auto", - doSize: false, - collapsible: true, - cls: "layout-panel layout-panel-" + dir, - bodyCls: "layout-body", - onOpen: function () { - var tool = $(this).panel("header").children("div.panel-tool") - tool.children("a.panel-tool-collapse").hide() - var _335 = { north: "up", south: "down", east: "right", west: "left" } - if (!_335[dir]) { - return - } - var _336 = "layout-button-" + _335[dir] - var t = tool.children("a." + _336) - if (!t.length) { - t = $('').addClass(_336).appendTo(tool) - t.bind("click", { dir: dir }, function (e) { - _342(_332, e.data.dir) - return false - }) - } - $(this).panel("options").collapsible ? t.show() : t.hide() - } - }, - _333 - ) - ) - _334[dir] = pp - if (pp.panel("options").split) { - var _337 = pp.panel("panel") - _337.addClass("layout-split-" + dir) - var _338 = "" - if (dir == "north") { - _338 = "s" - } - if (dir == "south") { - _338 = "n" - } - if (dir == "east") { - _338 = "w" - } - if (dir == "west") { - _338 = "e" - } - _337.resizable( - $.extend( - {}, - { - handles: _338, - onStartResize: function (e) { - _320 = true - if (dir == "north" || dir == "south") { - var _339 = $(">div.layout-split-proxy-v", _332) - } else { - var _339 = $(">div.layout-split-proxy-h", _332) - } - var top = 0, - left = 0, - _33a = 0, - _33b = 0 - var pos = { display: "block" } - if (dir == "north") { - pos.top = parseInt(_337.css("top")) + _337.outerHeight() - _339.height() - pos.left = parseInt(_337.css("left")) - pos.width = _337.outerWidth() - pos.height = _339.height() - } else { - if (dir == "south") { - pos.top = parseInt(_337.css("top")) - pos.left = parseInt(_337.css("left")) - pos.width = _337.outerWidth() - pos.height = _339.height() - } else { - if (dir == "east") { - pos.top = parseInt(_337.css("top")) || 0 - pos.left = parseInt(_337.css("left")) || 0 - pos.width = _339.width() - pos.height = _337.outerHeight() - } else { - if (dir == "west") { - pos.top = parseInt(_337.css("top")) || 0 - pos.left = _337.outerWidth() - _339.width() - pos.width = _339.width() - pos.height = _337.outerHeight() - } - } - } - } - _339.css(pos) - $('
            ').css({ left: 0, top: 0, width: cc.width(), height: cc.height() }).appendTo(cc) - }, - onResize: function (e) { - if (dir == "north" || dir == "south") { - var _33c = $(">div.layout-split-proxy-v", _332) - _33c.css("top", e.pageY - $(_332).offset().top - _33c.height() / 2) - } else { - var _33c = $(">div.layout-split-proxy-h", _332) - _33c.css("left", e.pageX - $(_332).offset().left - _33c.width() / 2) - } - return false - }, - onStopResize: function () { - $(">div.layout-split-proxy-v", _332).css("display", "none") - $(">div.layout-split-proxy-h", _332).css("display", "none") - var opts = pp.panel("options") - opts.width = _337.outerWidth() - opts.height = _337.outerHeight() - opts.left = _337.css("left") - opts.top = _337.css("top") - pp.panel("resize") - _321(_332) - _320 = false - cc.find(">div.layout-mask").remove() - } - }, - _333 - ) - ) - } - } - function _33d(_33e, _33f) { - var _340 = $.data(_33e, "layout").panels - if (_340[_33f].length) { - _340[_33f].panel("destroy") - _340[_33f] = $() - var _341 = "expand" + _33f.substring(0, 1).toUpperCase() + _33f.substring(1) - if (_340[_341]) { - _340[_341].panel("destroy") - _340[_341] = undefined - } - } - } - function _342(_343, _344, _345) { - if (_345 == undefined) { - _345 = "normal" - } - var _346 = $.data(_343, "layout").panels - var p = _346[_344] - if (p.panel("options").onBeforeCollapse.call(p) == false) { - return - } - var _347 = "expand" + _344.substring(0, 1).toUpperCase() + _344.substring(1) - if (!_346[_347]) { - _346[_347] = _348(_344) - _346[_347].panel("panel").click(function () { - var _349 = _34a() - p.panel("expand", false).panel("open").panel("resize", _349.collapse) - p.panel("panel").animate(_349.expand, _345, function () { - $(this) - .unbind(".layout") - .bind("mouseleave.layout", { region: _344 }, function (e) { - if (_320 == true) { - return - } - _342(_343, e.data.region) - }) - }) - return false - }) - } - var _34b = _34a() - if (!_32d(_346[_347])) { - _346.center.panel("resize", _34b.resizeC) - } - p.panel("panel").animate(_34b.collapse, _345, function () { - p.panel("collapse", false).panel("close") - _346[_347].panel("open").panel("resize", _34b.expandP) - $(this).unbind(".layout") - }) - function _348(dir) { - var icon - if (dir == "east") { - icon = "layout-button-left" - } else { - if (dir == "west") { - icon = "layout-button-right" - } else { - if (dir == "north") { - icon = "layout-button-down" - } else { - if (dir == "south") { - icon = "layout-button-up" - } - } - } - } - var p = $("
            ") - .appendTo(_343) - .panel({ - cls: "layout-expand", - title: " ", - closed: true, - doSize: false, - tools: [ - { - iconCls: icon, - handler: function () { - _34c(_343, _344) - return false - } - } - ] - }) - p.panel("panel").hover( - function () { - $(this).addClass("layout-expand-over") - }, - function () { - $(this).removeClass("layout-expand-over") - } - ) - return p - } - function _34a() { - var cc = $(_343) - if (_344 == "east") { - return { - resizeC: { width: _346.center.panel("options").width + _346["east"].panel("options").width - 28 }, - expand: { left: cc.width() - _346["east"].panel("options").width }, - expandP: { - top: _346["east"].panel("options").top, - left: cc.width() - 28, - width: 28, - height: _346["center"].panel("options").height - }, - collapse: { left: cc.width() } - } - } else { - if (_344 == "west") { - return { - resizeC: { width: _346.center.panel("options").width + _346["west"].panel("options").width - 28, left: 28 }, - expand: { left: 0 }, - expandP: { left: 0, top: _346["west"].panel("options").top, width: 28, height: _346["center"].panel("options").height }, - collapse: { left: -_346["west"].panel("options").width } - } - } else { - if (_344 == "north") { - var hh = cc.height() - 28 - if (_32d(_346.expandSouth)) { - hh -= _346.expandSouth.panel("options").height - } else { - if (_32d(_346.south)) { - hh -= _346.south.panel("options").height - } - } - _346.east.panel("resize", { top: 28, height: hh }) - _346.west.panel("resize", { top: 28, height: hh }) - if (_32d(_346.expandEast)) { - _346.expandEast.panel("resize", { top: 28, height: hh }) - } - if (_32d(_346.expandWest)) { - _346.expandWest.panel("resize", { top: 28, height: hh }) - } - return { - resizeC: { top: 28, height: hh }, - expand: { top: 0 }, - expandP: { top: 0, left: 0, width: cc.width(), height: 28 }, - collapse: { top: -_346["north"].panel("options").height } - } - } else { - if (_344 == "south") { - var hh = cc.height() - 28 - if (_32d(_346.expandNorth)) { - hh -= _346.expandNorth.panel("options").height - } else { - if (_32d(_346.north)) { - hh -= _346.north.panel("options").height - } - } - _346.east.panel("resize", { height: hh }) - _346.west.panel("resize", { height: hh }) - if (_32d(_346.expandEast)) { - _346.expandEast.panel("resize", { height: hh }) - } - if (_32d(_346.expandWest)) { - _346.expandWest.panel("resize", { height: hh }) - } - return { - resizeC: { height: hh }, - expand: { top: cc.height() - _346["south"].panel("options").height }, - expandP: { top: cc.height() - 28, left: 0, width: cc.width(), height: 28 }, - collapse: { top: cc.height() } - } - } - } - } - } - } - } - function _34c(_34d, _34e) { - var _34f = $.data(_34d, "layout").panels - var _350 = _351() - var p = _34f[_34e] - if (p.panel("options").onBeforeExpand.call(p) == false) { - return - } - var _352 = "expand" + _34e.substring(0, 1).toUpperCase() + _34e.substring(1) - _34f[_352].panel("close") - p.panel("panel").stop(true, true) - p.panel("expand", false).panel("open").panel("resize", _350.collapse) - p.panel("panel").animate(_350.expand, function () { - _321(_34d) - }) - function _351() { - var cc = $(_34d) - if (_34e == "east" && _34f.expandEast) { - return { collapse: { left: cc.width() }, expand: { left: cc.width() - _34f["east"].panel("options").width } } - } else { - if (_34e == "west" && _34f.expandWest) { - return { collapse: { left: -_34f["west"].panel("options").width }, expand: { left: 0 } } - } else { - if (_34e == "north" && _34f.expandNorth) { - return { collapse: { top: -_34f["north"].panel("options").height }, expand: { top: 0 } } - } else { - if (_34e == "south" && _34f.expandSouth) { - return { collapse: { top: cc.height() }, expand: { top: cc.height() - _34f["south"].panel("options").height } } - } - } - } - } - } - } - function _32d(pp) { - if (!pp) { - return false - } - if (pp.length) { - return pp.panel("panel").is(":visible") - } else { - return false - } - } - function _353(_354) { - var _355 = $.data(_354, "layout").panels - if (_355.east.length && _355.east.panel("options").collapsed) { - _342(_354, "east", 0) - } - if (_355.west.length && _355.west.panel("options").collapsed) { - _342(_354, "west", 0) - } - if (_355.north.length && _355.north.panel("options").collapsed) { - _342(_354, "north", 0) - } - if (_355.south.length && _355.south.panel("options").collapsed) { - _342(_354, "south", 0) - } - } - $.fn.layout = function (_356, _357) { - if (typeof _356 == "string") { - return $.fn.layout.methods[_356](this, _357) - } - _356 = _356 || {} - return this.each(function () { - var _358 = $.data(this, "layout") - if (_358) { - $.extend(_358.options, _356) - } else { - var opts = $.extend({}, $.fn.layout.defaults, $.fn.layout.parseOptions(this), _356) - $.data(this, "layout", { options: opts, panels: { center: $(), north: $(), south: $(), east: $(), west: $() } }) - init(this) - } - _321(this) - _353(this) - }) - } - $.fn.layout.methods = { - resize: function (jq) { - return jq.each(function () { - _321(this) - }) - }, - panel: function (jq, _359) { - return $.data(jq[0], "layout").panels[_359] - }, - collapse: function (jq, _35a) { - return jq.each(function () { - _342(this, _35a) - }) - }, - expand: function (jq, _35b) { - return jq.each(function () { - _34c(this, _35b) - }) - }, - add: function (jq, _35c) { - return jq.each(function () { - _331(this, _35c) - _321(this) - if ($(this).layout("panel", _35c.region).panel("options").collapsed) { - _342(this, _35c.region, 0) - } - }) - }, - remove: function (jq, _35d) { - return jq.each(function () { - _33d(this, _35d) - _321(this) - }) - } - } - $.fn.layout.parseOptions = function (_35e) { - return $.extend({}, $.parser.parseOptions(_35e, [{ fit: "boolean" }])) - } - $.fn.layout.defaults = { fit: false } -})(jQuery) -;(function ($) { - function init(_35f) { - $(_35f).appendTo("body") - $(_35f).addClass("menu-top") - $(document) - .unbind(".menu") - .bind("mousedown.menu", function (e) { - var _360 = $("body>div.menu:visible") - var m = $(e.target).closest("div.menu", _360) - if (m.length) { - return - } - $("body>div.menu-top:visible").menu("hide") - }) - var _361 = _362($(_35f)) - for (var i = 0; i < _361.length; i++) { - _363(_361[i]) - } - function _362(menu) { - var _364 = [] - menu.addClass("menu") - _364.push(menu) - if (!menu.hasClass("menu-content")) { - menu.children("div").each(function () { - var _365 = $(this).children("div") - if (_365.length) { - _365.insertAfter(_35f) - this.submenu = _365 - var mm = _362(_365) - _364 = _364.concat(mm) - } - }) - } - return _364 - } - function _363(menu) { - var _366 = $.parser.parseOptions(menu[0], ["width"]).width - if (menu.hasClass("menu-content")) { - menu[0].originalWidth = _366 || menu._outerWidth() - } else { - menu[0].originalWidth = _366 || 0 - menu.children("div").each(function () { - var item = $(this) - if (item.hasClass("menu-sep")) { - } else { - var _367 = $.extend({}, $.parser.parseOptions(this, ["name", "iconCls", "href"]), { - disabled: item.attr("disabled") ? true : undefined - }) - item.attr("name", _367.name || "").attr("href", _367.href || "") - var text = item.addClass("menu-item").html() - item.empty().append($('').html(text)) - if (_367.iconCls) { - $('').addClass(_367.iconCls).appendTo(item) - } - if (_367.disabled) { - _368(_35f, item[0], true) - } - if (item[0].submenu) { - $('').appendTo(item) - } - _369(_35f, item) - } - }) - $('').prependTo(menu) - } - _36a(_35f, menu) - menu.hide() - _36b(_35f, menu) - } - } - function _36a(_36c, menu) { - var opts = $.data(_36c, "menu").options - var d = menu.css("display") - menu.css({ display: "block", left: -10000 }) - menu.find("div.menu-item")._outerHeight(22) - var _36d = 0 - menu.find("div.menu-text").each(function () { - if (_36d < $(this)._outerWidth()) { - _36d = $(this)._outerWidth() - } - }) - _36d += 65 - menu._outerWidth(Math.max(menu[0].originalWidth || 0, _36d, opts.minWidth)) - menu.css("display", d) - } - function _36b(_36e, menu) { - var _36f = $.data(_36e, "menu") - menu.unbind(".menu") - .bind("mouseenter.menu", function () { - if (_36f.timer) { - clearTimeout(_36f.timer) - _36f.timer = null - } - }) - .bind("mouseleave.menu", function () { - _36f.timer = setTimeout(function () { - _370(_36e) - }, 100) - }) - } - function _369(_371, item) { - item.unbind(".menu") - item.bind("click.menu", function () { - if ($(this).hasClass("menu-item-disabled")) { - return - } - if (!this.submenu) { - _370(_371) - var href = $(this).attr("href") - if (href) { - location.href = href - } - } - var item = $(_371).menu("getItem", this) - $.data(_371, "menu").options.onClick.call(_371, item) - }) - .bind("mouseenter.menu", function (e) { - item.siblings().each(function () { - if (this.submenu) { - _374(this.submenu) - } - $(this).removeClass("menu-active") - }) - item.addClass("menu-active") - if ($(this).hasClass("menu-item-disabled")) { - item.addClass("menu-active-disabled") - return - } - var _372 = item[0].submenu - if (_372) { - $(_371).menu("show", { menu: _372, parent: item }) - } - }) - .bind("mouseleave.menu", function (e) { - item.removeClass("menu-active menu-active-disabled") - var _373 = item[0].submenu - if (_373) { - if (e.pageX >= parseInt(_373.css("left"))) { - item.addClass("menu-active") - } else { - _374(_373) - } - } else { - item.removeClass("menu-active") - } - }) - } - function _370(_375) { - var _376 = $.data(_375, "menu") - if (_376) { - if ($(_375).is(":visible")) { - _374($(_375)) - _376.options.onHide.call(_375) - } - } - return false - } - function _377(_378, _379) { - var left, top - var menu = $(_379.menu || _378) - if (menu.hasClass("menu-top")) { - var opts = $.data(_378, "menu").options - left = opts.left - top = opts.top - if (_379.alignTo) { - var at = $(_379.alignTo) - left = at.offset().left - top = at.offset().top + at._outerHeight() - } - if (_379.left != undefined) { - left = _379.left - } - if (_379.top != undefined) { - top = _379.top - } - if (left + menu.outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()) { - left = $(window)._outerWidth() + $(document).scrollLeft() - menu.outerWidth() - 5 - } - if (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()) { - top -= menu.outerHeight() - } - } else { - var _37a = _379.parent - left = _37a.offset().left + _37a.outerWidth() - 2 - if (left + menu.outerWidth() + 5 > $(window)._outerWidth() + $(document).scrollLeft()) { - left = _37a.offset().left - menu.outerWidth() + 2 - } - var top = _37a.offset().top - 3 - if (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()) { - top = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight() - 5 - } - } - menu.css({ left: left, top: top }) - menu.show(0, function () { - if (!menu[0].shadow) { - menu[0].shadow = $('').insertAfter(menu) - } - menu[0].shadow.css({ - display: "block", - zIndex: $.fn.menu.defaults.zIndex++, - left: menu.css("left"), - top: menu.css("top"), - width: menu.outerWidth(), - height: menu.outerHeight() - }) - menu.css("z-index", $.fn.menu.defaults.zIndex++) - if (menu.hasClass("menu-top")) { - $.data(menu[0], "menu").options.onShow.call(menu[0]) - } - }) - } - function _374(menu) { - if (!menu) { - return - } - _37b(menu) - menu.find("div.menu-item").each(function () { - if (this.submenu) { - _374(this.submenu) - } - $(this).removeClass("menu-active") - }) - function _37b(m) { - m.stop(true, true) - if (m[0].shadow) { - m[0].shadow.hide() - } - m.hide() - } - } - function _37c(_37d, text) { - var _37e = null - var tmp = $("
            ") - function find(menu) { - menu.children("div.menu-item").each(function () { - var item = $(_37d).menu("getItem", this) - var s = tmp.empty().html(item.text).text() - if (text == $.trim(s)) { - _37e = item - } else { - if (this.submenu && !_37e) { - find(this.submenu) - } - } - }) - } - find($(_37d)) - tmp.remove() - return _37e - } - function _368(_37f, _380, _381) { - var t = $(_380) - if (_381) { - t.addClass("menu-item-disabled") - if (_380.onclick) { - _380.onclick1 = _380.onclick - _380.onclick = null - } - } else { - t.removeClass("menu-item-disabled") - if (_380.onclick1) { - _380.onclick = _380.onclick1 - _380.onclick1 = null - } - } - } - function _382(_383, _384) { - var menu = $(_383) - if (_384.parent) { - if (!_384.parent.submenu) { - var _385 = $('').appendTo("body") - _385.hide() - _384.parent.submenu = _385 - $('').appendTo(_384.parent) - } - menu = _384.parent.submenu - } - var item = $('').appendTo(menu) - $('').html(_384.text).appendTo(item) - if (_384.iconCls) { - $('').addClass(_384.iconCls).appendTo(item) - } - if (_384.id) { - item.attr("id", _384.id) - } - if (_384.href) { - item.attr("href", _384.href) - } - if (_384.name) { - item.attr("name", _384.name) - } - if (_384.onclick) { - if (typeof _384.onclick == "string") { - item.attr("onclick", _384.onclick) - } else { - item[0].onclick = eval(_384.onclick) - } - } - if (_384.handler) { - item[0].onclick = eval(_384.handler) - } - _369(_383, item) - if (_384.disabled) { - _368(_383, item[0], true) - } - _36b(_383, menu) - _36a(_383, menu) - } - function _386(_387, _388) { - function _389(el) { - if (el.submenu) { - el.submenu.children("div.menu-item").each(function () { - _389(this) - }) - var _38a = el.submenu[0].shadow - if (_38a) { - _38a.remove() - } - el.submenu.remove() - } - $(el).remove() - } - _389(_388) - } - function _38b(_38c) { - $(_38c) - .children("div.menu-item") - .each(function () { - _386(_38c, this) - }) - if (_38c.shadow) { - _38c.shadow.remove() - } - $(_38c).remove() - } - $.fn.menu = function (_38d, _38e) { - if (typeof _38d == "string") { - return $.fn.menu.methods[_38d](this, _38e) - } - _38d = _38d || {} - return this.each(function () { - var _38f = $.data(this, "menu") - if (_38f) { - $.extend(_38f.options, _38d) - } else { - _38f = $.data(this, "menu", { options: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), _38d) }) - init(this) - } - $(this).css({ left: _38f.options.left, top: _38f.options.top }) - }) - } - $.fn.menu.methods = { - options: function (jq) { - return $.data(jq[0], "menu").options - }, - show: function (jq, pos) { - return jq.each(function () { - _377(this, pos) - }) - }, - hide: function (jq) { - return jq.each(function () { - _370(this) - }) - }, - destroy: function (jq) { - return jq.each(function () { - _38b(this) - }) - }, - setText: function (jq, _390) { - return jq.each(function () { - $(_390.target).children("div.menu-text").html(_390.text) - }) - }, - setIcon: function (jq, _391) { - return jq.each(function () { - var item = $(this).menu("getItem", _391.target) - if (item.iconCls) { - $(item.target).children("div.menu-icon").removeClass(item.iconCls).addClass(_391.iconCls) - } else { - $('').addClass(_391.iconCls).appendTo(_391.target) - } - }) - }, - getItem: function (jq, _392) { - var t = $(_392) - var item = { - target: _392, - id: t.attr("id"), - text: $.trim(t.children("div.menu-text").html()), - disabled: t.hasClass("menu-item-disabled"), - href: t.attr("href"), - name: t.attr("name"), - onclick: _392.onclick - } - var icon = t.children("div.menu-icon") - if (icon.length) { - var cc = [] - var aa = icon.attr("class").split(" ") - for (var i = 0; i < aa.length; i++) { - if (aa[i] != "menu-icon") { - cc.push(aa[i]) - } - } - item.iconCls = cc.join(" ") - } - return item - }, - findItem: function (jq, text) { - return _37c(jq[0], text) - }, - appendItem: function (jq, _393) { - return jq.each(function () { - _382(this, _393) - }) - }, - removeItem: function (jq, _394) { - return jq.each(function () { - _386(this, _394) - }) - }, - enableItem: function (jq, _395) { - return jq.each(function () { - _368(this, _395, false) - }) - }, - disableItem: function (jq, _396) { - return jq.each(function () { - _368(this, _396, true) - }) - } - } - $.fn.menu.parseOptions = function (_397) { - return $.extend({}, $.parser.parseOptions(_397, ["left", "top", { minWidth: "number" }])) - } - $.fn.menu.defaults = { - zIndex: 110000, - left: 0, - top: 0, - minWidth: 120, - onShow: function () {}, - onHide: function () {}, - onClick: function (item) {} - } -})(jQuery) -;(function ($) { - function init(_398) { - var opts = $.data(_398, "menubutton").options - var btn = $(_398) - btn.removeClass("m-btn-active m-btn-plain-active").addClass("m-btn") - btn.linkbutton($.extend({}, opts, { text: opts.text + ' ' })) - if (opts.menu) { - $(opts.menu).menu({ - onShow: function () { - btn.addClass(opts.plain == true ? "m-btn-plain-active" : "m-btn-active") - }, - onHide: function () { - btn.removeClass(opts.plain == true ? "m-btn-plain-active" : "m-btn-active") - } - }) - } - _399(_398, opts.disabled) - } - function _399(_39a, _39b) { - var opts = $.data(_39a, "menubutton").options - opts.disabled = _39b - var btn = $(_39a) - if (_39b) { - btn.linkbutton("disable") - btn.unbind(".menubutton") - } else { - btn.linkbutton("enable") - btn.unbind(".menubutton") - btn.bind("click.menubutton", function () { - _39c() - return false - }) - var _39d = null - btn.bind("mouseenter.menubutton", function () { - _39d = setTimeout(function () { - _39c() - }, opts.duration) - return false - }).bind("mouseleave.menubutton", function () { - if (_39d) { - clearTimeout(_39d) - } - }) - } - function _39c() { - if (!opts.menu) { - return - } - $("body>div.menu-top").menu("hide") - $(opts.menu).menu("show", { alignTo: btn }) - btn.blur() - } - } - $.fn.menubutton = function (_39e, _39f) { - if (typeof _39e == "string") { - return $.fn.menubutton.methods[_39e](this, _39f) - } - _39e = _39e || {} - return this.each(function () { - var _3a0 = $.data(this, "menubutton") - if (_3a0) { - $.extend(_3a0.options, _39e) - } else { - $.data(this, "menubutton", { options: $.extend({}, $.fn.menubutton.defaults, $.fn.menubutton.parseOptions(this), _39e) }) - $(this).removeAttr("disabled") - } - init(this) - }) - } - $.fn.menubutton.methods = { - options: function (jq) { - return $.data(jq[0], "menubutton").options - }, - enable: function (jq) { - return jq.each(function () { - _399(this, false) - }) - }, - disable: function (jq) { - return jq.each(function () { - _399(this, true) - }) - }, - destroy: function (jq) { - return jq.each(function () { - var opts = $(this).menubutton("options") - if (opts.menu) { - $(opts.menu).menu("destroy") - } - $(this).remove() - }) - } - } - $.fn.menubutton.parseOptions = function (_3a1) { - var t = $(_3a1) - return $.extend({}, $.fn.linkbutton.parseOptions(_3a1), $.parser.parseOptions(_3a1, ["menu", { plain: "boolean", duration: "number" }])) - } - $.fn.menubutton.defaults = $.extend({}, $.fn.linkbutton.defaults, { plain: true, menu: null, duration: 100 }) -})(jQuery) -;(function ($) { - function init(_3a2) { - var opts = $.data(_3a2, "splitbutton").options - var btn = $(_3a2) - btn.removeClass("s-btn-active s-btn-plain-active").addClass("s-btn") - btn.linkbutton($.extend({}, opts, { text: opts.text + ' ' })) - if (opts.menu) { - $(opts.menu).menu({ - onShow: function () { - btn.addClass(opts.plain == true ? "s-btn-plain-active" : "s-btn-active") - }, - onHide: function () { - btn.removeClass(opts.plain == true ? "s-btn-plain-active" : "s-btn-active") - } - }) - } - _3a3(_3a2, opts.disabled) - } - function _3a3(_3a4, _3a5) { - var opts = $.data(_3a4, "splitbutton").options - opts.disabled = _3a5 - var btn = $(_3a4) - var _3a6 = btn.find(".s-btn-downarrow") - if (_3a5) { - btn.linkbutton("disable") - _3a6.unbind(".splitbutton") - } else { - btn.linkbutton("enable") - _3a6.unbind(".splitbutton") - _3a6.bind("click.splitbutton", function () { - _3a7() - return false - }) - var _3a8 = null - _3a6.bind("mouseenter.splitbutton", function () { - _3a8 = setTimeout(function () { - _3a7() - }, opts.duration) - return false - }).bind("mouseleave.splitbutton", function () { - if (_3a8) { - clearTimeout(_3a8) - } - }) - } - function _3a7() { - if (!opts.menu) { - return - } - $("body>div.menu-top").menu("hide") - $(opts.menu).menu("show", { alignTo: btn }) - btn.blur() - } - } - $.fn.splitbutton = function (_3a9, _3aa) { - if (typeof _3a9 == "string") { - return $.fn.splitbutton.methods[_3a9](this, _3aa) - } - _3a9 = _3a9 || {} - return this.each(function () { - var _3ab = $.data(this, "splitbutton") - if (_3ab) { - $.extend(_3ab.options, _3a9) - } else { - $.data(this, "splitbutton", { options: $.extend({}, $.fn.splitbutton.defaults, $.fn.splitbutton.parseOptions(this), _3a9) }) - $(this).removeAttr("disabled") - } - init(this) - }) - } - $.fn.splitbutton.methods = { - options: function (jq) { - return $.data(jq[0], "splitbutton").options - }, - enable: function (jq) { - return jq.each(function () { - _3a3(this, false) - }) - }, - disable: function (jq) { - return jq.each(function () { - _3a3(this, true) - }) - }, - destroy: function (jq) { - return jq.each(function () { - var opts = $(this).splitbutton("options") - if (opts.menu) { - $(opts.menu).menu("destroy") - } - $(this).remove() - }) - } - } - $.fn.splitbutton.parseOptions = function (_3ac) { - var t = $(_3ac) - return $.extend({}, $.fn.linkbutton.parseOptions(_3ac), $.parser.parseOptions(_3ac, ["menu", { plain: "boolean", duration: "number" }])) - } - $.fn.splitbutton.defaults = $.extend({}, $.fn.linkbutton.defaults, { plain: true, menu: null, duration: 100 }) -})(jQuery) -;(function ($) { - function init(_3ad) { - $(_3ad).hide() - var span = $('').insertAfter(_3ad) - var _3ae = $('').appendTo(span) - $('').appendTo(span) - var name = $(_3ad).attr("name") - if (name) { - _3ae.attr("name", name) - $(_3ad).removeAttr("name").attr("searchboxName", name) - } - return span - } - function _3af(_3b0, _3b1) { - var opts = $.data(_3b0, "searchbox").options - var sb = $.data(_3b0, "searchbox").searchbox - if (_3b1) { - opts.width = _3b1 - } - sb.appendTo("body") - if (isNaN(opts.width)) { - opts.width = sb._outerWidth() - } - var _3b2 = sb.find("span.searchbox-button") - var menu = sb.find("a.searchbox-menu") - var _3b3 = sb.find("input.searchbox-text") - sb._outerWidth(opts.width)._outerHeight(opts.height) - _3b3._outerWidth(sb.width() - menu._outerWidth() - _3b2._outerWidth()) - _3b3.css({ height: sb.height() + "px", lineHeight: sb.height() + "px" }) - menu._outerHeight(sb.height()) - _3b2._outerHeight(sb.height()) - var _3b4 = menu.find("span.l-btn-left") - _3b4._outerHeight(sb.height()) - _3b4.find("span.l-btn-text,span.m-btn-downarrow").css({ height: _3b4.height() + "px", lineHeight: _3b4.height() + "px" }) - sb.insertAfter(_3b0) - } - function _3b5(_3b6) { - var _3b7 = $.data(_3b6, "searchbox") - var opts = _3b7.options - if (opts.menu) { - _3b7.menu = $(opts.menu).menu({ - onClick: function (item) { - _3b8(item) - } - }) - var item = _3b7.menu.children("div.menu-item:first") - _3b7.menu.children("div.menu-item").each(function () { - var _3b9 = $.extend({}, $.parser.parseOptions(this), { selected: $(this).attr("selected") ? true : undefined }) - if (_3b9.selected) { - item = $(this) - return false - } - }) - item.triggerHandler("click") - } else { - _3b7.searchbox.find("a.searchbox-menu").remove() - _3b7.menu = null - } - function _3b8(item) { - _3b7.searchbox.find("a.searchbox-menu").remove() - var mb = $('').html(item.text) - mb.prependTo(_3b7.searchbox).menubutton({ menu: _3b7.menu, iconCls: item.iconCls }) - _3b7.searchbox.find("input.searchbox-text").attr("name", $(item.target).attr("name") || item.text) - _3af(_3b6) - } - } - function _3ba(_3bb) { - var _3bc = $.data(_3bb, "searchbox") - var opts = _3bc.options - var _3bd = _3bc.searchbox.find("input.searchbox-text") - var _3be = _3bc.searchbox.find(".searchbox-button") - _3bd.unbind(".searchbox") - .bind("blur.searchbox", function (e) { - opts.value = $(this).val() - if (opts.value == "") { - $(this).val(opts.prompt) - $(this).addClass("searchbox-prompt") - } else { - $(this).removeClass("searchbox-prompt") - } - }) - .bind("focus.searchbox", function (e) { - if ($(this).val() != opts.value) { - $(this).val(opts.value) - } - $(this).removeClass("searchbox-prompt") - }) - .bind("keydown.searchbox", function (e) { - if (e.keyCode == 13) { - e.preventDefault() - var name = $.fn.prop ? _3bd.prop("name") : _3bd.attr("name") - opts.value = $(this).val() - opts.searcher.call(_3bb, opts.value, name) - return false - } - }) - _3be.unbind(".searchbox") - .bind("click.searchbox", function () { - var name = $.fn.prop ? _3bd.prop("name") : _3bd.attr("name") - opts.searcher.call(_3bb, opts.value, name) - }) - .bind("mouseenter.searchbox", function () { - $(this).addClass("searchbox-button-hover") - }) - .bind("mouseleave.searchbox", function () { - $(this).removeClass("searchbox-button-hover") - }) - } - function _3bf(_3c0) { - var _3c1 = $.data(_3c0, "searchbox") - var opts = _3c1.options - var _3c2 = _3c1.searchbox.find("input.searchbox-text") - if (opts.value == "") { - _3c2.val(opts.prompt) - _3c2.addClass("searchbox-prompt") - } else { - _3c2.val(opts.value) - _3c2.removeClass("searchbox-prompt") - } - } - $.fn.searchbox = function (_3c3, _3c4) { - if (typeof _3c3 == "string") { - return $.fn.searchbox.methods[_3c3](this, _3c4) - } - _3c3 = _3c3 || {} - return this.each(function () { - var _3c5 = $.data(this, "searchbox") - if (_3c5) { - $.extend(_3c5.options, _3c3) - } else { - _3c5 = $.data(this, "searchbox", { - options: $.extend({}, $.fn.searchbox.defaults, $.fn.searchbox.parseOptions(this), _3c3), - searchbox: init(this) - }) - } - _3b5(this) - _3bf(this) - _3ba(this) - _3af(this) - }) - } - $.fn.searchbox.methods = { - options: function (jq) { - return $.data(jq[0], "searchbox").options - }, - menu: function (jq) { - return $.data(jq[0], "searchbox").menu - }, - textbox: function (jq) { - return $.data(jq[0], "searchbox").searchbox.find("input.searchbox-text") - }, - getValue: function (jq) { - return $.data(jq[0], "searchbox").options.value - }, - setValue: function (jq, _3c6) { - return jq.each(function () { - $(this).searchbox("options").value = _3c6 - $(this).searchbox("textbox").val(_3c6) - $(this).searchbox("textbox").blur() - }) - }, - getName: function (jq) { - return $.data(jq[0], "searchbox").searchbox.find("input.searchbox-text").attr("name") - }, - selectName: function (jq, name) { - return jq.each(function () { - var menu = $.data(this, "searchbox").menu - if (menu) { - menu.children('div.menu-item[name="' + name + '"]').triggerHandler("click") - } - }) - }, - destroy: function (jq) { - return jq.each(function () { - var menu = $(this).searchbox("menu") - if (menu) { - menu.menu("destroy") - } - $.data(this, "searchbox").searchbox.remove() - $(this).remove() - }) - }, - resize: function (jq, _3c7) { - return jq.each(function () { - _3af(this, _3c7) - }) - } - } - $.fn.searchbox.parseOptions = function (_3c8) { - var t = $(_3c8) - return $.extend({}, $.parser.parseOptions(_3c8, ["width", "height", "prompt", "menu"]), { - value: t.val(), - searcher: t.attr("searcher") ? eval(t.attr("searcher")) : undefined - }) - } - $.fn.searchbox.defaults = { width: "auto", height: 22, prompt: "", value: "", menu: null, searcher: function (_3c9, name) {} } -})(jQuery) -;(function ($) { - function init(_3ca) { - $(_3ca).addClass("validatebox-text") - } - function _3cb(_3cc) { - var _3cd = $.data(_3cc, "validatebox") - _3cd.validating = false - $(_3cc).tooltip("destroy") - $(_3cc).unbind() - $(_3cc).remove() - } - function _3ce(_3cf) { - var box = $(_3cf) - var _3d0 = $.data(_3cf, "validatebox") - box.unbind(".validatebox") - .bind("focus.validatebox", function () { - _3d0.validating = true - _3d0.value = undefined - ;(function () { - if (_3d0.validating) { - if (_3d0.value != box.val()) { - _3d0.value = box.val() - if (_3d0.timer) { - clearTimeout(_3d0.timer) - } - _3d0.timer = setTimeout(function () { - $(_3cf).validatebox("validate") - }, _3d0.options.delay) - } else { - _3d5(_3cf) - } - setTimeout(arguments.callee, 200) - } - })() - }) - .bind("blur.validatebox", function () { - if (_3d0.timer) { - clearTimeout(_3d0.timer) - _3d0.timer = undefined - } - _3d0.validating = false - _3d1(_3cf) - }) - .bind("mouseenter.validatebox", function () { - if (box.hasClass("validatebox-invalid")) { - _3d2(_3cf) - } - }) - .bind("mouseleave.validatebox", function () { - if (!_3d0.validating) { - _3d1(_3cf) - } - }) - } - function _3d2(_3d3) { - var _3d4 = $.data(_3d3, "validatebox") - var opts = _3d4.options - $(_3d3) - .tooltip($.extend({}, opts.tipOptions, { content: _3d4.message, position: opts.tipPosition, deltaX: opts.deltaX })) - .tooltip("show") - _3d4.tip = true - } - function _3d5(_3d6) { - var _3d7 = $.data(_3d6, "validatebox") - if (_3d7 && _3d7.tip) { - $(_3d6).tooltip("reposition") - } - } - function _3d1(_3d8) { - var _3d9 = $.data(_3d8, "validatebox") - _3d9.tip = false - $(_3d8).tooltip("hide") - } - function _3da(_3db) { - var _3dc = $.data(_3db, "validatebox") - var opts = _3dc.options - var box = $(_3db) - var _3dd = box.val() - function _3de(msg) { - _3dc.message = msg - } - function _3df(_3e0) { - var _3e1 = /([a-zA-Z_]+)(.*)/.exec(_3e0) - var rule = opts.rules[_3e1[1]] - if (rule && _3dd) { - var _3e2 = eval(_3e1[2]) - if (!rule["validator"](_3dd, _3e2)) { - box.addClass("validatebox-invalid") - var _3e3 = rule["message"] - if (_3e2) { - for (var i = 0; i < _3e2.length; i++) { - _3e3 = _3e3.replace(new RegExp("\\{" + i + "\\}", "g"), _3e2[i]) - } - } - _3de(opts.invalidMessage || _3e3) - if (_3dc.validating) { - _3d2(_3db) - } - return false - } - } - return true - } - if (opts.required) { - if (_3dd == "") { - box.addClass("validatebox-invalid") - _3de(opts.missingMessage) - if (_3dc.validating) { - _3d2(_3db) - } - return false - } - } - if (opts.validType) { - if (typeof opts.validType == "string") { - if (!_3df(opts.validType)) { - return false - } - } else { - for (var i = 0; i < opts.validType.length; i++) { - if (!_3df(opts.validType[i])) { - return false - } - } - } - } - box.removeClass("validatebox-invalid") - _3d1(_3db) - return true - } - $.fn.validatebox = function (_3e4, _3e5) { - if (typeof _3e4 == "string") { - return $.fn.validatebox.methods[_3e4](this, _3e5) - } - _3e4 = _3e4 || {} - return this.each(function () { - var _3e6 = $.data(this, "validatebox") - if (_3e6) { - $.extend(_3e6.options, _3e4) - } else { - init(this) - $.data(this, "validatebox", { options: $.extend({}, $.fn.validatebox.defaults, $.fn.validatebox.parseOptions(this), _3e4) }) - } - _3ce(this) - }) - } - $.fn.validatebox.methods = { - options: function (jq) { - return $.data(jq[0], "validatebox").options - }, - destroy: function (jq) { - return jq.each(function () { - _3cb(this) - }) - }, - validate: function (jq) { - return jq.each(function () { - _3da(this) - }) - }, - isValid: function (jq) { - return _3da(jq[0]) - } - } - $.fn.validatebox.parseOptions = function (_3e7) { - var t = $(_3e7) - return $.extend( - {}, - $.parser.parseOptions(_3e7, ["validType", "missingMessage", "invalidMessage", "tipPosition", { delay: "number", deltaX: "number" }]), - { required: t.attr("required") ? true : undefined } - ) - } - $.fn.validatebox.defaults = { - required: false, - validType: null, - delay: 200, - missingMessage: "This field is required.", - invalidMessage: null, - tipPosition: "right", - deltaX: 0, - tipOptions: { - showEvent: "none", - hideEvent: "none", - showDelay: 0, - hideDelay: 0, - zIndex: "", - onShow: function () { - $(this).tooltip("tip").css({ color: "#000", borderColor: "#CC9933", backgroundColor: "#FFFFCC" }) - }, - onHide: function () { - $(this).tooltip("destroy") - } - }, - rules: { - email: { - validator: function (_3e8) { - return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test( - _3e8 - ) - }, - message: "Please enter a valid email address." - }, - url: { - validator: function (_3e9) { - return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( - _3e9 - ) - }, - message: "Please enter a valid URL." - }, - length: { - validator: function (_3ea, _3eb) { - var len = $.trim(_3ea).length - return len >= _3eb[0] && len <= _3eb[1] - }, - message: "Please enter a value between {0} and {1}." - }, - remote: { - validator: function (_3ec, _3ed) { - var data = {} - data[_3ed[1]] = _3ec - var _3ee = $.ajax({ url: _3ed[0], dataType: "json", data: data, async: false, cache: false, type: "post" }).responseText - return _3ee == "true" - }, - message: "Please fix this field." - } - } - } -})(jQuery) -;(function ($) { - function _3ef(_3f0, _3f1) { - _3f1 = _3f1 || {} - var _3f2 = {} - if (_3f1.onSubmit) { - if (_3f1.onSubmit.call(_3f0, _3f2) == false) { - return - } - } - var form = $(_3f0) - if (_3f1.url) { - form.attr("action", _3f1.url) - } - var _3f3 = "easyui_frame_" + new Date().getTime() - var _3f4 = $("") - .attr("src", window.ActiveXObject ? "javascript:false" : "about:blank") - .css({ position: "absolute", top: -1000, left: -1000 }) - var t = form.attr("target"), - a = form.attr("action") - form.attr("target", _3f3) - var _3f5 = $() - try { - _3f4.appendTo("body") - _3f4.bind("load", cb) - for (var n in _3f2) { - var f = $('') - .val(_3f2[n]) - .appendTo(form) - _3f5 = _3f5.add(f) - } - form[0].submit() - } finally { - form.attr("action", a) - t ? form.attr("target", t) : form.removeAttr("target") - _3f5.remove() - } - var _3f6 = 10 - function cb() { - _3f4.unbind() - var body = $("#" + _3f3) - .contents() - .find("body") - var data = body.html() - if (data == "") { - if (--_3f6) { - setTimeout(cb, 100) - return - } - return - } - var ta = body.find(">textarea") - if (ta.length) { - data = ta.val() - } else { - var pre = body.find(">pre") - if (pre.length) { - data = pre.html() - } - } - if (_3f1.success) { - _3f1.success(data) - } - setTimeout(function () { - _3f4.unbind() - _3f4.remove() - }, 100) - } - } - function load(_3f7, data) { - if (!$.data(_3f7, "form")) { - $.data(_3f7, "form", { options: $.extend({}, $.fn.form.defaults) }) - } - var opts = $.data(_3f7, "form").options - if (typeof data == "string") { - var _3f8 = {} - if (opts.onBeforeLoad.call(_3f7, _3f8) == false) { - return - } - $.ajax({ - url: data, - data: _3f8, - dataType: "json", - success: function (data) { - _3f9(data) - }, - error: function () { - opts.onLoadError.apply(_3f7, arguments) - } - }) - } else { - _3f9(data) - } - function _3f9(data) { - var form = $(_3f7) - for (var name in data) { - var val = data[name] - var rr = _3fa(name, val) - if (!rr.length) { - var f = form.find('input[numberboxName="' + name + '"]') - if (f.length) { - f.numberbox("setValue", val) - } else { - $('input[name="' + name + '"]', form).val(val) - $('textarea[name="' + name + '"]', form).val(val) - $('select[name="' + name + '"]', form).val(val) - } - } - _3fb(name, val) - } - opts.onLoadSuccess.call(_3f7, data) - _3fe(_3f7) - } - function _3fa(name, val) { - var rr = $(_3f7).find('input[name="' + name + '"][type=radio], input[name="' + name + '"][type=checkbox]') - rr._propAttr("checked", false) - rr.each(function () { - var f = $(this) - if (f.val() == String(val) || $.inArray(f.val(), val) >= 0) { - f._propAttr("checked", true) - } - }) - return rr - } - function _3fb(name, val) { - var form = $(_3f7) - var cc = ["combobox", "combotree", "combogrid", "datetimebox", "datebox", "combo"] - var c = form.find('[comboName="' + name + '"]') - if (c.length) { - for (var i = 0; i < cc.length; i++) { - var type = cc[i] - if (c.hasClass(type + "-f")) { - if (c[type]("options").multiple) { - c[type]("setValues", val) - } else { - c[type]("setValue", val) - } - return - } - } - } - } - } - function _3fc(_3fd) { - $("input,select,textarea", _3fd).each(function () { - var t = this.type, - tag = this.tagName.toLowerCase() - if (t == "text" || t == "hidden" || t == "password" || tag == "textarea") { - this.value = "" - } else { - if (t == "file") { - var file = $(this) - file.after(file.clone().val("")) - file.remove() - } else { - if (t == "checkbox" || t == "radio") { - this.checked = false - } else { - if (tag == "select") { - this.selectedIndex = -1 - } - } - } - } - }) - if ($.fn.combo) { - $(".combo-f", _3fd).combo("clear") - } - if ($.fn.combobox) { - $(".combobox-f", _3fd).combobox("clear") - } - if ($.fn.combotree) { - $(".combotree-f", _3fd).combotree("clear") - } - if ($.fn.combogrid) { - $(".combogrid-f", _3fd).combogrid("clear") - } - _3fe(_3fd) - } - function _3ff(_400) { - _400.reset() - var t = $(_400) - if ($.fn.combo) { - t.find(".combo-f").combo("reset") - } - if ($.fn.combobox) { - t.find(".combobox-f").combobox("reset") - } - if ($.fn.combotree) { - t.find(".combotree-f").combotree("reset") - } - if ($.fn.combogrid) { - t.find(".combogrid-f").combogrid("reset") - } - if ($.fn.spinner) { - t.find(".spinner-f").spinner("reset") - } - if ($.fn.timespinner) { - t.find(".timespinner-f").timespinner("reset") - } - if ($.fn.numberbox) { - t.find(".numberbox-f").numberbox("reset") - } - if ($.fn.numberspinner) { - t.find(".numberspinner-f").numberspinner("reset") - } - _3fe(_400) - } - function _401(_402) { - var _403 = $.data(_402, "form").options - var form = $(_402) - form.unbind(".form").bind("submit.form", function () { - setTimeout(function () { - _3ef(_402, _403) - }, 0) - return false - }) - } - function _3fe(_404) { - if ($.fn.validatebox) { - var t = $(_404) - t.find(".validatebox-text:not(:disabled)").validatebox("validate") - var _405 = t.find(".validatebox-invalid") - _405.filter(":not(:disabled):first").focus() - return _405.length == 0 - } - return true - } - $.fn.form = function (_406, _407) { - if (typeof _406 == "string") { - return $.fn.form.methods[_406](this, _407) - } - _406 = _406 || {} - return this.each(function () { - if (!$.data(this, "form")) { - $.data(this, "form", { options: $.extend({}, $.fn.form.defaults, _406) }) - } - _401(this) - }) - } - $.fn.form.methods = { - submit: function (jq, _408) { - return jq.each(function () { - _3ef(this, $.extend({}, $.fn.form.defaults, _408 || {})) - }) - }, - load: function (jq, data) { - return jq.each(function () { - load(this, data) - }) - }, - clear: function (jq) { - return jq.each(function () { - _3fc(this) - }) - }, - reset: function (jq) { - return jq.each(function () { - _3ff(this) - }) - }, - validate: function (jq) { - return _3fe(jq[0]) - } - } - $.fn.form.defaults = { - url: null, - onSubmit: function (_409) { - return $(this).form("validate") - }, - success: function (data) {}, - onBeforeLoad: function (_40a) {}, - onLoadSuccess: function (data) {}, - onLoadError: function () {} - } -})(jQuery) -;(function ($) { - function init(_40b) { - $(_40b).addClass("numberbox-f") - var v = $('').insertAfter(_40b) - var name = $(_40b).attr("name") - if (name) { - v.attr("name", name) - $(_40b).removeAttr("name").attr("numberboxName", name) - } - return v - } - function _40c(_40d) { - var opts = $.data(_40d, "numberbox").options - var fn = opts.onChange - opts.onChange = function () {} - _40e(_40d, opts.parser.call(_40d, opts.value)) - opts.onChange = fn - opts.originalValue = _40f(_40d) - } - function _40f(_410) { - return $.data(_410, "numberbox").field.val() - } - function _40e(_411, _412) { - var _413 = $.data(_411, "numberbox") - var opts = _413.options - var _414 = _40f(_411) - _412 = opts.parser.call(_411, _412) - opts.value = _412 - _413.field.val(_412) - $(_411).val(opts.formatter.call(_411, _412)) - if (_414 != _412) { - opts.onChange.call(_411, _412, _414) - } - } - function _415(_416) { - var opts = $.data(_416, "numberbox").options - $(_416) - .unbind(".numberbox") - .bind("keypress.numberbox", function (e) { - return opts.filter.call(_416, e) - }) - .bind("blur.numberbox", function () { - _40e(_416, $(this).val()) - $(this).val(opts.formatter.call(_416, _40f(_416))) - }) - .bind("focus.numberbox", function () { - var vv = _40f(_416) - if (vv != opts.parser.call(_416, $(this).val())) { - $(this).val(opts.formatter.call(_416, vv)) - } - }) - } - function _417(_418) { - if ($.fn.validatebox) { - var opts = $.data(_418, "numberbox").options - $(_418).validatebox(opts) - } - } - function _419(_41a, _41b) { - var opts = $.data(_41a, "numberbox").options - if (_41b) { - opts.disabled = true - $(_41a).attr("disabled", true) - } else { - opts.disabled = false - $(_41a).removeAttr("disabled") - } - } - $.fn.numberbox = function (_41c, _41d) { - if (typeof _41c == "string") { - var _41e = $.fn.numberbox.methods[_41c] - if (_41e) { - return _41e(this, _41d) - } else { - return this.validatebox(_41c, _41d) - } - } - _41c = _41c || {} - return this.each(function () { - var _41f = $.data(this, "numberbox") - if (_41f) { - $.extend(_41f.options, _41c) - } else { - _41f = $.data(this, "numberbox", { - options: $.extend({}, $.fn.numberbox.defaults, $.fn.numberbox.parseOptions(this), _41c), - field: init(this) - }) - $(this).removeAttr("disabled") - $(this).css({ imeMode: "disabled" }) - } - _419(this, _41f.options.disabled) - _415(this) - _417(this) - _40c(this) - }) - } - $.fn.numberbox.methods = { - options: function (jq) { - return $.data(jq[0], "numberbox").options - }, - destroy: function (jq) { - return jq.each(function () { - $.data(this, "numberbox").field.remove() - $(this).validatebox("destroy") - $(this).remove() - }) - }, - disable: function (jq) { - return jq.each(function () { - _419(this, true) - }) - }, - enable: function (jq) { - return jq.each(function () { - _419(this, false) - }) - }, - fix: function (jq) { - return jq.each(function () { - _40e(this, $(this).val()) - }) - }, - setValue: function (jq, _420) { - return jq.each(function () { - _40e(this, _420) - }) - }, - getValue: function (jq) { - return _40f(jq[0]) - }, - clear: function (jq) { - return jq.each(function () { - var _421 = $.data(this, "numberbox") - _421.field.val("") - $(this).val("") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).numberbox("options") - $(this).numberbox("setValue", opts.originalValue) - }) - } - } - $.fn.numberbox.parseOptions = function (_422) { - var t = $(_422) - return $.extend( - {}, - $.fn.validatebox.parseOptions(_422), - $.parser.parseOptions(_422, ["decimalSeparator", "groupSeparator", "suffix", { min: "number", max: "number", precision: "number" }]), - { prefix: t.attr("prefix") ? t.attr("prefix") : undefined, disabled: t.attr("disabled") ? true : undefined, value: t.val() || undefined } - ) - } - $.fn.numberbox.defaults = $.extend({}, $.fn.validatebox.defaults, { - disabled: false, - value: "", - min: null, - max: null, - precision: 0, - decimalSeparator: ".", - groupSeparator: "", - prefix: "", - suffix: "", - filter: function (e) { - var opts = $(this).numberbox("options") - if (e.which == 45) { - return $(this).val().indexOf("-") == -1 ? true : false - } - var c = String.fromCharCode(e.which) - if (c == opts.decimalSeparator) { - return $(this).val().indexOf(c) == -1 ? true : false - } else { - if (c == opts.groupSeparator) { - return true - } else { - if ((e.which >= 48 && e.which <= 57 && e.ctrlKey == false && e.shiftKey == false) || e.which == 0 || e.which == 8) { - return true - } else { - if (e.ctrlKey == true && (e.which == 99 || e.which == 118)) { - return true - } else { - return false - } - } - } - } - }, - formatter: function (_423) { - if (!_423) { - return _423 - } - _423 = _423 + "" - var opts = $(this).numberbox("options") - var s1 = _423, - s2 = "" - var dpos = _423.indexOf(".") - if (dpos >= 0) { - s1 = _423.substring(0, dpos) - s2 = _423.substring(dpos + 1, _423.length) - } - if (opts.groupSeparator) { - var p = /(\d+)(\d{3})/ - while (p.test(s1)) { - s1 = s1.replace(p, "$1" + opts.groupSeparator + "$2") - } - } - if (s2) { - return opts.prefix + s1 + opts.decimalSeparator + s2 + opts.suffix - } else { - return opts.prefix + s1 + opts.suffix - } - }, - parser: function (s) { - s = s + "" - var opts = $(this).numberbox("options") - if (parseFloat(s) != s) { - if (opts.prefix) { - s = $.trim(s.replace(new RegExp("\\" + $.trim(opts.prefix), "g"), "")) - } - if (opts.suffix) { - s = $.trim(s.replace(new RegExp("\\" + $.trim(opts.suffix), "g"), "")) - } - if (opts.groupSeparator) { - s = $.trim(s.replace(new RegExp("\\" + opts.groupSeparator, "g"), "")) - } - if (opts.decimalSeparator) { - s = $.trim(s.replace(new RegExp("\\" + opts.decimalSeparator, "g"), ".")) - } - s = s.replace(/\s/g, "") - } - var val = parseFloat(s).toFixed(opts.precision) - if (isNaN(val)) { - val = "" - } else { - if (typeof opts.min == "number" && val < opts.min) { - val = opts.min.toFixed(opts.precision) - } else { - if (typeof opts.max == "number" && val > opts.max) { - val = opts.max.toFixed(opts.precision) - } - } - } - return val - }, - onChange: function (_424, _425) {} - }) -})(jQuery) -;(function ($) { - function _426(_427) { - var opts = $.data(_427, "calendar").options - var t = $(_427) - if (opts.fit == true) { - var p = t.parent() - opts.width = p.width() - opts.height = p.height() - } - var _428 = t.find(".calendar-header") - t._outerWidth(opts.width) - t._outerHeight(opts.height) - t.find(".calendar-body")._outerHeight(t.height() - _428._outerHeight()) - } - function init(_429) { - $(_429) - .addClass("calendar") - .html( - '
            ' + - '
            ' + - '
            ' + - '
            ' + - '
            ' + - '
            ' + - "Aprial 2010" + - "
            " + - "
            " + - '
            ' + - '
            ' + - '
            ' + - '' + - '' + - '' + - "
            " + - '
            ' + - "
            " + - "
            " + - "
            " - ) - $(_429) - .find(".calendar-title span") - .hover( - function () { - $(this).addClass("calendar-menu-hover") - }, - function () { - $(this).removeClass("calendar-menu-hover") - } - ) - .click(function () { - var menu = $(_429).find(".calendar-menu") - if (menu.is(":visible")) { - menu.hide() - } else { - _430(_429) - } - }) - $(".calendar-prevmonth,.calendar-nextmonth,.calendar-prevyear,.calendar-nextyear", _429).hover( - function () { - $(this).addClass("calendar-nav-hover") - }, - function () { - $(this).removeClass("calendar-nav-hover") - } - ) - $(_429) - .find(".calendar-nextmonth") - .click(function () { - _42a(_429, 1) - }) - $(_429) - .find(".calendar-prevmonth") - .click(function () { - _42a(_429, -1) - }) - $(_429) - .find(".calendar-nextyear") - .click(function () { - _42d(_429, 1) - }) - $(_429) - .find(".calendar-prevyear") - .click(function () { - _42d(_429, -1) - }) - $(_429).bind("_resize", function () { - var opts = $.data(_429, "calendar").options - if (opts.fit == true) { - _426(_429) - } - return false - }) - } - function _42a(_42b, _42c) { - var opts = $.data(_42b, "calendar").options - opts.month += _42c - if (opts.month > 12) { - opts.year++ - opts.month = 1 - } else { - if (opts.month < 1) { - opts.year-- - opts.month = 12 - } - } - show(_42b) - var menu = $(_42b).find(".calendar-menu-month-inner") - menu.find("td.calendar-selected").removeClass("calendar-selected") - menu.find("td:eq(" + (opts.month - 1) + ")").addClass("calendar-selected") - } - function _42d(_42e, _42f) { - var opts = $.data(_42e, "calendar").options - opts.year += _42f - show(_42e) - var menu = $(_42e).find(".calendar-menu-year") - menu.val(opts.year) - } - function _430(_431) { - var opts = $.data(_431, "calendar").options - $(_431).find(".calendar-menu").show() - if ($(_431).find(".calendar-menu-month-inner").is(":empty")) { - $(_431).find(".calendar-menu-month-inner").empty() - var t = $("
            ").appendTo($(_431).find(".calendar-menu-month-inner")) - var idx = 0 - for (var i = 0; i < 3; i++) { - var tr = $("").appendTo(t) - for (var j = 0; j < 4; j++) { - $('').html(opts.months[idx++]).attr("abbr", idx).appendTo(tr) - } - } - $(_431) - .find(".calendar-menu-prev,.calendar-menu-next") - .hover( - function () { - $(this).addClass("calendar-menu-hover") - }, - function () { - $(this).removeClass("calendar-menu-hover") - } - ) - $(_431) - .find(".calendar-menu-next") - .click(function () { - var y = $(_431).find(".calendar-menu-year") - if (!isNaN(y.val())) { - y.val(parseInt(y.val()) + 1) - } - }) - $(_431) - .find(".calendar-menu-prev") - .click(function () { - var y = $(_431).find(".calendar-menu-year") - if (!isNaN(y.val())) { - y.val(parseInt(y.val() - 1)) - } - }) - $(_431) - .find(".calendar-menu-year") - .keypress(function (e) { - if (e.keyCode == 13) { - _432() - } - }) - $(_431) - .find(".calendar-menu-month") - .hover( - function () { - $(this).addClass("calendar-menu-hover") - }, - function () { - $(this).removeClass("calendar-menu-hover") - } - ) - .click(function () { - var menu = $(_431).find(".calendar-menu") - menu.find(".calendar-selected").removeClass("calendar-selected") - $(this).addClass("calendar-selected") - _432() - }) - } - function _432() { - var menu = $(_431).find(".calendar-menu") - var year = menu.find(".calendar-menu-year").val() - var _433 = menu.find(".calendar-selected").attr("abbr") - if (!isNaN(year)) { - opts.year = parseInt(year) - opts.month = parseInt(_433) - show(_431) - } - menu.hide() - } - var body = $(_431).find(".calendar-body") - var sele = $(_431).find(".calendar-menu") - var _434 = sele.find(".calendar-menu-year-inner") - var _435 = sele.find(".calendar-menu-month-inner") - _434.find("input").val(opts.year).focus() - _435.find("td.calendar-selected").removeClass("calendar-selected") - _435.find("td:eq(" + (opts.month - 1) + ")").addClass("calendar-selected") - sele._outerWidth(body._outerWidth()) - sele._outerHeight(body._outerHeight()) - _435._outerHeight(sele.height() - _434._outerHeight()) - } - function _436(_437, year, _438) { - var opts = $.data(_437, "calendar").options - var _439 = [] - var _43a = new Date(year, _438, 0).getDate() - for (var i = 1; i <= _43a; i++) { - _439.push([year, _438, i]) - } - var _43b = [], - week = [] - var _43c = -1 - while (_439.length > 0) { - var date = _439.shift() - week.push(date) - var day = new Date(date[0], date[1] - 1, date[2]).getDay() - if (_43c == day) { - day = 0 - } else { - if (day == (opts.firstDay == 0 ? 7 : opts.firstDay) - 1) { - _43b.push(week) - week = [] - } - } - _43c = day - } - if (week.length) { - _43b.push(week) - } - var _43d = _43b[0] - if (_43d.length < 7) { - while (_43d.length < 7) { - var _43e = _43d[0] - var date = new Date(_43e[0], _43e[1] - 1, _43e[2] - 1) - _43d.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]) - } - } else { - var _43e = _43d[0] - var week = [] - for (var i = 1; i <= 7; i++) { - var date = new Date(_43e[0], _43e[1] - 1, _43e[2] - i) - week.unshift([date.getFullYear(), date.getMonth() + 1, date.getDate()]) - } - _43b.unshift(week) - } - var _43f = _43b[_43b.length - 1] - while (_43f.length < 7) { - var _440 = _43f[_43f.length - 1] - var date = new Date(_440[0], _440[1] - 1, _440[2] + 1) - _43f.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]) - } - if (_43b.length < 6) { - var _440 = _43f[_43f.length - 1] - var week = [] - for (var i = 1; i <= 7; i++) { - var date = new Date(_440[0], _440[1] - 1, _440[2] + i) - week.push([date.getFullYear(), date.getMonth() + 1, date.getDate()]) - } - _43b.push(week) - } - return _43b - } - function show(_441) { - var opts = $.data(_441, "calendar").options - $(_441) - .find(".calendar-title span") - .html(opts.months[opts.month - 1] + " " + opts.year) - var body = $(_441).find("div.calendar-body") - body.find(">table").remove() - var t = $('
            ').prependTo(body) - var tr = $("").appendTo(t.find("thead")) - for (var i = opts.firstDay; i < opts.weeks.length; i++) { - tr.append("" + opts.weeks[i] + "") - } - for (var i = 0; i < opts.firstDay; i++) { - tr.append("" + opts.weeks[i] + "") - } - var _442 = _436(_441, opts.year, opts.month) - for (var i = 0; i < _442.length; i++) { - var week = _442[i] - var tr = $("").appendTo(t.find("tbody")) - for (var j = 0; j < week.length; j++) { - var day = week[j] - $('') - .attr("abbr", day[0] + "," + day[1] + "," + day[2]) - .html(day[2]) - .appendTo(tr) - } - } - t.find('td[abbr^="' + opts.year + "," + opts.month + '"]').removeClass("calendar-other-month") - var now = new Date() - var _443 = now.getFullYear() + "," + (now.getMonth() + 1) + "," + now.getDate() - t.find('td[abbr="' + _443 + '"]').addClass("calendar-today") - if (opts.current) { - t.find(".calendar-selected").removeClass("calendar-selected") - var _444 = opts.current.getFullYear() + "," + (opts.current.getMonth() + 1) + "," + opts.current.getDate() - t.find('td[abbr="' + _444 + '"]').addClass("calendar-selected") - } - var _445 = 6 - opts.firstDay - var _446 = _445 + 1 - if (_445 >= 7) { - _445 -= 7 - } - if (_446 >= 7) { - _446 -= 7 - } - t.find("tr") - .find("td:eq(" + _445 + ")") - .addClass("calendar-saturday") - t.find("tr") - .find("td:eq(" + _446 + ")") - .addClass("calendar-sunday") - t.find("td") - .hover( - function () { - $(this).addClass("calendar-hover") - }, - function () { - $(this).removeClass("calendar-hover") - } - ) - .click(function () { - t.find(".calendar-selected").removeClass("calendar-selected") - $(this).addClass("calendar-selected") - var _447 = $(this).attr("abbr").split(",") - opts.current = new Date(_447[0], parseInt(_447[1]) - 1, _447[2]) - opts.onSelect.call(_441, opts.current) - }) - } - $.fn.calendar = function (_448, _449) { - if (typeof _448 == "string") { - return $.fn.calendar.methods[_448](this, _449) - } - _448 = _448 || {} - return this.each(function () { - var _44a = $.data(this, "calendar") - if (_44a) { - $.extend(_44a.options, _448) - } else { - _44a = $.data(this, "calendar", { options: $.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), _448) }) - init(this) - } - if (_44a.options.border == false) { - $(this).addClass("calendar-noborder") - } - _426(this) - show(this) - $(this).find("div.calendar-menu").hide() - }) - } - $.fn.calendar.methods = { - options: function (jq) { - return $.data(jq[0], "calendar").options - }, - resize: function (jq) { - return jq.each(function () { - _426(this) - }) - }, - moveTo: function (jq, date) { - return jq.each(function () { - $(this).calendar({ year: date.getFullYear(), month: date.getMonth() + 1, current: date }) - }) - } - } - $.fn.calendar.parseOptions = function (_44b) { - var t = $(_44b) - return $.extend({}, $.parser.parseOptions(_44b, ["width", "height", { firstDay: "number", fit: "boolean", border: "boolean" }])) - } - $.fn.calendar.defaults = { - width: 180, - height: 180, - fit: false, - border: true, - firstDay: 0, - weeks: ["S", "M", "T", "W", "T", "F", "S"], - months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - year: new Date().getFullYear(), - month: new Date().getMonth() + 1, - current: new Date(), - onSelect: function (date) {} - } -})(jQuery) -;(function ($) { - function init(_44c) { - var _44d = $( - '' + - '' + - '' + - '' + - "" + - "" - ).insertAfter(_44c) - $(_44c).addClass("spinner-text spinner-f").prependTo(_44d) - return _44d - } - function _44e(_44f, _450) { - var opts = $.data(_44f, "spinner").options - var _451 = $.data(_44f, "spinner").spinner - if (_450) { - opts.width = _450 - } - var _452 = $('
            ').insertBefore(_451) - _451.appendTo("body") - if (isNaN(opts.width)) { - opts.width = $(_44f).outerWidth() - } - var _453 = _451.find(".spinner-arrow") - _451._outerWidth(opts.width)._outerHeight(opts.height) - $(_44f)._outerWidth(_451.width() - _453.outerWidth()) - $(_44f).css({ height: _451.height() + "px", lineHeight: _451.height() + "px" }) - _453._outerHeight(_451.height()) - _453.find("span")._outerHeight(_453.height() / 2) - _451.insertAfter(_452) - _452.remove() - } - function _454(_455) { - var opts = $.data(_455, "spinner").options - var _456 = $.data(_455, "spinner").spinner - _456.find(".spinner-arrow-up,.spinner-arrow-down").unbind(".spinner") - if (!opts.disabled) { - _456.find(".spinner-arrow-up") - .bind("mouseenter.spinner", function () { - $(this).addClass("spinner-arrow-hover") - }) - .bind("mouseleave.spinner", function () { - $(this).removeClass("spinner-arrow-hover") - }) - .bind("click.spinner", function () { - opts.spin.call(_455, false) - opts.onSpinUp.call(_455) - $(_455).validatebox("validate") - }) - _456.find(".spinner-arrow-down") - .bind("mouseenter.spinner", function () { - $(this).addClass("spinner-arrow-hover") - }) - .bind("mouseleave.spinner", function () { - $(this).removeClass("spinner-arrow-hover") - }) - .bind("click.spinner", function () { - opts.spin.call(_455, true) - opts.onSpinDown.call(_455) - $(_455).validatebox("validate") - }) - } - } - function _457(_458, _459) { - var opts = $.data(_458, "spinner").options - if (_459) { - opts.disabled = true - $(_458).attr("disabled", true) - } else { - opts.disabled = false - $(_458).removeAttr("disabled") - } - } - $.fn.spinner = function (_45a, _45b) { - if (typeof _45a == "string") { - var _45c = $.fn.spinner.methods[_45a] - if (_45c) { - return _45c(this, _45b) - } else { - return this.validatebox(_45a, _45b) - } - } - _45a = _45a || {} - return this.each(function () { - var _45d = $.data(this, "spinner") - if (_45d) { - $.extend(_45d.options, _45a) - } else { - _45d = $.data(this, "spinner", { - options: $.extend({}, $.fn.spinner.defaults, $.fn.spinner.parseOptions(this), _45a), - spinner: init(this) - }) - $(this).removeAttr("disabled") - } - _45d.options.originalValue = _45d.options.value - $(this).val(_45d.options.value) - $(this).attr("readonly", !_45d.options.editable) - _457(this, _45d.options.disabled) - _44e(this) - $(this).validatebox(_45d.options) - _454(this) - }) - } - $.fn.spinner.methods = { - options: function (jq) { - var opts = $.data(jq[0], "spinner").options - return $.extend(opts, { value: jq.val() }) - }, - destroy: function (jq) { - return jq.each(function () { - var _45e = $.data(this, "spinner").spinner - $(this).validatebox("destroy") - _45e.remove() - }) - }, - resize: function (jq, _45f) { - return jq.each(function () { - _44e(this, _45f) - }) - }, - enable: function (jq) { - return jq.each(function () { - _457(this, false) - _454(this) - }) - }, - disable: function (jq) { - return jq.each(function () { - _457(this, true) - _454(this) - }) - }, - getValue: function (jq) { - return jq.val() - }, - setValue: function (jq, _460) { - return jq.each(function () { - var opts = $.data(this, "spinner").options - opts.value = _460 - $(this).val(_460) - }) - }, - clear: function (jq) { - return jq.each(function () { - var opts = $.data(this, "spinner").options - opts.value = "" - $(this).val("") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).spinner("options") - $(this).spinner("setValue", opts.originalValue) - }) - } - } - $.fn.spinner.parseOptions = function (_461) { - var t = $(_461) - return $.extend( - {}, - $.fn.validatebox.parseOptions(_461), - $.parser.parseOptions(_461, ["width", "height", "min", "max", { increment: "number", editable: "boolean" }]), - { value: t.val() || undefined, disabled: t.attr("disabled") ? true : undefined } - ) - } - $.fn.spinner.defaults = $.extend({}, $.fn.validatebox.defaults, { - width: "auto", - height: 22, - deltaX: 19, - value: "", - min: null, - max: null, - increment: 1, - editable: true, - disabled: false, - spin: function (down) {}, - onSpinUp: function () {}, - onSpinDown: function () {} - }) -})(jQuery) -;(function ($) { - function _462(_463) { - $(_463).addClass("numberspinner-f") - var opts = $.data(_463, "numberspinner").options - $(_463).spinner(opts).numberbox(opts) - } - function _464(_465, down) { - var opts = $.data(_465, "numberspinner").options - var v = parseFloat($(_465).numberbox("getValue") || opts.value) || 0 - if (down == true) { - v -= opts.increment - } else { - v += opts.increment - } - $(_465).numberbox("setValue", v) - } - $.fn.numberspinner = function (_466, _467) { - if (typeof _466 == "string") { - var _468 = $.fn.numberspinner.methods[_466] - if (_468) { - return _468(this, _467) - } else { - return this.spinner(_466, _467) - } - } - _466 = _466 || {} - return this.each(function () { - var _469 = $.data(this, "numberspinner") - if (_469) { - $.extend(_469.options, _466) - } else { - $.data(this, "numberspinner", { options: $.extend({}, $.fn.numberspinner.defaults, $.fn.numberspinner.parseOptions(this), _466) }) - } - _462(this) - }) - } - $.fn.numberspinner.methods = { - options: function (jq) { - var opts = $.data(jq[0], "numberspinner").options - return $.extend(opts, { value: jq.numberbox("getValue"), originalValue: jq.numberbox("options").originalValue }) - }, - setValue: function (jq, _46a) { - return jq.each(function () { - $(this).numberbox("setValue", _46a) - }) - }, - getValue: function (jq) { - return jq.numberbox("getValue") - }, - clear: function (jq) { - return jq.each(function () { - $(this).spinner("clear") - $(this).numberbox("clear") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).numberspinner("options") - $(this).numberspinner("setValue", opts.originalValue) - }) - } - } - $.fn.numberspinner.parseOptions = function (_46b) { - return $.extend({}, $.fn.spinner.parseOptions(_46b), $.fn.numberbox.parseOptions(_46b), {}) - } - $.fn.numberspinner.defaults = $.extend({}, $.fn.spinner.defaults, $.fn.numberbox.defaults, { - spin: function (down) { - _464(this, down) - } - }) -})(jQuery) -;(function ($) { - function _46c(_46d) { - var opts = $.data(_46d, "timespinner").options - $(_46d).addClass("timespinner-f") - $(_46d).spinner(opts) - $(_46d).unbind(".timespinner") - $(_46d) - .bind("click.timespinner", function () { - var _46e = 0 - if (this.selectionStart != null) { - _46e = this.selectionStart - } else { - if (this.createTextRange) { - var _46f = _46d.createTextRange() - var s = document.selection.createRange() - s.setEndPoint("StartToStart", _46f) - _46e = s.text.length - } - } - if (_46e >= 0 && _46e <= 2) { - opts.highlight = 0 - } else { - if (_46e >= 3 && _46e <= 5) { - opts.highlight = 1 - } else { - if (_46e >= 6 && _46e <= 8) { - opts.highlight = 2 - } - } - } - _471(_46d) - }) - .bind("blur.timespinner", function () { - _470(_46d) - }) - } - function _471(_472) { - var opts = $.data(_472, "timespinner").options - var _473 = 0, - end = 0 - if (opts.highlight == 0) { - _473 = 0 - end = 2 - } else { - if (opts.highlight == 1) { - _473 = 3 - end = 5 - } else { - if (opts.highlight == 2) { - _473 = 6 - end = 8 - } - } - } - if (_472.selectionStart != null) { - _472.setSelectionRange(_473, end) - } else { - if (_472.createTextRange) { - var _474 = _472.createTextRange() - _474.collapse() - _474.moveEnd("character", end) - _474.moveStart("character", _473) - _474.select() - } - } - $(_472).focus() - } - function _475(_476, _477) { - var opts = $.data(_476, "timespinner").options - if (!_477) { - return null - } - var vv = _477.split(opts.separator) - for (var i = 0; i < vv.length; i++) { - if (isNaN(vv[i])) { - return null - } - } - while (vv.length < 3) { - vv.push(0) - } - return new Date(1900, 0, 0, vv[0], vv[1], vv[2]) - } - function _470(_478) { - var opts = $.data(_478, "timespinner").options - var _479 = $(_478).val() - var time = _475(_478, _479) - if (!time) { - time = _475(_478, opts.value) - } - if (!time) { - opts.value = "" - $(_478).val("") - return - } - var _47a = _475(_478, opts.min) - var _47b = _475(_478, opts.max) - if (_47a && _47a > time) { - time = _47a - } - if (_47b && _47b < time) { - time = _47b - } - var tt = [_47c(time.getHours()), _47c(time.getMinutes())] - if (opts.showSeconds) { - tt.push(_47c(time.getSeconds())) - } - var val = tt.join(opts.separator) - opts.value = val - $(_478).val(val) - function _47c(_47d) { - return (_47d < 10 ? "0" : "") + _47d - } - } - function _47e(_47f, down) { - var opts = $.data(_47f, "timespinner").options - var val = $(_47f).val() - if (val == "") { - val = [0, 0, 0].join(opts.separator) - } - var vv = val.split(opts.separator) - for (var i = 0; i < vv.length; i++) { - vv[i] = parseInt(vv[i], 10) - } - if (down == true) { - vv[opts.highlight] -= opts.increment - } else { - vv[opts.highlight] += opts.increment - } - $(_47f).val(vv.join(opts.separator)) - _470(_47f) - _471(_47f) - } - $.fn.timespinner = function (_480, _481) { - if (typeof _480 == "string") { - var _482 = $.fn.timespinner.methods[_480] - if (_482) { - return _482(this, _481) - } else { - return this.spinner(_480, _481) - } - } - _480 = _480 || {} - return this.each(function () { - var _483 = $.data(this, "timespinner") - if (_483) { - $.extend(_483.options, _480) - } else { - $.data(this, "timespinner", { options: $.extend({}, $.fn.timespinner.defaults, $.fn.timespinner.parseOptions(this), _480) }) - _46c(this) - } - }) - } - $.fn.timespinner.methods = { - options: function (jq) { - var opts = $.data(jq[0], "timespinner").options - return $.extend(opts, { value: jq.val(), originalValue: jq.spinner("options").originalValue }) - }, - setValue: function (jq, _484) { - return jq.each(function () { - $(this).val(_484) - _470(this) - }) - }, - getHours: function (jq) { - var opts = $.data(jq[0], "timespinner").options - var vv = jq.val().split(opts.separator) - return parseInt(vv[0], 10) - }, - getMinutes: function (jq) { - var opts = $.data(jq[0], "timespinner").options - var vv = jq.val().split(opts.separator) - return parseInt(vv[1], 10) - }, - getSeconds: function (jq) { - var opts = $.data(jq[0], "timespinner").options - var vv = jq.val().split(opts.separator) - return parseInt(vv[2], 10) || 0 - } - } - $.fn.timespinner.parseOptions = function (_485) { - return $.extend( - {}, - $.fn.spinner.parseOptions(_485), - $.parser.parseOptions(_485, ["separator", { showSeconds: "boolean", highlight: "number" }]) - ) - } - $.fn.timespinner.defaults = $.extend({}, $.fn.spinner.defaults, { - separator: ":", - showSeconds: false, - highlight: 0, - spin: function (down) { - _47e(this, down) - } - }) -})(jQuery) -;(function ($) { - var _486 = 0 - function _487(a, o) { - for (var i = 0, len = a.length; i < len; i++) { - if (a[i] == o) { - return i - } - } - return -1 - } - function _488(a, o, id) { - if (typeof o == "string") { - for (var i = 0, len = a.length; i < len; i++) { - if (a[i][o] == id) { - a.splice(i, 1) - return - } - } - } else { - var _489 = _487(a, o) - if (_489 != -1) { - a.splice(_489, 1) - } - } - } - function _48a(a, o, r) { - for (var i = 0, len = a.length; i < len; i++) { - if (a[i][o] == r[o]) { - return - } - } - a.push(r) - } - function _48b(_48c) { - var cc = _48c || $("head") - var _48d = $.data(cc[0], "ss") - if (!_48d) { - _48d = $.data(cc[0], "ss", { cache: {}, dirty: [] }) - } - return { - add: function (_48e) { - var ss = ['") - $(ss.join("\n")).appendTo(cc) - setTimeout(function () { - cc.children("style:not(:last)").remove() - }, 0) - }, - getRule: function (_490) { - var _491 = cc.children("style:last")[0] - var _492 = _491.styleSheet ? _491.styleSheet : _491.sheet || document.styleSheets[document.styleSheets.length - 1] - var _493 = _492.cssRules || _492.rules - return _493[_490] - }, - set: function (_494, _495) { - var item = _48d.cache[_494] - if (item) { - item.width = _495 - var rule = this.getRule(item.index) - if (rule) { - rule.style["width"] = _495 - } - } - }, - remove: function (_496) { - var tmp = [] - for (var s in _48d.cache) { - if (s.indexOf(_496) == -1) { - tmp.push([s, _48d.cache[s].width]) - } - } - _48d.cache = {} - this.add(tmp) - }, - dirty: function (_497) { - if (_497) { - _48d.dirty.push(_497) - } - }, - clean: function () { - for (var i = 0; i < _48d.dirty.length; i++) { - this.remove(_48d.dirty[i]) - } - _48d.dirty = [] - } - } - } - function _498(_499, _49a) { - var opts = $.data(_499, "datagrid").options - var _49b = $.data(_499, "datagrid").panel - if (_49a) { - if (_49a.width) { - opts.width = _49a.width - } - if (_49a.height) { - opts.height = _49a.height - } - } - if (opts.fit == true) { - var p = _49b.panel("panel").parent() - opts.width = p.width() - opts.height = p.height() - } - _49b.panel("resize", { width: opts.width, height: opts.height }) - } - function _49c(_49d) { - var opts = $.data(_49d, "datagrid").options - var dc = $.data(_49d, "datagrid").dc - var wrap = $.data(_49d, "datagrid").panel - var _49e = wrap.width() - var _49f = wrap.height() - var view = dc.view - var _4a0 = dc.view1 - var _4a1 = dc.view2 - var _4a2 = _4a0.children("div.datagrid-header") - var _4a3 = _4a1.children("div.datagrid-header") - var _4a4 = _4a2.find("table") - var _4a5 = _4a3.find("table") - view.width(_49e) - var _4a6 = _4a2.children("div.datagrid-header-inner").show() - _4a0.width(_4a6.find("table").width()) - if (!opts.showHeader) { - _4a6.hide() - } - _4a1.width(_49e - _4a0._outerWidth()) - _4a0.children("div.datagrid-header,div.datagrid-body,div.datagrid-footer").width(_4a0.width()) - _4a1.children("div.datagrid-header,div.datagrid-body,div.datagrid-footer").width(_4a1.width()) - var hh - _4a2.css("height", "") - _4a3.css("height", "") - _4a4.css("height", "") - _4a5.css("height", "") - hh = Math.max(_4a4.height(), _4a5.height()) - _4a4.height(hh) - _4a5.height(hh) - _4a2.add(_4a3)._outerHeight(hh) - if (opts.height != "auto") { - var _4a7 = - _49f - - _4a1.children("div.datagrid-header")._outerHeight() - - _4a1.children("div.datagrid-footer")._outerHeight() - - wrap.children("div.datagrid-toolbar")._outerHeight() - wrap.children("div.datagrid-pager").each(function () { - _4a7 -= $(this)._outerHeight() - }) - dc.body1.add(dc.body2).children("table.datagrid-btable-frozen").css({ position: "absolute", top: dc.header2._outerHeight() }) - var _4a8 = dc.body2.children("table.datagrid-btable-frozen")._outerHeight() - _4a0.add(_4a1) - .children("div.datagrid-body") - .css({ marginTop: _4a8, height: _4a7 - _4a8 }) - } - view.height(_4a1.height()) - } - function _4a9(_4aa, _4ab, _4ac) { - var rows = $.data(_4aa, "datagrid").data.rows - var opts = $.data(_4aa, "datagrid").options - var dc = $.data(_4aa, "datagrid").dc - if (!dc.body1.is(":empty") && (!opts.nowrap || opts.autoRowHeight || _4ac)) { - if (_4ab != undefined) { - var tr1 = opts.finder.getTr(_4aa, _4ab, "body", 1) - var tr2 = opts.finder.getTr(_4aa, _4ab, "body", 2) - _4ad(tr1, tr2) - } else { - var tr1 = opts.finder.getTr(_4aa, 0, "allbody", 1) - var tr2 = opts.finder.getTr(_4aa, 0, "allbody", 2) - _4ad(tr1, tr2) - if (opts.showFooter) { - var tr1 = opts.finder.getTr(_4aa, 0, "allfooter", 1) - var tr2 = opts.finder.getTr(_4aa, 0, "allfooter", 2) - _4ad(tr1, tr2) - } - } - } - _49c(_4aa) - if (opts.height == "auto") { - var _4ae = dc.body1.parent() - var _4af = dc.body2 - var _4b0 = _4b1(_4af) - var _4b2 = _4b0.height - if (_4b0.width > _4af.width()) { - _4b2 += 18 - } - _4ae.height(_4b2) - _4af.height(_4b2) - dc.view.height(dc.view2.height()) - } - dc.body2.triggerHandler("scroll") - function _4ad(trs1, trs2) { - for (var i = 0; i < trs2.length; i++) { - var tr1 = $(trs1[i]) - var tr2 = $(trs2[i]) - tr1.css("height", "") - tr2.css("height", "") - var _4b3 = Math.max(tr1.height(), tr2.height()) - tr1.css("height", _4b3) - tr2.css("height", _4b3) - } - } - function _4b1(cc) { - var _4b4 = 0 - var _4b5 = 0 - $(cc) - .children() - .each(function () { - var c = $(this) - if (c.is(":visible")) { - _4b5 += c._outerHeight() - if (_4b4 < c._outerWidth()) { - _4b4 = c._outerWidth() - } - } - }) - return { width: _4b4, height: _4b5 } - } - } - function _4b6(_4b7, _4b8) { - var _4b9 = $.data(_4b7, "datagrid") - var opts = _4b9.options - var dc = _4b9.dc - if (!dc.body2.children("table.datagrid-btable-frozen").length) { - dc.body1.add(dc.body2).prepend('
            ') - } - _4ba(true) - _4ba(false) - _49c(_4b7) - function _4ba(_4bb) { - var _4bc = _4bb ? 1 : 2 - var tr = opts.finder.getTr(_4b7, _4b8, "body", _4bc) - ;(_4bb ? dc.body1 : dc.body2).children("table.datagrid-btable-frozen").append(tr) - } - } - function _4bd(_4be, _4bf) { - function _4c0() { - var _4c1 = [] - var _4c2 = [] - $(_4be) - .children("thead") - .each(function () { - var opt = $.parser.parseOptions(this, [{ frozen: "boolean" }]) - $(this) - .find("tr") - .each(function () { - var cols = [] - $(this) - .find("th") - .each(function () { - var th = $(this) - var col = $.extend( - {}, - $.parser.parseOptions(this, [ - "field", - "align", - "halign", - "order", - { sortable: "boolean", checkbox: "boolean", resizable: "boolean", fixed: "boolean" }, - { rowspan: "number", colspan: "number", width: "number" } - ]), - { - title: th.html() || undefined, - hidden: th.attr("hidden") ? true : undefined, - formatter: th.attr("formatter") ? eval(th.attr("formatter")) : undefined, - styler: th.attr("styler") ? eval(th.attr("styler")) : undefined, - sorter: th.attr("sorter") ? eval(th.attr("sorter")) : undefined - } - ) - if (th.attr("editor")) { - var s = $.trim(th.attr("editor")) - if (s.substr(0, 1) == "{") { - col.editor = eval("(" + s + ")") - } else { - col.editor = s - } - } - cols.push(col) - }) - opt.frozen ? _4c1.push(cols) : _4c2.push(cols) - }) - }) - return [_4c1, _4c2] - } - var _4c3 = $( - '
            ' + - '
            ' + - '
            ' + - '
            ' + - '
            ' + - "
            " + - '
            ' + - '
            ' + - "
            " + - '" + - "
            " + - '
            ' + - '
            ' + - '
            ' + - "
            " + - '
            ' + - '" + - "
            " + - "
            " + - "
            " - ).insertAfter(_4be) - _4c3.panel({ doSize: false }) - _4c3.panel("panel") - .addClass("datagrid") - .bind("_resize", function (e, _4c4) { - var opts = $.data(_4be, "datagrid").options - if (opts.fit == true || _4c4) { - _498(_4be) - setTimeout(function () { - if ($.data(_4be, "datagrid")) { - _4c5(_4be) - } - }, 0) - } - return false - }) - $(_4be).hide().appendTo(_4c3.children("div.datagrid-view")) - var cc = _4c0() - var view = _4c3.children("div.datagrid-view") - var _4c6 = view.children("div.datagrid-view1") - var _4c7 = view.children("div.datagrid-view2") - var _4c8 = _4c3.closest("div.datagrid-view") - if (!_4c8.length) { - _4c8 = view - } - var ss = _48b(_4c8) - return { - panel: _4c3, - frozenColumns: cc[0], - columns: cc[1], - dc: { - view: view, - view1: _4c6, - view2: _4c7, - header1: _4c6.children("div.datagrid-header").children("div.datagrid-header-inner"), - header2: _4c7.children("div.datagrid-header").children("div.datagrid-header-inner"), - body1: _4c6.children("div.datagrid-body").children("div.datagrid-body-inner"), - body2: _4c7.children("div.datagrid-body"), - footer1: _4c6.children("div.datagrid-footer").children("div.datagrid-footer-inner"), - footer2: _4c7.children("div.datagrid-footer").children("div.datagrid-footer-inner") - }, - ss: ss - } - } - function _4c9(_4ca) { - var _4cb = $.data(_4ca, "datagrid") - var opts = _4cb.options - var dc = _4cb.dc - var _4cc = _4cb.panel - _4cc.panel( - $.extend({}, opts, { - id: null, - doSize: false, - onResize: function (_4cd, _4ce) { - setTimeout(function () { - if ($.data(_4ca, "datagrid")) { - _49c(_4ca) - _4ef(_4ca) - opts.onResize.call(_4cc, _4cd, _4ce) - } - }, 0) - }, - onExpand: function () { - _4a9(_4ca) - opts.onExpand.call(_4cc) - } - }) - ) - _4cb.rowIdPrefix = "datagrid-row-r" + ++_486 - _4cb.cellClassPrefix = "datagrid-cell-c" + _486 - _4cf(dc.header1, opts.frozenColumns, true) - _4cf(dc.header2, opts.columns, false) - _4d0() - dc.header1.add(dc.header2).css("display", opts.showHeader ? "block" : "none") - dc.footer1.add(dc.footer2).css("display", opts.showFooter ? "block" : "none") - if (opts.toolbar) { - if (typeof opts.toolbar == "string") { - $(opts.toolbar).addClass("datagrid-toolbar").prependTo(_4cc) - $(opts.toolbar).show() - } else { - $("div.datagrid-toolbar", _4cc).remove() - var tb = $('
            ').prependTo(_4cc) - var tr = tb.find("tr") - for (var i = 0; i < opts.toolbar.length; i++) { - var btn = opts.toolbar[i] - if (btn == "-") { - $('
            ').appendTo(tr) - } else { - var td = $("").appendTo(tr) - var tool = $('').appendTo(td) - tool[0].onclick = eval(btn.handler || function () {}) - tool.linkbutton($.extend({}, btn, { plain: true })) - } - } - } - } else { - $("div.datagrid-toolbar", _4cc).remove() - } - $("div.datagrid-pager", _4cc).remove() - if (opts.pagination) { - var _4d1 = $('
            ') - if (opts.pagePosition == "bottom") { - _4d1.appendTo(_4cc) - } else { - if (opts.pagePosition == "top") { - _4d1.addClass("datagrid-pager-top").prependTo(_4cc) - } else { - var ptop = $('
            ').prependTo(_4cc) - _4d1.appendTo(_4cc) - _4d1 = _4d1.add(ptop) - } - } - _4d1.pagination({ - total: 0, - pageNumber: opts.pageNumber, - pageSize: opts.pageSize, - pageList: opts.pageList, - onSelectPage: function (_4d2, _4d3) { - opts.pageNumber = _4d2 - opts.pageSize = _4d3 - _4d1.pagination("refresh", { pageNumber: _4d2, pageSize: _4d3 }) - _5b0(_4ca) - } - }) - opts.pageSize = _4d1.pagination("options").pageSize - } - function _4cf(_4d4, _4d5, _4d6) { - if (!_4d5) { - return - } - $(_4d4).show() - $(_4d4).empty() - var t = $('
            ').appendTo(_4d4) - for (var i = 0; i < _4d5.length; i++) { - var tr = $('').appendTo($("tbody", t)) - var cols = _4d5[i] - for (var j = 0; j < cols.length; j++) { - var col = cols[j] - var attr = "" - if (col.rowspan) { - attr += 'rowspan="' + col.rowspan + '" ' - } - if (col.colspan) { - attr += 'colspan="' + col.colspan + '" ' - } - var td = $("").appendTo(tr) - if (col.checkbox) { - td.attr("field", col.field) - $('
            ').html('').appendTo(td) - } else { - if (col.field) { - td.attr("field", col.field) - td.append('
            ') - $("span", td).html(col.title) - $("span.datagrid-sort-icon", td).html(" ") - var cell = td.find("div.datagrid-cell") - if (opts.sortName == col.field) { - cell.addClass("datagrid-sort-" + opts.sortOrder) - } - if (col.resizable == false) { - cell.attr("resizable", "false") - } - if (col.width) { - cell._outerWidth(col.width) - col.boxWidth = parseInt(cell[0].style.width) - } else { - col.auto = true - } - cell.css("text-align", col.halign || col.align || "") - col.cellClass = _4cb.cellClassPrefix + "-" + col.field.replace(/[\.|\s]/g, "-") - } else { - $('
            ').html(col.title).appendTo(td) - } - } - if (col.hidden) { - td.hide() - } - } - } - if (_4d6 && opts.rownumbers) { - var td = $('
            ') - if ($("tr", t).length == 0) { - td.wrap('').parent().appendTo($("tbody", t)) - } else { - td.prependTo($("tr:first", t)) - } - } - } - function _4d0() { - var _4d7 = [] - var _4d8 = _4d9(_4ca, true).concat(_4d9(_4ca)) - for (var i = 0; i < _4d8.length; i++) { - var col = _4da(_4ca, _4d8[i]) - if (col && !col.checkbox) { - _4d7.push(["." + col.cellClass, col.boxWidth ? col.boxWidth + "px" : "auto"]) - } - } - _4cb.ss.add(_4d7) - _4cb.ss.dirty(_4cb.cellSelectorPrefix) - _4cb.cellSelectorPrefix = "." + _4cb.cellClassPrefix - } - } - function _4db(_4dc) { - var _4dd = $.data(_4dc, "datagrid") - var _4de = _4dd.panel - var opts = _4dd.options - var dc = _4dd.dc - var _4df = dc.header1.add(dc.header2) - _4df.find("input[type=checkbox]") - .unbind(".datagrid") - .bind("click.datagrid", function (e) { - if (opts.singleSelect && opts.selectOnCheck) { - return false - } - if ($(this).is(":checked")) { - _54b(_4dc) - } else { - _551(_4dc) - } - e.stopPropagation() - }) - var _4e0 = _4df.find("div.datagrid-cell") - _4e0.closest("td") - .unbind(".datagrid") - .bind("mouseenter.datagrid", function () { - if (_4dd.resizing) { - return - } - $(this).addClass("datagrid-header-over") - }) - .bind("mouseleave.datagrid", function () { - $(this).removeClass("datagrid-header-over") - }) - .bind("contextmenu.datagrid", function (e) { - var _4e1 = $(this).attr("field") - opts.onHeaderContextMenu.call(_4dc, e, _4e1) - }) - _4e0.unbind(".datagrid") - .bind("click.datagrid", function (e) { - var p1 = $(this).offset().left + 5 - var p2 = $(this).offset().left + $(this)._outerWidth() - 5 - if (e.pageX < p2 && e.pageX > p1) { - var _4e2 = $(this).parent().attr("field") - var col = _4da(_4dc, _4e2) - if (!col.sortable || _4dd.resizing) { - return - } - opts.sortName = _4e2 - opts.sortOrder = col.order || "asc" - var cls = "datagrid-sort-" + opts.sortOrder - if ($(this).hasClass("datagrid-sort-asc")) { - cls = "datagrid-sort-desc" - opts.sortOrder = "desc" - } else { - if ($(this).hasClass("datagrid-sort-desc")) { - cls = "datagrid-sort-asc" - opts.sortOrder = "asc" - } - } - _4e0.removeClass("datagrid-sort-asc datagrid-sort-desc") - $(this).addClass(cls) - if (opts.remoteSort) { - _5b0(_4dc) - } else { - var data = $.data(_4dc, "datagrid").data - _51b(_4dc, data) - } - opts.onSortColumn.call(_4dc, opts.sortName, opts.sortOrder) - } - }) - .bind("dblclick.datagrid", function (e) { - var p1 = $(this).offset().left + 5 - var p2 = $(this).offset().left + $(this)._outerWidth() - 5 - var cond = opts.resizeHandle == "right" ? e.pageX > p2 : opts.resizeHandle == "left" ? e.pageX < p1 : e.pageX < p1 || e.pageX > p2 - if (cond) { - var _4e3 = $(this).parent().attr("field") - var col = _4da(_4dc, _4e3) - if (col.resizable == false) { - return - } - $(_4dc).datagrid("autoSizeColumn", _4e3) - col.auto = false - } - }) - var _4e4 = opts.resizeHandle == "right" ? "e" : opts.resizeHandle == "left" ? "w" : "e,w" - _4e0.each(function () { - $(this).resizable({ - handles: _4e4, - disabled: $(this).attr("resizable") ? $(this).attr("resizable") == "false" : false, - minWidth: 25, - onStartResize: function (e) { - _4dd.resizing = true - _4df.css("cursor", $("body").css("cursor")) - if (!_4dd.proxy) { - _4dd.proxy = $('
            ').appendTo(dc.view) - } - _4dd.proxy.css({ left: e.pageX - $(_4de).offset().left - 1, display: "none" }) - setTimeout(function () { - if (_4dd.proxy) { - _4dd.proxy.show() - } - }, 500) - }, - onResize: function (e) { - _4dd.proxy.css({ left: e.pageX - $(_4de).offset().left - 1, display: "block" }) - return false - }, - onStopResize: function (e) { - _4df.css("cursor", "") - $(this).css("height", "") - var _4e5 = $(this).parent().attr("field") - var col = _4da(_4dc, _4e5) - col.width = $(this)._outerWidth() - col.boxWidth = parseInt(this.style.width) - col.auto = undefined - _4c5(_4dc, _4e5) - _4dd.proxy.remove() - _4dd.proxy = null - if ($(this).parents("div:first.datagrid-header").parent().hasClass("datagrid-view1")) { - _49c(_4dc) - } - _4ef(_4dc) - opts.onResizeColumn.call(_4dc, _4e5, col.width) - setTimeout(function () { - _4dd.resizing = false - }, 0) - } - }) - }) - dc.body1 - .add(dc.body2) - .unbind() - .bind("mouseover", function (e) { - if (_4dd.resizing) { - return - } - var tr = $(e.target).closest("tr.datagrid-row") - if (!_4e6(tr)) { - return - } - var _4e7 = _4e8(tr) - _533(_4dc, _4e7) - e.stopPropagation() - }) - .bind("mouseout", function (e) { - var tr = $(e.target).closest("tr.datagrid-row") - if (!_4e6(tr)) { - return - } - var _4e9 = _4e8(tr) - opts.finder.getTr(_4dc, _4e9).removeClass("datagrid-row-over") - e.stopPropagation() - }) - .bind("click", function (e) { - var tt = $(e.target) - var tr = tt.closest("tr.datagrid-row") - if (!_4e6(tr)) { - return - } - var _4ea = _4e8(tr) - if (tt.parent().hasClass("datagrid-cell-check")) { - if (opts.singleSelect && opts.selectOnCheck) { - if (!opts.checkOnSelect) { - _551(_4dc, true) - } - _53e(_4dc, _4ea) - } else { - if (tt.is(":checked")) { - _53e(_4dc, _4ea) - } else { - _545(_4dc, _4ea) - } - } - } else { - var row = opts.finder.getRow(_4dc, _4ea) - var td = tt.closest("td[field]", tr) - if (td.length) { - var _4eb = td.attr("field") - opts.onClickCell.call(_4dc, _4ea, _4eb, row[_4eb]) - } - if (opts.singleSelect == true) { - _537(_4dc, _4ea) - } else { - if (tr.hasClass("datagrid-row-selected")) { - _53f(_4dc, _4ea) - } else { - _537(_4dc, _4ea) - } - } - opts.onClickRow.call(_4dc, _4ea, row) - } - e.stopPropagation() - }) - .bind("dblclick", function (e) { - var tt = $(e.target) - var tr = tt.closest("tr.datagrid-row") - if (!_4e6(tr)) { - return - } - var _4ec = _4e8(tr) - var row = opts.finder.getRow(_4dc, _4ec) - var td = tt.closest("td[field]", tr) - if (td.length) { - var _4ed = td.attr("field") - opts.onDblClickCell.call(_4dc, _4ec, _4ed, row[_4ed]) - } - opts.onDblClickRow.call(_4dc, _4ec, row) - e.stopPropagation() - }) - .bind("contextmenu", function (e) { - var tr = $(e.target).closest("tr.datagrid-row") - if (!_4e6(tr)) { - return - } - var _4ee = _4e8(tr) - var row = opts.finder.getRow(_4dc, _4ee) - opts.onRowContextMenu.call(_4dc, e, _4ee, row) - e.stopPropagation() - }) - dc.body2.bind("scroll", function () { - var b1 = dc.view1.children("div.datagrid-body") - b1.scrollTop($(this).scrollTop()) - var c1 = dc.body1.children(":first") - var c2 = dc.body2.children(":first") - if (c1.length && c2.length) { - var top1 = c1.offset().top - var top2 = c2.offset().top - if (top1 != top2) { - b1.scrollTop(b1.scrollTop() + top1 - top2) - } - } - dc.view2.children("div.datagrid-header,div.datagrid-footer")._scrollLeft($(this)._scrollLeft()) - dc.body2.children("table.datagrid-btable-frozen").css("left", -$(this)._scrollLeft()) - }) - function _4e8(tr) { - if (tr.attr("datagrid-row-index")) { - return parseInt(tr.attr("datagrid-row-index")) - } else { - return tr.attr("node-id") - } - } - function _4e6(tr) { - return tr.length && tr.parent().length - } - } - function _4ef(_4f0) { - var opts = $.data(_4f0, "datagrid").options - var dc = $.data(_4f0, "datagrid").dc - dc.body2.css("overflow-x", opts.fitColumns ? "hidden" : "") - if (!opts.fitColumns) { - return - } - var _4f1 = dc.view2.children("div.datagrid-header") - var _4f2 = 0 - var _4f3 - var _4f4 = _4d9(_4f0, false) - for (var i = 0; i < _4f4.length; i++) { - var col = _4da(_4f0, _4f4[i]) - if (_4f5(col)) { - _4f2 += col.width - _4f3 = col - } - } - var _4f6 = _4f1.children("div.datagrid-header-inner").show() - var _4f7 = _4f1.width() - _4f1.find("table").width() - opts.scrollbarSize - var rate = _4f7 / _4f2 - if (!opts.showHeader) { - _4f6.hide() - } - for (var i = 0; i < _4f4.length; i++) { - var col = _4da(_4f0, _4f4[i]) - if (_4f5(col)) { - var _4f8 = Math.floor(col.width * rate) - _4f9(col, _4f8) - _4f7 -= _4f8 - } - } - if (_4f7 && _4f3) { - _4f9(_4f3, _4f7) - } - _4c5(_4f0) - function _4f9(col, _4fa) { - col.width += _4fa - col.boxWidth += _4fa - _4f1.find('td[field="' + col.field + '"] div.datagrid-cell').width(col.boxWidth) - } - function _4f5(col) { - if (!col.hidden && !col.checkbox && !col.auto && !col.fixed) { - return true - } - } - } - function _4fb(_4fc, _4fd) { - var opts = $.data(_4fc, "datagrid").options - var dc = $.data(_4fc, "datagrid").dc - if (_4fd) { - _498(_4fd) - if (opts.fitColumns) { - _49c(_4fc) - _4ef(_4fc) - } - } else { - var _4fe = false - var _4ff = _4d9(_4fc, true).concat(_4d9(_4fc, false)) - for (var i = 0; i < _4ff.length; i++) { - var _4fd = _4ff[i] - var col = _4da(_4fc, _4fd) - if (col.auto) { - _498(_4fd) - _4fe = true - } - } - if (_4fe && opts.fitColumns) { - _49c(_4fc) - _4ef(_4fc) - } - } - function _498(_500) { - var _501 = dc.view.find('div.datagrid-header td[field="' + _500 + '"] div.datagrid-cell') - _501.css("width", "") - var col = $(_4fc).datagrid("getColumnOption", _500) - col.width = undefined - col.boxWidth = undefined - col.auto = true - $(_4fc).datagrid("fixColumnSize", _500) - var _502 = Math.max(_501._outerWidth(), _503("allbody"), _503("allfooter")) - _501._outerWidth(_502) - col.width = _502 - col.boxWidth = parseInt(_501[0].style.width) - $(_4fc).datagrid("fixColumnSize", _500) - opts.onResizeColumn.call(_4fc, _500, col.width) - function _503(type) { - var _504 = 0 - opts.finder - .getTr(_4fc, 0, type) - .find('td[field="' + _500 + '"] div.datagrid-cell') - .each(function () { - var w = $(this)._outerWidth() - if (_504 < w) { - _504 = w - } - }) - return _504 - } - } - } - function _4c5(_505, _506) { - var _507 = $.data(_505, "datagrid") - var opts = _507.options - var dc = _507.dc - var _508 = dc.view.find("table.datagrid-btable,table.datagrid-ftable") - _508.css("table-layout", "fixed") - if (_506) { - fix(_506) - } else { - var ff = _4d9(_505, true).concat(_4d9(_505, false)) - for (var i = 0; i < ff.length; i++) { - fix(ff[i]) - } - } - _508.css("table-layout", "auto") - _509(_505) - setTimeout(function () { - _4a9(_505) - _50e(_505) - }, 0) - function fix(_50a) { - var col = _4da(_505, _50a) - if (!col.checkbox) { - _507.ss.set("." + col.cellClass, col.boxWidth ? col.boxWidth + "px" : "auto") - } - } - } - function _509(_50b) { - var dc = $.data(_50b, "datagrid").dc - dc.body1 - .add(dc.body2) - .find("td.datagrid-td-merged") - .each(function () { - var td = $(this) - var _50c = td.attr("colspan") || 1 - var _50d = _4da(_50b, td.attr("field")).width - for (var i = 1; i < _50c; i++) { - td = td.next() - _50d += _4da(_50b, td.attr("field")).width + 1 - } - $(this).children("div.datagrid-cell")._outerWidth(_50d) - }) - } - function _50e(_50f) { - var dc = $.data(_50f, "datagrid").dc - dc.view.find("div.datagrid-editable").each(function () { - var cell = $(this) - var _510 = cell.parent().attr("field") - var col = $(_50f).datagrid("getColumnOption", _510) - cell._outerWidth(col.width) - var ed = $.data(this, "datagrid.editor") - if (ed.actions.resize) { - ed.actions.resize(ed.target, cell.width()) - } - }) - } - function _4da(_511, _512) { - function find(_513) { - if (_513) { - for (var i = 0; i < _513.length; i++) { - var cc = _513[i] - for (var j = 0; j < cc.length; j++) { - var c = cc[j] - if (c.field == _512) { - return c - } - } - } - } - return null - } - var opts = $.data(_511, "datagrid").options - var col = find(opts.columns) - if (!col) { - col = find(opts.frozenColumns) - } - return col - } - function _4d9(_514, _515) { - var opts = $.data(_514, "datagrid").options - var _516 = _515 == true ? opts.frozenColumns || [[]] : opts.columns - if (_516.length == 0) { - return [] - } - var _517 = [] - function _518(_519) { - var c = 0 - var i = 0 - while (true) { - if (_517[i] == undefined) { - if (c == _519) { - return i - } - c++ - } - i++ - } - } - function _51a(r) { - var ff = [] - var c = 0 - for (var i = 0; i < _516[r].length; i++) { - var col = _516[r][i] - if (col.field) { - ff.push([c, col.field]) - } - c += parseInt(col.colspan || "1") - } - for (var i = 0; i < ff.length; i++) { - ff[i][0] = _518(ff[i][0]) - } - for (var i = 0; i < ff.length; i++) { - var f = ff[i] - _517[f[0]] = f[1] - } - } - for (var i = 0; i < _516.length; i++) { - _51a(i) - } - return _517 - } - function _51b(_51c, data) { - var _51d = $.data(_51c, "datagrid") - var opts = _51d.options - var dc = _51d.dc - data = opts.loadFilter.call(_51c, data) - data.total = parseInt(data.total) - _51d.data = data - if (data.footer) { - _51d.footer = data.footer - } - if (!opts.remoteSort) { - var opt = _4da(_51c, opts.sortName) - if (opt) { - var _51e = - opt.sorter || - function (a, b) { - return a > b ? 1 : -1 - } - data.rows.sort(function (r1, r2) { - return _51e(r1[opts.sortName], r2[opts.sortName]) * (opts.sortOrder == "asc" ? 1 : -1) - }) - } - } - if (opts.view.onBeforeRender) { - opts.view.onBeforeRender.call(opts.view, _51c, data.rows) - } - opts.view.render.call(opts.view, _51c, dc.body2, false) - opts.view.render.call(opts.view, _51c, dc.body1, true) - if (opts.showFooter) { - opts.view.renderFooter.call(opts.view, _51c, dc.footer2, false) - opts.view.renderFooter.call(opts.view, _51c, dc.footer1, true) - } - if (opts.view.onAfterRender) { - opts.view.onAfterRender.call(opts.view, _51c) - } - _51d.ss.clean() - opts.onLoadSuccess.call(_51c, data) - var _51f = $(_51c).datagrid("getPager") - if (_51f.length) { - if (_51f.pagination("options").total != data.total) { - _51f.pagination("refresh", { total: data.total }) - } - } - _4a9(_51c) - dc.body2.triggerHandler("scroll") - _520() - $(_51c).datagrid("autoSizeColumn") - function _520() { - if (opts.idField) { - for (var i = 0; i < data.rows.length; i++) { - var row = data.rows[i] - if (_521(_51d.selectedRows, row)) { - opts.finder.getTr(_51c, i).addClass("datagrid-row-selected") - } - if (_521(_51d.checkedRows, row)) { - opts.finder.getTr(_51c, i).find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked", true) - } - } - } - function _521(a, r) { - for (var i = 0; i < a.length; i++) { - if (a[i][opts.idField] == r[opts.idField]) { - a[i] = r - return true - } - } - return false - } - } - } - function _522(_523, row) { - var _524 = $.data(_523, "datagrid") - var opts = _524.options - var rows = _524.data.rows - if (typeof row == "object") { - return _487(rows, row) - } else { - for (var i = 0; i < rows.length; i++) { - if (rows[i][opts.idField] == row) { - return i - } - } - return -1 - } - } - function _525(_526) { - var _527 = $.data(_526, "datagrid") - var opts = _527.options - var data = _527.data - if (opts.idField) { - return _527.selectedRows - } else { - var rows = [] - opts.finder.getTr(_526, "", "selected", 2).each(function () { - var _528 = parseInt($(this).attr("datagrid-row-index")) - rows.push(data.rows[_528]) - }) - return rows - } - } - function _529(_52a) { - var _52b = $.data(_52a, "datagrid") - var opts = _52b.options - if (opts.idField) { - return _52b.checkedRows - } else { - var rows = [] - opts.finder.getTr(_52a, "", "checked").each(function () { - rows.push(opts.finder.getRow(_52a, $(this))) - }) - return rows - } - } - function _52c(_52d, _52e) { - var _52f = $.data(_52d, "datagrid") - var dc = _52f.dc - var opts = _52f.options - var tr = opts.finder.getTr(_52d, _52e) - if (tr.length) { - if (tr.closest("table").hasClass("datagrid-btable-frozen")) { - return - } - var _530 = dc.view2.children("div.datagrid-header")._outerHeight() - var _531 = dc.body2 - var _532 = _531.outerHeight(true) - _531.outerHeight() - var top = tr.position().top - _530 - _532 - if (top < 0) { - _531.scrollTop(_531.scrollTop() + top) - } else { - if (top + tr._outerHeight() > _531.height() - 18) { - _531.scrollTop(_531.scrollTop() + top + tr._outerHeight() - _531.height() + 18) - } - } - } - } - function _533(_534, _535) { - var _536 = $.data(_534, "datagrid") - var opts = _536.options - opts.finder.getTr(_534, _536.highlightIndex).removeClass("datagrid-row-over") - opts.finder.getTr(_534, _535).addClass("datagrid-row-over") - _536.highlightIndex = _535 - } - function _537(_538, _539, _53a) { - var _53b = $.data(_538, "datagrid") - var dc = _53b.dc - var opts = _53b.options - var _53c = _53b.selectedRows - if (opts.singleSelect) { - _53d(_538) - _53c.splice(0, _53c.length) - } - if (!_53a && opts.checkOnSelect) { - _53e(_538, _539, true) - } - var row = opts.finder.getRow(_538, _539) - if (opts.idField) { - _48a(_53c, opts.idField, row) - } - opts.finder.getTr(_538, _539).addClass("datagrid-row-selected") - opts.onSelect.call(_538, _539, row) - _52c(_538, _539) - } - function _53f(_540, _541, _542) { - var _543 = $.data(_540, "datagrid") - var dc = _543.dc - var opts = _543.options - var _544 = $.data(_540, "datagrid").selectedRows - if (!_542 && opts.checkOnSelect) { - _545(_540, _541, true) - } - opts.finder.getTr(_540, _541).removeClass("datagrid-row-selected") - var row = opts.finder.getRow(_540, _541) - if (opts.idField) { - _488(_544, opts.idField, row[opts.idField]) - } - opts.onUnselect.call(_540, _541, row) - } - function _546(_547, _548) { - var _549 = $.data(_547, "datagrid") - var opts = _549.options - var rows = _549.data.rows - var _54a = $.data(_547, "datagrid").selectedRows - if (!_548 && opts.checkOnSelect) { - _54b(_547, true) - } - opts.finder.getTr(_547, "", "allbody").addClass("datagrid-row-selected") - if (opts.idField) { - for (var _54c = 0; _54c < rows.length; _54c++) { - _48a(_54a, opts.idField, rows[_54c]) - } - } - opts.onSelectAll.call(_547, rows) - } - function _53d(_54d, _54e) { - var _54f = $.data(_54d, "datagrid") - var opts = _54f.options - var rows = _54f.data.rows - var _550 = $.data(_54d, "datagrid").selectedRows - if (!_54e && opts.checkOnSelect) { - _551(_54d, true) - } - opts.finder.getTr(_54d, "", "selected").removeClass("datagrid-row-selected") - if (opts.idField) { - for (var _552 = 0; _552 < rows.length; _552++) { - _488(_550, opts.idField, rows[_552][opts.idField]) - } - } - opts.onUnselectAll.call(_54d, rows) - } - function _53e(_553, _554, _555) { - var _556 = $.data(_553, "datagrid") - var opts = _556.options - if (!_555 && opts.selectOnCheck) { - _537(_553, _554, true) - } - var ck = opts.finder.getTr(_553, _554).find("div.datagrid-cell-check input[type=checkbox]") - ck._propAttr("checked", true) - ck = opts.finder.getTr(_553, "", "checked") - if (ck.length == _556.data.rows.length) { - var dc = _556.dc - var _557 = dc.header1.add(dc.header2) - _557.find("input[type=checkbox]")._propAttr("checked", true) - } - var row = opts.finder.getRow(_553, _554) - if (opts.idField) { - _48a(_556.checkedRows, opts.idField, row) - } - opts.onCheck.call(_553, _554, row) - } - function _545(_558, _559, _55a) { - var _55b = $.data(_558, "datagrid") - var opts = _55b.options - if (!_55a && opts.selectOnCheck) { - _53f(_558, _559, true) - } - var ck = opts.finder.getTr(_558, _559).find("div.datagrid-cell-check input[type=checkbox]") - ck._propAttr("checked", false) - var dc = _55b.dc - var _55c = dc.header1.add(dc.header2) - _55c.find("input[type=checkbox]")._propAttr("checked", false) - var row = opts.finder.getRow(_558, _559) - if (opts.idField) { - _488(_55b.checkedRows, opts.idField, row[opts.idField]) - } - opts.onUncheck.call(_558, _559, row) - } - function _54b(_55d, _55e) { - var _55f = $.data(_55d, "datagrid") - var opts = _55f.options - var rows = _55f.data.rows - if (!_55e && opts.selectOnCheck) { - _546(_55d, true) - } - var dc = _55f.dc - var hck = dc.header1.add(dc.header2).find("input[type=checkbox]") - var bck = opts.finder.getTr(_55d, "", "allbody").find("div.datagrid-cell-check input[type=checkbox]") - hck.add(bck)._propAttr("checked", true) - if (opts.idField) { - for (var i = 0; i < rows.length; i++) { - _48a(_55f.checkedRows, opts.idField, rows[i]) - } - } - opts.onCheckAll.call(_55d, rows) - } - function _551(_560, _561) { - var _562 = $.data(_560, "datagrid") - var opts = _562.options - var rows = _562.data.rows - if (!_561 && opts.selectOnCheck) { - _53d(_560, true) - } - var dc = _562.dc - var hck = dc.header1.add(dc.header2).find("input[type=checkbox]") - var bck = opts.finder.getTr(_560, "", "allbody").find("div.datagrid-cell-check input[type=checkbox]") - hck.add(bck)._propAttr("checked", false) - if (opts.idField) { - for (var i = 0; i < rows.length; i++) { - _488(_562.checkedRows, opts.idField, rows[i][opts.idField]) - } - } - opts.onUncheckAll.call(_560, rows) - } - function _563(_564, _565) { - var opts = $.data(_564, "datagrid").options - var tr = opts.finder.getTr(_564, _565) - var row = opts.finder.getRow(_564, _565) - if (tr.hasClass("datagrid-row-editing")) { - return - } - if (opts.onBeforeEdit.call(_564, _565, row) == false) { - return - } - tr.addClass("datagrid-row-editing") - _566(_564, _565) - _50e(_564) - tr.find("div.datagrid-editable").each(function () { - var _567 = $(this).parent().attr("field") - var ed = $.data(this, "datagrid.editor") - ed.actions.setValue(ed.target, row[_567]) - }) - _568(_564, _565) - } - function _569(_56a, _56b, _56c) { - var opts = $.data(_56a, "datagrid").options - var _56d = $.data(_56a, "datagrid").updatedRows - var _56e = $.data(_56a, "datagrid").insertedRows - var tr = opts.finder.getTr(_56a, _56b) - var row = opts.finder.getRow(_56a, _56b) - if (!tr.hasClass("datagrid-row-editing")) { - return - } - if (!_56c) { - if (!_568(_56a, _56b)) { - return - } - var _56f = false - var _570 = {} - tr.find("div.datagrid-editable").each(function () { - var _571 = $(this).parent().attr("field") - var ed = $.data(this, "datagrid.editor") - var _572 = ed.actions.getValue(ed.target) - if (row[_571] != _572) { - row[_571] = _572 - _56f = true - _570[_571] = _572 - } - }) - if (_56f) { - if (_487(_56e, row) == -1) { - if (_487(_56d, row) == -1) { - _56d.push(row) - } - } - } - } - tr.removeClass("datagrid-row-editing") - _573(_56a, _56b) - $(_56a).datagrid("refreshRow", _56b) - if (!_56c) { - opts.onAfterEdit.call(_56a, _56b, row, _570) - } else { - opts.onCancelEdit.call(_56a, _56b, row) - } - } - function _574(_575, _576) { - var opts = $.data(_575, "datagrid").options - var tr = opts.finder.getTr(_575, _576) - var _577 = [] - tr.children("td").each(function () { - var cell = $(this).find("div.datagrid-editable") - if (cell.length) { - var ed = $.data(cell[0], "datagrid.editor") - _577.push(ed) - } - }) - return _577 - } - function _578(_579, _57a) { - var _57b = _574(_579, _57a.index) - for (var i = 0; i < _57b.length; i++) { - if (_57b[i].field == _57a.field) { - return _57b[i] - } - } - return null - } - function _566(_57c, _57d) { - var opts = $.data(_57c, "datagrid").options - var tr = opts.finder.getTr(_57c, _57d) - tr.children("td").each(function () { - var cell = $(this).find("div.datagrid-cell") - var _57e = $(this).attr("field") - var col = _4da(_57c, _57e) - if (col && col.editor) { - var _57f, _580 - if (typeof col.editor == "string") { - _57f = col.editor - } else { - _57f = col.editor.type - _580 = col.editor.options - } - var _581 = opts.editors[_57f] - if (_581) { - var _582 = cell.html() - var _583 = cell._outerWidth() - cell.addClass("datagrid-editable") - cell._outerWidth(_583) - cell.html('
            ') - cell.children("table").bind("click dblclick contextmenu", function (e) { - e.stopPropagation() - }) - $.data(cell[0], "datagrid.editor", { - actions: _581, - target: _581.init(cell.find("td"), _580), - field: _57e, - type: _57f, - oldHtml: _582 - }) - } - } - }) - _4a9(_57c, _57d, true) - } - function _573(_584, _585) { - var opts = $.data(_584, "datagrid").options - var tr = opts.finder.getTr(_584, _585) - tr.children("td").each(function () { - var cell = $(this).find("div.datagrid-editable") - if (cell.length) { - var ed = $.data(cell[0], "datagrid.editor") - if (ed.actions.destroy) { - ed.actions.destroy(ed.target) - } - cell.html(ed.oldHtml) - $.removeData(cell[0], "datagrid.editor") - cell.removeClass("datagrid-editable") - cell.css("width", "") - } - }) - } - function _568(_586, _587) { - var tr = $.data(_586, "datagrid").options.finder.getTr(_586, _587) - if (!tr.hasClass("datagrid-row-editing")) { - return true - } - var vbox = tr.find(".validatebox-text") - vbox.validatebox("validate") - vbox.trigger("mouseleave") - var _588 = tr.find(".validatebox-invalid") - return _588.length == 0 - } - function _589(_58a, _58b) { - var _58c = $.data(_58a, "datagrid").insertedRows - var _58d = $.data(_58a, "datagrid").deletedRows - var _58e = $.data(_58a, "datagrid").updatedRows - if (!_58b) { - var rows = [] - rows = rows.concat(_58c) - rows = rows.concat(_58d) - rows = rows.concat(_58e) - return rows - } else { - if (_58b == "inserted") { - return _58c - } else { - if (_58b == "deleted") { - return _58d - } else { - if (_58b == "updated") { - return _58e - } - } - } - } - return [] - } - function _58f(_590, _591) { - var _592 = $.data(_590, "datagrid") - var opts = _592.options - var data = _592.data - var _593 = _592.insertedRows - var _594 = _592.deletedRows - $(_590).datagrid("cancelEdit", _591) - var row = data.rows[_591] - if (_487(_593, row) >= 0) { - _488(_593, row) - } else { - _594.push(row) - } - _488(_592.selectedRows, opts.idField, data.rows[_591][opts.idField]) - _488(_592.checkedRows, opts.idField, data.rows[_591][opts.idField]) - opts.view.deleteRow.call(opts.view, _590, _591) - if (opts.height == "auto") { - _4a9(_590) - } - $(_590).datagrid("getPager").pagination("refresh", { total: data.total }) - } - function _595(_596, _597) { - var data = $.data(_596, "datagrid").data - var view = $.data(_596, "datagrid").options.view - var _598 = $.data(_596, "datagrid").insertedRows - view.insertRow.call(view, _596, _597.index, _597.row) - _598.push(_597.row) - $(_596).datagrid("getPager").pagination("refresh", { total: data.total }) - } - function _599(_59a, row) { - var data = $.data(_59a, "datagrid").data - var view = $.data(_59a, "datagrid").options.view - var _59b = $.data(_59a, "datagrid").insertedRows - view.insertRow.call(view, _59a, null, row) - _59b.push(row) - $(_59a).datagrid("getPager").pagination("refresh", { total: data.total }) - } - function _59c(_59d) { - var _59e = $.data(_59d, "datagrid") - var data = _59e.data - var rows = data.rows - var _59f = [] - for (var i = 0; i < rows.length; i++) { - _59f.push($.extend({}, rows[i])) - } - _59e.originalRows = _59f - _59e.updatedRows = [] - _59e.insertedRows = [] - _59e.deletedRows = [] - } - function _5a0(_5a1) { - var data = $.data(_5a1, "datagrid").data - var ok = true - for (var i = 0, len = data.rows.length; i < len; i++) { - if (_568(_5a1, i)) { - _569(_5a1, i, false) - } else { - ok = false - } - } - if (ok) { - _59c(_5a1) - } - } - function _5a2(_5a3) { - var _5a4 = $.data(_5a3, "datagrid") - var opts = _5a4.options - var _5a5 = _5a4.originalRows - var _5a6 = _5a4.insertedRows - var _5a7 = _5a4.deletedRows - var _5a8 = _5a4.selectedRows - var _5a9 = _5a4.checkedRows - var data = _5a4.data - function _5aa(a) { - var ids = [] - for (var i = 0; i < a.length; i++) { - ids.push(a[i][opts.idField]) - } - return ids - } - function _5ab(ids, _5ac) { - for (var i = 0; i < ids.length; i++) { - var _5ad = _522(_5a3, ids[i]) - if (_5ad >= 0) { - ;(_5ac == "s" ? _537 : _53e)(_5a3, _5ad, true) - } - } - } - for (var i = 0; i < data.rows.length; i++) { - _569(_5a3, i, true) - } - var _5ae = _5aa(_5a8) - var _5af = _5aa(_5a9) - _5a8.splice(0, _5a8.length) - _5a9.splice(0, _5a9.length) - data.total += _5a7.length - _5a6.length - data.rows = _5a5 - _51b(_5a3, data) - _5ab(_5ae, "s") - _5ab(_5af, "c") - _59c(_5a3) - } - function _5b0(_5b1, _5b2) { - var opts = $.data(_5b1, "datagrid").options - if (_5b2) { - opts.queryParams = _5b2 - } - var _5b3 = $.extend({}, opts.queryParams) - if (opts.pagination) { - $.extend(_5b3, { page: opts.pageNumber, rows: opts.pageSize }) - } - if (opts.sortName) { - $.extend(_5b3, { sort: opts.sortName, order: opts.sortOrder }) - } - if (opts.onBeforeLoad.call(_5b1, _5b3) == false) { - return - } - $(_5b1).datagrid("loading") - setTimeout(function () { - _5b4() - }, 0) - function _5b4() { - var _5b5 = opts.loader.call( - _5b1, - _5b3, - function (data) { - setTimeout(function () { - $(_5b1).datagrid("loaded") - }, 0) - _51b(_5b1, data) - setTimeout(function () { - _59c(_5b1) - }, 0) - }, - function () { - setTimeout(function () { - $(_5b1).datagrid("loaded") - }, 0) - opts.onLoadError.apply(_5b1, arguments) - } - ) - if (_5b5 == false) { - $(_5b1).datagrid("loaded") - } - } - } - function _5b6(_5b7, _5b8) { - var opts = $.data(_5b7, "datagrid").options - _5b8.rowspan = _5b8.rowspan || 1 - _5b8.colspan = _5b8.colspan || 1 - if (_5b8.rowspan == 1 && _5b8.colspan == 1) { - return - } - var tr = opts.finder.getTr(_5b7, _5b8.index != undefined ? _5b8.index : _5b8.id) - if (!tr.length) { - return - } - var row = opts.finder.getRow(_5b7, tr) - var _5b9 = row[_5b8.field] - var td = tr.find('td[field="' + _5b8.field + '"]') - td.attr("rowspan", _5b8.rowspan).attr("colspan", _5b8.colspan) - td.addClass("datagrid-td-merged") - for (var i = 1; i < _5b8.colspan; i++) { - td = td.next() - td.hide() - row[td.attr("field")] = _5b9 - } - for (var i = 1; i < _5b8.rowspan; i++) { - tr = tr.next() - if (!tr.length) { - break - } - var row = opts.finder.getRow(_5b7, tr) - var td = tr.find('td[field="' + _5b8.field + '"]').hide() - row[td.attr("field")] = _5b9 - for (var j = 1; j < _5b8.colspan; j++) { - td = td.next() - td.hide() - row[td.attr("field")] = _5b9 - } - } - _509(_5b7) - } - $.fn.datagrid = function (_5ba, _5bb) { - if (typeof _5ba == "string") { - return $.fn.datagrid.methods[_5ba](this, _5bb) - } - _5ba = _5ba || {} - return this.each(function () { - var _5bc = $.data(this, "datagrid") - var opts - if (_5bc) { - opts = $.extend(_5bc.options, _5ba) - _5bc.options = opts - } else { - opts = $.extend({}, $.extend({}, $.fn.datagrid.defaults, { queryParams: {} }), $.fn.datagrid.parseOptions(this), _5ba) - $(this).css("width", "").css("height", "") - var _5bd = _4bd(this, opts.rownumbers) - if (!opts.columns) { - opts.columns = _5bd.columns - } - if (!opts.frozenColumns) { - opts.frozenColumns = _5bd.frozenColumns - } - opts.columns = $.extend(true, [], opts.columns) - opts.frozenColumns = $.extend(true, [], opts.frozenColumns) - opts.view = $.extend({}, opts.view) - $.data(this, "datagrid", { - options: opts, - panel: _5bd.panel, - dc: _5bd.dc, - ss: _5bd.ss, - selectedRows: [], - checkedRows: [], - data: { total: 0, rows: [] }, - originalRows: [], - updatedRows: [], - insertedRows: [], - deletedRows: [] - }) - } - _4c9(this) - if (opts.data) { - _51b(this, opts.data) - _59c(this) - } else { - var data = $.fn.datagrid.parseData(this) - if (data.total > 0) { - _51b(this, data) - _59c(this) - } - } - _498(this) - _5b0(this) - _4db(this) - }) - } - var _5be = { - text: { - init: function (_5bf, _5c0) { - var _5c1 = $('').appendTo(_5bf) - return _5c1 - }, - getValue: function (_5c2) { - return $(_5c2).val() - }, - setValue: function (_5c3, _5c4) { - $(_5c3).val(_5c4) - }, - resize: function (_5c5, _5c6) { - $(_5c5)._outerWidth(_5c6) - } - }, - textarea: { - init: function (_5c7, _5c8) { - var _5c9 = $('').appendTo(_5c7) - return _5c9 - }, - getValue: function (_5ca) { - return $(_5ca).val() - }, - setValue: function (_5cb, _5cc) { - $(_5cb).val(_5cc) - }, - resize: function (_5cd, _5ce) { - $(_5cd)._outerWidth(_5ce) - } - }, - checkbox: { - init: function (_5cf, _5d0) { - var _5d1 = $('').appendTo(_5cf) - _5d1.val(_5d0.on) - _5d1.attr("offval", _5d0.off) - return _5d1 - }, - getValue: function (_5d2) { - if ($(_5d2).is(":checked")) { - return $(_5d2).val() - } else { - return $(_5d2).attr("offval") - } - }, - setValue: function (_5d3, _5d4) { - var _5d5 = false - if ($(_5d3).val() == _5d4) { - _5d5 = true - } - $(_5d3)._propAttr("checked", _5d5) - } - }, - numberbox: { - init: function (_5d6, _5d7) { - var _5d8 = $('').appendTo(_5d6) - _5d8.numberbox(_5d7) - return _5d8 - }, - destroy: function (_5d9) { - $(_5d9).numberbox("destroy") - }, - getValue: function (_5da) { - $(_5da).blur() - return $(_5da).numberbox("getValue") - }, - setValue: function (_5db, _5dc) { - $(_5db).numberbox("setValue", _5dc) - }, - resize: function (_5dd, _5de) { - $(_5dd)._outerWidth(_5de) - } - }, - validatebox: { - init: function (_5df, _5e0) { - var _5e1 = $('').appendTo(_5df) - _5e1.validatebox(_5e0) - return _5e1 - }, - destroy: function (_5e2) { - $(_5e2).validatebox("destroy") - }, - getValue: function (_5e3) { - return $(_5e3).val() - }, - setValue: function (_5e4, _5e5) { - $(_5e4).val(_5e5) - }, - resize: function (_5e6, _5e7) { - $(_5e6)._outerWidth(_5e7) - } - }, - datebox: { - init: function (_5e8, _5e9) { - var _5ea = $('').appendTo(_5e8) - _5ea.datebox(_5e9) - return _5ea - }, - destroy: function (_5eb) { - $(_5eb).datebox("destroy") - }, - getValue: function (_5ec) { - return $(_5ec).datebox("getValue") - }, - setValue: function (_5ed, _5ee) { - $(_5ed).datebox("setValue", _5ee) - }, - resize: function (_5ef, _5f0) { - $(_5ef).datebox("resize", _5f0) - } - }, - combobox: { - init: function (_5f1, _5f2) { - var _5f3 = $('').appendTo(_5f1) - _5f3.combobox(_5f2 || {}) - return _5f3 - }, - destroy: function (_5f4) { - $(_5f4).combobox("destroy") - }, - getValue: function (_5f5) { - return $(_5f5).combobox("getValue") - }, - setValue: function (_5f6, _5f7) { - $(_5f6).combobox("setValue", _5f7) - }, - resize: function (_5f8, _5f9) { - $(_5f8).combobox("resize", _5f9) - } - }, - combotree: { - init: function (_5fa, _5fb) { - var _5fc = $('').appendTo(_5fa) - _5fc.combotree(_5fb) - return _5fc - }, - destroy: function (_5fd) { - $(_5fd).combotree("destroy") - }, - getValue: function (_5fe) { - return $(_5fe).combotree("getValue") - }, - setValue: function (_5ff, _600) { - $(_5ff).combotree("setValue", _600) - }, - resize: function (_601, _602) { - $(_601).combotree("resize", _602) - } - } - } - $.fn.datagrid.methods = { - options: function (jq) { - var _603 = $.data(jq[0], "datagrid").options - var _604 = $.data(jq[0], "datagrid").panel.panel("options") - var opts = $.extend(_603, { - width: _604.width, - height: _604.height, - closed: _604.closed, - collapsed: _604.collapsed, - minimized: _604.minimized, - maximized: _604.maximized - }) - return opts - }, - getPanel: function (jq) { - return $.data(jq[0], "datagrid").panel - }, - getPager: function (jq) { - return $.data(jq[0], "datagrid").panel.children("div.datagrid-pager") - }, - getColumnFields: function (jq, _605) { - return _4d9(jq[0], _605) - }, - getColumnOption: function (jq, _606) { - return _4da(jq[0], _606) - }, - resize: function (jq, _607) { - return jq.each(function () { - _498(this, _607) - }) - }, - load: function (jq, _608) { - return jq.each(function () { - var opts = $(this).datagrid("options") - opts.pageNumber = 1 - var _609 = $(this).datagrid("getPager") - _609.pagination({ pageNumber: 1 }) - _5b0(this, _608) - }) - }, - reload: function (jq, _60a) { - return jq.each(function () { - _5b0(this, _60a) - }) - }, - reloadFooter: function (jq, _60b) { - return jq.each(function () { - var opts = $.data(this, "datagrid").options - var dc = $.data(this, "datagrid").dc - if (_60b) { - $.data(this, "datagrid").footer = _60b - } - if (opts.showFooter) { - opts.view.renderFooter.call(opts.view, this, dc.footer2, false) - opts.view.renderFooter.call(opts.view, this, dc.footer1, true) - if (opts.view.onAfterRender) { - opts.view.onAfterRender.call(opts.view, this) - } - $(this).datagrid("fixRowHeight") - } - }) - }, - loading: function (jq) { - return jq.each(function () { - var opts = $.data(this, "datagrid").options - $(this).datagrid("getPager").pagination("loading") - if (opts.loadMsg) { - var _60c = $(this).datagrid("getPanel") - $('
            ').appendTo(_60c) - var msg = $('
            ').html(opts.loadMsg).appendTo(_60c) - msg.css("marginLeft", -msg.outerWidth() / 2) - } - }) - }, - loaded: function (jq) { - return jq.each(function () { - $(this).datagrid("getPager").pagination("loaded") - var _60d = $(this).datagrid("getPanel") - _60d.children("div.datagrid-mask-msg").remove() - _60d.children("div.datagrid-mask").remove() - }) - }, - fitColumns: function (jq) { - return jq.each(function () { - _4ef(this) - }) - }, - fixColumnSize: function (jq, _60e) { - return jq.each(function () { - _4c5(this, _60e) - }) - }, - fixRowHeight: function (jq, _60f) { - return jq.each(function () { - _4a9(this, _60f) - }) - }, - freezeRow: function (jq, _610) { - return jq.each(function () { - _4b6(this, _610) - }) - }, - autoSizeColumn: function (jq, _611) { - return jq.each(function () { - _4fb(this, _611) - }) - }, - loadData: function (jq, data) { - return jq.each(function () { - _51b(this, data) - _59c(this) - }) - }, - getData: function (jq) { - return $.data(jq[0], "datagrid").data - }, - getRows: function (jq) { - return $.data(jq[0], "datagrid").data.rows - }, - getFooterRows: function (jq) { - return $.data(jq[0], "datagrid").footer - }, - getRowIndex: function (jq, id) { - return _522(jq[0], id) - }, - getChecked: function (jq) { - return _529(jq[0]) - }, - getSelected: function (jq) { - var rows = _525(jq[0]) - return rows.length > 0 ? rows[0] : null - }, - getSelections: function (jq) { - return _525(jq[0]) - }, - clearSelections: function (jq) { - return jq.each(function () { - var _612 = $.data(this, "datagrid").selectedRows - _612.splice(0, _612.length) - _53d(this) - }) - }, - clearChecked: function (jq) { - return jq.each(function () { - var _613 = $.data(this, "datagrid").checkedRows - _613.splice(0, _613.length) - _551(this) - }) - }, - scrollTo: function (jq, _614) { - return jq.each(function () { - _52c(this, _614) - }) - }, - highlightRow: function (jq, _615) { - return jq.each(function () { - _533(this, _615) - _52c(this, _615) - }) - }, - selectAll: function (jq) { - return jq.each(function () { - _546(this) - }) - }, - unselectAll: function (jq) { - return jq.each(function () { - _53d(this) - }) - }, - selectRow: function (jq, _616) { - return jq.each(function () { - _537(this, _616) - }) - }, - selectRecord: function (jq, id) { - return jq.each(function () { - var opts = $.data(this, "datagrid").options - if (opts.idField) { - var _617 = _522(this, id) - if (_617 >= 0) { - $(this).datagrid("selectRow", _617) - } - } - }) - }, - unselectRow: function (jq, _618) { - return jq.each(function () { - _53f(this, _618) - }) - }, - checkRow: function (jq, _619) { - return jq.each(function () { - _53e(this, _619) - }) - }, - uncheckRow: function (jq, _61a) { - return jq.each(function () { - _545(this, _61a) - }) - }, - checkAll: function (jq) { - return jq.each(function () { - _54b(this) - }) - }, - uncheckAll: function (jq) { - return jq.each(function () { - _551(this) - }) - }, - beginEdit: function (jq, _61b) { - return jq.each(function () { - _563(this, _61b) - }) - }, - endEdit: function (jq, _61c) { - return jq.each(function () { - _569(this, _61c, false) - }) - }, - cancelEdit: function (jq, _61d) { - return jq.each(function () { - _569(this, _61d, true) - }) - }, - getEditors: function (jq, _61e) { - return _574(jq[0], _61e) - }, - getEditor: function (jq, _61f) { - return _578(jq[0], _61f) - }, - refreshRow: function (jq, _620) { - return jq.each(function () { - var opts = $.data(this, "datagrid").options - opts.view.refreshRow.call(opts.view, this, _620) - }) - }, - validateRow: function (jq, _621) { - return _568(jq[0], _621) - }, - updateRow: function (jq, _622) { - return jq.each(function () { - var opts = $.data(this, "datagrid").options - opts.view.updateRow.call(opts.view, this, _622.index, _622.row) - }) - }, - appendRow: function (jq, row) { - return jq.each(function () { - _599(this, row) - }) - }, - insertRow: function (jq, _623) { - return jq.each(function () { - _595(this, _623) - }) - }, - deleteRow: function (jq, _624) { - return jq.each(function () { - _58f(this, _624) - }) - }, - getChanges: function (jq, _625) { - return _589(jq[0], _625) - }, - acceptChanges: function (jq) { - return jq.each(function () { - _5a0(this) - }) - }, - rejectChanges: function (jq) { - return jq.each(function () { - _5a2(this) - }) - }, - mergeCells: function (jq, _626) { - return jq.each(function () { - _5b6(this, _626) - }) - }, - showColumn: function (jq, _627) { - return jq.each(function () { - var _628 = $(this).datagrid("getPanel") - _628.find('td[field="' + _627 + '"]').show() - $(this).datagrid("getColumnOption", _627).hidden = false - $(this).datagrid("fitColumns") - }) - }, - hideColumn: function (jq, _629) { - return jq.each(function () { - var _62a = $(this).datagrid("getPanel") - _62a.find('td[field="' + _629 + '"]').hide() - $(this).datagrid("getColumnOption", _629).hidden = true - $(this).datagrid("fitColumns") - }) - } - } - $.fn.datagrid.parseOptions = function (_62b) { - var t = $(_62b) - return $.extend( - {}, - $.fn.panel.parseOptions(_62b), - $.parser.parseOptions(_62b, [ - "url", - "toolbar", - "idField", - "sortName", - "sortOrder", - "pagePosition", - "resizeHandle", - { fitColumns: "boolean", autoRowHeight: "boolean", striped: "boolean", nowrap: "boolean" }, - { rownumbers: "boolean", singleSelect: "boolean", checkOnSelect: "boolean", selectOnCheck: "boolean" }, - { pagination: "boolean", pageSize: "number", pageNumber: "number" }, - { remoteSort: "boolean", showHeader: "boolean", showFooter: "boolean" }, - { scrollbarSize: "number" } - ]), - { - pageList: t.attr("pageList") ? eval(t.attr("pageList")) : undefined, - loadMsg: t.attr("loadMsg") != undefined ? t.attr("loadMsg") : undefined, - rowStyler: t.attr("rowStyler") ? eval(t.attr("rowStyler")) : undefined - } - ) - } - $.fn.datagrid.parseData = function (_62c) { - var t = $(_62c) - var data = { total: 0, rows: [] } - var _62d = t.datagrid("getColumnFields", true).concat(t.datagrid("getColumnFields", false)) - t.find("tbody tr").each(function () { - data.total++ - var row = {} - $.extend(row, $.parser.parseOptions(this, ["iconCls", "state"])) - for (var i = 0; i < _62d.length; i++) { - row[_62d[i]] = $(this) - .find("td:eq(" + i + ")") - .html() - } - data.rows.push(row) - }) - return data - } - var _62e = { - render: function (_62f, _630, _631) { - var _632 = $.data(_62f, "datagrid") - var opts = _632.options - var rows = _632.data.rows - var _633 = $(_62f).datagrid("getColumnFields", _631) - if (_631) { - if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))) { - return - } - } - var _634 = [''] - for (var i = 0; i < rows.length; i++) { - var cls = i % 2 && opts.striped ? 'class="datagrid-row datagrid-row-alt"' : 'class="datagrid-row"' - var _635 = opts.rowStyler ? opts.rowStyler.call(_62f, i, rows[i]) : "" - var _636 = _635 ? 'style="' + _635 + '"' : "" - var _637 = _632.rowIdPrefix + "-" + (_631 ? 1 : 2) + "-" + i - _634.push('") - _634.push(this.renderRow.call(this, _62f, _633, _631, i, rows[i])) - _634.push("") - } - _634.push("
            ") - $(_630).html(_634.join("")) - }, - renderFooter: function (_638, _639, _63a) { - var opts = $.data(_638, "datagrid").options - var rows = $.data(_638, "datagrid").footer || [] - var _63b = $(_638).datagrid("getColumnFields", _63a) - var _63c = [''] - for (var i = 0; i < rows.length; i++) { - _63c.push('') - _63c.push(this.renderRow.call(this, _638, _63b, _63a, i, rows[i])) - _63c.push("") - } - _63c.push("
            ") - $(_639).html(_63c.join("")) - }, - renderRow: function (_63d, _63e, _63f, _640, _641) { - var opts = $.data(_63d, "datagrid").options - var cc = [] - if (_63f && opts.rownumbers) { - var _642 = _640 + 1 - if (opts.pagination) { - _642 += (opts.pageNumber - 1) * opts.pageSize - } - cc.push('
            ' + _642 + "
            ") - } - for (var i = 0; i < _63e.length; i++) { - var _643 = _63e[i] - var col = $(_63d).datagrid("getColumnOption", _643) - if (col) { - var _644 = _641[_643] - var _645 = col.styler ? col.styler(_644, _641, _640) || "" : "" - var _646 = col.hidden ? 'style="display:none;' + _645 + '"' : _645 ? 'style="' + _645 + '"' : "" - cc.push('") - if (col.checkbox) { - var _646 = "" - } else { - var _646 = _645 - if (col.align) { - _646 += ";text-align:" + col.align + ";" - } - if (!opts.nowrap) { - _646 += ";white-space:normal;height:auto;" - } else { - if (opts.autoRowHeight) { - _646 += ";height:auto;" - } - } - } - cc.push('
            ') - if (col.checkbox) { - cc.push('') - } else { - if (col.formatter) { - cc.push(col.formatter(_644, _641, _640)) - } else { - cc.push(_644) - } - } - cc.push("
            ") - cc.push("") - } - } - return cc.join("") - }, - refreshRow: function (_647, _648) { - this.updateRow.call(this, _647, _648, {}) - }, - updateRow: function (_649, _64a, row) { - var opts = $.data(_649, "datagrid").options - var rows = $(_649).datagrid("getRows") - $.extend(rows[_64a], row) - var _64b = opts.rowStyler ? opts.rowStyler.call(_649, _64a, rows[_64a]) : "" - function _64c(_64d) { - var _64e = $(_649).datagrid("getColumnFields", _64d) - var tr = opts.finder.getTr(_649, _64a, "body", _64d ? 1 : 2) - var _64f = tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked") - tr.html(this.renderRow.call(this, _649, _64e, _64d, _64a, rows[_64a])) - tr.attr("style", _64b || "") - if (_64f) { - tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked", true) - } - } - _64c.call(this, true) - _64c.call(this, false) - $(_649).datagrid("fixRowHeight", _64a) - }, - insertRow: function (_650, _651, row) { - var _652 = $.data(_650, "datagrid") - var opts = _652.options - var dc = _652.dc - var data = _652.data - if (_651 == undefined || _651 == null) { - _651 = data.rows.length - } - if (_651 > data.rows.length) { - _651 = data.rows.length - } - function _653(_654) { - var _655 = _654 ? 1 : 2 - for (var i = data.rows.length - 1; i >= _651; i--) { - var tr = opts.finder.getTr(_650, i, "body", _655) - tr.attr("datagrid-row-index", i + 1) - tr.attr("id", _652.rowIdPrefix + "-" + _655 + "-" + (i + 1)) - if (_654 && opts.rownumbers) { - var _656 = i + 2 - if (opts.pagination) { - _656 += (opts.pageNumber - 1) * opts.pageSize - } - tr.find("div.datagrid-cell-rownumber").html(_656) - } - } - } - function _657(_658) { - var _659 = _658 ? 1 : 2 - var _65a = $(_650).datagrid("getColumnFields", _658) - var _65b = _652.rowIdPrefix + "-" + _659 + "-" + _651 - var tr = '' - if (_651 >= data.rows.length) { - if (data.rows.length) { - opts.finder.getTr(_650, "", "last", _659).after(tr) - } else { - var cc = _658 ? dc.body1 : dc.body2 - cc.html('' + tr + "
            ") - } - } else { - opts.finder.getTr(_650, _651 + 1, "body", _659).before(tr) - } - } - _653.call(this, true) - _653.call(this, false) - _657.call(this, true) - _657.call(this, false) - data.total += 1 - data.rows.splice(_651, 0, row) - this.refreshRow.call(this, _650, _651) - }, - deleteRow: function (_65c, _65d) { - var _65e = $.data(_65c, "datagrid") - var opts = _65e.options - var data = _65e.data - function _65f(_660) { - var _661 = _660 ? 1 : 2 - for (var i = _65d + 1; i < data.rows.length; i++) { - var tr = opts.finder.getTr(_65c, i, "body", _661) - tr.attr("datagrid-row-index", i - 1) - tr.attr("id", _65e.rowIdPrefix + "-" + _661 + "-" + (i - 1)) - if (_660 && opts.rownumbers) { - var _662 = i - if (opts.pagination) { - _662 += (opts.pageNumber - 1) * opts.pageSize - } - tr.find("div.datagrid-cell-rownumber").html(_662) - } - } - } - opts.finder.getTr(_65c, _65d).remove() - _65f.call(this, true) - _65f.call(this, false) - data.total -= 1 - data.rows.splice(_65d, 1) - }, - onBeforeRender: function (_663, rows) {}, - onAfterRender: function (_664) { - var opts = $.data(_664, "datagrid").options - if (opts.showFooter) { - var _665 = $(_664).datagrid("getPanel").find("div.datagrid-footer") - _665.find("div.datagrid-cell-rownumber,div.datagrid-cell-check").css("visibility", "hidden") - } - } - } - $.fn.datagrid.defaults = $.extend({}, $.fn.panel.defaults, { - frozenColumns: undefined, - columns: undefined, - fitColumns: false, - resizeHandle: "right", - autoRowHeight: true, - toolbar: null, - striped: false, - method: "post", - nowrap: true, - idField: null, - url: null, - data: null, - loadMsg: "Processing, please wait ...", - rownumbers: false, - singleSelect: false, - selectOnCheck: true, - checkOnSelect: true, - pagination: false, - pagePosition: "bottom", - pageNumber: 1, - pageSize: 10, - pageList: [10, 20, 30, 40, 50], - queryParams: {}, - sortName: null, - sortOrder: "asc", - remoteSort: true, - showHeader: true, - showFooter: false, - scrollbarSize: 18, - rowStyler: function (_666, _667) {}, - loader: function (_668, _669, _66a) { - var opts = $(this).datagrid("options") - if (!opts.url) { - return false - } - $.ajax({ - type: opts.method, - url: opts.url, - data: _668, - dataType: "json", - success: function (data) { - _669(data) - }, - error: function () { - _66a.apply(this, arguments) - } - }) - }, - loadFilter: function (data) { - if (typeof data.length == "number" && typeof data.splice == "function") { - return { total: data.length, rows: data } - } else { - return data - } - }, - editors: _5be, - finder: { - getTr: function (_66b, _66c, type, _66d) { - type = type || "body" - _66d = _66d || 0 - var _66e = $.data(_66b, "datagrid") - var dc = _66e.dc - var opts = _66e.options - if (_66d == 0) { - var tr1 = opts.finder.getTr(_66b, _66c, type, 1) - var tr2 = opts.finder.getTr(_66b, _66c, type, 2) - return tr1.add(tr2) - } else { - if (type == "body") { - var tr = $("#" + _66e.rowIdPrefix + "-" + _66d + "-" + _66c) - if (!tr.length) { - tr = (_66d == 1 ? dc.body1 : dc.body2).find(">table>tbody>tr[datagrid-row-index=" + _66c + "]") - } - return tr - } else { - if (type == "footer") { - return (_66d == 1 ? dc.footer1 : dc.footer2).find(">table>tbody>tr[datagrid-row-index=" + _66c + "]") - } else { - if (type == "selected") { - return (_66d == 1 ? dc.body1 : dc.body2).find(">table>tbody>tr.datagrid-row-selected") - } else { - if (type == "highlight") { - return (_66d == 1 ? dc.body1 : dc.body2).find(">table>tbody>tr.datagrid-row-over") - } else { - if (type == "checked") { - return (_66d == 1 ? dc.body1 : dc.body2).find( - ">table>tbody>tr.datagrid-row:has(div.datagrid-cell-check input:checked)" - ) - } else { - if (type == "last") { - return (_66d == 1 ? dc.body1 : dc.body2).find(">table>tbody>tr[datagrid-row-index]:last") - } else { - if (type == "allbody") { - return (_66d == 1 ? dc.body1 : dc.body2).find(">table>tbody>tr[datagrid-row-index]") - } else { - if (type == "allfooter") { - return (_66d == 1 ? dc.footer1 : dc.footer2).find(">table>tbody>tr[datagrid-row-index]") - } - } - } - } - } - } - } - } - } - }, - getRow: function (_66f, p) { - var _670 = typeof p == "object" ? p.attr("datagrid-row-index") : p - return $.data(_66f, "datagrid").data.rows[parseInt(_670)] - } - }, - view: _62e, - onBeforeLoad: function (_671) {}, - onLoadSuccess: function () {}, - onLoadError: function () {}, - onClickRow: function (_672, _673) {}, - onDblClickRow: function (_674, _675) {}, - onClickCell: function (_676, _677, _678) {}, - onDblClickCell: function (_679, _67a, _67b) {}, - onSortColumn: function (sort, _67c) {}, - onResizeColumn: function (_67d, _67e) {}, - onSelect: function (_67f, _680) {}, - onUnselect: function (_681, _682) {}, - onSelectAll: function (rows) {}, - onUnselectAll: function (rows) {}, - onCheck: function (_683, _684) {}, - onUncheck: function (_685, _686) {}, - onCheckAll: function (rows) {}, - onUncheckAll: function (rows) {}, - onBeforeEdit: function (_687, _688) {}, - onAfterEdit: function (_689, _68a, _68b) {}, - onCancelEdit: function (_68c, _68d) {}, - onHeaderContextMenu: function (e, _68e) {}, - onRowContextMenu: function (e, _68f, _690) {} - }) -})(jQuery) -;(function ($) { - var _691 - function _692(_693) { - var _694 = $.data(_693, "propertygrid") - var opts = $.data(_693, "propertygrid").options - $(_693).datagrid( - $.extend({}, opts, { - cls: "propertygrid", - view: opts.showGroup ? _695 : undefined, - onClickRow: function (_696, row) { - if (_691 != this) { - _697(_691) - _691 = this - } - if (opts.editIndex != _696 && row.editor) { - var col = $(this).datagrid("getColumnOption", "value") - col.editor = row.editor - _697(_691) - $(this).datagrid("beginEdit", _696) - $(this).datagrid("getEditors", _696)[0].target.focus() - opts.editIndex = _696 - } - opts.onClickRow.call(_693, _696, row) - }, - loadFilter: function (data) { - _697(this) - return opts.loadFilter.call(this, data) - }, - onLoadSuccess: function (data) { - $(_693).datagrid("getPanel").find("div.datagrid-group").attr("style", "") - opts.onLoadSuccess.call(_693, data) - } - }) - ) - $(document) - .unbind(".propertygrid") - .bind("mousedown.propertygrid", function (e) { - var p = $(e.target).closest("div.datagrid-view,div.combo-panel") - if (p.length) { - return - } - _697(_691) - _691 = undefined - }) - } - function _697(_698) { - var t = $(_698) - if (!t.length) { - return - } - var opts = $.data(_698, "propertygrid").options - var _699 = opts.editIndex - if (_699 == undefined) { - return - } - var ed = t.datagrid("getEditors", _699)[0] - if (ed) { - ed.target.blur() - if (t.datagrid("validateRow", _699)) { - t.datagrid("endEdit", _699) - } else { - t.datagrid("cancelEdit", _699) - } - } - opts.editIndex = undefined - } - $.fn.propertygrid = function (_69a, _69b) { - if (typeof _69a == "string") { - var _69c = $.fn.propertygrid.methods[_69a] - if (_69c) { - return _69c(this, _69b) - } else { - return this.datagrid(_69a, _69b) - } - } - _69a = _69a || {} - return this.each(function () { - var _69d = $.data(this, "propertygrid") - if (_69d) { - $.extend(_69d.options, _69a) - } else { - var opts = $.extend({}, $.fn.propertygrid.defaults, $.fn.propertygrid.parseOptions(this), _69a) - opts.frozenColumns = $.extend(true, [], opts.frozenColumns) - opts.columns = $.extend(true, [], opts.columns) - $.data(this, "propertygrid", { options: opts }) - } - _692(this) - }) - } - $.fn.propertygrid.methods = { - options: function (jq) { - return $.data(jq[0], "propertygrid").options - } - } - $.fn.propertygrid.parseOptions = function (_69e) { - var t = $(_69e) - return $.extend({}, $.fn.datagrid.parseOptions(_69e), $.parser.parseOptions(_69e, [{ showGroup: "boolean" }])) - } - var _695 = $.extend({}, $.fn.datagrid.defaults.view, { - render: function (_69f, _6a0, _6a1) { - var _6a2 = $.data(_69f, "datagrid") - var opts = _6a2.options - var rows = _6a2.data.rows - var _6a3 = $(_69f).datagrid("getColumnFields", _6a1) - var _6a4 = [] - var _6a5 = 0 - var _6a6 = this.groups - for (var i = 0; i < _6a6.length; i++) { - var _6a7 = _6a6[i] - _6a4.push('
            ') - _6a4.push('') - _6a4.push("") - _6a4.push('") - _6a4.push("") - _6a4.push("
            ') - if (!_6a1) { - _6a4.push('') - _6a4.push(opts.groupFormatter.call(_69f, _6a7.fvalue, _6a7.rows)) - _6a4.push("") - } - _6a4.push("
            ") - _6a4.push("
            ") - _6a4.push('') - for (var j = 0; j < _6a7.rows.length; j++) { - var cls = _6a5 % 2 && opts.striped ? 'class="datagrid-row datagrid-row-alt"' : 'class="datagrid-row"' - var _6a8 = opts.rowStyler ? opts.rowStyler.call(_69f, _6a5, _6a7.rows[j]) : "" - var _6a9 = _6a8 ? 'style="' + _6a8 + '"' : "" - var _6aa = _6a2.rowIdPrefix + "-" + (_6a1 ? 1 : 2) + "-" + _6a5 - _6a4.push('") - _6a4.push(this.renderRow.call(this, _69f, _6a3, _6a1, _6a5, _6a7.rows[j])) - _6a4.push("") - _6a5++ - } - _6a4.push("
            ") - } - $(_6a0).html(_6a4.join("")) - }, - onAfterRender: function (_6ab) { - var opts = $.data(_6ab, "datagrid").options - var dc = $.data(_6ab, "datagrid").dc - var view = dc.view - var _6ac = dc.view1 - var _6ad = dc.view2 - $.fn.datagrid.defaults.view.onAfterRender.call(this, _6ab) - if (opts.rownumbers || opts.frozenColumns.length) { - var _6ae = _6ac.find("div.datagrid-group") - } else { - var _6ae = _6ad.find("div.datagrid-group") - } - $( - ' ' - ).insertBefore(_6ae.find("td")) - view.find("div.datagrid-group").each(function () { - var _6af = $(this).attr("group-index") - $(this) - .find("span.datagrid-row-expander") - .bind("click", { groupIndex: _6af }, function (e) { - if ($(this).hasClass("datagrid-row-collapse")) { - $(_6ab).datagrid("collapseGroup", e.data.groupIndex) - } else { - $(_6ab).datagrid("expandGroup", e.data.groupIndex) - } - }) - }) - }, - onBeforeRender: function (_6b0, rows) { - var opts = $.data(_6b0, "datagrid").options - var _6b1 = [] - for (var i = 0; i < rows.length; i++) { - var row = rows[i] - var _6b2 = _6b3(row[opts.groupField]) - if (!_6b2) { - _6b2 = { fvalue: row[opts.groupField], rows: [row], startRow: i } - _6b1.push(_6b2) - } else { - _6b2.rows.push(row) - } - } - function _6b3(_6b4) { - for (var i = 0; i < _6b1.length; i++) { - var _6b5 = _6b1[i] - if (_6b5.fvalue == _6b4) { - return _6b5 - } - } - return null - } - this.groups = _6b1 - var _6b6 = [] - for (var i = 0; i < _6b1.length; i++) { - var _6b2 = _6b1[i] - for (var j = 0; j < _6b2.rows.length; j++) { - _6b6.push(_6b2.rows[j]) - } - } - $.data(_6b0, "datagrid").data.rows = _6b6 - } - }) - $.extend($.fn.datagrid.methods, { - expandGroup: function (jq, _6b7) { - return jq.each(function () { - var view = $.data(this, "datagrid").dc.view - if (_6b7 != undefined) { - var _6b8 = view.find('div.datagrid-group[group-index="' + _6b7 + '"]') - } else { - var _6b8 = view.find("div.datagrid-group") - } - var _6b9 = _6b8.find("span.datagrid-row-expander") - if (_6b9.hasClass("datagrid-row-expand")) { - _6b9.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse") - _6b8.next("table").show() - } - $(this).datagrid("fixRowHeight") - }) - }, - collapseGroup: function (jq, _6ba) { - return jq.each(function () { - var view = $.data(this, "datagrid").dc.view - if (_6ba != undefined) { - var _6bb = view.find('div.datagrid-group[group-index="' + _6ba + '"]') - } else { - var _6bb = view.find("div.datagrid-group") - } - var _6bc = _6bb.find("span.datagrid-row-expander") - if (_6bc.hasClass("datagrid-row-collapse")) { - _6bc.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand") - _6bb.next("table").hide() - } - $(this).datagrid("fixRowHeight") - }) - } - }) - $.fn.propertygrid.defaults = $.extend({}, $.fn.datagrid.defaults, { - singleSelect: true, - remoteSort: false, - fitColumns: true, - loadMsg: "", - frozenColumns: [[{ field: "f", width: 16, resizable: false }]], - columns: [ - [ - { field: "name", title: "Name", width: 100, sortable: true }, - { field: "value", title: "Value", width: 100, resizable: false } - ] - ], - showGroup: false, - groupField: "group", - groupFormatter: function (_6bd, rows) { - return _6bd - } - }) -})(jQuery) -;(function ($) { - function _6be(_6bf) { - var _6c0 = $.data(_6bf, "treegrid") - var opts = _6c0.options - $(_6bf).datagrid( - $.extend({}, opts, { - url: null, - data: null, - loader: function () { - return false - }, - onBeforeLoad: function () {}, - onLoadSuccess: function () {}, - onResizeColumn: function (_6c1, _6c2) { - _6d8(_6bf) - opts.onResizeColumn.call(_6bf, _6c1, _6c2) - }, - onSortColumn: function (sort, _6c3) { - opts.sortName = sort - opts.sortOrder = _6c3 - if (opts.remoteSort) { - _6d7(_6bf) - } else { - var data = $(_6bf).treegrid("getData") - _6ed(_6bf, 0, data) - } - opts.onSortColumn.call(_6bf, sort, _6c3) - }, - onBeforeEdit: function (_6c4, row) { - if (opts.onBeforeEdit.call(_6bf, row) == false) { - return false - } - }, - onAfterEdit: function (_6c5, row, _6c6) { - opts.onAfterEdit.call(_6bf, row, _6c6) - }, - onCancelEdit: function (_6c7, row) { - opts.onCancelEdit.call(_6bf, row) - }, - onSelect: function (_6c8) { - opts.onSelect.call(_6bf, find(_6bf, _6c8)) - }, - onUnselect: function (_6c9) { - opts.onUnselect.call(_6bf, find(_6bf, _6c9)) - }, - onSelectAll: function () { - opts.onSelectAll.call(_6bf, $.data(_6bf, "treegrid").data) - }, - onUnselectAll: function () { - opts.onUnselectAll.call(_6bf, $.data(_6bf, "treegrid").data) - }, - onCheck: function (_6ca) { - opts.onCheck.call(_6bf, find(_6bf, _6ca)) - }, - onUncheck: function (_6cb) { - opts.onUncheck.call(_6bf, find(_6bf, _6cb)) - }, - onCheckAll: function () { - opts.onCheckAll.call(_6bf, $.data(_6bf, "treegrid").data) - }, - onUncheckAll: function () { - opts.onUncheckAll.call(_6bf, $.data(_6bf, "treegrid").data) - }, - onClickRow: function (_6cc) { - opts.onClickRow.call(_6bf, find(_6bf, _6cc)) - }, - onDblClickRow: function (_6cd) { - opts.onDblClickRow.call(_6bf, find(_6bf, _6cd)) - }, - onClickCell: function (_6ce, _6cf) { - opts.onClickCell.call(_6bf, _6cf, find(_6bf, _6ce)) - }, - onDblClickCell: function (_6d0, _6d1) { - opts.onDblClickCell.call(_6bf, _6d1, find(_6bf, _6d0)) - }, - onRowContextMenu: function (e, _6d2) { - opts.onContextMenu.call(_6bf, e, find(_6bf, _6d2)) - } - }) - ) - if (!opts.columns) { - var _6d3 = $.data(_6bf, "datagrid").options - opts.columns = _6d3.columns - opts.frozenColumns = _6d3.frozenColumns - } - _6c0.dc = $.data(_6bf, "datagrid").dc - if (opts.pagination) { - var _6d4 = $(_6bf).datagrid("getPager") - _6d4.pagination({ - pageNumber: opts.pageNumber, - pageSize: opts.pageSize, - pageList: opts.pageList, - onSelectPage: function (_6d5, _6d6) { - opts.pageNumber = _6d5 - opts.pageSize = _6d6 - _6d7(_6bf) - } - }) - opts.pageSize = _6d4.pagination("options").pageSize - } - } - function _6d8(_6d9, _6da) { - var opts = $.data(_6d9, "datagrid").options - var dc = $.data(_6d9, "datagrid").dc - if (!dc.body1.is(":empty") && (!opts.nowrap || opts.autoRowHeight)) { - if (_6da != undefined) { - var _6db = _6dc(_6d9, _6da) - for (var i = 0; i < _6db.length; i++) { - _6dd(_6db[i][opts.idField]) - } - } - } - $(_6d9).datagrid("fixRowHeight", _6da) - function _6dd(_6de) { - var tr1 = opts.finder.getTr(_6d9, _6de, "body", 1) - var tr2 = opts.finder.getTr(_6d9, _6de, "body", 2) - tr1.css("height", "") - tr2.css("height", "") - var _6df = Math.max(tr1.height(), tr2.height()) - tr1.css("height", _6df) - tr2.css("height", _6df) - } - } - function _6e0(_6e1) { - var dc = $.data(_6e1, "datagrid").dc - var opts = $.data(_6e1, "treegrid").options - if (!opts.rownumbers) { - return - } - dc.body1.find("div.datagrid-cell-rownumber").each(function (i) { - $(this).html(i + 1) - }) - } - function _6e2(_6e3) { - var dc = $.data(_6e3, "datagrid").dc - var body = dc.body1.add(dc.body2) - var _6e4 = ($.data(body[0], "events") || $._data(body[0], "events")).click[0].handler - dc.body1 - .add(dc.body2) - .bind("mouseover", function (e) { - var tt = $(e.target) - var tr = tt.closest("tr.datagrid-row") - if (!tr.length) { - return - } - if (tt.hasClass("tree-hit")) { - tt.hasClass("tree-expanded") ? tt.addClass("tree-expanded-hover") : tt.addClass("tree-collapsed-hover") - } - e.stopPropagation() - }) - .bind("mouseout", function (e) { - var tt = $(e.target) - var tr = tt.closest("tr.datagrid-row") - if (!tr.length) { - return - } - if (tt.hasClass("tree-hit")) { - tt.hasClass("tree-expanded") ? tt.removeClass("tree-expanded-hover") : tt.removeClass("tree-collapsed-hover") - } - e.stopPropagation() - }) - .unbind("click") - .bind("click", function (e) { - var tt = $(e.target) - var tr = tt.closest("tr.datagrid-row") - if (!tr.length) { - return - } - if (tt.hasClass("tree-hit")) { - _6e5(_6e3, tr.attr("node-id")) - } else { - _6e4(e) - } - e.stopPropagation() - }) - } - function _6e6(_6e7, _6e8) { - var opts = $.data(_6e7, "treegrid").options - var tr1 = opts.finder.getTr(_6e7, _6e8, "body", 1) - var tr2 = opts.finder.getTr(_6e7, _6e8, "body", 2) - var _6e9 = $(_6e7).datagrid("getColumnFields", true).length + (opts.rownumbers ? 1 : 0) - var _6ea = $(_6e7).datagrid("getColumnFields", false).length - _6eb(tr1, _6e9) - _6eb(tr2, _6ea) - function _6eb(tr, _6ec) { - $('' + '' + "
            " + "" + "").insertAfter(tr) - } - } - function _6ed(_6ee, _6ef, data, _6f0) { - var _6f1 = $.data(_6ee, "treegrid") - var opts = _6f1.options - var dc = _6f1.dc - data = opts.loadFilter.call(_6ee, data, _6ef) - var node = find(_6ee, _6ef) - if (node) { - var _6f2 = opts.finder.getTr(_6ee, _6ef, "body", 1) - var _6f3 = opts.finder.getTr(_6ee, _6ef, "body", 2) - var cc1 = _6f2.next("tr.treegrid-tr-tree").children("td").children("div") - var cc2 = _6f3.next("tr.treegrid-tr-tree").children("td").children("div") - if (!_6f0) { - node.children = [] - } - } else { - var cc1 = dc.body1 - var cc2 = dc.body2 - if (!_6f0) { - _6f1.data = [] - } - } - if (!_6f0) { - cc1.empty() - cc2.empty() - } - if (opts.view.onBeforeRender) { - opts.view.onBeforeRender.call(opts.view, _6ee, _6ef, data) - } - opts.view.render.call(opts.view, _6ee, cc1, true) - opts.view.render.call(opts.view, _6ee, cc2, false) - if (opts.showFooter) { - opts.view.renderFooter.call(opts.view, _6ee, dc.footer1, true) - opts.view.renderFooter.call(opts.view, _6ee, dc.footer2, false) - } - if (opts.view.onAfterRender) { - opts.view.onAfterRender.call(opts.view, _6ee) - } - opts.onLoadSuccess.call(_6ee, node, data) - if (!_6ef && opts.pagination) { - var _6f4 = $.data(_6ee, "treegrid").total - var _6f5 = $(_6ee).datagrid("getPager") - if (_6f5.pagination("options").total != _6f4) { - _6f5.pagination({ total: _6f4 }) - } - } - _6d8(_6ee) - _6e0(_6ee) - $(_6ee).treegrid("autoSizeColumn") - } - function _6d7(_6f6, _6f7, _6f8, _6f9, _6fa) { - var opts = $.data(_6f6, "treegrid").options - var body = $(_6f6).datagrid("getPanel").find("div.datagrid-body") - if (_6f8) { - opts.queryParams = _6f8 - } - var _6fb = $.extend({}, opts.queryParams) - if (opts.pagination) { - $.extend(_6fb, { page: opts.pageNumber, rows: opts.pageSize }) - } - if (opts.sortName) { - $.extend(_6fb, { sort: opts.sortName, order: opts.sortOrder }) - } - var row = find(_6f6, _6f7) - if (opts.onBeforeLoad.call(_6f6, row, _6fb) == false) { - return - } - var _6fc = body.find("tr[node-id=" + _6f7 + "] span.tree-folder") - _6fc.addClass("tree-loading") - $(_6f6).treegrid("loading") - var _6fd = opts.loader.call( - _6f6, - _6fb, - function (data) { - _6fc.removeClass("tree-loading") - $(_6f6).treegrid("loaded") - _6ed(_6f6, _6f7, data, _6f9) - if (_6fa) { - _6fa() - } - }, - function () { - _6fc.removeClass("tree-loading") - $(_6f6).treegrid("loaded") - opts.onLoadError.apply(_6f6, arguments) - if (_6fa) { - _6fa() - } - } - ) - if (_6fd == false) { - _6fc.removeClass("tree-loading") - $(_6f6).treegrid("loaded") - } - } - function _6fe(_6ff) { - var rows = _700(_6ff) - if (rows.length) { - return rows[0] - } else { - return null - } - } - function _700(_701) { - return $.data(_701, "treegrid").data - } - function _702(_703, _704) { - var row = find(_703, _704) - if (row._parentId) { - return find(_703, row._parentId) - } else { - return null - } - } - function _6dc(_705, _706) { - var opts = $.data(_705, "treegrid").options - var body = $(_705).datagrid("getPanel").find("div.datagrid-view2 div.datagrid-body") - var _707 = [] - if (_706) { - _708(_706) - } else { - var _709 = _700(_705) - for (var i = 0; i < _709.length; i++) { - _707.push(_709[i]) - _708(_709[i][opts.idField]) - } - } - function _708(_70a) { - var _70b = find(_705, _70a) - if (_70b && _70b.children) { - for (var i = 0, len = _70b.children.length; i < len; i++) { - var _70c = _70b.children[i] - _707.push(_70c) - _708(_70c[opts.idField]) - } - } - } - return _707 - } - function _70d(_70e) { - var rows = _70f(_70e) - if (rows.length) { - return rows[0] - } else { - return null - } - } - function _70f(_710) { - var rows = [] - var _711 = $(_710).datagrid("getPanel") - _711.find("div.datagrid-view2 div.datagrid-body tr.datagrid-row-selected").each(function () { - var id = $(this).attr("node-id") - rows.push(find(_710, id)) - }) - return rows - } - function _712(_713, _714) { - if (!_714) { - return 0 - } - var opts = $.data(_713, "treegrid").options - var view = $(_713).datagrid("getPanel").children("div.datagrid-view") - var node = view.find("div.datagrid-body tr[node-id=" + _714 + "]").children("td[field=" + opts.treeField + "]") - return node.find("span.tree-indent,span.tree-hit").length - } - function find(_715, _716) { - var opts = $.data(_715, "treegrid").options - var data = $.data(_715, "treegrid").data - var cc = [data] - while (cc.length) { - var c = cc.shift() - for (var i = 0; i < c.length; i++) { - var node = c[i] - if (node[opts.idField] == _716) { - return node - } else { - if (node["children"]) { - cc.push(node["children"]) - } - } - } - } - return null - } - function _717(_718, _719) { - var opts = $.data(_718, "treegrid").options - var row = find(_718, _719) - var tr = opts.finder.getTr(_718, _719) - var hit = tr.find("span.tree-hit") - if (hit.length == 0) { - return - } - if (hit.hasClass("tree-collapsed")) { - return - } - if (opts.onBeforeCollapse.call(_718, row) == false) { - return - } - hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed") - hit.next().removeClass("tree-folder-open") - row.state = "closed" - tr = tr.next("tr.treegrid-tr-tree") - var cc = tr.children("td").children("div") - if (opts.animate) { - cc.slideUp("normal", function () { - $(_718).treegrid("autoSizeColumn") - _6d8(_718, _719) - opts.onCollapse.call(_718, row) - }) - } else { - cc.hide() - $(_718).treegrid("autoSizeColumn") - _6d8(_718, _719) - opts.onCollapse.call(_718, row) - } - } - function _71a(_71b, _71c) { - var opts = $.data(_71b, "treegrid").options - var tr = opts.finder.getTr(_71b, _71c) - var hit = tr.find("span.tree-hit") - var row = find(_71b, _71c) - if (hit.length == 0) { - return - } - if (hit.hasClass("tree-expanded")) { - return - } - if (opts.onBeforeExpand.call(_71b, row) == false) { - return - } - hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded") - hit.next().addClass("tree-folder-open") - var _71d = tr.next("tr.treegrid-tr-tree") - if (_71d.length) { - var cc = _71d.children("td").children("div") - _71e(cc) - } else { - _6e6(_71b, row[opts.idField]) - var _71d = tr.next("tr.treegrid-tr-tree") - var cc = _71d.children("td").children("div") - cc.hide() - _6d7(_71b, row[opts.idField], { id: row[opts.idField] }, true, function () { - if (cc.is(":empty")) { - _71d.remove() - } else { - _71e(cc) - } - }) - } - function _71e(cc) { - row.state = "open" - if (opts.animate) { - cc.slideDown("normal", function () { - $(_71b).treegrid("autoSizeColumn") - _6d8(_71b, _71c) - opts.onExpand.call(_71b, row) - }) - } else { - cc.show() - $(_71b).treegrid("autoSizeColumn") - _6d8(_71b, _71c) - opts.onExpand.call(_71b, row) - } - } - } - function _6e5(_71f, _720) { - var opts = $.data(_71f, "treegrid").options - var tr = opts.finder.getTr(_71f, _720) - var hit = tr.find("span.tree-hit") - if (hit.hasClass("tree-expanded")) { - _717(_71f, _720) - } else { - _71a(_71f, _720) - } - } - function _721(_722, _723) { - var opts = $.data(_722, "treegrid").options - var _724 = _6dc(_722, _723) - if (_723) { - _724.unshift(find(_722, _723)) - } - for (var i = 0; i < _724.length; i++) { - _717(_722, _724[i][opts.idField]) - } - } - function _725(_726, _727) { - var opts = $.data(_726, "treegrid").options - var _728 = _6dc(_726, _727) - if (_727) { - _728.unshift(find(_726, _727)) - } - for (var i = 0; i < _728.length; i++) { - _71a(_726, _728[i][opts.idField]) - } - } - function _729(_72a, _72b) { - var opts = $.data(_72a, "treegrid").options - var ids = [] - var p = _702(_72a, _72b) - while (p) { - var id = p[opts.idField] - ids.unshift(id) - p = _702(_72a, id) - } - for (var i = 0; i < ids.length; i++) { - _71a(_72a, ids[i]) - } - } - function _72c(_72d, _72e) { - var opts = $.data(_72d, "treegrid").options - if (_72e.parent) { - var tr = opts.finder.getTr(_72d, _72e.parent) - if (tr.next("tr.treegrid-tr-tree").length == 0) { - _6e6(_72d, _72e.parent) - } - var cell = tr.children("td[field=" + opts.treeField + "]").children("div.datagrid-cell") - var _72f = cell.children("span.tree-icon") - if (_72f.hasClass("tree-file")) { - _72f.removeClass("tree-file").addClass("tree-folder tree-folder-open") - var hit = $('').insertBefore(_72f) - if (hit.prev().length) { - hit.prev().remove() - } - } - } - _6ed(_72d, _72e.parent, _72e.data, true) - } - function _730(_731, _732) { - var ref = _732.before || _732.after - var opts = $.data(_731, "treegrid").options - var _733 = _702(_731, ref) - _72c(_731, { parent: _733 ? _733[opts.idField] : null, data: [_732.data] }) - _734(true) - _734(false) - _6e0(_731) - function _734(_735) { - var _736 = _735 ? 1 : 2 - var tr = opts.finder.getTr(_731, _732.data[opts.idField], "body", _736) - var _737 = tr.closest("table.datagrid-btable") - tr = tr.parent().children() - var dest = opts.finder.getTr(_731, ref, "body", _736) - if (_732.before) { - tr.insertBefore(dest) - } else { - var sub = dest.next("tr.treegrid-tr-tree") - tr.insertAfter(sub.length ? sub : dest) - } - _737.remove() - } - } - function _738(_739, _73a) { - var opts = $.data(_739, "treegrid").options - var tr = opts.finder.getTr(_739, _73a) - tr.next("tr.treegrid-tr-tree").remove() - tr.remove() - var _73b = del(_73a) - if (_73b) { - if (_73b.children.length == 0) { - tr = opts.finder.getTr(_739, _73b[opts.idField]) - tr.next("tr.treegrid-tr-tree").remove() - var cell = tr.children("td[field=" + opts.treeField + "]").children("div.datagrid-cell") - cell.find(".tree-icon").removeClass("tree-folder").addClass("tree-file") - cell.find(".tree-hit").remove() - $('').prependTo(cell) - } - } - _6e0(_739) - function del(id) { - var cc - var _73c = _702(_739, _73a) - if (_73c) { - cc = _73c.children - } else { - cc = $(_739).treegrid("getData") - } - for (var i = 0; i < cc.length; i++) { - if (cc[i][opts.idField] == id) { - cc.splice(i, 1) - break - } - } - return _73c - } - } - $.fn.treegrid = function (_73d, _73e) { - if (typeof _73d == "string") { - var _73f = $.fn.treegrid.methods[_73d] - if (_73f) { - return _73f(this, _73e) - } else { - return this.datagrid(_73d, _73e) - } - } - _73d = _73d || {} - return this.each(function () { - var _740 = $.data(this, "treegrid") - if (_740) { - $.extend(_740.options, _73d) - } else { - _740 = $.data(this, "treegrid", { options: $.extend({}, $.fn.treegrid.defaults, $.fn.treegrid.parseOptions(this), _73d), data: [] }) - } - _6be(this) - if (_740.options.data) { - $(this).treegrid("loadData", _740.options.data) - } - _6d7(this) - _6e2(this) - }) - } - $.fn.treegrid.methods = { - options: function (jq) { - return $.data(jq[0], "treegrid").options - }, - resize: function (jq, _741) { - return jq.each(function () { - $(this).datagrid("resize", _741) - }) - }, - fixRowHeight: function (jq, _742) { - return jq.each(function () { - _6d8(this, _742) - }) - }, - loadData: function (jq, data) { - return jq.each(function () { - _6ed(this, data.parent, data) - }) - }, - reload: function (jq, id) { - return jq.each(function () { - if (id) { - var node = $(this).treegrid("find", id) - if (node.children) { - node.children.splice(0, node.children.length) - } - var body = $(this).datagrid("getPanel").find("div.datagrid-body") - var tr = body.find("tr[node-id=" + id + "]") - tr.next("tr.treegrid-tr-tree").remove() - var hit = tr.find("span.tree-hit") - hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed") - _71a(this, id) - } else { - _6d7(this, null, {}) - } - }) - }, - reloadFooter: function (jq, _743) { - return jq.each(function () { - var opts = $.data(this, "treegrid").options - var dc = $.data(this, "datagrid").dc - if (_743) { - $.data(this, "treegrid").footer = _743 - } - if (opts.showFooter) { - opts.view.renderFooter.call(opts.view, this, dc.footer1, true) - opts.view.renderFooter.call(opts.view, this, dc.footer2, false) - if (opts.view.onAfterRender) { - opts.view.onAfterRender.call(opts.view, this) - } - $(this).treegrid("fixRowHeight") - } - }) - }, - getData: function (jq) { - return $.data(jq[0], "treegrid").data - }, - getFooterRows: function (jq) { - return $.data(jq[0], "treegrid").footer - }, - getRoot: function (jq) { - return _6fe(jq[0]) - }, - getRoots: function (jq) { - return _700(jq[0]) - }, - getParent: function (jq, id) { - return _702(jq[0], id) - }, - getChildren: function (jq, id) { - return _6dc(jq[0], id) - }, - getSelected: function (jq) { - return _70d(jq[0]) - }, - getSelections: function (jq) { - return _70f(jq[0]) - }, - getLevel: function (jq, id) { - return _712(jq[0], id) - }, - find: function (jq, id) { - return find(jq[0], id) - }, - isLeaf: function (jq, id) { - var opts = $.data(jq[0], "treegrid").options - var tr = opts.finder.getTr(jq[0], id) - var hit = tr.find("span.tree-hit") - return hit.length == 0 - }, - select: function (jq, id) { - return jq.each(function () { - $(this).datagrid("selectRow", id) - }) - }, - unselect: function (jq, id) { - return jq.each(function () { - $(this).datagrid("unselectRow", id) - }) - }, - collapse: function (jq, id) { - return jq.each(function () { - _717(this, id) - }) - }, - expand: function (jq, id) { - return jq.each(function () { - _71a(this, id) - }) - }, - toggle: function (jq, id) { - return jq.each(function () { - _6e5(this, id) - }) - }, - collapseAll: function (jq, id) { - return jq.each(function () { - _721(this, id) - }) - }, - expandAll: function (jq, id) { - return jq.each(function () { - _725(this, id) - }) - }, - expandTo: function (jq, id) { - return jq.each(function () { - _729(this, id) - }) - }, - append: function (jq, _744) { - return jq.each(function () { - _72c(this, _744) - }) - }, - insert: function (jq, _745) { - return jq.each(function () { - _730(this, _745) - }) - }, - remove: function (jq, id) { - return jq.each(function () { - _738(this, id) - }) - }, - pop: function (jq, id) { - var row = jq.treegrid("find", id) - jq.treegrid("remove", id) - return row - }, - refresh: function (jq, id) { - return jq.each(function () { - var opts = $.data(this, "treegrid").options - opts.view.refreshRow.call(opts.view, this, id) - }) - }, - update: function (jq, _746) { - return jq.each(function () { - var opts = $.data(this, "treegrid").options - opts.view.updateRow.call(opts.view, this, _746.id, _746.row) - }) - }, - beginEdit: function (jq, id) { - return jq.each(function () { - $(this).datagrid("beginEdit", id) - $(this).treegrid("fixRowHeight", id) - }) - }, - endEdit: function (jq, id) { - return jq.each(function () { - $(this).datagrid("endEdit", id) - }) - }, - cancelEdit: function (jq, id) { - return jq.each(function () { - $(this).datagrid("cancelEdit", id) - }) - } - } - $.fn.treegrid.parseOptions = function (_747) { - return $.extend({}, $.fn.datagrid.parseOptions(_747), $.parser.parseOptions(_747, ["treeField", { animate: "boolean" }])) - } - var _748 = $.extend({}, $.fn.datagrid.defaults.view, { - render: function (_749, _74a, _74b) { - var opts = $.data(_749, "treegrid").options - var _74c = $(_749).datagrid("getColumnFields", _74b) - var _74d = $.data(_749, "datagrid").rowIdPrefix - if (_74b) { - if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))) { - return - } - } - var _74e = 0 - var view = this - var _74f = _750(_74b, this.treeLevel, this.treeNodes) - $(_74a).append(_74f.join("")) - function _750(_751, _752, _753) { - var _754 = [''] - for (var i = 0; i < _753.length; i++) { - var row = _753[i] - if (row.state != "open" && row.state != "closed") { - row.state = "open" - } - var cls = _74e++ % 2 && opts.striped ? 'class="datagrid-row datagrid-row-alt"' : 'class="datagrid-row"' - var _755 = opts.rowStyler ? opts.rowStyler.call(_749, row) : "" - var _756 = _755 ? 'style="' + _755 + '"' : "" - var _757 = _74d + "-" + (_751 ? 1 : 2) + "-" + row[opts.idField] - _754.push('") - _754 = _754.concat(view.renderRow.call(view, _749, _74c, _751, _752, row)) - _754.push("") - if (row.children && row.children.length) { - var tt = _750(_751, _752 + 1, row.children) - var v = row.state == "closed" ? "none" : "block" - _754.push( - '") - } - } - _754.push("
            ' - ) - _754 = _754.concat(tt) - _754.push("
            ") - return _754 - } - }, - renderFooter: function (_758, _759, _75a) { - var opts = $.data(_758, "treegrid").options - var rows = $.data(_758, "treegrid").footer || [] - var _75b = $(_758).datagrid("getColumnFields", _75a) - var _75c = [''] - for (var i = 0; i < rows.length; i++) { - var row = rows[i] - row[opts.idField] = row[opts.idField] || "foot-row-id" + i - _75c.push('
            0
            ') - } - for (var i = 0; i < _75e.length; i++) { - var _761 = _75e[i] - var col = $(_75d).datagrid("getColumnOption", _761) - if (col) { - var _762 = col.styler ? col.styler(row[_761], row) || "" : "" - var _763 = col.hidden ? 'style="display:none;' + _762 + '"' : _762 ? 'style="' + _762 + '"' : "" - cc.push('") - } - } - return cc.join("") - }, - refreshRow: function (_764, id) { - this.updateRow.call(this, _764, id, {}) - }, - updateRow: function (_765, id, row) { - var opts = $.data(_765, "treegrid").options - var _766 = $(_765).treegrid("find", id) - $.extend(_766, row) - var _767 = $(_765).treegrid("getLevel", id) - 1 - var _768 = opts.rowStyler ? opts.rowStyler.call(_765, _766) : "" - function _769(_76a) { - var _76b = $(_765).treegrid("getColumnFields", _76a) - var tr = opts.finder.getTr(_765, id, "body", _76a ? 1 : 2) - var _76c = tr.find("div.datagrid-cell-rownumber").html() - var _76d = tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked") - tr.html(this.renderRow(_765, _76b, _76a, _767, _766)) - tr.attr("style", _768 || "") - tr.find("div.datagrid-cell-rownumber").html(_76c) - if (_76d) { - tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked", true) - } - } - _769.call(this, true) - _769.call(this, false) - $(_765).treegrid("fixRowHeight", id) - }, - onBeforeRender: function (_76e, _76f, data) { - if ($.isArray(_76f)) { - data = { total: _76f.length, rows: _76f } - _76f = null - } - if (!data) { - return false - } - var _770 = $.data(_76e, "treegrid") - var opts = _770.options - if (data.length == undefined) { - if (data.footer) { - _770.footer = data.footer - } - if (data.total) { - _770.total = data.total - } - data = this.transfer(_76e, _76f, data.rows) - } else { - function _771(_772, _773) { - for (var i = 0; i < _772.length; i++) { - var row = _772[i] - row._parentId = _773 - if (row.children && row.children.length) { - _771(row.children, row[opts.idField]) - } - } - } - _771(data, _76f) - } - var node = find(_76e, _76f) - if (node) { - if (node.children) { - node.children = node.children.concat(data) - } else { - node.children = data - } - } else { - _770.data = _770.data.concat(data) - } - if (!opts.remoteSort) { - this.sort(_76e, data) - } - this.treeNodes = data - this.treeLevel = $(_76e).treegrid("getLevel", _76f) - }, - sort: function (_774, data) { - var opts = $.data(_774, "treegrid").options - var opt = $(_774).treegrid("getColumnOption", opts.sortName) - if (opt) { - var _775 = - opt.sorter || - function (a, b) { - return a > b ? 1 : -1 - } - _776(data) - } - function _776(rows) { - rows.sort(function (r1, r2) { - return _775(r1[opts.sortName], r2[opts.sortName]) * (opts.sortOrder == "asc" ? 1 : -1) - }) - for (var i = 0; i < rows.length; i++) { - var _777 = rows[i].children - if (_777 && _777.length) { - _776(_777) - } - } - } - }, - transfer: function (_778, _779, data) { - var opts = $.data(_778, "treegrid").options - var rows = [] - for (var i = 0; i < data.length; i++) { - rows.push(data[i]) - } - var _77a = [] - for (var i = 0; i < rows.length; i++) { - var row = rows[i] - if (!_779) { - if (!row._parentId) { - _77a.push(row) - rows.splice(i, 1) - i-- - } - } else { - if (row._parentId == _779) { - _77a.push(row) - rows.splice(i, 1) - i-- - } - } - } - var toDo = [] - for (var i = 0; i < _77a.length; i++) { - toDo.push(_77a[i]) - } - while (toDo.length) { - var node = toDo.shift() - for (var i = 0; i < rows.length; i++) { - var row = rows[i] - if (row._parentId == node[opts.idField]) { - if (node.children) { - node.children.push(row) - } else { - node.children = [row] - } - toDo.push(row) - rows.splice(i, 1) - i-- - } - } - } - return _77a - } - }) - $.fn.treegrid.defaults = $.extend({}, $.fn.datagrid.defaults, { - treeField: null, - animate: false, - singleSelect: true, - view: _748, - loader: function (_77b, _77c, _77d) { - var opts = $(this).treegrid("options") - if (!opts.url) { - return false - } - $.ajax({ - type: opts.method, - url: opts.url, - data: _77b, - dataType: "json", - success: function (data) { - _77c(data) - }, - error: function () { - _77d.apply(this, arguments) - } - }) - }, - loadFilter: function (data, _77e) { - return data - }, - finder: { - getTr: function (_77f, id, type, _780) { - type = type || "body" - _780 = _780 || 0 - var dc = $.data(_77f, "datagrid").dc - if (_780 == 0) { - var opts = $.data(_77f, "treegrid").options - var tr1 = opts.finder.getTr(_77f, id, type, 1) - var tr2 = opts.finder.getTr(_77f, id, type, 2) - return tr1.add(tr2) - } else { - if (type == "body") { - var tr = $("#" + $.data(_77f, "datagrid").rowIdPrefix + "-" + _780 + "-" + id) - if (!tr.length) { - tr = (_780 == 1 ? dc.body1 : dc.body2).find("tr[node-id=" + id + "]") - } - return tr - } else { - if (type == "footer") { - return (_780 == 1 ? dc.footer1 : dc.footer2).find("tr[node-id=" + id + "]") - } else { - if (type == "selected") { - return (_780 == 1 ? dc.body1 : dc.body2).find("tr.datagrid-row-selected") - } else { - if (type == "highlight") { - return (_780 == 1 ? dc.body1 : dc.body2).find("tr.datagrid-row-over") - } else { - if (type == "checked") { - return (_780 == 1 ? dc.body1 : dc.body2).find("tr.datagrid-row:has(div.datagrid-cell-check input:checked)") - } else { - if (type == "last") { - return (_780 == 1 ? dc.body1 : dc.body2).find("tr:last[node-id]") - } else { - if (type == "allbody") { - return (_780 == 1 ? dc.body1 : dc.body2).find("tr[node-id]") - } else { - if (type == "allfooter") { - return (_780 == 1 ? dc.footer1 : dc.footer2).find("tr[node-id]") - } - } - } - } - } - } - } - } - } - }, - getRow: function (_781, p) { - var id = typeof p == "object" ? p.attr("node-id") : p - return $(_781).treegrid("find", id) - } - }, - onBeforeLoad: function (row, _782) {}, - onLoadSuccess: function (row, data) {}, - onLoadError: function () {}, - onBeforeCollapse: function (row) {}, - onCollapse: function (row) {}, - onBeforeExpand: function (row) {}, - onExpand: function (row) {}, - onClickRow: function (row) {}, - onDblClickRow: function (row) {}, - onClickCell: function (_783, row) {}, - onDblClickCell: function (_784, row) {}, - onContextMenu: function (e, row) {}, - onBeforeEdit: function (row) {}, - onAfterEdit: function (row, _785) {}, - onCancelEdit: function (row) {} - }) -})(jQuery) -;(function ($) { - function _786(_787, _788) { - var opts = $.data(_787, "combo").options - var _789 = $.data(_787, "combo").combo - var _78a = $.data(_787, "combo").panel - if (_788) { - opts.width = _788 - } - if (isNaN(opts.width)) { - var c = $(_787).clone() - c.css("visibility", "hidden") - c.appendTo("body") - opts.width = c.outerWidth() - c.remove() - } - _789.appendTo("body") - var _78b = _789.find("input.combo-text") - var _78c = _789.find(".combo-arrow") - var _78d = opts.hasDownArrow ? _78c._outerWidth() : 0 - _789._outerWidth(opts.width)._outerHeight(opts.height) - _78b._outerWidth(_789.width() - _78d) - _78b.css({ height: _789.height() + "px", lineHeight: _789.height() + "px" }) - _78c._outerHeight(_789.height()) - _78a.panel("resize", { width: opts.panelWidth ? opts.panelWidth : _789.outerWidth(), height: opts.panelHeight }) - _789.insertAfter(_787) - } - function init(_78e) { - $(_78e).addClass("combo-f").hide() - var span = $('').insertAfter(_78e) - var _78f = $('').appendTo(span) - $('').appendTo(span) - $('').appendTo(span) - var _790 = $('
            ').appendTo("body") - _790.panel({ - doSize: false, - closed: true, - cls: "combo-p", - style: { position: "absolute", zIndex: 10 }, - onOpen: function () { - $(this).panel("resize") - }, - onClose: function () { - var _791 = $.data(_78e, "combo") - if (_791) { - _791.options.onHidePanel.call(_78e) - } - } - }) - var name = $(_78e).attr("name") - if (name) { - span.find("input.combo-value").attr("name", name) - $(_78e).removeAttr("name").attr("comboName", name) - } - _78f.attr("autocomplete", "off") - return { combo: span, panel: _790 } - } - function _792(_793) { - var _794 = $.data(_793, "combo") - var opts = _794.options - var _795 = _794.combo - if (opts.hasDownArrow) { - _795.find(".combo-arrow").show() - } else { - _795.find(".combo-arrow").hide() - } - _796(_793, opts.disabled) - _797(_793, opts.readonly) - } - function _798(_799) { - var _79a = $.data(_799, "combo") - var _79b = _79a.combo.find("input.combo-text") - _79b.validatebox("destroy") - _79a.panel.panel("destroy") - _79a.combo.remove() - $(_799).remove() - } - function _79c(_79d) { - var _79e = $.data(_79d, "combo") - var opts = _79e.options - var _79f = _79e.panel - var _7a0 = _79e.combo - var _7a1 = _7a0.find(".combo-text") - var _7a2 = _7a0.find(".combo-arrow") - $(document) - .unbind(".combo") - .bind("mousedown.combo", function (e) { - var p = $(e.target).closest("span.combo,div.combo-panel") - if (p.length) { - return - } - $("body>div.combo-p>div.combo-panel:visible").panel("close") - }) - _7a1.unbind(".combo") - _7a2.unbind(".combo") - if (!opts.disabled && !opts.readonly) { - _7a1.bind("mousedown.combo", function (e) { - $("div.combo-panel").not(_79f).panel("close") - e.stopPropagation() - }).bind("keydown.combo", function (e) { - switch (e.keyCode) { - case 38: - opts.keyHandler.up.call(_79d) - break - case 40: - opts.keyHandler.down.call(_79d) - break - case 13: - e.preventDefault() - opts.keyHandler.enter.call(_79d) - return false - case 9: - case 27: - _7a9(_79d) - break - default: - if (opts.editable) { - if (_79e.timer) { - clearTimeout(_79e.timer) - } - _79e.timer = setTimeout(function () { - var q = _7a1.val() - if (_79e.previousValue != q) { - _79e.previousValue = q - $(_79d).combo("showPanel") - opts.keyHandler.query.call(_79d, _7a1.val()) - _7ac(_79d, true) - } - }, opts.delay) - } - } - }) - _7a2.bind("click.combo", function () { - if (_79f.is(":visible")) { - _7a9(_79d) - } else { - $("div.combo-panel:visible").panel("close") - $(_79d).combo("showPanel") - } - _7a1.focus() - }) - .bind("mouseenter.combo", function () { - $(this).addClass("combo-arrow-hover") - }) - .bind("mouseleave.combo", function () { - $(this).removeClass("combo-arrow-hover") - }) - } - } - function _7a3(_7a4) { - var opts = $.data(_7a4, "combo").options - var _7a5 = $.data(_7a4, "combo").combo - var _7a6 = $.data(_7a4, "combo").panel - if ($.fn.window) { - _7a6.panel("panel").css("z-index", $.fn.window.defaults.zIndex++) - } - _7a6.panel("move", { left: _7a5.offset().left, top: _7a7() }) - if (_7a6.panel("options").closed) { - _7a6.panel("open") - opts.onShowPanel.call(_7a4) - } - ;(function () { - if (_7a6.is(":visible")) { - _7a6.panel("move", { left: _7a8(), top: _7a7() }) - setTimeout(arguments.callee, 200) - } - })() - function _7a8() { - var left = _7a5.offset().left - if (left + _7a6._outerWidth() > $(window)._outerWidth() + $(document).scrollLeft()) { - left = $(window)._outerWidth() + $(document).scrollLeft() - _7a6._outerWidth() - } - if (left < 0) { - left = 0 - } - return left - } - function _7a7() { - var top = _7a5.offset().top + _7a5._outerHeight() - if (top + _7a6._outerHeight() > $(window)._outerHeight() + $(document).scrollTop()) { - top = _7a5.offset().top - _7a6._outerHeight() - } - if (top < $(document).scrollTop()) { - top = _7a5.offset().top + _7a5._outerHeight() - } - return top - } - } - function _7a9(_7aa) { - var _7ab = $.data(_7aa, "combo").panel - _7ab.panel("close") - } - function _7ac(_7ad, doit) { - var opts = $.data(_7ad, "combo").options - var _7ae = $.data(_7ad, "combo").combo.find("input.combo-text") - _7ae.validatebox($.extend({}, opts, { deltaX: opts.hasDownArrow ? opts.deltaX : opts.deltaX > 0 ? 1 : -1 })) - if (doit) { - _7ae.validatebox("validate") - } - } - function _796(_7af, _7b0) { - var _7b1 = $.data(_7af, "combo") - var opts = _7b1.options - var _7b2 = _7b1.combo - if (_7b0) { - opts.disabled = true - $(_7af).attr("disabled", true) - _7b2.find(".combo-value").attr("disabled", true) - _7b2.find(".combo-text").attr("disabled", true) - } else { - opts.disabled = false - $(_7af).removeAttr("disabled") - _7b2.find(".combo-value").removeAttr("disabled") - _7b2.find(".combo-text").removeAttr("disabled") - } - } - function _797(_7b3, mode) { - var _7b4 = $.data(_7b3, "combo") - var opts = _7b4.options - opts.readonly = mode == undefined ? true : mode - _7b4.combo.find(".combo-text").attr("readonly", opts.readonly ? true : !opts.editable) - } - function _7b5(_7b6) { - var _7b7 = $.data(_7b6, "combo") - var opts = _7b7.options - var _7b8 = _7b7.combo - if (opts.multiple) { - _7b8.find("input.combo-value").remove() - } else { - _7b8.find("input.combo-value").val("") - } - _7b8.find("input.combo-text").val("") - } - function _7b9(_7ba) { - var _7bb = $.data(_7ba, "combo").combo - return _7bb.find("input.combo-text").val() - } - function _7bc(_7bd, text) { - var _7be = $.data(_7bd, "combo").combo - _7be.find("input.combo-text").val(text) - _7ac(_7bd, true) - $.data(_7bd, "combo").previousValue = text - } - function _7bf(_7c0) { - var _7c1 = [] - var _7c2 = $.data(_7c0, "combo").combo - _7c2.find("input.combo-value").each(function () { - _7c1.push($(this).val()) - }) - return _7c1 - } - function _7c3(_7c4, _7c5) { - var opts = $.data(_7c4, "combo").options - var _7c6 = _7bf(_7c4) - var _7c7 = $.data(_7c4, "combo").combo - _7c7.find("input.combo-value").remove() - var name = $(_7c4).attr("comboName") - for (var i = 0; i < _7c5.length; i++) { - var _7c8 = $('').appendTo(_7c7) - if (name) { - _7c8.attr("name", name) - } - _7c8.val(_7c5[i]) - } - var tmp = [] - for (var i = 0; i < _7c6.length; i++) { - tmp[i] = _7c6[i] - } - var aa = [] - for (var i = 0; i < _7c5.length; i++) { - for (var j = 0; j < tmp.length; j++) { - if (_7c5[i] == tmp[j]) { - aa.push(_7c5[i]) - tmp.splice(j, 1) - break - } - } - } - if (aa.length != _7c5.length || _7c5.length != _7c6.length) { - if (opts.multiple) { - opts.onChange.call(_7c4, _7c5, _7c6) - } else { - opts.onChange.call(_7c4, _7c5[0], _7c6[0]) - } - } - } - function _7c9(_7ca) { - var _7cb = _7bf(_7ca) - return _7cb[0] - } - function _7cc(_7cd, _7ce) { - _7c3(_7cd, [_7ce]) - } - function _7cf(_7d0) { - var opts = $.data(_7d0, "combo").options - var fn = opts.onChange - opts.onChange = function () {} - if (opts.multiple) { - if (opts.value) { - if (typeof opts.value == "object") { - _7c3(_7d0, opts.value) - } else { - _7cc(_7d0, opts.value) - } - } else { - _7c3(_7d0, []) - } - opts.originalValue = _7bf(_7d0) - } else { - _7cc(_7d0, opts.value) - opts.originalValue = opts.value - } - opts.onChange = fn - } - $.fn.combo = function (_7d1, _7d2) { - if (typeof _7d1 == "string") { - return $.fn.combo.methods[_7d1](this, _7d2) - } - _7d1 = _7d1 || {} - return this.each(function () { - var _7d3 = $.data(this, "combo") - if (_7d3) { - $.extend(_7d3.options, _7d1) - } else { - var r = init(this) - _7d3 = $.data(this, "combo", { - options: $.extend({}, $.fn.combo.defaults, $.fn.combo.parseOptions(this), _7d1), - combo: r.combo, - panel: r.panel, - previousValue: null - }) - $(this).removeAttr("disabled") - } - _792(this) - _786(this) - _79c(this) - _7ac(this) - _7cf(this) - }) - } - $.fn.combo.methods = { - options: function (jq) { - return $.data(jq[0], "combo").options - }, - panel: function (jq) { - return $.data(jq[0], "combo").panel - }, - textbox: function (jq) { - return $.data(jq[0], "combo").combo.find("input.combo-text") - }, - destroy: function (jq) { - return jq.each(function () { - _798(this) - }) - }, - resize: function (jq, _7d4) { - return jq.each(function () { - _786(this, _7d4) - }) - }, - showPanel: function (jq) { - return jq.each(function () { - _7a3(this) - }) - }, - hidePanel: function (jq) { - return jq.each(function () { - _7a9(this) - }) - }, - disable: function (jq) { - return jq.each(function () { - _796(this, true) - _79c(this) - }) - }, - enable: function (jq) { - return jq.each(function () { - _796(this, false) - _79c(this) - }) - }, - readonly: function (jq, mode) { - return jq.each(function () { - _797(this, mode) - _79c(this) - }) - }, - validate: function (jq) { - return jq.each(function () { - _7ac(this, true) - }) - }, - isValid: function (jq) { - var _7d5 = $.data(jq[0], "combo").combo.find("input.combo-text") - return _7d5.validatebox("isValid") - }, - clear: function (jq) { - return jq.each(function () { - _7b5(this) - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $.data(this, "combo").options - if (opts.multiple) { - $(this).combo("setValues", opts.originalValue) - } else { - $(this).combo("setValue", opts.originalValue) - } - }) - }, - getText: function (jq) { - return _7b9(jq[0]) - }, - setText: function (jq, text) { - return jq.each(function () { - _7bc(this, text) - }) - }, - getValues: function (jq) { - return _7bf(jq[0]) - }, - setValues: function (jq, _7d6) { - return jq.each(function () { - _7c3(this, _7d6) - }) - }, - getValue: function (jq) { - return _7c9(jq[0]) - }, - setValue: function (jq, _7d7) { - return jq.each(function () { - _7cc(this, _7d7) - }) - } - } - $.fn.combo.parseOptions = function (_7d8) { - var t = $(_7d8) - return $.extend( - {}, - $.fn.validatebox.parseOptions(_7d8), - $.parser.parseOptions(_7d8, [ - "width", - "height", - "separator", - { panelWidth: "number", editable: "boolean", hasDownArrow: "boolean", delay: "number", selectOnNavigation: "boolean" } - ]), - { - panelHeight: t.attr("panelHeight") == "auto" ? "auto" : parseInt(t.attr("panelHeight")) || undefined, - multiple: t.attr("multiple") ? true : undefined, - disabled: t.attr("disabled") ? true : undefined, - readonly: t.attr("readonly") ? true : undefined, - value: t.val() || undefined - } - ) - } - $.fn.combo.defaults = $.extend({}, $.fn.validatebox.defaults, { - width: "auto", - height: 22, - panelWidth: null, - panelHeight: 200, - multiple: false, - selectOnNavigation: true, - separator: ",", - editable: true, - disabled: false, - readonly: false, - hasDownArrow: true, - value: "", - delay: 200, - deltaX: 19, - keyHandler: { up: function () {}, down: function () {}, enter: function () {}, query: function (q) {} }, - onShowPanel: function () {}, - onHidePanel: function () {}, - onChange: function (_7d9, _7da) {} - }) -})(jQuery) -;(function ($) { - function _7db(data, key, _7dc) { - for (var i = 0; i < data.length; i++) { - var item = data[i] - if (item[key] == _7dc) { - return item - } - } - return null - } - function _7dd(_7de, _7df) { - var _7e0 = $(_7de).combo("panel") - var item = _7e0.find('div.combobox-item[value="' + _7df + '"]') - if (item.length) { - if (item.position().top <= 0) { - var h = _7e0.scrollTop() + item.position().top - _7e0.scrollTop(h) - } else { - if (item.position().top + item.outerHeight() > _7e0.height()) { - var h = _7e0.scrollTop() + item.position().top + item.outerHeight() - _7e0.height() - _7e0.scrollTop(h) - } - } - } - } - function nav(_7e1, dir) { - var opts = $(_7e1).combobox("options") - var _7e2 = $(_7e1).combobox("panel") - var item = _7e2.children("div.combobox-item-hover") - if (!item.length) { - item = _7e2.children("div.combobox-item-selected") - } - item.removeClass("combobox-item-hover") - if (!item.length) { - item = _7e2.children("div.combobox-item:visible:" + (dir == "next" ? "first" : "last")) - } else { - if (dir == "next") { - item = item.nextAll(":visible:first") - if (!item.length) { - item = _7e2.children("div.combobox-item:visible:first") - } - } else { - item = item.prevAll(":visible:first") - if (!item.length) { - item = _7e2.children("div.combobox-item:visible:last") - } - } - } - if (item.length) { - item.addClass("combobox-item-hover") - _7dd(_7e1, item.attr("value")) - if (opts.selectOnNavigation) { - _7e3(_7e1, item.attr("value")) - } - } - } - function _7e3(_7e4, _7e5) { - var opts = $.data(_7e4, "combobox").options - var data = $.data(_7e4, "combobox").data - if (opts.multiple) { - var _7e6 = $(_7e4).combo("getValues") - for (var i = 0; i < _7e6.length; i++) { - if (_7e6[i] == _7e5) { - return - } - } - _7e6.push(_7e5) - _7e7(_7e4, _7e6) - } else { - _7e7(_7e4, [_7e5]) - } - var item = _7db(data, opts.valueField, _7e5) - if (item) { - opts.onSelect.call(_7e4, item) - } - } - function _7e8(_7e9, _7ea) { - var _7eb = $.data(_7e9, "combobox") - var opts = _7eb.options - var _7ec = $(_7e9).combo("getValues") - var _7ed = _7ec.indexOf(_7ea + "") - if (_7ed >= 0) { - _7ec.splice(_7ed, 1) - _7e7(_7e9, _7ec) - } - var item = _7db(_7eb.data, opts.valueField, _7ea) - if (item) { - opts.onUnselect.call(_7e9, item) - } - } - function _7e7(_7ee, _7ef, _7f0) { - var opts = $.data(_7ee, "combobox").options - var data = $.data(_7ee, "combobox").data - var _7f1 = $(_7ee).combo("panel") - _7f1.find("div.combobox-item-selected").removeClass("combobox-item-selected") - var vv = [], - ss = [] - for (var i = 0; i < _7ef.length; i++) { - var v = _7ef[i] - var s = v - var item = _7db(data, opts.valueField, v) - if (item) { - s = item[opts.textField] - } - vv.push(v) - ss.push(s) - _7f1.find('div.combobox-item[value="' + v + '"]').addClass("combobox-item-selected") - } - $(_7ee).combo("setValues", vv) - if (!_7f0) { - $(_7ee).combo("setText", ss.join(opts.separator)) - } - } - function _7f2(_7f3, data, _7f4) { - var opts = $.data(_7f3, "combobox").options - var _7f5 = $(_7f3).combo("panel") - data = opts.loadFilter.call(_7f3, data) - $.data(_7f3, "combobox").data = data - var _7f6 = $(_7f3).combobox("getValues") - _7f5.empty() - for (var i = 0; i < data.length; i++) { - var v = data[i][opts.valueField] - var s = data[i][opts.textField] - var item = $('
            ').appendTo(_7f5) - item.attr("value", v) - if (opts.formatter) { - item.html(opts.formatter.call(_7f3, data[i])) - } else { - item.html(s) - } - if (data[i]["selected"]) { - ;(function () { - for (var i = 0; i < _7f6.length; i++) { - if (v == _7f6[i]) { - return - } - } - _7f6.push(v) - })() - } - } - if (opts.multiple) { - _7e7(_7f3, _7f6, _7f4) - } else { - if (_7f6.length) { - _7e7(_7f3, [_7f6[_7f6.length - 1]], _7f4) - } else { - _7e7(_7f3, [], _7f4) - } - } - opts.onLoadSuccess.call(_7f3, data) - } - function _7f7(_7f8, url, _7f9, _7fa) { - var opts = $.data(_7f8, "combobox").options - if (url) { - opts.url = url - } - _7f9 = _7f9 || {} - if (opts.onBeforeLoad.call(_7f8, _7f9) == false) { - return - } - opts.loader.call( - _7f8, - _7f9, - function (data) { - _7f2(_7f8, data, _7fa) - }, - function () { - opts.onLoadError.apply(this, arguments) - } - ) - } - function _7fb(_7fc, q) { - var opts = $.data(_7fc, "combobox").options - if (opts.multiple && !q) { - _7e7(_7fc, [], true) - } else { - _7e7(_7fc, [q], true) - } - if (opts.mode == "remote") { - _7f7(_7fc, null, { q: q }, true) - } else { - var _7fd = $(_7fc).combo("panel") - _7fd.find("div.combobox-item").hide() - var data = $.data(_7fc, "combobox").data - for (var i = 0; i < data.length; i++) { - if (opts.filter.call(_7fc, q, data[i])) { - var v = data[i][opts.valueField] - var s = data[i][opts.textField] - var item = _7fd.find('div.combobox-item[value="' + v + '"]') - item.show() - if (s == q) { - _7e7(_7fc, [v], true) - item.addClass("combobox-item-selected") - } - } - } - } - } - function _7fe(_7ff) { - var t = $(_7ff) - var _800 = t.combobox("panel") - var opts = t.combobox("options") - var data = t.combobox("getData") - var item = _800.children("div.combobox-item-hover") - if (!item.length) { - item = _800.children("div.combobox-item-selected") - } - if (!item.length) { - return - } - if (opts.multiple) { - if (item.hasClass("combobox-item-selected")) { - t.combobox("unselect", item.attr("value")) - } else { - t.combobox("select", item.attr("value")) - } - } else { - t.combobox("select", item.attr("value")) - t.combobox("hidePanel") - } - var vv = [] - var _801 = t.combobox("getValues") - for (var i = 0; i < _801.length; i++) { - if (_7db(data, opts.valueField, _801[i])) { - vv.push(_801[i]) - } - } - t.combobox("setValues", vv) - } - function _802(_803) { - var opts = $.data(_803, "combobox").options - $(_803).addClass("combobox-f") - $(_803).combo( - $.extend({}, opts, { - onShowPanel: function () { - $(_803).combo("panel").find("div.combobox-item").show() - _7dd(_803, $(_803).combobox("getValue")) - opts.onShowPanel.call(_803) - } - }) - ) - $(_803) - .combo("panel") - .unbind() - .bind("mouseover", function (e) { - $(this).children("div.combobox-item-hover").removeClass("combobox-item-hover") - $(e.target).closest("div.combobox-item").addClass("combobox-item-hover") - e.stopPropagation() - }) - .bind("mouseout", function (e) { - $(e.target).closest("div.combobox-item").removeClass("combobox-item-hover") - e.stopPropagation() - }) - .bind("click", function (e) { - var item = $(e.target).closest("div.combobox-item") - if (!item.length) { - return - } - var _804 = item.attr("value") - if (opts.multiple) { - if (item.hasClass("combobox-item-selected")) { - _7e8(_803, _804) - } else { - _7e3(_803, _804) - } - } else { - _7e3(_803, _804) - $(_803).combo("hidePanel") - } - e.stopPropagation() - }) - } - $.fn.combobox = function (_805, _806) { - if (typeof _805 == "string") { - var _807 = $.fn.combobox.methods[_805] - if (_807) { - return _807(this, _806) - } else { - return this.combo(_805, _806) - } - } - _805 = _805 || {} - return this.each(function () { - var _808 = $.data(this, "combobox") - if (_808) { - $.extend(_808.options, _805) - _802(this) - } else { - _808 = $.data(this, "combobox", { options: $.extend({}, $.fn.combobox.defaults, $.fn.combobox.parseOptions(this), _805) }) - _802(this) - _7f2(this, $.fn.combobox.parseData(this)) - } - if (_808.options.data) { - _7f2(this, _808.options.data) - } - _7f7(this) - }) - } - $.fn.combobox.methods = { - options: function (jq) { - var _809 = jq.combo("options") - return $.extend($.data(jq[0], "combobox").options, { - originalValue: _809.originalValue, - disabled: _809.disabled, - readonly: _809.readonly - }) - }, - getData: function (jq) { - return $.data(jq[0], "combobox").data - }, - setValues: function (jq, _80a) { - return jq.each(function () { - _7e7(this, _80a) - }) - }, - setValue: function (jq, _80b) { - return jq.each(function () { - _7e7(this, [_80b]) - }) - }, - clear: function (jq) { - return jq.each(function () { - $(this).combo("clear") - var _80c = $(this).combo("panel") - _80c.find("div.combobox-item-selected").removeClass("combobox-item-selected") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).combobox("options") - if (opts.multiple) { - $(this).combobox("setValues", opts.originalValue) - } else { - $(this).combobox("setValue", opts.originalValue) - } - }) - }, - loadData: function (jq, data) { - return jq.each(function () { - _7f2(this, data) - }) - }, - reload: function (jq, url) { - return jq.each(function () { - _7f7(this, url) - }) - }, - select: function (jq, _80d) { - return jq.each(function () { - _7e3(this, _80d) - }) - }, - unselect: function (jq, _80e) { - return jq.each(function () { - _7e8(this, _80e) - }) - } - } - $.fn.combobox.parseOptions = function (_80f) { - var t = $(_80f) - return $.extend({}, $.fn.combo.parseOptions(_80f), $.parser.parseOptions(_80f, ["valueField", "textField", "mode", "method", "url"])) - } - $.fn.combobox.parseData = function (_810) { - var data = [] - var opts = $(_810).combobox("options") - $(_810) - .children("option") - .each(function () { - var item = {} - item[opts.valueField] = $(this).attr("value") != undefined ? $(this).attr("value") : $(this).html() - item[opts.textField] = $(this).html() - item["selected"] = $(this).attr("selected") - data.push(item) - }) - return data - } - $.fn.combobox.defaults = $.extend({}, $.fn.combo.defaults, { - valueField: "value", - textField: "text", - mode: "local", - method: "post", - url: null, - data: null, - keyHandler: { - up: function () { - nav(this, "prev") - }, - down: function () { - nav(this, "next") - }, - enter: function () { - _7fe(this) - }, - query: function (q) { - _7fb(this, q) - } - }, - filter: function (q, row) { - var opts = $(this).combobox("options") - return row[opts.textField].indexOf(q) == 0 - }, - formatter: function (row) { - var opts = $(this).combobox("options") - return row[opts.textField] - }, - loader: function (_811, _812, _813) { - var opts = $(this).combobox("options") - if (!opts.url) { - return false - } - $.ajax({ - type: opts.method, - url: opts.url, - data: _811, - dataType: "json", - success: function (data) { - _812(data) - }, - error: function () { - _813.apply(this, arguments) - } - }) - }, - loadFilter: function (data) { - return data - }, - onBeforeLoad: function (_814) {}, - onLoadSuccess: function () {}, - onLoadError: function () {}, - onSelect: function (_815) {}, - onUnselect: function (_816) {} - }) -})(jQuery) -;(function ($) { - function _817(_818) { - var opts = $.data(_818, "combotree").options - var tree = $.data(_818, "combotree").tree - $(_818).addClass("combotree-f") - $(_818).combo(opts) - var _819 = $(_818).combo("panel") - if (!tree) { - tree = $("
              ").appendTo(_819) - $.data(_818, "combotree").tree = tree - } - tree.tree( - $.extend({}, opts, { - checkbox: opts.multiple, - onLoadSuccess: function (node, data) { - var _81a = $(_818).combotree("getValues") - if (opts.multiple) { - var _81b = tree.tree("getChecked") - for (var i = 0; i < _81b.length; i++) { - var id = _81b[i].id - ;(function () { - for (var i = 0; i < _81a.length; i++) { - if (id == _81a[i]) { - return - } - } - _81a.push(id) - })() - } - } - $(_818).combotree("setValues", _81a) - opts.onLoadSuccess.call(this, node, data) - }, - onClick: function (node) { - _81d(_818) - $(_818).combo("hidePanel") - opts.onClick.call(this, node) - }, - onCheck: function (node, _81c) { - _81d(_818) - opts.onCheck.call(this, node, _81c) - } - }) - ) - } - function _81d(_81e) { - var opts = $.data(_81e, "combotree").options - var tree = $.data(_81e, "combotree").tree - var vv = [], - ss = [] - if (opts.multiple) { - var _81f = tree.tree("getChecked") - for (var i = 0; i < _81f.length; i++) { - vv.push(_81f[i].id) - ss.push(_81f[i].text) - } - } else { - var node = tree.tree("getSelected") - if (node) { - vv.push(node.id) - ss.push(node.text) - } - } - $(_81e).combo("setValues", vv).combo("setText", ss.join(opts.separator)) - } - function _820(_821, _822) { - var opts = $.data(_821, "combotree").options - var tree = $.data(_821, "combotree").tree - tree.find("span.tree-checkbox").addClass("tree-checkbox0").removeClass("tree-checkbox1 tree-checkbox2") - var vv = [], - ss = [] - for (var i = 0; i < _822.length; i++) { - var v = _822[i] - var s = v - var node = tree.tree("find", v) - if (node) { - s = node.text - tree.tree("check", node.target) - tree.tree("select", node.target) - } - vv.push(v) - ss.push(s) - } - $(_821).combo("setValues", vv).combo("setText", ss.join(opts.separator)) - } - $.fn.combotree = function (_823, _824) { - if (typeof _823 == "string") { - var _825 = $.fn.combotree.methods[_823] - if (_825) { - return _825(this, _824) - } else { - return this.combo(_823, _824) - } - } - _823 = _823 || {} - return this.each(function () { - var _826 = $.data(this, "combotree") - if (_826) { - $.extend(_826.options, _823) - } else { - $.data(this, "combotree", { options: $.extend({}, $.fn.combotree.defaults, $.fn.combotree.parseOptions(this), _823) }) - } - _817(this) - }) - } - $.fn.combotree.methods = { - options: function (jq) { - var _827 = jq.combo("options") - return $.extend($.data(jq[0], "combotree").options, { - originalValue: _827.originalValue, - disabled: _827.disabled, - readonly: _827.readonly - }) - }, - tree: function (jq) { - return $.data(jq[0], "combotree").tree - }, - loadData: function (jq, data) { - return jq.each(function () { - var opts = $.data(this, "combotree").options - opts.data = data - var tree = $.data(this, "combotree").tree - tree.tree("loadData", data) - }) - }, - reload: function (jq, url) { - return jq.each(function () { - var opts = $.data(this, "combotree").options - var tree = $.data(this, "combotree").tree - if (url) { - opts.url = url - } - tree.tree({ url: opts.url }) - }) - }, - setValues: function (jq, _828) { - return jq.each(function () { - _820(this, _828) - }) - }, - setValue: function (jq, _829) { - return jq.each(function () { - _820(this, [_829]) - }) - }, - clear: function (jq) { - return jq.each(function () { - var tree = $.data(this, "combotree").tree - tree.find("div.tree-node-selected").removeClass("tree-node-selected") - var cc = tree.tree("getChecked") - for (var i = 0; i < cc.length; i++) { - tree.tree("uncheck", cc[i].target) - } - $(this).combo("clear") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).combotree("options") - if (opts.multiple) { - $(this).combotree("setValues", opts.originalValue) - } else { - $(this).combotree("setValue", opts.originalValue) - } - }) - } - } - $.fn.combotree.parseOptions = function (_82a) { - return $.extend({}, $.fn.combo.parseOptions(_82a), $.fn.tree.parseOptions(_82a)) - } - $.fn.combotree.defaults = $.extend({}, $.fn.combo.defaults, $.fn.tree.defaults, { editable: false }) -})(jQuery) -;(function ($) { - function _82b(_82c) { - var _82d = $.data(_82c, "combogrid") - var opts = _82d.options - var grid = _82d.grid - $(_82c).addClass("combogrid-f").combo(opts) - var _82e = $(_82c).combo("panel") - if (!grid) { - grid = $("
              ") - if (col.checkbox) { - var _763 = "" - } else { - var _763 = _762 - if (col.align) { - _763 += ";text-align:" + col.align + ";" - } - if (!opts.nowrap) { - _763 += ";white-space:normal;height:auto;" - } else { - if (opts.autoRowHeight) { - _763 += ";height:auto;" - } - } - } - cc.push('
              ') - if (col.checkbox) { - if (row.checked) { - cc.push('') - } else { - var val = null - if (col.formatter) { - val = col.formatter(row[_761], row) - } else { - val = row[_761] - } - if (_761 == opts.treeField) { - for (var j = 0; j < _760; j++) { - cc.push('') - } - if (row.state == "closed") { - cc.push('') - cc.push('') - } else { - if (row.children && row.children.length) { - cc.push('') - cc.push('') - } else { - cc.push('') - cc.push('') - } - } - cc.push('' + val + "") - } else { - cc.push(val) - } - } - cc.push("
              ") - cc.push("
              ").appendTo(_82e) - _82d.grid = grid - } - grid.datagrid( - $.extend({}, opts, { - border: false, - fit: true, - singleSelect: !opts.multiple, - onLoadSuccess: function (data) { - var _82f = $(_82c).combo("getValues") - var _830 = opts.onSelect - opts.onSelect = function () {} - _83a(_82c, _82f, _82d.remainText) - opts.onSelect = _830 - opts.onLoadSuccess.apply(_82c, arguments) - }, - onClickRow: _831, - onSelect: function (_832, row) { - _833() - opts.onSelect.call(this, _832, row) - }, - onUnselect: function (_834, row) { - _833() - opts.onUnselect.call(this, _834, row) - }, - onSelectAll: function (rows) { - _833() - opts.onSelectAll.call(this, rows) - }, - onUnselectAll: function (rows) { - if (opts.multiple) { - _833() - } - opts.onUnselectAll.call(this, rows) - } - }) - ) - function _831(_835, row) { - _82d.remainText = false - _833() - if (!opts.multiple) { - $(_82c).combo("hidePanel") - } - opts.onClickRow.call(this, _835, row) - } - function _833() { - var rows = grid.datagrid("getSelections") - var vv = [], - ss = [] - for (var i = 0; i < rows.length; i++) { - vv.push(rows[i][opts.idField]) - ss.push(rows[i][opts.textField]) - } - if (!opts.multiple) { - $(_82c).combo("setValues", vv.length ? vv : [""]) - } else { - $(_82c).combo("setValues", vv) - } - if (!_82d.remainText) { - $(_82c).combo("setText", ss.join(opts.separator)) - } - } - } - function nav(_836, dir) { - var _837 = $.data(_836, "combogrid") - var opts = _837.options - var grid = _837.grid - var _838 = grid.datagrid("getRows").length - if (!_838) { - return - } - var tr = opts.finder.getTr(grid[0], null, "highlight") - if (!tr.length) { - tr = opts.finder.getTr(grid[0], null, "selected") - } - var _839 - if (!tr.length) { - _839 = dir == "next" ? 0 : _838 - 1 - } else { - var _839 = parseInt(tr.attr("datagrid-row-index")) - _839 += dir == "next" ? 1 : -1 - if (_839 < 0) { - _839 = _838 - 1 - } - if (_839 >= _838) { - _839 = 0 - } - } - grid.datagrid("highlightRow", _839) - if (opts.selectOnNavigation) { - _837.remainText = false - grid.datagrid("selectRow", _839) - } - } - function _83a(_83b, _83c, _83d) { - var _83e = $.data(_83b, "combogrid") - var opts = _83e.options - var grid = _83e.grid - var rows = grid.datagrid("getRows") - var ss = [] - var _83f = $(_83b).combo("getValues") - var _840 = $(_83b).combo("options") - var _841 = _840.onChange - _840.onChange = function () {} - grid.datagrid("clearSelections") - for (var i = 0; i < _83c.length; i++) { - var _842 = grid.datagrid("getRowIndex", _83c[i]) - if (_842 >= 0) { - grid.datagrid("selectRow", _842) - ss.push(rows[_842][opts.textField]) - } else { - ss.push(_83c[i]) - } - } - $(_83b).combo("setValues", _83f) - _840.onChange = _841 - $(_83b).combo("setValues", _83c) - if (!_83d) { - var s = ss.join(opts.separator) - if ($(_83b).combo("getText") != s) { - $(_83b).combo("setText", s) - } - } - } - function _843(_844, q) { - var _845 = $.data(_844, "combogrid") - var opts = _845.options - var grid = _845.grid - _845.remainText = true - if (opts.multiple && !q) { - _83a(_844, [], true) - } else { - _83a(_844, [q], true) - } - if (opts.mode == "remote") { - grid.datagrid("clearSelections") - grid.datagrid("load", $.extend({}, opts.queryParams, { q: q })) - } else { - if (!q) { - return - } - var rows = grid.datagrid("getRows") - for (var i = 0; i < rows.length; i++) { - if (opts.filter.call(_844, q, rows[i])) { - grid.datagrid("clearSelections") - grid.datagrid("selectRow", i) - return - } - } - } - } - function _846(_847) { - var _848 = $.data(_847, "combogrid") - var opts = _848.options - var grid = _848.grid - var tr = opts.finder.getTr(grid[0], null, "highlight") - if (!tr.length) { - tr = opts.finder.getTr(grid[0], null, "selected") - } - if (!tr.length) { - return - } - _848.remainText = false - var _849 = parseInt(tr.attr("datagrid-row-index")) - if (opts.multiple) { - if (tr.hasClass("datagrid-row-selected")) { - grid.datagrid("unselectRow", _849) - } else { - grid.datagrid("selectRow", _849) - } - } else { - grid.datagrid("selectRow", _849) - $(_847).combogrid("hidePanel") - } - } - $.fn.combogrid = function (_84a, _84b) { - if (typeof _84a == "string") { - var _84c = $.fn.combogrid.methods[_84a] - if (_84c) { - return _84c(this, _84b) - } else { - return $.fn.combo.methods[_84a](this, _84b) - } - } - _84a = _84a || {} - return this.each(function () { - var _84d = $.data(this, "combogrid") - if (_84d) { - $.extend(_84d.options, _84a) - } else { - _84d = $.data(this, "combogrid", { options: $.extend({}, $.fn.combogrid.defaults, $.fn.combogrid.parseOptions(this), _84a) }) - } - _82b(this) - }) - } - $.fn.combogrid.methods = { - options: function (jq) { - var _84e = jq.combo("options") - return $.extend($.data(jq[0], "combogrid").options, { - originalValue: _84e.originalValue, - disabled: _84e.disabled, - readonly: _84e.readonly - }) - }, - grid: function (jq) { - return $.data(jq[0], "combogrid").grid - }, - setValues: function (jq, _84f) { - return jq.each(function () { - _83a(this, _84f) - }) - }, - setValue: function (jq, _850) { - return jq.each(function () { - _83a(this, [_850]) - }) - }, - clear: function (jq) { - return jq.each(function () { - $(this).combogrid("grid").datagrid("clearSelections") - $(this).combo("clear") - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).combogrid("options") - if (opts.multiple) { - $(this).combogrid("setValues", opts.originalValue) - } else { - $(this).combogrid("setValue", opts.originalValue) - } - }) - } - } - $.fn.combogrid.parseOptions = function (_851) { - var t = $(_851) - return $.extend( - {}, - $.fn.combo.parseOptions(_851), - $.fn.datagrid.parseOptions(_851), - $.parser.parseOptions(_851, ["idField", "textField", "mode"]) - ) - } - $.fn.combogrid.defaults = $.extend({}, $.fn.combo.defaults, $.fn.datagrid.defaults, { - loadMsg: null, - idField: null, - textField: null, - mode: "local", - keyHandler: { - up: function () { - nav(this, "prev") - }, - down: function () { - nav(this, "next") - }, - enter: function () { - _846(this) - }, - query: function (q) { - _843(this, q) - } - }, - filter: function (q, row) { - var opts = $(this).combogrid("options") - return row[opts.textField].indexOf(q) == 0 - } - }) -})(jQuery) -;(function ($) { - function _852(_853) { - var _854 = $.data(_853, "datebox") - var opts = _854.options - $(_853).addClass("datebox-f") - $(_853).combo( - $.extend({}, opts, { - onShowPanel: function () { - _854.calendar.calendar("resize") - opts.onShowPanel.call(_853) - } - }) - ) - $(_853).combo("textbox").parent().addClass("datebox") - if (!_854.calendar) { - _855() - } - function _855() { - var _856 = $(_853).combo("panel") - _854.calendar = $("
              ").appendTo(_856).wrap('
              ') - _854.calendar.calendar({ - fit: true, - border: false, - onSelect: function (date) { - var _857 = opts.formatter(date) - _85b(_853, _857) - $(_853).combo("hidePanel") - opts.onSelect.call(_853, date) - } - }) - _85b(_853, opts.value) - var _858 = $('
              ').appendTo(_856) - $('').html(opts.currentText).appendTo(_858) - $('').html(opts.closeText).appendTo(_858) - _858.find(".datebox-current,.datebox-close").hover( - function () { - $(this).addClass("datebox-button-hover") - }, - function () { - $(this).removeClass("datebox-button-hover") - } - ) - _858.find(".datebox-current").click(function () { - _854.calendar.calendar({ year: new Date().getFullYear(), month: new Date().getMonth() + 1, current: new Date() }) - }) - _858.find(".datebox-close").click(function () { - $(_853).combo("hidePanel") - }) - } - } - function _859(_85a, q) { - _85b(_85a, q) - } - function _85c(_85d) { - var opts = $.data(_85d, "datebox").options - var c = $.data(_85d, "datebox").calendar - var _85e = opts.formatter(c.calendar("options").current) - _85b(_85d, _85e) - $(_85d).combo("hidePanel") - } - function _85b(_85f, _860) { - var _861 = $.data(_85f, "datebox") - var opts = _861.options - $(_85f).combo("setValue", _860).combo("setText", _860) - _861.calendar.calendar("moveTo", opts.parser(_860)) - } - $.fn.datebox = function (_862, _863) { - if (typeof _862 == "string") { - var _864 = $.fn.datebox.methods[_862] - if (_864) { - return _864(this, _863) - } else { - return this.combo(_862, _863) - } - } - _862 = _862 || {} - return this.each(function () { - var _865 = $.data(this, "datebox") - if (_865) { - $.extend(_865.options, _862) - } else { - $.data(this, "datebox", { options: $.extend({}, $.fn.datebox.defaults, $.fn.datebox.parseOptions(this), _862) }) - } - _852(this) - }) - } - $.fn.datebox.methods = { - options: function (jq) { - var _866 = jq.combo("options") - return $.extend($.data(jq[0], "datebox").options, { originalValue: _866.originalValue, disabled: _866.disabled, readonly: _866.readonly }) - }, - calendar: function (jq) { - return $.data(jq[0], "datebox").calendar - }, - setValue: function (jq, _867) { - return jq.each(function () { - _85b(this, _867) - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).datebox("options") - $(this).datebox("setValue", opts.originalValue) - }) - } - } - $.fn.datebox.parseOptions = function (_868) { - var t = $(_868) - return $.extend({}, $.fn.combo.parseOptions(_868), {}) - } - $.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, { - panelWidth: 180, - panelHeight: "auto", - keyHandler: { - up: function () {}, - down: function () {}, - enter: function () { - _85c(this) - }, - query: function (q) { - _859(this, q) - } - }, - currentText: "Today", - closeText: "Close", - okText: "Ok", - formatter: function (date) { - var y = date.getFullYear() - var m = date.getMonth() + 1 - var d = date.getDate() - return m + "/" + d + "/" + y - }, - parser: function (s) { - var t = Date.parse(s) - if (!isNaN(t)) { - return new Date(t) - } else { - return new Date() - } - }, - onSelect: function (date) {} - }) -})(jQuery) -;(function ($) { - function _869(_86a) { - var _86b = $.data(_86a, "datetimebox") - var opts = _86b.options - $(_86a).datebox( - $.extend({}, opts, { - onShowPanel: function () { - var _86c = $(_86a).datetimebox("getValue") - _86f(_86a, _86c, true) - opts.onShowPanel.call(_86a) - }, - formatter: $.fn.datebox.defaults.formatter, - parser: $.fn.datebox.defaults.parser - }) - ) - $(_86a).removeClass("datebox-f").addClass("datetimebox-f") - $(_86a) - .datebox("calendar") - .calendar({ - onSelect: function (date) { - opts.onSelect.call(_86a, date) - } - }) - var _86d = $(_86a).datebox("panel") - if (!_86b.spinner) { - var p = $('
              ').insertAfter(_86d.children("div.datebox-calendar-inner")) - _86b.spinner = p.children("input") - var _86e = _86d.children("div.datebox-button") - var ok = $('').html(opts.okText).appendTo(_86e) - ok.hover( - function () { - $(this).addClass("datebox-button-hover") - }, - function () { - $(this).removeClass("datebox-button-hover") - } - ).click(function () { - _874(_86a) - }) - } - _86b.spinner - .timespinner({ showSeconds: opts.showSeconds, separator: opts.timeSeparator }) - .unbind(".datetimebox") - .bind("mousedown.datetimebox", function (e) { - e.stopPropagation() - }) - _86f(_86a, opts.value) - } - function _870(_871) { - var c = $(_871).datetimebox("calendar") - var t = $(_871).datetimebox("spinner") - var date = c.calendar("options").current - return new Date( - date.getFullYear(), - date.getMonth(), - date.getDate(), - t.timespinner("getHours"), - t.timespinner("getMinutes"), - t.timespinner("getSeconds") - ) - } - function _872(_873, q) { - _86f(_873, q, true) - } - function _874(_875) { - var opts = $.data(_875, "datetimebox").options - var date = _870(_875) - _86f(_875, opts.formatter.call(_875, date)) - $(_875).combo("hidePanel") - } - function _86f(_876, _877, _878) { - var opts = $.data(_876, "datetimebox").options - $(_876).combo("setValue", _877) - if (!_878) { - if (_877) { - var date = opts.parser.call(_876, _877) - $(_876).combo("setValue", opts.formatter.call(_876, date)) - $(_876).combo("setText", opts.formatter.call(_876, date)) - } else { - $(_876).combo("setText", _877) - } - } - var date = opts.parser.call(_876, _877) - $(_876).datetimebox("calendar").calendar("moveTo", date) - $(_876).datetimebox("spinner").timespinner("setValue", _879(date)) - function _879(date) { - function _87a(_87b) { - return (_87b < 10 ? "0" : "") + _87b - } - var tt = [_87a(date.getHours()), _87a(date.getMinutes())] - if (opts.showSeconds) { - tt.push(_87a(date.getSeconds())) - } - return tt.join($(_876).datetimebox("spinner").timespinner("options").separator) - } - } - $.fn.datetimebox = function (_87c, _87d) { - if (typeof _87c == "string") { - var _87e = $.fn.datetimebox.methods[_87c] - if (_87e) { - return _87e(this, _87d) - } else { - return this.datebox(_87c, _87d) - } - } - _87c = _87c || {} - return this.each(function () { - var _87f = $.data(this, "datetimebox") - if (_87f) { - $.extend(_87f.options, _87c) - } else { - $.data(this, "datetimebox", { options: $.extend({}, $.fn.datetimebox.defaults, $.fn.datetimebox.parseOptions(this), _87c) }) - } - _869(this) - }) - } - $.fn.datetimebox.methods = { - options: function (jq) { - var _880 = jq.datebox("options") - return $.extend($.data(jq[0], "datetimebox").options, { - originalValue: _880.originalValue, - disabled: _880.disabled, - readonly: _880.readonly - }) - }, - spinner: function (jq) { - return $.data(jq[0], "datetimebox").spinner - }, - setValue: function (jq, _881) { - return jq.each(function () { - _86f(this, _881) - }) - }, - reset: function (jq) { - return jq.each(function () { - var opts = $(this).datetimebox("options") - $(this).datetimebox("setValue", opts.originalValue) - }) - } - } - $.fn.datetimebox.parseOptions = function (_882) { - var t = $(_882) - return $.extend({}, $.fn.datebox.parseOptions(_882), $.parser.parseOptions(_882, ["timeSeparator", { showSeconds: "boolean" }])) - } - $.fn.datetimebox.defaults = $.extend({}, $.fn.datebox.defaults, { - showSeconds: true, - timeSeparator: ":", - keyHandler: { - up: function () {}, - down: function () {}, - enter: function () { - _874(this) - }, - query: function (q) { - _872(this, q) - } - }, - formatter: function (date) { - var h = date.getHours() - var M = date.getMinutes() - var s = date.getSeconds() - function _883(_884) { - return (_884 < 10 ? "0" : "") + _884 - } - var _885 = $(this).datetimebox("spinner").timespinner("options").separator - var r = $.fn.datebox.defaults.formatter(date) + " " + _883(h) + _885 + _883(M) - if ($(this).datetimebox("options").showSeconds) { - r += _885 + _883(s) - } - return r - }, - parser: function (s) { - if ($.trim(s) == "") { - return new Date() - } - var dt = s.split(" ") - var d = $.fn.datebox.defaults.parser(dt[0]) - if (dt.length < 2) { - return d - } - var _886 = $(this).datetimebox("spinner").timespinner("options").separator - var tt = dt[1].split(_886) - var hour = parseInt(tt[0], 10) || 0 - var _887 = parseInt(tt[1], 10) || 0 - var _888 = parseInt(tt[2], 10) || 0 - return new Date(d.getFullYear(), d.getMonth(), d.getDate(), hour, _887, _888) - } - }) -})(jQuery) -;(function ($) { - function init(_889) { - var _88a = $( - '
              ' + - '
              ' + - '' + - '' + - "
              " + - '
              ' + - '
              ' + - '
              ' + - '' + - "
              " - ).insertAfter(_889) - var name = $(_889).hide().attr("name") - if (name) { - _88a.find("input.slider-value").attr("name", name) - $(_889).removeAttr("name").attr("sliderName", name) - } - return _88a - } - function _88b(_88c, _88d) { - var _88e = $.data(_88c, "slider") - var opts = _88e.options - var _88f = _88e.slider - if (_88d) { - if (_88d.width) { - opts.width = _88d.width - } - if (_88d.height) { - opts.height = _88d.height - } - } - if (opts.mode == "h") { - _88f.css("height", "") - _88f.children("div").css("height", "") - if (!isNaN(opts.width)) { - _88f.width(opts.width) - } - } else { - _88f.css("width", "") - _88f.children("div").css("width", "") - if (!isNaN(opts.height)) { - _88f.height(opts.height) - _88f.find("div.slider-rule").height(opts.height) - _88f.find("div.slider-rulelabel").height(opts.height) - _88f.find("div.slider-inner")._outerHeight(opts.height) - } - } - _890(_88c) - } - function _891(_892) { - var _893 = $.data(_892, "slider") - var opts = _893.options - var _894 = _893.slider - var aa = opts.mode == "h" ? opts.rule : opts.rule.slice(0).reverse() - if (opts.reversed) { - aa = aa.slice(0).reverse() - } - _895(aa) - function _895(aa) { - var rule = _894.find("div.slider-rule") - var _896 = _894.find("div.slider-rulelabel") - rule.empty() - _896.empty() - for (var i = 0; i < aa.length; i++) { - var _897 = (i * 100) / (aa.length - 1) + "%" - var span = $("").appendTo(rule) - span.css(opts.mode == "h" ? "left" : "top", _897) - if (aa[i] != "|") { - span = $("").appendTo(_896) - span.html(aa[i]) - if (opts.mode == "h") { - span.css({ left: _897, marginLeft: -Math.round(span.outerWidth() / 2) }) - } else { - span.css({ top: _897, marginTop: -Math.round(span.outerHeight() / 2) }) - } - } - } - } - } - function _898(_899) { - var _89a = $.data(_899, "slider") - var opts = _89a.options - var _89b = _89a.slider - _89b.removeClass("slider-h slider-v slider-disabled") - _89b.addClass(opts.mode == "h" ? "slider-h" : "slider-v") - _89b.addClass(opts.disabled ? "slider-disabled" : "") - _89b.find("a.slider-handle").draggable({ - axis: opts.mode, - cursor: "pointer", - disabled: opts.disabled, - onDrag: function (e) { - var left = e.data.left - var _89c = _89b.width() - if (opts.mode != "h") { - left = e.data.top - _89c = _89b.height() - } - if (left < 0 || left > _89c) { - return false - } else { - var _89d = _8ae(_899, left) - _89e(_89d) - return false - } - }, - onStartDrag: function () { - opts.onSlideStart.call(_899, opts.value) - }, - onStopDrag: function (e) { - var _89f = _8ae(_899, opts.mode == "h" ? e.data.left : e.data.top) - _89e(_89f) - opts.onSlideEnd.call(_899, opts.value) - } - }) - function _89e(_8a0) { - var s = Math.abs(_8a0 % opts.step) - if (s < opts.step / 2) { - _8a0 -= s - } else { - _8a0 = _8a0 - s + opts.step - } - _8a1(_899, _8a0) - } - } - function _8a1(_8a2, _8a3) { - var _8a4 = $.data(_8a2, "slider") - var opts = _8a4.options - var _8a5 = _8a4.slider - var _8a6 = opts.value - if (_8a3 < opts.min) { - _8a3 = opts.min - } - if (_8a3 > opts.max) { - _8a3 = opts.max - } - opts.value = _8a3 - $(_8a2).val(_8a3) - _8a5.find("input.slider-value").val(_8a3) - var pos = _8a7(_8a2, _8a3) - var tip = _8a5.find(".slider-tip") - if (opts.showTip) { - tip.show() - tip.html(opts.tipFormatter.call(_8a2, opts.value)) - } else { - tip.hide() - } - if (opts.mode == "h") { - var _8a8 = "left:" + pos + "px;" - _8a5.find(".slider-handle").attr("style", _8a8) - tip.attr("style", _8a8 + "margin-left:" + -Math.round(tip.outerWidth() / 2) + "px") - } else { - var _8a8 = "top:" + pos + "px;" - _8a5.find(".slider-handle").attr("style", _8a8) - tip.attr("style", _8a8 + "margin-left:" + -Math.round(tip.outerWidth()) + "px") - } - if (_8a6 != _8a3) { - opts.onChange.call(_8a2, _8a3, _8a6) - } - } - function _890(_8a9) { - var opts = $.data(_8a9, "slider").options - var fn = opts.onChange - opts.onChange = function () {} - _8a1(_8a9, opts.value) - opts.onChange = fn - } - function _8a7(_8aa, _8ab) { - var _8ac = $.data(_8aa, "slider") - var opts = _8ac.options - var _8ad = _8ac.slider - if (opts.mode == "h") { - var pos = ((_8ab - opts.min) / (opts.max - opts.min)) * _8ad.width() - if (opts.reversed) { - pos = _8ad.width() - pos - } - } else { - var pos = _8ad.height() - ((_8ab - opts.min) / (opts.max - opts.min)) * _8ad.height() - if (opts.reversed) { - pos = _8ad.height() - pos - } - } - return pos.toFixed(0) - } - function _8ae(_8af, pos) { - var _8b0 = $.data(_8af, "slider") - var opts = _8b0.options - var _8b1 = _8b0.slider - if (opts.mode == "h") { - var _8b2 = opts.min + (opts.max - opts.min) * (pos / _8b1.width()) - } else { - var _8b2 = opts.min + (opts.max - opts.min) * ((_8b1.height() - pos) / _8b1.height()) - } - return opts.reversed ? opts.max - _8b2.toFixed(0) : _8b2.toFixed(0) - } - $.fn.slider = function (_8b3, _8b4) { - if (typeof _8b3 == "string") { - return $.fn.slider.methods[_8b3](this, _8b4) - } - _8b3 = _8b3 || {} - return this.each(function () { - var _8b5 = $.data(this, "slider") - if (_8b5) { - $.extend(_8b5.options, _8b3) - } else { - _8b5 = $.data(this, "slider", { - options: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), _8b3), - slider: init(this) - }) - $(this).removeAttr("disabled") - } - var opts = _8b5.options - opts.min = parseFloat(opts.min) - opts.max = parseFloat(opts.max) - opts.value = parseFloat(opts.value) - opts.step = parseFloat(opts.step) - _898(this) - _891(this) - _88b(this) - }) - } - $.fn.slider.methods = { - options: function (jq) { - return $.data(jq[0], "slider").options - }, - destroy: function (jq) { - return jq.each(function () { - $.data(this, "slider").slider.remove() - $(this).remove() - }) - }, - resize: function (jq, _8b6) { - return jq.each(function () { - _88b(this, _8b6) - }) - }, - getValue: function (jq) { - return jq.slider("options").value - }, - setValue: function (jq, _8b7) { - return jq.each(function () { - _8a1(this, _8b7) - }) - }, - enable: function (jq) { - return jq.each(function () { - $.data(this, "slider").options.disabled = false - _898(this) - }) - }, - disable: function (jq) { - return jq.each(function () { - $.data(this, "slider").options.disabled = true - _898(this) - }) - } - } - $.fn.slider.parseOptions = function (_8b8) { - var t = $(_8b8) - return $.extend( - {}, - $.parser.parseOptions(_8b8, [ - "width", - "height", - "mode", - { reversed: "boolean", showTip: "boolean", min: "number", max: "number", step: "number" } - ]), - { value: t.val() || undefined, disabled: t.attr("disabled") ? true : undefined, rule: t.attr("rule") ? eval(t.attr("rule")) : undefined } - ) - } - $.fn.slider.defaults = { - width: "auto", - height: "auto", - mode: "h", - reversed: false, - showTip: false, - disabled: false, - value: 0, - min: 0, - max: 100, - step: 1, - rule: [], - tipFormatter: function (_8b9) { - return _8b9 - }, - onChange: function (_8ba, _8bb) {}, - onSlideStart: function (_8bc) {}, - onSlideEnd: function (_8bd) {} - } -})(jQuery) -function everyTime(dom) { - var item = $("input[name=v_" + dom.name + "]") - item.val("*") - item.change() -} -function unAppoint(dom) { - var name = dom.name - var val = "?" - if (name == "year") { - val = "" - } - var item = $("input[name=v_" + name + "]") - item.val(val) - item.change() -} -function appoint(dom) {} -function cycle(dom) { - var name = dom.name - var ns = $(dom).parent().find(".numberspinner") - var start = ns.eq(0).numberspinner("getValue") - var end = ns.eq(1).numberspinner("getValue") - var item = $("input[name=v_" + name + "]") - item.val(start + "-" + end) - item.change() -} -function startOn(dom) { - var name = dom.name - var ns = $(dom).parent().find(".numberspinner") - var start = ns.eq(0).numberspinner("getValue") - var end = ns.eq(1).numberspinner("getValue") - var item = $("input[name=v_" + name + "]") - item.val(start + "/" + end) - item.change() -} -function lastDay(dom) { - var item = $("input[name=v_" + dom.name + "]") - item.val("L") - item.change() -} -function weekOfDay(dom) { - var name = dom.name - var ns = $(dom).parent().find(".numberspinner") - var start = ns.eq(0).numberspinner("getValue") - var end = ns.eq(1).numberspinner("getValue") - var item = $("input[name=v_" + name + "]") - item.val(start + "#" + end) - item.change() -} -function lastWeek(dom) { - var item = $("input[name=v_" + dom.name + "]") - var ns = $(dom).parent().find(".numberspinner") - var start = ns.eq(0).numberspinner("getValue") - item.val(start + "L") - item.change() -} -function workDay(dom) { - var name = dom.name - var ns = $(dom).parent().find(".numberspinner") - var start = ns.eq(0).numberspinner("getValue") - var item = $("input[name=v_" + name + "]") - item.val(start + "W") - item.change() -} -$(function () { - $(".numberspinner").numberspinner({ - onChange: function () { - $(this).closest("div.line").children().eq(0).click() - } - }) - var vals = $("input[name^='v_']") - var cron = $("#cron") - vals.change(function () { - var item = [] - vals.each(function () { - item.push(this.value) - }) - var currentIndex = 0 - $(".tabs>li").each(function (i, item) { - if ($(item).hasClass("tabs-selected")) { - currentIndex = i - return false - } - }) - for (var i = currentIndex; i >= 1; i--) { - if (item[i] != "*" && item[i - 1] == "*") { - item[i - 1] = "0" - } - } - if (item[currentIndex] == "*") { - for (var i = currentIndex + 1; i < item.length; i++) { - if (i == 5) { - item[i] = "?" - } else { - item[i] = "*" - } - } - } - cron.val(item.join(" ")).change() - }) - cron.change(function () { - btnFan() - $.ajax({ - type: "get", - url: base + "/platform/sys/task/cronExp", - dataType: "json", - data: { cron: $("#cron").val() }, - success: function (data) { - $("#runTime").html("") - if (data.code == 0) { - var strHTML = "
                " - for (var i = 0; i < data.data.length; i++) { - strHTML += "
              • " + data.data[i] + "
              • " - } - strHTML += "
              " - $("#runTime").html(strHTML) - } else { - $("#runTime").html("" + data.msg + "") - } - } - }) - }) - var secondList = $(".secondList").children() - $("#sencond_appoint").click(function () { - if (this.checked) { - if ($(secondList).filter(":checked").length == 0) { - $(secondList.eq(0)).attr("checked", true) - } - secondList.eq(0).change() - } - }) - secondList.change(function () { - var sencond_appoint = $("#sencond_appoint").prop("checked") - if (sencond_appoint) { - var vals = [] - secondList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 59) { - val = vals.join(",") - } else { - if (vals.length == 59) { - val = "*" - } - } - var item = $("input[name=v_second]") - item.val(val) - item.change() - } - }) - var minList = $(".minList").children() - $("#min_appoint").click(function () { - if (this.checked) { - if ($(minList).filter(":checked").length == 0) { - $(minList.eq(0)).attr("checked", true) - } - minList.eq(0).change() - } - }) - minList.change(function () { - var min_appoint = $("#min_appoint").prop("checked") - if (min_appoint) { - var vals = [] - minList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 59) { - val = vals.join(",") - } else { - if (vals.length == 59) { - val = "*" - } - } - var item = $("input[name=v_min]") - item.val(val) - item.change() - } - }) - var hourList = $(".hourList").children() - $("#hour_appoint").click(function () { - if (this.checked) { - if ($(hourList).filter(":checked").length == 0) { - $(hourList.eq(0)).attr("checked", true) - } - hourList.eq(0).change() - } - }) - hourList.change(function () { - var hour_appoint = $("#hour_appoint").prop("checked") - if (hour_appoint) { - var vals = [] - hourList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 24) { - val = vals.join(",") - } else { - if (vals.length == 24) { - val = "*" - } - } - var item = $("input[name=v_hour]") - item.val(val) - item.change() - } - }) - var dayList = $(".dayList").children() - $("#day_appoint").click(function () { - if (this.checked) { - if ($(dayList).filter(":checked").length == 0) { - $(dayList.eq(0)).attr("checked", true) - } - dayList.eq(0).change() - } - }) - dayList.change(function () { - var day_appoint = $("#day_appoint").prop("checked") - if (day_appoint) { - var vals = [] - dayList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 31) { - val = vals.join(",") - } else { - if (vals.length == 31) { - val = "*" - } - } - var item = $("input[name=v_day]") - item.val(val) - item.change() - } - }) - var mouthList = $(".mouthList").children() - $("#mouth_appoint").click(function () { - if (this.checked) { - if ($(mouthList).filter(":checked").length == 0) { - $(mouthList.eq(0)).attr("checked", true) - } - mouthList.eq(0).change() - } - }) - mouthList.change(function () { - var mouth_appoint = $("#mouth_appoint").prop("checked") - if (mouth_appoint) { - var vals = [] - mouthList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 12) { - val = vals.join(",") - } else { - if (vals.length == 12) { - val = "*" - } - } - var item = $("input[name=v_mouth]") - item.val(val) - item.change() - } - }) - var weekList = $(".weekList").children() - $("#week_appoint").click(function () { - if (this.checked) { - if ($(weekList).filter(":checked").length == 0) { - $(weekList.eq(0)).attr("checked", true) - } - weekList.eq(0).change() - } - }) - weekList.change(function () { - var week_appoint = $("#week_appoint").prop("checked") - if (week_appoint) { - var vals = [] - weekList.each(function () { - if (this.checked) { - vals.push(this.value) - } - }) - var val = "?" - if (vals.length > 0 && vals.length < 7) { - val = vals.join(",") - } else { - if (vals.length == 7) { - val = "*" - } - } - var item = $("input[name=v_week]") - item.val(val) - item.change() - } - }) -}) diff --git a/src/main/resources/static/assets/platform/js/main.js b/src/main/resources/static/assets/platform/js/main.js index 002d27fd..fb9b3910 100644 --- a/src/main/resources/static/assets/platform/js/main.js +++ b/src/main/resources/static/assets/platform/js/main.js @@ -37,34 +37,6 @@ $.ajaxSetup({ } }) -//初始化pjax -// ;(function initPjax() { -// if ($.support.pjax) { -// $(document).pjax("a[data-pjax]", "#container", { -// maxCacheLength: 0, -// push: false, -// replace: true, -// fragment: "#container", -// timeout: 8000 -// }) -// $(document).on("pjax:send", function () { -// NProgress.start() -// $(".ele-admin-content-view").hide() -// window.customStyleList = document.querySelectorAll('style[id^="style-"]') -// }) -// -// $(document).on("pjax:complete", function () { -// if (window.customStyleList) { -// window.customStyleList.forEach((style) => { -// style.parentNode.removeChild(style) -// }) -// } -// NProgress.done() -// $(".ele-admin-content-view").show() -// }) -// } -// })() - function pjaxReplace(url, data = {}) { const { pathname, search } = location if (url === pathname + search) { @@ -81,35 +53,3 @@ function pjaxReplace(url, data = {}) { data }) } - -function removeHTMLTag(str) { - str = str.replace(/<\/?[^>]*>/g, "") //去除HTML tag - str = str.replace(/[ | ]*\n/g, "\n") //去除行尾空白 - str = str.replace(/\n[\s| | ]*\r/g, "\n") //去除多余空行 - str = str.replace(/ /gi, "") //去掉  - return str -} - -function GetQueryString(name) { - return new URLSearchParams(window.location.search).get(name) -} - -function clearAllTimers() { - const maxTimeoutId = setTimeout(function () {}, 0) - for (let i = 0; i <= maxTimeoutId; i++) { - clearTimeout(i) - clearInterval(i) - } -} - -function getNestedValue(obj, path) { - return path.split(".").reduce((acc, part) => acc && acc[part], obj) -} - -function loc() { - return location.href.replace(location.search, "").replace(location.hash, "") -} - -function clone(obj) { - return JSON.parse(JSON.stringify(obj)) -} diff --git a/src/main/resources/static/assets/platform/js/mixin/flowMixins.js b/src/main/resources/static/assets/platform/js/mixin/flowMixins.js new file mode 100644 index 00000000..b2a92fe9 --- /dev/null +++ b/src/main/resources/static/assets/platform/js/mixin/flowMixins.js @@ -0,0 +1,46 @@ +const flowMixins = { + created() { + this.$nextTick(async ()=>{ + await httpVueLoader("/components/plugins/Guava.vue?v=" + new Date().getTime())() + this.checkFlowTask(); + }) + }, + methods: { + checkFlowTask() { + const taskId = GetQueryString("taskId") + if (!taskId) return + + // 如果是开始任务,用户自己处理(编辑、删除、撤销等等) + const taskKey = GetQueryString("taskKey") + if (taskKey === 'startTask') return; + + // 增加loading动画 + const loading = this.$loading({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); + + console.log(this.$refs) + console.log(this.$refs.guava) + + // this.oepnAudit({}) + // + // + // this.$axios.post(location.pathname + '/queryTask', {taskId}).then(res => { + // if (res.code === 0) { + // // 延迟1.5秒 显示loading动画 解决Guava异步加载 获取不到实例的问题 + // setTimeout(() => { + // if (res.data.taskState === 10) { + // this.openAudit(res.data); + // } else { + // this.openView(res.data); + // } + // loading.close(); + // }, 1500) + // } + // }) + }, + } +} diff --git a/src/main/resources/static/assets/platform/js/mixin/styleMixin.js b/src/main/resources/static/assets/platform/js/mixin/styleMixin.js index ed0d274b..acb5890a 100644 --- a/src/main/resources/static/assets/platform/js/mixin/styleMixin.js +++ b/src/main/resources/static/assets/platform/js/mixin/styleMixin.js @@ -1,23 +1,211 @@ -Vue.mixin({ - mounted() { - if (this.$options.style) { - const styleId = `style-${this._uid}` - const style = document.createElement("style") - style.id = styleId - //支持函数和字符串 - const css = typeof this.$options.style === "function" ? this.$options.style.call(this) : this.$options.style - style.textContent = css - document.head.appendChild(style) +const styleUtil = { + // 为元素及其所有子元素添加scoped属性 + addScopedAttribute(el, scopedId, vm) { + if (!el || !el.setAttribute) return; + + // 跳过Vue组件实例 但是不跳过自己 也就是排除子组件 + if (el.__vue__ && el.__vue__ !== vm) return; + + // 添加scoped属性到当前元素 + el.setAttribute(scopedId, '') + + // 只处理普通DOM元素,不处理Vue组件 + // const children = el.children || el.childNodes; + // for (let i = 0; i < children.length; i++) { + // const child = children[i]; + // // 检查是否为普通DOM元素(非Vue组件) + // if (child.nodeType === 1 && !child.__vue__) { + // styleUtil.addScopedAttribute(child, scopedId, vm); + // } + // } + + // 使用TreeWalker优化遍历性能 + const walker = document.createTreeWalker( + el, + NodeFilter.SHOW_ELEMENT, + { + acceptNode(node) { + // 排除子Vue组件 + return node.__vue__ && node !== el + ? NodeFilter.FILTER_REJECT + : NodeFilter.FILTER_ACCEPT; + } + } + ); + + let node; + while (node = walker.nextNode()) { + if (node !== el) { + node.setAttribute(scopedId, ''); + } } }, - beforeDestroy() { - if (this.$options.style) { - const styleId = `style-${this._uid}` - const style = document.getElementById(styleId) - if (style) { - document.head.removeChild(style) + // 移除元素及其所有子元素的scoped属性 + removeScopedAttribute(el, scopedId) { + if (!el || !el.removeAttribute) return; + + // 使用querySelectorAll批量处理 + const elements = el.querySelectorAll(`[${scopedId}]`); + elements.forEach(element => element.removeAttribute(scopedId)); + + // 处理根元素 + el.removeAttribute(scopedId); + + // if (el && el.removeAttribute) { + // el.removeAttribute(scopedId) + // + // // 递归处理所有子元素 + // const children = el.children || el.childNodes + // for (let i = 0; i < children.length; i++) { + // styleUtil.removeScopedAttribute(children[i], scopedId) + // } + // } + }, + + // 为CSS规则添加作用域属性 + scopeCss(css, scopedId) { + // 处理CSS规则,为每个选择器添加[scopedId] + const processedCss = css.replace(/([^{]+){/g, (match, selectors) => { + return selectors.split(',') + .map(selector => { + // 处理深度选择器 + if (selector.includes('::v-deep')) { + return selector.replace('::v-deep', `[${scopedId}]`); + } + + // 处理媒体查询等特殊情况 + if (selector.includes('@') || selector.trim().startsWith('@')) { + return selector; + } + + // 普通选择器 + return `${selector.trim()}[${scopedId}]` + }) + .join(',') + '{' + }) + + return processedCss + }, +} + +// 异步DOM观察器 +const asyncStyleHandler = { + observers: new Map(), + + // 为组件设置观察器 + setupObserver(vm, scopedId) { + if (!vm.$el) return; + + // 清除现有观察器 + this.disconnectObserver(vm._uid); + + // 创建新的MutationObserver + const observer = new MutationObserver((mutations) => { + let shouldProcess = false; + + for (const mutation of mutations) { + if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { + shouldProcess = true; + break; + } } + + if (shouldProcess) { + // 防抖处理 + clearTimeout(vm._styleDebounce); + vm._styleDebounce = setTimeout(() => { + styleUtil.addScopedAttribute(vm.$el, scopedId, vm); + }, 0); + } + }); + + // 开始观察 + observer.observe(vm.$el, { + childList: true, + subtree: true + }); + + // 存储观察器引用 + this.observers.set(vm._uid, observer); + }, + + // 断开观察器 + disconnectObserver(uid) { + if (this.observers.has(uid)) { + this.observers.get(uid).disconnect(); + this.observers.delete(uid); + } + } +}; + +Vue.mixin({ + mounted() { + if (!this.$options.style) return; + + try { + const styleId = `style-${this._uid}`; + const scopedId = `data-v-${this._uid}`; + + // 检查样式是否已存在 + if (document.getElementById(styleId)) { + console.warn(`Style with id ${styleId} already exists`); + return; + } + + const style = document.createElement("style"); + style.id = styleId; + + // 添加作用域属性 + if (this.$el) { + styleUtil.addScopedAttribute(this.$el, scopedId, this); + } + + // 处理CSS + let css = typeof this.$options.style === "function" + ? this.$options.style.call(this) + : this.$options.style; + + if (!css || typeof css !== 'string') { + console.warn('Invalid style content'); + return; + } + + css = styleUtil.scopeCss(css, scopedId); + style.textContent = css; + document.head.appendChild(style); + + this._scopedId = scopedId; + this._styleId = styleId; + + // 设置异步DOM观察器 + asyncStyleHandler.setupObserver(this, scopedId); + + } catch (error) { + console.error('Error applying scoped styles:', error); + } + }, + + + beforeDestroy() { + try { + // 清理作用域属性 + if (this._scopedId && this.$el) { + styleUtil.removeScopedAttribute(this.$el, this._scopedId); + } + + // 移除样式标签 + if (this._styleId) { + const style = document.getElementById(this._styleId); + if (style && style.parentNode) { + style.parentNode.removeChild(style); + } + } + + // 断开观察器 + asyncStyleHandler.disconnectObserver(this._uid); + } catch (error) { + console.error('Error cleaning up scoped styles:', error); } } }) diff --git a/src/main/resources/static/assets/platform/js/util/commonUtil.js b/src/main/resources/static/assets/platform/js/util/commonUtil.js index b16a6d55..26eba11b 100644 --- a/src/main/resources/static/assets/platform/js/util/commonUtil.js +++ b/src/main/resources/static/assets/platform/js/util/commonUtil.js @@ -228,3 +228,57 @@ const commonUtil = { } } } + +function removeHTMLTag(str) { + str = str.replace(/<\/?[^>]*>/g, "") //去除HTML tag + str = str.replace(/[ | ]*\n/g, "\n") //去除行尾空白 + str = str.replace(/\n[\s| | ]*\r/g, "\n") //去除多余空行 + str = str.replace(/ /gi, "") //去掉  + return str +} + +function GetQueryString(name) { + return new URLSearchParams(window.location.search).get(name) +} + +function clearAllTimers() { + const maxTimeoutId = setTimeout(function () {}, 0) + for (let i = 0; i <= maxTimeoutId; i++) { + clearTimeout(i) + clearInterval(i) + } +} + +function getNestedValue(obj, path) { + return path.split(".").reduce((acc, part) => acc && acc[part], obj) +} + +function loc() { + return location.href.replace(location.search, "").replace(location.hash, "") +} + +function clone(obj) { + return JSON.parse(JSON.stringify(obj)) +} + +function base64ToFile(base64Data, filename) { + // 将base64的数据部分提取出来 + const parts = base64Data.split(";base64,") + const contentType = parts[0].split(":")[1] + const raw = window.atob(parts[1]) + const rawLength = raw.length + const uInt8Array = new Uint8Array(rawLength) + + for (let i = 0; i < rawLength; ++i) { + uInt8Array[i] = raw.charCodeAt(i) + } + + // 使用Blob对象创建File对象 + const blob = new Blob([uInt8Array], { type: contentType }) + blob.lastModifiedDate = new Date() + blob.name = filename + return new File([blob], filename, { type: contentType }) +} + + + diff --git a/src/main/resources/static/assets/platform/module/dayofficework/condolence/condolenceCommonApi.js b/src/main/resources/static/assets/platform/module/dayofficework/condolence/condolenceCommonApi.js deleted file mode 100644 index 29824917..00000000 --- a/src/main/resources/static/assets/platform/module/dayofficework/condolence/condolenceCommonApi.js +++ /dev/null @@ -1,12 +0,0 @@ -;(function () { - const api = { - listType() { - return $.get("/platform/condolence/common/listType") - }, - - listOpenType() { - return $.get("/platform/condolence/common/listType") - } - } - window.condolenceCommonApi = api -})() diff --git a/src/main/resources/static/assets/platform/module/democratic/teachercongress/teacherCongressCommonApi.js b/src/main/resources/static/assets/platform/module/democratic/teachercongress/teacherCongressCommonApi.js deleted file mode 100644 index 424f57eb..00000000 --- a/src/main/resources/static/assets/platform/module/democratic/teachercongress/teacherCongressCommonApi.js +++ /dev/null @@ -1,24 +0,0 @@ -;(function () { - const teacherCongressApi = { - //全部教代会 - listSession() { - return $.get("/platform/teacherCongress/common/listSession") - }, - - //开启的教代会 - listOpenSession() { - return $.get("/platform/teacherCongress/common/listOpenSession") - }, - - //查询代表团根据教代会 - listDelegation(sessionId) { - return $.get("/platform/teacherCongress/common/listDelegation", { sessionId }) - }, - - //查询所有的代表类型(三种) - listDelegateRole() { - return $.get("/platform/teacherCongress/common/listDelegateRole") - } - } - window.teacherCongressApi = teacherCongressApi -})() diff --git a/src/main/resources/static/assets/platform/module/democratic/workercongress/workersCongressCommonApi.js b/src/main/resources/static/assets/platform/module/democratic/workercongress/workersCongressCommonApi.js deleted file mode 100644 index 2266fb68..00000000 --- a/src/main/resources/static/assets/platform/module/democratic/workercongress/workersCongressCommonApi.js +++ /dev/null @@ -1,24 +0,0 @@ -(function () { - const workersCongressApi = { - //全部工代会 - listSession() { - return $.get("/platform/teacherCongress/common/listSession") - }, - - //开启的工代会 - listOpenSession() { - return $.get("/platform/teacherCongress/common/listOpenSession") - }, - - //查询代表团根据工代会 - listDelegation(sessionId) { - return $.get("/platform/teacherCongress/common/listDelegation", { sessionId }) - }, - - //查询所有的代表类型(三种) - listDelegateRole() { - return $.get("/platform/teacherCongress/common/listDelegateRole") - } - } - window.workersCongressApi = workersCongressApi -})() diff --git a/src/main/resources/static/assets/platform/module/initTableMixins.js b/src/main/resources/static/assets/platform/module/initTableMixins.js deleted file mode 100644 index ddc088e0..00000000 --- a/src/main/resources/static/assets/platform/module/initTableMixins.js +++ /dev/null @@ -1,101 +0,0 @@ -const initTableMixins = { - data() { - return { - pageDataUrl: "", - submitLoading: false, - searchMore: false, - tableSize: "", - tableKey: "", - formData: {}, - formRules: {}, - formLoading: false, - tableLoading: false, - tableData: [], - tableColumns: [], - pageForm: { - searchName: "", - searchKeyword: "", - pageNumber: 1, - pageSize: 10, - totalCount: 0, - pageOrderName: "", - pageOrderBy: "" - }, - guavaIndex: "index", - unionGroups: [], - threeUnits: [] - } - }, - methods: { - dropdownCommand({ action, value }) { - if (action) action(value) - }, - columnChange(val) { - this.tableLoading = true - this.tableColumns = val - this.tableLoading = false - }, - tableSizeChange(size) { - this.tableSize = size - }, - indexMethod(index) { - return index + (this.pageForm.pageNumber - 1) * this.pageForm.pageSize + 1 - }, - doSearch() { - this.tableKey = new Date().getTime() - this.pageForm.pageNumber = 1 - this.pageData() - }, - pageOrder(column) { - this.pageForm.pageOrderName = column.prop - this.pageForm.pageOrderBy = column.order - this.pageData() - }, - pageNumberChange(val) { - this.pageForm.pageNumber = val - this.pageData() - }, - pageSizeChange(val) { - this.pageForm.pageSize = val - this.pageData() - }, - pageData(url = null, data = null) { - const address = url ? url : loc() + "/pageData" - this.tableLoading = true - $.post( - address, - data ? data : this.pageForm, - (data) => { - this.tableLoading = false - if (data.code === 0) { - this.tableData = data.data.list - this.pageForm.totalCount = data.data.totalCount - } else { - this.$message.error(data.msg) - } - }, - "json" - ) - }, - notifySuccess(msg) { - this.$notify({ - title: "成功", - message: msg, - type: "success" - }) - }, - notifyWarning(msg) { - this.$notify({ - title: "警告", - message: msg, - type: "warning" - }) - }, - notifyError(msg) { - this.$notify.error({ - title: "错误", - message: msg - }) - } - } -} diff --git a/src/main/resources/static/assets/platform/module/mall/addGoods.css b/src/main/resources/static/assets/platform/module/mall/addGoods.css deleted file mode 100644 index 555c309a..00000000 --- a/src/main/resources/static/assets/platform/module/mall/addGoods.css +++ /dev/null @@ -1,530 +0,0 @@ -/*选择商品品类*/ -.content-goods-publish { - padding: 15px; - margin: 0 auto; - text-align: center; - border-radius: 0.8em; - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); - background: none repeat 0 0 #fff; - - /*商品品类*/ - .goods-category { - min-height: 500px; - border-radius: 0.8em; - text-align: left; - padding: 10px; - background: #ededed; - - ul { - padding: 12px 8px; - list-style: none; - width: 300px; - background: none repeat 0 0 #fff; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04); - border-radius: 0.4em; - display: inline-block; - letter-spacing: normal; - margin-right: 15px; - vertical-align: top; - word-spacing: normal; - - li { - line-height: 20px; - padding: 10px 5px; - cursor: pointer; - color: #333; - font-size: 12px; - display: flex; - flex-wrap: nowrap; - flex-direction: row; - justify-content: space-between; - align-items: center; - } - } - } - - /** 当前品类被选中的样式 */ - .activeClass { - border-radius: 0.4em; - background-color: color-mix(in srgb, var(--color-primary) 20%, transparent); - border: 1px solid color-mix(in srgb, var(--color-primary) 80%, transparent); - /*background-color: rgba(33, 112, 80, 0.2);*/ - /*border: 1px solid rgba(33, 112, 80, 0.8);*/ - color: #fff; - } - - /*!*当前选择的商品品类文字*!*/ - .current-goods-category { - text-align: left; - padding: 10px; - width: 100%; - border: 1px solid #fbeed5; - color: #c09853; - background-color: #fcf8e3; - margin: 10px auto; - padding: 8px 35px 8px 14px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - font-size: 12px; - font-weight: bold; - } -} - -/*编辑基本信息*/ -.el-form { - padding-bottom: 80px; - - .el-form-item { - width: 100%; - text-align: left; - } -} - -.sku-val { - justify-content: flex-start; - flex-wrap: wrap; - - >.ivu-form { - flex-wrap: wrap !important; - } - - /deep/ .sku-item-content-val { - margin-right: 20px; - } -} - -div.base-info-item { - h4 { - margin-bottom: 10px; - padding: 0 10px; - border: 1px solid #ddd; - background-color: #f8f8f8; - font-weight: bold; - color: #333; - font-size: 14px; - line-height: 40px; - text-align: left; - } - - >div { - padding-left: 5%; - } - - .form-item-view { - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: space-between; - // padding-left: 80px; - - .form-item-view-wholesale { - display: flex; - - .form-item-view-wholesale-preview { - padding-left: 5%; - } - - } - - .layout { - margin-bottom: 20px; - width: 100%; - justify-content: center; - - .sku-item-content { - margin: 20px 0; - display: flex; - width: 100% !important; - flex: 1; - - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - width: 100%; - - >.ivu-card-body { - width: 100%; - } - - .ivu-card-body { - width: 100%; - justify-content: center; - align-items: flex-start; - } - - .sku-item-content-name { - display: flex; - align-items: flex-start; - justify-content: flex-start; - width: 100%; - } - } - } - - .shop-category-text { - font-size: 12px; - } - } - - .form-item-view-bottom { - margin-bottom: 50px; - } - - .item-goods-properts-row { - display: flex; - flex-direction: row; - word-break: break-all; - white-space: normal; - width: 300px; - height: 100px; - } - - .item-goods-properts { - display: flex; - flex-direction: row; - margin-bottom: 10px; - } - - .form-item { - display: flex; - align-items: center; - } - - /** 审核信息-拒绝原因 */ - .auth-info { - color: red; - } - - .el-form-item { - width: 30%; - min-width: 300px; - } - - .goods-name-width { - width: 50%; - min-width: 300px; - } - - .el-form-item__content { - margin-left: 120px; - text-align: left; - } - - p.goods-group-manager { - padding-left: 7.5%; - text-align: left; - color: #999; - font-size: 13px; - } - - /*teatarea*/ - /deep/ .el-textarea { - width: 150%; - } - - .seo-text { - width: 150%; - } -} - -/*折叠面板*/ -.el-collapse-item { - /deep/ .el-collapse-item__header { - text-align: left; - background-color: #f8f8f8; - padding: 0 10px; - font-weight: bold; - color: #333; - font-size: 14px; - } - - .el-form-item { - margin-left: 5%; - width: 25%; - } - - /deep/ .el-form-item__content { - margin-left: 120px; - text-align: left; - } - - p.goods-group-manager { - padding-left: 12%; - text-align: left; - color: #999; - } - - /deep/ .el-collapse-item__content { - padding: 10px 0; - text-align: left; - } -} - -.success { - >h1 { - font-size: 28px; - } - - >* { - margin: 10px; - } -} - -.operation { - >* { - margin: 10px 0; - } -} - -/*商品描述*/ -.goods-intro { - line-height: 40; -} - -/** 底部步骤 */ -.footer { - width: 100%; - margin-top: 20px; - padding: 10px; - background-color: #ffc; - position: sticky; - bottom: 0px; - text-align: center; - z-index: 999; - - >.ivu-btn { - margin: 0 10px; - } -} - -/*图片上传组件第一张图设置封面*/ -.goods-images { - /deep/ li.el-upload-list__item:first-child { - position: relative; - } - - /deep/ li.el-upload-list__item:first-child:after { - content: "封"; - color: #fff; - font-weight: bold; - font-size: 12px; - position: absolute; - left: -15px; - top: -6px; - width: 40px; - height: 24px; - padding-top: 6px; - background: #13ce66; - text-align: center; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); - box-shadow: 0 0 1pc 1px rgba(0, 0, 0, 0.2); - } -} - -.el-form-item__label { - word-break: break-all; -} - -.step-list { - height: 60px; - padding: 10px 30px; - background-color: #fff; - margin-bottom: 20px; - border-radius: 0.8em; - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); -} - -.add-sku-btn { - margin-top: 10px; -} - -.sku-item:not(:first-child) { - margin-top: 10px; -} - -.sku-upload-list { - text-align: center; - border: 1px solid transparent; - border-radius: 4px; - overflow: hidden; - background: #fff; - position: relative; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - margin-right: 8px; -} - -.preview-picture { - width: 100%; - margin: 0 auto; - display: block; - // text-align: center; - border: 1px solid transparent; - // justify-self: center; - // align-self: center; -} - -.preview-picture img { - width: 100%; - height: 100%; -} - -.sku-upload-list img { - width: 100%; - height: 100%; -} - -.sku-upload-list-cover { - display: none; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - background: rgba(0, 0, 0, 0.6); -} - -.sku-upload-list:hover .sku-upload-list-cover { - display: block; -} - -.sku-upload-list-cover i { - color: #fff; - font-size: 20px; - cursor: pointer; - margin: 0 2px; -} - -.required { - /deep/ .ivu-form-item-label::before { - content: "*"; - display: inline-block; - margin-right: 4px; - line-height: 1; - font-family: SimSun; - font-size: 14px; - color: #ed4014; - } -} - -.demo-upload-list { - width: 150px; - height: 150px; - text-align: center; - border: 1px solid transparent; - border-radius: 4px; - display: inline-block; - background: #fff; - position: relative; - margin-right: 4px; - vertical-align: bottom; -} - -.demo-upload-list img { - width: 100%; - height: 100%; -} - -.demo-upload-list-cover { - display: none; - position: absolute; - top: 0; - bottom: 0; - left: 0; - - right: 0; - background: rgba(0, 0, 0, 0.6); - - justify-content: space-between; - align-items: center; - flex-direction: column; -} - -.demo-upload-list:hover .demo-upload-list-cover { - display: flex; -} - -.demo-upload-list-cover div { - margin-top: 50px; - width: 100%; - - >i { - width: 50%; - margin-top: 8px; - color: #fff; - font-size: 20px; - cursor: pointer; - } -} - -.active-goods-type { - background: #e8e8e8; -} - -.goods-type-list { - max-height: 500px; - overflow-y: auto; -} - -.template-item { - justify-content: flex-start !important; -} - -.tree-bar { - height: auto !important; - max-height: auto !important; - min-height: 240px !important; -} - -.goods-type-item { - padding: 20px 0; - width: 100%; - cursor: pointer; - transition: 0.35s; - display: flex; - justify-content: center; - align-items: center; - - /deep/ img { - margin-right: 20px; - width: 100px; - margin-left: 10px; - } - - - - /deep/ p { - color: #999; - font-size: 14px; - margin-top: 10px; - } -} - -.goods-type-item:hover { - background: #ededed; -} - -.goods-list-box { - height: 450px; - overflow: auto; -} - -h2 { - cursor: pointer; - font-size: 21px; - color: #333; -} - -.form-item-view-wholesale-form-col { - height: 400px; -} - -.form-item-view-wholesale-row-del { - display: "flex"; - justify-content: "space-between"; - align-items: "center"; -} -.promise-intro-btn{ - margin: 10px 0; - text-align: left; -} diff --git a/src/main/resources/static/components/plugins/paginationList/index.vue b/src/main/resources/static/components/plugins/paginationList/index.vue new file mode 100644 index 00000000..6478dc94 --- /dev/null +++ b/src/main/resources/static/components/plugins/paginationList/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/main/resources/static/components/plugins/sysImport/index.vue b/src/main/resources/static/components/plugins/sysImport/index.vue index 368ca8cb..22ce571a 100644 --- a/src/main/resources/static/components/plugins/sysImport/index.vue +++ b/src/main/resources/static/components/plugins/sysImport/index.vue @@ -36,6 +36,7 @@ } " :auto-upload="false" + action :limit="1" :file-list="importData.fileList" > diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index c06b8063..357ddf28 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -1,271 +1,379 @@ - - - - - 智慧工会 + + + + + 智慧工会 - - - - - - + + + + + - - - - + + + + - - + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + + - - - - - - - + + + + + + + - - + + > - + + + - - - + } - + send(message) { + if (this.ws) { + const messageStr = typeof message === "string" ? message : JSON.stringify(message) + this.ws.send(messageStr) + } + } + } - - - -
              -
              -
              ${layoutContent}
              -
              -
              - - + window.webSocketPubSub = new WebSocketPubSub() + + + + + + + + + + +
              +
              +
              ${layoutContent}
              +
              +
              + + diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index 667eb77e..7362177b 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -81,6 +81,7 @@ + diff --git a/src/main/resources/views/platform/flow/todoCenter/index.html b/src/main/resources/views/platform/flow/todoCenter/index.html index 3b4a8513..3bf71527 100644 --- a/src/main/resources/views/platform/flow/todoCenter/index.html +++ b/src/main/resources/views/platform/flow/todoCenter/index.html @@ -254,7 +254,8 @@ layout("/layouts/v4/baseLayout.html"){ - @@ -478,13 +479,13 @@ layout("/layouts/v4/baseLayout.html"){ // 处理任务 async openView(task) { - const {taskId, taskState, instanceId, businessNo} = task - // if (taskState === this.taskStateEnum.DOING) { - // window.open("/flow/common/approval/form?instanceId=" + instanceId + "&taskId=" + taskId + "&businessId=" + businessNo) - // } else { - // window.open("/flow/common/approval/form?instanceId=" + instanceId + "&businessId=" + businessNo) - // } - this.$message.error("功能开发中...") + console.log(task) + const {taskId, taskKey, taskState, instanceId, businessNo, formKey} = task + if (!formKey) { + this.$message.warning("当前流程没有配置地址") + return + } + window.open(formKey + "?taskId=" + taskId + "bizId=" + businessNo + "taskKey=" + taskKey) }, // 获取空状态文本 diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/form.html index c42ec176..7876ebfc 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/form.html @@ -141,6 +141,7 @@ @@ -188,6 +189,12 @@ handleTaskAction(val) { this.$refs.formRef.validate((valid) => { if (valid) { + + if (this.formData.planDate && this.formData.planDate.length > 0) { + this.formData.planStartTime = this.formData.planDate[0] + this.formData.planEndTime = this.formData.planDate[1] + } + if (!this.instanceId) { this.handleApply(val) } else { @@ -306,6 +313,7 @@ this.findOne(this.businessId) } else { const user = this.$store.state.user + this.$set(this.formData, "userId", user.id) this.$set(this.formData, "userName", user.username) this.$set(this.formData, "loginName", user.loginname) this.$set(this.formData, "mobile", user.mobile) diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/index.html index 3fded042..398146b8 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/index.html @@ -1,104 +1,179 @@ +
              - - - - - - - - - - - - - - - - - - - 活动申报 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + 保存 + 提交 + 提交1 + -
              diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/view.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/view.html index e69de29b..4cf4d014 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/view.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/apply/view.html @@ -0,0 +1,134 @@ +
              + + {{ viewData.activityName }} + {{ getActivityTypeName(viewData.activityType) }} + + {{ viewData.userName + '(' + viewData.loginName + ')' }} + {{ viewData.declareUnitName }} + + {{ viewData.mobile }} + {{ viewData.applyTime }} + + {{ viewData.planStartTime + ' ~ ' + viewData.planEndTime }} + {{ viewData.activityNumber }} + + {{ viewData.activityAddress }} + + + + + + + + + + +
              +
              + + + + 暂无 + + + + + 暂无 + +
              + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/form.html index e69de29b..ae9a667d 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/branchunion/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/form.html index e69de29b..fd811ceb 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/index.html index e69de29b..a9fd37c0 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/clubprincipal/index.html @@ -0,0 +1,212 @@ + +
              + + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/common/info.js b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/common/info.js new file mode 100644 index 00000000..8cddbb7e --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/common/info.js @@ -0,0 +1,149 @@ +const INFO = { + template: /*language=HTML*/ ` +
              +
              申请信息 + 点击查看流程图 +
              + + {{ viewData.activityName }} + {{ getActivityTypeName(viewData.activityType) }} + + + {{ viewData.userName + '(' + viewData.loginName + ')' }} + + {{ + viewData.declareUnitName }} + + + {{ viewData.mobile }} + {{ viewData.applyTime }} + + {{ $moment(viewData.planStartTime).format('YYYY-MM-DD') + ' ~ ' + $moment(viewData.planEndTime).format('YYYY-MM-DD') }} + + {{ viewData.activityNumber }} + + {{ viewData.activityAddress }} + + + + + + + + + + +
              +
              + + + + 暂无 + + + + + 暂无 + +
              + + + + + + +
              + `, + store, + dicts: ["PROCESS_TASK_SUBMIT_TYPE"], + data() { + return { + viewData: {}, + doneTasks: [], + row: null, + + activityDeclareReimbursementList: [] + } + }, + methods: { + // 打开 + onOpen(row) { + this.row = row + this.info() + this.getDoneTasks() + }, + + // 获取申请信息 + info() { + this.$axios.post("/platform/activityDeclare/mine/findOne", { id: this.row.id }).then((res) => { + if (res.code === 0) { + this.viewData = res.data + } + }) + }, + + // 获取已办任务审批记录 + getDoneTasks() { + this.$axios.post("/flow/common/doneTasks", { bizId: this.row.id }).then((res) => { + if (res.code === 0) { + this.doneTasks = res.data + } + }) + }, + + // 查看流程图 + openChart(){ + this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId) + }, + + getActivityTypeName(type) { + const data = this.activityDeclareReimbursementList.find(item => item.name === type) + return data ? data.typeName : "" + }, + }, + async created() { + this.activityDeclareReimbursementList = await this.$businessTool.getEnumOptions("ActivityDeclareReimbursement") + }, + style: /*language=CSS*/ ` + .el-descriptions-item__label.is-bordered-label { + width: 15% !important; + } + + .el-descriptions-item__label { + width: 15% !important; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/mine/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/mine/index.html new file mode 100644 index 00000000..69d45387 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/mine/index.html @@ -0,0 +1,217 @@ + +
              + + + + + + + + + + + + + + + + + + + + + 活动申报 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/form.html index e69de29b..7d04faf6 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolprincipal/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/form.html index e69de29b..e5e421f8 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/declare/schoolunion/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/form.html index e69de29b..ce0ed50a 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/form.html @@ -0,0 +1,326 @@ +
              + + + + + + + + + + + + 查看申报信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/index.html index e69de29b..4654d533 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/index.html @@ -0,0 +1,376 @@ + + +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 保存 + 提交 + 提交1 + + + + + +
              + +
              + +
              + +
              +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/view.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/view.html index e69de29b..6e8c1710 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/view.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/apply/view.html @@ -0,0 +1,152 @@ +
              + + {{ viewData.activityName }} + {{ getActivityTypeName(viewData.activityType) }} + + {{ viewData.userName + '(' + viewData.loginName + ')' }} + {{ viewData.declareUnitName }} + + {{ viewData.mobile }} + {{ viewData.applyTime }} + + {{ (viewData.planStartTime ? viewData.planStartTime : '未填写') + ' ~ ' + (viewData.planEndTime ? viewData.planEndTime : '未填写') }} + {{ viewData.activityNumber }} + + {{ (viewData.startTime ? viewData.startTime : '未填写') + ' ~ ' + (viewData.endTime ? viewData.endTime : '未填写') }} + + {{ viewData.activityAddress }} + + + + + + + + + + + + + + + +
              +
              + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + +
              + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/board/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/board/index.html new file mode 100644 index 00000000..11a24056 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/board/index.html @@ -0,0 +1,572 @@ + + +
              +
              + +
              + +
              + + + - + + +
              + +
              校工会活动总人数
              +
              {{numData.schoolSignNum?numData.schoolSignNum:'0'}}
              +
              +
              + +
              分工会活动总人数
              +
              {{numData.unionSignNum?numData.unionSignNum:'0'}}
              +
              +
              + +
              协会活动总人数
              +
              {{numData.clubSignNum?numData.clubSignNum:'0'}}
              +
              +
              + +
              校工会活动报销费用(元) +
              + +
              {{numData.schoolActivityMoney?numData.schoolActivityMoney:'0'}}
              +
              +
              + +
              分工会活动报销费用(元) +
              + +
              {{numData.unionActivityMoney?numData.unionActivityMoney:'0'}}
              +
              +
              + +
              社团活动报销费用(元) +
              +
              {{numData.clubActivityMoney?numData.clubActivityMoney:'0'}}
              +
              +
              +
              + + +
              + + + - + + +
              + +
              活动类型
              +
              +
              + +
              活动类型占比
              +
              +
              +
              + + +
              + + + - + + +
              + +
              活动报销费用
              +
              +
              + +
              活动报销费用占比
              +
              +
              +
              + + + +
              + + +
              + +
              {{allUnionYear}}年工会报销费用及活动情况 + + + +
              +
              +
              +
              + + + +
              + + +
              + +
              {{allClubYear}}年社团报销费用及活动情况 + + + +
              +
              +
              +
              + +
              +
              +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/form.html index e69de29b..da149e48 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/branchunion/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/form.html index e69de29b..020e931d 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/index.html index e69de29b..a9fd37c0 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/clubprincipal/index.html @@ -0,0 +1,212 @@ + +
              + + + + + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/common/info.js b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/common/info.js new file mode 100644 index 00000000..d7a2deed --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/common/info.js @@ -0,0 +1,177 @@ +const INFO = { + template: /*language=HTML*/ ` +
              +
              申请信息 + 点击查看流程图 +
              + + {{ viewData.activityName }} + {{ getActivityTypeName(viewData.activityType) }} + + + {{ viewData.userName + '(' + viewData.loginName + ')' }} + + {{ + viewData.declareUnitName }} + + + {{ viewData.mobile }} + {{ viewData.applyTime }} + + {{ (viewData.planStartTime ? viewData.planStartTime : '未填写') + + ' ~ ' + (viewData.planEndTime ? viewData.planEndTime : '未填写') }} + + {{ viewData.activityNumber }} + + {{ (viewData.startTime ? viewData.startTime : + '未填写') + ' ~ ' + (viewData.endTime ? viewData.endTime : '未填写') }} + + + {{ viewData.activityAddress }} + + + + + + + + + + + + + + + +
              +
              + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + + + + + 暂无 + +
              + + + + + + +
              + `, + store, + dicts: ["PROCESS_TASK_SUBMIT_TYPE"], + data() { + return { + viewData: {}, + doneTasks: [], + row: null, + + activityDeclareReimbursementList: [] + } + }, + methods: { + // 打开 + onOpen(row) { + this.row = row + this.info() + this.getDoneTasks() + }, + + // 获取申请信息 + info() { + this.$axios.post("/platform/activityReimbursement/mine/findOne", { id: this.row.id }).then((res) => { + if (res.code === 0) { + this.viewData = res.data + } + }) + }, + + // 获取已办任务审批记录 + getDoneTasks() { + this.$axios.post("/flow/common/doneTasks", { bizId: this.row.id }).then((res) => { + if (res.code === 0) { + this.doneTasks = res.data + } + }) + }, + + // 查看流程图 + openChart(){ + this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId) + }, + + getActivityTypeName(type) { + const data = this.activityDeclareReimbursementList.find(item => item.name === type) + return data ? data.typeName : "" + }, + }, + async created() { + this.activityDeclareReimbursementList = await this.$businessTool.getEnumOptions("ActivityDeclareReimbursement") + }, + style: /*language=CSS*/ ` + .el-descriptions-item__label.is-bordered-label { + width: 15% !important; + } + + .el-descriptions-item__label { + width: 15% !important; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/mine/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/mine/index.html new file mode 100644 index 00000000..b7a0932b --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/mine/index.html @@ -0,0 +1,221 @@ + +
              + + + + + + + + + + + + + + + + + + + + + 活动申报 + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/form.html index e69de29b..d96aff8d 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolprincipal/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/form.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/form.html index e69de29b..bcd0e7b7 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/form.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/form.html @@ -0,0 +1,49 @@ +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html index e69de29b..923eb5b3 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html @@ -0,0 +1,233 @@ + +
              + + + + + + + + + + + + + + + + + + + + 已审核 + 未审核 + + + + + + + + + + + + + + + + + + + + + +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/apply/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/apply/index.html new file mode 100644 index 00000000..110eb306 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/apply/index.html @@ -0,0 +1,121 @@ + + + + +
              + + + + + + + + + + 全部 + 报名中 + 已结束 + + + + + + + + + + + + + + + + + + + + + + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/apply/info.js b/src/main/resources/views/platform/zhgh/activity/literacy/apply/info.js new file mode 100644 index 00000000..e75b9506 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/apply/info.js @@ -0,0 +1,306 @@ + +const info = { + template: /*language=HTML*/ ` +
              + + + + + 类  型: + + + + + + + + 分类标识: + + + {{ item }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取 消 + + + + +
              + + 取 消 + +
              + + +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + mixins: [initTableMixins], + components: { + "sign-form": signForm, + }, + data() { + return { + pageForm: { + assortTypes: [], + }, + assortList: [], + courseTimeListDialog: false, + viewMapDialog: false, + courseTimeList: [], + tableColumns: [ + { prop: "courseName", label: "名称" }, + { prop: "typeName", label: "类型", width: 130}, + { prop: "courseLocationCoordinates", label: "地点", width: 200 }, + { prop: "courseInstructor", label: "联系人", width: 100 }, + { prop: "courseTime", label: "时间", width: 200 }, + { prop: "applyNum", label: "已报名人数", width: 200 } + ], + activity: {}, + courseTypeList: [], + + literacyType: '', + } + }, + methods: { + tagClick(key, val) { + let idx = this.pageForm[key].indexOf(val) + if (idx !== -1) { + this.pageForm[key].splice(idx, 1) + } else { + this.pageForm[key].push(val) + } + this.doSearch() + }, + async onOpen(row) { + this.activity = row + this.$set(this.pageForm, 'activityId', row.id) + await this.pageData() + await this.getCourseTypeList() + this.queryCourseAssort() + }, + onSign(row) { + const course = this.courseTypeList.find((v) => v.id === row.courseType) + this.$axios.post("/platform/mobile/literacyActivity/validateSignUp", {courseId: row.id}) + .then((res) => { + if (res.code !== 0) { + this.$alert(res.msg, "提示", { + confirmButtonText: "确定", + type: "warning" + }) + } else { + let lave = row.coursePeopleNumber - (row.hasRegisterNum + row.courseReservedNumber) + if(row.reserveMode === 2 && lave <= 0) { + this.$alert('您当前的报名为候补报名状态', "提示", { + confirmButtonText: "确定", + type: "warning" + }) + } + this.$refs.signFormRef.onOpen(row, course) + } + }) + }, + onCancel(row) { + this.$confirm("您确定要取消吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "info" + }).then(async () => { + const resp = await this.$axios.post("/platform/mobile/literacyActivity/cancelSignUp", { + activityId: row.activityId, + courseId: row.id + }) + if (resp.code === 0) { + await this.pageData() + this.$message.success(resp.msg) + } else { + this.$message.warning(resp.msg) + } + }) + }, + async getCourseTypeList() { + const resp = await this.$axios.post("/platform/literacy/manage/type/getAllType") + if (resp.code === 0) { + this.courseTypeList = resp.data + } + }, + async openViewCourseTime(id) { + const resp = await this.$axios.post(loc() + "/getCourseTime", { id: id }) + this.courseTimeList = resp.data + this.courseTimeListDialog = true + }, + openViewMap(point) { + if (!Array.isArray(point)) { + this.$message.warning("没有设置点位,无法通过地图查看") + return + } + this.viewMapDialog = true + this.$nextTick(() => { + const viewMap = new AMap.Map("viewMap", { + resizeEnable: true, + center: point, + zoom: 16 + }) + if (viewMarker) { + viewMap.remove(viewMarker) + } + viewMarker = new AMap.Marker({ + position: point, + offset: new AMap.Pixel(-13, -30) + }) + viewMap.add(viewMarker) + viewMap.setFitView(null, false, [150, 60, 100, 60]) + }) + }, + calcSignUpCount(o) { + let lave = o.coursePeopleNumber - (o.hasRegisterNum + o.courseReservedNumber) + if(o.reserveMode === 2) { + let lave2 = o.waitingNum - o.hasWaitingNum + return "余" + lave +"/" + o.coursePeopleNumber + "人" + + ",候补余" + lave2 + "/" + o.waitingNum + "人" + } else { + return "余" + lave +"/" + o.coursePeopleNumber + "人" + } + }, + async pageData() { + const pageForm = clone({...this.pageForm}) + pageForm.assortTypes = JSON.stringify(pageForm.assortTypes) + const resp = await this.$axios.post(loc() + "/pageData", pageForm) + if (resp.code === 0) { + this.tableData = resp.data.list + this.pageForm.totalCount = resp.data.totalCount + } else { + this.$message.warning(resp.msg) + } + }, + queryCourseAssort() { + console.log(this.activity) + this.$axios.post(loc() + "/queryCourseAssort", {activityId: this.activity.id}) + .then((resp) => { + this.assortList = resp.data + }) + }, + }, + created() { + + }, + style: /*language=CSS*/ ` + .glow-box { + min-height: calc(100vh - 56px - 40px - 50px - 80px); + max-height: calc(100vh - 56px - 40px - 50px - 80px); + overflow-y: auto; + background: #F0F2F5; + } + img { + width: 100%; + height: 180px; + } + .title { + background: white; + height: 20px; + } + .query-row { + display: flex; + align-items: center; + padding: 6px 0; + } + .query-row:not(:last-child) { + border-bottom: 1px dashed rgb(230, 230, 230); + } + .query-row > .query-title { + width: 100px; + max-width: 100px; + min-width: 100px; + overflow: hidden; + } + .query-row > .query-content { + min-width: 200px; + overflow: hidden; + } + .query-row > .query-content > .el-tag { + margin-bottom: 5px; + margin-top: 5px; + } + @media screen and (max-width: 992px) { + .query-row:nth-child(4) .query-content .el-col:not(:last-child) { + margin-bottom: 5px; + } + + .query-title { + display: none; + } + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/apply/signForm.js b/src/main/resources/views/platform/zhgh/activity/literacy/apply/signForm.js new file mode 100644 index 00000000..47cd4349 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/apply/signForm.js @@ -0,0 +1,216 @@ +const signForm = { + template: /*language=HTML*/ ` +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取 消 + 提 交 + + +
              + `, + store, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + signDialog: false, + formData: {}, + courseRow: {}, + courseTimeSelectList: [], + } + }, + methods: { + async getCourseTimeSelectList(o) { + const resp = await $.post('/platform/mobile/literacyActivity/getCourseTimeSelectList',{ courseId: o.id }) + if (resp.code === 0) { + this.courseTimeSelectList = resp.data + } else { + this.$message.warning('获取时段信息失败,请联系管理员') + } + }, + async onOpen(row, course) { + this.initData(row, course) + if (row.courseIsLimitApply) { + await this.getCourseTimeSelectList(row) + } + this.courseRow = row + this.signDialog = true + }, + async onSubmit() { + //获取家属是多少人 + let per = 0 + this.formData.literacyMobileSignColumnList.forEach((item) => { + if (item.columnCode === "xdqsrs") { + per += Number(item.columnValue) + } + }) + const res = await this.$axios.post("/platform/mobile/literacyActivity/validateSignUp", { + courseId: this.formData.courseId, + currentFamilyNumber: per + }) + if (res.code !== 0) { + this.$message.warning(res.msg) + return + } + this.$refs["form"].validate(async (valid) => { + if (valid) { + if (this.courseRow.courseIsLimitApply) { + const resp = await this.$axios.post('/platform/mobile/literacyActivity/validateSourceSignUp', { + activityCourseId: this.formData.activityCourseId, + courseId: this.courseRow.id + }) + if (resp.code !== 0) { + this.$message.warning(res.msg) + return + } + } + this.$confirm("您确定要提交吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(async () => { + const mobileColumnsValue = this.formData.literacyMobileSignColumnList.map((v) => { + return { + columnName: v.columnName, + columnValue: v.columnValue, + columnCode: v.columnCode, + columnFormType: v.columnFormType + } + }) + this.formData.mobileColumnsValue = JSON.stringify(mobileColumnsValue) + const resp = await this.$axios.post("/platform/mobile/literacyActivity/doSignUp", this.formData) + if (resp.code === 0) { + this.signDialog = false + this.$message.success(resp.msg) + this.$emit('refresh') + } else { + this.$message.warning(resp.msg) + } + }) + } + }) + }, + initData(row, course) { + this.formData = { + activityId: row.activityId, + courseId: row.id, + username: this.$store.state.user.username, + loginname: this.$store.state.user.loginname, + unionName: this.$store.state.user.union.name, + unitName: this.$store.state.user.unit.name, + sex: this.$store.state.user.sex, + mobile: this.$store.state.user.mobile, + literacyMobileSignColumnList: course.literacyMobileSignColumnList + } + this.formData.literacyMobileSignColumnList.forEach((item) => { + item.columnValue = "" + }) + this.$nextTick(() => { + this.$refs.form.clearValidate() + }) + }, + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/basicForm.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/basicForm.js new file mode 100644 index 00000000..11ad54cc --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/basicForm.js @@ -0,0 +1,593 @@ + + +const basicForm = { + template: /*language=HTML*/ ` +
              + +
              + + + + + 沿用之前活动 + 不沿用之前活动 + + + + + + + + + + + + + + + + + + + + + 通知 + 不通知 + + + + + + + + + + + + + + + + + + + +
              +
              + + + +
              +
              + 设置 +
              +
              +
              +
              + + + + + + + +
              + + + + + + + + + + + + + +
              +
              +
              +
              {{literacyType + '信息(温馨提示:如不需要人数限制,下方人数框填写0或者不填)'}}
              +
              + 添加{{ literacyType }} +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              个人报名数量限制
              + + + 无限制 + 按类型限制 + 按活动限制 + +
              +
              注:无限制指对报名的个数不做任何限制
              +
              +
              + 设置报名限制 + 注:按类型限制指对每个类型下的个数进行限制 +
              +
              +
              +
              + + 注:按活动限制指只能报{{formData.limitNum}}个,不与类型关联 +
              +
              +
              +
              +
              +
              +
              + 取消 + 上一步 + 下一步 + 保存 + 提交 +
              + + + + + + + + + + + 取消 + 确定 + + + + + + + + +
              + `, + dicts: ["CAMPUS", "LITERACY_SIGNUP_TYPE"], + data() { + return { + signUpDialog: false, + step: 1, + formData: { + notice: false, + courseList: [ + { orderNum: 1, courseName: "", courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1, courseIsLimitApply: false }, + ], + conditionStructure: { + method: "AND", + conditions: [{}] + }, + restrictLimit: 1, + limitNum: 1, + typeLimits: [] + }, + historicalActList: [], + literacyTypeList: [], + literacyType: "培训班", + activityGroupList: [], + pickerOptions: { + disabledDate(time) { + return time.getTime() < Date.now() - 24 * 60 * 60 * 1000 + } + }, + campusList: [], + courseTypeList: [], + } + }, + components: { + "drawer-user-scope": httpVueLoader("/components/module/activity/DrawerUserScope.vue"), + "course-time": courseTime, + "custom-form": customForm, + }, + methods: { + async validNumber(row, old) { + if (GetQueryString("id") === "") { + if (row.courseReservedNumber > row.coursePeopleNumber && row.reserveMode === 1) { + this.$alert("预留人数不能大于" + this.literacyType + "人数!", "提示", { + confirmButtonText: "确定" + }) + row.courseReservedNumber = 0 + } + } else { + const registerUserCount = await this.getRegisterUserCount(row.id) + if (row.courseReservedNumber + registerUserCount > row.coursePeopleNumber) { + if (row.reserveMode === 1) { + let num = row.coursePeopleNumber - registerUserCount + let str = + "您设置的" + + this.literacyType + + "人数为" + + row.coursePeopleNumber + + "人,当前报名人数为" + + registerUserCount + + "人,预留名额上限为" + + num + + "人!" + this.$alert(str, "提示", { + confirmButtonText: "确定" + }) + row.courseReservedNumber = 0 + } + } + } + }, + async getRegisterUserCount(courseId) { + const resp = await this.$axios.post("/platform/literacy/manage/activity/getRegisterUserCount", { courseId }) + return resp.code === 0 ? resp.data : 0 + }, + courseTypeChange(val, row) { + row.reserveMode = 1 + }, + setSignUpCondition() { + if (this.formData.courseList !== undefined && this.formData.courseList.length > 0) { + const courseValid = this.formData.courseList.some((item, index) => { + if (item.courseType === undefined) { + this.$message.warning("请在" + (index + 1) + "行" + this.literacyType + "信息中选择类型!") + return true + } + return false + }) + if (courseValid) { + return + } + const array = [...new Set(this.formData.courseList.map((o) => o.courseType))] + const typeArray = clone([...this.courseTypeList].filter((x) => array.some((y) => x.id === y))) + const arr = [] + typeArray.forEach((item) => { + const t = this.formData.typeLimits.find(o => o.typeId === item.id) + if (t) { + const type = this.courseTypeList.find(o => o.id === t.typeId) + t.code = type.code + t.typeName = type.typeName + arr.push(t) + } else { + arr.push({ + code: item.code, + typeName: item.typeName, + typeId: item.id, + limitNum: 0 + }) + } + }) + this.formData.typeLimits = arr + this.signUpDialog = true + } else { + this.$message.warning("请在" + this.literacyType + "信息中选择类型!") + } + }, + doLimitNum() { + this.signUpDialog = false + }, + openMoreInfo(row, index) { + this.$refs.customFormRef.onOpen(this.formData, row, index) + }, + async removeTableCourse(index) { + const confirm = await this.$confirm( + "请确认是否删除此" + this.literacyType + "?如果该" + this.literacyType + "已有报名人员,会随之一起删除!确定吗?", + "提示", + { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + } + ) + if (confirm) { + this.formData.courseList.splice(index, 1) + } + }, + openSetUpCourseTime(index) { + this.$refs.courseTimeRef.onOpen(this.formData, index) + }, + courseOrderNumChange() { + this.formData.courseList = this.formData.courseList.sort((a, b) => a.orderNum - b.orderNum) + }, + addCourse() { + this.formData.courseList.push({ courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1, courseIsLimitApply: false }) + }, + async historicalActChange(val) { + const resp = await this.$axios.post("/platform/literacy/manage/activity/findOne", {id: val}) + if (resp.code === 0) { + this.formData = resp.data + this.typeChange(this.formData.literacyType) + this.formData.id = "" + } + }, + typeChange(val) { + const type = this.dict.type.LITERACY_SIGNUP_TYPE.find(o => o.code === val) + this.literacyType = type?.name || "培训班" + }, + changeActivity(val) { + if (val) { + const group = this.activityGroupList.find(v => v.groupId === val) + this.$set(this.formData, "activityGroupName", group.groupName) + } else { + this.$set(this.formData, "activityGroupName", "全部教职工") + } + }, + async getActivityGroup() { + const { data } = await this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup") + return data + }, + async getHistoricalActList() { + const resp = await this.$axios.post("/platform/literacy/manage/activity/getHistoricalActList", {}) + return resp.data + }, + async onSave() { + let valid = false + this.$refs.form.validateField("activityName", (errMsg) => { + valid = errMsg === "" + }) + if (!valid) { + this.$message.warning("请输入活动名称") + return + } + await this.doHandle('保存') + }, + onSubmit() { + this.$refs["form"].validate(async (valid, errMsg) => { + if (valid) { + const courseValid = this.formData.courseList.some((v, i) => { + const basicValid = v.courseName && v.coursePeopleNumber && v.courseLocation && v.courseInstructor && v.courseType + const timeValid = + v.courseTimeList.length > 0 && + v.courseTimeList.every((x) => { + return x.courseStartTime && x.courseEndTime && x.courseStartTime < x.courseEndTime + }) + if (!timeValid) { + this.$message.warning("第" + (i + 1) + "行时间填写有误,请核查") + return true + } + if (!basicValid) { + this.$message.warning("第" + (i + 1) + "行信息填写有误,请核查") + return true + } + if (v.isMobileSign === true && v.signType === 3 && (v.courseLocationCoordinates === undefined || v.courseLocationCoordinates.length < 2)) { + this.$message.warning("第" + (i + 1) + "行地点坐标填写有误,请核查") + return true + } + if (v.isMobileSign === true && v.signType === 3 && (v.signType === "" || v.signType === undefined)) { + this.$message.warning("第" + (i + 1) + "行签到方式填写有误,请核查") + return true + } + return false + }) + if (courseValid) return + if (this.formData.restrictLimit === 2 && this.formData.typeLimits.length === 0) { + this.$message.warning("请设置报名限制") + return + } + this.formData.isDisabled = false + await this.doHandle('提交') + } else { + if(Object.keys(errMsg).length > 0) { + this.$message.warning(errMsg[Object.keys(errMsg)[0]][0].message) + return + } + this.$message.warning("存在必填项未填写") + } + }) + }, + async doHandle(type) { + const cloneData = clone(this.formData) + cloneData.activitySignUpStartTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[0] : null + cloneData.activitySignUpEndTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[1] : null + cloneData.activityStartTime = cloneData.activityTime !== undefined ? cloneData.activityTime[0] : null + cloneData.activityEndTime = cloneData.activityTime !== undefined ? cloneData.activityTime[1] : null + if (cloneData.activityStartTime !== undefined && cloneData.activityStartTime !== null) { + cloneData.year = new Date(cloneData.activityStartTime).getFullYear() + } + cloneData.typeLimits = JSON.stringify(this.formData.typeLimits) + cloneData.courseList = JSON.stringify(cloneData.courseList) + const confirm = await this.$confirm("您确定要" + type + "吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + if (confirm !== "confirm") return + const resp = await this.$axios.post("/platform/literacy/manage/activity/doHandle", cloneData) + if (resp.code === 0) { + this.$message.success(resp.msg) + this.step = 1 + this.$emit('refresh') + this.$emit('back') + } else { + this.$message.warning(resp.msg) + } + }, + async getAllType() { + const resp = await this.$axios.post("/platform/literacy/manage/type/getAllType", {}) + return resp.data + }, + async init(row) { + if (row && row.id) { + const resp = await this.$axios.post("/platform/literacy/manage/activity/findOne", {id: row.id}) + if (resp.code === 0) { + this.formData = resp.data + this.typeChange(this.formData.literacyType) + } + } + }, + async initData(row) { + this.activityGroupList = await this.getActivityGroup() + this.historicalActList = await this.getHistoricalActList() + this.courseTypeList = await this.getAllType() + await this.init(row) + }, + }, + watch: { + 'formData.restrictLimit'(val) { + if (!this.formData.id) { + this.formData.limitNum = val === 3 ? 1 : '' + } + }, + 'formData.activityGroupId': { + async handler(newVal, oldVal) { + this.activityGroupList = await this.getActivityGroup() + this.userScopeDialog = false + }, + deep: true + }, + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/courseTime.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/courseTime.js new file mode 100644 index 00000000..3835e7f4 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/courseTime.js @@ -0,0 +1,215 @@ +const courseTime = { + template: /*language=HTML*/ ` +
              + +
              温馨提示:有人员报名后,禁止修改下列时间,如有修改,请联系管理员
              +
              选择日期
              + +
              设置时间
              + + + + 一键设置开始/结束时间 + 报名人数是否限制: + + + + + + + + + + + + + + + + + + + + + + + 确定 + +
              +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + const that = this + return { + setUpCourseDialog: false, + courseIndex: 0, + formData: {}, + courseTimeOneKeySet: { + startTime: "", + endTime: "" + }, + setUpCoursePickerOptions: { + disabledDate(time) { + return ( + time.getTime() < Date.parse(that.$moment(that.formData.activityTime[0]).format("YYYY-MM-DD") + " 00:00:00") || + time.getTime() > Date.parse(that.$moment(that.formData.activityTime[1]).format("YYYY-MM-DD") + " 00:00:00") + ) + } + }, + } + }, + methods: { + removeSetUpTableCourseRow(row, index) { + this.formData.courseList[this.courseIndex].courseTimeList.splice(index, 1) + //培训时间列表日期数组 + const courseDateArray = this.formData.courseList[this.courseIndex].courseTimeList.map((v) => + this.$moment(v.courseDate).format("YYYY-MM-DD") + ) + //选择课程日期数组 + const scdList = this.formData.courseList[this.courseIndex].setUpCourseData + + this.formData.courseList[this.courseIndex].setUpCourseData = scdList.filter((v) => { + return courseDateArray.includes(this.$moment(v).format("YYYY-MM-DD")) + }) + }, + oneKeySetStartEndTime() { + const { startTime, endTime } = this.courseTimeOneKeySet + this.formData.courseList[this.courseIndex].courseTimeList.forEach((v) => { + this.$set(v, "courseStartTime", startTime) + this.$set(v, "courseEndTime", endTime) + }) + this.$forceUpdate() + }, + setUpCourseDataChange(val) { + if (!val) { + this.formData.courseList[this.courseIndex].courseTimeList = [] + return + } + //培训时间日期Set + if (this.formData.courseList[this.courseIndex].courseTimeList === undefined) { + this.$set(this.formData.courseList[this.courseIndex], "courseTimeList", []) + } + const ctList = new Set( + this.formData.courseList[this.courseIndex].courseTimeList.map((v) => this.$moment(v.courseDate).format("YYYY-MM-DD")) + ) + val.forEach((v) => { + if (!ctList.has(v)) { + this.formData.courseList[this.courseIndex].courseTimeList.push({ + courseDate: v, + courseTime: null + }) + } + }) + this.formData.courseList[this.courseIndex].courseTimeList = this.formData.courseList[this.courseIndex].courseTimeList.filter((v) => { + return val.includes(this.$moment(v.courseDate).format("YYYY-MM-DD")) + }) + this.formData.courseList[this.courseIndex].courseTimeList.sort((a, b) => { + return Date.parse(a["courseDate"]) - Date.parse(b["courseDate"]) + }) + }, + //设置课程时间确定 + doConfirmSetUpCourse() { + const courseTableData = this.formData.courseList[this.courseIndex].courseTimeList + if (courseTableData.length === 0) { + this.$message.warning("请填写时间!") + return + } + if (courseTableData && courseTableData.length > 0) { + const valid = courseTableData.every((v) => v.courseStartTime && v.courseEndTime && v.courseStartTime < v.courseEndTime) + if (!valid) { + this.$message.warning("时间填写不完整或者有误!") + return + } + this.setUpCourseDialog = false + } + }, + onOpen(formData, index) { + this.formData = formData + this.courseIndex = index + if (!this.formData.activityTime || this.formData.activityTime.length === 0) { + this.$message.warning("请先设置活动起止时间") + return + } + this.courseIndex = index + this.setUpCourseDialog = true + }, + }, + created() { + if(!this.formData.courseList) { + this.formData = {courseList: [{unionLimit: []}]} + } + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/customForm.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/customForm.js new file mode 100644 index 00000000..320c9bbe --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/customForm.js @@ -0,0 +1,211 @@ + +const customForm = { + template: /*language=HTML*/ ` +
              + + + + 分工会人数限制 + + + + 设置分工会人数限制 + + + 已设置 + + 未设置 + + + + + + 承办工会 + + + + + + + + + + + 对内报名时间 + + + + + + + + + 是否签到 + + + + 签到 + 不签到 + + + + + + + 签到方式 + + + + 扫描二维码 + 被扫 + GPS定位签到 + + + + + + + 地点坐标 + + + 设置签到点 + + + + + + 是否领取礼品 + + + + 领取 + 不领取 + + + + + + + 领取方式 + + + + 扫描二维码 + 面对面确认 + + + + + + + 报名方式 + + + + 报名人员减少模式 + 候补模式 + + + + + + 候补数量 + + + + + +
              + 取 消 + 保 存 +
              +
              + + + + + 确 定 + + + + +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + moreInfoDrawer: false, + unionList: [], + formData: {}, + moreInfoRow: {}, + moreInfoIndex: 0, + + mapDialog: false, + mapIndex: 0, + } + }, + components: { + "union-form": unionForm, + "map-container": httpVueLoader("/components/plugins/mapContainer/MapContainer.vue?v=1.0.1") + }, + methods: { + openMap(index) { + this.mapIndex = index + this.mapDialog = true + }, + openSetUpUnionLimit(index) { + this.$refs.unionFormRef.onOpen(this.formData, index) + }, + async onOpen(formData, chooseRow, index) { + this.formData = formData + this.moreInfoRow = chooseRow + this.moreInfoIndex = index + this.unionList = await this.$businessTool.listUnion() + this.moreInfoDrawer = true + }, + }, + created() { + if(!this.formData.courseList) { + this.formData = {courseList: [{unionLimit: []}]} + } + }, + style: /*language=CSS*/ ` + .my-drawer .el-col-4 { + text-align: right; + } + .my-drawer .el-row { + margin-bottom: 20px; + } + .el-drawer__body { + padding: 20px; + } + .el-row--flex { + align-items: center; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/manage/index.html new file mode 100644 index 00000000..5728ed1c --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/index.html @@ -0,0 +1,201 @@ + + + + +
              + + + + + + + + + + + + + + + + 新建活动 + + + + + + + + + + + + + + + + + + + + + + + +
              + +
              + + 关 闭 + +
              +
              +
              + + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/info.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/info.js new file mode 100644 index 00000000..6f1b161f --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/info.js @@ -0,0 +1,111 @@ +const info = { + template: /*language=HTML*/ ` +
              + + + + {{viewData.activityName}} + {{viewData.year}} + {{$moment(viewData.createdAt).format('YYYY-MM-DD HH:mm:ss')}} + {{viewData.activityStartTime}} + {{viewData.activityEndTime}} + {{viewData.activitySignUpStartTime}} + {{viewData.activitySignUpEndTime}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 关 闭 + + + + +
              +
              +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + literacyType: '', + viewData: {}, + courseTimeListDialog: false, + courseTimeList: [], + + viewMapDialog: false, + } + }, + methods: { + initData(id) { + this.$axios.post(loc() + "/findOne", { id: id }) + .then((resp) => { + if (resp.code === 0) { + this.viewData = resp.data + const type = this.dict.type.LITERACY_SIGNUP_TYPE.find((o) => o.code === resp.data.literacyType) + this.literacyType = type?.name || "培训班" + } + }) + }, + openViewCourseTime(courseTimeList) { + this.courseTimeList = courseTimeList + this.courseTimeListDialog = true + }, + openViewMap(point) { + if (!Array.isArray(point)) { + this.$message.warning("没有设置点位,无法通过地图查看") + return + } + this.viewMapDialog = true + this.$nextTick(() => { + viewMap = new AMap.Map("viewMap", { + resizeEnable: true, + center: point, + zoom: 16 + }) + if (viewMarker) { + viewMap.remove(viewMarker) + } + viewMarker = new AMap.Marker({ + position: point, + offset: new AMap.Pixel(-13, -30) + }) + viewMap.add(viewMarker) + viewMap.setFitView(null, false, [150, 60, 100, 60]) + }) + }, + }, + style: /*language=CSS*/ ` + .el-button--text { + padding: 0; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/makeQrcode.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/makeQrcode.js new file mode 100644 index 00000000..4b878a01 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/makeQrcode.js @@ -0,0 +1,82 @@ +const makeQrcode = { + template: /*language=HTML*/ ` +
              + + + + + + + + + + + + + + + + + + + + + + 关 闭 + + +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + courseDialog: false, + literacyType: "", + courseList: [], + } + }, + methods: { + initData(row) { + this.courseList = row.courseList + const type = this.dict.type.LITERACY_SIGNUP_TYPE.find((o) => o.code === row.literacyType) + this.literacyType = type?.name || "培训班" + this.courseDialog = true + }, + makeCourseCode(row) { + const o = {courseId: row.id} + const content = jrQrcode.getQrBase64(JSON.stringify(o)) + let image = new Image() + image.src = content + let viewer = new Viewer(image, { + zIndex: 99999999, + }) + viewer.show() + }, + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/manage/unionForm.js b/src/main/resources/views/platform/zhgh/activity/literacy/manage/unionForm.js new file mode 100644 index 00000000..e5586085 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/manage/unionForm.js @@ -0,0 +1,221 @@ +const unionForm = { + template: /*language=HTML*/ ` +
              + +
              +
              分段设置
              +
              + 应用分段设置 +
              +
              + + + + + + + + + + + + + + + + + +
              + ({{index+1}}). + {{item}} +
              +
              + +
              +
              比例设置
              +
              + 一键比例: + + 应用比例设置 +
              +
              + + + + + + + + + + + + +
              + 限制总人数:{{summaryCount}}人 +
              + 清空分工会人数限制 + 取消 + 确定 +
              +
              +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + formData: {}, + unionLimitIndex: 0, + setUpUnionLimitDialog: false, + unionList: [], + unionUserNumCalc: [{}], + unionUserNumOneKeyRatio: null, + summaryCount: 0, + } + }, + computed: { + unionUserNumCalcTips() { + return this.unionUserNumCalc.map((v) => { + return ( + (v.startNum ? v.startNum : "?") + + "-" + + (v.endNum ? v.endNum : "?") + + "人的分工会,限报" + + (v.resultNum ? v.resultNum : "?") + + "人" + ) + }) + } + }, + methods: { + calSummaryCount() { + const array = this.formData.courseList[this.unionLimitIndex].unionLimit + if (array) { + this.summaryCount = array.reduce((prev, curr) => { + const value = Number(curr.limitCount) + if (!isNaN(value)) { + return prev + curr.limitCount + } else { + return prev + } + }, 0) + } + }, + async onOpen(formData, index) { + this.unionList = await this.$businessTool.listUnion() + this.formData = formData + this.unionLimitIndex = index + this.setUpUnionLimitDialog = true + if ( + !this.formData.courseList[this.unionLimitIndex].unionLimit || + this.formData.courseList[this.unionLimitIndex].unionLimit.length === 0 + ) { + const resp = await this.$axios.get("/platform/literacy/manage/activity/getUnionLimit", { + activityScopeId: this.formData.activityGroupId + }) + if (resp.code === 0) { + this.$set(this.formData.courseList[this.unionLimitIndex], "unionLimit", resp.data) + } + } + this.summaryCount = this.formData.courseList[this.unionLimitIndex].unionLimit.reduce((prev, curr) => { + const value = Number(curr.limitCount) + if (!isNaN(value)) { + return prev + curr.limitCount + } else { + return prev + } + }, 0) + }, + unionLimitQuickSetting() { + this.unionUserNumCalc.forEach((v, i) => { + const startNum = v.startNum + const endNum = v.endNum + const resultNum = v.resultNum + if (startNum > endNum) { + this.$message.warning("第" + (i + 1) + "行设置错误") + } else { + this.formData.courseList[this.unionLimitIndex].unionLimit.forEach((x) => { + if (x.teacherCount >= startNum && x.teacherCount <= endNum) { + x.limitCount = resultNum + } + }) + this.calSummaryCount() + } + }) + }, + doConfirmSetUpUnionLimit() { + this.setUpUnionLimitDialog = false + }, + //应用比例设置 + applyScaleSettings() { + this.formData.courseList[this.unionLimitIndex].unionLimit.forEach((v) => { + v.limitCount = parseFloat(((v.teacherCount * this.unionUserNumOneKeyRatio) / 100).toFixed(0)) + if (v.ratio) { + v.limitCount = parseFloat(((v.teacherCount * v.ratio) / 100).toFixed(0)) + } + }) + this.calSummaryCount() + }, + async clearUnionLimit() { + const confirm = await this.$confirm("确定要清空分工会人数限制吗, 是否继续?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + if ("confirm" === confirm) { + this.formData.courseList[this.unionLimitIndex].unionLimit = [] + this.unionUserNumOneKeyRatio = null + this.unionUserNumCalc = [{}] + this.setUpUnionLimitDialog = false + } + }, + }, + created() { + if(!this.formData.courseList) { + this.formData = {courseList: [{unionLimit: []}]} + } + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/statistics/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/statistics/index.html new file mode 100644 index 00000000..525f10ff --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/statistics/index.html @@ -0,0 +1,156 @@ + + + + +
              + + + + + + + + + + + + + + + + 导出报名人员 + + + + + + + + + + + + + + + + + + + + + + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/statistics/info.js b/src/main/resources/views/platform/zhgh/activity/literacy/statistics/info.js new file mode 100644 index 00000000..99dbd84c --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/statistics/info.js @@ -0,0 +1,98 @@ +const info = { + template: /*language=HTML*/ ` +
              + + + + + + + + + + + + + + {{key}} + + + + + + + + + + + + + +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + registerUserTableData: [], + registerUserTableColumns: [ + { label: "姓名", prop: "username" }, + { label: "工号", prop: "loginname" }, + { label: "单位", prop: "unitName" }, + { label: "分工会", prop: "unionName" }, + { label: "联系方式", prop: "mobile" }, + { label: "报名时间", prop: "signUpTime" }, + { label: "报名状态", prop: "state" } + ], + cloneTableColumns: [ + {label: '姓名', prop: 'username'}, + {label: '工号', prop: 'loginname'}, + {label: '单位', prop: 'unitName'}, + {label: '分工会', prop: 'unionName'}, + {label: '联系方式', prop: 'mobile'}, + {label: '报名时间', prop: 'signUpTime'}, + {label: '报名状态', prop: 'state'}, + ], + userSignInfo: {}, + clickRow: {} + } + }, + methods: { + async onOpen(row) { + this.clickRow = row + const resp_register = await this.$axios.post(loc() + "/registerUserList", {courseId: row.id}) + this.registerUserTableData = resp_register.data + const resp_signInfo = await this.$axios.post(loc() + "/getSignInfo", {courseId: row.id}) + this.userSignInfo = resp_signInfo.data + const resp_columnInfo = await $.get(loc() + '/getTaleColumnInfo', {courseId: row.id}) + if (resp_columnInfo.data) { + this.registerUserTableColumns = [] + this.registerUserTableColumns = this.cloneTableColumns.concat(resp_columnInfo.data) + } + } + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/type/basicForm.js b/src/main/resources/views/platform/zhgh/activity/literacy/type/basicForm.js new file mode 100644 index 00000000..5e5a60c5 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/type/basicForm.js @@ -0,0 +1,350 @@ +const basicForm = { + template: /*language=HTML*/ ` +
              + + + + + + + + + + 携带 + 不携带 + + + + + 纳入 + 不纳入 + + + + + 纳入 + 不纳入 + + + + +
              +
              + 报名填写字段 + + 注:移动端报名时字段的显示顺序会按照下面表格中的序号进行排列、字段编码不能重复 + +
              +
              + + + 添加 + +
              +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + 取 消 + 确 定 +
              + + + + + + + + + + + +
              + 取 消 + 确 定 +
              +
              +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + formData: { + literacyMobileSignColumnList: [{ isRequired: false }], + isBringFamily: false, + isAddFamily: false, + selfAddFamily: true, + }, + rules: { + typeName: [{ required: true, message: "请输入类型名称", trigger: ["change", "blur"] }], + code: [{ required: true, message: "请输入类型编码", trigger: ["change", "blur"] }], + isBringFamily: [{ required: true, message: "请选择是否携带家属", trigger: ["blur", "change"] }], + isAddFamily: [{ required: true, message: "请选择家属是否纳入总人数", trigger: ["blur", "change"] }] + }, + columnTypeOptions: [], + columnFormTypeList: [], + clickRow: {}, + paramFormRules: { + selectValues: [{ required: true, message: "请选择选项列表", trigger: ["blur"] }], + fileType: [{ required: true, message: "请选择文件类型", trigger: ["blur"] }], + fileNumber: [{ required: true, message: "请输入文件个数", trigger: ["blur", "change"] }] + }, + detailedParamsVisible: false, + } + }, + methods: { + isBringFamilyInput(o) { + this.$set(this.formData, "isAddFamily", o === true ? false : null) + if (o === true) { + this.formData.literacyMobileSignColumnList.unshift({ + columnName: "携带亲属人数", + columnCode: "xdqsrs", + columnFormType: "INPUT", + columnType: "INT", + isRequired: true + }) + } else { + this.formData.literacyMobileSignColumnList.forEach((item, index) => { + if (item.columnCode === "xdqsrs" && this.formData.isBringFamily === false) { + this.formData.literacyMobileSignColumnList.splice(index, 1) + } + }) + } + }, + columnFormTypeChange(val, index) { + if (val === "FILE") { + this.formData.literacyMobileSignColumnList[index].columnType = "JSON" + this.formData.literacyMobileSignColumnList[index].isDisabled = true + } else { + this.formData.literacyMobileSignColumnList[index].columnType = "" + this.formData.literacyMobileSignColumnList[index].isDisabled = false + } + }, + doHandle() { + if (this.formData.id) { + this.doEdit() + } else { + this.doAdd() + } + }, + async doDetailParams() { + const isValid = await this.$refs["paramForm"].validate() + if (isValid) { + this.detailedParamsVisible = false + } + }, + openDetailedParams(row, index) { + this.clickRow = row + this.detailedParamsVisible = true + if (this.$refs["paramForm"]) this.$refs["paramForm"].clearValidate() + }, + doAdd() { + this.$refs["addForm"].validate((valid) => { + if (valid) { + const newListLength = new Set(this.formData.literacyMobileSignColumnList.map((item) => item.columnCode)).size + const listLength = this.formData.literacyMobileSignColumnList.length + if (listLength > newListLength) { + this.$message.warning('字段编码不能重复') + return + } + const cloneData = clone(this.formData) + this.$axios.post(loc() + "/doAdd", { data: JSON.stringify(cloneData) }).then((res) => { + if (res.code === 0) { + this.$message.success(res.msg) + this.$emit('refresh') + } else { + this.$message.error(res.msg) + } + }) + } + }) + }, + doEdit() { + this.$refs["addForm"].validate((valid) => { + if (valid) { + const newListLength = new Set(this.formData.literacyMobileSignColumnList.map((item) => item.columnCode)).size + const listLength = this.formData.literacyMobileSignColumnList.length + if (listLength > newListLength) { + this.$message.warning('字段编码不能重复') + return + } + const cloneData = clone(this.formData) + cloneData.literacyMobileSignColumnList = JSON.stringify(cloneData.literacyMobileSignColumnList) + this.$axios.post(loc() + "/doEdit", cloneData).then((res) => { + if (res.code === 0) { + this.$message.success(res.msg) + this.$emit('refresh') + } else { + this.$message.error(res.msg) + } + }) + } + }) + }, + async getColTypeOptions() { + const resp = await this.$axios.get(loc() + "/getColumnType") + this.columnTypeOptions = resp.data + }, + async getEnumOptions() { + const resp = await this.$axios.post("/open/common/dictEnumOptions", { name: "ColumnFormTypeEnum" }) + return resp.data + }, + initData(row) { + if(row && row.id) { + this.formData = JSON.parse(JSON.stringify(row)) + this.formData.literacyMobileSignColumnList.forEach((item) => { + item.isDisabled = item.columnFormType === "FILE" + }) + } else { + this.formData = { + literacyMobileSignColumnList: [{ isRequired: false }], + isBringFamily: false, + isAddFamily: false, + selfAddFamily: true, + } + if (this.$refs["addForm"]) this.$refs["addForm"].resetFields() + } + }, + }, + async created() { + await this.getColTypeOptions() + this.columnFormTypeList = await this.getEnumOptions() + }, + style: /*language=CSS*/ ` + + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/type/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/type/index.html new file mode 100644 index 00000000..7aee3621 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/type/index.html @@ -0,0 +1,120 @@ + + + + +
              + + + + + + +
              + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/index.html new file mode 100644 index 00000000..bd58a59c --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/index.html @@ -0,0 +1,144 @@ + + + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/userInfo.js b/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/userInfo.js new file mode 100644 index 00000000..bfde0ab9 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/userAdjust/userInfo.js @@ -0,0 +1,224 @@ +const userInfo = { + template: /*language=HTML*/ ` +
              +
              {{ registerCourse.courseName + '报名人员' }}
              +
              + + + + + + + + + + + + + + + +
              + + + + + + + + + + + 注:如单选为灰色选择不了,则表示对应的{{ literacyType }}人数已满!候补报名不做调整。 + + + + + + + + + + + + + 取 消 + 确 定 + + +
              + `, + dicts: ["LITERACY_SIGNUP_TYPE"], + data() { + return { + afterAdjustCourse: "", + adjustDialogVisible: false, + unionList: [], + unitList: [], + registerForm: { + unionId: "", + unitId: "" + }, + registerCourse: {}, + courseList: [], + userInfo: {}, + chooseRow: {}, + registerUserTableData: [], + registerUserTableColumns: [ + { label: "姓名", prop: "username" }, + { label: "工号", prop: "loginname" }, + { label: "单位", prop: "unitName" }, + { label: "分工会", prop: "unionName" }, + { label: "联系方式", prop: "mobile" }, + { label: "报名时间", prop: "signUpTime" }, + { label: "报名状态", prop: "state" } + ], + literacyType: '', + activity: {}, + } + }, + methods: { + async onOpen(row, activity) { + this.registerCourse = row + this.registerForm.courseId = row.id + this.activity = activity + const resp_register = await this.$axios.post(loc() + "/registerUserList", this.registerForm) + this.registerUserTableData = resp_register.data + + const type = this.dict.type.LITERACY_SIGNUP_TYPE.find(o => o.code === activity.literacyType) + this.literacyType = type?.name || "培训班" + }, + getCurrentRow(row) { + this.chooseRow = row + }, + async doAdjust() { + if (!this.afterAdjustCourse) { + this.$message.warning("请选择要调整的" + this.literacyType + "!") + return + } + this.$confirm( + "您确定要将" + + "" + + this.userInfo.username + + "" + + "的报名信息调整到" + + "" + + this.chooseRow.courseName + + "" + + "中吗?", + "提示", + { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + dangerouslyUseHTMLString: true + } + ) + .then(async () => { + const loading = this.$loading({ + lock: true, + text: "努力调整中,感谢您的耐心等待。。。", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)" + }) + const resp = await this.$axios.post(loc() + "/adjust", { + activityId: this.activity.id, + oldCourseId: this.registerCourse.id, + newCourseId: this.afterAdjustCourse, + userId: this.userInfo.userId + }) + loading.close() + if (resp.code === 0) { + this.$message.success(resp.msg) + this.adjustDialogVisible = false + await this.registerSearch() + this.$emit("refresh", null) + } else { + this.$message.warning(resp.msg) + } + }) + .catch(() => {}) + }, + async adjust(o) { + this.userInfo = o + this.afterAdjustCourse = "" + await this.getCourse(this.activity.id) + this.adjustDialogVisible = true + }, + deleteSignUser(o) { + this.$confirm("您确定要删除" + "" + o.username + "" + "的报名信息吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + dangerouslyUseHTMLString: true + }) + .then(async () => { + const resp = await this.$axios.post(loc() + "/deleteSignUser", { + activityId: this.activity.id, + courseId: this.registerCourse.id, + userId: o.userId + }) + if (resp.code === 0) { + this.$message.success(resp.msg) + await this.registerSearch() + this.$emit("refresh", null) + } else { + this.$message.warning(resp.msg) + } + }) + .catch(() => {}) + }, + async registerSearch() { + this.registerForm.courseId = this.registerCourse.id + const resp_register = await $.get(loc() + "/registerUserList", this.registerForm) + this.registerUserTableData = resp_register.data + }, + async getCourse(val) { + const {data} = await this.$axios.post(loc() + "/getCourse", {activityId: val}) + this.courseList = data + } + }, + async created() { + this.unionList = await this.$businessTool.listUnion() + this.unitList = await this.$businessTool.listUnit(this.registerForm.unionId) + }, + style: /*language=CSS*/ ` + .adjustDialog .el-radio__label { + display: none; + } + .adjustDialog .el-dialog__body { + max-height: 600px; + overflow-y: auto; + } + ` +} diff --git a/src/main/resources/views/platform/zhgh/activity/literacy/userManage/index.html b/src/main/resources/views/platform/zhgh/activity/literacy/userManage/index.html new file mode 100644 index 00000000..0a1e80b3 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/activity/literacy/userManage/index.html @@ -0,0 +1,235 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + 补充人员 + 导出签到名单 + 导出领取名单 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取 消 + 确 定 + + +
              + + + + diff --git a/src/main/resources/views/platform/zhgh/club/common/clubUserJoin.js b/src/main/resources/views/platform/zhgh/club/common/clubUserJoin.js index 6908f7f7..e0ef248f 100644 --- a/src/main/resources/views/platform/zhgh/club/common/clubUserJoin.js +++ b/src/main/resources/views/platform/zhgh/club/common/clubUserJoin.js @@ -33,7 +33,7 @@ const clubUserJoin = { {{viewData.unitName}} - {{viewData.governmentPosition}} + {{viewData.position}} {{viewData.technicalTitle}} diff --git a/src/main/resources/views/platform/zhgh/club/join/apply/index.html b/src/main/resources/views/platform/zhgh/club/join/apply/index.html index c1bc6131..4f9a84ff 100644 --- a/src/main/resources/views/platform/zhgh/club/join/apply/index.html +++ b/src/main/resources/views/platform/zhgh/club/join/apply/index.html @@ -56,8 +56,8 @@ layout("/layouts/platform.html"){ - - + + @@ -143,7 +143,7 @@ layout("/layouts/platform.html"){ // birthday: [{ required: true, message: "请填写", trigger: ["blur", "change"] }], // mobile: [{ required: true, message: "请填写", trigger: ["blur", "change"] }], // email: [{ required: true, message: "请填写", trigger: ["blur", "change"] }], - governmentPosition: [{ required: false, message: "请填写", trigger: ["blur", "change"] }], + position: [{ required: false, message: "请填写", trigger: ["blur", "change"] }], technicalTitle: [{ required: false, message: "请填写", trigger: ["blur", "change"] }], education: [{ required: false, message: "请填写", trigger: ["blur", "change"] }], academicDegree: [{ required: false, message: "请填写", trigger: ["blur", "change"] }], @@ -251,7 +251,8 @@ layout("/layouts/platform.html"){ this.$set(this.formData, "political", user.political) this.$set(this.formData, "education", user.education) this.$set(this.formData, "technicalTitle", user.technicalTitle) - this.$set(this.formData, "governmentPosition", user.governmentPosition) + this.$set(this.formData, "position", user.position) + this.$set(this.formData, "academicDegree", user.academicDegree) } } }, diff --git a/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterForm.js b/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterForm.js index f276042b..6725aeea 100644 --- a/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterForm.js +++ b/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterForm.js @@ -10,7 +10,8 @@ const CLUB_FORM_TEMPLATE = { - + + diff --git a/src/main/resources/views/platform/zhgh/club/register/apply/index.html b/src/main/resources/views/platform/zhgh/club/register/apply/index.html index 71bdaa6e..6c38bfce 100644 --- a/src/main/resources/views/platform/zhgh/club/register/apply/index.html +++ b/src/main/resources/views/platform/zhgh/club/register/apply/index.html @@ -104,13 +104,13 @@ layout("/layouts/platform.html"){ let formData = {} try { let hz = this.$refs.clubManagerRef.managePerson.filter((o) => o.roleCode === CLUB_ROLE_CONSTANT.CLUB_PRESIDENT) - if (hz.length > 1) { - this.$message.warning({ title: "警告", message: "会长只能有1人!" }) + if (hz.length !== 1) { + this.$message.warning({ title: "警告", message: "会长需要1人" }) return } let msz = this.$refs.clubManagerRef.managePerson.filter((o) => o.roleCode === CLUB_ROLE_CONSTANT.CLUB_SECRETARY) - if (msz.length > 1) { - this.$message.warning({ title: "警告", message: "秘书长只能有1人" }) + if (msz.length !== 1) { + this.$message.warning({ title: "警告", message: "秘书长需要1人" }) return } formData.sponsor = this.$refs.clubSponsorRef.sponsorData diff --git a/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html b/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html index 0476a0b4..0e49e604 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/article/clubApproval/index.html @@ -7,7 +7,14 @@ layout("/layouts/platform.html"){ - + @@ -28,22 +35,20 @@ layout("/layouts/platform.html"){ - - - + + + + + @@ -51,21 +56,27 @@ layout("/layouts/platform.html"){ -