diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java index 0ebc302..fe450cb 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java @@ -2,7 +2,6 @@ package com.budwk.app.sys.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core.lang.tree.TreeUtil; @@ -13,11 +12,6 @@ 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.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.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.*; import com.budwk.app.sys.services.*; @@ -59,8 +53,6 @@ public class SysUnionController { @Inject private Dao dao; @Inject - private FlowEngine flowEngine; - @Inject private SysDictService sysDictService; @Inject private SysRoleService sysRoleService; @@ -70,6 +62,8 @@ public class SysUnionController { private SysUnitService sysUnitService; @Inject private SysUnionService sysUnionService; + @Inject + private SysUnionCadreService sysUnionCadreService; @At("") @Ok("beetl:/platform/sys/union/index.html") @@ -389,90 +383,14 @@ public class SysUnionController { * 汇总分工会干部和提案审核所需角色,后续列表、历史届次和新增校验统一使用同一范围。 */ private List getBranchUnionRoleCodes() { - List roleCodes = new ArrayList<>(sysDictService.getSubListByCode("BRANCH_UNION_ROLES") - .stream().map(Sys_dict::getCode).toList()); - roleCodes.add(RoleConstant.BRANCH_UNION_ADMIN.name()); - roleCodes.add(RoleConstant.UNIT_PARTY_SECRETARY.name()); - return roleCodes.stream().filter(StrUtil::isNotBlank).distinct().toList(); + return sysUnionCadreService.getBranchUnionRoleCodes(); } @At @SaCheckPermission("sys.manager.union.branchOfficer") @ApiOperation("添加分工会人员角色") - @Aop(TransAop.READ_COMMITTED) public Result insertBranchUnionUserRole(String userId, String roleCode, String unionId, String j) { - if (!getBranchUnionRoleCodes().contains(roleCode)) { - return Result.error("该角色不允许在分工会干部中维护"); - } - Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", roleCode)); - if (Lang.isEmpty(role)) { - return Result.error("无法找到" + roleCode + "对应编码的角色"); - } - int count = dao.count(Sys_user_role.class, Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId)); - if (count > 0) { - return Result.error("请勿重复添加"); - } - -// Sys_branch_union_user_permission permission = new Sys_branch_union_user_permission(); -// permission.setUserId(userId); -// permission.setRoleId(role.getId()); -// permission.setUnionId(unionId); -// dao.insert(permission); - -// Sys_union union = dao.fetch(Sys_union.class, unionId); -// Sys_user user = dao.fetch(Sys_user.class, userId); -// String instanceName = union.getName() + user.getUsername() + role.getName() + "的授权申请"; - -// bpmService.startSubmitProcessInstance(BpmProcessConstant.BRANCH_UNION_WEIYUAN_AUTHORIZATION.name(), instanceName, permission.getId(), List.of("24017"), null); - -// sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId)); -// sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId()).add("userId", userId).add("unionId", unionId)); -// sysRoleService.clearCache(); -// sysUserService.clearCache(); - - // 构建表结构存储 - View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", userId)); - if (user == null) { - return Result.error("未找到人员信息"); - } - - Sys_union_cadre unionCadre = new Sys_union_cadre(); - unionCadre.setUserId(userId); - unionCadre.setUnionId(unionId); - unionCadre.setMobile(user.getMobile()); - unionCadre.setUnionName(user.getUnionName()); - unionCadre.setLoginName(user.getLoginname()); - unionCadre.setUserName(user.getUsername()); - unionCadre.setRoleCode(roleCode); - unionCadre.setJ(j); - unionCadre.setApplyDate(new Date()); - unionCadre.setIsServing(true); - unionCadre.setIsJoin(true); - dao.insert(unionCadre); - - // 去走工作流 - boolean isAdmin = AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name()); - Dict args = Dict.create(); - args.set("submit", isAdmin ? "admin" : "branch"); - args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); - args.set(FlowConst.FORM_DATA, unionCadre); - - ProcessInstance instance = flowEngine.startProcessInstanceByKey("JCGHWY", unionCadre.getId(), SecurityUtil.getUserId(), args); - // 自动完成第一个申请任务 - List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); - for (ProcessTask task : doingTaskList) { - flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); - } - - if (isAdmin) { - // 如果是管理员,直接加角色 - sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()).and("userId", "=", userId).and("unionId", "=", unionId)); - sysRoleService.insert("sys_user_role", Chain.make("roleId", role.getId()).add("userId", userId).add("unionId", unionId)); - sysRoleService.clearCache(); - sysUserService.clearCache(); - } - - return Result.success(); + return sysUnionCadreService.saveBranchUnionCadre(userId, roleCode, unionId, j); } @At diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigUnitController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigUnitController.java index b582260..5c75880 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigUnitController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigUnitController.java @@ -13,12 +13,12 @@ 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.sys.models.Sys_role; -import com.budwk.app.sys.models.Sys_unit; 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.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake; +import com.budwk.app.zhgh.democratic.proposal.service.ProposalUndertakeConfigService; import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.ioc.TransAop; @@ -57,6 +57,8 @@ public class ProposalConfigUnitController { private SysRoleService sysRoleService; @Inject private ProposalCommonService proposalCommonService; + @Inject + private ProposalUndertakeConfigService proposalUndertakeConfigService; @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/config/unit/index.html") @@ -120,18 +122,10 @@ public class ProposalConfigUnitController { @SaCheckPermission("proposal.config.unit") @SLog(tag = "提案", msg = "承办单位同步系统单位") public Result syncSysUnit() { - Sql sql = Sqls.create("select code from proposal_undertake"); - List sysUnits = dao.query(Sys_unit.class, Cnd.where(Sys_unit::getUnitcode, "not in", sql).and(Sys_unit::getUnitTypeCode, "=", 1)); - List proposalUndertakes = sysUnits.stream().map(unit -> { - ProposalUndertake proposalUndertake = new ProposalUndertake(); - proposalUndertake.setId(unit.getId()); - proposalUndertake.setCode(unit.getUnitcode()); - proposalUndertake.setEnable(true); - proposalUndertake.setName(unit.getName()); - return proposalUndertake; - }).toList(); - dao.fastInsert(proposalUndertakes); - return Result.success(); + NutMap syncResult = proposalUndertakeConfigService.syncSystemUnits(); + int insertedCount = syncResult.getInt("insertedCount"); + int existingCount = syncResult.getInt("existingCount"); + return Result.success("同步完成:新增" + insertedCount + "个承办单位,已存在" + existingCount + "个", syncResult); } /** diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java index 1a31ff3..e35c77c 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java @@ -22,11 +22,11 @@ import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.flow.service.ProcessTaskService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInviteSeconderVO; -import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond; import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalMessageService; +import com.budwk.app.zhgh.democratic.proposal.service.ProposalSecondedService; import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -97,6 +97,8 @@ public class ProposalMineController { private FlowCommonService flowCommonService; @Inject private ProposalMessageService proposalMessageService; + @Inject + private ProposalSecondedService proposalSecondedService; @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/transact/mine/index.html") @@ -320,10 +322,10 @@ public class ProposalMineController { return Objects.equals(args.getInt("submitType"), ProcessSubmitTypeEnum.AGREE.getCode()); }).toList(); - ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW()); + int requiredSeconderNum = proposalSecondedService.getRequiredSeconderNum(); - if (tasks.size() + seconders.length < proposalConfig.getSeconderNum()) { - return Result.error("至少邀请" + proposalConfig.getSeconderNum() + "个附议人"); + if (tasks.size() + seconders.length < requiredSeconderNum) { + return Result.error("至少邀请" + requiredSeconderNum + "个附议人"); } @@ -352,6 +354,8 @@ public class ProposalMineController { if (doingTaskList.stream().anyMatch(task -> task.getTaskName().equals("invite"))) { // 完成邀请任务并添加附议人 + // 在执行邀请节点前保存本提案的附议门槛,供下一节点 second 的会签条件稳定读取。 + proposalSecondedService.snapshotRequiredSeconderNum(processInstance.getId(), requiredSeconderNum); for (ProcessTask task : doingTaskList) { Dict args = Dict.create(); args.set(FlowConst.PROCESS_TASK_ID_KEY, task.getId()); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalSecondedService.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalSecondedService.java index ac45129..113d45d 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalSecondedService.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/ProposalSecondedService.java @@ -5,6 +5,22 @@ import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond; public interface ProposalSecondedService extends BaseService { + /** + * 读取当前提案配置中的最低同意附议人数。 + * 该数量会在邀请附议人时写入流程实例,避免后续修改全局配置影响已发起的提案。 + * + * @return 配置的最低同意附议人数 + */ + int getRequiredSeconderNum(); + + /** + * 将本次提案的附议门槛快照保存到流程实例变量中,供 second 会签节点的完成条件读取。 + * + * @param processInstanceId 提案流程实例 ID + * @param requiredSeconderNum 本次提案需要同意的附议人数 + */ + void snapshotRequiredSeconderNum(Long processInstanceId, int requiredSeconderNum); + /** * 仅更新附议表 proposal_second 中当前附议人的附议结果。 * 参数说明: diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalCommitteeFilingUnitServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalCommitteeFilingUnitServiceImpl.java index 0b26d68..da91582 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalCommitteeFilingUnitServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalCommitteeFilingUnitServiceImpl.java @@ -76,8 +76,6 @@ public class ProposalCommitteeFilingUnitServiceImpl extends BaseServiceImpl proposalIds = proposalCommonService.mergeProposal(proposalId); if (ObjectUtil.isEmpty(proposalIds)) { @@ -102,41 +100,16 @@ public class ProposalCommitteeFilingUnitServiceImpl extends BaseServiceImpl 20) { - throw new BaseException("立案编号不能超过20个字符"); - } - args.put(caseFilingCodeKey, caseFilingCode); - } - - /** - * old-flow 页面提交后,需要把立案编号、立案结果以及主协办单位同步落业务表。 + * old-flow 页面提交后,需要把立案结果以及主协办单位同步落业务表。 + * 此节点不再维护立案编号,已有提案的历史立案编号保持不变。 * 若这次改成“不予立案”等无需承办单位的结果,也要先清掉旧的承办单位记录,避免脏数据残留。 */ private void syncCommitteeFilingUnitData(List proposalIds, Dict args) { - String caseFilingCode = args.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingCode"); String caseFilingResult = args.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingResult"); String caseFilingType = args.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingType"); dao().update(ProposalInfo.class, - Chain.make("caseFilingCode", caseFilingCode) - .add("caseFilingResult", caseFilingResult) + Chain.make("caseFilingResult", caseFilingResult) .add("caseFilingType", caseFilingType), Cnd.where(ProposalInfo::getId, "in", proposalIds)); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalSecondedServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalSecondedServiceImpl.java index 26c44e4..84f7546 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalSecondedServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalSecondedServiceImpl.java @@ -1,9 +1,15 @@ package com.budwk.app.zhgh.democratic.proposal.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.ProcessInstanceService; import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond; import com.budwk.app.zhgh.democratic.proposal.service.ProposalMessageService; @@ -19,11 +25,33 @@ public class ProposalSecondedServiceImpl extends BaseServiceImpl @Inject private ProposalMessageService proposalMessageService; + @Inject + private ProcessInstanceService processInstanceService; public ProposalSecondedServiceImpl(Dao dao) { super(dao); } + @Override + public int getRequiredSeconderNum() { + ProposalConfig proposalConfig = this.dao().fetch(ProposalConfig.class, Cnd.NEW()); + if (proposalConfig == null || proposalConfig.getSeconderNum() == null || proposalConfig.getSeconderNum() <= 0) { + throw new BaseException("请先在提案配置中设置有效的附议人数"); + } + return proposalConfig.getSeconderNum(); + } + + @Override + public void snapshotRequiredSeconderNum(Long processInstanceId, int requiredSeconderNum) { + if (processInstanceId == null || requiredSeconderNum <= 0) { + throw new BaseException("附议人数流程快照参数错误"); + } + Dict variables = Dict.create(); + // CountersignHandler 会移除 csv_second_ 前缀后计算表达式中的 requiredAgreeCount。 + variables.set(FlowConst.COUNTERSIGN_VARIABLE_PREFIX + "second_requiredAgreeCount", requiredSeconderNum); + processInstanceService.addVariable(processInstanceId, variables); + } + @Override public boolean updateSecondRecord(String proposalId, String taskActorUserId, String opinion, Integer submitType) { if (Strings.isBlank(proposalId) || Strings.isBlank(taskActorUserId) || submitType == null) { @@ -51,20 +79,35 @@ public class ProposalSecondedServiceImpl extends BaseServiceImpl } /** - * 仅在同意附议人数首次达到配置数量时发送二级工会审核短信,防止重复提交附议结果导致重复通知。 + * 仅在同意附议人数首次达到本提案的门槛快照时发送二级工会审核短信,防止重复提交附议结果导致重复通知。 */ private void notifySecondaryUnionWhenThresholdReached(String proposalId, boolean isAgree, boolean wasAgree, int agreedCountBefore) { if (!isAgree || wasAgree) { return; } - ProposalConfig proposalConfig = this.dao().fetch(ProposalConfig.class, Cnd.NEW()); - if (proposalConfig == null || proposalConfig.getSeconderNum() == null || proposalConfig.getSeconderNum() <= 0) { - return; - } - if (agreedCountBefore < proposalConfig.getSeconderNum() - && agreedCountBefore + 1 >= proposalConfig.getSeconderNum()) { + int requiredSeconderNum = getRequiredSeconderNum(proposalId); + if (agreedCountBefore < requiredSeconderNum + && agreedCountBefore + 1 >= requiredSeconderNum) { proposalMessageService.sendSecondaryUnionMessage(proposalId); } } + + /** + * 优先采用邀请附议时写入流程实例的门槛快照,保证配置在提案流转期间被修改时, + * 已发起提案的会签条件与二级工会通知阈值仍保持一致。 + */ + private int getRequiredSeconderNum(String proposalId) { + ProcessInstance processInstance = this.dao().fetch(ProcessInstance.class, + Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId)); + if (processInstance != null && Strings.isNotBlank(processInstance.getVariable())) { + Dict variables = JSONUtil.toBean(processInstance.getVariable(), Dict.class); + Integer requiredSeconderNum = variables.getInt( + FlowConst.COUNTERSIGN_VARIABLE_PREFIX + "second_requiredAgreeCount"); + if (requiredSeconderNum != null && requiredSeconderNum > 0) { + return requiredSeconderNum; + } + } + return getRequiredSeconderNum(); + } } diff --git a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js index 9af1a5f..ebe26c6 100644 --- a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js +++ b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js @@ -103,7 +103,7 @@ const branchUnionUserManage = { @@ -144,7 +144,12 @@ const branchUnionUserManage = { j: "" }, dialogFormVisible: false, - formData: {}, + formData: { + roleCode: "", + j: "", + userId: "" + }, + isSubmitting: false, leaveDialogVisible: false, leaveForm: { id: "", @@ -218,7 +223,9 @@ const branchUnionUserManage = { openAdd() { this.dialogFormVisible = true this.$nextTick(() => { - this.formData = {} + this.$set(this.formData, "roleCode", "") + this.$set(this.formData, "j", "") + this.$set(this.formData, "userId", "") }) }, openLeave(row) { @@ -229,22 +236,38 @@ const branchUnionUserManage = { this.leaveDialogVisible = true }, doSubmit() { + if (!this.formData.roleCode) { + this.$message.error("请选择角色") + return + } if (!this.formData.j) { this.$message.error("请选择届数") return } + if (!this.formData.userId) { + this.$message.error("请选择人员") + return + } + this.isSubmitting = true $.post("/platform/sys/union/insertBranchUnionUserRole", { - ...this.formData, + roleCode: this.formData.roleCode, + j: this.formData.j, + userId: this.formData.userId, unionId: this.union_id }).then((res) => { if (res.code === 0) { this.dialogFormVisible = false - this.$message.success(res.msg) + this.$message.success(res.msg || "保存成功") this.loadUsedJCodes() this.doSearch() } else { - this.$message.error(res.msg) + this.$message.error(res.msg || "保存失败") } + }).fail((xhr) => { + const message = xhr.responseJSON && xhr.responseJSON.msg ? xhr.responseJSON.msg : "保存失败,请稍后重试" + this.$message.error(message) + }).always(() => { + this.isSubmitting = false }) }, doLeave() { diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html index e40e890..ae80c81 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/config/unit/index.html @@ -21,7 +21,7 @@ layout("/layouts/platform.html"){ - 同步系统单位 + 同步系统单位 @@ -69,7 +69,8 @@ layout("/layouts/platform.html"){ data() { return { currentTreeNode: null, - currentTreeData: null + currentTreeData: null, + syncing: false } }, methods: { @@ -78,13 +79,25 @@ layout("/layouts/platform.html"){ this.currentTreeNode = node }, - syncSysUnit() { - this.$axios.post(loc() + "/syncSysUnit").then((res) => { + async syncSysUnit() { + if (this.syncing) { + return + } + this.syncing = true + try { + const res = await this.$axios.post(loc() + "/syncSysUnit") if (res.code === 0) { - this.$message.success(res.msg) + this.$message.success(res.msg || "同步完成") this.$refs.treeRef.listTree() + this.doSearch() + } else { + this.$message.error(res.msg || "同步失败") } - }) + } catch (error) { + this.$message.error("同步失败,请稍后重试") + } finally { + this.syncing = false + } }, onDelete (row) { diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFilingUnit/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFilingUnit/index.html index 98f52e8..bcafcdb 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFilingUnit/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFilingUnit/index.html @@ -123,14 +123,6 @@ layout("/layouts/platform.html"){ - - - -