Compare commits

...
10 Commits
11 changed files with 365 additions and 202 deletions
@@ -12,6 +12,7 @@ import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysMsgService;
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.club.model.ClubUser;
@@ -63,6 +64,7 @@ public class ClubUserJoinApplyController {
Sql sql = Sqls.create("""
SELECT
cua.*,
club.clubName,
u.loginname AS loginName,
u.username AS userName,
u.sex,
@@ -74,6 +76,7 @@ public class ClubUserJoinApplyController {
FROM
club_user_apply cua
LEFT JOIN vw_user u ON u.id = cua.userId
LEFT JOIN sys_club club ON club.id = cua.clubId
WHERE cua.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
@@ -87,10 +90,22 @@ public class ClubUserJoinApplyController {
@SaCheckPermission("club.join.apply")
@Aop(TransAop.READ_COMMITTED)
public Result submit(ClubUserApply clubUserApply) {
if (StrUtil.isNotBlank(clubUserApply.getId())) {
ClubUserApply existingApply = dao.fetch(ClubUserApply.class, clubUserApply.getId());
if (existingApply == null || !StrUtil.equals(existingApply.getUserId(), clubUserApply.getUserId())
|| (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name()) && !StrUtil.equals(existingApply.getUserId(), SecurityUtil.getUserId()))) {
return Result.error("申请不存在或无权编辑!");
}
BpmProcessInstance existingInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", existingApply.getId()));
if (existingInstance == null || existingInstance.getProcessInstanceNodeCode() == null
|| !List.of(10, 40, 70).contains(existingInstance.getProcessInstanceNodeCode())) {
return Result.error("当前申请状态不允许编辑提交!");
}
}
Sys_user user = dao.fetch(Sys_user.class, Cnd.where("id", "=", clubUserApply.getUserId()));
if (!user.getMember() && !("劳务派遣一类".equals(user.getPreparedBy()) || "劳务派遣二类".equals(user.getPreparedBy()))) return Result.error("暂无申请加入协会资格!");
ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()).and("mode", "=", 1).desc(ClubUserApply::getApplyDate));
ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()).and("mode", "=", 1).andEX("id", "!=", clubUserApply.getId()).desc(ClubUserApply::getApplyDate));
if (ObjectUtil.isNotEmpty(userApply) && StrUtil.isNotBlank(userApply.getId())) {
BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", userApply.getId()));
if (!processInstance.getProcessInstanceStatus().equals(BpmProcessInstanceStatusEnum.COMPLETED.name())) {
@@ -1,32 +1,11 @@
package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
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.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
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.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.club.model.ClubUser;
import com.budwk.app.zhgh.club.model.ClubUserApply;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
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.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.mvc.annotation.At;
@@ -34,23 +13,14 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@IocBean
@At("/platform/club/join/clubApproval")
@Ok("json:full")
public class ClubUserJoinApprovalController {
@Inject
private CommonService commonService;
@Inject
private BpmService bpmService;
@Inject
private ClubUserJoinService clubUserJoinService;
@Inject
private Dao dao;
@At("")
@SaCheckPermission("club.join.clubApproval")
@@ -62,106 +32,22 @@ public class ClubUserJoinApprovalController {
@At
@SaCheckPermission("club.join.clubApproval")
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval) {
Sql sql = Sqls.create("""
SELECT
info.*,
u.loginname AS loginName,
u.username AS userName,
u.sex,
u.unitName,
u.unionName,
club.clubName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN club_user_apply info ON info.id = inst.processInstanceBusinessId
LEFT JOIN sys_club club ON club.id = info.clubId
LEFT JOIN vw_user u on u.id = info.userId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id
AND nt.taskStatus = 'COMPLETE'
$condition
""");
Cnd cnd = Cnd.NEW();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",20);
if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
}
cnd.andEX("YEAR(info.applyDate)","=",pageForm.getYear());
cnd.and(Cnd.likeEX("u.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName()));
cnd.andEX("u.unionId","=",pageForm.getUnionId());
cnd.andEX("u.unitId","=",pageForm.getUnitId());
cnd.andEX("info.clubId","=",pageForm.getClubId());
sql.setCondition(cnd);
Pagination<ClubUserJoinPageVo> pageVO = clubUserJoinService.listPageVO(pageForm, sql, ClubUserJoinPageVo.class);
return Result.success(pageVO);
return Result.success(clubUserJoinService.pageDataByClubApproval(pageForm, approval));
}
@At
@SaCheckPermission("club.join.clubApproval")
@ApiOperation("审核")
@Aop(TransAop.READ_COMMITTED)
public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam){
// approvalParam.getBpmTaskApprovalTypeEnum();
// Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
// List<String> assignments = new ArrayList<>();
// if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
// String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN);
// assignments.add(approvalLoginName);
// }
// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
List<String> assignments = new ArrayList<>();
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
if (approvalParam.getBpmTaskApprovalTypeEnum() == BpmTaskApprovalTypeEnum.PASS) {
String processInstanceBusinessId = approvalParam.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, processInstanceBusinessId);
if (clubUserApply != null) {
ClubUser existUser = dao.fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()));
if (existUser == null) {
ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class);
dao.insert(clubUser);
}
}
}
clubUserJoinService.clubApproval(approvalParam);
return Result.success();
}
@At
@SaCheckPermission("club.join.clubApproval")
@ApiOperation("撤回")
@Aop(TransAop.READ_COMMITTED)
public Result revoke(@Valid String taskId){
bpmService.revokeTask(taskId);
BpmProcessTask task = dao.fetch(BpmProcessTask.class, taskId);
String processInstanceId = task.getProcessInstanceId();
BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, processInstanceId);
String businessId = processInstance.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, businessId);
dao.clear(ClubUser.class, Cnd.where(ClubUser::getUserId, "=", clubUserApply.getUserId())
.and(ClubUser::getClubId, "=", clubUserApply.getClubId()));
clubUserJoinService.revokeClubApproval(taskId);
return Result.success();
}
@@ -1,10 +1,18 @@
package com.budwk.app.zhgh.club.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import io.swagger.annotations.Api;
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;
@IocBean
@At("/platform/h5/club/audit")
@@ -12,10 +20,40 @@ import org.nutz.mvc.annotation.Ok;
@Api("h5入会审核")
public class H5ClubAuditController {
@Inject
private ClubUserJoinService clubUserJoinService;
@At("")
@Ok("beetl:/platform/zhghh5/club/audit/index.html")
@SaCheckPermission("h5.club.audit")
public void index() {
}
@At
@SaCheckPermission("h5.club.audit")
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval, Integer auditType) {
Boolean approvalStatus = approval;
if (Integer.valueOf(1).equals(auditType)) {
approvalStatus = null;
} else if (auditType != null) {
approvalStatus = Integer.valueOf(2).equals(auditType);
}
return Result.success(clubUserJoinService.pageDataByClubApproval(pageForm, approvalStatus));
}
@At
@SaCheckPermission("h5.club.audit")
public Result doAudit(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) {
clubUserJoinService.clubApproval(approvalParam);
return Result.success();
}
@At
@SaCheckPermission("h5.club.audit")
public Result revoke(@Valid String taskId){
clubUserJoinService.revokeClubApproval(taskId);
return Result.success();
}
}
@@ -1,7 +1,19 @@
package com.budwk.app.zhgh.club.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.club.model.ClubUserApply;
public interface ClubUserJoinService extends BaseService<ClubUserApply> {
Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, boolean approval);
Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, Boolean approval);
void clubApproval(BpmTaskApprovalParam approvalParam);
void revokeClubApproval(String taskId);
}
@@ -1,14 +1,147 @@
package com.budwk.app.zhgh.club.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
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.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.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
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.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.club.model.ClubUserApply;
import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@IocBean(args = {"refer:dao"})
public class ClubUserJoinServiceImpl extends BaseServiceImpl<ClubUserApply> implements ClubUserJoinService {
@Inject
private BpmService bpmService;
public ClubUserJoinServiceImpl(Dao dao) {
super(dao);
}
@Override
public Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, boolean approval) {
return pageDataByClubApproval(pageForm, Boolean.valueOf(approval));
}
@Override
public Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, Boolean approval) {
Sql sql = Sqls.create("""
SELECT
info.*,
u.loginname AS loginName,
u.username AS userName,
u.sex,
u.unitName,
u.unionName,
club.clubName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN club_user_apply info ON info.id = inst.processInstanceBusinessId
LEFT JOIN sys_club club ON club.id = info.clubId
LEFT JOIN vw_user u on u.id = info.userId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id
AND nt.taskStatus = 'COMPLETE'
$condition
""");
Cnd cnd = Cnd.NEW();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",20);
if(approval == null){
cnd.and("task.taskStatus", "in", List.of(BpmProcessTaskStatusEnum.ACTIVE.name(), BpmProcessTaskStatusEnum.COMPLETE.name()));
}else if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
}
cnd.andEX("YEAR(info.applyDate)","=",pageForm.getYear());
cnd.and(Cnd.likeEX("u.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName()));
cnd.andEX("u.unionId","=",pageForm.getUnionId());
cnd.andEX("u.unitId","=",pageForm.getUnitId());
cnd.andEX("info.clubId","=",pageForm.getClubId());
sql.setCondition(cnd);
return listPageVO(pageForm, sql, ClubUserJoinPageVo.class);
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void clubApproval(BpmTaskApprovalParam approvalParam) {
// approvalParam.getBpmTaskApprovalTypeEnum();
// Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
// List<String> assignments = new ArrayList<>();
// if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
// String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN);
// assignments.add(approvalLoginName);
// }
// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
List<String> assignments = new ArrayList<>();
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
if (approvalParam.getBpmTaskApprovalTypeEnum() == BpmTaskApprovalTypeEnum.PASS) {
String processInstanceBusinessId = approvalParam.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao().fetch(ClubUserApply.class, processInstanceBusinessId);
if (clubUserApply != null) {
ClubUser existUser = dao().fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()));
if (existUser == null) {
ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class);
dao().insert(clubUser);
}
}
}
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void revokeClubApproval(String taskId) {
bpmService.revokeTask(taskId);
BpmProcessTask task = dao().fetch(BpmProcessTask.class, taskId);
String processInstanceId = task.getProcessInstanceId();
BpmProcessInstance processInstance = dao().fetch(BpmProcessInstance.class, processInstanceId);
String businessId = processInstance.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao().fetch(ClubUserApply.class, businessId);
dao().clear(ClubUser.class, Cnd.where(ClubUser::getUserId, "=", clubUserApply.getUserId())
.and(ClubUser::getClubId, "=", clubUserApply.getClubId()));
}
}
+7
View File
@@ -0,0 +1,7 @@
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, processKey, platform, moduleId, isQuickEntry) VALUES ('56e0941221324d04bea7329cb8f549c4', '', '0079', '协会审核', null, 'menu', '/platform/h5/club/audit', null, '/platform/sys/file/download?id=19cl7j298kj3logm5qlb0vslhi', 1, 0, 'h5.club.audit', null, 223, 0, '17a7f8ad3ee947b4a26175049a9c253d', 1790154555839, '17a7f8ad3ee947b4a26175049a9c253d', 1790155973918, 0, null, 'H5', '5710401a805645d59060f888eb863b60', 0);
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('7f4a820d5a394bb8a0a92d6699afe7c8', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('53650479ee954e748fda6cceabdd2918', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('419844ad90f34ca58807e84224905f27', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('d8d30588c356492ebb8645bc2b593270', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('cf0a07b773f444d3800bc18216d8cffb', '56e0941221324d04bea7329cb8f549c4');
@@ -46,14 +46,14 @@ layout("/layouts/platform.html"){
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder">
<el-table v-loading="tableLoading" element-loading-text="加载中..." :data="tableData" @sort-change="pageOrder">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="userName" label="姓名"></el-table-column>
<el-table-column prop="loginName" label="工号"></el-table-column>
<el-table-column prop="sex" label="性别"></el-table-column>
<el-table-column prop="unitName" label="单位" show-overflow-tooltip></el-table-column>
<el-table-column prop="unionName" label="分工会" show-overflow-tooltip></el-table-column>
<el-table-column prop="clubName" label="申请协会" show-overflow-tooltip></el-table-column>
<el-table-column prop="clubName" label="申请协会" min-width="180px" show-overflow-tooltip></el-table-column>
<el-table-column prop="mode" label="申请模式">
<template slot-scope="scope">
<el-tag size="mini" v-if="scope.row.mode" type="success">加入</el-tag>
@@ -62,7 +62,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column prop="applyDate" label="申请时间" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px">
<el-table-column label="操作" width="160px">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
@@ -131,6 +131,21 @@ layout("/layouts/platform.html"){
}
},
methods: {
pageData(url = null, data = null) {
this.tableLoading = true
return this.$axios.post(url || loc() + "/pageData", data || this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
} else {
this.$message.error(res.msg)
}
}).catch(() => {
this.$message.error("审核列表加载失败")
}).finally(() => {
this.tableLoading = false
})
},
openView(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
@@ -178,10 +193,15 @@ layout("/layouts/platform.html"){
}
},
async created() {
this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion()
this.clubList = await this.$businessTool.listClub()
this.pageData()
this.tableLoading = true
try {
this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion()
this.clubList = await this.$businessTool.listClub()
await this.pageData()
} finally {
this.tableLoading = false
}
}
})
</script>
@@ -203,7 +203,7 @@ layout("/layouts/platform_h5.html"){
<!-- 提交按钮 -->
<div class="submit-btn">
<van-button round block type="info">提交申请</van-button>
<van-button round block type="info" :disabled="formLoading">提交申请</van-button>
</div>
</van-form>
<van-popup :style="{ height: '100%',width: '100%'}" position="right" safe-area-inset-bottom v-model="viewShow">
@@ -227,6 +227,7 @@ layout("/layouts/platform_h5.html"){
data() {
return {
viewShow: false,
formLoading: false,
formData: {
clubId: "",
clubName: "",
@@ -284,6 +285,22 @@ layout("/layouts/platform_h5.html"){
});
},
init() {
const id = GetQueryString("id");
if (id) {
this.formLoading = true;
this.$axios.post("/platform/club/join/apply/info", { id }).then(res => {
if (res.code === 0 && res.data) {
this.formData = { ...this.formData, ...res.data };
this.isAgree = true;
this.formLoading = false;
} else {
this.$toast.fail(res.msg || "申请信息加载失败");
}
}).catch(() => {
this.$toast.fail("申请信息加载失败");
});
return;
}
const user = this.$store.state.user;
this.formData.userId = user.id;
this.formData.userName = user.username;
@@ -298,6 +315,7 @@ layout("/layouts/platform_h5.html"){
this.formData.governmentPosition = user.governmentPosition;
},
doSubmit() {
if (this.formLoading) return;
if (!this.isAgree) {
this.$toast.fail("请先阅读并同意协议");
return;
@@ -309,7 +327,9 @@ layout("/layouts/platform_h5.html"){
this.$axios.post("/platform/club/join/apply/submit", this.formData).then(res => {
if (res.code === 0) {
this.$toast(res.msg);
this.$pjaxReplace("/platform/club/join/mine")
this.$pjaxReplace("/platform/h5/club/mine")
} else {
this.$toast.fail(res.msg);
}
});
});
@@ -11,23 +11,17 @@ layout("/layouts/platform_h5.html"){
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar title="入会审核" left-text="返回" left-arrow @click-left="$pjaxReplace('/platform/h5/home')"></van-nav-bar>
<van-search
v-model="pageForm.searchKeyword"
:show-action="showAction"
placeholder="请输入姓名/工号查询"
@search="doSearch"
@cancel="doSearch"
></van-search>
<van-search v-model="pageForm.loginName" placeholder="请输入工号查询" @search="doSearch" @clear="doSearch"></van-search>
<van-dropdown-menu>
<van-dropdown-item v-model="pageForm.applyType" :options="applyTypeOptions" @change="doSearch"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.year" :options="yearList" @change="doSearch"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.auditType" :options="auditTypeOptions" @change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<van-list v-if="tableData.length>0 || tableLoading" v-model="tableLoading" :immediate-check="false" :finished="tableFinished" loading-text="加载中..." finished-text="没有更多了" @load="pageData">
<div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id">
<div class="table-card" v-for="row in tableData" :key="row.processInstanceTaskId">
<van-cell>
<template slot="title">
<div class="flex-align">
@@ -39,23 +33,16 @@ layout("/layouts/platform_h5.html"){
<van-cell title="工号" :value="row.loginName"></van-cell>
<van-cell title="性别" :value="row.sex"></van-cell>
<van-cell title="所属工会" :value="row.unionName"></van-cell>
<van-cell v-if="pageForm.applyType === 1 && row.status" title="入会状态">
<span v-if="row.status == 1">待协会审核</span>
<span v-else-if="row.status == 2">协会不通过</span>
<span v-else-if="row.status == 3">待校工会审核</span>
<span v-else-if="row.status == 4">校工会不通过</span>
<span v-else-if="row.status == 5">审核通过</span>
<van-cell title="申请模式" :value="row.mode ? '加入' : '退出'"></van-cell>
<van-cell title="当前节点" :value="row.processInstanceNodeName"></van-cell>
<van-cell title="审核状态" :value="row.processInstanceTaskStatus === 'ACTIVE' ? '待审核' : '已审核'"></van-cell>
<van-cell v-if="row.processInstanceTaskStatus === 'ACTIVE'" class="table-card-footer">
<van-button size="small" @click="openAudit(row, 'BACK')" type="danger">退回重新申请</van-button>
<van-button size="small" @click="openAudit(row, 'REJECT')" type="danger">拒绝申请</van-button>
<van-button size="small" @click="openAudit(row, 'PASS')" type="info">同意申请</van-button>
</van-cell>
<van-cell v-if="pageForm.applyType === 2 && row.exitStatus" title="退会状态">
<span v-if="row.exitStatus == 1">待协会审核</span>
<span v-else-if="row.exitStatus == 2">协会不通过</span>
<span v-else-if="row.exitStatus == 3">待校工会审核</span>
<span v-else-if="row.exitStatus == 4">校工会不通过</span>
<span v-else-if="row.exitStatus == 5">审核通过</span>
</van-cell>
<van-cell v-if="pageForm.auditType !== 2 && (row.status === 1 || row.exitStatus === 1)" class="table-card-footer">
<van-button size="small" @click="openPayed(row, false)" type="danger">不通过</van-button>
<van-button size="small" @click="openPayed(row, true)" type="info">通过</van-button>
<van-cell v-if="row.processInstanceTaskStatus === 'COMPLETE' && !row.nextTaskIsComplete" class="table-card-footer">
<van-button size="small" @click="openRevoke(row.processInstanceTaskId)" type="danger">撤回</van-button>
</van-cell>
</div>
</div>
@@ -63,17 +50,8 @@ layout("/layouts/platform_h5.html"){
<van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty>
</div>
<van-dialog v-model="payedShow" title="是否缴费" show-cancel-button :lazy-render="false" @confirm="doAudit">
<van-radio-group v-model="payed">
<van-cell-group>
<van-cell title="已缴费" clickable @click="payed = true">
<van-radio slot="right-icon" :name="true"></van-radio>
</van-cell>
<van-cell title="未缴费" clickable @click="payed = false">
<van-radio slot="right-icon" :name="false"></van-radio>
</van-cell>
</van-cell-group>
</van-radio-group>
<van-dialog v-model="auditShow" title="审核意见" show-cancel-button get-container="body" :overlay="true" :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" :lazy-render="false" :before-close="beforeAuditClose">
<van-field v-model="approvalOpinion" type="textarea" placeholder="请输入审核意见" :error-message="approvalOpinionError" @input="approvalOpinionError = ''"></van-field>
</van-dialog>
</div>
@@ -84,19 +62,21 @@ layout("/layouts/platform_h5.html"){
components: {},
data() {
return {
showAction: true,
payedShow: false,
payed: false,
auditShow: false,
approvalOpinion: "",
approvalOpinionError: "",
tableLoading: false,
tableFinished: false,
submitting: false,
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: ""
loginName: "",
year: new Date().getFullYear(),
auditType: 3
},
applyTypeOptions: [
{ text: "申请加入", value: 1 },
{ text: "申请退会", value: 2 }
],
yearList: [],
auditTypeOptions: [
{ text: "全部", value: 1 },
{ text: "已审核", value: 2 },
@@ -104,54 +84,83 @@ layout("/layouts/platform_h5.html"){
],
typeOptions: [],
tableData: [],
auditResult: false,
auditIdList: []
approvalType: "",
approvalParam: {}
}
},
methods: {
openPayed(row, flag) {
this.auditResult = flag
this.auditIdList = [row.id]
if (this.pageForm.applyType === 1) {
this.payedShow = true
} else {
this.doAudit()
openAudit(row, approvalType) {
this.approvalType = approvalType
this.approvalParam = row.approvalParam
this.approvalOpinion = ""
this.approvalOpinionError = ""
this.auditShow = true
},
async beforeAuditClose(action, done) {
if (action !== 'confirm') {
done()
return
}
if (!this.approvalOpinion.trim()) {
this.approvalOpinionError = "请输入审核意见"
done(false)
return
}
done(await this.doAudit() === true)
},
async doAudit() {
const confirm = await this.$dialog.confirm({
title: "提示",
message: "您确定要提交审核吗?"
})
if (confirm === "confirm") {
const resp = await this.$axios.post("/platform/club/applyJoin/clubAudit/doAudit", {
ids: JSON.stringify(this.auditIdList),
auditResult: this.auditResult,
auditType: 1,
applyType: this.pageForm.applyType,
payed: this.payed
if (this.submitting) return
this.submitting = true
try {
const resp = await this.$axios.post("/platform/h5/club/audit/doAudit", {
approval: JSON.stringify({
...this.approvalParam,
bpmTaskApprovalType: this.approvalType,
approvalOpinion: this.approvalOpinion
})
})
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.auditIdList = []
this.payedShow = false
this.doSearch()
return true
} else {
this.$toast(resp.msg)
}
} catch (error) {
this.$toast.fail("审核提交失败")
} finally {
this.submitting = false
}
},
openRevoke(taskId) {
this.$dialog.confirm({ title: "提示", message: "您确定要撤回吗?" }).then(async () => {
const resp = await this.$axios.post("/platform/h5/club/audit/revoke", { taskId })
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
} else {
this.$toast(resp.msg)
}
}
}).catch(() => {})
},
pageData() {
this.tableLoading = true
this.pageForm.source = 1
this.$axios.post("/platform/club/applyJoin/clubAudit/pageData", this.pageForm).then((resp) => {
this.$axios.post("/platform/h5/club/audit/pageData", this.pageForm).then((resp) => {
if (resp.code !== 0) {
this.tableFinished = true
this.$toast(resp.msg)
return
}
this.tableData = this.tableData.concat(resp.data.list)
this.pageForm.totalCount = resp.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.tableFinished = this.tableData.length >= this.pageForm.totalCount
if (!this.tableFinished) {
this.pageForm.pageNumber++
}
}).catch(() => {
this.tableFinished = true
this.$toast.fail("审核列表加载失败")
}).finally(() => {
this.tableLoading = false
})
},
@@ -159,12 +168,14 @@ layout("/layouts/platform_h5.html"){
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.tableData = []
this.tableFinished = false
this.pageData()
}
},
created() {
this.$set(this.pageForm, "applyType", 1)
this.$set(this.pageForm, "auditType", 3)
for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.yearList.unshift({ value: i, text: i + "年" })
}
this.pageData()
}
})
@@ -29,6 +29,24 @@ const clubUserJoin = {
</template>
</van-cell>
</van-cell-group>
<div v-for="nodeTask in viewData.nodeTasks" :key="nodeTask.id">
<van-cell-group :title="nodeTask.nodeName">
<div v-for="task in nodeTask.tasks" :key="task.id">
<van-cell title="审核人">{{ task.actualOwnerLoginName }}-{{ task.actualOwnerUserName }}</van-cell>
<van-cell title="审核时间">{{ task.endOn }}</van-cell>
<van-cell title="审核结果">
<template v-if="task.extVariable">
<van-tag type="success" v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意</van-tag>
<van-tag type="danger" v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回重新填写</van-tag>
<van-tag type="danger" v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝</van-tag>
</template>
</van-cell>
<van-cell title="审核意见">
<div style="white-space: pre-wrap; overflow-wrap: anywhere; text-align: right">{{ task.extVariable && task.extVariable.approvalOpinion }}</div>
</van-cell>
</div>
</van-cell-group>
</div>
</div>
`,
data() {
@@ -81,6 +81,9 @@ layout("/layouts/platform_h5.html"){
}
},
methods: {
openEdit(row) {
this.$pjaxReplace("/platform/h5/club/apply?id=" + encodeURIComponent(row.id))
},
onOpen(row) {
this.viewShow = true
this.$nextTick(() => {