协会会长可以设置本协会参加人员(人员选择器),申请后按主表分组查询,完结后系统管理员、校工会管理员可以编辑

This commit is contained in:
2026-11-09 15:36:45 +08:00
parent 909aaa291c
commit ec70ceefd5
10 changed files with 249 additions and 76 deletions
@@ -29,6 +29,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.ioc.aop.Aop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -134,6 +136,7 @@ public class ActivityBasicScopeController {
@At
@SLog(tag = "活动人员设置", msg = "设置活动人员")
@SaCheckPermission("activity.basic.scope")
@Aop(TransAop.READ_COMMITTED)
public Object doSetActivityUser(@Param("data") ActivityUserScopePageParam activityUserScopePageParam) {
Sql sql = Sqls.create("""
SELECT DISTINCT
@@ -243,6 +246,8 @@ public class ActivityBasicScopeController {
public Result getRolesAndUnion() {
return Result.success(new NutMap() {{
addv("is_A06", StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()));
addv("is_H02", StpUtil.hasRole(RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name()));
addv("is_CLUB_PRESIDENT", StpUtil.hasRole(RoleConstant.CLUB_PRESIDENT.name()));
addv("is_H04", StpUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()));
addv("is_sysadmin", StpUtil.hasRole(RoleConstant.SYSADMIN.name()));
addv("unionid", SecurityUtil.getUnionId());
@@ -376,9 +381,8 @@ public class ActivityBasicScopeController {
try {
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
cnd.andEX("u.unionid", "=", SecurityUtil.getUnionId());
}
// 授权范围独立于筛选条件,反选或清空协会不能扩大当前账号的数据权限。
activityBasicScopeService.appendRoleUserScope(cnd);
cnd.andEX("u.unionid", EQ_OR_NEQ_OP, activityUserScopePageParam.getUnionId());
cnd.andEX("u.unitid", EQ_OR_NEQ_OP, activityUserScopePageParam.getUnitId());
cnd.andEX("u.personType", IN_OR_NIN_OP, activityUserScopePageParam.getPersonTypes());
@@ -16,6 +16,13 @@ public interface ActivityBasicScopeService extends BaseService<ActivityUserScope
Sql createSql(Cnd cnd);
/**
* 为人员查询追加当前登录账号的授权范围,查询和设置人员共用。
* @param cnd 已有查询条件,用户表必须使用 u 别名;方法原地追加条件
* @return 无返回值;会长限管理协会成员,兼任分工会主席时取两种范围的并集
*/
void appendRoleUserScope(Cnd cnd);
/**
* 大量数据插入
*/
@@ -1,6 +1,16 @@
package com.budwk.app.zhgh.activity.basic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.club.model.ClubUser;
import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.club.service.SysClubService;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.DateUtil;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
@@ -34,6 +44,46 @@ public class ActivityBasicScopeServiceImpl extends BaseServiceImpl<ActivityUserS
super(dao);
}
@Inject
private SysClubService sysClubService;
/**
* cnd 为使用 u 用户别名的查询条件,无返回值;仅追加服务端授权条件。
* 会长允许选择管理协会的跨工会成员;无协会、无工会时不放开全员查询。
*/
@Override
public void appendRoleUserScope(Cnd cnd) {
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
return;
}
boolean president = AuthUtil.hasRole(RoleConstant.CLUB_PRESIDENT.name());
SqlExpressionGroup scope = new SqlExpressionGroup();
boolean hasScope = false;
String unionId = SecurityUtil.getUnionId();
// 双身份保留分工会范围,并允许选择本人管理协会中其他工会的成员。
if ((!president || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) && StrUtil.isNotBlank(unionId)) {
scope.or("u.unionid", "=", unionId);
hasScope = true;
}
if (president) {
List<String> clubIds = sysClubService.getMyManageClub().stream().map(SysClub::getId).toList();
// 空集合必须显式拦截,避免 ORM 忽略空 IN 条件后扩大人员范围。
if (!clubIds.isEmpty()) {
List<String> userIds = dao().query(ClubUser.class, Cnd.where("clubId", "in", clubIds))
.stream().map(ClubUser::getUserId).distinct().toList();
if (!userIds.isEmpty()) {
scope.or("u.id", "in", userIds);
hasScope = true;
}
}
}
if (hasScope) {
cnd.and(scope);
} else {
cnd.and(new Static("1 = 0"));
}
}
@Override
public Sql createSql(Cnd cnd) {
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.activity.culture.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
@@ -92,7 +93,7 @@ public class ActivityCultureApplyActivityController {
* @description 根据活动组别查询每个工会可以报名的人数
*/
@At
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR)
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR)
public Result getUnionData(String activityScopeGroupId) {
List<NutMap> unionData = activityCultureService.getUnionData(activityScopeGroupId);
return Result.success(unionData);
@@ -102,8 +103,16 @@ public class ActivityCultureApplyActivityController {
@At
@ApiOperation("保存活动申报")
@SLog(tag = "文化活动-活动申报", msg = "保存了一条文化活动记录")
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR)
public Result save(@Param("data") ActivityTissue tissue) {
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR)
@Aop(TransAop.READ_COMMITTED)
public Result save(@Param("data") ActivityTissue tissue, @Param("manageClubEdit") boolean manageClubEdit) {
// data 为活动表单;manageClubEdit=true 表示管理员只保存业务信息,返回 Result 成功状态。
if (manageClubEdit) {
activityCultureService.saveManagedClubActivity(tissue);
return Result.success();
}
// 管理权限只允许走服务端校验的编辑分支,不能借此新增申请。
StpUtil.checkPermissionOr("activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club");
if (tissue.getActivity_type() == 40002) {
tissue.setUnionId(SecurityUtil.getUnionId());
@@ -188,7 +197,7 @@ public class ActivityCultureApplyActivityController {
}
@At
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR)
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR)
public Result findUser(String serachWord,
Integer activity_type) {
Cnd cnd = Cnd.NEW();
@@ -224,7 +233,7 @@ public class ActivityCultureApplyActivityController {
}
@At
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR)
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club", "activity.culture.infoManage.club"}, mode = SaMode.OR)
public Result queryUserByIds(String[] ids) {
Sql sql = Sqls.create("select id,loginname,username,unitname,unionname,sex from vw_user where id in (@id)");
sql.setParam("id", ids);
@@ -21,6 +21,13 @@ public interface ActivityCultureService extends BaseService<ActivityTissue> {
void doEditActivity(ActivityTissue tissue);
/**
* 管理员修改已有协会活动,不推进工作流。
* @param tissue 完整活动表单,id 必须为已存在的协会活动;申请和审核字段以数据库为准
* @return 无返回值,权限不足或活动不合法时抛出业务异常
*/
void saveManagedClubActivity(ActivityTissue tissue);
Object pageData(PageForm page, String year, String name, String unionId, Integer activity_type);
NutMap findOne(String id);
@@ -1,6 +1,10 @@
package com.budwk.app.zhgh.activity.culture.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.dev33.satoken.stp.StpUtil;
import com.budwk.app.base.exception.BaseException;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.ioc.aop.Aop;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit;
import com.budwk.app.base.param.PageForm;
@@ -79,6 +83,48 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
update(tissue);
}
/**
* tissue 为管理员提交的完整活动表单,无返回值;仅允许两类管理员编辑已有协会活动。
* 申请人、申请时间、审核及开启状态取数据库原值,保存不启动或执行任何 wf 任务。
*/
@Override
@Aop(TransAop.READ_COMMITTED)
public void saveManagedClubActivity(ActivityTissue tissue) {
StpUtil.checkPermission("activity.culture.infoManage.club");
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
throw new BaseException("仅系统管理员和校工会管理员可执行此操作");
}
if (tissue == null || StrUtil.isBlank(tissue.getId())) {
throw new BaseException("请选择需要编辑的协会活动");
}
ActivityTissue original = fetch(tissue.getId());
if (original == null || !Integer.valueOf(40003).equals(original.getActivity_type())) {
throw new BaseException("只能编辑已存在的协会活动");
}
if ("50004".equals(original.getProjectTypeCode()) || "50004".equals(tissue.getProjectTypeCode())) {
throw new BaseException("此活动项目类型不允许编辑");
}
tissue.setActivity_type(original.getActivity_type());
tissue.setUserId(original.getUserId());
tissue.setApplyTime(original.getApplyTime());
tissue.setUnionId(original.getUnionId());
tissue.setState(original.getState());
tissue.setAuditId(original.getAuditId());
tissue.setIsUnseal(original.getIsUnseal());
tissue.setCreatedBy(original.getCreatedBy());
tissue.setCreatedAt(original.getCreatedAt());
tissue.setDelFlag(original.getDelFlag());
update(tissue);
// 未提交参与人明细时保留原记录;提交空数组表示明确清空,主从表同一事务更新。
if (tissue.getTissuePersonList() != null) {
tissue.getTissuePersonList().forEach(person -> person.setTissueId(original.getId()));
dao().clear(ActivityTissuePerson.class, Cnd.where("tissueId", "=", original.getId()));
if (!tissue.getTissuePersonList().isEmpty()) {
insert(tissue.getTissuePersonList());
}
}
}
@Override
public Object pageData(PageForm page, String year, String name, String unionId, Integer activity_type) {
Cnd cnd = Cnd.NEW();
@@ -146,7 +192,8 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
} else {
cnd.desc("tissue.startTime");
}
//cnd.groupBy("tissue.id");
// 同一审核任务关联多个参与人时会展开多行,按活动主表 ID 分组保证每项活动仅展示一次。
cnd.groupBy("tissue.id");
sql.setCondition(cnd);
return this.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
}
@@ -7,7 +7,7 @@
<el-tabs tab-position="top" v-model="activeName" @tab-click="handleClick" style="margin: 20px">
<el-tab-pane label="人员设置" name="1">
<template>
<user-scope ref="userScope" @group_change="group_change" :group_id.sync="groupId"></user-scope>
<user-scope :activity_type="activity_type" ref="userScope" @group_change="group_change" :group_id.sync="groupId"></user-scope>
</template>
</el-tab-pane>
@@ -21,7 +21,13 @@
<script>
module.exports = {
props: {},
props: {
// 申请页传入活动类型;未传时保持公共人员设置入口原有行为。
activity_type: {
type: [Number, String],
default: ""
}
},
model: {},
mixins: [initTableMixins],
data() {
@@ -45,7 +51,7 @@ module.exports = {
},
components: {
"user-data-scope": httpVueLoader("/components/module/activity/UserDataScope.vue"),
"user-scope": httpVueLoader("/components/module/activity/UserScope.vue")
"user-scope": httpVueLoader("/components/module/activity/UserScope.vue?v=20261109-club-scope-2")
},
watch: {
groupId: {
@@ -228,12 +228,12 @@
</template>
<el-row class="query-row"
v-if="is_A06===true||is_sysadmin===true||is_H02===true">
v-if="isClubActivity || is_A06 || is_sysadmin || is_H02 || is_CLUB_PRESIDENT">
<el-col class="query-title">协会:</el-col>
<el-col class="query-content">
<el-select v-model="pageForm.clubId" placeholder="请选择协会" @change="doSearch"
filterable
:clearable="is_A06===true||is_sysadmin===true||(is_H04===true&&is_H02===true)"
:clearable="is_A06===true||is_sysadmin===true||(is_H04 && (is_H02 || is_CLUB_PRESIDENT))"
style="width: 100%">
<el-option
v-for="item in clubOptions"
@@ -382,7 +382,13 @@
<script>
module.exports = {
props: {},
props: {
// 40003 表示协会活动,仅用于显示筛选入口,人员权限仍由后端校验。
activity_type: {
type: [Number, String],
default: ""
}
},
model: {},
mixins: [initTableMixins],
data() {
@@ -470,6 +476,9 @@ module.exports = {
}
},
computed: {
isClubActivity() {
return Number(this.activity_type) === 40003
},
is_H10() {
return this.roleData.is_H10
},
@@ -479,6 +488,9 @@ module.exports = {
is_H04() {
return this.roleData.is_H04
},
is_CLUB_PRESIDENT() {
return this.roleData.is_CLUB_PRESIDENT
},
is_H02() {
return this.roleData.is_H02
},
@@ -546,9 +558,10 @@ module.exports = {
this.pageForm.reverseSelection = false
this.doSearch()
},
async queryUser(val) {
const resp = await $.get("/open/common/userOptions", {query: val})
this.userList = resp.data
queryUser(val) {
return $.get("/open/common/userOptions", {query: val}).then((resp) => {
this.userList = resp.data
})
},
tagClick(key, val) {
let idx = this.pageForm[key].indexOf(val)
@@ -559,16 +572,12 @@ module.exports = {
}
this.doSearch()
},
async flushUnits() {
flushUnits() {
this.$set(this.pageForm, "unitId", "")
if (this.is_sysadmin || this.is_A06) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
// this.activityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await this.$businessTool.listUnit(this.unionId)
}
return this.$businessTool.listUnit(this.is_sysadmin || this.is_A06 || this.is_CLUB_PRESIDENT ? this.pageForm.unionId : this.unionid)
.then((units) => { this.units = units })
},
async pageData() {
pageData() {
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.userStates = JSON.stringify(pageForm.userStates)
@@ -580,17 +589,18 @@ module.exports = {
pageForm.age = JSON.stringify(pageForm.age)
pageForm.activityUserCnd = pageForm.activityUserCnd ? JSON.stringify(pageForm.activityUserCnd) : pageForm.activityUserCnd
const resp = await $.post("/platform/activity/basic/scope/pageData", {data: JSON.stringify(pageForm)})
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
} else {
this.notifyWarning(resp.msg)
}
this.tableLoading = true
return $.post("/platform/activity/basic/scope/pageData", {data: JSON.stringify(pageForm)}).then((resp) => {
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
} else {
this.notifyWarning(resp.msg)
}
}).always(() => { this.tableLoading = false })
},
async doSetActivityUser() {
const valid = await this.$refs.setForm.validate()
doSetActivityUser() {
return this.$refs.setForm.validate().then((valid) => {
if (!valid) {
return
}
@@ -599,11 +609,11 @@ module.exports = {
this.$message.warning("请先指定筛选条件!")
return
}
const confirm = await this.$confirm("是否将符合搜索条件的用户设为活动人员?", "提示", {
return this.$confirm("是否将符合搜索条件的用户设为活动人员?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
}).then((confirm) => {
if (confirm === "confirm") {
this.settingLoading = true
const pageForm = clone(this.pageForm)
@@ -618,11 +628,12 @@ module.exports = {
pageForm.activityUserCnd = pageForm.activityUserCnd ? JSON.stringify(pageForm.activityUserCnd) : pageForm.activityUserCnd
Object.assign(pageForm, this.formData)
const resp = await $.post("/platform/activity/basic/scope/doSetActivityUser", {data: JSON.stringify(pageForm)})
// data 包含筛选条件及分组信息;成功时 data 为保存后的分组 ID。
return $.post("/platform/activity/basic/scope/doSetActivityUser", {data: JSON.stringify(pageForm)}).then((resp) => {
if (resp.code === 0) {
this.setDialogVisible = false
// this.userScopeDialog = false
await this.getActivityGroup()
this.getActivityGroup()
this.doSearch()
this.$message.success(resp.msg)
this.formData = {
@@ -633,13 +644,17 @@ module.exports = {
} else {
this.$message.error(resp.msg)
}
this.settingLoading = false
this.$emit("update:group_id", resp.data)
this.$emit("group_change")
if (resp.code === 0) {
this.$emit("update:group_id", resp.data)
this.$emit("group_change")
}
}).always(() => { this.settingLoading = false })
}
})
})
},
async getActivityGroup() {
const resp = await $.get("/platform/activity/basic/scope/getActivityUserScopeGroup")
getActivityGroup() {
return $.get("/platform/activity/basic/scope/getActivityUserScopeGroup").then((resp) => {
this.activityGroupList = resp.data
this.activityGroupList2 = []
resp.data.forEach((v) => {
@@ -648,37 +663,51 @@ module.exports = {
groupName: v.groupName + "范围之外人员"
})
})
})
},
async getRoleListByMenuId() {
const {data} = await $.post("/platform/activity/basic/scope/getRoleListByMenuId")
this.roleList = data
getRoleListByMenuId() {
return $.post("/platform/activity/basic/scope/getRoleListByMenuId").then((res) => {
this.roleList = res.data
})
},
async getRolesAndUnion() {
const {data} = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleData = data
getRolesAndUnion() {
// 返回角色标识及 unionid,等待身份加载后再确定初始查询范围。
return this.$axios.post("/platform/activity/basic/scope/getRolesAndUnion").then((res) => {
if (res.code === 0) {
this.roleData = res.data
}
})
}
},
async created() {
created() {
this.listSession()
await this.getRolesAndUnion()
this.clubOptions = await this.$businessTool.listCLubByRole()
if ((this.is_sysadmin || this.is_A06 || this.is_H02) === false && this.is_H04 === true) {
this.unions = this.$businessTool.listUnion(this.unionid)
this.$set(this.pageForm, "unionId", this.unions[0].id)
} else {
this.unions = await this.$businessTool.listUnion()
}
if (this.is_H04 === false && this.is_H02 === true) {
if (this.clubOptions.length > 0) {
this.getRolesAndUnion().then(() => {
// 协会活动入口和会长复用申请页的管理协会接口,避免角色标识缺失时选项来源不一致。
return this.isClubActivity || this.is_CLUB_PRESIDENT
? this.$axios.post("/platform/club/examine/apply/getClubsByRole").then((res) => res.code === 0 ? res.data : [])
: this.$businessTool.listCLubByRole()
}).then((clubs) => {
this.clubOptions = clubs
const onlyUnion = !this.is_sysadmin && !this.is_A06 && !this.is_H02 && !this.is_CLUB_PRESIDENT && !this.isClubActivity && this.is_H04
return this.$businessTool.listUnion(onlyUnion ? this.unionid : null).then((unions) => {
this.unions = unions
if (onlyUnion && unions.length > 0) {
this.$set(this.pageForm, "unionId", unions[0].id)
}
})
}).then(() => {
if (!this.is_sysadmin && !this.is_A06 && !this.is_H04 && (this.isClubActivity || this.is_H02 || this.is_CLUB_PRESIDENT) && this.clubOptions.length > 0) {
this.$set(this.pageForm, "clubId", this.clubOptions[0].id)
}
}
await this.flushUnits()
await this.getActivityGroup()
this.personTypeOptions = await this.$businessTool.getDictOptions("USER_PERSON_TYPE")
this.userStateOptions = await this.$businessTool.getDictOptions("USER_STATE")
await this.getRoleListByMenuId()
await this.pageData()
return this.flushUnits()
}).then(() => this.getActivityGroup()).then(() => this.$businessTool.getDictOptions("USER_PERSON_TYPE"))
.then((options) => {
this.personTypeOptions = options
return this.$businessTool.getDictOptions("USER_STATE")
}).then((options) => {
this.userStateOptions = options
return this.getRoleListByMenuId()
}).then(() => this.pageData())
}
}
</script>
@@ -524,8 +524,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
</el-tabs>
</el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
<template v-if="formData.isEnrollSystem">
<el-button type="primary" plain @click="onSave" :loading="formLoading">保存</el-button>
<template v-if="formData.isEnrollSystem && !manageClubEdit">
<el-button type="primary" @click="onSubmit" v-if="!taskId">提交</el-button>
<el-button type="primary" @click="onFinishTask" v-else>提交</el-button>
</template>
@@ -536,6 +536,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
<drawer-user-scope
@group_change="getActivityGroup"
ref="drawerUserScope"
:activity_type="activity_type"
:group_id.sync="formData.groupId"
></drawer-user-scope>
@@ -580,6 +581,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
data() {
return {
// 管理员从协会管理页进入时仅保存业务信息,不重新执行申请流程。
manageClubEdit: false,
bizId: "",
taskId: "",
activeName: "1",
@@ -626,7 +629,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
}
},
components: {
"drawer-user-scope": httpVueLoader("/components/module/activity/DrawerUserScope.vue")
"drawer-user-scope": httpVueLoader("/components/module/activity/DrawerUserScope.vue?v=20261109-club-scope-2")
},
computed: {
unionUserNumCalcTips() {
@@ -680,9 +683,11 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
formData.endPlannedDate = formData.plannedDate[1]
formData.plannedDate = null
}
this.formLoading = true
this.$axios.post('/platform/activity/culture/applyActivity/save', {
data: JSON.stringify(formData),
userData: JSON.stringify(this.userData)
userData: JSON.stringify(this.userData),
manageClubEdit: this.manageClubEdit
}).then(res => {
if (res.code === 0) {
this.$emit("goBack")
@@ -698,6 +703,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
// commonUtil.pjaxPush("/platform/activity/culture/infoManage/school")
}
}
}).finally(() => {
this.formLoading = false
})
})
},
@@ -1030,7 +1037,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
}
}
},
openEdit(row) {
openEdit(row, manageClubEdit = false) {
this.manageClubEdit = manageClubEdit
this.taskId = row.startTaskId
this.bizId = row.id
this.activeName = "1"
@@ -103,7 +103,7 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
</el-dropdown-item>
<el-dropdown-item :command="{type:'edit',row}"
v-if="row.taskKey === 'startTask' || !row.instanceId"
v-if="canManageClub || row.taskKey === 'startTask' || !row.instanceId"
:disabled="row.projectTypeCode==50004">
编辑
</el-dropdown-item>
@@ -181,6 +181,12 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
"activity-culture-apply-activity": ACTIVITY_CULTURE_APPLY_ACTIVITY,
"activity-culture-info-activity": ACTIVITY_CULTURE_INFO_ACTIVITY
},
computed: {
canManageClub() {
// 协会管理入口的两类管理员可跨流程节点编辑;其他入口保留申请节点限制。
return Number(this.activity_type) === 40003 && (this.$auth.hasRole("SYSADMIN") || this.$auth.hasRole("SCHOOL_UNION_ADMIN"))
}
},
methods: {
async activityStatusChange(id, isUnseal) {
@@ -218,7 +224,7 @@ const ACTIVITY_CULTURE_INFO_MANAGE = {
},
openEdit(row) {
this.$refs.guava.edit(() => {
this.$refs.applyActivity.openEdit(row)
this.$refs.applyActivity.openEdit(row, this.canManageClub)
})
},
onView(row) {