This commit is contained in:
@jyuhsin
2024-12-06 14:57:44 +08:00
parent 02150326e0
commit da97219124
24 changed files with 1007 additions and 187 deletions
@@ -13,17 +13,32 @@ public class ClubRegistAuditState {
public static final Integer NOT_SUBMIT = 800;
/**
* 待宣体办公室审核
* 待二级单位党委书记审核
*/
public static final Integer UNIT_PART_READY = 801;
/**
* 二级单位党委书记退回修改
*/
public static final Integer UNIT_PART_BACK_MODIFY = 802;
/**
* 二级单位党委书记审核拒绝
*/
public static final Integer UNIT_PART_REJECTED = 803;
/**
* 待校办公室主管审核
*/
public static final Integer XT_READY = 810;
/**
* 宣体办公室退回修改
* 办公室主管退回修改
*/
public static final Integer XT_BACK_MODIFY = 820;
/**
* 宣体办公室审核拒绝
* 办公室主管审核拒绝
*/
public static final Integer XT_REJECTED = 830;
@@ -7,6 +7,7 @@ import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.controllers.platform.sys.handler.ClubEvaluateToDoHandler;
import io.v.nutz.sys.controllers.platform.sys.handler.ClubExamineToDoHandler;
import io.v.nutz.sys.models.Sys_club;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.sys_club_examine_register;
import io.v.nutz.web.commons.utils.ShiroUtil;
@@ -69,7 +70,8 @@ public class ClubExamineRegisterHzAuditController {
u.username,
sc.concatPersonMobile,
st.stateName,
st.stateColor
st.stateColor,
sc.sponsorType
FROM
`sys_club_examine_register` scer
LEFT JOIN sys_club sc ON sc.id = scer.clubId
@@ -93,10 +95,10 @@ public class ClubExamineRegisterHzAuditController {
audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
baseService.dao().insert(audit);
sys_club_examine_register examineRegister = baseService.dao().fetch(sys_club_examine_register.class, id);
Sys_club sysClub = baseService.dao().fetch(Sys_club.class, examineRegister.getClubId());
int auditId;
//审核通过1.完成任务,2.给校工会发任务
//审核拒绝1.完成任务,2.给申请人发任务
ClubExamineToDoHandler.COMPLETE_CLUB_TASK.exec(examineRegister);
if (flag == 1) {
auditId = 5095;
ClubExamineToDoHandler.CREATE_APPLY_TASK.exec(examineRegister);
@@ -104,10 +106,18 @@ public class ClubExamineRegisterHzAuditController {
auditId = 5093;
ClubExamineToDoHandler.CREATE_APPLY_TASK.exec(examineRegister);
} else {
auditId = 6010;
ClubExamineToDoHandler.CREATE_SCHOOL_TASK.exec(examineRegister);
if(sysClub.getSponsorType() == 1) {
auditId = 6007;
ClubExamineToDoHandler.CREATE_UNIT_PART_TASK.exec(examineRegister);
} else {
auditId = 6010;
ClubExamineToDoHandler.CREATE_SCHOOL_TASK.exec(examineRegister);
}
}
baseService.dao().update(sys_club_examine_register.class, Chain.make("auditId", auditId).add("hzAuditId", audit.getId()), Cnd.where("id", "=", id));
examineRegister.setHzAuditId(audit.getId());
examineRegister.setAuditId(auditId);
baseService.dao().update(examineRegister);
ClubExamineToDoHandler.COMPLETE_CLUB_TASK.exec(examineRegister);
return null;
}
@@ -115,9 +125,7 @@ public class ClubExamineRegisterHzAuditController {
@ViReturn
@RequiresPermissions("sys.club.examine.registerHzAudit")
public Object doRecall(String id) {
baseService.dao().update(sys_club_examine_register.class, Chain.make("auditId", 5090).add("hzAuditId", null), Cnd.where("id", "=", id));
return null;
}
@@ -0,0 +1,113 @@
package io.v.nutz.sys.controllers.platform.sys.club.examine;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.sys.controllers.platform.sys.handler.ClubExamineToDoHandler;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.sys_club_examine_register;
import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
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.Lang;
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.Collectors;
@IocBean
@At("/platform/sys/club/examine/register/unitPartAudit")
@Ok("json:full")
public class ClubExamineRegisterUnitPartAuditController {
@Inject
private BaseService baseService;
@At("")
@Ok("beetl:/platform/sys/club/examine/registerUnitPartAudit.html")
@RequiresPermissions("sys.club.examine.unitPartAudit")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("sys.club.examine.unitPartAudit")
public Object pageData(PageForm page,
@Param(value = "year", required = false) Integer year,
@Param(value = "clubId", required = false) String clubId,
@Param(value = "flag", required = false) boolean flag) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
scer.*,
u.username,
sc.concatPersonMobile,
st.stateName,
st.stateColor
FROM
`sys_club_examine_register` scer
LEFT JOIN sys_club sc ON sc.id = scer.clubId
LEFT JOIN `user` u ON u.id = sc.concatPerson
LEFT JOIN `user` u1 ON u1.id = sc.userid
LEFT JOIN audit_state st ON st.stateId = scer.auditId
$condition
""");
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06", "xxhgly"})) {
cnd.and("u1.unitId", "=", ShiroUtil.getUnitId());
}
cnd.andEX("YEAR(scer.registerDate)", "=", year);
cnd.andEX("scer.clubId", "=", clubId);
cnd.and("scer.auditId", flag ? ">" : "=", 6007);
sql.setCondition(cnd);
return baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
}
@At
@ViReturn
@Aop(TransAop.READ_COMMITTED)
@RequiresPermissions("sys.club.examine.unitPartAudit")
public Object doReview(String id, Integer flag, Audit audit) {
audit.setAuditor(ShiroUtil.getPrincipalProperty("id").toString());
audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
baseService.dao().insert(audit);
sys_club_examine_register examineRegister = baseService.dao().fetch(sys_club_examine_register.class, id);
int auditId;
//审核通过1.完成任务,2.给校工会发任务
//审核拒绝1.完成任务,2.给申请人发任务
if (flag == 1) {
auditId = 6009;
ClubExamineToDoHandler.CREATE_APPLY_TASK.exec(examineRegister);
} else if (flag == 2) {
auditId = 6008;
ClubExamineToDoHandler.CREATE_APPLY_TASK.exec(examineRegister);
} else {
auditId = 6010;
ClubExamineToDoHandler.CREATE_SCHOOL_TASK.exec(examineRegister);
}
examineRegister.setAuditId(auditId);
examineRegister.setUnitPartAuditId(audit.getId());
baseService.dao().update(examineRegister);
ClubExamineToDoHandler.COMPLETE_UNIT_PART_TASK.exec(examineRegister);
return null;
}
@At
@ViReturn
@RequiresPermissions("sys.club.examine.unitPartAudit")
public Object doRecall(String id) {
baseService.dao().update(sys_club_examine_register.class, Chain.make("auditId", 6007).add("unitPartAuditId", null), Cnd.where("id", "=", id));
return null;
}
}
@@ -133,6 +133,9 @@ public class ClubMyApplyController {
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap result = (NutMap) sql.getResult();
if (Strings.isNotBlank(result.getString("unitPartAuditId"))) {
result.put("unitPartAudit", dao.fetch(Audit.class, result.getString("unitPartAuditId")));
}
if (Strings.isNotBlank(result.getString("xghAuditId"))) {
result.put("xghAudit", dao.fetch(Audit.class, result.getString("xghAuditId")));
}
@@ -58,7 +58,7 @@ public class ClubRegistApplyController {
@RequiresPermissions("sys.club.clubRegist.clubRegistApply")
public Object getClubCode() {
String maxNum = (String) dao.func2(Sys_club.class, "max", "code", Cnd.where("year(create_time)", "=", DateUtil.getYear()));
if(StrUtil.isNotBlank(maxNum)) {
if(StrUtil.isBlank(maxNum)) {
maxNum = DateUtil.getYear() + "000";
}
return Integer.parseInt(maxNum) + 1;
@@ -77,7 +77,11 @@ public class ClubRegistApplyController {
club.setFoundTime(DateUtil.getDateTime());
club.setState(isSave ? ClubRegistAuditState.NOT_SUBMIT : ClubRegistAuditState.SCHOOL_PASS);
} else {
club.setState(isSave ? ClubRegistAuditState.NOT_SUBMIT : ClubRegistAuditState.XLD_READY);
if(isSave) {
club.setState(ClubRegistAuditState.NOT_SUBMIT);
} else {
club.setState(club.getSponsorType() == 1 ? ClubRegistAuditState.UNIT_PART_READY : ClubRegistAuditState.XT_READY);
}
}
club.setUserid(ShiroUtil.getPlatformUid());
club.setCreate_time(DateUtil.getDateTime());
@@ -143,14 +147,12 @@ public class ClubRegistApplyController {
@Param(value = "::managePerson", required = false) List<NutMap> managePerson) throws IOException {
if (!isSave && !ShiroUtil.hasAnyRoles("sysadmin, A06, xxhgly")) {
club.setState(ClubRegistAuditState.XT_READY);
club.setState(club.getSponsorType() == 1 ? ClubRegistAuditState.UNIT_PART_READY : ClubRegistAuditState.XT_READY);
club.setXtAuditId("");
club.setXldAuditId("");
}
if (!isSave && ShiroUtil.hasAnyRoles("sysadmin, A06, xxhgly")) {
club.setState(ClubRegistAuditState.SCHOOL_PASS);
club.setXtAuditId("");
club.setXldAuditId("");
}
sysClubService.update(club);
dao.clear(Sys_club_sponsor.class, Cnd.where("clubId", "=", club.getId()));
@@ -0,0 +1,97 @@
package io.v.nutz.sys.controllers.platform.sys.club.regist;
import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.model.Audit;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.sys.constant.club.ClubRegistAuditState;
import io.v.nutz.sys.models.Sys_club;
import io.v.nutz.sys.services.SysClubService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.shiro.authz.annotation.RequiresPermissions;
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.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.Date;
/**
* @Author JyuHsin
* @Date 2022/4/14
* @Description 二级单位审核
*/
@IocBean
@At("/platform/sys/club/unitPartAudit")
@Ok("json")
public class ClubUnitPartAuditController {
@Inject
private SysClubService sysClubService;
@Inject
private Dao dao;
@At("")
@Ok("beetl:/platform/sys/club/regist/unitPartAudit.html")
@RequiresPermissions("sys.club.clubRegist.unitPartAudit")
public void index() {
}
@At
@ViReturn
@RequiresPermissions("sys.club.clubRegist.unitPartAudit")
public Object pageData(PageForm pageForm,
@Param(value = "name", required = false) String name,
@Param(value = "year", required = false) Integer year,
@Param(value = "isAudit", required = false) Boolean isAudit) {
Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06", "xxhgly"})) {
cnd.and("u.unitId", "=", ShiroUtil.getUnitId());
}
if (isAudit == null) {
cnd.and("c.state", ">=", ClubRegistAuditState.UNIT_PART_READY);
} else if (isAudit) {
cnd.and("c.state", ">", ClubRegistAuditState.UNIT_PART_READY);
} else {
cnd.and("c.state", "=", ClubRegistAuditState.UNIT_PART_READY);
}
Pagination pagination = sysClubService.pageData(cnd, pageForm, year, name);
return pagination;
}
@At
@ViReturn
@RequiresPermissions("sys.club.clubRegist.unitPartAudit")
public Object doReview(Audit audit, String clubId, Integer pass) {
audit.setAuditor(ShiroUtil.getPlatformUid());
audit.setLoginname(ShiroUtil.getPlatformLoginname());
audit.setUsername(ShiroUtil.getPlatformUsername());
audit.setAuditTime(new Date());
audit = dao.insert(audit);
Sys_club club = dao.fetch(Sys_club.class, clubId);
if (pass == 1) {
club.setState(ClubRegistAuditState.UNIT_PART_REJECTED);
} else if (pass == 2) {
club.setState(ClubRegistAuditState.UNIT_PART_BACK_MODIFY);
} else {
club.setState(ClubRegistAuditState.XT_READY);
}
club.setUnitPartAuditId(audit.getId());
dao.updateIgnoreNull(club);
return null;
}
@At
@ViReturn
@RequiresPermissions("sys.club.clubRegist.unitPartAudit")
public Object rollback(String id) {
dao.update(Sys_club.class, Chain.make("state", ClubRegistAuditState.UNIT_PART_READY), Cnd.where("id", "=", id));
return null;
}
}
@@ -79,7 +79,7 @@ public class ClubXTAuditController {
} else if (pass == 2) {
club.setState(ClubRegistAuditState.XT_BACK_MODIFY);
} else {
club.setState(ClubRegistAuditState.XLD_READY);
club.setState(ClubRegistAuditState.XGH_READY);
}
club.setXtAuditId(audit.getId());
dao.updateIgnoreNull(club);
@@ -130,6 +130,57 @@ public enum ClubExamineToDoHandler {
);
}
},
/**
* 给二级单位发任务
*/
CREATE_UNIT_PART_TASK() {
@Override
public void exec(sys_club_examine_register examineRegister) {
//查询二级单位党委书记
Sql sqlStr = Sqls.create("""
SELECT
u.loginname
FROM
sys_user_role sur
LEFT JOIN `user` u ON u.id = sur.userid
$condition
GROUP BY
sur.userId
""");
sqlStr.setCondition(Cnd.NEW().and("sur.roleId", "=", Roles.GH03));
Sql sql = Sqls.queryString(sqlStr.toString());
dao.execute(sql);
List<String> loginNames = sql.getList(String.class);
localProcessService.createTask(
"sys_club_examine_register@" + examineRegister.getId(),
"unitPartAuditId",
"二级单位审核",
ShiroUtil.getUserId(),
loginNames,
"/platform/sys/club/examine/register/xghAudit",
"/platform/sys/club/examine/register/xghAudit",
"",
""
);
localProcessService.updateProcessNodeName("sys_club_examine_register@" + examineRegister.getId(), "二级单位审核");
}
},
/**
* 二级单位任务完成
*/
COMPLETE_UNIT_PART_TASK() {
@Override
public void exec(sys_club_examine_register examineRegister) {
Audit audit = dao.fetch(Audit.class, examineRegister.getUnitPartAuditId());
localProcessService.completeTask(
"unitPartAuditId",
"sys_club_examine_register@" + examineRegister.getId(),
ShiroUtil.getUserId(),
audit.getAuditOpinion()
);
}
},
/**
* 给校工会发任务
*/
@@ -129,6 +129,11 @@ public class Sys_club {
@Many(field = "clubId")
private List<Sys_club_sponsor> sponsors;
@Column
@Comment("二级单位党委书记审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitPartAuditId;
@Column
@Comment("宣体办公室审核记录id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -163,4 +168,9 @@ public class Sys_club {
@Comment("修改章程状态(1.待校工会审核 2.校工会审核拒绝 3.审核通过)")
@ColDefine(type = ColType.INT, width = 10)
private Integer ruleState;
@Column
@Comment("发起类型(1.基层单位申请,2.协会发起人申请)")
@ColDefine(type = ColType.INT, width = 10)
private Integer sponsorType;
}
@@ -78,7 +78,6 @@ public class sys_club_examine_register {
@ColDefine(type = ColType.MYSQL_JSON)
private List<NutMap> incomeCensus;
@Column
@Comment("审核状态")
@ColDefine(type = ColType.INT)
@@ -94,6 +93,11 @@ public class sys_club_examine_register {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String hzAuditId;
@Column
@Comment("二级单位审核意见id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unitPartAuditId;
@Column
@Comment("校工会审核意见id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -50,12 +50,15 @@ public class ClubExamineRegisterServiceImpl extends ViServiceImpl implements Clu
Audit hzAudit = dao().fetch(Audit.class, register.getHzAuditId());
map.addv("hzAudit", hzAudit);
}
if (StrUtil.isNotBlank(register.getUnitPartAuditId())) {
Audit unitPartAudit = dao().fetch(Audit.class, register.getUnitPartAuditId());
map.addv("unitPartAudit", unitPartAudit);
}
if (StrUtil.isNotBlank(register.getXghAuditId())) {
Audit xghAudit = dao().fetch(Audit.class, register.getXghAuditId());
map.addv("xghAudit", xghAudit);
}
return map;
}
@@ -11,14 +11,11 @@ import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi;
import io.v.nutz.base.service.ViService;
import io.v.nutz.base.utils.ViResource;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.sys.models.*;
import io.v.nutz.sys.services.*;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.activity.models.ActivityBasicUnit;
import io.v.nutz.zhgh.jdh.model.zzjg.Jdh_dbt;
import io.v.nutz.sys.models.SysUnionGroup;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.zhgh.jdh.model.zzjg.Jdh_dbt_zcdw;
import io.v.nutz.zhgh.workersCongress.model.workersCongressSession;
import lombok.extern.slf4j.Slf4j;
@@ -429,6 +426,7 @@ public class ViCommonCon {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
club.sponsorType,
club.id as stid,
role.userId,
club.`name`,
@@ -441,8 +439,13 @@ public class ViCommonCon {
$condition
""");
if (!ShiroUtil.hasRole("sysadmin")) {
cnd.and("role.roleId", "in", Lang.array(Roles.club01, Roles.club02, Roles.club03, Roles.club04));
cnd.and("role.userId", "=", ShiroUtil.getUserId());
if(ShiroUtil.hasRole("gh03")) {
List<Sys_user> sysUsers = dao.query(Sys_user.class, Cnd.where("unitId", "=", ShiroUtil.getUnitId()));
cnd.and("club.userId", "in", sysUsers.stream().map(Sys_user::getId).collect(Collectors.toList()));
} else {
cnd.and("role.roleId", "in", Lang.array(Roles.club01, Roles.club02, Roles.club03, Roles.club04));
cnd.and("role.userId", "=", ShiroUtil.getUserId());
}
}
cnd.and("club.isjs", "=", false);
cnd.and("club.state", "=", 930);
@@ -121,7 +121,22 @@
</el-tab-pane>
<el-tab-pane label="宣传与文体办公室审核信息" name="2" v-if="hasPane(2) && viewData.xtAuditId">
<el-tab-pane label="二级单位党委书记审核信息" name="2" v-if="hasPane(2) && viewData.unitPartAuditId">
<vi-title title="审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人员">
{{ viewData.unitPartAudit.username }}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{ viewData.unitPartAudit.auditTime }}
</el-descriptions-item>
<el-descriptions-item :span="2" label="审核意见">
{{ viewData.unitPartAudit.auditOpinion }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="校办公室主管审核信息" name="3" v-if="hasPane(3) && viewData.xtAuditId">
<vi-title title="审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人员">
@@ -136,7 +151,7 @@
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="分管副主席审核信息" name="3" v-if="hasPane(3) && viewData.xldAuditId">
<el-tab-pane label="分管副主席审核信息" name="4" v-if="hasPane(4) && viewData.xldAuditId">
<vi-title title="审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人员">
@@ -151,19 +166,22 @@
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="校工会批复信息" name="4" v-if="hasPane(3) && viewData.xghAuditId">
<vi-title title="批复信息"></vi-title>
<el-tab-pane label="校工会审核信息" name="5" v-if="hasPane(5) && viewData.xghAuditId">
<vi-title title="审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="批复人员">
<el-descriptions-item label="审核人员">
{{ viewData.xghAudit.username }}
</el-descriptions-item>
<el-descriptions-item label="批复时间">
<el-descriptions-item label="审核时间">
{{ viewData.xghAudit.auditTime }}
</el-descriptions-item>
<el-descriptions-item :span="2" label="成立时间">
<el-descriptions-item label="审核意见">
{{ viewData.xghAudit.auditOpinion }}
</el-descriptions-item>
<el-descriptions-item label="成立时间">
{{ viewData.foundTime }}
</el-descriptions-item>
<el-descriptions-item label="批复附件">
<el-descriptions-item label="审核附件">
<file-upload v-if="viewData.schoolReplyFile && viewData.schoolReplyFile.length > 0"
:files="JSON.parse(viewData.schoolReplyFile)"
:view="true"></file-upload>
@@ -131,7 +131,28 @@
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="校工会审核信息" name="6" v-if="viewData.xghAudit">
<el-tab-pane label="二级单位审核信息" name="6" v-if="viewData.unitPartAudit">
<vi-title title="二级单位审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人员">
{{ viewData.unitPartAudit.username }}({{ viewData.unitPartAudit.loginname }})
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{ viewData.unitPartAudit.auditTime }}
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="2">
{{ viewData.unitPartAudit.auditOpinion }}
</el-descriptions-item>
<el-descriptions-item label="签&emsp;&emsp;字" :span="2">
<el-image v-if="viewData.unitPartAudit.auditSign"
style="width: 300px; height: 100px"
:src="viewData.unitPartAudit.auditSign"
fit="contain"></el-image>
<span v-else>暂无</span>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="校工会审核信息" name="7" v-if="viewData.xghAudit">
<vi-title title="校工会审核信息"></vi-title>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人员">
+108 -93
View File
@@ -25,8 +25,7 @@ layout("/mobile/platform.html"){
}
.van-button--small {
border-top-right-radius: 16px;
border-bottom-left-radius: 16px;
border-radius: 6px;
height: 26px;
}
@@ -123,6 +122,18 @@ layout("/mobile/platform.html"){
padding: 7px 16px !important;
}
.more_text{
display: inline-block !important;
}
.more_text .van-field__label {
width: 100% !important;
}
.more_text .van-cell__value {
width: auto !important;
}
</style>
<div id="app" v-cloak>
@@ -234,107 +245,113 @@ layout("/mobile/platform.html"){
<van-popup v-model="infoShow" get-container="#app" position="right" :style="{ height: '100%', width: '100%' }">
<van-nav-bar
title="社团详细信息"
:title="viewType === 'view' ? '基础信息' : '信息登记'"
left-arrow
placeholder
fixed
@click-left="infoShow = false"
safe-area-inset-top></van-nav-bar>
<van-tabs v-model="infoActive">
<van-tab title="社团信息">
<van-cell-group inset>
<van-cell title="社团名称">{{ detailData.name }}</van-cell>
<van-cell title="成立时间">{{ detailData.foundtime }}</van-cell>
<van-cell title="报名联系人">{{ detailData.fzrname }}</van-cell>
<van-cell title="所属单位">{{ detailData.fzr_unit_name }}</van-cell>
<van-cell title="联系人电话">{{ detailData.concatpersonmobile }}</van-cell>
<van-cell title="联系人邮箱">{{ detailData.concatpersonemail }}</van-cell>
<van-cell title="会费标准">{{ detailData.dues_standard }}</van-cell>
<van-cell title="当前人数">{{ detailData.cynum }}</van-cell>
<van-cell title="QQ群二维码" @click="showCode('QQ')">
<span style="cursor: pointer; color: #236eb4">点击查看</span>
</van-cell>
<van-cell title="微信群二维码" @click="showCode('weChat')">
<span style="cursor: pointer; color: #236eb4">点击查看</span>
</van-cell>
</van-cell-group>
</van-tab>
<van-tab class="info_tab" v-if="viewType === 'join'" title="个人信息">
<van-form @submit="needJoin" ref="form" :show-error-message="false">
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
基础信息
</div>
<div class="van-card-body">
<van-field readonly v-model="formData.username" name="username" required
label="姓名" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.sex" name="sex" required
label="性别" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.loginname" name="loginname" required
label="工号" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.unitName" name="unitName" required
label="工作部门" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.mobile" name="mobile" required
label="电话" placeholder="请填写电话" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.QQNumber" name="QQNumber" required type="digit"
label="QQ" placeholder="请填写QQ" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.hobby" name="hobby" required
placeholder="请填写爱好" label="爱好" :rules="[{ required: true }]"></van-field>
<div v-if="viewType === 'view'" class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
基础信息
</div>
<div class="van-card-body">
<van-cell title="社团名称">{{ detailData.name }}</van-cell>
<van-cell title="成立时间">{{ detailData.foundtime }}</van-cell>
<van-cell title="报名联系人">{{ detailData.fzrname }}</van-cell>
<van-cell title="所属单位">{{ detailData.fzr_unit_name }}</van-cell>
<van-cell title="联系人电话">{{ detailData.concatpersonmobile }}</van-cell>
<van-cell title="联系人邮箱">{{ detailData.concatpersonemail }}</van-cell>
<van-cell title="会费标准">{{ detailData.dues_standard }}</van-cell>
<van-cell title="当前人数">{{ detailData.cynum }}</van-cell>
<van-cell title="QQ群二维码" @click="showCode('QQ')">
<span style="cursor: pointer; color: #236eb4">点击查看</span>
</van-cell>
<van-cell title="微信群二维码" @click="showCode('weChat')">
<span style="cursor: pointer; color: #236eb4">点击查看</span>
</van-cell>
</div>
</div>
<van-field v-model="formData.sickness" name="sickness" required @click="sicknessVisible = true" is-link
placeholder="请选择是否患有运动限制类疾病" label="是否患有运动限制类疾病" :rules="[{ required: true }]"></van-field>
</div>
</div>
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
紧急联系人(建议家人)信息
</div>
<div class="van-card-body">
<van-field v-model="formData.familyUserName" name="familyUserName" required
placeholder="请填写紧急联系人姓名" label="姓名" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.familyRelation" name="familyRelation" required
placeholder="请填写紧急联系人关系" label="与申请者关系" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.familyMobile" name="familyMobile" required type="tel"
placeholder="请填写紧急联系人电话" label="联系电话" :rules="[{ required: true }]"></van-field>
</div>
</div>
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
选填项
</div>
<div class="van-card-body">
<van-field v-model="formData.project" name="project"
rows="1"
autosize
type="textarea"
placeholder="请填写擅长项目" label="擅长项目"></van-field>
<van-form v-if="viewType === 'join'" @submit="needJoin" ref="form" :show-error-message="false">
<van-field v-model="formData.selfSkill" name="selfSkill" @click="selfSkillVisible = true" is-link
placeholder="请选择个人技能水平" label="个人技能水平"></van-field>
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
基础信息
</div>
<div class="van-card-body">
<van-field readonly v-model="formData.username" name="username" required
label="姓名" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.sex" name="sex" required
label="性别" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.loginname" name="loginname" required
label="工号" :rules="[{ required: true }]"></van-field>
<van-field readonly v-model="formData.unitName" name="unitName" required
label="工作部门" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.mobile" name="mobile" required
label="电话" placeholder="请填写电话" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.QQNumber" name="QQNumber" required type="digit"
label="QQ" placeholder="请填写QQ" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.hobby" name="hobby" required
placeholder="请填写爱好" label="爱好" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.playRole" name="playRole" @click="playRoleVisible = true" is-link
placeholder="请选择期望在协会中扮演的角色" label="期望在协会中扮演的角色"></van-field>
<van-field class="more_text" v-model="formData.sickness" name="sickness" required @click="sicknessVisible = true"
placeholder="请选择是否患有运动限制类疾病"
label="是否患有运动限制类疾病"
readonly
:rules="[{ required: true }]"></van-field>
</div>
</div>
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
紧急联系人(建议家人)信息
</div>
<div class="van-card-body">
<van-field v-model="formData.familyUserName" name="familyUserName" required
placeholder="请填写紧急联系人姓名" label="姓名" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.familyRelation" name="familyRelation" required
placeholder="请填写紧急联系人关系" label="与申请者关系" :rules="[{ required: true }]"></van-field>
<van-field v-model="formData.familyMobile" name="familyMobile" required type="tel"
placeholder="请填写紧急联系人电话" label="联系电话" :rules="[{ required: true }]"></van-field>
</div>
</div>
<div class="van-doc-card" style="margin-bottom: 16px; box-shadow: 0 0 16px 0 #ebedf0; margin-top: 10px">
<div></div>
<div class="van-card-header">
选填项
</div>
<div class="van-card-body">
<van-field v-model="formData.project" name="project"
rows="1"
autosize
type="textarea"
placeholder="请填写擅长项目" label="擅长项目"></van-field>
<van-field v-model="formData.provideServices" name="provideServices" @click="provideServicesVisible = true" is-link
placeholder="请选择是否愿意为协会提供志愿服务" label="是否愿意为协会提供志愿服务"></van-field>
<van-field v-model="formData.selfSkill" name="selfSkill" @click="selfSkillVisible = true"
readonly placeholder="请选择个人技能水平" label="个人技能水平"></van-field>
<van-field v-model="formData.joinManageWork" name="joinManageWork" @click="joinManageWorkVisible = true" is-link
placeholder="请选择是否愿意参与协会的管理工作" label="是否愿意参与协会的管理工作"></van-field>
<van-field v-model="formData.playRole" name="playRole" @click="playRoleVisible = true" class="more_text"
readonly placeholder="请选择期望在协会中扮演的角色" label="期望在协会中扮演的角色"></van-field>
<van-field v-model="formData.provideServices" name="provideServices" @click="provideServicesVisible = true" class="more_text"
readonly placeholder="请选择是否愿意为协会提供志愿服务" label="是否愿意为协会提供志愿服务"></van-field>
<van-field v-model="formData.joinManageWork" name="joinManageWork" @click="joinManageWorkVisible = true" class="more_text"
readonly placeholder="请选择是否愿意参与协会的管理工作" label="是否愿意参与协会的管理工作"></van-field>
<van-field v-model="formData.giveHelp" name="giveHelp" @click="giveHelpVisible = true" class="more_text"
readonly placeholder="请选择是否愿意为协会的活动提供赞助或资源支持" label="是否愿意为协会的活动提供赞助或资源支持"></van-field>
</div>
</div>
<div class="footer">
<van-button class="join join_submit" native-type="submit">申请加入</van-button>
</div>
</van-form>
<van-field v-model="formData.giveHelp" name="giveHelp" @click="giveHelpVisible = true" is-link
placeholder="请选择是否愿意为协会的活动提供赞助或资源支持" label="是否愿意为协会的活动提供赞助或资源支持"></van-field>
</div>
</div>
<div class="footer">
<van-button class="join join_submit" native-type="submit">申请加入</van-button>
</div>
</van-form>
</van-tab>
</van-tabs>
</van-popup>
<van-popup position="bottom" round v-model="sicknessVisible">
@@ -394,7 +411,6 @@ layout("/mobile/platform.html"){
data() {
return {
showPicker: false,
infoActive: 0,
clickRow: {},
typeOptions: [],
clubType: [{text: '未加入', value: false}, {text: '已加入', value: true}],
@@ -441,7 +457,6 @@ layout("/mobile/platform.html"){
},
openInfo(row, type) {
this.viewType = type
this.infoActive = type === 'view' ? 0 : 1
if(type === 'join') {
this.formData = {
username: "${@shiro.getPrincipalProperty('username')}",
@@ -61,13 +61,16 @@ layout("/layouts/platform.html"){
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看
<el-button size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===5090">审核
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="[5093,5095,6010].includes(row.auditId)">撤回
v-if="row.sponsorType == 1 && [5093,5095,6007].includes(row.auditId)">撤回
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="row.sponsorType == 2 && [5093,5095,6010].includes(row.auditId)">撤回
</el-button>
</template>
</el-table-column>
@@ -53,11 +53,11 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="300">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary" v-if="[5070,5083,5093,6013].includes(row.auditId)">编辑</el-button>
<el-button size="mini" @click="openView(row)" type="primary">查看</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary" v-if="[5070,5083,5093,6013,6008].includes(row.auditId)">编辑</el-button>
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="${@shiro.hasRole('sysadmin')}">删除</el-button>
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="row.auditId===5080&&${!@shiro.hasRole('sysadmin')}">删除</el-button>
<el-button plain size="mini" @click="doExport(row)" v-if="row.auditId===6020">导出</el-button>
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="row.auditId===5070&&${!@shiro.hasRole('sysadmin')}">删除</el-button>
<el-button size="mini" @click="doExport(row)" v-if="row.auditId===6020">导出</el-button>
</template>
</el-table-column>
</el-table>
@@ -0,0 +1,231 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-date-picker
v-model="pageForm.year"
type="year"
@change="doSearch"
value-format="yyyy" style="width: 100%"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable
clearable
@change="doSearch"
style="width: 100%">
<el-option
v-for="item in clubOptions"
:key="item.stid"
:label="item.name"
:value="item.stid">
</el-option>
</el-select>
</div>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<table-tool label="登记列表" :app="this">
<template #func>
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
v-model="pageForm.flag">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize"
v-loading="tableLoading" ref="table" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:sortable="column.sortable"
:label="column.label"
:prop="column.prop" :width="column.width" min-width="100px">
<template v-if="column.prop=='year'" scope="{row}">
{{moment(row.registerDate).format('YYYY')}}
</template>
<template v-else-if="column.prop=='auditId'" scope="{row}">
<vi-table-state :state="row"></vi-table-state>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200">
<template scope="{row}">
<el-button size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===6007">审核
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="[6008,6009,6010].includes(row.auditId)">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-register-info ref="info"></club-register-info>
</template>
<template #edit>
<club-register-info ref="edit" label="审核" handle>
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<vi-title title="审核信息"></vi-title>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<el-form-item prop="auditSign" label="签&emsp;&emsp;字">
<sign :qz.sync="formData.auditSign"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-register-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
flag: false,
year: new Date().getFullYear() + ""
},
clubOptions: [],
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '社团名称'},
{prop: 'foundTime', label: '成立时间'},
{prop: 'username', label: '联系人', sortable: true},
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
{prop: 'registerDate', label: '登记时间'},
{prop: 'auditId', label: '登记状态', sortable: true},
]
}
},
components: {
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
},
methods: {
openView(row) {
this.$refs.info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.$refs.edit.getInfo(row.id)
this.$refs.guava.edit()
},
async doReview(flag) {
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
this.formData.flag = flag
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(resp.msg)
}
}
},
async doRecall(row) {
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + '/doRecall', {
id: row.id
})
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
}
}
}
},
async created() {
this.clubOptions = await getClubsByRole()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -77,7 +77,7 @@ layout("/layouts/platform.html"){
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看
<el-button size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===6010">审核
@@ -74,7 +74,8 @@ layout("/layouts/platform.html"){
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button :disabled="![800,820,850,880].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="row.sponsorType == 1" :disabled="[810, 840, 870, 900, 930].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="row.sponsorType == 2" :disabled="[840, 870, 900, 930].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="${@shiro.hasRole('sysadmin')} || ${@shiro.hasRole('A06')} || ${@shiro.hasRole('xxhgly')}"
@click="deleteDo(row)" size="mini" type="danger">删除</el-button>
<el-button v-else :disabled="![800,820,850,880].includes(row.state)" @click="deleteDo(row)" size="mini" type="danger">删除</el-button>
@@ -28,6 +28,16 @@ layout("/layouts/platform.html"){
<div v-show="activeName === '1'">
<vi-title title="请填写以下社团信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-width="150px" style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="发起类型" prop="sponsorType">
<el-radio-group v-model="formData.sponsorType">
<el-radio-button :label="1">基层单位申请</el-radio-button>
<el-radio-button :label="2">协会发起人申请</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="社团名称" prop="name">
@@ -105,11 +115,11 @@ layout("/layouts/platform.html"){
</el-row>
<el-form-item label="社团介绍" prop="stjs">
<div id="stjsEditor"></div>
<text-editor v-model="formData.stjs"></text-editor>
</el-form-item>
<el-form-item label="社团宗旨" prop="stzz">
<div id="stzzEditor"></div>
<text-editor v-model="formData.stzz"></text-editor>
</el-form-item>
<el-row gutter="30">
@@ -286,8 +296,6 @@ layout("/layouts/platform.html"){
</div>
<script>
const E = window.wangEditor
let stjsEditor, stzzEditor = null
const vue = new Vue({
el: '#app',
@@ -298,18 +306,18 @@ layout("/layouts/platform.html"){
{},
{},
{},
{},
{},
],
activeName: '1',
formData: {
name: ''
name: '',
sponsorType: 1,
},
formRules: {
name: [{required: true, message: '请填写社团名称', trigger: ['blur', 'change']}],
code: [{required: true, message: '请填写社团编码', trigger: ['blur', 'change']}],
type: [{required: true, message: '请选择社团类型', trigger: ['blur', 'change']}],
fzr: [{required: true, message: '请选择社团联系人', trigger: ['blur', 'change']}],
sponsorType: [{required: true, message: '请选择发起类型', trigger: ['blur', 'change']}],
},
typeOptions: [],
userLoading: false,
@@ -415,22 +423,10 @@ layout("/layouts/platform.html"){
},
async initData() {
const id = GetQueryString("id")
$("#stjsEditor").html("")
$("#stzzEditor").html("")
this.$nextTick(() => {
stjsEditor = new E("#stjsEditor")
stjsEditor.config.onchange = (html) => {
this.formData.stjs = html
}
stjsEditor.create()
stzzEditor = new E("#stzzEditor")
stzzEditor.config.onchange = (html) => {
this.formData.stzz = html
}
stzzEditor.create()
})
this.formData = {}
this.formData = {
name: '',
sponsorType: 1,
}
if (this.$refs["form"])
this.$refs["form"].resetFields()
@@ -482,8 +478,6 @@ layout("/layouts/platform.html"){
this.sponsorData.push(row)
})
}
stjsEditor.txt.html(resp.data.stjs ? resp.data.stjs : '')
stzzEditor.txt.html(resp.data.stzz ? resp.data.stzz : '')
} else {
await this.getClubCode()
}
@@ -505,17 +499,17 @@ layout("/layouts/platform.html"){
if (!valid) return
let hz = this.managePerson.filter(o => o.sf === 1)
if(hz.length > 1) {
this.$notify.warning({title: '警告', message: '会长只能有1人'})
this.$message.warning('会长只能有1人')
return
}
let msz = this.managePerson.filter(o => o.sf === 4)
if(msz.length > 1) {
this.$notify.warning({title: '警告', message: '秘书长只能有1人'})
this.$message.warning('秘书长只能有1人')
return
}
this.formData.sponsor = this.sponsorData.filter(o => o.userId !== '' && o.userId !== undefined).map(o => o.userId)
if(!flag && this.formData.sponsor && this.formData.sponsor.length < 5) {
this.$notify.warning({title: '警告', message: '发起人要求不少于5人!'})
if(!flag && this.formData.sponsor && this.formData.sponsor.length < 3) {
this.$message.warning('发起人要求不少于3人')
return
}
let manageValid = false
@@ -526,7 +520,7 @@ layout("/layouts/platform.html"){
}
})
if (!flag && (this.managePerson.length === 0 || manageValid)) {
this.$notify.warning({title: '警告', message: '请填写理事机构信息'})
this.$message.warning('请填写理事机构信息')
return
}
const cloneData = clone(this.formData)
@@ -559,7 +553,7 @@ layout("/layouts/platform.html"){
});
}
} catch (e) {
this.$notify.warning({title: '警告', message: '存在必填项未填写'})
this.$message.warning('存在必填项未填写')
}
},
async getClubCode() {
@@ -0,0 +1,229 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[801].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[802, 803, 810].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="二级单位党委书记审核" :panes="[2]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="审核人员">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/unitPartAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/unitPartAudit/doReview', this.formData)
if(resp.code === 0) {
this.$message.success(resp.msg)
await this.pageData()
this.$refs['guava'].index()
} else {
this.$message.warning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/unitPartAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message.warning(resp.msg)
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -44,8 +44,8 @@ layout("/layouts/platform.html"){
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">批复</el-radio-button>
<el-radio-button :label="false">批复</el-radio-button>
<el-radio-button :label="true">审核</el-radio-button>
<el-radio-button :label="false">审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
@@ -77,7 +77,7 @@ layout("/layouts/platform.html"){
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[870].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">批复</el-button>
<el-button v-if="[870].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[880, 890, 900].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
@@ -86,32 +86,33 @@ layout("/layouts/platform.html"){
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="校工会批复" :panes="[2, 3, 4]">
<club-regist-info ref="info2" :handle="true" label="校工会审核" :panes="[2, 3, 4]">
<template #handle>
<vi-title title="批复信息"></vi-title>
<vi-title title="审核信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="批复人员">
<el-form-item prop="userName" label="审核人员">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="批复时间">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<!--<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>-->
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="text" v-model="formData.auditOpinion" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="foundTime" label="成立时间">
<el-date-picker
@@ -123,16 +124,14 @@ layout("/layouts/platform.html"){
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="schoolReplyFile" label="批复附件">
<file-upload :files.sync="formData.schoolReplyFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传批复附件,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="schoolReplyFile" label="审核附件">
<file-upload :files.sync="formData.schoolReplyFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传审核附件,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-form>
@@ -86,7 +86,7 @@ layout("/layouts/platform.html"){
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="宣传与文体办公室审核" :panes="[2]">
<club-regist-info ref="info2" :handle="true" label="办公室主管审核" :panes="[2, 3]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"