This commit is contained in:
@jyuhsin
2025-09-10 14:34:15 +08:00
parent ab6323a7de
commit 56b7d3628c
38 changed files with 2111 additions and 1831 deletions
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
@@ -63,14 +64,19 @@ public class ClubUserJoinApplyController {
@Inject
private FlowCommonService flowCommonService;
@At("")
@SaCheckPermission("club.join.apply")
@At("/")
@SaCheckPermission("club.join.apply")
@Ok("beetl:/platform/zhgh/club/join/apply/index.html")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.club.join.apply")
@Ok("beetl:/platform/zhghh5/club/apply/index.html")
public void h5Index() {}
@At
@ApiOperation("详情")
@SaCheckPermission("club.join.apply")
@SaCheckPermission(value = {"club.join.apply", "h5.club.join.apply"}, mode = SaMode.OR)
public Result info(@Valid String id) {
Sql sql = Sqls.create("""
SELECT
@@ -97,7 +103,7 @@ public class ClubUserJoinApplyController {
@At
@ApiOperation("保存申请")
@SaCheckPermission("condolence.apply")
@SaCheckPermission(value = {"club.join.apply", "h5.club.join.apply"}, mode = SaMode.OR)
@SLog(tag = "协会管理系统-申请入会", msg = "保存协会入会")
public Result save(@Param("data") ClubUserApply clubUserApply) {
clubUserApply.setRoleCode(RoleConstant.CLUB_MEMBER.name());
@@ -109,7 +115,7 @@ public class ClubUserJoinApplyController {
@At
@ApiOperation("提交")
@SaCheckPermission("club.join.apply")
@SaCheckPermission(value = {"club.join.apply", "h5.club.join.apply"}, mode = SaMode.OR)
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "协会管理系统-申请入会", msg = "申请协会入会")
public Result submit(ClubUserApply clubUserApply) {
@@ -144,7 +150,7 @@ public class ClubUserJoinApplyController {
@At
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("club.join.apply")
@SaCheckPermission(value = {"club.join.apply", "h5.club.join.apply"}, mode = SaMode.OR)
public Result submitAgain(@Param("data") ClubUserApply clubUserApply, @Param("taskId") Long taskId) {
dao.insertOrUpdate(clubUserApply);
@@ -158,7 +164,7 @@ public class ClubUserJoinApplyController {
@At
@ApiOperation("校验是否申请过协会")
@SaCheckPermission("club.join.apply")
@SaCheckPermission(value = {"club.join.apply", "h5.club.join.apply"}, mode = SaMode.OR)
public Result checkApplyClub(@Valid String clubId) {
ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("clubId", "=", clubId).and("mode", "=", 1).desc(ClubUserApply::getApplyDate));
ClubUser clubUser = dao.fetch(ClubUser.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("clubId", "=", clubId));
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
@@ -23,6 +24,7 @@ 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.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
@@ -46,13 +48,18 @@ public class ClubUserJoinApprovalController {
@Inject
private ClubUserJoinService clubUserJoinService;
@At("")
@At("/")
@SaCheckPermission("club.join.clubApproval")
@Ok("beetl:/platform/zhgh/club/join/clubApproval/index.html")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.club.join.clubApproval")
@Ok("beetl:/platform/zhghh5/club/clubApproval/index.html")
public void h5Index() {}
@At
@SaCheckPermission("club.join.clubApproval")
@SaCheckPermission(value = {"club.join.clubApproval", "h5.club.join.clubApproval"}, mode = SaMode.OR)
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval) {
Sql sql = Sqls.create("""
SELECT
@@ -96,11 +103,16 @@ public class ClubUserJoinApprovalController {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
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());
if (StrUtil.isAllNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.userName", pageForm.getSearchKeyword());
seg.orLike("u.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
@@ -43,13 +44,18 @@ public class ClubUserJoinMineController {
@Inject
private ClubUserJoinService clubUserJoinService;
@At("")
@At("/")
@SaCheckPermission("club.join.mine")
@Ok("beetl:/platform/zhgh/club/join/mine/index.html")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.club.join.mine")
@Ok("beetl:/platform/zhghh5/club/mine/index.html")
public void h5Index() {}
@At
@SaCheckPermission("club.join.mine")
@SaCheckPermission(value = {"club.join.mine", "h5.club.join.mine"}, mode = SaMode.OR)
public Result pageData(@Valid PageForm pageForm,
@Param("year") Integer year){
Sql sql = Sqls.create("""
@@ -94,7 +100,7 @@ public class ClubUserJoinMineController {
}
@At
@SaCheckPermission("club.join.apply")
@SaCheckPermission(value = {"club.join.mine", "h5.club.join.mine"}, mode = SaMode.OR)
@ApiOperation("删除")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "协会管理系统-申请入会-我的申请", msg = "删除协会入会")
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
@@ -28,6 +29,7 @@ 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.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
@@ -52,13 +54,18 @@ public class ClubUserJoinSchoolApprovalController {
@Inject
private Dao dao;
@At("")
@At("/")
@SaCheckPermission("club.join.schoolUnionApproval")
@Ok("beetl:/platform/zhgh/club/join/schoolUnionApproval/index.html")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.club.join.schoolUnionApproval")
@Ok("beetl:/platform/zhghh5/club/schoolUnionApproval/index.html")
public void h5Index() {}
@At
@SaCheckPermission("club.join.schoolUnionApproval")
@SaCheckPermission(value = {"club.join.schoolUnionApproval", "h5.club.join.schoolUnionApproval"}, mode = SaMode.OR)
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval) {
Sql sql = Sqls.create("""
SELECT
@@ -102,11 +109,16 @@ public class ClubUserJoinSchoolApprovalController {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
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());
if (StrUtil.isAllNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("u.userName", pageForm.getSearchKeyword());
seg.orLike("u.loginName", pageForm.getSearchKeyword());
cnd.and(seg);
}
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
@@ -1,21 +0,0 @@
package com.budwk.app.zhgh.club.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@At("/platform/h5/club/apply")
@Ok("json:full")
@Api("h5申请入会")
public class H5ClubApplyController {
@At("")
@Ok("beetl:/platform/zhghh5/club/apply/index.html")
@SaCheckPermission("h5.club.apply")
public void index() {
}
}
@@ -1,21 +0,0 @@
package com.budwk.app.zhgh.club.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@At("/platform/h5/club/audit")
@Ok("json:full")
@Api("h5入会审核")
public class H5ClubAuditController {
@At("")
@Ok("beetl:/platform/zhghh5/club/audit/index.html")
@SaCheckPermission("h5.club.audit")
public void index() {
}
}
@@ -1,27 +0,0 @@
package com.budwk.app.zhgh.club.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @ClassName H5ClubMineController
* @Author JyuHsin
* @Date 2025/7/2 19:19
* @Version 1.0
* @Description TODO
*/
@IocBean
@At("/platform/h5/club/mine")
@Ok("json:full")
@Api("h5申请入会")
public class H5ClubMineController {
@At("")
@Ok("beetl:/platform/zhghh5/club/mine/index.html")
@SaCheckPermission("h5.club.mine")
public void index() {
}
}
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.dayofficework.site.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
@@ -76,14 +77,19 @@ public class SiteApplyController {
@Inject
private FlowCommonService flowCommonService;
@At("")
@At("/")
@SaCheckPermission("site.apply")
@Ok("beetl:/platform/zhgh/dayofficework/site/apply/index.html")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.site.apply")
@Ok("beetl:/platform/zhghh5/dayofficework/site/apply/index.html")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("site.apply")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("type") String type) {
@@ -116,7 +122,7 @@ public class SiteApplyController {
@At
@ApiOperation("新增/修改场地预约")
@SaCheckPermission("site.apply")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
@SLog(tag = "场地管理-场地预约", msg = "新增/修改场地预约")
public Result submit(@Param("data") SiteApply siteApply, @Param("days") String[] days) {
Map<Boolean, String> validate = applyService.validateApply(siteApply, days[0]);
@@ -143,7 +149,7 @@ public class SiteApplyController {
@At
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("site.apply")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
public Result submitAgain(@Param("data") SiteApply siteApply,
@Param("days") String[] days,
@Param("taskId") String taskId) {
@@ -163,7 +169,7 @@ public class SiteApplyController {
@At
@ApiOperation("查询可以预约的日期")
@SaCheckPermission("site.apply")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
public Result queryAllowTime(String siteId, String startTime, String endTime) {
if(StrUtil.isBlank(siteId)) {
return Result.success(new ArrayList<>());
@@ -203,7 +209,7 @@ public class SiteApplyController {
@At
@ApiOperation("查询可以预约的时间")
@SaCheckPermission("site.apply")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
public Result queryTimesByDay(String siteId, String day) {
//获取场地
SiteInfo siteInfo = infoService.fetch(siteId);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.dayofficework.site.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
@@ -51,14 +52,19 @@ public class SiteMineController {
@Inject
private SiteApplyService applyService;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/dayofficework/site/mine/index.html")
@SaCheckLogin
@SaCheckPermission("site.mine")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhgh/dayofficework/site/mine/index.html")
@SaCheckPermission("h5.site.mine")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("site.mine")
@SaCheckPermission(value = {"site.mine", "h5.site.mine"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("siteType") String siteType,
@@ -117,7 +123,7 @@ public class SiteMineController {
@At
@ApiOperation("删除")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("site.mine")
@SaCheckPermission("site")
@SLog(tag = "场地管理-场地预约", msg = "删除场地预约")
public Result delete(@Param("id") String id) {
applyService.delete(id);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.dayofficework.site.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
@@ -42,14 +43,19 @@ public class SiteSchoolUnionAuditController {
@Inject
private SiteApplyService applyService;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/dayofficework/site/schoolUnionAudit/index.html")
@SaCheckLogin
@SaCheckPermission("site.schoolUnionAudit")
public void index() {}
@At("/h5")
@SaCheckPermission("h5.site.schoolUnionAudit")
@Ok("beetl:/platform/zhghh5/dayofficework/site/schoolUnionAudit/index.html")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("site.schoolUnionAudit")
@SaCheckPermission(value = {"site.schoolUnionAudit", "h5.site.schoolUnionAudit"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param("year") Integer year,
@Param("siteType") String siteType,
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffbenefit.condolence.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
@@ -60,14 +61,19 @@ public class CondolenceApplyController {
@Inject
private FlowCommonService flowCommonService;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/apply/index.html")
@SaCheckLogin
@SaCheckPermission("condolence.apply")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/apply/index.html")
@SaCheckPermission("h5.condolence.apply")
public void h5Index() {}
@At
@ApiOperation("保存申请")
@SaCheckPermission("condolence.apply")
@SaCheckPermission(value = {"condolence.apply", "h5.condolence.apply"}, mode = SaMode.OR)
@SLog(tag = "职工慰问系统-慰问申请", msg = "保存申请")
public Result save(@Param("data") Condolence condolence) {
if(StrUtil.isBlank(condolence.getId())) condolence.setCreateTime(DateUtil.now());
@@ -77,7 +83,7 @@ public class CondolenceApplyController {
@At
@ApiOperation("提交申请")
@SaCheckPermission("condolence.apply")
@SaCheckPermission(value = {"condolence.apply", "h5.condolence.apply"}, mode = SaMode.OR)
@SLog(tag = "职工慰问系统-慰问申请", msg = "提交申请")
public Result submit(@Param("data") Condolence condolence) {
if(StrUtil.isBlank(condolence.getId())) condolence.setCreateTime(DateUtil.now());
@@ -99,7 +105,7 @@ public class CondolenceApplyController {
@At
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("condolence.apply")
@SaCheckPermission(value = {"condolence.apply", "h5.condolence.apply"}, mode = SaMode.OR)
public Result submitAgain(@Param("data") Condolence condolence, @Param("taskId") Long taskId) {
dao.insertOrUpdate(condolence);
@@ -112,7 +118,7 @@ public class CondolenceApplyController {
@At
@ApiOperation("查询用户")
@SaCheckPermission("condolence.apply")
@SaCheckPermission(value = {"condolence.apply", "h5.condolence.apply"}, mode = SaMode.OR)
public Object listUser(String keyword) {
Sql sql = Sqls.create("""
select
@@ -1,7 +1,7 @@
package com.budwk.app.zhgh.staffbenefit.condolence.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
@@ -9,12 +9,14 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence;
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
@@ -40,14 +42,19 @@ public class CondolenceBranchUnionApprovalController {
@Inject
private CondolenceService condolenceService;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/branchUnionApproval/index.html")
@SaCheckLogin
@SaCheckPermission("condolence.branchUnionApproval")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/branchUnionApproval/index.html")
@SaCheckPermission("h5.condolence.branchUnionApproval")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("condolence.branchUnionApproval")
@SaCheckPermission(value = {"condolence.branchUnionApproval", "h5.condolence.branchUnionApproval"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type,
@@ -83,6 +90,12 @@ public class CondolenceBranchUnionApprovalController {
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or(Condolence::getHelpUserName, "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or(Condolence::getHelpLoginName, "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("info.type", "=", type);
cnd.andEX("YEAR(info.createTime)", "=", year);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffbenefit.condolence.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
@@ -50,14 +51,19 @@ public class CondolenceMineController {
@Inject
private FlowEngine flowEngine;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/mine/index.html")
@SaCheckLogin
@SaCheckPermission("condolence.mine")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/mine/index.html")
@SaCheckPermission("h5.condolence.mine")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("condolence.mine")
@SaCheckPermission(value = {"condolence.mine", "h5.condolence.mine"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type) {
@@ -114,7 +120,7 @@ public class CondolenceMineController {
@At
@ApiOperation("删除")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("condolence")
@SaCheckPermission(value = {"condolence.mine", "h5.condolence.mine"}, mode = SaMode.OR)
@SLog(tag = "职工慰问系统-我的申请", msg = "删除职工慰问")
public Result delete(@Param("id") String id) {
condolenceService.delete(id);
@@ -124,7 +130,7 @@ public class CondolenceMineController {
@At
@ApiOperation("查询单个慰问申请信息")
@SaCheckPermission("condolence.mine")
@SaCheckPermission("condolence")
public Result info(String id) {
Condolence condolence = condolenceService.fetch(id);
CondolenceType type = condolenceService.dao().fetch(CondolenceType.class, Cnd.where(CondolenceType::getId, "=", condolence.getType()));
@@ -1,7 +1,7 @@
package com.budwk.app.zhgh.staffbenefit.condolence.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
@@ -9,12 +9,14 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence;
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
@@ -40,14 +42,19 @@ public class CondolenceSchoolUnionApprovalController {
@Inject
private CondolenceService condolenceService;
@At("")
@At("/")
@Ok("beetl:/platform/zhgh/staffbenefit/condolence/schoolUnionApproval/index.html")
@SaCheckLogin
@SaCheckPermission("condolence.schoolUnionApproval")
public void index() {}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffbenefit/condolence/schoolUnionApproval/index.html")
@SaCheckPermission("h5.condolence.schoolUnionApproval")
public void h5Index() {}
@At
@ApiOperation("分页查询")
@SaCheckPermission("condolence.schoolUnionApproval")
@SaCheckPermission(value = {"condolence.schoolUnionApproval", "h5.condolence.schoolUnionApproval"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year,
@Param(value = "type") String type,
@@ -85,6 +92,12 @@ public class CondolenceSchoolUnionApprovalController {
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or(Condolence::getHelpUserName, "like", "%" + pageForm.getSearchKeyword() + "%");
seg.or(Condolence::getHelpLoginName, "like", "%" + pageForm.getSearchKeyword() + "%");
cnd.and(seg);
}
cnd.andEX("info.type", "=", type);
cnd.andEX("YEAR(info.createTime)", "=", year);
cnd.andEX("info.applyUnionId", "=", unionId);
@@ -17,7 +17,7 @@ html, body, #app {
}
body {
background-color: #f1f1f1;
background-color: #f7f8fa;
overflow-x: hidden;
font-size: 16px
}
@@ -297,3 +297,7 @@ body {
flex-direction: column;
}
.detail-container .direction-column-cell .van-cell__value{
text-align: left;
}
@@ -212,7 +212,7 @@ layout("/layouts/platform.html"){
checkApplyClub(val) {
this.$axios.post("/platform/club/join/apply/checkApplyClub", { clubId: val }).then((res) => {
if (res.code !== 0) {
this.$message.warning("您已申请加入该协会,请勿重复申请")
this.$message.warning(res.msg)
this.formData.clubId = ""
}
})
@@ -243,7 +243,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, "unionId", user.union ? user.union.id : null)
this.$set(this.formData, "unionName", user.union ? user.union.name : null)
this.$set(this.formData, "sex", user.sex)
this.$set(this.formData, "birthday", user.birthday ? this.$moment(user.birthday).format('yyyy-MM-dd') : '')
this.$set(this.formData, "birthday", user.birthday ? this.$moment(user.birthday).format('YYYY-MM-DD') : '')
this.$set(this.formData, "nation", user.nation)
this.$set(this.formData, "political", user.political)
this.$set(this.formData, "education", user.education)
@@ -16,11 +16,8 @@ layout("/layouts/platform.html"){
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名">
<el-input placeholder="请输入姓名查询" clearable v-model="pageForm.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
<search-item label="关键字">
<el-input clearable placeholder="请输入姓名或者工号查询" v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会:">
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable style="width: 100%">
@@ -16,11 +16,8 @@ layout("/layouts/platform.html"){
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名">
<el-input placeholder="请输入姓名查询" clearable v-model="pageForm.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
<search-item label="关键字">
<el-input clearable placeholder="请输入姓名或者工号查询" v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会:">
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable style="width: 100%">
@@ -3,7 +3,19 @@ layout("/layouts/platform.html"){
#-->
<style>
.div-Calendar {
box-sizing: border-box;
height: 100%;
}
.div-Calendar p {
margin: 0;
}
.el-calendar-day:has(.not-allow-day) {
background-color: #F5F5F5;
}
.el-dialog__body {
padding-top: 0;
}
</style>
<div id="app" v-cloak>
@@ -3,359 +3,364 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<snaker-start slot="header" label="职工慰问" define_key="ZGWW"></snaker-start>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix="" class="flow-task-form">
<el-descriptions :column="2" border>
<el-descriptions-item label="申请人姓名">{{formData.applyUserName}}</el-descriptions-item>
<el-descriptions-item label="申请人工号">{{formData.applyLoginName}}</el-descriptions-item>
<el-descriptions-item label="申请人单位">{{formData.applyUnitName}}</el-descriptions-item>
<el-descriptions-item label="申请人工会">{{formData.applyUnionName}}</el-descriptions-item>
<el-card shadow="never">
<snaker-start slot="header" label="职工慰问" define_key="ZGWW"></snaker-start>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-descriptions :column="2" border>
<el-descriptions-item label="申请人姓名">{{formData.applyUserName}}</el-descriptions-item>
<el-descriptions-item label="申请人工号">{{formData.applyLoginName}}</el-descriptions-item>
<el-descriptions-item label="申请人单位">{{formData.applyUnitName}}</el-descriptions-item>
<el-descriptions-item label="申请人工会">{{formData.applyUnionName}}</el-descriptions-item>
<el-descriptions-item label="慰问对象">
<el-form-item prop="helpUserId" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.helpUserId"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod(helpUserOptions)"
@change="helpUserChange">
<el-option
v-for="item in helpUserOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''+''+item.sex+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="收款人">
<el-form-item prop="payUserId" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.payUserId"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod(payUserOptions)"
@change="payUserChange">
<el-option
v-for="item in payUserOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''+''+item.sex+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问类型">
<el-select v-model="formData.type" @change="typeChange" style="width: 100%"
placeholder="请选择慰问类型">
<el-option v-for="item in typeOptions"
:value="item.id"
:key="item.id"
:disabled="!item.enable"
:label="item.name"></el-option>
</el-select>
</el-descriptions-item>
<el-descriptions-item label="慰问方式">
<el-form-item prop="way" label="慰问方式">
<el-select v-model="formData.way"
placeholder="选择慰问类型自动匹配慰问方式"
style="width: 100%"
clearable
disabled>
<el-option label="慰问金 (A)" value="1"></el-option>
<el-option label="提货券 (B)" value="2"></el-option>
<el-option label="慰问品 (C)" value="3"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问金额">
<el-form-item prop="money" label="慰问金额">
<el-input style="width: 100%" v-model="formData.money"
controls-position="right"
:controls="false"
precision="2"
placeholder="选择慰问类型自动匹配金额"
:min="0"
:max="10000"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问时间">
<el-form-item label="慰问时间" prop="occurTime">
<el-date-picker
clearable
style="width: 100%"
v-model="formData.occurTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择慰问时间">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问对象">
<el-form-item prop="helpUserId" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.helpUserId"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod(helpUserOptions)"
@change="helpUserChange">
<el-option
v-for="item in helpUserOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''+''+item.sex+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="收款人">
<el-form-item prop="payUserId" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.payUserId"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod(payUserOptions)"
@change="payUserChange">
<el-option
v-for="item in payUserOptions"
:key="item.id"
:label="item.userName+''+item.loginName+''+''+item.unitName+''+''+item.sex+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问类型">
<el-select v-model="formData.type" @change="typeChange" style="width: 100%"
placeholder="请选择慰问类型">
<el-option v-for="item in typeOptions"
:value="item.id"
:key="item.id"
:disabled="!item.enable"
:label="item.name"></el-option>
</el-select>
</el-descriptions-item>
<el-descriptions-item label="慰问方式">
<el-form-item prop="way" label="慰问方式">
<el-select v-model="formData.way"
placeholder="选择慰问类型自动匹配慰问方式"
style="width: 100%"
clearable
disabled>
<el-option label="慰问金 (A)" value="1"></el-option>
<el-option label="提货券 (B)" value="2"></el-option>
<el-option label="慰问品 (C)" value="3"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问金额">
<el-form-item prop="money" label="慰问金额">
<el-input style="width: 100%" v-model="formData.money"
controls-position="right"
:controls="false"
precision="2"
placeholder="选择慰问类型自动匹配金额"
:min="0"
:max="10000"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="慰问时间">
<el-form-item label="慰问时间" prop="occurTime">
<el-date-picker
clearable
style="width: 100%"
v-model="formData.occurTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择慰问时间">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<template v-if="['2'].includes(formData.type)">
<el-descriptions-item label="孩次">
<el-form-item prop="child" label="孩次">
<el-select v-model="formData.child" placeholder="请选择孩次"
style="width: 100%"
clearable>
<el-option label="一孩" value="一孩"></el-option>
<el-option label="二孩" value="二孩"></el-option>
<el-option label="三孩" value="三孩"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['3','4'].includes(formData.type)">
<el-descriptions-item label="治疗医院">
<el-form-item prop="hospital" label="治疗医院">
<el-input v-model="formData.hospital" maxlength="50" placeholder="请填写治疗医院"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="病房号">
<el-form-item prop="hospitalHouseNum" label="病房号">
<el-input v-model="formData.hospitalHouseNum" maxlength="50" placeholder="请填写病房号" type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="床号">
<el-form-item prop="hospitalHouseBedNum" label="床号">
<el-input v-model="formData.hospitalHouseBedNum" maxlength="50" placeholder="请填写床号" type="number"></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['4'].includes(formData.type)">
<el-descriptions-item label="患病病种">
<el-form-item prop="hospitalBy" label="患病病种">
<el-input v-model="formData.hospitalBy" maxlength="50" placeholder="请填写患病病种"></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['6'].includes(formData.type)">
<el-descriptions-item label="直系亲属">
<el-form-item prop="deadImmediateFamily" label="直系亲属">
<el-select v-model="formData.deadImmediateFamily">
<el-option label="配偶" value="配偶"></el-option>
<el-option label="父亲" value="父亲"></el-option>
<el-option label="母亲" value="母亲"></el-option>
<el-option label="子女" value="子女"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['2'].includes(formData.type)">
<el-descriptions-item label="孩次">
<el-form-item prop="child" label="孩次">
<el-select v-model="formData.child" placeholder="请选择孩次"
style="width: 100%"
clearable>
<el-option label="一孩" value="一孩"></el-option>
<el-option label="二孩" value="二孩"></el-option>
<el-option label="三孩" value="三孩"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['3','4'].includes(formData.type)">
<el-descriptions-item label="治疗医院">
<el-form-item prop="hospital" label="治疗医院">
<el-input v-model="formData.hospital" maxlength="50"
placeholder="请填写治疗医院"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="病房号">
<el-form-item prop="hospitalHouseNum" label="病房号">
<el-input v-model="formData.hospitalHouseNum" maxlength="50" placeholder="请填写病房号"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="床号">
<el-form-item prop="hospitalHouseBedNum" label="床号">
<el-input v-model="formData.hospitalHouseBedNum" maxlength="50" placeholder="请填写床号"
type="number"></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['4'].includes(formData.type)">
<el-descriptions-item label="患病病种">
<el-form-item prop="hospitalBy" label="患病病种">
<el-input v-model="formData.hospitalBy" maxlength="50"
placeholder="请填写患病病种"></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="['6'].includes(formData.type)">
<el-descriptions-item label="直系亲属">
<el-form-item prop="deadImmediateFamily" label="直系亲属">
<el-select v-model="formData.deadImmediateFamily">
<el-option label="配偶" value="配偶"></el-option>
<el-option label="父亲" value="父亲"></el-option>
<el-option label="母亲" value="母亲"></el-option>
<el-option label="子女" value="子女"></el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
</template>
<el-descriptions-item label="申请事由" :span="2">
<el-form-item prop="remark" label="申请事由">
<el-input maxlength="500" v-model="formData.remark" placeholder="请填写申请事由"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="申请事由" :span="2">
<el-form-item prop="remark" label="申请事由">
<el-input maxlength="500" v-model="formData.remark" placeholder="请填写申请事由"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :span="2" v-if="chooseType.isUploadFile === true">
<template slot="label">
附件
<el-tooltip class="item" effect="dark" :content="'上传附件说明:' + chooseType.uploadFileDesc"
placement="top-start"
v-if="chooseType.isUploadFile && chooseType.uploadFileDesc">
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<el-form-item prop="files" label="附件">
<file-upload
:value.sync="formData.files"
:upload_number="5"
upload_result_category="array"
complete_result
upload_mode="drag"
></file-upload>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :span="2" v-if="chooseType.isUploadFile === true">
<template slot="label">
附件
<el-tooltip class="item" effect="dark" :content="'上传附件说明:' + chooseType.uploadFileDesc"
placement="top-start"
v-if="chooseType.isUploadFile && chooseType.uploadFileDesc">
<i class="el-icon-question"></i>
</el-tooltip>
</template>
<el-form-item prop="files" label="附件">
<file-upload
:value.sync="formData.files"
:upload_number="5"
upload_result_category="array"
complete_result
upload_mode="drag"
></file-upload>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="签字" :span="2">
<el-form-item prop="signature" label="签字">
<pc-signature v-model="formData.signature"></pc-signature>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
<el-button type="primary" @click="onSubmit" v-if="!taskId">提交</el-button>
<el-button type="primary" @click="onFinishTask" v-else>提交</el-button>
</el-row>
</el-card>
<el-descriptions-item label="签字" :span="2">
<el-form-item prop="signature" label="签字">
<pc-signature v-model="formData.signature"></pc-signature>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
<el-button type="primary" @click="onSubmit" v-if="!taskId">提交</el-button>
<el-button type="primary" @click="onFinishTask" v-else>提交</el-button>
</el-row>
</el-card>
</div>
<script>
new Vue({
el: "#app",
store,
data() {
return {
id: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
formData: {},
formRules: {
helpUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
payUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
type: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
way: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
money: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
occurTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
child: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospital: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalHouseNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalHouseBedNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalBy: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
deadImmediateFamily: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
remark: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
files: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
signature: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
new Vue({
el: "#app",
store,
data() {
return {
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
formData: {},
formRules: {
helpUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
payUserId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
type: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
way: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
money: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
occurTime: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
child: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospital: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalHouseNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalHouseBedNum: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
hospitalBy: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
deadImmediateFamily: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
remark: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
files: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
signature: [{ required: true, message: "必填", trigger: ["change", "blur"] }]
},
chooseType: {},
payUserOptions: [],
helpUserOptions: [],
typeOptions: []
}
},
chooseType: {},
payUserOptions: [],
helpUserOptions: [],
typeOptions: [],
}
},
methods: {
createRemoteMethod(options) {
return (keyword) => {
this.selectQueryUser(keyword, options)
}
},
selectQueryUser(keyword, options) {
options.length = 0
this.$axios.post("/platform/condolence/apply/listUser", { keyword: keyword }).then((res) => {
if (res.code === 0) {
options.push(...res.data)
}
})
},
helpUserChange(val) {
const user = this.helpUserOptions.find(o => o.id === val)
if(user) {
const { userName, loginName, unitId, unitName, unionId, unionName } = user
this.$set(this.formData, "helpUserName", userName)
this.$set(this.formData, "helpLoginName", loginName)
this.$set(this.formData, "helpUnitId", unitId)
this.$set(this.formData, "helpUnitName", unitName)
this.$set(this.formData, "helpUnionId", unionId)
this.$set(this.formData, "helpUnionName", unionName)
}
},
payUserChange(val) {
const user = this.payUserOptions.find(o => o.id === val)
if(user) {
const { userName, loginName } = user
this.$set(this.formData, "payUserName", userName)
this.$set(this.formData, "payLoginName", loginName)
}
},
typeChange(id) {
this.chooseType = this.typeOptions.find(o => o.id === id)
if (this.chooseType) {
this.$set(this.formData, "money", this.chooseType.money)
this.$set(this.formData, "way", this.chooseType.way)
}
},
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/condolence/apply/save', {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = '/platform/condolence/mine'
}
})
})
},
onSubmit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/condolence/apply/submit', {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = '/platform/condolence/mine'
methods: {
createRemoteMethod(options) {
return (keyword) => {
this.selectQueryUser(keyword, options)
}
})
})
}
})
},
onFinishTask() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/condolence/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = '/platform/condolence/mine'
}
})
})
}
})
},
init() {
if (this.id) {
this.$axios.post("/platform/condolence/mine/info", { id: this.id }).then((res) => {
if (res.code === 0) {
this.formData = res.data
this.selectQueryUser(this.formData.helpLoginName, this.helpUserOptions)
this.selectQueryUser(this.formData.payLoginName, this.payUserOptions)
this.chooseType = this.typeOptions.find(o => o.id === this.formData.type)
}
})
} else {
const { username, loginname, id, unit, union, mobile } = this.$store.state.user
this.formData = {
applyUserName: username,
applyLoginName: loginname,
applyUserId: id,
applyUnitId: unit?.id,
applyUnitName: unit?.name,
applyUnionId: union?.id,
applyUnionName: union?.name,
}
}
},
queryCondolenceType() {
this.$axios.post('/platform/condolence/type/queryCondolenceType')
.then((resp) => {
this.typeOptions = resp.data
},
selectQueryUser(keyword, options) {
options.length = 0
this.$axios.post("/platform/condolence/apply/listUser", { keyword: keyword }).then((res) => {
if (res.code === 0) {
options.push(...res.data)
}
})
},
},
created() {
this.queryCondolenceType()
this.init()
}
})
},
helpUserChange(val) {
const user = this.helpUserOptions.find(o => o.id === val)
if (user) {
const { userName, loginName, unitId, unitName, unionId, unionName } = user
this.$set(this.formData, "helpUserName", userName)
this.$set(this.formData, "helpLoginName", loginName)
this.$set(this.formData, "helpUnitId", unitId)
this.$set(this.formData, "helpUnitName", unitName)
this.$set(this.formData, "helpUnionId", unionId)
this.$set(this.formData, "helpUnionName", unionName)
}
},
payUserChange(val) {
const user = this.payUserOptions.find(o => o.id === val)
if (user) {
const { userName, loginName } = user
this.$set(this.formData, "payUserName", userName)
this.$set(this.formData, "payLoginName", loginName)
}
},
typeChange(id) {
this.chooseType = this.typeOptions.find(o => o.id === id)
if (this.chooseType) {
this.$set(this.formData, "money", this.chooseType.money)
this.$set(this.formData, "way", this.chooseType.way)
}
},
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/condolence/apply/save", { data: JSON.stringify(this.formData) }).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = "/platform/condolence/mine"
}
})
})
},
onSubmit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/condolence/apply/submit", {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = "/platform/condolence/mine"
}
})
})
}
})
},
onFinishTask() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/condolence/apply/submitAgain", {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
window.location.href = "/platform/condolence/mine"
}
})
})
}
})
},
init() {
if (this.bizId) {
this.$axios.post("/platform/condolence/mine/info", { id: this.bizId }).then((res) => {
if (res.code === 0) {
this.formData = res.data
this.selectQueryUser(this.formData.helpLoginName, this.helpUserOptions)
this.selectQueryUser(this.formData.payLoginName, this.payUserOptions)
this.chooseType = this.typeOptions.find(o => o.id === this.formData.type)
}
})
} else {
const { username, loginname, id, unit, union, mobile } = this.$store.state.user
this.formData = {
applyUserName: username,
applyLoginName: loginname,
applyUserId: id,
applyUnitId: unit?.id,
applyUnitName: unit?.name,
applyUnionId: union?.id,
applyUnionName: union?.name
}
}
},
queryCondolenceType() {
this.$axios.post("/platform/condolence/type/queryCondolenceType")
.then((resp) => {
this.typeOptions = resp.data
})
}
},
created() {
this.queryCondolenceType()
this.init()
}
})
</script>
<!--#
@@ -3,12 +3,6 @@ layout("/layouts/platform_h5.html"){
#-->
<style scoped>
#app {
background-color: #f7f8fa;
height: 100vh;
overflow-y: auto;
}
/* 同意条款样式 */
.agree-section {
padding: 16px;
@@ -103,7 +97,7 @@ layout("/layouts/platform_h5.html"){
<!-- 照片上传 -->
<van-cell-group title="照片" class="form-section">
<van-field class="more-text" name="avatar" label="">
<van-field class="direction-column-field" name="avatar" label="">
<template #input>
<h5-file-upload
slot="input"
@@ -120,7 +114,7 @@ layout("/layouts/platform_h5.html"){
<!-- 电子签名 -->
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="signature" label="">
<van-field class="direction-column-field" name="signature" label="">
<template #input>
<h5-signature v-model="formData.signature" slot="input"></h5-signature>
</template>
@@ -186,7 +180,7 @@ layout("/layouts/platform_h5.html"){
this.$axios.post("/platform/club/join/apply/save", { data: JSON.stringify(this.formData) }).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.$pjaxReplace("/platform/h5/club/mine")
this.$pjaxReplace("/platform/club/join/mine/h5")
}
})
})
@@ -204,7 +198,7 @@ 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/h5/club/mine")
this.$pjaxReplace("/platform/club/join/mine/h5")
}
})
})
@@ -226,7 +220,7 @@ layout("/layouts/platform_h5.html"){
}).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.$pjaxReplace("/platform/h5/club/mine")
this.$pjaxReplace("/platform/club/join/mine/h5")
}
})
})
@@ -1,175 +0,0 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style>
.van-field__control--right {
text-align: left;
}
</style>
<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-dropdown-menu>
<van-dropdown-item v-model="pageForm.applyType" :options="applyTypeOptions" @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">
<div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id">
<van-cell>
<template slot="title">
<div class="flex-align">
<span class="font-size3 bold">{{row.userName}}</span>
</div>
</template>
</van-cell>
<van-cell title="申请协会" :value="row.clubName"></van-cell>
<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>
<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>
</div>
</div>
</van-list>
<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>
</div>
<script>
const vue = new Vue({
el: "#app",
store,
components: {},
data() {
return {
showAction: true,
payedShow: false,
payed: false,
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: ""
},
applyTypeOptions: [
{ text: "申请加入", value: 1 },
{ text: "申请退会", value: 2 }
],
auditTypeOptions: [
{ text: "全部", value: 1 },
{ text: "已审核", value: 2 },
{ text: "未审核", value: 3 }
],
typeOptions: [],
tableData: [],
auditResult: false,
auditIdList: []
}
},
methods: {
openPayed(row, flag) {
this.auditResult = flag
this.auditIdList = [row.id]
if (this.pageForm.applyType === 1) {
this.payedShow = true
} else {
this.doAudit()
}
},
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 (resp.code === 0) {
this.$toast.success(resp.msg)
this.auditIdList = []
this.payedShow = false
this.doSearch()
} else {
this.$toast(resp.msg)
}
}
},
pageData() {
this.tableLoading = true
this.pageForm.source = 1
this.$axios.post("/platform/club/applyJoin/clubAudit/pageData", this.pageForm).then((resp) => {
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.pageForm.pageNumber++
}
this.tableLoading = false
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.tableData = []
this.pageData()
}
},
created() {
this.$set(this.pageForm, "applyType", 1)
this.$set(this.pageForm, "auditType", 3)
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,185 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="协会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" :options="unionOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/club/join/clubApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="clubName" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="姓名">{{row.userName}}</table-column>
<table-column label="工号">{{row.loginName}}</table-column>
<table-column label="申请模式">{{row.mode ? '加入' : '退出'}}</table-column>
<table-column label="申请时间">{{row.applyDate}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">{{formData.taskName}}</div>
<van-form ref="formRef">
<van-field
v-model="formData.tf_opinion"
name="tf_opinion"
label="审批意见"
placeholder="请输入审批意见"
:rules="[{ required: true, message: '请填写审批意见' }]"
required
maxlength="100"
show-word-limit
></van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
</info>
</div>
<script>
<!--#include('../common/clubUserJoin.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: clubUserJoin
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
name: null,
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
unionId: null,
},
unionOptions: [],
formData: {},
showApprovalForm: false
}
},
methods: {
async onReady() {
const unionList = await this.$businessTool.listUnion()
this.unionOptions = [
{
text: "全部工会",
value: null
}
].concat(unionList.map((v) => ({ text: v.name, value: v.id })))
if (this.unionOptions.length > 0) {
this.pageForm.unionId = this.unionOptions[0].value
this.doSearch()
}
},
onView(row) {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
},
onApproval(row) {
this.showApprovalForm = true
this.$refs.infoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
},
async handleTaskAction(val) {
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.infoRef.onClose()
this.$toast.success(res.msg)
this.doSearch()
}
})
}).catch(() => {
})
} catch (error) {
}
},
onRevoke(row){
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->
@@ -2,77 +2,86 @@ const clubUserJoin = {
template:
/*language=HTML*/
`
<div class="form-container">
<template v-if="activeView === 'info'">
<van-cell-group title="协会信息" class="form-section">
<van-action-sheet v-model="visible" title="查看详情">
<div class="detail-container">
<van-cell-group title="基本信息">
<van-cell title="协会名称">{{ viewData.clubName }}</van-cell>
</van-cell-group>
<van-cell-group title="基本信息" class="form-section">
<van-cell title="姓名">{{ viewData.userName }}</van-cell>
<van-cell title="工号">{{ viewData.loginName }}</van-cell>
<van-cell title="性别">{{ viewData.sex }}</van-cell>
<van-cell title="出生年月">{{ viewData.birthday }}</van-cell>
<van-cell title="联系电话">{{ viewData.mobile }}</van-cell>
<van-cell title="电子信箱">{{ viewData.email }}</van-cell>
</van-cell-group>
<van-cell-group title="工作信息" class="form-section">
<van-cell title="分工会">{{ viewData.unionName }}</van-cell>
<van-cell title="部门">{{ viewData.unitName }}</van-cell>
<van-cell title="职务">{{ viewData.governmentPosition }}</van-cell>
<van-cell title="职称">{{ viewData.technicalTitle }}</van-cell>
<van-cell title="学历">{{ viewData.education }}</van-cell>
<van-cell title="学位">{{ viewData.academicDegree }}</van-cell>
</van-cell-group>
<van-cell-group title="其他信息" class="form-section">
<van-cell class="direction-column-field" title="同时参加其他协会情况">
<van-cell class="direction-column-cell" title="同时参加其他协会情况">
{{ viewData.sameTimeJoinOtherClubSituation || '暂无' }}
</van-cell>
<van-cell class="direction-column-field" title="文化、体育方面的活动经历、获奖情况">
<van-cell class="direction-column-cell" title="文化、体育方面的活动经历、获奖情况">
{{ viewData.awardsExperience || '暂无' }}
</van-cell>
</van-cell-group>
<van-cell-group title="照片" class="form-section">
<van-cell class="direction-column-field" v-if="viewData.avatar">
<van-cell class="direction-column-cell" v-if="viewData.avatar" title="照片">
<template slot="default">
<van-image :src="viewData.avatar"></van-image>
</template>
</van-cell>
</van-cell-group>
</template>
<template v-if="activeView === 'history'" v-for="task in doneTasks">
<div class="mt10">
</div>
</template>
<template v-if="activeView === 'approval'">
</template>
<div class="form-actions">
<van-button @click="activeView = 'info'" round type="info">申请信息</van-button>
<van-button @click="activeView = 'history'" round type="info">审核历史</van-button>
<van-button @click="activeView = 'approval'" round type="info">去审核</van-button>
<template v-for="task in doneTasks">
<van-cell-group :title="task.displayName" v-if="task.ext.isFirstTaskNode">
<van-cell title="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})
</van-cell>
<van-cell title="申请时间">{{ task.finishTime }}</van-cell>
<van-cell title="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</van-cell>
</van-cell-group>
<van-cell-group :title="task.displayName" v-else>
<van-cell title="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})
</van-cell>
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
<van-cell title="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</van-cell>
<van-cell title="办理意见" v-if="!task.ext.isFirstTaskNode" class="direction-column-cell">
<div v-html="task.taskFormData.tf_opinion"></div>
</van-cell>
</van-cell-group>
</template>
</div>
</div>
<slot></slot>
</van-action-sheet>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
visible:false,
viewData: {},
activeView: 'info',
row: {},
doneTasks: [],
row: null,
}
},
methods: {
onOpen(row) {
this.row = row
this.$axios.post("/platform/club/join/mine/info", { id: row.id }).then((res) => {
this.visible = true
this.getInfo()
this.getDoneTasks()
},
onClose(){
this.visible = false
},
getInfo() {
this.$axios.post("/platform/club/join/mine/info", { id: this.row.id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
this.getDoneTasks()
},
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
@@ -81,9 +90,6 @@ const clubUserJoin = {
}
})
},
openChart(){
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
},
style: /*language=CSS*/ `
@@ -48,14 +48,7 @@ layout("/layouts/platform_h5.html"){
</template>
</table-list>
<van-popup :style="{ height: '100%',width: '100%', 'background-color': '#F1F1F1'}" position="right" safe-area-inset-bottom v-model="viewShow">
<van-sticky>
<van-nav-bar @click-left="viewShow = false" left-arrow left-text="返回" title="详细信息"></van-nav-bar>
</van-sticky>
<div style="height: calc(100vh - 46px); overflow-y: auto">
<info ref="infoRef"></info>
</div>
</van-popup>
<info ref="infoRef"></info>
</div>
<script>
@@ -68,7 +61,6 @@ layout("/layouts/platform_h5.html"){
},
data() {
return {
viewShow: false,
pageForm: {
pageNumber: 1,
pageSize: 10,
@@ -92,13 +84,10 @@ layout("/layouts/platform_h5.html"){
})
},
onView(row) {
this.viewShow = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(row)
})
this.$refs.infoRef.onOpen(row)
},
onEdit(row) {
this.$pjaxReplace("/platform/h5/club/apply?taskId=" + (row.startTaskId || "") + "&bizId=" + row.id)
this.$pjaxReplace("/platform/club/join/apply/h5?taskId=" + (row.startTaskId || "") + "&bizId=" + row.id)
},
onDelete(id) {
this.$dialog.confirm({
@@ -0,0 +1,185 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="校工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.unionId" :options="unionOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/club/join/schoolUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" title="clubName" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="姓名">{{row.userName}}</table-column>
<table-column label="工号">{{row.loginName}}</table-column>
<table-column label="申请模式">{{row.mode ? '加入' : '退出'}}</table-column>
<table-column label="申请时间">{{row.applyDate}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">{{formData.taskName}}</div>
<van-form ref="formRef">
<van-field
v-model="formData.tf_opinion"
name="tf_opinion"
label="审批意见"
placeholder="请输入审批意见"
:rules="[{ required: true, message: '请填写审批意见' }]"
required
maxlength="100"
show-word-limit
></van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
</info>
</div>
<script>
<!--#include('../common/clubUserJoin.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: clubUserJoin
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
name: null,
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
unionId: null,
},
unionOptions: [],
formData: {},
showApprovalForm: false
}
},
methods: {
async onReady() {
const unionList = await this.$businessTool.listUnion()
this.unionOptions = [
{
text: "全部工会",
value: null
}
].concat(unionList.map((v) => ({ text: v.name, value: v.id })))
if (this.unionOptions.length > 0) {
this.pageForm.unionId = this.unionOptions[0].value
this.doSearch()
}
},
onView(row) {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
},
onApproval(row) {
this.showApprovalForm = true
this.$refs.infoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
},
async handleTaskAction(val) {
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.infoRef.onClose()
this.$toast.success(res.msg)
this.doSearch()
}
})
}).catch(() => {
})
} catch (error) {
}
},
onRevoke(row){
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->
@@ -1,253 +0,0 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<div>
<van-nav-bar title="慰问申请" left-text="返回" left-arrow @click-left="$pjaxReplace('/platform/h5/home')"></van-nav-bar>
<van-cell-group>
<form novalidate @submit.prevent="onSubmit">
<van-field v-model="formData.handledByUserName" label="经办人" readonly></van-field>
<van-field v-model="formData.applyDateTime" label="申请时间" readonly></van-field>
<van-field
v-model="formData.beComfortedUserName"
name="beComfortedUserName"
label="慰问对象"
required
v-validate="'required'"
:error="errors.has('beComfortedUserName')"
:error-message="errors.first('beComfortedUserName')"
@input="userRemoteMethod"
placeholder="请输入工号或姓名选择慰问对象"
></van-field>
<van-action-sheet
:actions="userList"
:close-on-click-action="true"
@cancel="userList = []"
@select="onUserSelect"
title="慰问对象"
v-model="sheetShow"
></van-action-sheet>
<van-field
v-model="formData.payeeUserName"
name="payeeUserName"
label="收款人"
required
v-validate="'required'"
:error="errors.has('payeeUserName')"
:error-message="errors.first('payeeUserName')"
@input="payeeUserRemoteMethod"
placeholder="请输入工号或姓名选择收款人"
></van-field>
<van-action-sheet
:actions="payeeUserList"
:close-on-click-action="true"
@cancel="payeeUserList = []"
@select="payeeOnUserSelect"
title="收款人"
v-model="payeeSheetShow"
></van-action-sheet>
<van-field
v-model="formData.typeName"
name="typeName"
label="慰问类型"
required
v-validate="'required'"
:error="errors.has('typeName')"
:error-message="errors.first('typeName')"
readonly
placeholder="请点击选择慰问类型"
@click="showTypePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showTypePicker">
<van-picker :columns="typeColumns" @cancel="showTypePicker = false" @confirm="onTypeConfirm" show-toolbar></van-picker>
</van-popup>
<van-field
v-model="formData.money"
name="money"
label="慰问金额"
readonly
placeholder="请选择慰问类型后自动匹配"
type="number"
></van-field>
<van-field
v-model="formData.applyReason"
label="申请事由"
v-validate="'required'"
:error="errors.has('applyReason')"
:error-message="errors.first('applyReason')"
type="textarea"
rows="2"
autosize
maxlength="200"
show-word-limit
placeholder="请输入申请事由"
></van-field>
<van-field
label="附件"
name="files"
v-model="formData.files"
data-vv-validate-on="input"
:error="errors.has('files')"
:error-message="errors.first('files')"
class="direction-column-field"
>
<h5-file-upload
slot="input"
:value.sync="formData.files"
:upload_number="10"
upload_mode="file"
upload_result_category="array"
upload_result_type="url"
complete_result
></h5-file-upload>
</van-field>
<!--<van-field
label="签字"
name="signature"
v-model="formData.signature"
required
v-validate="'required'"
:error="errors.has('signature')"
:error-message="errors.first('signature')"
class="direction-column-field"
>
<h5-signature v-model="formData.signature" slot="input"></h5-signature>
</van-field>-->
<van-cell cell-class="form-button-cell">
<van-button type="primary" size="large" block type="submit">提 交</van-button>
</van-cell>
</form>
</van-cell-group>
</div>
</div>
<script>
new Vue({
el: "#app",
store,
data() {
return {
formData: {
applyReason: '',
},
id: "",
userList: [],
sheetShow: false,
payeeUserList: [],
payeeSheetShow: false,
showTypePicker: false,
typeColumns: [],
typeOptions: []
}
},
methods: {
onSubmit() {
this.$validator.validateAll().then((valid) => {
if (valid) {
this.$axios.post("/platform/condolence/apply/submit", {
condolence: JSON.stringify(this.formData)
}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
// this.$pjaxReplace("/platform/h5/proposal/mine")
} else {
this.$toast.fail(res.data.msg)
}
})
} else {
this.$toast.fail("请填写必填项")
}
})
},
onTypeConfirm(o) {
this.$set(this.formData, "typeName", o.text)
this.$set(this.formData, "type", o.value)
this.typeChange(o.value)
this.showTypePicker = false
},
onUserSelect(o) {
this.$set(this.formData, "beComfortedUserId", o.id)
this.$set(this.formData, "beComfortedUserName", o.name)
this.sheetShow = false
},
payeeOnUserSelect(o) {
this.$set(this.formData, "payeeUserId", o.id)
this.$set(this.formData, "payeeUserName", o.name)
this.payeeSheetShow = false
},
async userRemoteMethod(event) {
if (event) {
const arr = await this.getUser(event)
this.userList = arr.map((v) => {
return {
name: v.userName + "(" + v.loginName + ")",
id: v.id
}
})
this.sheetShow = true
}
},
async payeeUserRemoteMethod(event) {
if (event) {
const arr = await this.getUser(event)
this.payeeUserList = arr.map((v) => {
return {
name: v.userName + "(" + v.loginName + ")",
id: v.id
}
})
this.payeeSheetShow = true
}
},
async getUser(keyWord) {
const resp = await this.$axios.post("/platform/condolence/apply/listBeComfortedUser", { keyWord: keyWord })
return resp.data
},
typeChange(id) {
const t = this.typeOptions.find((t) => t.id === id)
this.$set(this.formData, "money", t.money)
},
async listType() {
const res = await this.$axios.post("/platform/condolence/common/listType")
if (res.code === 0) {
this.typeOptions = JSON.parse(JSON.stringify(res.data))
res.data.forEach((v) => {
this.typeColumns.push({ value: v.id, text: v.name + "(" + v.code + ")" })
})
}
},
init() {
if (this.id) {
this.$axios.post("/platform/condolence/common/info", { id: this.id }).then(async (res) => {
if (res.code === 0) {
this.formData = res.data
this.typeChange(this.formData.type)
this.$refs.beComfortedUserRef.options = await this.getUser(this.formData.beComfortedUserId)
this.$refs.payeeUserRef.options = await this.getUser(this.formData.payeeUserId)
}
})
} else {
const { username, loginname, id, unit, union } = this.$store.state.user
this.$set(this.formData, "handledBy", id)
this.$set(this.formData, "handledByUserName", username)
this.$set(this.formData, "handledByLoginName", loginname)
this.$set(this.formData, "handledByUnitName", unit?.name)
this.$set(this.formData, "handledByUnitId", unit?.id)
this.$set(this.formData, "handledByUnionName", union?.name)
this.$set(this.formData, "handledByUnionId", union?.id)
this.$set(this.formData, "applyDateTime", this.$moment().format("YYYY-MM-DD"))
}
}
},
async created() {
await this.listType()
this.init()
}
})
</script>
<!--#
}
#-->
@@ -1,243 +0,0 @@
<!--#
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-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="typeList" @change="doSearch" v-model="pageForm.type"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.audit" @change="doSearch">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id">
<van-cell title="经办人" :value="row.handledByUserName"></van-cell>
<van-cell title="经办人单位" :value="row.handledByUnitName"></van-cell>
<van-cell title="被慰问人" :value="row.beComfortedUserName"></van-cell>
<van-cell title="被慰问人单位" :value="row.beComfortedUserUnitName"></van-cell>
<van-cell title="申请时间" :value="row.applyDateTime"></van-cell>
<van-cell title="当前节点" :value="row.currentTaskDisPlayName"></van-cell>
<van-cell class="table-card-footer">
<van-button type="info" size="small" @click="onOpen(row)">查看</van-button>
<van-button
v-if="row.processTaskState === $processConstant.TASK_STATE.DOING"
@click="onOpen(row, true)"
size="small"
type="primary"
>
审核
</van-button>
<van-button v-if="row.processTaskState===20 && row.processTaskCanWithDraw" @click="withdraw(row)" size="small" type="primary">
撤回
</van-button>
</van-cell>
</div>
</div>
</van-list>
<van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow title="慰问详细信息"></van-nav-bar>
</van-sticky>
<flow-audit
ref="flowAuditRef"
@form_valid="formValid"
@form_confirm="formConfirm"
@close="infoShow = false"
:form_valid_success="formValidSuccess"
>
<template slot="businessInfo">
<condolence-info ref="condolenceInfoRef" :id="id"></condolence-info>
</template>
<template slot="processRecords">
<process-records :id="id"></process-records>
</template>
<template slot="form">
<form novalidate>
<van-field
v-model="formData.comment"
label="审核意见"
v-validate="'required'"
:error="errors.has('comment')"
:error-message="errors.first('comment')"
type="textarea"
rows="2"
required
autosize
maxlength="200"
show-word-limit
placeholder="请输入审核意见"
></van-field>
</form>
</template>
</flow-audit>
</van-popup>
</div>
<script>
<!--#include("../../common/condolenceInfo.js"){}#-->
<!--#include("../../common/processRecord.js"){}#-->
new Vue({
el: "#app",
store,
data() {
return {
unitList: [],
typeList: [{ text: "全部", value: "" }],
yearList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
audit: "0",
unionId: "",
unitId: "",
year: "",
type: ""
},
tableLoading: false,
tableFinished: false,
tableData: [],
id: "",
infoShow: false,
formValidSuccess: false,
formData: {
comment: ""
}
}
},
components: {
"condolence-info": MOBILE_CONDOLENCE_INFO,
"process-records": MOBILE_CONDOLENCE_PROCESS_RECORDS_COMPONENT
},
methods: {
onOpen(row, isAudit = false) {
this.id = row.id
this.infoShow = true
this.$nextTick(() => {
this.$refs.flowAuditRef.onOpen(row, isAudit)
})
},
formValid() {
this.$validator.validateAll().then((valid) => {
if (valid) {
this.formValidSuccess = true
} else {
this.$toast.fail("请填写必填项")
}
})
},
formConfirm(taskForm) {
this.$axios
.post("/platform/condolence/branchUnionAudit/doAudit", {
task: JSON.stringify({ ...taskForm, comment: this.formData.comment })
})
.then((res) => {
if (res.code === 0) {
this.$refs.flowAuditRef.onClose()
this.infoShow = false
this.formData.comment = ""
this.formValidSuccess = false
this.$toast.success(res.msg)
this.doSearch()
} else {
this.$toast.fail(res.msg)
}
})
},
withdraw({ processTaskId }) {
this.$dialog
.confirm({
title: "提示",
message: "您确定要撤回吗?"
})
.then(() => {
this.$axios.post("/platform/condolence/branchUnionAudit/withdraw", { processTaskId }).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
} else {
this.$toast.fail(res.msg)
}
})
})
.catch(() => {})
},
viewInfo(row) {
this.id = row.id
this.infoShow = true
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
this.$axios.post("/platform/condolence/branchUnionAudit/pageData", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
getCondolenceType() {
this.$axios.post("/platform/condolence/common/listOpenType").then((res) => {
if (res.code === 0) {
res.data.forEach((item) => {
this.typeList.push({ text: item.name + "(" + item.code + ")", value: item.id })
})
}
})
},
flushUnits() {
const unionId = this.$store.state.user.union.id
this.$businessTool.listUnit(unionId).then((data) => {
this.unitList = data
this.unitList.forEach((v) => {
v.text = v.name
v.value = v.id
})
if (this.unitList && this.unitList.length > 0) {
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
})
},
initData() {
this.getCondolenceType()
for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.yearList.unshift({ value: i, text: i + "年" })
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.$set(this.pageForm, "type", this.typeList[0].value)
this.flushUnits()
}
},
created() {
this.initData()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -1,57 +0,0 @@
const MOBILE_CONDOLENCE_INFO = {
template: `
<div>
<van-cell-group>
<van-cell>
<div slot="title" class="font-size4 bold">
申请信息
</div>
</van-cell>
<van-cell title="经办人">{{ viewData.handledByUserName }}</van-cell>
<van-cell title="申请时间">{{ viewData.applyDateTime }}</van-cell>
<van-cell title="慰问对象">{{ viewData.beComfortedUserName }}</van-cell>
<van-cell title="收款人">{{ viewData.payeeUserName }}</van-cell>
<van-cell title="慰问类型">{{ viewData.typeName }}</van-cell>
<van-cell title="慰问金额">{{ viewData.money }}</van-cell>
<van-cell title="申请事由">{{ viewData.applyReason }}</van-cell>
<van-cell title="附件">
<div slot="label">
</div>
</van-cell>
</van-cell-group>
</div>
`,
props: {
id: { type: String, required: true }
},
data() {
return {
viewData: {}
}
},
watch: {
id: {
handler: function () {
this.findCondolenceInfoById()
},
immediate: true
}
},
methods: {
findCondolenceInfoById() {
if (!this.id) {
return
}
this.$axios
.post("/platform/condolence/common/info", {
id: this.id
})
.then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
}
}
}
@@ -1,78 +0,0 @@
const MOBILE_CONDOLENCE_PROCESS_RECORDS_COMPONENT = {
template: `
<div class="process-task-record">
<template v-for="item in approvalRecord" v-if="approvalRecord.length > 0">
<div class="mb25" v-if="item.taskName === '2a9632c6-710f-4d3b-89e4-86566238ce8e'">
<van-cell>
<div class="font-size4 bold" slot="title">
{{item.displayName}}
</div>
</van-cell>
<van-cell-group :key="item.displayName + item.taskParentId">
<template v-for="task in item.processTaskVOList">
<van-cell title="姓名">{{task.taskActor?.actorUserName}}</van-cell>
<van-cell title="工号">{{task.taskActor?.actorId}}</van-cell>
<van-cell title="填写时间">{{$moment(task.createdAt)
.format('YYYY-MM-DD HH:mm:ss')}}
</van-cell>
</template>
</van-cell-group>
</div>
<div v-else>
<van-cell>
<div class="font-size4 bold" slot="title">
{{item.displayName}}
</div>
</van-cell>
<van-cell-group :key="item.displayName + item.taskParentId">
<template v-for="task in item.processTaskVOList">
<van-cell title="姓名">{{task.taskActor?.actorUserName}}</van-cell>
<van-cell title="工号">{{task.taskActor?.actorId}}</van-cell>
<van-cell title="审核时间">{{task.finishTime ? task.finishTime : '暂无'}}</van-cell>
<van-cell title="审核结果"> {{Object.keys(task.ext.submitTypeText).length !== 0 ?
task.ext.submitTypeText : '暂无'}}
</van-cell>
<van-cell title="审核意见"> {{task.ext.comment ? task.ext.comment : '暂无'}}
</van-cell>
</template>
</van-cell-group>
</div>
</template>
<el-empty description="暂无审核记录" v-else></el-empty>
</div>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
props: {
id: {
type: String,
required: true
}
},
watch: {
id: {
handler: function(val) {
if (val) {
this.findOne()
}
},
immediate: true
}
},
data() {
return {
approvalRecord: []
}
},
methods: {
findOne() {
this.$axios.post("/platform/wf/processCommon/approvalRecord", { businessNo: this.id }).then((res) => {
if (res.code === 0) {
this.approvalRecord = res.data
console.log(res.data)
}
})
}
}
}
@@ -1,219 +0,0 @@
<!--#
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-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="typeList" @change="doSearch" v-model="pageForm.type"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="unionChange" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></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">
<div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id">
<van-cell title="经办人" :value="row.handledByUserName"></van-cell>
<van-cell title="经办人单位" :value="row.handledByUnitName"></van-cell>
<van-cell title="被慰问人" :value="row.beComfortedUserName"></van-cell>
<van-cell title="被慰问人单位" :value="row.beComfortedUserUnitName"></van-cell>
<van-cell title="申请时间" :value="row.applyDateTime"></van-cell>
<van-cell title="当前节点" :value="row.currentTaskDisPlayName"></van-cell>
<van-cell class="table-card-footer">
<van-button type="info" size="small" @click="viewInfo(row)">查看</van-button>
</van-cell>
</div>
</div>
</van-list>
<van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow title="慰问详细信息"></van-nav-bar>
</van-sticky>
<flow-audit
ref="flowAuditRef"
@form_valid="formValid"
@form_confirm="formConfirm"
@close="infoShow = false"
:form_valid_success="formValidSuccess"
>
<template slot="businessInfo">
<condolence-info ref="condolenceInfoRef" :id="id"></condolence-info>
</template>
<template slot="processRecords">
<process-records :id="id"></process-records>
</template>
<template slot="form">
<form novalidate>
<van-field
v-model="formData.comment"
label="审核意见"
v-validate="'required'"
:error="errors.has('comment')"
:error-message="errors.first('comment')"
type="textarea"
rows="2"
required
autosize
maxlength="200"
show-word-limit
placeholder="请输入审核意见"
></van-field>
</form>
</template>
</flow-audit>
</van-popup>
</div>
<script>
<!--#include("../common/condolenceInfo.js"){}#-->
<!--#include("../common/processRecord.js"){}#-->
new Vue({
el: "#app",
store,
data() {
return {
unitList: [],
unionList: [],
typeList: [{ text: "全部类型", value: "" }],
yearList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
audit: false,
unionId: "",
unitId: "",
year: "",
type: ""
},
tableLoading: false,
tableFinished: false,
tableData: [],
id: "",
infoShow: false,
formValidSuccess: false,
formData: {
comment: ""
}
}
},
components: {
"condolence-info": MOBILE_CONDOLENCE_INFO,
"process-records": MOBILE_CONDOLENCE_PROCESS_RECORDS_COMPONENT
},
methods: {
formValid() {
this.$validator.validateAll().then((valid) => {
if (valid) {
console.log(111111)
} else {
this.$toast.fail("请填写必填项")
}
})
},
formConfirm(taskForm) {},
viewInfo(row, isAudit = false) {
this.id = row.id
this.infoShow = true
this.$nextTick(() => {
this.$refs.flowAuditRef.onOpen(row, isAudit)
})
//
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
this.$axios.post("/platform/h5/condolence/info/pageData", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
getCondolenceType() {
this.$axios.post("/platform/condolence/common/listOpenType").then((res) => {
if (res.code === 0) {
res.data.forEach((item) => {
this.typeList.push({ text: item.name + "(" + item.code + ")", value: item.id })
})
}
})
},
unionChange() {
this.$set(this.pageForm, "unitId", null)
this.flushUnits()
this.doSearch()
},
initUnion() {
const hasAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
const unionId = hasAdmin ? null : this.$store.state.user.union.id
this.$businessTool.listUnion(unionId).then((data) => {
this.unionList = data
this.unionList.forEach((v) => {
v.text = v.name
v.value = v.id
})
if (hasAdmin) {
this.unionList.unshift({ text: "全部工会", value: null })
}
if (this.unionList && this.unionList.length > 0) {
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
})
},
flushUnits() {
const hasAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
const unionId = hasAdmin ? this.pageForm.unionId : this.$store.state.user.union.id
this.$businessTool.listUnit(unionId).then((data) => {
this.unitList = data
this.unitList.forEach((v) => {
v.text = v.name
v.value = v.id
})
if (hasAdmin && !this.pageForm.unionId) {
this.unitList.unshift({ text: "全部单位", value: null })
}
if (this.unitList && this.unitList.length > 0) {
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
})
},
initData() {
this.getCondolenceType()
for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.yearList.unshift({ value: i, text: i + "年" })
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.$set(this.pageForm, "type", this.typeList[0].value)
this.initUnion()
this.flushUnits()
}
},
created() {
this.initData()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -1,270 +0,0 @@
<!--#
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-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<van-dropdown-item :options="yearList" @change="doSearch" v-model="pageForm.year"></van-dropdown-item>
<van-dropdown-item :options="typeList" @change="doSearch" v-model="pageForm.type"></van-dropdown-item>
<van-dropdown-item :options="unionList" @change="unionChange" v-model="pageForm.unionId"></van-dropdown-item>
<van-dropdown-item :options="unitList" @change="doSearch" v-model="pageForm.unitId"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.audit" @change="doSearch">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData">
<div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id">
<van-cell title="经办人" :value="row.handledByUserName"></van-cell>
<van-cell title="经办人单位" :value="row.handledByUnitName"></van-cell>
<van-cell title="被慰问人" :value="row.beComfortedUserName"></van-cell>
<van-cell title="被慰问人单位" :value="row.beComfortedUserUnitName"></van-cell>
<van-cell title="申请时间" :value="row.applyDateTime"></van-cell>
<van-cell title="当前节点" :value="row.currentTaskDisPlayName"></van-cell>
<van-cell class="table-card-footer">
<van-button type="info" size="small" @click="onOpen(row)">查看</van-button>
<van-button
v-if="row.processTaskState === $processConstant.TASK_STATE.DOING"
@click="onOpen(row, true)"
size="small"
type="primary"
type="primary"
>
审核
</van-button>
</van-cell>
</div>
</div>
</van-list>
<van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty>
</div>
<van-popup v-model="infoShow" position="right" :style="{ height: '100%', width: '100%' }" safe-area-inset-bottom>
<van-sticky>
<van-nav-bar @click-left="infoShow=false" left-arrow title="慰问详细信息"></van-nav-bar>
</van-sticky>
<flow-audit
ref="flowAuditRef"
@form_valid="formValid"
@form_confirm="formConfirm"
@close="infoShow = false"
:form_valid_success="formValidSuccess"
>
<template slot="businessInfo">
<condolence-info ref="condolenceInfoRef" :id="id"></condolence-info>
</template>
<template slot="processRecords">
<process-records :id="id"></process-records>
</template>
<template slot="form">
<form novalidate>
<van-field
v-model="formData.comment"
label="审核意见"
v-validate="'required'"
:error="errors.has('comment')"
:error-message="errors.first('comment')"
type="textarea"
rows="2"
required
autosize
maxlength="200"
show-word-limit
placeholder="请输入审核意见"
></van-field>
</form>
</template>
</flow-audit>
</van-popup>
</div>
<script>
<!--#include("../../common/condolenceInfo.js"){}#-->
<!--#include("../../common/processRecord.js"){}#-->
new Vue({
el: "#app",
store,
data() {
return {
unitList: [],
unionList: [],
typeList: [{ text: "全部类型", value: "" }],
yearList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
audit: "0",
unionId: "",
unitId: "",
year: "",
type: ""
},
tableLoading: false,
tableFinished: false,
tableData: [],
id: "",
infoShow: false,
formValidSuccess: false,
formData: {
comment: ""
}
}
},
components: {
"condolence-info": MOBILE_CONDOLENCE_INFO,
"process-records": MOBILE_CONDOLENCE_PROCESS_RECORDS_COMPONENT
},
methods: {
onOpen(row, isAudit = false) {
this.id = row.id
this.infoShow = true
this.$nextTick(() => {
this.$refs.flowAuditRef.onOpen(row, isAudit)
})
},
formValid() {
this.$validator.validateAll().then((valid) => {
if (valid) {
this.formValidSuccess = true
} else {
this.$toast.fail("请填写必填项")
}
})
},
formConfirm(taskForm) {
this.$axios
.post("/platform/condolence/schoolUnionAudit/doAudit", {
task: JSON.stringify({ ...taskForm, comment: this.formData.comment })
})
.then((res) => {
if (res.code === 0) {
this.$refs.flowAuditRef.onClose()
this.infoShow = false
this.formData.comment = ""
this.formValidSuccess = false
this.$toast.success(res.msg)
this.doSearch()
} else {
this.$toast.fail(res.msg)
}
})
},
withdraw({ processTaskId }) {
this.$dialog
.confirm({
title: "提示",
message: "您确定要撤回吗?"
})
.then(() => {
this.$axios.post("/platform/condolence/schoolUnionAudit/withdraw", { processTaskId }).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
} else {
this.$toast.fail(res.msg)
}
})
})
.catch(() => {})
},
viewInfo(row) {
this.id = row.id
this.infoShow = true
},
doSearch() {
this.pageForm.pageNumber = 1
this.tableData = []
this.finished = false
this.pageData()
},
pageData() {
this.tableLoading = true
this.$axios.post("/platform/condolence/schoolUnionAudit/pageData", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = this.tableData.concat(res.data.list)
this.pageForm.totalCount = res.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) {
this.tableFinished = true
} else {
this.pageForm.pageNumber++
}
this.tableLoading = false
} else {
this.$toast(res.msg)
}
})
},
getCondolenceType() {
this.$axios.post("/platform/condolence/common/listOpenType").then((res) => {
if (res.code === 0) {
res.data.forEach((item) => {
this.typeList.push({ text: item.name + "(" + item.code + ")", value: item.id })
})
}
})
},
unionChange() {
this.$set(this.pageForm, "unitId", null)
this.flushUnits()
this.doSearch()
},
initUnion() {
const hasAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
const unionId = hasAdmin ? null : this.$store.state.user.union.id
this.$businessTool.listUnion(unionId).then((data) => {
this.unionList = data
this.unionList.forEach((v) => {
v.text = v.name
v.value = v.id
})
if (hasAdmin) {
this.unionList.unshift({ text: "全部工会", value: null })
}
if (this.unionList && this.unionList.length > 0) {
this.$set(this.pageForm, "unionId", this.unionList[0].value)
}
})
},
flushUnits() {
const hasAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
const unionId = hasAdmin ? this.pageForm.unionId : this.$store.state.user.union.id
this.$businessTool.listUnit(unionId).then((data) => {
this.unitList = data
this.unitList.forEach((v) => {
v.text = v.name
v.value = v.id
})
if (hasAdmin && !this.pageForm.unionId) {
this.unitList.unshift({ text: "全部单位", value: null })
}
if (this.unitList && this.unitList.length > 0) {
this.$set(this.pageForm, "unitId", this.unitList[0].value)
}
})
},
initData() {
this.getCondolenceType()
for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.yearList.unshift({ value: i, text: i + "年" })
}
this.$set(this.pageForm, "year", this.yearList[0].value)
this.$set(this.pageForm, "type", this.typeList[0].value)
this.initUnion()
this.flushUnits()
}
},
created() {
this.initData()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,99 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="场地预约" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" :options="typeOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<table-list api="/platform/site/apply/pageData" :page_form.sync="pageForm" ref="tableListRef" title="name" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="场地地址">{{row.address}}</table-column>
<table-column label="联系人">{{row.contactName}}</table-column>
<table-column label="联系方式">{{row.contactPhone}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" @click="onEdit(row)">
<i class="fa fa-edit"></i>
<span>预约</span>
</div>
</template>
</table-list>
</div>
<script>
new Vue({
el: "#app",
store,
components: {
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
year: new Date().getFullYear(),
type: null
},
}
},
methods: {
async onReady() {
const typeList = await this.querySiteType()
this.typeOptions = [
{
text: "全部类型",
value: null
}
].concat(typeList.map((v) => ({ text: v.name, value: v.id })))
if (this.typeOptions.length > 0) {
this.pageForm.type = this.typeOptions[0].value
this.doSearch()
}
},
async querySiteType() {
const res = await this.$axios.post("/platform/site/type/querySiteType")
return res.data
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,448 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
.search-dialog {
height: 80%;
}
</style>
<div id="app">
<!-- 导航栏 -->
<van-nav-bar title="职工慰问申请" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<!-- 表单容器 -->
<van-form ref="formRef" class="form-container">
<!-- 基本信息 -->
<van-cell-group title="基本信息" class="form-section">
<van-field label="申请人姓名" :rules="[{ required: true }]" v-model="formData.applyUserName" readonly
required name="applyUserName"></van-field>
<van-field label="申请人工号" :rules="[{ required: true }]" v-model="formData.applyLoginName" readonly
required name="applyLoginName"></van-field>
<van-field label="申请人单位" :rules="[{ required: true }]" v-model="formData.applyUnitName" readonly
required name="applyUnitName"></van-field>
<van-field label="申请人工会" :rules="[{ required: true }]" v-model="formData.applyUnionName" readonly
required name="applyUnionName"></van-field>
<van-field
v-model="formData.helpUserName"
name="helpUserName"
label="慰问对象"
required
readonly
:rules="[{ required: true }]"
placeholder="请点击选择慰问对象"
@click="helpUserSelectShow = true"
is-link
></van-field>
<van-action-sheet v-model="helpUserSelectShow" title="慰问对象" class="height100">
<van-search
v-model="searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入工号或姓名选择慰问对象"
@input="(val) => {userRemoteMethod(val, 'help')}"
@clear="(val) => {userRemoteMethod(val, 'help')}"
shape="round"
></van-search>
<div class="van-action-sheet__content mt5" v-if="userOptions && userOptions.length>0">
<template>
<template v-for="item in userOptions">
<van-button native-type="button" @click="helpUserChange(item)" class="van-action-sheet__item van-hairline--bottom">
<span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>
</van-button>
</template>
</template>
</div>
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>
<van-field
v-model="formData.payUserName"
name="payUserName"
label="收款人"
required
:rules="[{ required: true }]"
placeholder="请点击选择收款人"
@click="payUserSelectShow = true"
is-link
></van-field>
<van-action-sheet v-model="payUserSelectShow" title="收款人" class="height100">
<van-search
v-model="searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入工号或姓名选择收款人"
@input="(val) => {userRemoteMethod(val, 'pay')}"
@clear="(val) => {userRemoteMethod(val, 'pay')}"
shape="round"
></van-search>
<div class="van-action-sheet__content mt5" v-if="userOptions && userOptions.length>0">
<template>
<template v-for="item in userOptions">
<van-button native-type="button" @click="payUserChange(item)" class="van-action-sheet__item van-hairline--bottom">
<span class="van-action-sheet__name">{{item.userName}}{{item.loginName}}</span>
</van-button>
</template>
</template>
</div>
<van-empty description="暂无数据" v-else></van-empty>
</van-action-sheet>
<van-field
v-model="formData.typeName"
name="typeName"
label="慰问类型"
required
readonly
:rules="[{ required: true }]"
placeholder="请点击选择慰问类型"
@click="showTypePicker = true"
clickable
is-link
></van-field>
<van-popup position="bottom" round v-model:show="showTypePicker">
<van-picker :columns="typeColumns" @cancel="showTypePicker = false" @confirm="onTypeConfirm" show-toolbar></van-picker>
</van-popup>
<van-field
v-model="formData.way"
name="way"
label="慰问方式"
required
readonly
:rules="[{ required: true }]"
placeholder="请选择慰问类型"
clickable
></van-field>
<van-field
v-model="formData.money"
name="money"
label="慰问金额"
required
:rules="[{ required: true }]"
placeholder="选择慰问类型自动匹配金额"
clickable
type="number"
></van-field>
<van-field
v-model="formData.occurTime"
name="occurTime"
label="慰问时间"
required
:rules="[{ required: true }]"
placeholder="请点击选择慰问时间"
clickable
is-link
readonly
@click="showTimePicker = true"
></van-field>
<van-popup position="bottom" round v-model:show="showTimePicker">
<van-datetime-picker
v-model="formData.occurTime"
type="date"
title="请选择慰问时间"
@confirm="(val) => {formData.occurTime = $moment(val).format('YYYY-MM-DD'); showTimePicker = false}"
@cancel="showTimePicker = false"
></van-datetime-picker>
</van-popup>
<van-field
v-if="['2'].includes(formData.type)"
v-model="formData.child"
name="child"
label="孩次"
required
:rules="[{ required: true }]"
placeholder="请点击选择孩次"
clickable
is-link
readonly
@click="showChildPicker = true"
></van-field>
<van-popup position="bottom" round v-model:show="showChildPicker">
<van-picker
title="请选择孩次"
show-toolbar
:columns="['一孩', '二孩', '三孩']"
@confirm="(val) => {formData.child = val; showChildPicker = false}"
@cancel="showChildPicker = false"
></van-picker>
</van-popup>
<template v-if="['3','4'].includes(formData.type)">
<van-field
v-model="formData.hospital"
name="hospital"
label="治疗医院"
required
:rules="[{ required: true }]"
placeholder="请输入治疗医院"
></van-field>
<van-field
v-model="formData.hospitalHouseNum"
name="hospitalHouseNum"
label="病房号"
required
:rules="[{ required: true }]"
placeholder="请输入病房号"
></van-field>
<van-field
v-model="formData.hospitalHouseBedNum"
name="hospitalHouseBedNum"
label="床号"
required
:rules="[{ required: true }]"
placeholder="请输入床号"
></van-field>
</template>
<van-field
v-if="['4'].includes(formData.type)"
v-model="formData.hospitalBy"
name="hospitalBy"
label="患病病种"
required
:rules="[{ required: true }]"
placeholder="请输入患病病种"
></van-field>
<van-field
v-if="['6'].includes(formData.type)"
v-model="formData.deadImmediateFamily"
name="deadImmediateFamily"
label="直系亲属"
required
:rules="[{ required: true }]"
placeholder="请点击选择直系亲属"
clickable
is-link
readonly
@click="showFamilyPicker = true"
></van-field>
<van-popup position="bottom" round v-model:show="showFamilyPicker">
<van-picker
title="请选择直系亲属"
show-toolbar
:columns="['配偶', '父亲', '母亲', '子女']"
@confirm="(val) => {formData.deadImmediateFamily = val; showFamilyPicker = false}"
@cancel="showFamilyPicker = false"
></van-picker>
</van-popup>
<van-field
v-model="formData.remark"
name="remark"
label="申请事由"
type="textarea"
rows="4"
autosize
placeholder="请输入申请事由"
:rules="[{ required: true }]"
required
></van-field>
</van-cell-group>
<van-cell-group class="form-section" v-if="chooseType.isUploadFile === true">
<template #title>
<span>附件</span>
<span v-if="chooseType.isUploadFile && chooseType.uploadFileDesc" style="color: orangered">
{{ '(附件说明:' + chooseType.uploadFileDesc + '' }}
</span>
</template>
<van-field class="direction-column-field" name="avatar" label="">
<template #input>
<h5-file-upload
slot="input"
:value.sync="formData.files"
:upload_number="5"
upload_result_category="array"
complete_result
></h5-file-upload>
</template>
</van-field>
</van-cell-group>
<van-cell-group title="签字" class="form-section">
<van-field class="direction-column-field" name="signature" label="">
<template #input>
<h5-signature v-model="formData.signature" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
<!-- 提交按钮 -->
<div class="form-actions">
<van-button native-type="button" @click="onSave" round type="info" plain>保存申请</van-button>
<van-button @click="onSubmit" round type="info" v-if="!taskId">提交申请</van-button>
<van-button @click="onFinishTask" round type="info" v-else>提交申请</van-button>
</div>
</van-form>
</div>
<script>
const vue = new Vue({
el: "#app",
store,
components: {},
data() {
return {
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
formData: {},
chooseType: {},
userOptions: [],
typeOptions: [],
helpUserSelectShow: false,
payUserSelectShow: false,
showTypePicker: false,
typeColumns: [],
searchKeyword: '',
showTimePicker: false,
showChildPicker: false,
showFamilyPicker: false,
}
},
methods: {
async userRemoteMethod(event, type) {
if (event) {
this.userOptions = await this.selectQueryUser(event)
type === 'help' ? this.helpUserSelectShow = true : this.payUserSelectShow = true
}
},
async selectQueryUser(keyword) {
const res = await this.$axios.post("/platform/condolence/apply/listUser", { keyword: keyword })
return res.data
},
helpUserChange(user) {
const { id, userName, loginName, unitId, unitName, unionId, unionName } = user
this.$set(this.formData, "helpUserId", id)
this.$set(this.formData, "helpUserName", userName)
this.$set(this.formData, "helpLoginName", loginName)
this.$set(this.formData, "helpUnitId", unitId)
this.$set(this.formData, "helpUnitName", unitName)
this.$set(this.formData, "helpUnionId", unionId)
this.$set(this.formData, "helpUnionName", unionName)
this.helpUserSelectShow = false
this.searchKeyword = ''
this.userOptions = []
},
payUserChange(user) {
const { id, userName, loginName } = user
this.$set(this.formData, "payUserId", id)
this.$set(this.formData, "payUserName", userName)
this.$set(this.formData, "payLoginName", loginName)
this.payUserSelectShow = false
this.searchKeyword = ''
this.userOptions = []
},
typeChange(id) {
this.chooseType = this.typeOptions.find(o => o.id === id)
if (this.chooseType) {
this.$set(this.formData, "money", this.chooseType.money)
this.$set(this.formData, "way", this.chooseType.way)
}
},
onTypeConfirm(o) {
this.$set(this.formData, "typeName", o.text)
this.$set(this.formData, "type", o.value)
this.typeChange(o.value)
this.showTypePicker = false
},
onSave() {
this.$dialog.confirm({
title: "提示",
message: "您确定保存吗?"
}).then(() => {
this.$axios.post("/platform/condolence/apply/save", { data: JSON.stringify(this.formData) }).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.$pjaxReplace("/platform/condolence/mine/h5")
}
})
})
},
async onSubmit() {
this.$refs.formRef.validate().then(() => {
this.$dialog.confirm({
title: "提示",
message: "您确定要提交申请吗?"
}).then(() => {
this.$axios.post("/platform/condolence/apply/submit", { data: JSON.stringify(this.formData) }).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.$pjaxReplace("/platform/condolence/mine/h5")
}
})
})
})
},
async onFinishTask() {
this.$refs.formRef.validate().then(() => {
this.$dialog.confirm({
title: "提示",
message: "您确定要提交申请吗?"
}).then(() => {
this.$axios.post("/platform/condolence/apply/submitAgain", {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.$pjaxReplace("/platform/condolence/mine/h5")
}
})
})
})
},
init() {
if (this.bizId) {
this.$axios.post("/platform/condolence/mine/info", { id: this.bizId }).then((res) => {
if (res.code === 0) {
this.formData = res.data
this.selectQueryUser(this.formData.helpLoginName, this.helpUserOptions)
this.selectQueryUser(this.formData.payLoginName, this.payUserOptions)
this.chooseType = this.typeOptions.find(o => o.id === this.formData.type)
}
})
} else {
const { username, loginname, id, unit, union, mobile } = this.$store.state.user
this.formData = {
applyUserName: username,
applyLoginName: loginname,
applyUserId: id,
applyUnitId: unit?.id,
applyUnitName: unit?.name,
applyUnionId: union?.id,
applyUnionName: union?.name,
}
}
},
queryCondolenceType() {
this.$axios.post('/platform/condolence/type/queryCondolenceType')
.then((res) => {
this.typeOptions = JSON.parse(JSON.stringify(res.data))
res.data.forEach((v) => {
this.typeColumns.push({ value: v.id, text: v.name + "(" + v.code + ")" })
})
})
},
},
created() {
this.queryCondolenceType()
this.init()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,191 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="分工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" :options="typeOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/condolence/branchUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="慰问对象">{{row.helpUserName}}</table-column>
<table-column label="慰问对象工号">{{row.helpLoginName}}</table-column>
<table-column label="申请人">{{row.applyUserName}}</table-column>
<table-column label="所属工会">{{row.applyUnionName}}</table-column>
<table-column label="所属单位">{{row.applyUnitName}}</table-column>
<table-column label="慰问类型">{{row.typeName}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">{{formData.taskName}}</div>
<van-form ref="formRef">
<van-field
v-model="formData.tf_opinion"
name="tf_opinion"
label="审批意见"
placeholder="请输入审批意见"
:rules="[{ required: true, message: '请填写审批意见' }]"
required
maxlength="100"
show-word-limit
></van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
</info>
</div>
<script>
<!--#include('../common/info.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: condolenceInfo
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
name: null,
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
type: null,
},
typeOptions: [],
formData: {},
showApprovalForm: false
}
},
methods: {
async onReady() {
const typeList = await this.queryCondolenceType()
this.typeOptions = [
{
text: "全部慰问类型",
value: null
}
].concat(typeList.map((v) => ({ text: v.name, value: v.id })))
if (this.typeOptions.length > 0) {
this.pageForm.type = this.typeOptions[0].value
this.doSearch()
}
},
onView(row) {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
},
onApproval(row) {
this.showApprovalForm = true
this.$refs.infoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
},
async handleTaskAction(val) {
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.infoRef.onClose()
this.$toast.success(res.msg)
this.doSearch()
}
})
}).catch(() => {
})
} catch (error) {
}
},
onRevoke(row){
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
async queryCondolenceType() {
const res = await this.$axios.post('/platform/condolence/type/queryCondolenceType')
return res.data
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,98 @@
const condolenceInfo = {
template:
/*language=HTML*/
`
<van-action-sheet v-model="visible" title="查看详情">
<div class="detail-container">
<van-cell-group title="基本信息">
<van-cell title="申请人姓名">{{ viewData.applyUserName }}</van-cell>
<van-cell title="申请人工号">{{ viewData.applyLoginName }}</van-cell>
<van-cell title="申请人单位">{{ viewData.applyUnitName }}</van-cell>
<van-cell title="申请人工会">{{ viewData.applyUnionName }}</van-cell>
<van-cell title="慰问对象">{{ viewData.helpUserName }}</van-cell>
<van-cell title="收款人">{{ viewData.payUserName }}</van-cell>
<van-cell title="慰问类型">{{ viewData.typeName }}</van-cell>
<van-cell title="慰问方式">{{ viewData.way }}</van-cell>
<van-cell title="慰问金额">{{ viewData.money }}</van-cell>
<van-cell title="慰问时间">{{ viewData.occurTime }}</van-cell>
<van-cell v-if="['2'].includes(viewData.type)" title="孩次">{{ viewData.child }}</van-cell>
<van-cell v-if="['3','4'].includes(viewData.type)" title="治疗医院">{{ viewData.hospital }}</van-cell>
<van-cell v-if="['3','4'].includes(viewData.type)" title="病房号">{{ viewData.hospitalHouseNum }}</van-cell>
<van-cell v-if="['3','4'].includes(viewData.type)" title="床号">{{ viewData.hospitalHouseBedNum }}</van-cell>
<van-cell v-if="['4'].includes(viewData.type)" title="患病病种">{{ viewData.hospitalBy }}</van-cell>
<van-cell v-if="['6'].includes(viewData.type)" title="直系亲属">{{ viewData.deadImmediateFamily }}</van-cell>
<van-cell class="direction-column-cell" title="申请事由">
{{ viewData.remark || '暂无' }}
</van-cell>
<van-cell class="direction-column-cell" title="附件">
</van-cell>
<van-cell class="direction-column-cell" title="签字">
<van-image :src="viewData.signature" v-if="viewData.signature" class="signature-image"></van-image>
<span v-else>暂无签字</span>
</van-cell>
</van-cell-group>
<template v-for="task in doneTasks">
<van-cell-group :title="task.displayName" v-if="task.ext.isFirstTaskNode">
<van-cell title="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})
</van-cell>
<van-cell title="申请时间">{{ task.finishTime }}</van-cell>
<van-cell title="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</van-cell>
</van-cell-group>
<van-cell-group :title="task.displayName" v-else>
<van-cell title="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})
</van-cell>
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
<van-cell title="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</van-cell>
<van-cell title="办理意见" v-if="!task.ext.isFirstTaskNode" class="direction-column-cell">
<div v-html="task.taskFormData.tf_opinion"></div>
</van-cell>
</van-cell-group>
</template>
</div>
<slot></slot>
</van-action-sheet>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
visible:false,
viewData: {},
doneTasks: [],
row: null,
}
},
methods: {
onOpen(row) {
this.row = row
this.visible = true
this.getInfo()
this.getDoneTasks()
},
onClose(){
this.visible = false
},
getInfo() {
this.$axios.post("/platform/condolence/mine/info", { id: this.row.id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
},
style: /*language=CSS*/ `
`
}
@@ -0,0 +1,151 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="我的申请" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" :options="typeOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<table-list api="/platform/condolence/mine/pageData" :page_form.sync="pageForm" ref="tableListRef" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="慰问对象">{{row.helpUserName}}</table-column>
<table-column label="慰问对象工号">{{row.helpLoginName}}</table-column>
<table-column label="申请人">{{row.applyUserName}}</table-column>
<table-column label="所属工会">{{row.applyUnionName}}</table-column>
<table-column label="所属单位">{{row.applyUnitName}}</table-column>
<table-column label="慰问类型">{{row.typeName}}</table-column>
<table-column label="当前节点">{{row.taskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" @click="onEdit(row)"
v-if="row.taskKey === 'startTask' || !row.instanceId">
<i class="fa fa-edit"></i>
<span>编辑</span>
</div>
<div class="action-btn delete" @click="onRevoke(row)"
v-if="row.canRevoke">
<i class="fa fa-undo"></i>
<span>撤回</span>
</div>
<div class="action-btn delete" @click="onDelete(row)"
v-if="row.taskKey === 'startTask' || !row.instanceId">
<i class="fa fa-trash"></i>
<span>删除</span>
</div>
</template>
</table-list>
<info ref="infoRef"></info>
</div>
<script>
<!--#include('../common/info.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: condolenceInfo
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
year: new Date().getFullYear(),
type: null
},
typeOptions: [],
}
},
methods: {
async onReady() {
const typeList = await this.queryCondolenceType()
this.typeOptions = [
{
text: "全部慰问类型",
value: null
}
].concat(typeList.map((v) => ({ text: v.name, value: v.id })))
if (this.typeOptions.length > 0) {
this.pageForm.type = this.typeOptions[0].value
this.doSearch()
}
},
onRevoke(row) {
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", { taskId: row.startTaskId }).then((res) => {
if (res.code === 0) {
this.$toast(res.msg)
this.doSearch()
}
})
})
},
onView(row) {
this.$refs.infoRef.onOpen(row)
},
onEdit(row) {
this.$pjaxReplace("/platform/condolence/apply/h5?taskId=" + (row.startTaskId || "") + "&bizId=" + row.id)
},
onDelete(id) {
this.$dialog.confirm({
title: "提示",
message: "确定要删除此申请吗?"
})
.then(() => {
this.$axios.post("/platform/condolence/mine/delete", { id: id }).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
} else {
this.$toast.fail(res.msg)
}
})
})
.catch(() => {})
},
async queryCondolenceType() {
const res = await this.$axios.post('/platform/condolence/type/queryCondolenceType')
return res.data
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,191 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style scoped>
</style>
<div id="app">
<van-nav-bar title="校工会审核" left-text="返回" left-arrow @click-left="historyBack" fixed placeholder></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
v-model="pageForm.searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入姓名或者工号搜索"
@search="doSearch"
></van-search>
<van-dropdown-menu :close-on-click-outside="false" :close-on-click-overlay="false">
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item v-model="pageForm.type" :options="typeOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
<van-tabs v-model="pageForm.approvalText"
@change="(val)=>{this.pageForm.approval = val==='1';this.doSearch();}">
<van-tab title="已审核" name="1"></van-tab>
<van-tab title="未审核" name="0"></van-tab>
</van-tabs>
</van-sticky>
<table-list api="/platform/condolence/schoolUnionApproval/pageData" :page_form.sync="pageForm" ref="tableListRef" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="慰问对象">{{row.helpUserName}}</table-column>
<table-column label="慰问对象工号">{{row.helpLoginName}}</table-column>
<table-column label="申请人">{{row.applyUserName}}</table-column>
<table-column label="所属工会">{{row.applyUnionName}}</table-column>
<table-column label="所属单位">{{row.applyUnitName}}</table-column>
<table-column label="慰问类型">{{row.typeName}}</table-column>
<table-column label="当前节点">{{row.curTaskName}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row)">
<i class="fa fa-eye"></i>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
</template>
</table-list>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">{{formData.taskName}}</div>
<van-form ref="formRef">
<van-field
v-model="formData.tf_opinion"
name="tf_opinion"
label="审批意见"
placeholder="请输入审批意见"
:rules="[{ required: true, message: '请填写审批意见' }]"
required
maxlength="100"
show-word-limit
></van-field>
</van-form>
<div style="display: flex; justify-content: space-between; column-gap: 10px; padding: 10px">
<van-button type="danger" block @click="handleTaskAction(6)">退回</van-button>
<van-button type="danger" block @click="handleTaskAction(20)">不同意</van-button>
<van-button type="primary" block @click="handleTaskAction(1)">同意</van-button>
</div>
</div>
</info>
</div>
<script>
<!--#include('../common/info.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: condolenceInfo
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
name: null,
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
type: null,
},
typeOptions: [],
formData: {},
showApprovalForm: false
}
},
methods: {
async onReady() {
const typeList = await this.queryCondolenceType()
this.typeOptions = [
{
text: "全部慰问类型",
value: null
}
].concat(typeList.map((v) => ({ text: v.name, value: v.id })))
if (this.typeOptions.length > 0) {
this.pageForm.type = this.typeOptions[0].value
this.doSearch()
}
},
onView(row) {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
},
onApproval(row) {
this.showApprovalForm = true
this.$refs.infoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
},
async handleTaskAction(val) {
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.infoRef.onClose()
this.$toast.success(res.msg)
this.doSearch()
}
})
}).catch(() => {
})
} catch (error) {
}
},
onRevoke(row){
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
async queryCondolenceType() {
const res = await this.$axios.post('/platform/condolence/type/queryCondolenceType')
return res.data
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
}
},
})
</script>
<!--#
}
#-->