diff --git a/src/main/java/com/budwk/app/base/event/user/Test2SysUserEventListener.java b/src/main/java/com/budwk/app/base/event/user/Test2SysUserEventListener.java deleted file mode 100644 index a80ae48c..00000000 --- a/src/main/java/com/budwk/app/base/event/user/Test2SysUserEventListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.budwk.app.base.event.user; - -import org.nutz.ioc.loader.annotation.IocBean; - -@IocBean -public class Test2SysUserEventListener implements SysUserEventListener{ - - @Override - public void onEvent(SysUserEvent event) { - System.out.println("-----------------------------------"); - System.out.println(event); - } -} diff --git a/src/main/java/com/budwk/app/base/event/user/TestSysUserEventListener.java b/src/main/java/com/budwk/app/base/event/user/TestSysUserEventListener.java deleted file mode 100644 index 9785a6b1..00000000 --- a/src/main/java/com/budwk/app/base/event/user/TestSysUserEventListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.budwk.app.base.event.user; - -import org.nutz.ioc.loader.annotation.IocBean; - -@IocBean -public class TestSysUserEventListener implements SysUserEventListener{ - - @Override - public void onEvent(SysUserEvent event) { - System.out.println("-----------------------------------"); - System.out.println(event); - } -} diff --git a/src/main/java/com/budwk/app/base/event/user/UserChangeEventListener.java b/src/main/java/com/budwk/app/base/event/user/UserChangeEventListener.java new file mode 100644 index 00000000..5fd409a8 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/user/UserChangeEventListener.java @@ -0,0 +1,13 @@ +package com.budwk.app.base.event.user; + +/** + * @version 1.0 + * @Author zzr + * @name:UserChangeEventListener + * @Date 2025/8/13 14:18 + * @注释 + */ +public interface UserChangeEventListener { + + void receive(UserChangeMsg message); +} diff --git a/src/main/java/com/budwk/app/base/event/user/UserChangeMsg.java b/src/main/java/com/budwk/app/base/event/user/UserChangeMsg.java new file mode 100644 index 00000000..5af39d1c --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/user/UserChangeMsg.java @@ -0,0 +1,70 @@ +package com.budwk.app.base.event.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:UserChangeMsg + * @Date 2025/8/13 11:51 + * @注释 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserChangeMsg { + + /** + * 变更资源,用户Id + */ + private List userIds; + + /** + * 操作类型 + */ + private Integer operationType; + + /** + * 变更前的单位Id,当operationType值为1时,该字段有效 + */ + private String sourceUnitId; + + /** + * 变更后的单位Id,当operationType值为1时,该字段有效 + */ + private String targetUnitId; + + /** + * 单位变动 + */ + public final static int UNIT_CHANGE_OPERATION = 1; + + /** + * 退休 + */ + public final static int RETIRE_OPERATION = 2; + + /** + * 入会 + */ + public final static int RESTORE_OPERATION = 3; + + + public UserChangeMsg(List userIds, Integer operationType) { + super(); + this.userIds = userIds; + this.operationType = operationType; + } + + + public UserChangeMsg(List userIds, Integer operationType, String sourceUnitId) { + super(); + this.userIds = userIds; + this.operationType = operationType; + this.sourceUnitId = sourceUnitId; + } +} diff --git a/src/main/java/com/budwk/app/base/event/user/UserChangePublisher.java b/src/main/java/com/budwk/app/base/event/user/UserChangePublisher.java new file mode 100644 index 00000000..a60d245e --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/user/UserChangePublisher.java @@ -0,0 +1,25 @@ +package com.budwk.app.base.event.user; + +import io.v.nutz.base.utils.AppIocUtil; +import org.nutz.ioc.Ioc; + +/** + * @version 1.0 + * @Author zzr + * @name:UserChangePublisher + * @Date 2025/8/13 14:23 + * @注释 + */ +public class UserChangePublisher { + + // 发送消息给所有订阅者 + public static void broadcast(UserChangeMsg msg) { + Ioc ioc = AppIocUtil.get(); + + String[] names = ioc.getNamesByType(UserChangeEventListener.class); + for (String listener : names) { + UserChangeEventListener listenerBean = ioc.get(UserChangeEventListener.class, listener); + listenerBean.receive(msg); + } + } +} diff --git a/src/main/java/com/budwk/app/base/utils/AppIocUtil.java b/src/main/java/com/budwk/app/base/utils/AppIocUtil.java new file mode 100644 index 00000000..3a236613 --- /dev/null +++ b/src/main/java/com/budwk/app/base/utils/AppIocUtil.java @@ -0,0 +1,27 @@ +package com.budwk.app.base.utils; + +import org.nutz.ioc.Ioc; + +/** + * @version 1.0 + * @Author zzr + * @name:AppIocUtil + * @Date 2025/8/26 17:40 + * @注释 + */ +public class AppIocUtil { + + private static Ioc ioc; + + public static void setIoc(Ioc ioc) { + AppIocUtil.ioc = ioc; + } + + public static Ioc get() { + if (ioc == null) { + throw new IllegalStateException("Ioc not initialized yet!"); + } + return ioc; + } + +} diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java index 085fad50..b280fab3 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java @@ -292,7 +292,7 @@ public class SysUnitController { for (int i = 0; i < list.size(); i++) { nodeList.add(new TreeNode<>(list.get(i).getId(), list.get(i).getParentId(), list.get(i).getName(), i)); } - List> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "1")); + List> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "0000")); // NutMap menuMap = NutMap.NEW(); // for (Sys_unit unit : list) { 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 59e7adb0..e02bb3fa 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 @@ -92,7 +92,7 @@ public class MemberChangeApplyController { // 开启流程实例 Dict args = Dict.create(); - args.set("origin", "personType"); + args.set("origin", "person"); args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, memberChangeRecord); ProcessInstance instance = flowEngine.startProcessInstanceByKey("HYBG", memberChangeRecord.getId(), SecurityUtil.getUserId(), args); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberBatchMakeController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberBatchMakeController.java index c8592b12..ad49212a 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberBatchMakeController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/member/controller/info/MemberBatchMakeController.java @@ -120,7 +120,7 @@ public class MemberBatchMakeController { } dao.update(Sys_user.class, Chain.make("member", true) - .addSpecial("memberTime", DateUtil.now()), + .add("memberTime", DateUtil.now()), Cnd.where("id", "in", userIds)); // 添加会员角色 diff --git a/src/main/resources/static/assets/platform/img/v4/lczx.png b/src/main/resources/static/assets/platform/img/v4/lczx.png new file mode 100644 index 00000000..c5cc2949 Binary files /dev/null and b/src/main/resources/static/assets/platform/img/v4/lczx.png differ diff --git a/src/main/resources/static/assets/platform/img/v4/yyzx.png b/src/main/resources/static/assets/platform/img/v4/yyzx.png new file mode 100644 index 00000000..36ffcb57 Binary files /dev/null and b/src/main/resources/static/assets/platform/img/v4/yyzx.png differ diff --git a/src/main/resources/views/layouts/platform.html b/src/main/resources/views/layouts/platform.html index 6754bef8..6e3731df 100644 --- a/src/main/resources/views/layouts/platform.html +++ b/src/main/resources/views/layouts/platform.html @@ -243,6 +243,7 @@ layout("/layouts/v4/baseLayout.html"){ try { + debugger const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app")) $("#sub-app-container #sidebar-menu .menu-header .menu-title").text(app?.name) } catch (e) { @@ -323,16 +324,53 @@ layout("/layouts/v4/baseLayout.html"){ if (res.code === 0) { this.menus = res.data window.sessionStorage.setItem("zhgh_sub_app_menus", JSON.stringify(res.data)) + this.echoMenus() + this.matchUrlToMenu() } else { this.menus = [] } - this.echoMenus() }) }, - + + // 按 URL 精准激活 + matchUrlToMenu() { + // 跳转带过来的地址 + const pathname = window.location.pathname + const find = (list, parentIds = []) => { + for (const m of list) { + if (m.href && pathname.includes(m.href.split('?')[0])) { + return { menu: m, parentIds } + } + if (m.children?.length) { + const hit = find(m.children, [...parentIds, m.id]) + if (hit) return hit + } + } + return null + } + + const hit = find(this.menus) + if (hit) { + // 激活跳转菜单 + this.activeMenuIndex = hit.menu.id + this.openedMenus = hit.parentIds + const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app")) + $("#sub-app-container #sidebar-menu .menu-header .menu-title").text(app?.name) + this.$nextTick(() => { + this.menuSelect(hit.menu.id, hit.parentIds) + // 保证内容区对应 + commonUtil.pjaxPush(hit.menu.href) + }) + } else if (!this.activeMenuIndex) { + // 没命中且缓存也没有 → 再降级到第一个 + this.defaultSelect() + } + }, + // 设置应用信息 setAppInfo(app) { if (app) { + debugger // 储存到缓存 window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app)) // 储存到div中 diff --git a/src/main/resources/views/layouts/v4/apps.html b/src/main/resources/views/layouts/v4/apps.html index fcfc8736..35230f3c 100644 --- a/src/main/resources/views/layouts/v4/apps.html +++ b/src/main/resources/views/layouts/v4/apps.html @@ -326,7 +326,7 @@ layout("/layouts/v4/baseLayout.html"){
- 应用中心 + 应用中心
diff --git a/src/main/resources/views/layouts/v4/serv.html b/src/main/resources/views/layouts/v4/serv.html index 4be7cc1a..3846b812 100644 --- a/src/main/resources/views/layouts/v4/serv.html +++ b/src/main/resources/views/layouts/v4/serv.html @@ -322,7 +322,7 @@ layout("/layouts/v4/baseLayout.html"){
- 应用中心 + 流程中心
diff --git a/src/main/resources/views/platform/sys/unit/index.html b/src/main/resources/views/platform/sys/unit/index.html index 8a26079c..22ac05fc 100644 --- a/src/main/resources/views/platform/sys/unit/index.html +++ b/src/main/resources/views/platform/sys/unit/index.html @@ -13,11 +13,11 @@ layout("/layouts/platform.html"){ ref="treeRef" :expand-on-click-node="false" :props="{ - children: 'children', - label: 'name' - }" + children: 'children', + label: 'name' + }" node-key="id" - :default-expanded-keys="['1']" + default-expand-all @node-click="treeNodeClick" :filter-node-method="filterNode" highlight-current diff --git a/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html b/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html index 42c1d7de..4ff7f110 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/sourcechange/manage/index.html @@ -27,14 +27,14 @@ layout("/layouts/platform.html"){ + + + - - - @@ -155,8 +155,8 @@ layout("/layouts/platform.html"){ { prop: "username", label: "姓名", sortable: true }, { prop: "sex", label: "性别", sortable: true, width: "100px" }, { prop: "userState", label: "在职状态", sortable: true }, + { prop: "personType", label: "教职工类别", sortable: true }, { prop: "preparedBy", label: "编制类别", sortable: true }, - { prop: "personType", label: "教职工类别", sortable: true }, { prop: "unionName", label: "所属工会", sortable: true }, { prop: "unitName", label: "所属单位", sortable: true }, { prop: "changeTypes", label: "变更类型", sortable: true },