This commit is contained in:
Paidax
2025-09-11 09:22:54 +08:00
56 changed files with 3162 additions and 246 deletions
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.activity.basic.models;
import com.budwk.app.base.model.BaseModel; import com.budwk.app.base.model.BaseModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
import java.io.Serial; import java.io.Serial;
@@ -16,9 +15,13 @@ import java.io.Serializable;
*/ */
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Table @Table("activity_user_scope")
@Data @Data
@Comment("活动人员范围设置") @Comment("活动人员范围设置")
@TableIndexes({
@Index(name = "INDEX_ACTIVITY_USER_SCOPE_GROUPID", fields = {"groupId"}, unique = false),
@Index(name = "INDEX_ACTIVITY_USER_SCOPE_USERID", fields = {"userId"}, unique = false)
})
public class ActivityUserScope extends BaseModel implements Serializable { public class ActivityUserScope extends BaseModel implements Serializable {
@Serial @Serial
@@ -5,7 +5,6 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
@@ -22,7 +21,6 @@ import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService;
import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.club.service.SysClubService; import com.budwk.app.zhgh.club.service.SysClubService;
import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -6,7 +6,6 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
@@ -161,7 +160,9 @@ public class ActivityCultureUserStatisticsController {
} }
} }
// 只查询流程实例状态为20的数据(已完成状态) // 只查询流程实例状态为20的数据(已完成状态)
cnd.and("ins.state", "=", 20); if (!List.of(40001).contains(activity_type)) {
cnd.and("ins.state", "=", 20);
}
cnd.andEX("YEAR(tissue.startTime)", "=", year).desc("tissue.startTime"); cnd.andEX("YEAR(tissue.startTime)", "=", year).desc("tissue.startTime");
sql.setCondition(cnd); sql.setCondition(cnd);
return Result.success(activityCultureApplyUserService.list(sql)); return Result.success(activityCultureApplyUserService.list(sql));
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.dayofficework.asset.controller; package com.budwk.app.zhgh.dayofficework.asset.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
@@ -39,11 +40,16 @@ public class AssetStocktakingController {
@SaCheckPermission("asset.stocktaking") @SaCheckPermission("asset.stocktaking")
public void index() { public void index() {
} }
@At("/h5")
@Ok("beetl:/platform/zhghh5/dayofficework/asset/stocktaking/index.html")
@SaCheckPermission("h5.asset.stocktaking")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("asset.stocktaking") @SaCheckPermission(value = {"asset.stocktaking","h5.asset.stocktaking"}, mode = SaMode.OR)
public Result pageData(AssetPageForm pageForm) { public Result pageData(AssetPageForm pageForm) {
Sql sql = assetStocktakingService.getSql(pageForm); Sql sql = assetStocktakingService.getSql(pageForm);
Pagination pagination = assetStocktakingService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination pagination = assetStocktakingService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -54,7 +60,7 @@ public class AssetStocktakingController {
@ApiOperation("资产盘点提交") @ApiOperation("资产盘点提交")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "提交了一条资产盘点信息") @SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "提交了一条资产盘点信息")
@SaCheckPermission("asset.stocktaking") @SaCheckPermission(value = {"asset.stocktaking","h5.asset.stocktaking"}, mode = SaMode.OR)
public Result doSubmit(AssetStocktaking assetStocktaking) { public Result doSubmit(AssetStocktaking assetStocktaking) {
assetStocktakingService.doSubmit(assetStocktaking); assetStocktakingService.doSubmit(assetStocktaking);
@@ -66,7 +72,7 @@ public class AssetStocktakingController {
@ApiOperation("删除资产盘点") @ApiOperation("删除资产盘点")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "删除了一条资产盘点信息") @SLog(type = "AssetStocktaking", tag = "资产盘点", msg = "删除了一条资产盘点信息")
@SaCheckPermission("asset.stocktaking") @SaCheckPermission(value = {"asset.stocktaking","h5.asset.stocktaking"}, mode = SaMode.OR)
public Result doDelete(String id,String assetStocktakingPlanId) { public Result doDelete(String id,String assetStocktakingPlanId) {
assetStocktakingService.doDelete(id,assetStocktakingPlanId); assetStocktakingService.doDelete(id,assetStocktakingPlanId);
return Result.success(); return Result.success();
@@ -170,7 +170,7 @@ public class SiteApplyController {
@At @At
@ApiOperation("查询可以预约的日期") @ApiOperation("查询可以预约的日期")
@SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR) @SaCheckPermission(value = {"site.apply", "h5.site.apply"}, mode = SaMode.OR)
public Result queryAllowTime(String siteId, String startTime, String endTime) { public Result queryAllowDay(String siteId, String startTime, String endTime) {
if(StrUtil.isBlank(siteId)) { if(StrUtil.isBlank(siteId)) {
return Result.success(new ArrayList<>()); return Result.success(new ArrayList<>());
} }
@@ -58,7 +58,7 @@ public class SiteMineController {
public void index() {} public void index() {}
@At("/h5") @At("/h5")
@Ok("beetl:/platform/zhgh/dayofficework/site/mine/index.html") @Ok("beetl:/platform/zhghh5/dayofficework/site/mine/index.html")
@SaCheckPermission("h5.site.mine") @SaCheckPermission("h5.site.mine")
public void h5Index() {} public void h5Index() {}
@@ -1,7 +1,8 @@
package com.budwk.app.zhgh.unionReimburse.controller; package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@@ -22,11 +23,12 @@ import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayMan
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool; import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion; import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceTypeService; import com.budwk.app.zhgh.staffbenefit.condolence.service.CondolenceTypeService;
import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse; import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType; import com.budwk.app.zhgh.staffbenefit.condolence.model.CondolenceType;
import com.budwk.app.zhgh.unionReimburse.service.UnionReimburseService; import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
@@ -51,6 +53,7 @@ import java.util.List;
@At("/platform/unionReimburse/apply") @At("/platform/unionReimburse/apply")
@Api("工会报销申请") @Api("工会报销申请")
@Ok("json:full") @Ok("json:full")
@Slf4j
public class UnionReimburseApplyController { public class UnionReimburseApplyController {
@Inject @Inject
@@ -65,26 +68,32 @@ public class UnionReimburseApplyController {
private CondolenceTypeService typeService; private CondolenceTypeService typeService;
@At("") @At("/index")
@Ok("beetl:/platform/zhgh/unionReimburse/apply/index.html") @Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/apply/index.html")
@SaCheckLogin @SaCheckPermission("unionReimburse.apply")
public void index() {} public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/dayofficework/unionReimburse/apply/index.html")
@SaCheckPermission("h5.unionReimburse.apply")
public void h5Index() {
}
@At @At
@ApiOperation("保存申请") @ApiOperation("保存申请")
@SaCheckPermission("unionReimburse.apply") @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
@SLog(type = "unionReimburse", tag = "工会报销-报销申请", msg = "保存报销申请") @SLog(type = "unionReimburse", tag = "工会报销-报销申请", msg = "保存报销申请")
public Result save(@Param("data") UnionReimburse unionReimburse) { public Result save(@Param("data") UnionReimburse unionReimburse) {
if(StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now()); if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now());
dao.insertOrUpdate(unionReimburse); dao.insertOrUpdate(unionReimburse);
return Result.success(); return Result.success();
} }
@At @At
@SaCheckLogin
@ApiOperation("提交申请") @ApiOperation("提交申请")
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result submit(@Param("data") UnionReimburse unionReimburse) { public Result submit(@Param("data") UnionReimburse unionReimburse) {
if(StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now()); if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now());
dao.insertOrUpdate(unionReimburse); dao.insertOrUpdate(unionReimburse);
// 开启流程实例 // 开启流程实例
@@ -102,11 +111,11 @@ public class UnionReimburseApplyController {
} }
@At @At
@SaCheckLogin
@ApiOperation("重新提交申请") @ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result submitAgain(@Param("data") UnionReimburse unionReimburse, @Param("taskId") Long taskId) { public Result submitAgain(@Param("data") UnionReimburse unionReimburse, @Param("taskId") Long taskId) {
if(StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now()); if (StrUtil.isBlank(unionReimburse.getId())) unionReimburse.setCreateTime(DateUtil.now());
dao.insertOrUpdate(unionReimburse); dao.insertOrUpdate(unionReimburse);
@@ -133,25 +142,25 @@ public class UnionReimburseApplyController {
@At @At
@ApiOperation("查询用户") @ApiOperation("查询用户")
@SaCheckPermission("unionReimburse.apply") @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
@SLog(type = "unionReimburse", tag = "查询用户", msg = "查询用户") @SLog(type = "unionReimburse", tag = "查询用户", msg = "查询用户")
public Object listUser(String keyword) { public Object listUser(String keyword) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
select select
id, id,
username as userName, username as userName,
loginname as loginName, loginname as loginName,
sex, sex,
mobile, mobile,
technicalTitle, technicalTitle,
IFNULL(unitname, '暂无') as unitName, IFNULL(unitname, '暂无') as unitName,
unitid as unitId, unitid as unitId,
unionid as unionId, unionid as unionId,
unionname as unionName unionname as unionName
from from
vw_user vw_user
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(keyword)) { if (StrUtil.isNotBlank(keyword)) {
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
@@ -159,8 +168,8 @@ public class UnionReimburseApplyController {
seg.or(View_user::getUsername, "like", "%" + keyword + "%"); seg.or(View_user::getUsername, "like", "%" + keyword + "%");
cnd.and(seg); cnd.and(seg);
} }
if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) { if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
if(AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_ADMIN.name(), RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
cnd.and(View_user::getUnionId, "=", SecurityUtil.getUnionId()); cnd.and(View_user::getUnionId, "=", SecurityUtil.getUnionId());
} else { } else {
cnd.and(View_user::getId, "=", SecurityUtil.getUserId()); cnd.and(View_user::getId, "=", SecurityUtil.getUserId());
@@ -174,7 +183,7 @@ public class UnionReimburseApplyController {
@At @At
@ApiOperation("查询职工慰问类型") @ApiOperation("查询职工慰问类型")
@SaCheckLogin @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result queryCondolenceType() { public Result queryCondolenceType() {
List<CondolenceType> list = typeService.query(Cnd.NEW().desc(CondolenceType::getCode)); List<CondolenceType> list = typeService.query(Cnd.NEW().desc(CondolenceType::getCode));
return Result.success(list); return Result.success(list);
@@ -182,7 +191,7 @@ public class UnionReimburseApplyController {
@At @At
@ApiOperation("查询校工会经费余额") @ApiOperation("查询校工会经费余额")
@SaCheckPermission("unionReimburse.apply") @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result getSchoolBudget() { public Result getSchoolBudget() {
OutlayManageSchool outlayManageSchool = dao.fetch(OutlayManageSchool.class, OutlayManageSchool outlayManageSchool = dao.fetch(OutlayManageSchool.class,
Cnd.where("year", "=", DateUtil.year(new Date()))); Cnd.where("year", "=", DateUtil.year(new Date())));
@@ -197,7 +206,7 @@ public class UnionReimburseApplyController {
@At @At
@ApiOperation("查询分工会经费余额") @ApiOperation("查询分工会经费余额")
@SaCheckPermission("unionReimburse.apply") @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result getUnionBalance() { public Result getUnionBalance() {
OutlayManageUnion outlayManageUnion = dao.fetch(OutlayManageUnion.class, OutlayManageUnion outlayManageUnion = dao.fetch(OutlayManageUnion.class,
Cnd.where("unionId", "=", SecurityUtil.getUnionId()).and("year", "=", DateUtil.year(new Date()))); Cnd.where("unionId", "=", SecurityUtil.getUnionId()).and("year", "=", DateUtil.year(new Date())));
@@ -211,7 +220,7 @@ public class UnionReimburseApplyController {
@At @At
@ApiOperation("查询社团经费余额") @ApiOperation("查询社团经费余额")
@SaCheckPermission("unionReimburse.apply") @SaCheckPermission(value = {"unionReimburse.apply", "h5.unionReimburse.apply"}, mode = SaMode.OR)
public Result getClubBudget(@Param("clubId") String clubId) { public Result getClubBudget(@Param("clubId") String clubId) {
// 检查clubId参数是否为空 // 检查clubId参数是否为空
if (StrUtil.isBlank(clubId)) { if (StrUtil.isBlank(clubId)) {
@@ -233,6 +242,4 @@ public class UnionReimburseApplyController {
} }
} }
@@ -1,10 +1,11 @@
package com.budwk.app.zhgh.unionReimburse.controller; package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
@@ -13,10 +14,11 @@ import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService; import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.zhgh.unionReimburse.service.UnionReimburseService; import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
import com.budwk.app.zhgh.unionReimburse.vo.UnionReimburseCollectExcelVO; import com.budwk.app.zhgh.dayofficework.unionReimburse.vo.UnionReimburseCollectExcelVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
@@ -36,6 +38,7 @@ import java.util.List;
@At("/platform/unionReimburse/collect") @At("/platform/unionReimburse/collect")
@Ok("json:full") @Ok("json:full")
@Api("查询统计") @Api("查询统计")
@Slf4j
public class UnionReimburseCollectController { public class UnionReimburseCollectController {
@Inject @Inject
@@ -49,14 +52,20 @@ public class UnionReimburseCollectController {
@Inject @Inject
private UnionReimburseService unionReimburseService; private UnionReimburseService unionReimburseService;
@At("") @At("/index")
@Ok("beetl:/platform/zhgh/unionReimburse/collect/index.html") @Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/collect/index.html")
@SaCheckLogin @SaCheckPermission("unionReimburse.collect")
public void index() {} public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/dayofficework/unionReimburse/collect/index.html")
@SaCheckPermission("h5.unionReimburse.collect")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("unionReimburse.collect") @SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm, public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year, @Param(value = "year") Integer year,
@Param(value = "unionId") String unionId, @Param(value = "unionId") String unionId,
@@ -115,7 +124,7 @@ public class UnionReimburseCollectController {
@At @At
@Ok("void") @Ok("void")
@SaCheckPermission("unionReimburse.collect") @SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR)
@ApiOperation("导出报销汇总表") @ApiOperation("导出报销汇总表")
public void onExport(@Param(value = "year") Integer year, public void onExport(@Param(value = "year") Integer year,
@Param(value = "unionId") String unionId, @Param(value = "unionId") String unionId,
@@ -1,7 +1,8 @@
package com.budwk.app.zhgh.unionReimburse.controller; package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
@@ -9,15 +10,14 @@ import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.staffbenefit.condolence.model.Condolence; import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
import com.budwk.app.zhgh.unionReimburse.service.UnionReimburseService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
@@ -37,6 +37,7 @@ import org.nutz.mvc.annotation.Param;
@At("/platform/unionReimburse/mine") @At("/platform/unionReimburse/mine")
@Api("工会报销我的") @Api("工会报销我的")
@Ok("json:full") @Ok("json:full")
@Slf4j
public class UnionReimburseMineController { public class UnionReimburseMineController {
@Inject @Inject
@@ -44,14 +45,21 @@ public class UnionReimburseMineController {
@Inject @Inject
private FlowEngine flowEngine; private FlowEngine flowEngine;
@At("")
@Ok("beetl:/platform/zhgh/unionReimburse/mine/index.html") @At("/index")
@SaCheckLogin @Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/mine/index.html")
public void index() {} @SaCheckPermission("unionReimburse.mine")
public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/dayofficework/unionReimburse/mine/index.html")
@SaCheckPermission("h5.unionReimburse.mine")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("unionReimburse.mine") @SaCheckPermission(value = {"unionReimburse.mine", "h5.unionReimburse.mine"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm, public Result pageData(PageForm pageForm,
@Param(value = "year") Integer year, @Param(value = "year") Integer year,
@Param(value = "unionId") String unionId, @Param(value = "unionId") String unionId,
@@ -108,8 +116,8 @@ public class UnionReimburseMineController {
@At @At
@ApiOperation("删除") @ApiOperation("删除")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("unionReimburse.mine") @SaCheckPermission(value = {"unionReimburse.mine", "h5.unionReimburse.mine"}, mode = SaMode.OR)
@SLog(type = "unionReimburse", tag = "删除工会报销", msg = "删除工会报销") @SLog( tag = "删除工会报销", msg = "删除工会报销")
public Result delete(@Param("id") String id) { public Result delete(@Param("id") String id) {
unionReimburseService.delete(id); unionReimburseService.delete(id);
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
@@ -1,8 +1,9 @@
package com.budwk.app.zhgh.unionReimburse.controller; package com.budwk.app.zhgh.dayofficework.unionReimburse.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
@@ -10,9 +11,10 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil; import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.unionReimburse.service.UnionReimburseService; import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
@@ -21,7 +23,6 @@ import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List; import java.util.List;
@@ -29,19 +30,27 @@ import java.util.List;
@At("/platform/unionReimburse/review") @At("/platform/unionReimburse/review")
@Ok("json:full") @Ok("json:full")
@Api("审核报销") @Api("审核报销")
@Slf4j
public class UnionReimburseReviewController { public class UnionReimburseReviewController {
@Inject @Inject
private UnionReimburseService unionReimburseService; private UnionReimburseService unionReimburseService;
@At("")
@Ok("beetl:/platform/zhgh/unionReimburse/review/index.html") @At("/index")
@SaCheckLogin @Ok("beetl:/platform/zhgh/dayofficework/unionReimburse/review/index.html")
public void index() {} @SaCheckPermission("unionReimburse.review")
public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/dayofficework/unionReimburse/review/index.html")
@SaCheckPermission("h5.unionReimburse.review")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("unionReimburse.review") @SaCheckPermission(value = {"unionReimburse.review", "h5.unionReimburse.review"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm, public Result pageData(PageForm pageForm,
boolean approval, boolean approval,
Integer year, Integer year,
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.unionReimburse.interceptor; package com.budwk.app.zhgh.dayofficework.unionReimburse.interceptor;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.exception.BaseException;
@@ -11,7 +11,7 @@ import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayMan
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail; import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool; import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion; import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse; import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.json.Json; import org.nutz.json.Json;
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.unionReimburse.model; package com.budwk.app.zhgh.dayofficework.unionReimburse.model;
import cn.hutool.db.DaoTemplate; import cn.hutool.db.DaoTemplate;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
@@ -187,8 +187,8 @@ public class UnionReimburse extends BaseModel {
@Column @Column
@Comment("活动类型(1.分工会,2.校工会,3.社团)") @Comment("活动类型(1.分工会,2.校工会,3.社团)")
@ColDefine(type = ColType.INT, width = 2) @ColDefine(type = ColType.VARCHAR, width = 32)
private Integer activityType; private String activityType;
@Column @Column
@Comment("活动人数") @Comment("活动人数")
@@ -0,0 +1,7 @@
package com.budwk.app.zhgh.dayofficework.unionReimburse.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
public interface UnionReimburseService extends BaseService<UnionReimburse> {
}
@@ -1,10 +1,9 @@
package com.budwk.app.zhgh.unionReimburse.service.impl; package com.budwk.app.zhgh.dayofficework.unionReimburse.service.impl;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse; import com.budwk.app.zhgh.dayofficework.unionReimburse.model.UnionReimburse;
import com.budwk.app.zhgh.unionReimburse.service.UnionReimburseService; import com.budwk.app.zhgh.dayofficework.unionReimburse.service.UnionReimburseService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
@@ -1,4 +1,4 @@
package com.budwk.app.zhgh.unionReimburse.vo; package com.budwk.app.zhgh.dayofficework.unionReimburse.vo;
import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data; import lombok.Data;
@@ -6,6 +6,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
@@ -51,14 +52,21 @@ public class ChildManageManageController {
@Inject @Inject
private SysDictService sysDictService; private SysDictService sysDictService;
@At("")
@At("/index")
@Ok("beetl:/platform/zhgh/staffmanage/childManage/manage/index.html") @Ok("beetl:/platform/zhgh/staffmanage/childManage/manage/index.html")
@SaCheckPermission @SaCheckPermission("childManage.manage")
public void index() {} public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/manage/index.html")
@SaCheckPermission("h5.childManage.manage")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("childManage.manage") @SaCheckPermission(value = {"childManage.manage", "h5.childManage.manage"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm, public Result pageData(PageForm pageForm,
Integer year, Integer year,
String searchName, String searchName,
@@ -114,7 +122,7 @@ public class ChildManageManageController {
@At @At
@ApiOperation("删除子女信息") @ApiOperation("删除子女信息")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("childManage.manage") @SaCheckPermission(value = {"childManage.manage", "h5.childManage.manage"}, mode = SaMode.OR)
@SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}") @SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}")
public Result doDelete(String id) { public Result doDelete(String id) {
childManageService.dao().delete(ChildManage.class, id); childManageService.dao().delete(ChildManage.class, id);
@@ -123,7 +131,7 @@ public class ChildManageManageController {
@At @At
@Ok("void") @Ok("void")
@SaCheckPermission("childManage.manage") @SaCheckPermission(value = {"childManage.manage", "h5.childManage.manage"}, mode = SaMode.OR)
public void doExportExcel(@Param("data") ChildManagePageForm pageForm, HttpServletResponse response) { public void doExportExcel(@Param("data") ChildManagePageForm pageForm, HttpServletResponse response) {
try { try {
Sql sql = childManageService.getSql(pageForm); Sql sql = childManageService.getSql(pageForm);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffmanage.childManage.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
@@ -32,14 +33,20 @@ public class ChildManageMineController {
@Inject @Inject
private ChildManageService childManageService; private ChildManageService childManageService;
@At("") @At("/index")
@Ok("beetl:/platform/zhgh/staffmanage/childManage/mine/index.html") @Ok("beetl:/platform/zhgh/staffmanage/childManage/mine/index.html")
@SaCheckPermission @SaCheckPermission("childManage.mine")
public void index() {} public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/mine/index.html")
@SaCheckPermission("h5.childManage.mine")
public void h5Index() {
}
@At @At
@ApiOperation("分页查询") @ApiOperation("分页查询")
@SaCheckPermission("childManage.mine") @SaCheckPermission(value = {"childManage.mine", "h5.childManage.mine"}, mode = SaMode.OR)
public Result pageData(PageForm pageForm, Integer year) { public Result pageData(PageForm pageForm, Integer year) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
@@ -62,8 +69,8 @@ public class ChildManageMineController {
@At @At
@ApiOperation("删除子女信息") @ApiOperation("删除子女信息")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("childManage.mine") @SaCheckPermission(value = {"childManage.mine", "h5.childManage.mine"}, mode = SaMode.OR)
@SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}") @SLog(tag = "子女信息-我的填报", msg = "删除id: ${args[0]}")
public Result doDelete(String id) { public Result doDelete(String id) {
childManageService.dao().delete(ChildManage.class, id); childManageService.dao().delete(ChildManage.class, id);
return Result.success(); return Result.success();
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.staffmanage.childManage.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
@@ -41,14 +42,20 @@ public class ChildManageWriteController {
private ChildManageService childManageService; private ChildManageService childManageService;
@At("") @At("/index")
@Ok("beetl:/platform/zhgh/staffmanage/childManage/write/index.html") @Ok("beetl:/platform/zhgh/staffmanage/childManage/write/index.html")
@SaCheckPermission @SaCheckPermission("childManage.write")
public void index() {} public void index() {
}
@At("/h5")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/write/index.html")
@SaCheckPermission("h5.childManage.write")
public void h5Index() {
}
@At @At
@ApiOperation("保存子女信息") @ApiOperation("保存子女信息")
@SaCheckPermission("childManage.write") @SaCheckPermission(value = {"childManage.write", "h5.childManage.write"}, mode = SaMode.OR)
@SLog(tag = "子女信息管理-信息填写", msg = "保存子女信息") @SLog(tag = "子女信息管理-信息填写", msg = "保存子女信息")
public Result save(@Param("data") ChildManage childManage) { public Result save(@Param("data") ChildManage childManage) {
if(StrUtil.isBlank(childManage.getId())) childManage.setApplyTime(DateUtil.now()); if(StrUtil.isBlank(childManage.getId())) childManage.setApplyTime(DateUtil.now());
@@ -58,7 +65,7 @@ public class ChildManageWriteController {
@At @At
@ApiOperation("查询用户") @ApiOperation("查询用户")
@SaCheckPermission("childManage.write") @SaCheckPermission(value = {"childManage.write", "h5.childManage.write"}, mode = SaMode.OR)
@SLog(tag = "查询用户", msg = "查询用户") @SLog(tag = "查询用户", msg = "查询用户")
public Object listUser(String keyword) { public Object listUser(String keyword) {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
@@ -98,7 +105,7 @@ public class ChildManageWriteController {
} }
@At @At
@SaCheckLogin @SaCheckPermission(value = {"childManage.write", "h5.childManage.write"}, mode = SaMode.OR)
@ApiOperation("查询身份证是否重复") @ApiOperation("查询身份证是否重复")
public Result getIsRepeatByIdCard(String idCard, String id) { public Result getIsRepeatByIdCard(String idCard, String id) {
int count = childManageService.dao().count(ChildManage.class, int count = childManageService.dao().count(ChildManage.class,
@@ -1,20 +0,0 @@
package com.budwk.app.zhgh.staffmanage.childManage.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.extern.slf4j.Slf4j;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@At("/platform/h5/childManage/manage")
@Ok("json:full")
@Slf4j
public class H5ChildManageManageController {
@At("")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/manage/index.html")
@SaCheckPermission("h5.childManage.manage")
public void index() {}
}
@@ -1,27 +0,0 @@
package com.budwk.app.zhgh.staffmanage.childManage.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.zhgh.staffmanage.childManage.service.ChildManageService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
@IocBean
@At("/platform/h5/childManage/mine")
@Ok("json:full")
@Slf4j
public class H5ChildManageMineController {
@Inject
private ChildManageService childManageService;
@At("")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/mine/index.html")
@SaCheckPermission("h5.childManage.mine")
public void index() {}
}
@@ -1,30 +0,0 @@
package com.budwk.app.zhgh.staffmanage.childManage.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
/**
* @version 1.0
* @Author hqw
* @nameH5ChildManageController
* @Date 2025/9/4 8:52
* @注释
*/
@Slf4j
@IocBean
@Ok("json")
@At("/platform/h5/childManage/write")
public class H5ChildManageWriteController {
@At("")
@Ok("beetl:/platform/zhghh5/staffmanage/childManage/write/index.html")
@SaCheckPermission("h5.childManage.write")
public void index() {
}
}
@@ -1,7 +0,0 @@
package com.budwk.app.zhgh.unionReimburse.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.unionReimburse.model.UnionReimburse;
public interface UnionReimburseService extends BaseService<UnionReimburse> {
}
@@ -105,7 +105,7 @@ const apply = {
watch: { watch: {
applyTime() { applyTime() {
this.$nextTick(async () => { this.$nextTick(async () => {
await this.queryAllowTime() await this.queryAllowDay()
}) })
}, },
}, },
@@ -166,7 +166,7 @@ const apply = {
}, },
async onOpen(row, applyRow = null) { async onOpen(row, applyRow = null) {
this.row = row this.row = row
await this.queryAllowTime() await this.queryAllowDay()
if(applyRow) { if(applyRow) {
this.taskId = applyRow.taskId this.taskId = applyRow.taskId
this.bizId = applyRow.bizId this.bizId = applyRow.bizId
@@ -231,11 +231,11 @@ const apply = {
} }
}, },
// 查询哪些天是开放的 // 查询哪些天是开放的
async queryAllowTime() { async queryAllowDay() {
const days = Array.from(document.querySelectorAll('.div-Calendar')) const days = Array.from(document.querySelectorAll('.div-Calendar'))
.map(el => el.getAttribute('data-day')) .map(el => el.getAttribute('data-day'))
.sort() .sort()
const {data} = await this.$axios.post("/platform/site/apply/queryAllowTime", { const {data} = await this.$axios.post("/platform/site/apply/queryAllowDay", {
siteId: this.row.id, siteId: this.row.id,
startTime: days[0], startTime: days[0],
endTime: days[days.length - 1], endTime: days[days.length - 1],
@@ -254,17 +254,17 @@ const apply = {
}, },
}, },
style: /*language=CSS*/ ` style: /*language=CSS*/ `
.div-Calendar { ::v-deep .div-Calendar {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
} }
.div-Calendar p { ::v-deep .div-Calendar p {
margin: 0; margin: 0;
} }
.el-calendar-day:has(.not-allow-day) { ::v-deep .el-calendar-day:has(.not-allow-day) {
background-color: #F5F5F5; background-color: #F5F5F5;
} }
.el-dialog__body { ::v-deep .el-dialog__body {
padding-top: 0; padding-top: 0;
} }
` `
@@ -3,19 +3,7 @@ layout("/layouts/platform.html"){
#--> #-->
<style> <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> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
@@ -140,7 +140,7 @@ const basicForm = {
style="width: 100%" style="width: 100%"
placeholder="开始时间" placeholder="开始时间"
v-model="row.startTime" v-model="row.startTime"
:picker-options="{ start: '00:00',step: '00:30',end: '24:00'}"> :picker-options="{ start: '00:00',step: '00:30',end: '23:59'}">
</el-time-select> </el-time-select>
</template> </template>
</el-table-column> </el-table-column>
@@ -150,7 +150,7 @@ const basicForm = {
style="width: 100%" style="width: 100%"
placeholder="结束时间" placeholder="结束时间"
v-model="row.endTime" v-model="row.endTime"
:picker-options="{start: '00:00',step: '00:30',end: '24:00',minTime: row.start_time }"> :picker-options="{start: '00:00',step: '00:30',end: '23:59',minTime: row.start_time }">
</el-time-select> </el-time-select>
</template> </template>
</el-table-column> </el-table-column>
@@ -153,9 +153,9 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="活动类型" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'"> <el-descriptions-item label="活动类型" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">
<el-form-item label="活动类型" prop="activityType"> <el-form-item label="活动类型" prop="activityType">
<el-select v-model="formData.activityType" placeholder="请选择活动类型" style="width: 100%"> <el-select v-model="formData.activityType" placeholder="请选择活动类型" style="width: 100%">
<el-option label="分工会活动" value="1"></el-option> <el-option label="分工会活动" value="分工会活动"></el-option>
<el-option label="校工会活动" value="2"></el-option> <el-option label="校工会活动" value="校工会活动"></el-option>
<el-option label="协会(社团)活动" value="3"></el-option> <el-option label="协会(社团)活动" value="协会(社团)活动"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
@@ -216,7 +216,7 @@ layout("/layouts/platform.html"){
<el-form-item prop="files" label="附件"> <el-form-item prop="files" label="附件">
<file-upload <file-upload
:value.sync="formData.files" :value.sync="formData.files"
:upload_number="5" :upload_number="10"
upload_result_category="array" upload_result_category="array"
complete_result complete_result
upload_mode="drag" upload_mode="drag"
@@ -251,7 +251,6 @@ layout("/layouts/platform.html"){
paymentWay: [{required: true, message: '请选择支付方式', trigger: ["change", "blur"]}], paymentWay: [{required: true, message: '请选择支付方式', trigger: ["change", "blur"]}],
reimburseProject: [{required: true, message: '请选择报销项目', trigger: ["change", "blur"]}], reimburseProject: [{required: true, message: '请选择报销项目', trigger: ["change", "blur"]}],
reimburseFundSource: [{required: true, message: '请选择经费来源', trigger: ["change", "blur"]}], reimburseFundSource: [{required: true, message: '请选择经费来源', trigger: ["change", "blur"]}],
mobile: [{required: true, message: '请填写联系方式', trigger: ["change", "blur"]}],
bankUserName: [{required: true, message: '请填写户名', trigger: ["change", "blur"]}], bankUserName: [{required: true, message: '请填写户名', trigger: ["change", "blur"]}],
bankCardNumber: [{required: true, message: '请填写银行账号', trigger: ["change", "blur"]}], bankCardNumber: [{required: true, message: '请填写银行账号', trigger: ["change", "blur"]}],
bankOfDeposit: [{required: true, message: '请填写开户行', trigger: ["change", "blur"]}], bankOfDeposit: [{required: true, message: '请填写开户行', trigger: ["change", "blur"]}],
@@ -349,7 +348,7 @@ layout("/layouts/platform.html"){
this.$axios.post('/platform/unionReimburse/apply/save', {data: JSON.stringify(this.formData)}).then(res => { this.$axios.post('/platform/unionReimburse/apply/save', {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success(res.msg) this.$message.success(res.msg)
window.location.href = '/platform/unionReimburse/mine' window.location.href = '/platform/unionReimburse/mine/index'
} }
}) })
}) })
@@ -375,7 +374,7 @@ layout("/layouts/platform.html"){
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success("提交成功") this.$message.success("提交成功")
window.location.href = '/platform/unionReimburse/mine' window.location.href = '/platform/unionReimburse/mine/index'
} }
}) })
}) })
@@ -402,7 +401,7 @@ layout("/layouts/platform.html"){
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success("提交成功") this.$message.success("提交成功")
window.location.href = '/platform/unionReimburse/mine' window.location.href = '/platform/unionReimburse/mine/index'
} }
}) })
}) })
@@ -126,6 +126,7 @@ layout("/layouts/platform.html"){
}, },
data() { data() {
return { return {
pageDataUrl: "/platform/unionReimburse/collect/pageData",
unionOptions: [], unionOptions: [],
unitOptions: [], unitOptions: [],
userOptions: [], userOptions: [],
@@ -175,7 +176,7 @@ layout("/layouts/platform.html"){
}) })
}, },
onExport() { onExport() {
this.$downLoad(loc() + '/onExport', this.pageForm) this.$downLoad('/platform/unionReimburse/collect/onExport', this.pageForm)
}, },
onRevoke(row) { onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", { this.$confirm("您确定要撤回吗?", "提示", {
@@ -126,6 +126,7 @@ layout("/layouts/platform.html"){
}, },
data() { data() {
return { return {
pageDataUrl: "/platform/unionReimburse/mine/pageData",
unionOptions: [], unionOptions: [],
unitOptions: [], unitOptions: [],
userOptions: [], userOptions: [],
@@ -161,7 +162,7 @@ layout("/layouts/platform.html"){
}) })
}, },
onEdit(row) { onEdit(row) {
window.location.href = '/platform/unionReimburse/apply?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id window.location.href = '/platform/unionReimburse/apply/index?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id
}, },
onRevoke(row) { onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", { this.$confirm("您确定要撤回吗?", "提示", {
@@ -150,6 +150,7 @@ layout("/layouts/platform.html"){
}, },
data() { data() {
return { return {
pageDataUrl: "/platform/unionReimburse/review/pageData",
pageForm: { pageForm: {
approval: false approval: false
}, },
@@ -172,7 +172,7 @@ layout("/layouts/platform.html"){
return age >= 0 ? age : '未出生'; return age >= 0 ? age : '未出生';
}, },
openEdit(row) { openEdit(row) {
window.location.href = '/platform/childManage/write?bizId=' + row.id + '&manage=1' window.location.href = '/platform/childManage/write/index?bizId=' + row.id + '&manage=1'
}, },
doDelete(id) { doDelete(id) {
this.$confirm("您确定要删除吗?", "提示", { this.$confirm("您确定要删除吗?", "提示", {
@@ -119,7 +119,7 @@ layout("/layouts/platform.html"){
return age >= 0 ? age : '未出生'; return age >= 0 ? age : '未出生';
}, },
openEdit(row) { openEdit(row) {
window.location.href = '/platform/childManage/write?bizId=' + row.id window.location.href = '/platform/childManage/write/index?bizId=' + row.id
}, },
doDelete(id) { doDelete(id) {
this.$confirm("您确定要删除吗?", "提示", { this.$confirm("您确定要删除吗?", "提示", {
@@ -309,9 +309,9 @@ layout("/layouts/platform.html"){
if (res.code === 0) { if (res.code === 0) {
this.$message.success(res.msg) this.$message.success(res.msg)
if (GetQueryString('manage') === '1') { if (GetQueryString('manage') === '1') {
window.location.href = '/platform/childManage/manage' window.location.href = '/platform/childManage/manage/index'
}else { }else {
window.location.href = '/platform/childManage/mine' window.location.href = '/platform/childManage/mine/index'
} }
} }
}) })
@@ -8,8 +8,8 @@ layout("/layouts/platform_h5.html"){
} }
.list-card-body { .list-card-body {
width: calc(100% - 140px); /* width: calc(100% - 140px);
display: flex; display: flex;*/
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
} }
@@ -35,6 +35,9 @@ layout("/layouts/platform_h5.html"){
padding: 5px; padding: 5px;
border-radius: 5px; border-radius: 5px;
} }
.list-card-img img{
width: 100%;
}
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
@@ -44,6 +47,7 @@ layout("/layouts/platform_h5.html"){
<year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item> <year-van-dropdown-item :num="5" @change="doSearch" v-model="pageForm.year"></year-van-dropdown-item>
<van-dropdown-item :options="stateList" @change="doSearch" v-model="pageForm.state"></van-dropdown-item> <van-dropdown-item :options="stateList" @change="doSearch" v-model="pageForm.state"></van-dropdown-item>
<van-dropdown-item :options="isEnrolledOptions" @change="doSearch" v-model="pageForm.isEnrolledText"></van-dropdown-item> <van-dropdown-item :options="isEnrolledOptions" @change="doSearch" v-model="pageForm.isEnrolledText"></van-dropdown-item>
<van-dropdown-item :options="activityTypeOptions" @change="doSearch" v-model="pageForm.activity_type"></van-dropdown-item>
</van-dropdown-menu> </van-dropdown-menu>
</van-sticky> </van-sticky>
@@ -115,12 +119,13 @@ layout("/layouts/platform_h5.html"){
loading: false, loading: false,
refreshing: false, refreshing: false,
pageForm: { pageForm: {
state: 2, state: 1,
isEnrolledText: 0, isEnrolledText: 0,
year: new Date().getFullYear(), year: new Date().getFullYear(),
pageNumber: 1, pageNumber: 1,
pageSize: 5, pageSize: 5,
totalCount: 0 totalCount: 0,
activity_type: 40001
}, },
yearList: [], yearList: [],
isEnrolledOptions: [ isEnrolledOptions: [
@@ -134,7 +139,12 @@ layout("/layouts/platform_h5.html"){
], ],
subLoading: false, subLoading: false,
viewShow: false, viewShow: false,
viewData: {} viewData: {},
activityTypeOptions: [
{ value: 40001, text: "校文化活动" },
{ value: 40002, text: "分工会文化活动" },
{ value: 40003, text: "协会文化活动" },
]
} }
}, },
components: { components: {
@@ -301,7 +301,6 @@ layout("/layouts/platform_h5.html"){
<span>取消报名</span> <span>取消报名</span>
<span style="font-size: 12px; margin-top: 5px">{{viewData.applyEndTime}}截止报名</span> <span style="font-size: 12px; margin-top: 5px">{{viewData.applyEndTime}}截止报名</span>
</div> </div>
<div class="bottom-button" v-if="$moment(viewData.endTime).valueOf() < $moment().valueOf()">活动已结束</div> <div class="bottom-button" v-if="$moment(viewData.endTime).valueOf() < $moment().valueOf()">活动已结束</div>
</div> </div>
</div> </div>
@@ -0,0 +1,168 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app">
<!-- 导航栏 -->
<van-nav-bar title="资产盘点" left-text="返回" left-arrow placeholder
@click-left="historyBack" fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
:reverse-color="false"
:show-action="false"
@search="doSearch"
input-align="left"
placeholder="请输入编号或名称搜索"
v-model="pageForm.searchKeyword"
></van-search>
<van-tabs v-model="pageForm.isStocktakingText"
@change="(val)=>{this.pageForm.isStocktaking = 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/asset/stocktaking/pageData" :page_form.sync="pageForm"
ref="tableListRef"
title="assetNumber" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="资产名称">{{row.assetName}}</table-column>
<table-column label="类别名称"> {{row.assetTypeCode===1?'校工会资产':'分工会资产'}}</table-column>
<table-column label="存放地点">{{row.assetStorageLocation}}</table-column>
<table-column label="责任人">{{row.assetUseUserName}}</table-column>
<table-column label="折旧到期日期"> {{$moment(row.assetRetiredAssetsDate).format('YYYY-MM-DD')}}
</table-column>
<table-column label="使用状况">{{row.assetUsageStateName}}</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.isStocktaking"
:disabled="stocktakingPlanOption.length==0
||!pageForm.assetStocktakingPlanId
||!stocktakingPlanOption.find(p=>p.id===pageForm.assetStocktakingPlanId).isShow"
@click="onAudit(row)">
<i class="fa fa-edit"></i>
<span>开始盘点</span>
</div>
<div class="action-btn delete" v-if="row.isStocktaking"
:disabled="stocktakingPlanOption.length==0
||!pageForm.assetStocktakingPlanId
||!stocktakingPlanOption.find(p=>p.id===pageForm.assetStocktakingPlanId).isShow"
@click="onRevoke(row)">
<i class="fa fa-undo"></i>
<span>删除盘点</span>
</div>
</template>
</table-list>
<h5-asset-info ref="h5AssetInfoRef"></h5-asset-info>
<h5-asset-stocktaking-form ref="h5AssetStocktakingFormRef" @save_success="doSearch"></h5-asset-stocktaking-form>
</div>
<script>
<!--#include("info.js"){}#-->
<!--#include("stocktakingForm.js"){}#-->
const vue = new Vue({
el: "#app",
store,
data() {
return {
assetCategoryOption: [],
stocktakingPlanOption: [],
unionList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
isStocktakingText: "0",
isStocktaking: false,
}
}
},
components: {
"h5-asset-info": H5_ASSET_INFO,
"h5-asset-stocktaking-form": H5_ASSET_STOCKTAKING_FORM,
},
methods: {
onRevoke(row) {
this.$dialog.confirm({
title: "提示",
message: "您确定要删除本次盘点信息吗?"
}).then(() => {
this.$axios.post("/platform/asset/stocktaking/doDelete", {
id: row.id,
assetStocktakingPlanId: this.pageForm.assetStocktakingPlanId
}).then(resp => {
if (resp.code === 0) {
this.doSearch()
this.$toast.success(resp.msg)
} else {
this.$toast.fail(resp.msg)
}
})
})
},
onAudit(row) {
row.assetStocktakingPlanId = this.pageForm.assetStocktakingPlanId
this.$refs.h5AssetStocktakingFormRef.onOpen(row)
},
onView(row) {
this.$refs.h5AssetInfoRef.onOpen(row)
},
// 查询资产类别
queryCategory() {
this.$axios.post("/platform/asset/category/queryCategory").then(resp => {
if (resp.code === 0) {
this.assetCategoryOption = resp.data
}
})
},
// 按年度查询资产盘点计划
async queryStocktakingPlan() {
const resp = await this.$axios.post("/platform/asset/stocktakingPlan/queryStocktakingPlan")
if (resp.code === 0) {
resp.data.forEach(v => {
const startDate = this.$moment(v.startDate).format('YYYY-MM-DD')
const endDate = this.$moment(v.endDate).format('YYYY-MM-DD')
v.name = startDate + "至" + endDate + "" + v.year + ""
v.isShow = (this.$moment().format('YYYY-MM-DD hh:mm:ss') > v.startDate && this.$moment().format('YYYY-MM-DD hh:mm:ss') < v.endDate)
})
this.stocktakingPlanOption = resp.data
if (this.stocktakingPlanOption && this.stocktakingPlanOption.length > 0) {
this.$set(this.pageForm, "assetStocktakingPlanId", this.stocktakingPlanOption[0].id)
} else {
this.$set(this.pageForm, "assetStocktakingPlanId", null)
}
this.doSearch()
}
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
},
onReady() {
this.queryCategory()
this.queryStocktakingPlan()
}
},
created() {
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,124 @@
const H5_ASSET_INFO = {
template: /*language=HTML*/ `
<van-action-sheet v-model="visible" title="查看详情" ref="actionSheetRef">
<van-tabs v-model="activeName">
<van-tab title="资产基本信息" name="1">
</van-tab>
<van-tab title="盘点信息" name="2">
</van-tab>
</van-tabs>
<div class="detail-container" v-if="activeName==='1'">
<van-cell-group>
<van-cell title="资产编号">
{{ viewData.assetNumber }}
</van-cell>
<van-cell title="资产名称">
{{ viewData.assetName }}
</van-cell>
<van-cell title="资产类别">
{{viewData.assetCategoryName}}{{viewData.assetDepreciationYear}}年)
</van-cell>
<van-cell title="资产规格型号">
{{viewData.assetSpecs}}
</van-cell>
<van-cell title="供应商名称">
{{viewData.assetSupplierName}}
</van-cell>
<van-cell title="采购方式">
{{viewData.assetFundingSubjectName}}
</van-cell>
<van-cell title="单价(元)">
{{viewData.assetUnitPrice}}
</van-cell>
<van-cell title="数量(台/件)">
{{viewData.assetQuantity}}
</van-cell>
<van-cell title="资产类型">
{{viewData.assetTypeCode===1?'校工会资产':'分工会资产'}}
</van-cell>
<van-cell title="开始使用日期">
{{$moment(viewData.assetUsedDate).format('YYYY-MM-DD')}}
</van-cell>
<van-cell title="预计报废时间">
{{$moment(viewData.assetRetiredAssetsDate).format('YYYY-MM-DD')}}
</van-cell>
<van-cell title="责任人">
{{viewData.assetUseUserName}}
</van-cell>
<van-cell title="使用/管理部门">
{{viewData.assetUseUnionName}}
</van-cell>
<van-cell title="存放地点">
{{viewData.assetStorageLocation}}
</van-cell>
<van-cell title="使用状况">
{{viewData.assetUsageStateName}}
</van-cell>
<van-cell title="备注" class="direction-column-cell">
<div style="white-space: pre">{{viewData.assetNotes}}</div>
</van-cell>
</van-cell-group>
</div>
<div class="detail-container" v-else-if="activeName==='2'">
<template v-for="item in viewData.assetStocktakingList"
v-if="viewData.assetStocktakingList&&viewData.assetStocktakingList.length>0">
<van-cell-group :title="$moment(item.createdAt).format('YYYY-MM-DD HH:mm:ss')">
<van-cell title="原责任人">
{{ item.oldAssetUseUserName }}
</van-cell>
<van-cell title="原使用/管理部门">
{{ item.oldAssetUseUnionName }}
</van-cell>
<van-cell title="原存放地点">
{{ item.oldAssetStorageLocation }}
</van-cell>
<van-cell title="原使用状况">
{{ item.oldAssetUsageStateName }}
</van-cell>
<!-- <van-cell title="操作时间">
{{$moment(item.createdAt).format('YYYY-MM-DD HH:mm:ss')}}
</van-cell>-->
<van-cell title="旧备注" class="direction-column-cell">
<div style="white-space: pre">{{item.oldAssetNotes}}</div>
</van-cell>
<van-cell title="旧资产图片" class="direction-column-cell">
{{item.oldAssetFiles}}
</van-cell>
</van-cell-group>
</template>
<template v-if="viewData.assetStocktakingList&&viewData.assetStocktakingList.length===0">
<van-empty description="暂无数据" ></van-empty>
</template>
</div>
</van-action-sheet>
`,
data() {
return {
visible: false,
viewData: {},
row: null,
activeName: "1",
actionSheetRef: null
}
},
methods: {
// 打开
onOpen(row) {
this.activeName = "1"
this.row = row
this.visible = true
this.getInfo()
},
// 获取申请信息
getInfo() {
this.$axios.post('/platform/asset/manage/fondOneAsset', {id: this.row.id}).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
}
}
@@ -0,0 +1,192 @@
let H5_ASSET_STOCKTAKING_FORM = {
template: /*language=HTML*/ `
<van-action-sheet v-model="visible" title="盘点信息">
<div>
<div class="form-container">
<van-form ref="formRef">
<van-cell-group title="资产信息">
<van-field label="资产编号"
:rules="[{ required: true }]"
v-model="formData.assetNumber"
readonly
required></van-field>
<van-field label="资产名称"
:rules="[{ required: true }]"
v-model="formData.assetName"
readonly
required></van-field>
<van-field label="开始使用日期"
:rules="[{ required: true }]"
v-model="$moment(formData.assetUsedDate).format('YYYY-MM-DD')"
readonly
required></van-field>
<van-field label="存放地点"
:rules="[{ required: true }]"
v-model="formData.assetStorageLocation"
required
name="assetStorageLocation"
placeholder="请输入存放地点"></van-field>
<van-field
v-model="formData.assetUseName"
name="assetUseName"
label="责任人"
required
readonly
:rules="[{ required: true }]"
is-link
placeholder="请输入工号或姓名选择责任人"
@click="assetUseNameShow=true"
></van-field>
<van-action-sheet v-model="assetUseNameShow" title="责任人" class="height100" :close-on-click-overlay="false">
<van-search
v-model="searchKeyword"
:show-action="false"
:reverse-color="false"
input-align="left"
placeholder="请输入工号或姓名选择责任人"
@input="(val) => {searchAssetUseUser(val)}"
@clear="(val) => {searchAssetUseUser(val)}"
shape="round"
></van-search>
<div class="van-action-sheet__content mt5"
v-if="assetUseUserOption && assetUseUserOption.length>0">
<template>
<template v-for="item in assetUseUserOption">
<van-button native-type="button" @click="onUserSelect(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
:rules="[{ required: true }]"
v-model="formData.assetUsageStateName"
label="使用状况"
name="assetUsageStateName"
placeholder="请选择使用状况"
required
is-link
readonly
@click="showAssetUsageStateNamePopup = true"
></van-field>
<van-popup v-model="showAssetUsageStateNamePopup" position="bottom">
<van-picker
show-toolbar
:columns="assetUsageStateNameOption.map(i => i.name)"
@confirm="onAssetUsageStateNameConfirm"
@cancel="showAssetUsageStateNamePopup = false"
></van-picker>
</van-popup>
<van-field label="备注"
v-model="formData.assetNotes"
type="textarea"
name="assetNotes"
rows="4"
autosize
maxlength="150"
class="more-text"
placeholder="请填写备注"></van-field>
</van-cell-group>
<van-cell-group title="附件">
<van-field class="more-text" name="assetFiles"
:rules="[{ required: true,message:'请上传附件' }]"
label=""
required>
<template #input>
<h5-file-upload
slot="input"
:value.sync="formData.assetFiles"
:upload_number="10"
upload_mode="file"
upload_result_category="array"
upload_result_type="url"
complete_result
></h5-file-upload>
</template>
</van-field>
</van-cell-group>
<!-- 按钮区域 -->
<div class="form-actions">
<van-button type="primary" @click="onSubmit">提交</van-button>
</div>
</van-form>
</div>
</div>
</van-action-sheet>
`,
dicts: ["ASSET_USAGE_STATE"],
data() {
return {
visible: false,
viewData: {},
row: null,
formData: {},
assetUsageStateNameOption:[],
showAssetUsageStateNamePopup:false,
assetUseUserOption:[],
assetUseNameShow:false,
searchKeyword:""
}
},
methods: {
// 打开
async onOpen(row) {
this.row = row
this.$set(this.formData, "assetId", row.id)
this.$set(this.formData, "assetStocktakingPlanId", row.assetStocktakingPlanId)
this.$set(this.formData, "assetNumber", row.assetNumber)
this.$set(this.formData, "assetName", row.assetName)
this.$set(this.formData, "assetUsedDate", row.assetUsedDate)
this.$set(this.formData, "assetStorageLocation", row.assetStorageLocation)
this.assetUsageStateNameOption = await this.$businessTool.getDictOptions("ASSET_USAGE_STATE")
this.visible = true
},
onAssetUsageStateNameConfirm(value,index){
this.formData.assetUsageStateName = this.assetUsageStateNameOption[index].name
this.showAssetUsageStateNamePopup=false
},
onUserSelect(o){
this.$set(this.formData, "assetUseUserId", o.id)
this.$set(this.formData, "assetUseName", o.username)
this.assetUseNameShow = false
},
searchAssetUseUser(val) {
$.get("/platform/asset/manage/searchAssetUseUser", {query: val}).then(resp => {
if (resp.code === 0) {
this.assetUseUserOption = resp.data
}
})
},
onSubmit() {
this.$refs.formRef.validate().then(() => {
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
let formData = clone(this.formData)
if (formData.assetFiles) {
formData.assetFiles = JSON.stringify(formData.assetFiles)
}
this.$axios.post("/platform/asset/stocktaking/doSubmit", formData).then(res => {
if (res.code === 0) {
this.$toast(res.msg)
this.visible = false
this.$emit("save_success")
}
})
})
})
},
}
}
@@ -403,7 +403,7 @@ layout("/layouts/platform_h5.html"){
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$toast.success("提交成功") this.$toast.success("提交成功")
pjaxReplace("/platform/h5/enrollmentRegistration/apply/mine") pjaxReplace("/platform/enrollmentRegistration/applyList/h5")
} }
}) })
}).catch(() => { }).catch(() => {
@@ -427,7 +427,7 @@ layout("/layouts/platform_h5.html"){
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$toast.success("提交成功") this.$toast.success("提交成功")
pjaxReplace("/platform/h5/enrollmentRegistration/apply/mine") pjaxReplace("/platform/enrollmentRegistration/applyList/h5")
} }
}) })
}).catch(() => { }).catch(() => {
@@ -454,7 +454,7 @@ layout("/layouts/platform_h5.html"){
}).then(res => { }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$toast.success("提交成功") this.$toast.success("提交成功")
pjaxReplace("/platform/h5/enrollmentRegistration/apply/mine") pjaxReplace("/platform/enrollmentRegistration/applyList/h5")
} }
}) })
}).catch(() => { }).catch(() => {
@@ -79,7 +79,7 @@ layout("/layouts/platform_h5.html"){
this.$refs.h5EnrollmentRegistrationInfoRef.onOpen(row) this.$refs.h5EnrollmentRegistrationInfoRef.onOpen(row)
}, },
onEdit(row) { onEdit(row) {
pjaxReplace('/platform/h5/enrollmentRegistration/apply/index?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id) pjaxReplace('/platform/enrollmentRegistration/apply/h5?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id)
}, },
onDelete(id) { onDelete(id) {
this.$dialog.confirm({ this.$dialog.confirm({
@@ -36,22 +36,26 @@ layout("/layouts/platform_h5.html"){
<i class="fa fa-eye"></i> <i class="fa fa-eye"></i>
<span>查看</span> <span>查看</span>
</div> </div>
<div class="action-btn" @click="onEdit(row)"> <div class="action-btn" @click="onApply(row)">
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
<span>预约</span> <span>预约</span>
</div> </div>
</template> </template>
</table-list> </table-list>
<info ref="infoRef"></info>
<site-apply ref="applyRef"></site-apply>
</div> </div>
<script> <script>
<!--#include('../common/siteInfo.js'){}#-->
<!--#include('../common/apply.js'){}#-->
new Vue({ new Vue({
el: "#app", el: "#app",
store, store,
components: { components: {
"info": siteInfo,
"site-apply": apply,
}, },
data() { data() {
return { return {
@@ -63,9 +67,16 @@ layout("/layouts/platform_h5.html"){
year: new Date().getFullYear(), year: new Date().getFullYear(),
type: null type: null
}, },
typeOptions: [],
} }
}, },
methods: { methods: {
onView(row) {
this.$refs.infoRef.onOpen(row)
},
onApply(row) {
this.$refs.applyRef.onOpen(row)
},
async onReady() { async onReady() {
const typeList = await this.querySiteType() const typeList = await this.querySiteType()
this.typeOptions = [ this.typeOptions = [
@@ -0,0 +1,327 @@
const apply = {
template: /*language=HTML*/ `
<div>
<van-popup v-model:show="visible" :style="{ height: '100%',width: '100%', 'background-color': '#F7F8FA'}" position="right" safe-area-inset-bottom>
<van-nav-bar :title="row.name" left-text="返回" left-arrow @click-left="visible = false" fixed placeholder></van-nav-bar>
<div class="top-calendar">
<div class="calendar-left">
<div :class="getDayClass(item)" @click="dayClick(item)" v-for="item in weekList">
<div class="day-info-week">
{{item.weekdayCN}}
</div>
<div class="day-info-month">
{{$moment(item.day).format('MM-DD')}}
</div>
</div>
</div>
</div>
<div class="container">
<table v-if="weekList.find(o => $moment(o.day).unix() === $moment(selectDate).unix())?.disabled === false" style="width: 100%">
<template v-for="item in allowTimeList">
<tr>
<td class="container-times">{{item.startTime + '-' + item.endTime}}</td>
<td>
<div v-if="item.disabled === true" class="container-state">{{ item.tooltip }}</div>
<div @click="selectTime(item)" v-else class="container-state" style="background-color: #e8ffef; color: #52986a">
<label v-if="(item.dateStr + ' ' + item.startTime + '-' + item.endTime) !== (selected.dateStr + ' ' + selected.startTime + '-' + selected.endTime)">
可预约
</label>
<span v-else>
<van-icon name="passed" size="26" style="line-height: 36px;position: unset"></van-icon>
</span>
</div>
</td>
</tr>
</template>
</table>
<van-empty v-else image="error" :description="selectDate + '不能预约'"></van-empty>
</div>
<div style="position: fixed; bottom: 0; width: 100%">
<van-button @click="onApply" type="primary" color="#246fb4" style="width: 100%">确定预约</van-button>
</div>
</van-popup>
<van-action-sheet v-model="formVisible" title="确认预约信息">
<van-notice-bar left-icon="volume-o"
:text="'您已选择的预约日期为:' + selectDate"></van-notice-bar>
<van-form ref="formRef" class="form-container">
<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.sex" readonly
required name="sex"></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.applyMobile" type="number"
required name="applyMobile"></van-field>
<van-field label="预约时间" :rules="[{ required: true }]" v-model="formData.applyTime"
required readonly name="applyTime"></van-field>
<van-field name="stepper" label="预约人数" required :rules="[{ required: true }]">
<template #input>
<van-stepper
:disabled="row.reserveTarget === 1 || row.reserveTarget === 3"
v-model="formData.joinCount"></van-stepper>
</template>
</van-field>
<van-field
v-model="formData.applyCause"
rows="4"
autosize
label="预约事由"
type="textarea"
maxlength="50"
placeholder="请输入预约事由"
show-word-limit
required
name="applyCause"
:rules="[{ required: true }]"
></van-field>
<div class="form-actions">
<van-button @click="formVisible = false" type="info" plain round>关闭</van-button>
<van-button @click="onSubmit" v-if="!taskId" type="info" round>提交</van-button>
<van-button @click="onFinishTask" type="info" round>提交</van-button>
</div>
</van-form>
</van-action-sheet>
</div>
`,
store,
data() {
return {
taskId: '',
bizId: '',
row: {},
visible: false,
selectDate: '',
selected: {},
weekList: [],
allowDayList: [],
allowTimeList: [],
weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'},
formVisible: false,
formData: {},
}
},
watch: {
},
methods: {
async onOpen(row, applyRow = null) {
this.row = row
this.visible = true
await this.init()
if(applyRow) {
this.taskId = applyRow.taskId
this.bizId = applyRow.bizId
this.applyTime = applyRow.applyDay
this.selectDate = applyRow.applyDay
this.selected = {
dateStr: applyRow.applyDay,
startTime: applyRow.startTime,
endTime: applyRow.endTime,
}
this.formVisible = true
this.formData = clone(applyRow)
this.$set(this.formData, 'applyTime', this.formData.startTime + '-' + this.formData.endTime)
this.$set(this.formData, 'sex', this.$store.state.user.sex)
const day = this.weekList.find(o => o.dateStr === applyRow.applyDay)
if(day) {
await this.dayClick(day)
}
}
},
async init() {
this.selectDate = this.$moment().format('YYYY-MM-DD')
await this.queryAllowDay()
await this.queryTimesByDay()
this.setWeekList(this.selectDate)
},
onApply() {
if(Object.keys(this.selected).length === 0) {
this.$toast('请选择要预约的时间')
return
}
this.$set(this.formData, "applyUserId", this.$store.state.user.id)
this.$set(this.formData, "applyUserName", this.$store.state.user.username)
this.$set(this.formData, "applyLoginName", this.$store.state.user.loginname,)
this.$set(this.formData, "applyUnitId", this.$store.state.user?.unit?.id)
this.$set(this.formData, "applyUnitName", this.$store.state.user?.unit?.name)
this.$set(this.formData, "applyUnionId", this.$store.state.user?.union?.id)
this.$set(this.formData, "applyUnionName", this.$store.state.user?.union?.name)
this.$set(this.formData, "applyMobile", this.$store.state.user.mobile)
this.$set(this.formData, "sex", this.$store.state.user.sex)
this.$set(this.formData, "siteId", this.row.id)
this.$set(this.formData, "applyTime", this.selected.startTime + '-' + this.selected.endTime)
if (this.row.reserveTarget === 1 || this.row.reserveTarget === 3) {
this.$set(this.formData, "joinCount", this.row.maxNum)
} else {
this.$set(this.formData, "joinCount", 1)
}
this.formVisible = true
},
onSubmit() {
this.$refs.formRef.validate().then(() => {
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(async () => {
const res = await this.$axios.post("/platform/site/apply/submit", {
data: JSON.stringify(this.formData),
days: JSON.stringify([this.selected.dateStr])
})
this.$toast(res.msg)
if (res.code === 0) {
this.$pjaxReplace("/platform/site/mine/h5")
}
})
})
},
onFinishTask() {
if (!this.formData.applyTime) {
this.$toast('未选择预约时间')
return
}
this.$refs.formRef.validate().then(() => {
this.$dialog.confirm({
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
this.$axios.post('/platform/site/apply/submitAgain', {
data: JSON.stringify(this.formData),
days: JSON.stringify([this.selected.dateStr]),
taskId: this.taskId
}).then(res => {
this.$toast(res.msg)
if (res.code === 0) {
this.$pjaxReplace("/platform/site/mine/h5")
}
})
})
})
},
selectTime(item) {
if((item.dateStr + ' ' + item.startTime + '-' + item.endTime) !== (this.selected.dateStr + ' ' + this.selected.startTime + '-' + this.selected.endTime)) {
this.$set(this.selected, 'day', item.dateStr)
this.$set(this.selected, 'startTime', item.startTime)
this.$set(this.selected, 'endTime', item.endTime)
} else {
this.selected = {}
}
},
// 获取每天的样式
getDayClass(row) {
let classStr = 'calendar-left-day'
if(row.disabled) {
classStr += ' left-day-disabled'
} else {
classStr += this.$moment(row.day).unix() === this.$moment(this.selectDate).unix() ? ' left-day-active' : ''
}
return classStr
},
// 点击某一天
async dayClick(item) {
this.selectDate = item.dateStr
if(item.disabled) {
this.$toast(this.$moment(item.day).format('YYYY-MM-DD') + '不可预约')
} else {
await this.queryTimesByDay()
}
},
// 获取一周
setWeekList(startDate) {
const start = this.$moment(startDate)
const allowDaySet = new Set(this.allowDayList)
this.weekList = Array.from({ length: 8 }, (_, index) => {
const day = start.clone().add(index, 'd')
const dateStr = day.format('YYYY-MM-DD')
const disabled = this.allowDayList.length > 0 && !allowDaySet.has(dateStr)
const weekdayCN = this.weekdayCNMap[day.day()]
return { day, disabled, weekdayCN, dateStr }
})
},
// 查询哪些天是开放的
async queryAllowDay() {
const startTime = this.weekList.length === 0 ? this.$moment().format('YYYY-MM-DD') : this.weekList[0].dateStr
const endTime = this.weekList.length === 0 ? this.$moment().add(8, 'd').format('YYYY-MM-DD') : this.weekList[this.weekList.length - 1].dateStr
const {data} = await this.$axios.post("/platform/site/apply/queryAllowDay", {
siteId: this.row.id,
startTime: startTime,
endTime: endTime,
})
this.allowDayList = data
},
// 查询时间段
async queryTimesByDay() {
const {data} = await this.$axios.post("/platform/site/apply/queryTimesByDay", {
siteId: this.row.id,
day: this.selectDate,
})
this.allowTimeList = data
},
},
style: /*language=CSS*/ `
::v-deep .top-calendar {
height: 70px;
max-height: 70px;
position: sticky;
top: 0;
left: 0;
width: 100%;
max-width: 100%;
display: flex;
align-items: center;
background-color: #0e78c5;
}
::v-deep .calendar-left {
/*width: calc(100% - 20px);*/
overflow-x: auto;
display: flex;
height: 90%;
}
::v-deep .calendar-left-day {
min-width: 65px;
height: 100%;
margin: 0 5px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #FFF;
border-radius: 10px;
}
::v-deep .left-day-active {
background-color: #0000cc;
}
::v-deep .left-day-disabled {
background-color: lightgrey;
}
::v-deep .container {
background-color: white;
margin: 10px 0;
padding: 10px 0;
overflow-y: auto;
height: calc(100vh - 46px - 70px - 56px - 30px);
}
::v-deep .container-times {
width: 58%;
text-align: center;
}
::v-deep .container-state {
width: 80px;
height: 36px;
line-height: 36px;
text-align: center;
background-color: #f2f2f2;
border-radius: 2px;
color: #929292;
}
::v-deep table {
border-collapse: collapse;
}
`
}
@@ -0,0 +1,76 @@
const applyInfo = {
template:
/*language=HTML*/
`
<van-action-sheet v-model="visible" title="查看详情">
<div class="detail-container">
<van-cell-group title="基本信息">
<van-cell title="预约场地">{{ viewData.siteName }}</van-cell>
<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.applyDay }}</van-cell>
<van-cell title="开始时间">{{ viewData.startTime }}</van-cell>
<van-cell title="结束时间">{{ viewData.endTime }}</van-cell>
<van-cell title="联系电话">{{ viewData.applyMobile }}</van-cell>
<van-cell title="预约人数">{{ viewData.joinCount }}</van-cell>
<van-cell title="预约事由" class="direction-column-cell">{{ viewData.applyCause }}</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.viewData = row
this.getDoneTasks()
},
onClose(){
this.visible = false
},
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,123 @@
const siteInfo = {
template: /*language=HTML*/ `
<div>
<van-action-sheet v-model="visible" title="场地信息">
<div class="detail-container">
<van-cell-group title="基本信息">
<van-cell title="创建人">{{ viewData.createUserName }}</van-cell>
<van-cell title="创建时间">{{ viewData.createTime }}</van-cell>
<van-cell title="场地名称">{{ viewData.name }}</van-cell>
<van-cell title="场地地址" class="direction-column-cell">{{ viewData.address }}</van-cell>
<van-cell title="联系人">{{ viewData.contactName }}</van-cell>
<van-cell title="联系电话">{{ viewData.contactPhone }}</van-cell>
<van-cell title="排序编号">{{ viewData.sortNum }}</van-cell>
<van-cell title="容纳人数">{{ viewData.maxNum }}</van-cell>
<van-cell title="场地类型">{{ viewData.typeName }}</van-cell>
<van-cell title="面向对象">
<span v-if="viewData.reserveTarget === 1">面向分工会</span>
<span v-if="viewData.reserveTarget === 2">面向个人</span>
<span v-if="viewData.reserveTarget === 3">面向集体</span>
</van-cell>
<van-cell title="性别限制">
<span v-if="viewData.sexLimit === 0">不限制</span>
<span v-if="viewData.sexLimit === 1">男</span>
<span v-if="viewData.sexLimit === 2">女</span>
</van-cell>
<van-cell title="开启状态">
<span v-if="viewData.state">开启</span>
<span v-else>禁用</span>
</van-cell>
<van-cell title="排除节假日">
<span v-if="viewData.state">是</span>
<span v-else>否</span>
</van-cell>
<van-cell title="场地介绍" class="direction-column-cell">
<div v-if="viewData.introduce" v-html="viewData.introduce"></div>
<div v-else>暂无场地介绍</div>
</van-cell>
</van-cell-group>
<van-cell-group title="禁用时间" v-if="viewData.notApplyTimeList && viewData.notApplyTimeList.length > 0">
<table class="table-class">
<thead>
<tr>
<th>日期</th>
<th>开始时间</th>
<th>结束时间</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in viewData.notApplyTimeList" :key="index">
<td>{{ item.date }}</td>
<td>{{ item.startTime }}</td>
<td>{{ item.endTime }}</td>
</tr>
</tbody>
</table>
</van-cell-group>
<van-cell-group title="场次" v-if="viewData.openHours && viewData.openHours.length > 0">
<table class="table-class">
<thead>
<tr>
<th>星期</th>
<th>开始时间</th>
<th>结束时间</th>
<th>预约时间单位(小时)</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in viewData.openHours" :key="index">
<td>
<span v-if="item.weekNum === 1">周一</span>
<span v-if="item.weekNum === 2">周二</span>
<span v-if="item.weekNum === 3">周三</span>
<span v-if="item.weekNum === 4">周四</span>
<span v-if="item.weekNum === 5">周五</span>
<span v-if="item.weekNum === 6">周六</span>
<span v-if="item.weekNum === 0">周日</span>
</td>
<td>{{ item.startTime }}</td>
<td>{{ item.endTime }}</td>
<td>{{ item.timeUnit }}</td>
</tr>
</tbody>
</table>
</van-cell-group>
</div>
</van-action-sheet>
</div>
`,
data() {
return {
viewData: {},
visible: false
}
},
methods: {
onOpen(row) {
this.viewData = row
this.visible = true
},
},
style: /*language=CSS*/ `
::v-deep .table-class{
width: 100%;
border-radius: 5px;
overflow: hidden;
line-height: 1.5rem;
font-size: 13px;
table-layout: fixed;
border-collapse: collapse;
}
::v-deep .table-class th {
background-color: #f2f2f2;
border: 1px solid #dddddd;
}
::v-deep .table-class tr {
text-align: center;
border-bottom: 1px solid #dddddd;
}
::v-deep .table-class td {
border: 1px solid #dddddd;
}
`
}
@@ -0,0 +1,154 @@
<!--#
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.siteType" :options="typeOptions" :multiple="false"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
</van-sticky>
<table-list api="/platform/site/mine/pageData" :page_form.sync="pageForm" ref="tableListRef" title="applyUserName" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="场地名称">{{row.siteName}}</table-column>
<table-column label="所属单位">{{row.applyUnitName}}</table-column>
<table-column label="预约日期">{{row.applyDay}}</table-column>
<table-column label="开始时间">{{row.startTime}}</table-column>
<table-column label="结束时间">{{row.endTime}}</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>
<site-apply ref="applyRef"></site-apply>
</div>
<script>
<!--#include('../common/apply.js'){}#-->
<!--#include('../common/info.js'){}#-->
new Vue({
el: "#app",
store,
components: {
info: applyInfo,
"site-apply": apply,
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
year: new Date().getFullYear(),
siteType: null
},
typeOptions: [],
}
},
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.siteType = 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)
},
async onEdit(row) {
const res = await this.$axios.post('/platform/site/manage/info', { id: row.siteId })
this.$refs.applyRef.onOpen(res.data, row)
},
onDelete(id) {
this.$dialog.confirm({
title: "提示",
message: "确定要删除此申请吗?"
})
.then(() => {
this.$axios.post("/platform/site/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 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,189 @@
<!--#
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.siteType" :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/site/schoolUnionAudit/pageData" :page_form.sync="pageForm" ref="tableListRef" title="applyUserName" @ready="onReady">
<template v-slot="{index,row}">
<table-column label="场地名称">{{row.siteName}}</table-column>
<table-column label="所属单位">{{row.applyUnitName}}</table-column>
<table-column label="预约日期">{{row.applyDay}}</table-column>
<table-column label="开始时间">{{row.startTime}}</table-column>
<table-column label="结束时间">{{row.endTime}}</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" 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: applyInfo,
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: '',
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
siteType: null,
},
typeOptions: [],
formData: {},
showApprovalForm: false
}
},
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.siteType = 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 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,942 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style >
</style>
<div id="app" v-cloak>
<van-nav-bar title="报销申请" left-text="返回" left-arrow @click-left="historyBack" placeholder fixed z-index="999"
class="custom-nav"></van-nav-bar>
<div class="form-container">
<van-form ref="formRef" >
<!-- 子女信息 -->
<van-cell-group title="子女信息" class="form-section">
<van-field label="经办人" v-model="formData.userName" placeholder="从信息中心获取" readonly></van-field>
<van-field label="工号" v-model="formData.loginName" placeholder="从信息中心获取" readonly></van-field>
<!-- 报销类别 -->
<van-field
v-model="formData.reimburseTypeName"
name="reimburseTypeName"
label="报销类别"
readonly
placeholder="请选择报销类别"
@click="showReimburseTypePicker = true"
clickable
:rules="[{ required: true }]"
required
></van-field>
<van-popup position="bottom" round v-model:show="showReimburseTypePicker">
<van-picker :columns="reimburseTypeColumns" @cancel="showReimburseTypePicker = false" @confirm="onReimburseTypeConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 支付方式 -->
<van-field
v-model="formData.paymentWayName"
name="paymentWayName"
label="支付方式"
readonly
placeholder="请选择支付方式"
@click="showPaymentWayPicker = true"
clickable
:rules="[{ required: true }]"
required
></van-field>
<van-popup position="bottom" round v-model:show="showPaymentWayPicker">
<van-picker :columns="paymentWayColumns" @cancel="showPaymentWayPicker = false" @confirm="onPaymentWayConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 报销项目 -->
<van-field
v-model="formData.reimburseProjectName"
name="reimburseProjectName"
label="报销项目"
readonly
placeholder="请选择报销项目"
@click="showReimburseProjectPicker = true"
clickable
:rules="[{ required: true }]"
required
></van-field>
<van-popup position="bottom" round v-model:show="showReimburseProjectPicker">
<van-picker :columns="reimburseProjectColumns" @cancel="showReimburseProjectPicker = false" @confirm="onReimburseProjectConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 报销经费来源 -->
<van-field
v-model="formData.reimburseFundSourceName"
name="reimburseFundSourceName"
label="报销经费来源"
readonly
placeholder="请选择报销经费来源"
@click="showReimburseFundSourcePicker = true"
clickable
:rules="[{ required: true }]"
required
></van-field>
<van-popup position="bottom" round v-model:show="showReimburseFundSourcePicker">
<van-picker :columns="reimburseFundSourceColumns" @cancel="showReimburseFundSourcePicker = false" @confirm="onReimburseFundSourceConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 联系方式 -->
<van-field label="联系方式" v-model="formData.mobile" placeholder="请输入联系方式"></van-field>
<!-- 所属社团 (当经费来源为社团时显示) -->
<van-field
v-if="formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'"
label="所属社团"
v-model="formData.clubName"
placeholder="请选择所属社团"
readonly
@click="showClubPicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showClubPicker">
<van-picker :columns="clubColumns" @cancel="showClubPicker = false" @confirm="onClubConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 经费余额 -->
<van-field label="经费余额" v-model="formData.fundBalance" readonly></van-field>
<!-- 银行信息 -->
<van-field label="户名"
v-model="formData.bankUserName"
placeholder="请输入户名"
:rules="[{ required: true }]"
required>
</van-field>
<van-field label="银行账号"
v-model="formData.bankCardNumber"
placeholder="请输入银行账号"
:rules="[{ required: true }]"
required>
</van-field>
<van-field label="开户行"
v-model="formData.bankOfDeposit"
placeholder="请输入开户行"
:rules="[{ required: true }]"
required>
</van-field>
<!-- 将原有的慰问对象字段替换为以下代码 -->
<van-field
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'"
label="慰问对象"
v-model="formData.condolenceName"
placeholder="请输入姓名或工号搜索"
readonly
@click="showCondolenceSearch = true"
clickable
></van-field>
<!-- 添加搜索弹窗 -->
<van-popup v-model:show="showCondolenceSearch" position="bottom" round style="height: 80%;">
<van-search
v-model="condolenceSearchKeyword"
placeholder="请输入姓名或工号"
show-action
@search="searchCondolence"
>
<template #action>
<div @click="searchCondolence">搜索</div>
</template>
</van-search>
<van-list finished-text="没有更多了">
<van-cell
v-for="item in condolenceSearchResults"
:key="item.id"
:title="item.userName+''+item.loginName+''"
:label="item.unitName+' '+item.sex"
@click="selectCondolence(item)"
/>
</van-list>
<div style="padding: 10px;">
<van-button block @click="showCondolenceSearch = false">取消</van-button>
</div>
</van-popup>
<van-field label="联系方式" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'" v-model="formData.condolenceMobile" placeholder="请输入联系方式"></van-field>
<van-field
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'"
v-model="formData.condolenceTypeName"
name="condolenceTypeName"
label="慰问类型"
readonly
placeholder="请选择慰问类型"
@click="showCondolenceTypePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showCondolenceTypePicker">
<van-picker :columns="condolenceTypeColumns" @cancel="showCondolenceTypePicker = false" @confirm="onCondolenceTypeConfirm" show-toolbar></van-picker>
</van-popup>
<van-field label="慰问金额" v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'" v-model="formData.money" readonly></van-field>
<van-field
label="慰问时间"
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'"
v-model="formData.condolenceTime"
placeholder="请选择慰问时间"
readonly
@click="showCondolenceTimePicker = true"
clickable
:rules="[{ required: true }]"
required
></van-field>
<van-popup position="bottom" round v-model:show="showCondolenceTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onCondolenceTimeConfirm"
@cancel="showCondolenceTimePicker = false"
show-toolbar
/>
</van-popup>
</template>
<!-- 活动相关字段 (当报销项目不为慰问时显示) -->
<template v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
<van-field label="活动名称" v-model="formData.activityName" placeholder="请输入活动名称"></van-field>
<!-- 活动类型 (当报销项目为活动时显示) -->
<van-field
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'"
label="活动类型"
v-model="formData.activityType"
placeholder="请选择活动类型"
readonly
@click="showActivityTypePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showActivityTypePicker">
<van-picker :columns="activityTypeColumns" @cancel="showActivityTypePicker = false" @confirm="onActivityTypeConfirm" show-toolbar></van-picker>
</van-popup>
<!-- 活动人数 (当报销项目为活动时显示) -->
<van-field
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'"
label="活动人数"
v-model="formData.activityNumber"
placeholder="请输入活动人数"
type="number"
></van-field>
<van-field label="活动地点" v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'" v-model="formData.activityPlace" placeholder="请输入活动地点"></van-field>
<van-field label="报销金额" v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'" v-model="formData.money" placeholder="请输入报销金额" type="number"></van-field>
<van-field
label="活动时间"
v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'"
v-model="formData.activityTime"
placeholder="请选择活动时间"
readonly
@click="showActivityTimePicker = true"
clickable
></van-field>
<van-popup position="bottom" round v-model:show="showActivityTimePicker">
<van-datetime-picker
type="date"
:min-date="minDate"
:max-date="maxDate"
@confirm="onActivityTimeConfirm"
@cancel="showActivityTimePicker = false"
show-toolbar
/>
</van-popup>
</template>
<!-- 发票信息 (当报销类别为发票时显示) -->
<template v-if="formData.reimburseType === 'UNION_REIMBURSE_TYPE_1'">
<van-field label="发票张数"
v-model="formData.invoiceNumber"
placeholder="请输入发票张数"
type="number"
:rules="[{ required: true }]"
required
>
</van-field>
<van-field label="发票号码"
v-model="formData.invoice"
placeholder="请填写发票号码,如有多个请用逗号分隔"
:rules="[{ required: true }]"
required>
</van-field>
</template>
<!-- 支付内容 -->
<van-field
label="支付内容"
v-model="formData.paymentNotes"
placeholder="请填写支付内容"
type="textarea"
autosize
:rules="[{ required: true }]"
required
></van-field>
<van-field class="more-text" name="files"
label="附件" >
<template #input>
<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>
</template>
</van-field>
</van-cell-group>
</van-cell-group>
<!-- 提交按钮 -->
<div class="form-actions">
<van-button plain @click="onSave" type="info">保存</van-button>
<van-button @click="onSubmit" type="primary" v-if="!taskId">提交</van-button>
<van-button @click="onSubmitAgain" type="primary" v-else>提交1</van-button>
</div>
</van-form>
</div>
</div>
<script>
new Vue({
store,
el: '#app',
dicts: ["UNION_REIMBURSE_TYPE","UNION_REIMBURSE_PROJECT","UNION_REIMBURSE_PAYMENT_WAY","UNION_REIMBURSE_FUND_SOURCE"],
data() {
return {
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
formData: {
username: '',
loginName: '',
userId: '',
unitId: '',
unitName: '',
unionId: '',
unionName: '',
mobile: '',
reimburseType: '', // 存储字典值
reimburseTypeName: '', // 存储显示名称
paymentWay: '', // 存储字典值
paymentWayName: '', // 存储显示名称
reimburseProject: '', // 存储字典值
reimburseProjectName: '',// 存储显示名称
reimburseFundSource: '', // 存储字典值
reimburseFundSourceName: '',// 存储显示名称
clubName: '',
clubId: '',
fundBalance: '',
bankUserName: '',
bankCardNumber: '',
bankOfDeposit: '',
condolenceName: '',
condolenceId: '',
condolenceMobile: '',
condolenceType: '',
condolenceTypeName: '',
money: '',
condolenceTime: '',
activityName: '',
activityType: '',
activityTypeText: '',
activityNumber: '',
activityPlace: '',
activityTime: '',
invoiceNumber: '',
invoice: '',
paymentNotes: '',
files: ''
},
// 报销类别
showReimburseTypePicker: false,
reimburseTypeColumns: [],
// 支付方式
showPaymentWayPicker: false,
paymentWayColumns: [],
// 报销项目
showReimburseProjectPicker: false,
reimburseProjectColumns: [],
// 报销经费来源
showReimburseFundSourcePicker: false,
reimburseFundSourceColumns: [],
// 所属社团
showClubPicker: false,
clubColumns: [],
// 慰问对象
showCondolencePicker: false,
condolenceColumns: [],
// 慰问对象搜索相关
showCondolenceSearch: false,
condolenceSearchKeyword: '',
condolenceSearchResults: [],
// 慰问类型
showCondolenceTypePicker: false,
condolenceTypeColumns: [],
// 活动类型
showActivityTypePicker: false,
activityTypeColumns: [
{ text: '分工会活动', value: '分工会活动' },
{ text: '校工会活动', value: '校工会活动' },
{ text: '协会(社团)活动', value: '协会(社团)活动' }
],
// 其他数据
clubOptions: [],
condolenceOptions: [],
typeOptions: [],
// 添加报销项目原始数据列表
reimburseProjectList: [],
// 添加日期选择器相关变量
showCondolenceTimePicker: false,
showActivityTimePicker: false,
minDate: new Date(2020, 0, 1), // 设置最小日期为2000年1月1日
maxDate: new Date(2030, 11, 31) // 设置最大日期为2030年12月31日
}
},
// 监听报销类别发生变化,报销项目联动改变
// 修复 watch 中的监听器
watch: {
"formData.reimburseType"(newVal) {
// 根据报销类别过滤可选的报销项目
if (newVal === 'UNION_REIMBURSE_TYPE_1') {
// 发票类型的报销项目
this.reimburseProjectColumns = this.reimburseProjectList.filter((o) => {
return ['1', 'UNION_REIMBURSE_TYPE_1'].includes(o.remark)
}).map(item => {
return {value: item.code, text: item.name}
});
} else {
// 其他类型的报销项目
this.reimburseProjectColumns = this.reimburseProjectList.filter((o) => {
return ['1', 'UNION_REIMBURSE_TYPE_2'].includes(o.remark)
}).map(item => {
return {value: item.code, text: item.name}
});
}
},
// 添加对社团选择的监听
"formData.clubId"(newVal) {
// 当经费来源是社团且选择了具体社团时,重新查询余额
if (this.formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3' && newVal) {
this.queryFundBalance();
}
},
// 添加对经费来源的监听
"formData.reimburseFundSource"(newVal) {
// 经费来源改变时查询余额
this.queryFundBalance();
}
},
methods: {
async onSave() {
// 余额校验
if (this.formData.money && this.formData.fundBalance) {
const balance = parseFloat(this.formData.fundBalance);
const money = parseFloat(this.formData.money);
if (balance < money) {
this.$message.warning("经费余额不足");
return;
}
}
// 表单验证
try {
await this.$refs.formRef.validate();
this.$toast.loading({
message: '保存中...',
forbidClick: true,
});
this.$axios.post("/platform/unionReimburse/apply/save", {data: JSON.stringify(this.formData)})
.then((res) => {
this.$toast.clear();
if (res.code === 0) {
this.$toast.success(res.msg);
pjaxReplace('/platform/unionReimburse/mine/h5')
} else {
this.$toast.fail(res.msg || '保存失败');
}
})
.catch(err => {
this.$toast.clear();
this.$toast.fail('网络错误,请稍后重试');
});
} catch (error) {
// 表单验证失败
console.log('表单验证失败', error);
}
},
// 提交
async onSubmit(){
// 余额校验
if (this.formData.money && this.formData.fundBalance) {
const balance = parseFloat(this.formData.fundBalance);
const money = parseFloat(this.formData.money);
if (balance < money) {
this.$message.warning("经费余额不足");
return;
}
}
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: '提示',
message: '您确定要提交吗?',
}).then(() => {
this.$toast.loading({
message: '提交中...',
forbidClick: true,
});
this.$axios.post('/platform/unionReimburse/apply/submit', {data: JSON.stringify(this.formData)})
.then(res => {
this.$toast.clear();
if (res.code === 0) {
this.$toast.success("提交成功");
pjaxReplace('/platform/unionReimburse/mine/h5')
} else {
this.$toast.fail(res.msg || '提交失败');
}
})
.catch(err => {
this.$toast.clear();
this.$toast.fail('网络错误,请稍后重试');
});
}).catch(() => {
// 取消提交
});
} catch (error) {
// 表单验证失败
console.log('表单验证失败', error);
}
},
// 再次提交
async onSubmitAgain() {
// 余额校验
if (this.formData.money && this.formData.fundBalance) {
const balance = parseFloat(this.formData.fundBalance);
const money = parseFloat(this.formData.money);
if (balance < money) {
this.$message.warning("经费余额不足");
return;
}
}
try {
await this.$refs.formRef.validate();
this.$dialog.confirm({
title: '提示',
message: '您确定要提交吗?',
}).then(() => {
this.$toast.loading({
message: '提交中...',
forbidClick: true,
});
this.$axios.post('/platform/unionReimburse/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
this.$toast.clear();
if (res.code === 0) {
this.$toast.success("提交成功");
setTimeout(() => {
pjaxReplace('/platform/unionReimburse/mine/h5')
}, 1500);
} else {
this.$toast.fail(res.msg || '提交失败');
}
}).catch(err => {
this.$toast.clear();
this.$toast.fail('网络错误,请稍后重试');
});
}).catch(() => {
// 取消提交
});
} catch (error) {
// 表单验证失败
console.log('表单验证失败', error);
}
},
onReimburseTypeConfirm(o) {
this.$set(this.formData, "reimburseTypeName", o.text); // 显示名称
this.$set(this.formData, "reimburseType", o.value); // 字典值
this.showReimburseTypePicker = false;
},
onPaymentWayConfirm(o) {
this.$set(this.formData, "paymentWayName", o.text); // 显示名称
this.$set(this.formData, "paymentWay", o.value); // 字典值
this.showPaymentWayPicker = false;
},
onReimburseProjectConfirm(o) {
this.$set(this.formData, "reimburseProjectName", o.text); // 显示名称
this.$set(this.formData, "reimburseProject", o.value); // 字典值
this.showReimburseProjectPicker = false;
},
onReimburseFundSourceConfirm(o) {
this.$set(this.formData, "reimburseFundSourceName", o.text); // 显示名称
this.$set(this.formData, "reimburseFundSource", o.value); // 字典值
this.showReimburseFundSourcePicker = false;
},
onClubConfirm(o) {
this.$set(this.formData, "clubName", o.text);
this.$set(this.formData, "clubId", o.value);
this.showClubPicker = false;
// 选择社团后查询经费余额
this.queryFundBalance();
},
onCondolenceConfirm(o) {
this.$set(this.formData, "condolenceName", o.text);
this.$set(this.formData, "condolenceId", o.value);
this.showCondolencePicker = false;
// 设置联系方式
const selectedUser = this.condolenceOptions.find(user => user.id === o.value);
if (selectedUser) {
this.$set(this.formData, "condolenceMobile", selectedUser.mobile);
}
},
onCondolenceTypeConfirm(o) {
this.$set(this.formData, "condolenceTypeName", o.text);
this.$set(this.formData, "condolenceType", o.value);
this.showCondolenceTypePicker = false;
// 设置慰问金额
const selectedType = this.typeOptions.find(type => type.id === o.value);
if (selectedType) {
this.$set(this.formData, "money", selectedType.money);
}
},
onActivityTypeConfirm(o) {
this.$set(this.formData, "activityTypeText", o.text);
this.$set(this.formData, "activityType", o.value);
this.showActivityTypePicker = false;
},
async initDictOptions() {
// 报销类别
const reimburseTypeData = await this.$businessTool.getDictOptions('UNION_REIMBURSE_TYPE')
this.reimburseTypeColumns = reimburseTypeData.map(item => {
return {value: item.code, text: item.name}
})
// 支付方式
const paymentWayData = await this.$businessTool.getDictOptions('UNION_REIMBURSE_PAYMENT_WAY')
this.paymentWayColumns = paymentWayData.map(item => {
return {value: item.code, text: item.name}
})
// 报销项目
const reimburseProjectData = await this.$businessTool.getDictOptions('UNION_REIMBURSE_PROJECT')
this.reimburseProjectColumns = reimburseProjectData.map(item => {
return {value: item.code, text: item.name}
})
this.reimburseProjectList = reimburseProjectData; // 保存原始数据
// 报销经费来源
const reimburseFundSourceData = await this.$businessTool.getDictOptions('UNION_REIMBURSE_FUND_SOURCE')
this.reimburseFundSourceColumns = reimburseFundSourceData.map(item => {
return {value: item.code, text: item.name}
})
// 添加经费来源区分
await this.filterReimburseFundSources();
},
// 查询慰问对象
queryCondolence(keyword) {
this.$axios.post("/platform/UnionReimburse/apply/listUser", {keyword: keyword}).then((res) => {
if (res.code === 0) {
this.condolenceOptions = res.data;
this.condolenceColumns = res.data.map(item => {
return {
text: item.userName+''+item.loginName+''+''+item.unitName+''+''+item.sex+'',
value: item.id
}
});
}
})
},
// 搜索慰问对象
searchCondolence() {
if (!this.condolenceSearchKeyword) {
this.condolenceSearchResults = [];
return;
}
this.$axios.post("/platform/UnionReimburse/apply/listUser", {
keyword: this.condolenceSearchKeyword
}).then((res) => {
if (res.code === 0) {
this.condolenceSearchResults = res.data;
}
});
},
// 选择慰问对象
selectCondolence(user) {
this.$set(this.formData, "condolenceName", user.userName);
this.$set(this.formData, "condolenceId", user.id);
this.$set(this.formData, "condolenceMobile", user.mobile);
this.showCondolenceSearch = false;
},
// 查询慰问类型
queryCondolenceType() {
this.$axios.post("/platform/unionReimburse/apply/queryCondolenceType")
.then((resp) => {
this.typeOptions = resp.data;
this.condolenceTypeColumns = resp.data.map(item => {
return {text: item.name, value: item.id}
});
})
},
// 慰问时间确认事件
onCondolenceTimeConfirm(value) {
// 格式化日期为 YYYY-MM-DD 格式
this.$set(this.formData, "condolenceTime", this.$moment(value).format("YYYY-MM-DD"));
this.showCondolenceTimePicker = false;
},
// 活动时间确认事件
onActivityTimeConfirm(value) {
// 格式化日期为 YYYY-MM-DD 格式
this.$set(this.formData, "activityTime", this.$moment(value).format("YYYY-MM-DD"));
this.showActivityTimePicker = false;
},
// 查询社团
queryClubs() {
this.$businessTool.listClub().then((res) => {
this.clubOptions = res;
this.clubColumns = res.map(item => {
return {text: item.clubName, value: item.id}
});
})
},
// 查询经费余额
queryFundBalance() {
if (!this.formData.reimburseFundSource) {
this.$set(this.formData, 'fundBalance', '');
return;
}
// 如果是社团经费来源,但没有选择具体社团,则不查询
if (this.formData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3' && !this.formData.clubId) {
this.$set(this.formData, 'fundBalance', '');
return;
}
// 定义API映射关系
const apiMap = {
'UNION_REIMBURSE_FUND_SOURCE_1': {
url: "/platform/unionReimburse/apply/getSchoolBudget",
},
'UNION_REIMBURSE_FUND_SOURCE_2': {
url: "/platform/unionReimburse/apply/getUnionBalance",
},
'UNION_REIMBURSE_FUND_SOURCE_3': {
url: "/platform/unionReimburse/apply/getClubBudget",
}
};
const fundSource = this.formData.reimburseFundSource;
const apiInfo = apiMap[fundSource];
// 如果没有匹配的API,清空经费余额并返回
if (!apiInfo) {
this.$set(this.formData, 'fundBalance', '');
return;
}
// 构造请求参数
const params = {
reimburseFundSource: fundSource
};
// 如果是社团经费,需要传递社团ID
if (fundSource === 'UNION_REIMBURSE_FUND_SOURCE_3' && this.formData.clubId) {
params.clubId = this.formData.clubId;
}
// 显示加载状态
this.$set(this.formData, 'fundBalance', '查询中...');
// 发送请求
this.$axios.post(apiInfo.url, params)
.then(response => {
if (response.code === 0) {
// 显示经费余额(只显示数字,不显示"元")
this.$set(this.formData, 'fundBalance', response.data || '0.00');
} else {
this.$set(this.formData, 'fundBalance', '查询失败');
}
})
.catch(error => {
console.error("经费余额查询失败:", error);
this.$set(this.formData, 'fundBalance', '查询失败');
this.$toast.fail("经费余额查询失败");
});
},
// 添加经费来源区分
async filterReimburseFundSources() {
// 如果是系统管理员或校工会管理员,可以使用所有经费来源
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
// 不需要过滤,使用所有选项
return;
}
const filteredSources = [];
// 根据用户角色过滤经费来源选项
if (this.$auth.hasRoleOr(["SCHOOL_OUTLAY_ADMIN", "SCHOOL_UNION_ADMIN"])) {
this.reimburseFundSourceColumns.map(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_1") {
filteredSources.push(item);
}
});
}
if (this.$auth.hasRoleOr(["BRANCH_UNION_CHAIRMAN", "BRANCH_UNION_ADMIN"])) {
this.reimburseFundSourceColumns.map(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_2") {
filteredSources.push(item);
}
});
}
if (this.$auth.hasRoleOr(["CLUB_MANAGER", "CLUB_PRESIDENT"])) {
this.reimburseFundSourceColumns.map(item => {
if (item.value === "UNION_REIMBURSE_FUND_SOURCE_3") {
filteredSources.push(item);
}
});
}
// 更新经费来源选项
this.reimburseFundSourceColumns = filteredSources;
},
init() {
this.bizId = GetQueryString("bizId")
if (this.bizId) {
this.$axios.post("/platform/unionReimburse/apply/info", { id: this.bizId }).then((res) => {
if (res.code === 0) {
// 先保存原始数据
const originalData = {...res.data};
this.formData = res.data;
// 处理报销类别显示
if (this.reimburseTypeColumns.length > 0 ) {
const matchedReimburseType = this.reimburseTypeColumns.find(item =>
item.value === originalData.reimburseType
)
if (matchedReimburseType) {
this.$set(this.formData, "reimburseTypeName", matchedReimburseType.text)
this.$set(this.formData, "reimburseType", matchedReimburseType.value)
}
}
// 处理支付方式显示
if (this.paymentWayColumns.length > 0) {
const matchedPaymentWay = this.paymentWayColumns.find(item =>
item.value === originalData.paymentWay
)
if (matchedPaymentWay) {
this.$set(this.formData, "paymentWayName", matchedPaymentWay.text)
this.$set(this.formData, "paymentWay", matchedPaymentWay.value)
}
}
// 处理报销项目显示
if (this.reimburseProjectColumns.length > 0 ) {
const matchedReimburseProject = this.reimburseProjectColumns.find(item =>
item.value === originalData.reimburseProject
)
if (matchedReimburseProject) {
this.$set(this.formData, "reimburseProjectName", matchedReimburseProject.text)
this.$set(this.formData, "reimburseProject", matchedReimburseProject.value)
}
}
// 处理报销经费来源显示
if (this.reimburseFundSourceColumns.length > 0 ) {
const matchedReimburseFundSource = this.reimburseFundSourceColumns.find(item =>
item.value === originalData.reimburseFundSource
)
if (matchedReimburseFundSource) {
this.$set(this.formData, "reimburseFundSourceName", matchedReimburseFundSource.text)
this.$set(this.formData, "reimburseFundSource", matchedReimburseFundSource.value)
}
}
// 处理活动类型显示
if (this.activityTypeColumns.length > 0 ) {
const matchedActivityType = this.activityTypeColumns.find(item =>
item.value === originalData.activityType
)
if (matchedActivityType) {
this.$set(this.formData, "activityTypeText", matchedActivityType.text)
this.$set(this.formData, "activityType", matchedActivityType.value)
}
}
// 处理社团显示
if (this.clubColumns.length > 0 ) {
const matchedClub = this.clubColumns.find(item =>
item.value === originalData.clubId
)
if (matchedClub) {
this.$set(this.formData, "clubName", matchedClub.text)
}
}
// 处理慰问类型显示
if (this.condolenceTypeColumns.length > 0 ) {
const matchedCondolenceType = this.condolenceTypeColumns.find(item =>
item.value === originalData.condolenceType
)
if (matchedCondolenceType) {
this.$set(this.formData, "condolenceTypeName", matchedCondolenceType.text)
}
}
// 查询经费余额
if (this.formData.reimburseFundSource) {
this.queryFundBalance();
}
}
})
} else {
const user = this.$store.state.user
this.$set(this.formData, "userName", user.username)
this.$set(this.formData, "loginName", user.loginname)
this.$set(this.formData, "mobile", user.mobile)
this.$set(this.formData, "userId", user.id)
this.$set(this.formData, "unitId", user.unitId)
this.$set(this.formData, "unitName", user.unit.name)
this.$set(this.formData, "unionId", user.union.id)
this.$set(this.formData, "unionName", user.union.name)
}
}
},
async created() {
await this.initDictOptions();
await this.init();
this.queryCondolenceType();
this.queryClubs();
}
});
</script>
<!--#
}
#-->
@@ -0,0 +1,149 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="报销统计" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
:reverse-color="false"
:show-action="false"
@search="doSearch"
input-align="left"
placeholder="请输入经办人搜索"
v-model="pageForm.userName"
></van-search>
<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-menu>
</van-sticky>
<table-list api="/platform/unionReimburse/collect/pageData" :page_form.sync="pageForm" ref="tableListRef"
@ready="doSearch" title="taskName">
<template v-slot="{index,row}">
<table-column label="经办人">{{row.userName}}</table-column>
<table-column label="所属工会">{{row.unionName}}</table-column>
<table-column label="所属单位">{{row.unitName}}</table-column>
<table-column label="报销类别">
<dict-tag :options="dict.type.UNION_REIMBURSE_TYPE"
:value="row.reimburseType">
</dict-tag>
</table-column>
<table-column label="报销项目">
<dict-tag :options="dict.type.UNION_REIMBURSE_PROJECT"
:value="row.reimburseProject">
</dict-tag>
</table-column>
<table-column label="金额">{{row.money}}</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" v-if="row.canRevoke" @click="onRevoke(item)">
<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>
<union-reimburse-info ref="unionReimburseInfoRef"></union-reimburse-info>
</div>
<script>
<!--#include('../info.js'){}#-->
const vue = new Vue({
el: "#app",
store,
dicts: ["UNION_REIMBURSE_TYPE","UNION_REIMBURSE_PROJECT"],
components: {
"union-reimburse-info":UNION_REIMBURSE_INFO
},
data() {
return {
viewShow: false,
yearList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: "",
year: "",
},
infoShow: false
}
},
methods: {
onView(row) {
this.showApprovalForm = false
this.$refs.unionReimburseInfoRef.onOpen(row)
},
onEdit(row) {
this.$pjaxReplace("/platform/unionReimburse/apply/h5?bizId=" + row.id + "&taskId=" + row.startTaskId)
},
onRevoke(row){
this.$dialog
.confirm({
title: "提示",
message: "您确定要撤销申请吗?"
})
.then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.startTaskId}).then((resp) => {
this.$toast.success(resp.msg)
this.doSearch()
})
})
},
onDelete(row) {
this.$dialog
.confirm({
title: "提示",
message: "您确定要删除吗?"
})
.then(() => {
this.$axios.post("/platform/unionReimburse/mine/delete", {id: row.id}).then((resp) => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
},
initData() {
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)
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,163 @@
const UNION_REIMBURSE_INFO = {
template:
/*language=HTML*/`
<van-action-sheet v-model="visible" title="查看详情">
<div class="detail-container">
<van-cell-group title="报销申请">
<van-cell title="经办人">{{ viewData.userName }}</van-cell>
<van-cell title="工号">{{ viewData.loginName }}</van-cell>
<van-cell title="单位">{{ viewData.unitName }}</van-cell>
<van-cell title="工会">{{ viewData.unionName }}</van-cell>
<van-cell title="报销类别">
<dict-tag :options="dict.type.UNION_REIMBURSE_TYPE"
:value="viewData.reimburseType">
</dict-tag></van-cell>
<van-cell title="支付方式">
<dict-tag :options="dict.type.UNION_REIMBURSE_PAYMENT_WAY"
:value="viewData.paymentWay">
</dict-tag></van-cell>
<van-cell title="报销项目">
<dict-tag :options="dict.type.UNION_REIMBURSE_PROJECT"
:value="viewData.reimburseProject">
</dict-tag></van-cell>
<van-cell title="报销经费来源">
<dict-tag :options="dict.type.UNION_REIMBURSE_FUND_SOURCE"
:value="viewData.reimburseFundSource">
</dict-tag></van-cell>
<van-cell title="联系方式">{{ viewData.mobile }}</van-cell>
<van-cell title="所属社团" v-if="viewData.reimburseFundSource === 'UNION_REIMBURSE_FUND_SOURCE_3'">{{ viewData.clubName }}</van-cell>
<van-cell title="经费余额">{{ viewData.fundBalance }}</van-cell>
<van-cell title="户名">{{ viewData.bankUserName }}</van-cell>
<van-cell title="银行账号">{{ viewData.bankCardNumber }}</van-cell>
<van-cell title="开户行">{{ viewData.bankOfDeposit }}</van-cell>
<van-cell title="慰问对象" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.condolenceName }}</van-cell>
<van-cell title="联系方式" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.condolenceMobile }}</van-cell>
<van-cell title="慰问类型" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.typeName }}</van-cell>
<van-cell title="慰问金额" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.money }}</van-cell>
<van-cell title="慰问时间" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.condolenceTime }}</van-cell>
<van-cell title="活动名称" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.activityName }}</van-cell>
<van-cell title="活动类型" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">{{ viewData.activityType }}</van-cell>
<van-cell title="活动人数" v-if="viewData.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">{{ viewData.activityNumber }}</van-cell>
<van-cell title="活动地点" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.activityPlace }}</van-cell>
<van-cell title="报销金额" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.money }}</van-cell>
<van-cell title="活动时间" v-if="viewData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">{{ viewData.activityTime }}</van-cell>
<van-cell title="发票张数" v-if="viewData.reimburseType === 'UNION_REIMBURSE_TYPE_1'">{{ viewData.invoiceNumber }}</van-cell>
<van-cell title="发票号码" v-if="viewData.reimburseType === 'UNION_REIMBURSE_TYPE_1'">{{ viewData.invoice }}</van-cell>
<van-cell title="支付内容">{{ viewData.paymentNotes }}</van-cell>
<van-cell title="附件">
<div style="display: flex; flex-wrap: wrap;">
<template v-for="(item,index) in viewData.files">
<div v-if="item.url" :key="index" @click="previewOptionImg(viewData.files,index)" style="margin-right: 10px; margin-bottom: 10px;">
<van-icon name="description" /> {{ getFileName(item.name) }}
</div>
</template>
</div>
</van-cell>
</van-cell-group>
<template v-for="(task,index) in doneTasks">
<div class="process-title">
{{ task.displayName }}
</div>
<van-cell-group 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 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">
<template #label>
{{
task.taskFormData.opinion
}}
</template>
</van-cell>
<van-cell title="签字" v-if="!task.ext.isFirstTaskNode">
<van-image :src="task.ext.tf_userSign"
v-if="task.ext.tf_userSign"
class="signature-image"></van-image>
</van-cell>
</van-cell-group>
</template>
</div>
<slot></slot>
</van-action-sheet>
`,
dicts: ["UNION_REIMBURSE_TYPE", "UNION_REIMBURSE_PAYMENT_WAY", "UNION_REIMBURSE_FUND_SOURCE","UNION_REIMBURSE_PROJECT","PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
visible:false,
viewData: {},
doneTasks: [],
row: null,
}
},
methods: {
// 获取文件名
getFileName(url) {
if (!url) return '';
const fileName = url.split('/').pop();
return fileName.length > 15 ? fileName.substring(0, 15) + '...' : fileName;
},
//预览文件
previewOptionImg(files, index) {
const file = files[index];
if (!file || !file.url) return;
// 所有文件都在新窗口打开
window.open(file.url, '_blank');
},
onOpen(row) {
this.row = row
this.visible = true
this.getInfo()
this.getDoneTasks()
},
// 关闭
onClose(){
this.visible = false
},
// 获取申请信息
getInfo() {
this.$axios.post("/platform/unionReimburse/apply/info", {id: this.row.id}).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
// 查看
openView(id) {
this.$nextTick(() => {
this.$refs.infoDialogRef.onOpen(id)
})
},
// 获取已办任务审批记录
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
},
}
@@ -0,0 +1,141 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="我的报销" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<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-menu>
</van-sticky>
<table-list api="/platform/unionReimburse/mine/pageData" :page_form.sync="pageForm" ref="tableListRef"
@ready="doSearch" title="taskName">
<template v-slot="{index,row}">
<table-column label="经办人">{{row.userName}}</table-column>
<table-column label="所属工会">{{row.unionName}}</table-column>
<table-column label="所属单位">{{row.unitName}}</table-column>
<table-column label="报销类别">
<dict-tag :options="dict.type.UNION_REIMBURSE_TYPE"
:value="row.reimburseType">
</dict-tag>
</table-column>
<table-column label="报销项目">
<dict-tag :options="dict.type.UNION_REIMBURSE_PROJECT"
:value="row.reimburseProject">
</dict-tag>
</table-column>
<table-column label="金额">{{row.money}}</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" v-if="row.canRevoke" @click="onRevoke(row)">
<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>
<union-reimburse-info ref="unionReimburseInfoRef"></union-reimburse-info>
</div>
<script>
<!--#include('../info.js'){}#-->
const vue = new Vue({
el: "#app",
store,
dicts: ["UNION_REIMBURSE_TYPE","UNION_REIMBURSE_PROJECT"],
components: {
"union-reimburse-info":UNION_REIMBURSE_INFO
},
data() {
return {
viewShow: false,
yearList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: "",
year: "",
},
infoShow: false
}
},
methods: {
onView(row) {
this.showApprovalForm = false
this.$refs.unionReimburseInfoRef.onOpen(row)
},
onEdit(row) {
this.$pjaxReplace('/platform/unionReimburse/apply/h5?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id)
},
onRevoke(row){
this.$dialog
.confirm({
title: "提示",
message: "您确定要撤销申请吗?"
})
.then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.startTaskId}).then((resp) => {
this.$toast.success(resp.msg)
this.doSearch()
})
})
},
onDelete(row) {
this.$dialog
.confirm({
title: "提示",
message: "您确定要删除吗?"
})
.then(() => {
this.$axios.post("/platform/unionReimburse/mine/delete", {id: row.id}).then((resp) => {
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
},
initData() {
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)
},
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,175 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<div id="app" v-cloak>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="报销审核" placeholder fixed></van-nav-bar>
<van-sticky offset-top="46px">
<van-search
:reverse-color="false"
:show-action="false"
@search="doSearch"
input-align="left"
placeholder="请输入经办人搜索"
v-model="pageForm.userName"
></van-search>
<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/unionReimburse/review/pageData" :page_form.sync="pageForm" ref="tableListRef"
@ready="doSearch" title="curTaskName">
<template v-slot="{index,row}">
<table-column label="经办人">{{row.userName}}</table-column>
<table-column label="所属工会">{{row.unionName}}</table-column>
<table-column label="所属单位">{{row.unitName}}</table-column>
<table-column label="报销类别">
<dict-tag :options="dict.type.UNION_REIMBURSE_TYPE"
:value="row.reimburseType">
</dict-tag>
</table-column>
<table-column label="报销项目">
<dict-tag :options="dict.type.UNION_REIMBURSE_PROJECT"
:value="row.reimburseProject">
</dict-tag>
</table-column>
<table-column label="金额">{{row.money}}</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="onAudit(row)">
<i class="fa fa-edit"></i>
<span>审核</span>
</div>
</template>
</table-list>
<union-reimburse-info ref="unionReimburseInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
校工会审核
</div>
<div class="form-container">
<van-form ref="formRef">
<van-cell-group title="审批意见">
<van-field label=""
:rules="[{ required: true,message:'请填审批意见' }]"
v-model="formData.tf_opinion"
required
type="textarea"
name="tf_opinion"
rows="4"
autosize
class="more-text"
placeholder="请填审批意见"></van-field>
</van-cell-group>
<van-cell-group title="电子签名" class="form-section">
<van-field class="more-text" name="tf_userSign" label="">
<template #input>
<h5-signature v-model="formData.tf_userSign" slot="input"></h5-signature>
</template>
</van-field>
</van-cell-group>
<!-- 按钮区域 -->
<div class="form-actions">
<van-button @click="handleTaskAction(6)">退回到发起人</van-button>
<van-button type="danger" @click="handleTaskAction(2)">拒绝申请</van-button>
<van-button type="primary" @click="handleTaskAction(1)">同意申请</van-button>
</div>
</van-form>
</div>
</div>
</union-reimburse-info>
</div>
<script>
<!--#include('../info.js'){}#-->
const vue = new Vue({
el: "#app",
store,
dicts: ["UNION_REIMBURSE_TYPE","UNION_REIMBURSE_PROJECT"],
components: {
"union-reimburse-info":UNION_REIMBURSE_INFO
},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchKeyword: "",
approvalText: "0",
approval: false,
year: new Date().getFullYear(),
},
formData: {},
showApprovalForm: false,
infoShow: false
}
},
methods: {
handleTaskAction(val) {
this.$refs.formRef.validate().then(() => {
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.$toast.success("提交成功")
this.doSearch()
this.$refs.unionReimburseInfoRef.onClose()
}
})
}).catch(() => {
// on cancel
});
}).catch();
},
onView(row) {
this.showApprovalForm = false
this.$refs.unionReimburseInfoRef.onOpen(row)
},
onAudit(row) {
this.showApprovalForm = true
this.formData = {
tf_opinion: null,
tf_userSign: null,
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.$refs.unionReimburseInfoRef.onOpen(row)
},
doSearch() {
this.$nextTick(() => {
this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0
this.$refs.tableListRef.doSearch()
})
},
},
created() {
}
})
</script>
<!--#
}
#-->
@@ -95,7 +95,6 @@ layout("/layouts/platform_h5.html"){
pageSize: 10, pageSize: 10,
totalCount: 0, totalCount: 0,
searchKeyword: '', searchKeyword: '',
name: null,
approvalText: "0", approvalText: "0",
approval: false, approval: false,
year: new Date().getFullYear(), year: new Date().getFullYear(),
@@ -95,7 +95,6 @@ layout("/layouts/platform_h5.html"){
pageSize: 10, pageSize: 10,
totalCount: 0, totalCount: 0,
searchKeyword: '', searchKeyword: '',
name: null,
approvalText: "0", approvalText: "0",
approval: false, approval: false,
year: new Date().getFullYear(), year: new Date().getFullYear(),
@@ -94,7 +94,7 @@ layout("/layouts/platform_h5.html"){
}) })
}, },
onEdit(row) { onEdit(row) {
window.location.href = '/platform/h5/childManage/write?bizId=' + row.id window.location.href = '/platform/childManage/write/h5?bizId=' + row.id
}, },
onDelete(id) { onDelete(id) {
this.$dialog.confirm({ this.$dialog.confirm({
@@ -87,14 +87,14 @@ layout("/layouts/platform_h5.html"){
}) })
}, },
onEdit(row) { onEdit(row) {
window.location.href = '/platform/h5/childManage/write?bizId=' + row.id window.location.href = '/platform/childManage/write/h5?bizId=' + row.id
}, },
onDelete(id) { onDelete(row) {
this.$dialog.confirm({ this.$dialog.confirm({
title: '温馨提示', title: '温馨提示',
message: '您确定要删除吗?', message: '您确定要删除吗?',
}).then(() => { }).then(() => {
this.$axios.post("/platform/childManage/mine/doDelete", {id}).then((res) => { this.$axios.post("/platform/childManage/mine/doDelete", {id: row.id}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.$toast.success(res.msg) this.$toast.success(res.msg)
this.doSearch() this.doSearch()
@@ -22,7 +22,7 @@ layout("/layouts/platform_h5.html"){
name="childrenGrade" name="childrenGrade"
label="就读年级" label="就读年级"
readonly readonly
placeholder="请点击就读年级" placeholder="请选择就读年级"
@click="showChildrenGradePicker = true" @click="showChildrenGradePicker = true"
clickable clickable
></van-field> ></van-field>
@@ -208,7 +208,7 @@ layout("/layouts/platform_h5.html"){
this.$axios.post("/platform/childManage/write/save", { data: JSON.stringify(submitData) }).then(res => { this.$axios.post("/platform/childManage/write/save", { data: JSON.stringify(submitData) }).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$toast(res.msg) this.$toast(res.msg)
this.$pjaxReplace('/platform/h5/childManage/mine') this.$pjaxReplace('/platform/childManage/mine/h5')
} }
}) })
}) })