From 50aa04192ac2b27886d771cf92b8207c9c7e241b Mon Sep 17 00:00:00 2001 From: Paidax Date: Thu, 27 Mar 2025 15:38:56 +0800 Subject: [PATCH] commit --- .../v/nutz/base/utils/CommonDownloadUtil.java | 92 + src/main/java/io/v/nutz/sys/models/User.java | 11 + .../basic/ActivityBasicScopeController.java | 10 +- .../union/ActivityAuditController.java | 7 + .../ActivityUnionApplyUserController.java | 12 +- .../union/ActivityUnionManageController.java | 5 + ...ActivityUnionUserStatisticsController.java | 34 +- .../zhgh/activity/models/ActivityTissue.java | 13 +- .../impl/ActivityTissueServiceImpl.java | 16 +- .../v/nutz/zhgh/data/constant/SourceData.java | 23 +- .../service/impl/SourceUserServiceImpl.java | 37 +- .../ActivityReimbursementApplyController.java | 39 +- .../UnionActivityRegisterController.java | 26 +- .../qsv/controller/QsvQuizRankController.java | 2 +- .../qsv/h5controller/H5QsvQuizController.java | 46 +- .../service/impl/QsvQuizRankServiceImpl.java | 3 +- .../service/impl/QsvSurveyServiceImpl.java | 14 +- .../impl/QsvUserAnswerRecordServiceImpl.java | 8 +- .../SourceChangeManageController.java | 4 +- .../impl/SourceChangeManageServiceImpl.java | 4 +- .../assets/platform/js/util/commonUtil.js | 92 + .../platform/module/activity/initMap.js | 9 +- .../assets/platform/plugins/axios/axios.js | 3280 +++++++++++++++++ .../components/activity/school/tissueInfo.vue | 623 ++-- .../resources/views/layouts/platform.html | 5 + .../unionActivity/common/activityInfo.html | 6 +- .../activity/unionActivity/common/initMap.js | 16 +- .../activity/unionActivity/myActivity.html | 2 +- .../mobile/activity/unionActivity/sign.html | 73 +- .../activity/unionActivity/singleReg.html | 99 +- .../activity/unionActivity/unionReg.html | 246 +- src/main/resources/views/mobile/platform.html | 8 +- .../views/mobile/qsv/quiz/index.html | 58 +- .../views/mobile/qsv/quiz/result.html | 31 +- .../activity/union/applyActivity.html | 45 +- .../activity/union/layoutActivity.html | 10 +- .../activity/union/layoutApplyUser.html | 31 +- .../union/layoutStatisticsActivity.html | 3 +- .../platform/jf/reimbursement/apply.html | 10 +- .../change/common/memberAllChangeInfo.js | 13 +- .../change/common/memberChangeAuditInfo.js | 2 +- .../platform/member/common/memberInfo.js | 8 +- .../views/platform/qsv/quiz/rank.html | 2 +- .../views/platform/qsv/survey/answer.js | 2 +- .../views/platform/qsv/survey/index.html | 6 +- .../platform/sourcechange/manage/index.html | 19 +- .../sourcechange/manage/userChangeInfo.js | 19 +- 47 files changed, 4438 insertions(+), 686 deletions(-) create mode 100644 src/main/java/io/v/nutz/base/utils/CommonDownloadUtil.java create mode 100644 src/main/resources/static/assets/platform/plugins/axios/axios.js diff --git a/src/main/java/io/v/nutz/base/utils/CommonDownloadUtil.java b/src/main/java/io/v/nutz/base/utils/CommonDownloadUtil.java new file mode 100644 index 0000000..fd153c5 --- /dev/null +++ b/src/main/java/io/v/nutz/base/utils/CommonDownloadUtil.java @@ -0,0 +1,92 @@ +/* + * Copyright [2022] [https://www.xiaonuo.vip] + * + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +package io.v.nutz.base.utils; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.URLUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; + +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; + +/** + * 文件下载工具类,使用本类前,对参数校验的异常使用CommonResponseUtil.renderError()方法进行渲染 + * + * @author xuyuxiang + * @date 2020/8/5 21:45 + */ +@Slf4j +public class CommonDownloadUtil { + + /** + * 下载文件 + * + * @param file 要下载的文件 + * @param response 响应 + * @author xuyuxiang + * @date 2020/8/5 21:46 + */ + public static void download(File file, HttpServletResponse response) { + download(file.getName(), FileUtil.readBytes(file), response); + } + + /** + * 下载文件 + * + * @param fileName + * @param workbook + * @param response + */ + public static void download(String fileName, Workbook workbook, HttpServletResponse response) { + ByteArrayOutputStream byteOs = new ByteArrayOutputStream(); + try { + workbook.write(byteOs); + } catch (IOException e) { + e.printStackTrace(); + log.error(">>> 文件下载异常:", e); + } finally { + try { + workbook.close(); + } catch (IOException e) { + e.printStackTrace(); + } + IoUtil.close(byteOs); + } + download(fileName, byteOs.toByteArray(), response); + } + + /** + * 下载文件 + * + * @author xuyuxiang + * @date 2022/7/31 10:57 + */ + public static void download(String fileName, byte[] fileBytes, HttpServletResponse response) { + try { + response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode(fileName)); + response.addHeader("Content-Length", "" + fileBytes.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setContentType("application/octet-stream;charset=UTF-8"); + IoUtil.write(response.getOutputStream(), true, fileBytes); + } catch (IOException e) { + log.error(">>> 文件下载异常:", e); + } + } + + +} diff --git a/src/main/java/io/v/nutz/sys/models/User.java b/src/main/java/io/v/nutz/sys/models/User.java index 7f274ea..acd443f 100644 --- a/src/main/java/io/v/nutz/sys/models/User.java +++ b/src/main/java/io/v/nutz/sys/models/User.java @@ -5,6 +5,8 @@ import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.Column; import org.nutz.dao.entity.annotation.View; +import java.util.Date; + /** * 视图中的user * @@ -127,13 +129,22 @@ public class User { @Column private String campusName; + @Column private String activityUnionId; + @Column private String activityUnitId; + @Column private String weAppOpenid; + @Column private String threeUnitId; + @Column + private String schoolTime; + + @Column + private Date retireDate; } diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/basic/ActivityBasicScopeController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/basic/ActivityBasicScopeController.java index ff4bc95..e049b8d 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/basic/ActivityBasicScopeController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/basic/ActivityBasicScopeController.java @@ -235,11 +235,11 @@ public class ActivityBasicScopeController { $condition """); Cnd cnd = Cnd.NEW(); - if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) { - if (ShiroUtil.hasAnyRoles(new String[]{"H04", "club01"})) { - cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id")); - } - } +// if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) { +// if (ShiroUtil.hasAnyRoles(new String[]{"H04", "club01"})) { +// cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id")); +// } +// } cnd.and("groupId", "IS NOT", null); cnd.and("groupName", "IS NOT", null); cnd.groupBy("groupId"); diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityAuditController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityAuditController.java index 86158b9..2823963 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityAuditController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityAuditController.java @@ -1,6 +1,7 @@ package io.v.nutz.zhgh.activity.controller.union; import cn.hutool.core.util.StrUtil; +import io.v.nutz.sys.models.Sys_home_activity; import io.v.nutz.zhgh.activity.models.ActivityTissue; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.service.BaseService; @@ -102,6 +103,12 @@ public class ActivityAuditController { audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString()); baseService.insert(audit); baseService.dao().update(ActivityTissue.class, Chain.make("state", flag ? 3 : 2).add("auditId", audit.getId()), Cnd.where("id", "=", id)); + // 审核通过,修改活动为启动状态,并且还要将这个活动设置成首界面可见 + if (flag) { + baseService.dao().update(ActivityTissue.class, Chain.make("isDisabled", true), Cnd.where("id", "=", id)); + baseService.dao().update(Sys_home_activity.class, Chain.make("enable", true), Cnd.where("id", "=", id)); + } + return null; } diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionApplyUserController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionApplyUserController.java index 91a9ff9..3544cb0 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionApplyUserController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionApplyUserController.java @@ -88,8 +88,9 @@ public class ActivityUnionApplyUserController { LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode $condition """); - - cnd.andEx("YEAR(tissue.startTime)", "=", year); + if (StrUtil.isNotBlank(year)) { + cnd.andEx("YEAR(tissue.startTime)", "=", year); + } cnd.andEx("tissue.isDisabled", "=", true); cnd.andEx("tissue.type", "=", type); cnd.andEx("tissue.state", "=", 3); @@ -116,6 +117,10 @@ public class ActivityUnionApplyUserController { List list = pagination.getList(); list.forEach(v -> { String activityId = v.getString("id"); + // 当前活动已报名人数 + int totalApplyNum = baseService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId)); + v.put("totalApplyNum", totalApplyNum); + int signUpMethod = v.getInt("signUpMethod"); if (signUpMethod == 1||signUpMethod == 3) { int count = baseService.dao().count(ActivityTissuePerson.class, @@ -179,8 +184,7 @@ public class ActivityUnionApplyUserController { activity_tissue_person atp LEFT JOIN `user` u ON atp.userId = u.id WHERE - atp.tissueId = @tissueId - AND u.unionid = @unionId + atp.tissueId = @tissueId AND u.unionid = @unionId """); sql.setParam("tissueId", tissueId); sql.setParam("unionId", Vi.getUnionId()); diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionManageController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionManageController.java index 0db56cd..9180809 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionManageController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionManageController.java @@ -231,6 +231,11 @@ public class ActivityUnionManageController { } else { mobileHomeService.delete(tissue.getId()); } + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { + tissue.setState(1); + } else { + tissue.setState(3); + } activityTissueService.doEdit(tissue); return null; } diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionUserStatisticsController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionUserStatisticsController.java index 84edb82..5f35264 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionUserStatisticsController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/union/ActivityUnionUserStatisticsController.java @@ -70,6 +70,20 @@ public class ActivityUnionUserStatisticsController { if (Lang.isEmpty(tissue)){ return null; } + + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { + if (type == 40002) { + if (!Vi.getUnionId().equals(tissue.getUnionId())) { + return null; + } + } else if (type == 40003) { + if (!vi.getClubId().equals(tissue.getClubId())) { + return null; + } + } + + } + Sql sql = Sqls.create(""" SELECT u.id, @@ -89,16 +103,16 @@ public class ActivityUnionUserStatisticsController { """); Cnd cnd = Cnd.NEW(); cnd.andEX("atp.tissueId", "=", activityId); - cnd.andEX("u.unionId", "=", unionId); - if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (!tissue.getUserId().equals(ShiroUtil.getUserId())) { - if (type == 40002) { - cnd.and("unionId", "=", Vi.getUnionId()); - } else if (type == 40003) { - cnd.and("u.id", "in", " SELECT userid FROM sys_club_user WHERE clubid = '%s' ".formatted(vi.getClubId())); - } - } - } +// cnd.andEX("u.unionId", "=", unionId); +// if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { +// if (!tissue.getUserId().equals(ShiroUtil.getUserId())) { +// if (type == 40002) { +// cnd.and("unionId", "=", Vi.getUnionId()); +// } else if (type == 40003) { +// cnd.and("u.id", "in", " SELECT userid FROM sys_club_user WHERE clubid = '%s' ".formatted(vi.getClubId())); +// } +// } +// } if (Strings.isNotBlank(page.getSearchName()) && Strings.isNotBlank(page.getSearchKeyword())) { cnd.where().andLike(page.getSearchName(), page.getSearchKeyword()); } diff --git a/src/main/java/io/v/nutz/zhgh/activity/models/ActivityTissue.java b/src/main/java/io/v/nutz/zhgh/activity/models/ActivityTissue.java index 0a5280b..3a6bb1f 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/models/ActivityTissue.java +++ b/src/main/java/io/v/nutz/zhgh/activity/models/ActivityTissue.java @@ -239,6 +239,17 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo @Comment("是否推送移动端首页") @ColDefine(type = ColType.INT) private Integer isPushHome; + + @Column + @Comment("签到开始时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String signStartTime; + + @Column + @Comment("签到结束时间") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String signEndTime; + @Override public Sys_home_activity covertToSysHomeActivity() { Sys_home_activity sysHomeActivity = new Sys_home_activity(); @@ -252,7 +263,7 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo } else if (this.getType() == 40003) { sysHomeActivity.setUrl("/platform/activity/applyUser/club"); } - sysHomeActivity.setH5Url("/mobile/activity/unionActivity"); + sysHomeActivity.setH5Url("/mobile/activity/unionActivity/goReg?id=" + this.getId() + "&signUpMethod=" + this.getSignUpMethod()); if (StrUtil.isNotBlank(this.getApplyStartTime())) { sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime())); sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime())); diff --git a/src/main/java/io/v/nutz/zhgh/activity/services/impl/ActivityTissueServiceImpl.java b/src/main/java/io/v/nutz/zhgh/activity/services/impl/ActivityTissueServiceImpl.java index 69a8c29..ae4f0a4 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/services/impl/ActivityTissueServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/activity/services/impl/ActivityTissueServiceImpl.java @@ -67,8 +67,9 @@ public class ActivityTissueServiceImpl extends ViServiceImpl imp LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode $condition """); - - cnd.andEx("YEAR(tissue.applyTime)", "=", year); + if (StrUtil.isNotBlank(year)) { + cnd.and("YEAR(tissue.applyTime)", "=", year); + } SqlExpressionGroup seg = new SqlExpressionGroup(); seg.or("tissue.projectTypeCode", "!=", "50004"); seg.or("tissue.projectTypeCode", "is", null); @@ -81,8 +82,15 @@ public class ActivityTissueServiceImpl extends ViServiceImpl imp cnd.where().andLike("tissue.name", name); } - if (!ShiroUtil.hasAnyRoles("sysadmin,H10,A06")) { - cnd.and("tissue.userId", "=", ShiroUtil.getUserId()); + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { +// cnd.and("tissue.userId", "=", ShiroUtil.getUserId()); + if (ShiroUtil.hasAnyRoles("H04")) { + cnd.and("tissue.unionId", "=", Vi.getUnionId()); + } else if (ShiroUtil.hasAnyRoles("club01")) { + cnd.and("tissue.clubId", "=", vi.getClubId()); + } else { + cnd.and("tissue.userId", "=", ShiroUtil.getUserId()); + } /* if (ShiroUtil.hasRole("H04")) { cnd.and("tissue.unionId", "in", vi.getMangeUnionStr()); } else if (ShiroUtil.hasRole("club01")) { diff --git a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java index 3f464bb..84e5b76 100644 --- a/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java +++ b/src/main/java/io/v/nutz/zhgh/data/constant/SourceData.java @@ -39,23 +39,6 @@ public interface SourceData { // Assert.isTrue(jsonResult.getBoolean("success"), jsonResult.getString("data")); } - /** - * 不进系统人员类型 - */ - List NOT_ENTERING_PERSON_TYPE = List.of("退休人员", "兼职教师", "非全日用工(项目临聘)", "服务外包和其他人员", - "教学编制2", "教学教师(附属医院)", "教学编制", "离休人员", "临时人员", "非全日制工", "博士后(在职)"); - /** - * 不进系统在职状态 - * 01 退休 - * 05 调出 - * 06 辞职 - * 07 离职 - * @see io.v.nutz.zhgh.data.constant.HMCFieldCode#USER_STATE_CODE - */ - List NOT_ENTERING_USER_STATE = List.of("01", "05", "06", "07"); - - List NOT_ENTERING_USER_LOGIN_NAME = List.of("2020000410", "2008000010"); - /** * 接口中的数据跟SourceUser的对应关系 *

@@ -83,6 +66,7 @@ public interface SourceData { put("ZYJSZWDJ", new String[]{"professionalTechnicalLevel"}); // 专业技术等级 put("JZGLBM", new String[]{"userCategory"}); // 教职工类别 put("GWLBM", new String[]{"jobCategory"}); // 岗位类别 + put("LXRQ", new String[]{"schoolTime"}); // 岗位类别 }}; /** @@ -119,11 +103,6 @@ public interface SourceData { // checkSuccess(map); List data = map.getAsList("data", NutMap.class); for (NutMap row : data) { - if (NOT_ENTERING_PERSON_TYPE.contains(row.getString("RYFLMC")) - || NOT_ENTERING_USER_LOGIN_NAME.contains(row.getString("GH")) - || NOT_ENTERING_USER_STATE.contains(row.getString("DQZTM"))) { - continue; - } Map entity = new HashMap(500); row.forEach((k, v) -> { diff --git a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java index ada7c2a..810830f 100644 --- a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java @@ -4,23 +4,18 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.http.HtmlUtil; import io.v.nutz.base.utils.ManyAddOrRenewUtil; import io.v.nutz.base.utils.Roles; -import io.v.nutz.sys.models.Sys_dict; import io.v.nutz.sys.models.Sys_user_role; import io.v.nutz.sys.services.SysDictService; import io.v.nutz.sys.services.SysUserRoleService; -import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.activity.models.ActivityUserScope; import io.v.nutz.zhgh.data.constant.SourceData; -import io.v.nutz.zhgh.data.constant.UserChangeType; import io.v.nutz.zhgh.data.model.UserHistory; import io.v.nutz.zhgh.data.model.UserSource; import io.v.nutz.zhgh.data.service.HistoryUserService; import io.v.nutz.zhgh.data.service.SourceUserService; -import io.v.nutz.zhgh.data.vo.SourceUserCommonVo; import io.v.nutz.zhgh.staffmanage.member.UserMode; import io.v.nutz.base.service.AsyncService; import io.v.nutz.base.service.impl.ViServiceImpl; @@ -51,14 +46,12 @@ import org.nutz.lang.random.R; import org.nutz.lang.util.NutMap; import org.nutz.plugins.wkcache.annotation.CacheDefaults; import org.springframework.beans.BeanUtils; -import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Function; import java.util.stream.Collectors; /** @@ -72,6 +65,18 @@ public class SourceUserServiceImpl extends ViServiceImpl implements super(dao); } + /** + * 不进系统人员类型 + */ + private final List NOT_ENTERING_PERSON_TYPE = List.of("退休人员", "兼职教师", "非全日用工(项目临聘)", "服务外包和其他人员", + "教学编制2", "教学教师(附属医院)", "教学编制", "离休人员", "临时人员", "非全日制工", "博士后(在职)"); + /** + * 不进系统在职状态 + * @see io.v.nutz.zhgh.data.constant.HMCFieldCode#USER_STATE_CODE + */ + private final List NOT_ENTERING_USER_STATE = List.of("退休", "调出", "辞职", "离职"); + + private final List NOT_ENTERING_USER_LOGIN_NAME = List.of("2020000410", "2008000010"); @Inject private AsyncService asyncService; @@ -179,6 +184,10 @@ public class SourceUserServiceImpl extends ViServiceImpl implements source.setWelfareMember(null); Sys_user user = userMap.get(source.getLoginname().toLowerCase()); + boolean isNotEnterUser = NOT_ENTERING_PERSON_TYPE.contains(source.getPersonType()) + || NOT_ENTERING_USER_LOGIN_NAME.contains(source.getLoginname()) + || NOT_ENTERING_USER_STATE.contains(source.getUserState()); + if (isAuto) { checkMemberOrWelfareMember(changeConfig, source, user, addMemberUserIds, deleteMemberUserIds, addWelfareMemberUserIds, deleteWelfareMemberUserIds); @@ -220,18 +229,24 @@ public class SourceUserServiceImpl extends ViServiceImpl implements if (Lang.isEmpty(history)) { continue; } - histories.add(history); - if (history.getChangeTypes().contains(MemberChangeType.NEW.getType())) { + if (user != null) { + histories.add(history); + } + if (!isNotEnterUser && history.getChangeTypes().contains(MemberChangeType.NEW.getType())) { needInitUserList.add(u); + histories.add(history); } } else { SourceChangeMiddleTable table = createSourceChangeMiddleTable(source, user, dictMap, allowChangeFieldNames); if (Lang.isEmpty(table)) { continue; } - middleTables.add(table); - if (table.getChangeTypes().contains(MemberChangeType.NEW.getType())) { + if (user != null) { + middleTables.add(table); + } + if (!isNotEnterUser && table.getChangeTypes().contains(MemberChangeType.NEW.getType())) { needInitUserList.add(u); + middleTables.add(table); } } } diff --git a/src/main/java/io/v/nutz/zhgh/jf/controller/reimbursement/ActivityReimbursementApplyController.java b/src/main/java/io/v/nutz/zhgh/jf/controller/reimbursement/ActivityReimbursementApplyController.java index a0e5203..3a938ab 100644 --- a/src/main/java/io/v/nutz/zhgh/jf/controller/reimbursement/ActivityReimbursementApplyController.java +++ b/src/main/java/io/v/nutz/zhgh/jf/controller/reimbursement/ActivityReimbursementApplyController.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.zhgh.activity.models.ActivityTissue; import io.v.nutz.zhgh.jf.handle.reimbursement.ReimbursementToHandler; import io.v.nutz.zhgh.jf.model.ActivityBx; import io.v.nutz.zhgh.jf.service.ActivityBxService; @@ -11,10 +12,14 @@ import io.v.nutz.web.commons.utils.ShiroUtil; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; @@ -37,6 +42,8 @@ import java.util.List; @At("/platform/jf/reimbursement/apply") public class ActivityReimbursementApplyController { + @Inject + private Dao dao; @Inject private ActivityBxService activityBxService; @@ -118,6 +125,17 @@ public class ActivityReimbursementApplyController { @ViReturn @RequiresPermissions("sys.jf.reimbursement.apply") public Object getActivityReimbursementByUser() { + // 查询可以报销的活动 + Cnd queryTissueCnd = Cnd.NEW(); + // 这里要判断是不是管理员,不是就只能看自己创建的或者联系人是自己的 + if (!ShiroUtil.hasAnyRoles("sysadmin")) { + SqlExpressionGroup queryTissueGroup = new SqlExpressionGroup(); + queryTissueGroup.or("userId", "=", ShiroUtil.getUserId()); + queryTissueGroup.or("opBy", "=", ShiroUtil.getUserId()); + queryTissueCnd.and(queryTissueGroup); + } + + // 还要去排除报销表里边已经报销过了的,审核拒绝的报销不能过滤,要查出来重新报销走报销流程,直接查活动的id Cnd cnd = Cnd.NEW(); cnd.and("state_id", "=", 1060); cnd.andEX("`year`", "=", DateUtil.thisYear()); @@ -125,14 +143,27 @@ public class ActivityReimbursementApplyController { seg.or("reimbursement_state_id", "in", List.of(1005, 1015, 1025, 1045)); seg.or("reimbursement_union_audit_id", "is", null); cnd.and(seg); + Sql sql = Sqls.create("select activity_id from activity_bx $condition"); + sql.setCondition(cnd); + sql.setCallback(Sqls.callback.strList()); + dao.execute(sql); + List activityIds = sql.getList(String.class); + // 查出来的这玩意activityIds,要从活动里边过滤掉 + if (Lang.isNotEmpty(activityIds)) { + queryTissueCnd.and("id", "not in", activityIds); + } + // 上述条件过滤完之后,可以查询可报销的活动了,可以看看断点打印 + List list = dao.query(ActivityTissue.class, queryTissueCnd); + return list; + // cnd.and("reimbursement_unit_secretary_audit_id", "is", null); // cnd.and("reimbursement_finance_audit_id", "is", null); // cnd.and("reimbursement_school_director_id", "is", null); // cnd.and("reimbursement_school_chairman_id", "is", null); - if (!ShiroUtil.hasAnyRoles("sysadmin")) { - cnd.and("user_id", "=", ShiroUtil.getUserId()); - } - return activityBxService.query(cnd); +// if (!ShiroUtil.hasAnyRoles("sysadmin")) { +// cnd.and("user_id", "=", ShiroUtil.getUserId()); +// } +// return ; } diff --git a/src/main/java/io/v/nutz/zhgh/mobile/activity/unionActivity/UnionActivityRegisterController.java b/src/main/java/io/v/nutz/zhgh/mobile/activity/unionActivity/UnionActivityRegisterController.java index e287f21..d80f8be 100644 --- a/src/main/java/io/v/nutz/zhgh/mobile/activity/unionActivity/UnionActivityRegisterController.java +++ b/src/main/java/io/v/nutz/zhgh/mobile/activity/unionActivity/UnionActivityRegisterController.java @@ -60,7 +60,7 @@ public class UnionActivityRegisterController { @Ok("re") @RequiresAuthentication public String goReg(String signUpMethod) { - if (signUpMethod.equals("1")) { + if ("1".equals(signUpMethod)) { return "beetl:/mobile/activity/unionActivity/singleReg.html"; } return "beetl:/mobile/activity/unionActivity/unionReg.html"; @@ -88,6 +88,9 @@ public class UnionActivityRegisterController { act.needSign, act.projectTypeCode, act.teamNum, + act.groupId, + act.signStartTime, + act.signEndTime, abs.`name` AS projectTypeName, creater.username AS createUserName, creater.mobile as createUserMobile @@ -300,10 +303,7 @@ public class UnionActivityRegisterController { @ViReturn @RequiresAuthentication public Object searchNoRegisterUser(String searchKey, String activityId) { - - ActivityTissue tissue = simpleService.dao().fetch(ActivityTissue.class, Cnd.where("id", "=", activityId)); - Sql sql = Sqls.create(""" SELECT id, @@ -315,11 +315,10 @@ public class UnionActivityRegisterController { `user` $condition """); - String unionId = Vi.getUnionId(); Cnd cnd = Cnd.NEW(); - if (tissue.getSignUpMethod() != 3) { - cnd.andEX("unionId", "=", unionId); - } +// if (tissue.getSignUpMethod() != 3) { + cnd.andEX("unionId", "=", Vi.getUnionId()); +// } cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim()))); if (tissue.getGroupId() != null) { cnd.and(new Static(""" @@ -352,10 +351,15 @@ public class UnionActivityRegisterController { } if (Lang.isNotEmpty(activityTissue.getUserNumberLimit())) { if (activityTissue.getUserNumberLimit() == 1) { - int hasRegisterCount = simpleService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId)); - if (hasRegisterCount + personIds.length > activityTissue.getTotalUserNumberLimit()) { + // 判断当前人有没有组队报过名,如果报过名本次提交就算修改,可以放行这个判断 + int count = simpleService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId).and("applyUserId", "=", ShiroUtil.getUserId())); + + if (count <= 0) { + int hasRegisterCount = simpleService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId)); + if (hasRegisterCount + personIds.length > activityTissue.getTotalUserNumberLimit()) { // return Result.error().addMsg("当前最多只能报名%s人!".formatted(Math.max(activityTissue.getTotalUserNumberLimit() - hasRegisterCount, 0))); - return Result.error().addMsg("该活动限制人数为%s人".formatted(activityTissue.getTotalUserNumberLimit())); + return Result.error().addMsg("该活动限制人数为%s人".formatted(activityTissue.getTotalUserNumberLimit())); + } } } if (activityTissue.getUserNumberLimit() == 2) { diff --git a/src/main/java/io/v/nutz/zhgh/qsv/controller/QsvQuizRankController.java b/src/main/java/io/v/nutz/zhgh/qsv/controller/QsvQuizRankController.java index d13c12c..034d4b2 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/controller/QsvQuizRankController.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/controller/QsvQuizRankController.java @@ -55,7 +55,7 @@ public class QsvQuizRankController { @At @Ok("void") @RequiresPermissions("qsv.quiz.rank") - public void exportXlsx(@Valid QsvQuizRankPageForm pageForm, HttpServletResponse response) { + public void exportXlsx(QsvQuizRankPageForm pageForm, HttpServletResponse response) { qsvQuizRankService.exportXlsx(pageForm, response); } diff --git a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvQuizController.java b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvQuizController.java index 493220a..02a476f 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvQuizController.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvQuizController.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.wizzer.framework.base.Result; import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.ActivityUserScope; import io.v.nutz.zhgh.qsv.dto.QsvCheckAnswerResult; import io.v.nutz.zhgh.qsv.models.QsvActivity; import io.v.nutz.zhgh.qsv.models.QsvSubject; @@ -60,6 +61,12 @@ public class H5QsvQuizController { @RequiresAuthentication public Result subjects(@Valid String activityId) { QsvActivity activity = dao.fetch(QsvActivity.class, activityId); + + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId()).and("userId", "=", ShiroUtil.getUserId())); + if (count != 1) { + return Result.error("您无需参加此次知识竞赛,感谢您的关注!"); + } + String mode = activity.getMode(); //能否重复答题 Boolean repeatable = activity.getRepeatable(); @@ -78,7 +85,7 @@ public class H5QsvQuizController { List answerRecords = dao.query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) .and("userId", "=", ShiroUtil.getUserId())); - if (activity.getEndTime().after(new Date())) { + if (activity.getEndTime().before(new Date())) { //已结束 查询最新一次的答题记录 Optional lastRecordOptional = answerRecords.stream().max(Comparator.comparing(QsvUserAnswerRecord::getAnswerTime)); if (lastRecordOptional.isPresent()) { @@ -102,13 +109,13 @@ public class H5QsvQuizController { } } else { - if (mode.equals("REGULAR")) { + if ("REGULAR".equals(mode)) { if (ObjectUtil.isEmpty(answerRecords)) { //首次进来生成答题记录 - if (displayMode.equals("ALL")) { - resultSubjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)); + if ("ALL".equals(displayMode)) { + resultSubjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum")); answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, resultSubjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId(); - } else if (displayMode.equals("RANDOM")) { + } else if ("RANDOM".equals(displayMode)) { //单次随机抽取题目数量 Integer randomCount = activity.getRandomCount(); @@ -130,17 +137,26 @@ public class H5QsvQuizController { resultSubjects = dao.query(QsvSubject.class, cnd); } } else { - if (displayMode.equals("ALL")) { + if ("ALL".equals(displayMode)) { //判断能否重复答题 如果可重复要根据次数判断是否再次生成记录 不能重复直接返回最新的一次记录 if (repeatable) { //已回答次数 if (answerRecords.size() < maxAttempts) { //生成答题记录 - List subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId)); - answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId(); - QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, answerRecordId); + QsvUserAnswerRecord fetch = dao.fetch(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) + .and("userId", "=", ShiroUtil.getUserId()).and("isFinish", "=", false) + .desc("randomNumber")); + List subjectIds = new ArrayList<>(); + if (fetch == null) { + List subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId).asc("sortNum")); + answerRecordId = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())).getId(); + QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, answerRecordId); + subjectIds = answerRecord.getSubjectIds(); - List subjectIds = answerRecord.getSubjectIds(); + } else { + subjectIds = fetch.getSubjectIds(); + answerRecordId = fetch.getId(); + } Cnd cnd = Cnd.where("id", "in", subjectIds); String dynamic = subjectIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")); cnd.and(new Static("1=1 ORDER BY FIELD (id," + dynamic + ")")); @@ -172,7 +188,7 @@ public class H5QsvQuizController { throw new RuntimeException("业务异常"); } } - } else if (displayMode.equals("RANDOM")) { + } else if ("RANDOM".equals(displayMode)) { //判断是否有未答完的记录 Optional notFinishRecordOptional = answerRecords.stream().filter(r -> !r.getIsFinish()).findFirst(); if (notFinishRecordOptional.isPresent()) { @@ -200,7 +216,7 @@ public class H5QsvQuizController { //进行下一次抽取 List subjectIds = answerRecords.stream().map(QsvUserAnswerRecord::getSubjectIds).flatMap(Collection::stream).toList(); List subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId) - .and("id", "not in", subjectIds)); + .and("id", "not in", subjectIds).asc("sortNum")); if (subjects.size() < randomCount) { throw new RuntimeException("题目数不够,无法生成题目"); @@ -230,7 +246,7 @@ public class H5QsvQuizController { } } } - } else if (mode.equals("SCHEDULED")) { + } else if ("SCHEDULED".equals(mode)) { //定时定题 //查询今天的题目 @@ -246,7 +262,7 @@ public class H5QsvQuizController { if (todayAllFinish && todayRecords.size() < maxAttempts) { //生成今天的记录 List subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId) - .and("displayDate", "=", DateUtil.today())); + .and("displayDate", "=", DateUtil.today()).asc("sortNum")); QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())); answerRecordId = answerRecord.getId(); @@ -273,7 +289,7 @@ public class H5QsvQuizController { } else { //生成今天的记录 List subjects = dao.query(QsvSubject.class, Cnd.where("activityId", "=", activityId) - .and("displayDate", "=", DateUtil.today())); + .and("displayDate", "=", DateUtil.today()).asc("sortNum")); QsvUserAnswerRecord answerRecord = qsvUserAnswerRecordService.insertRecord(activityId, subjects.stream().map(QsvSubject::getId).collect(Collectors.toList())); answerRecordId = answerRecord.getId(); diff --git a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvQuizRankServiceImpl.java b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvQuizRankServiceImpl.java index b23fdee..f0a2f62 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvQuizRankServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvQuizRankServiceImpl.java @@ -7,6 +7,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.hutool.core.util.StrUtil; import io.v.nutz.base.page.Pagination; import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.base.utils.CommonDownloadUtil; import io.v.nutz.zhgh.qsv.models.QsvActivity; import io.v.nutz.zhgh.qsv.models.QsvUserAnswerRecord; import io.v.nutz.zhgh.qsv.param.QsvQuizRankPageForm; @@ -83,7 +84,7 @@ public class QsvQuizRankServiceImpl extends BaseServiceImpl ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list); -// CommonDownloadUtil.download(activity.getTitle() + "得分名单" + ".xlsx", workbook, response); + CommonDownloadUtil.download(activity.getTitle() + "得分名单" + ".xlsx", workbook, response); } private Sql buildQuerySql(String activityId, String mode, String scoreStatisticsMode, QsvQuizRankPageForm pageForm) { diff --git a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvSurveyServiceImpl.java b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvSurveyServiceImpl.java index 4ee0ebc..8b70ac0 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvSurveyServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvSurveyServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.base.utils.CommonDownloadUtil; import io.v.nutz.zhgh.qsv.models.QsvActivity; import io.v.nutz.zhgh.qsv.models.QsvOption; import io.v.nutz.zhgh.qsv.models.QsvSubject; @@ -45,7 +46,8 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i try { // 查询用户答题记录 - List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)); + List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) + .and("isFinish", "=", true)); // 将答题记录的扩展JSON转换为JSONObject列表 List answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList(); @@ -122,7 +124,8 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i } // 查询用户答题记录 - List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)); + List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) + .and("isFinish", "=", true)); // 将答题记录的扩展JSON转换为JSONObject列表 List answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList(); @@ -148,7 +151,7 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i exportParams.setType(ExcelType.XSSF); // 导出Excel并下载 try (Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list)) { -// CommonDownloadUtil.download(activity.getTitle() + "答题记录" + ".xlsx", workbook, response); + CommonDownloadUtil.download(activity.getTitle() + "答题记录" + ".xlsx", workbook, response); } } catch (Exception e) { log.error("导出Excel失败", e); @@ -165,9 +168,10 @@ public class QsvSurveyServiceImpl extends BaseServiceImpl i try { // 查询用户答题记录 - List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)); + List answerRecords = dao().query(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) + .and("isFinish", "=", true)); // 将答题记录的扩展JSON转换为JSONObject列表 - List answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList(); +// List answerExtList = answerRecords.stream().map(QsvUserAnswerRecord::getExtJson).toList(); // 查询活动题目列表 List subjects = dao().query(QsvSubject.class, Cnd.where("activityId", "=", activityId)); diff --git a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvUserAnswerRecordServiceImpl.java b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvUserAnswerRecordServiceImpl.java index 9a84f1d..c47cedb 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvUserAnswerRecordServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/service/impl/QsvUserAnswerRecordServiceImpl.java @@ -36,7 +36,7 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl { + const userAgent = navigator.userAgent || navigator.vendor || window.opera + const isMobile = /iPad|iPhone|iPod|Android/.test(userAgent) + //判断是否为blob 不处理直接返回文件流 + if (response.config.responseType === "blob") { + return response + } + if (response.data && response.data.code !== 0) { + if (isMobile) { + vant.Toast(response.data.msg) + } else { + ELEMENT.Message.error(response.data.msg) + } + return Promise.reject(response.data) + } + return response.data + }, + (error) => { + const userAgent = navigator.userAgent || navigator.vendor || window.opera + const isMobile = /iPad|iPhone|iPod|Android/.test(userAgent) + if (isMobile) { + vant.Toast(error.message) + } else { + ELEMENT.Message.error(error.message) + } + return Promise.reject(error) + } + ) + return axiosService + }, //权限认证 authService() { function authPermission(permission) { @@ -65,4 +106,55 @@ const commonUtil = { } } }, + //下载文件 + downLoadService: function (url, data) { + const loading = ELEMENT.Loading.service({ + lock: true, + text: "导出中,请耐心等待", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)" + }) + + Vue.prototype.$axios + .post(url, data, { responseType: "blob" }) + .then((response) => { + if (response.data.type === "application/json") { + try { + const reader = new FileReader() + reader.onload = function () { + // reader.result 包含了 Blob 的内容,转换为字符串 + const content = reader.result + // 将字符串解析为 JSON 对象 + const jsonObject = JSON.parse(content) + this.$message.error(jsonObject.msg) + } + reader.readAsText(response.data) + } catch (err) { + this.$message.error("下载文件出错") + } + return + } + //获取服务器返回的文件描述信息 + const contentDisposition = response.headers["content-disposition"] + const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/ + const matches = filenameRegex.exec(contentDisposition) + let filename = "" + if (matches != null && matches[1]) { + filename = matches[1].replace(/['"]/g, "") + filename = decodeURIComponent(filename) + } + //执行下载文件 + const url = window.URL.createObjectURL(new Blob([response.data])) + const link = document.createElement("a") + link.href = url + link.setAttribute("download", filename) // 例如 'document.pdf' + document.body.appendChild(link) + link.click() + link.parentNode.removeChild(link) + loading.close() + }) + .finally(() => { + loading.close() + }) + }, } diff --git a/src/main/resources/static/assets/platform/module/activity/initMap.js b/src/main/resources/static/assets/platform/module/activity/initMap.js index 4960df9..9cc3fdf 100644 --- a/src/main/resources/static/assets/platform/module/activity/initMap.js +++ b/src/main/resources/static/assets/platform/module/activity/initMap.js @@ -5,7 +5,8 @@ const self_mixin = { hasRegUserNum: 0, unionId: null, unionLimitNum: 0, - isRegisterFull: false + isRegisterFull: false, + user: JSON.parse(window.sessionStorage.getItem('user')) } }, methods: { @@ -15,9 +16,9 @@ const self_mixin = { resp.data.location = JSON.parse(resp.data.location) resp.data.unionUserNumberLimit = JSON.parse(resp.data.unionUserNumberLimit) this.o = resp.data - this.unionId = "${@shiro.getPrincipalProperty('unit').getUnionid()}" + this.unionId = this.user.union.id if (!this.unionId) { - this.$toast.fail('您的所属工会信息缺失,请联系管理员') + this.$message.warning('您的所属工会信息缺失,请联系管理员') return } if (this.o.userNumberLimit === 2) { @@ -127,4 +128,4 @@ const self_mixin = { return s.toFixed(2) } } -} \ No newline at end of file +} diff --git a/src/main/resources/static/assets/platform/plugins/axios/axios.js b/src/main/resources/static/assets/platform/plugins/axios/axios.js new file mode 100644 index 0000000..4fbf5dd --- /dev/null +++ b/src/main/resources/static/assets/platform/plugins/axios/axios.js @@ -0,0 +1,3280 @@ +// Axios v1.6.5 Copyright (c) 2024 Matt Zabriskie and contributors +;(function (global, factory) { + typeof exports === "object" && typeof module !== "undefined" + ? (module.exports = factory()) + : typeof define === "function" && define.amd + ? define(factory) + : ((global = typeof globalThis !== "undefined" ? globalThis : global || self), (global.axios = factory())) +})(this, function () { + "use strict" + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object) + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object) + enumerableOnly && + (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable + })), + keys.push.apply(keys, symbols) + } + return keys + } + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {} + i % 2 + ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]) + }) + : Object.getOwnPropertyDescriptors + ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) + : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) + }) + } + return target + } + function _typeof(obj) { + "@babel/helpers - typeof" + + return ( + (_typeof = + "function" == typeof Symbol && "symbol" == typeof Symbol.iterator + ? function (obj) { + return typeof obj + } + : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj + }), + _typeof(obj) + ) + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function") + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i] + descriptor.enumerable = descriptor.enumerable || false + descriptor.configurable = true + if ("value" in descriptor) descriptor.writable = true + Object.defineProperty(target, descriptor.key, descriptor) + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps) + if (staticProps) _defineProperties(Constructor, staticProps) + Object.defineProperty(Constructor, "prototype", { + writable: false + }) + return Constructor + } + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }) + } else { + obj[key] = value + } + return obj + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest() + } + function _toArray(arr) { + return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest() + } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread() + } + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr) + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr + } + function _iterableToArray(iter) { + if ((typeof Symbol !== "undefined" && iter[Symbol.iterator] != null) || iter["@@iterator"] != null) return Array.from(iter) + } + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : (typeof Symbol !== "undefined" && arr[Symbol.iterator]) || arr["@@iterator"] + if (_i == null) return + var _arr = [] + var _n = true + var _d = false + var _s, _e + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value) + if (i && _arr.length === i) break + } + } catch (err) { + _d = true + _e = err + } finally { + try { + if (!_n && _i["return"] != null) _i["return"]() + } finally { + if (_d) throw _e + } + } + return _arr + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return + if (typeof o === "string") return _arrayLikeToArray(o, minLen) + var n = Object.prototype.toString.call(o).slice(8, -1) + if (n === "Object" && o.constructor) n = o.constructor.name + if (n === "Map" || n === "Set") return Array.from(o) + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen) + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i] + return arr2 + } + function _nonIterableSpread() { + throw new TypeError( + "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." + ) + } + function _nonIterableRest() { + throw new TypeError( + "Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." + ) + } + + function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments) + } + } + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString + var getPrototypeOf = Object.getPrototypeOf + var kindOf = (function (cache) { + return function (thing) { + var str = toString.call(thing) + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()) + } + })(Object.create(null)) + var kindOfTest = function kindOfTest(type) { + type = type.toLowerCase() + return function (thing) { + return kindOf(thing) === type + } + } + var typeOfTest = function typeOfTest(type) { + return function (thing) { + return _typeof(thing) === type + } + } + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ + var isArray = Array.isArray + + /** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ + var isUndefined = typeOfTest("undefined") + + /** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ + function isBuffer(val) { + return ( + val !== null && + !isUndefined(val) && + val.constructor !== null && + !isUndefined(val.constructor) && + isFunction(val.constructor.isBuffer) && + val.constructor.isBuffer(val) + ) + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + var isArrayBuffer = kindOfTest("ArrayBuffer") + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result + if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val) + } else { + result = val && val.buffer && isArrayBuffer(val.buffer) + } + return result + } + + /** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ + var isString = typeOfTest("string") + + /** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + var isFunction = typeOfTest("function") + + /** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ + var isNumber = typeOfTest("number") + + /** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ + var isObject = function isObject(thing) { + return thing !== null && _typeof(thing) === "object" + } + + /** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ + var isBoolean = function isBoolean(thing) { + return thing === true || thing === false + } + + /** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ + var isPlainObject = function isPlainObject(val) { + if (kindOf(val) !== "object") { + return false + } + var prototype = getPrototypeOf(val) + return ( + (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && + !(Symbol.toStringTag in val) && + !(Symbol.iterator in val) + ) + } + + /** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ + var isDate = kindOfTest("Date") + + /** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFile = kindOfTest("File") + + /** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ + var isBlob = kindOfTest("Blob") + + /** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFileList = kindOfTest("FileList") + + /** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ + var isStream = function isStream(val) { + return isObject(val) && isFunction(val.pipe) + } + + /** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ + var isFormData = function isFormData(thing) { + var kind + return ( + thing && + ((typeof FormData === "function" && thing instanceof FormData) || + (isFunction(thing.append) && + ((kind = kindOf(thing)) === "formdata" || + // detect form-data instance + (kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]")))) + ) + } + + /** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + var isURLSearchParams = kindOfTest("URLSearchParams") + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ + var trim = function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") + } + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ + function forEach(obj, fn) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref$allOwnKeys = _ref.allOwnKeys, + allOwnKeys = _ref$allOwnKeys === void 0 ? false : _ref$allOwnKeys + // Don't bother if no value provided + if (obj === null || typeof obj === "undefined") { + return + } + var i + var l + + // Force an array if not already something iterable + if (_typeof(obj) !== "object") { + /*eslint no-param-reassign:0*/ + obj = [obj] + } + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj) + } + } else { + // Iterate over object keys + var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj) + var len = keys.length + var key + for (i = 0; i < len; i++) { + key = keys[i] + fn.call(null, obj[key], key, obj) + } + } + } + function findKey(obj, key) { + key = key.toLowerCase() + var keys = Object.keys(obj) + var i = keys.length + var _key + while (i-- > 0) { + _key = keys[i] + if (key === _key.toLowerCase()) { + return _key + } + } + return null + } + var _global = (function () { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis + return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global + })() + var isContextDefined = function isContextDefined(context) { + return !isUndefined(context) && context !== _global + } + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ + function /* obj1, obj2, obj3, ... */ + merge() { + var _ref2 = (isContextDefined(this) && this) || {}, + caseless = _ref2.caseless + var result = {} + var assignValue = function assignValue(val, key) { + var targetKey = (caseless && findKey(result, key)) || key + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val) + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val) + } else if (isArray(val)) { + result[targetKey] = val.slice() + } else { + result[targetKey] = val + } + } + for (var i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue) + } + return result + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ + var extend = function extend(a, b, thisArg) { + var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, + allOwnKeys = _ref3.allOwnKeys + forEach( + b, + function (val, key) { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg) + } else { + a[key] = val + } + }, + { + allOwnKeys: allOwnKeys + } + ) + return a + } + + /** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ + var stripBOM = function stripBOM(content) { + if (content.charCodeAt(0) === 0xfeff) { + content = content.slice(1) + } + return content + } + + /** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ + var inherits = function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors) + constructor.prototype.constructor = constructor + Object.defineProperty(constructor, "super", { + value: superConstructor.prototype + }) + props && Object.assign(constructor.prototype, props) + } + + /** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ + var toFlatObject = function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props + var i + var prop + var merged = {} + destObj = destObj || {} + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj + do { + props = Object.getOwnPropertyNames(sourceObj) + i = props.length + while (i-- > 0) { + prop = props[i] + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop] + merged[prop] = true + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj) + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype) + return destObj + } + + /** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ + var endsWith = function endsWith(str, searchString, position) { + str = String(str) + if (position === undefined || position > str.length) { + position = str.length + } + position -= searchString.length + var lastIndex = str.indexOf(searchString, position) + return lastIndex !== -1 && lastIndex === position + } + + /** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ + var toArray = function toArray(thing) { + if (!thing) return null + if (isArray(thing)) return thing + var i = thing.length + if (!isNumber(i)) return null + var arr = new Array(i) + while (i-- > 0) { + arr[i] = thing[i] + } + return arr + } + + /** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ + // eslint-disable-next-line func-names + var isTypedArray = (function (TypedArray) { + // eslint-disable-next-line func-names + return function (thing) { + return TypedArray && thing instanceof TypedArray + } + })(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array)) + + /** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ + var forEachEntry = function forEachEntry(obj, fn) { + var generator = obj && obj[Symbol.iterator] + var iterator = generator.call(obj) + var result + while ((result = iterator.next()) && !result.done) { + var pair = result.value + fn.call(obj, pair[0], pair[1]) + } + } + + /** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ + var matchAll = function matchAll(regExp, str) { + var matches + var arr = [] + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches) + } + return arr + } + + /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ + var isHTMLForm = kindOfTest("HTMLFormElement") + var toCamelCase = function toCamelCase(str) { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2 + }) + } + + /* Creating a function that will check if an object has a property. */ + var hasOwnProperty = (function (_ref4) { + var hasOwnProperty = _ref4.hasOwnProperty + return function (obj, prop) { + return hasOwnProperty.call(obj, prop) + } + })(Object.prototype) + + /** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ + var isRegExp = kindOfTest("RegExp") + var reduceDescriptors = function reduceDescriptors(obj, reducer) { + var descriptors = Object.getOwnPropertyDescriptors(obj) + var reducedDescriptors = {} + forEach(descriptors, function (descriptor, name) { + var ret + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor + } + }) + Object.defineProperties(obj, reducedDescriptors) + } + + /** + * Makes all methods read-only + * @param {Object} obj + */ + + var freezeMethods = function freezeMethods(obj) { + reduceDescriptors(obj, function (descriptor, name) { + // skip restricted props in strict mode + if (isFunction(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) { + return false + } + var value = obj[name] + if (!isFunction(value)) return + descriptor.enumerable = false + if ("writable" in descriptor) { + descriptor.writable = false + return + } + if (!descriptor.set) { + descriptor.set = function () { + throw Error("Can not rewrite read-only method '" + name + "'") + } + } + }) + } + var toObjectSet = function toObjectSet(arrayOrString, delimiter) { + var obj = {} + var define = function define(arr) { + arr.forEach(function (value) { + obj[value] = true + }) + } + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)) + return obj + } + var noop = function noop() {} + var toFiniteNumber = function toFiniteNumber(value, defaultValue) { + value = +value + return Number.isFinite(value) ? value : defaultValue + } + var ALPHA = "abcdefghijklmnopqrstuvwxyz" + var DIGIT = "0123456789" + var ALPHABET = { + DIGIT: DIGIT, + ALPHA: ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT + } + var generateString = function generateString() { + var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16 + var alphabet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ALPHABET.ALPHA_DIGIT + var str = "" + var length = alphabet.length + while (size--) { + str += alphabet[(Math.random() * length) | 0] + } + return str + } + + /** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ + function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === "FormData" && thing[Symbol.iterator]) + } + var toJSONObject = function toJSONObject(obj) { + var stack = new Array(10) + var visit = function visit(source, i) { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return + } + if (!("toJSON" in source)) { + stack[i] = source + var target = isArray(source) ? [] : {} + forEach(source, function (value, key) { + var reducedValue = visit(value, i + 1) + !isUndefined(reducedValue) && (target[key] = reducedValue) + }) + stack[i] = undefined + return target + } + } + return source + } + return visit(obj, 0) + } + var isAsyncFn = kindOfTest("AsyncFunction") + var isThenable = function isThenable(thing) { + return thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing["catch"]) + } + var utils$1 = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isBoolean: isBoolean, + isObject: isObject, + isPlainObject: isPlainObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isRegExp: isRegExp, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty, + hasOwnProp: hasOwnProperty, + // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors: reduceDescriptors, + freezeMethods: freezeMethods, + toObjectSet: toObjectSet, + toCamelCase: toCamelCase, + noop: noop, + toFiniteNumber: toFiniteNumber, + findKey: findKey, + global: _global, + isContextDefined: isContextDefined, + ALPHABET: ALPHABET, + generateString: generateString, + isSpecCompliantForm: isSpecCompliantForm, + toJSONObject: toJSONObject, + isAsyncFn: isAsyncFn, + isThenable: isThenable + } + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + function AxiosError(message, code, config, request, response) { + Error.call(this) + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor) + } else { + this.stack = new Error().stack + } + this.message = message + this.name = "AxiosError" + code && (this.code = code) + config && (this.config = config) + request && (this.request = request) + response && (this.response = response) + } + utils$1.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.response && this.response.status ? this.response.status : null + } + } + }) + var prototype$1 = AxiosError.prototype + var descriptors = {} + ;[ + "ERR_BAD_OPTION_VALUE", + "ERR_BAD_OPTION", + "ECONNABORTED", + "ETIMEDOUT", + "ERR_NETWORK", + "ERR_FR_TOO_MANY_REDIRECTS", + "ERR_DEPRECATED", + "ERR_BAD_RESPONSE", + "ERR_BAD_REQUEST", + "ERR_CANCELED", + "ERR_NOT_SUPPORT", + "ERR_INVALID_URL" + // eslint-disable-next-line func-names + ].forEach(function (code) { + descriptors[code] = { + value: code + } + }) + Object.defineProperties(AxiosError, descriptors) + Object.defineProperty(prototype$1, "isAxiosError", { + value: true + }) + + // eslint-disable-next-line func-names + AxiosError.from = function (error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype$1) + utils$1.toFlatObject( + error, + axiosError, + function filter(obj) { + return obj !== Error.prototype + }, + function (prop) { + return prop !== "isAxiosError" + } + ) + AxiosError.call(axiosError, error.message, code, config, request, response) + axiosError.cause = error + axiosError.name = error.name + customProps && Object.assign(axiosError, customProps) + return axiosError + } + + // eslint-disable-next-line strict + var httpAdapter = null + + /** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ + function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing) + } + + /** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ + function removeBrackets(key) { + return utils$1.endsWith(key, "[]") ? key.slice(0, -2) : key + } + + /** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ + function renderKey(path, key, dots) { + if (!path) return key + return path + .concat(key) + .map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token) + return !dots && i ? "[" + token + "]" : token + }) + .join(dots ? "." : "") + } + + /** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ + function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable) + } + var predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop) + }) + + /** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + + /** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ + function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError("target must be an object") + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new FormData() + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject( + options, + { + metaTokens: true, + dots: false, + indexes: false + }, + false, + function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]) + } + ) + var metaTokens = options.metaTokens + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor + var dots = options.dots + var indexes = options.indexes + var _Blob = options.Blob || (typeof Blob !== "undefined" && Blob) + var useBlob = _Blob && utils$1.isSpecCompliantForm(formData) + if (!utils$1.isFunction(visitor)) { + throw new TypeError("visitor must be a function") + } + function convertValue(value) { + if (value === null) return "" + if (utils$1.isDate(value)) { + return value.toISOString() + } + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError("Blob is not supported. Use a Buffer instead.") + } + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value) + } + return value + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value + if (value && !path && _typeof(value) === "object") { + if (utils$1.endsWith(key, "{}")) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2) + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value) + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, "[]")) && (arr = utils$1.toArray(value))) + ) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key) + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && + formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + "[]", + convertValue(el) + ) + }) + return false + } + } + if (isVisitable(value)) { + return true + } + formData.append(renderKey(path, key, dots), convertValue(value)) + return false + } + var stack = [] + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }) + function build(value, path) { + if (utils$1.isUndefined(value)) return + if (stack.indexOf(value) !== -1) { + throw Error("Circular reference detected in " + path.join(".")) + } + stack.push(value) + utils$1.forEach(value, function each(el, key) { + var result = + !(utils$1.isUndefined(el) || el === null) && + visitor.call(formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers) + if (result === true) { + build(el, path ? path.concat(key) : [key]) + } + }) + stack.pop() + } + if (!utils$1.isObject(obj)) { + throw new TypeError("data must be an object") + } + build(obj) + return formData + } + + /** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ + function encode$1(str) { + var charMap = { + "!": "%21", + "'": "%27", + "(": "%28", + ")": "%29", + "~": "%7E", + "%20": "+", + "%00": "\x00" + } + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match] + }) + } + + /** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ + function AxiosURLSearchParams(params, options) { + this._pairs = [] + params && toFormData(params, this, options) + } + var prototype = AxiosURLSearchParams.prototype + prototype.append = function append(name, value) { + this._pairs.push([name, value]) + } + prototype.toString = function toString(encoder) { + var _encode = encoder + ? function (value) { + return encoder.call(this, value, encode$1) + } + : encode$1 + return this._pairs + .map(function each(pair) { + return _encode(pair[0]) + "=" + _encode(pair[1]) + }, "") + .join("&") + } + + /** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ + function encode(val) { + return encodeURIComponent(val) + .replace(/%3A/gi, ":") + .replace(/%24/g, "$") + .replace(/%2C/gi, ",") + .replace(/%20/g, "+") + .replace(/%5B/gi, "[") + .replace(/%5D/gi, "]") + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?object} options + * + * @returns {string} The formatted url + */ + function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url + } + var _encode = (options && options.encode) || encode + var serializeFn = options && options.serialize + var serializedParams + if (serializeFn) { + serializedParams = serializeFn(params, options) + } else { + serializedParams = utils$1.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, options).toString(_encode) + } + if (serializedParams) { + var hashmarkIndex = url.indexOf("#") + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex) + } + url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams + } + return url + } + + var InterceptorManager = /*#__PURE__*/ (function () { + function InterceptorManager() { + _classCallCheck(this, InterceptorManager) + this.handlers = [] + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + _createClass(InterceptorManager, [ + { + key: "use", + value: function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }) + return this.handlers.length - 1 + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + }, + { + key: "eject", + value: function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + }, + { + key: "clear", + value: function clear() { + if (this.handlers) { + this.handlers = [] + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + }, + { + key: "forEach", + value: function forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h) + } + }) + } + } + ]) + return InterceptorManager + })() + var InterceptorManager$1 = InterceptorManager + + var transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false + } + + var URLSearchParams$1 = typeof URLSearchParams !== "undefined" ? URLSearchParams : AxiosURLSearchParams + + var FormData$1 = typeof FormData !== "undefined" ? FormData : null + + var Blob$1 = typeof Blob !== "undefined" ? Blob : null + + var platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ["http", "https", "file", "blob", "url", "data"] + } + + var hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined" + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ + var hasStandardBrowserEnv = (function (product) { + return hasBrowserEnv && ["ReactNative", "NativeScript", "NS"].indexOf(product) < 0 + })(typeof navigator !== "undefined" && navigator.product) + + /** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ + var hasStandardBrowserWebWorkerEnv = (function () { + return ( + typeof WorkerGlobalScope !== "undefined" && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === "function" + ) + })() + + var utils = /*#__PURE__*/ Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv + }) + + var platform = _objectSpread2(_objectSpread2({}, utils), platform$1) + + function toURLEncodedForm(data, options) { + return toFormData( + data, + new platform.classes.URLSearchParams(), + Object.assign( + { + visitor: function visitor(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString("base64")) + return false + } + return helpers.defaultVisitor.apply(this, arguments) + } + }, + options + ) + ) + } + + /** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ + function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(function (match) { + return match[0] === "[]" ? "" : match[1] || match[0] + }) + } + + /** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ + function arrayToObject(arr) { + var obj = {} + var keys = Object.keys(arr) + var i + var len = keys.length + var key + for (i = 0; i < len; i++) { + key = keys[i] + obj[key] = arr[key] + } + return obj + } + + /** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ + function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++] + if (name === "__proto__") return true + var isNumericKey = Number.isFinite(+name) + var isLast = index >= path.length + name = !name && utils$1.isArray(target) ? target.length : name + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value] + } else { + target[name] = value + } + return !isNumericKey + } + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = [] + } + var result = buildPath(path, value, target[name], index) + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]) + } + return !isNumericKey + } + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + var obj = {} + utils$1.forEachEntry(formData, function (name, value) { + buildPath(parsePropPath(name), value, obj, 0) + }) + return obj + } + return null + } + + /** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ + function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + ;(parser || JSON.parse)(rawValue) + return utils$1.trim(rawValue) + } catch (e) { + if (e.name !== "SyntaxError") { + throw e + } + } + } + return (encoder || JSON.stringify)(rawValue) + } + var defaults = { + transitional: transitionalDefaults, + adapter: ["xhr", "http"], + transformRequest: [ + function transformRequest(data, headers) { + var contentType = headers.getContentType() || "" + var hasJSONContentType = contentType.indexOf("application/json") > -1 + var isObjectPayload = utils$1.isObject(data) + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data) + } + var isFormData = utils$1.isFormData(data) + if (isFormData) { + if (!hasJSONContentType) { + return data + } + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data + } + if (utils$1.isArrayBuffer(data) || utils$1.isBuffer(data) || utils$1.isStream(data) || utils$1.isFile(data) || utils$1.isBlob(data)) { + return data + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false) + return data.toString() + } + var isFileList + if (isObjectPayload) { + if (contentType.indexOf("application/x-www-form-urlencoded") > -1) { + return toURLEncodedForm(data, this.formSerializer).toString() + } + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf("multipart/form-data") > -1) { + var _FormData = this.env && this.env.FormData + return toFormData( + isFileList + ? { + "files[]": data + } + : data, + _FormData && new _FormData(), + this.formSerializer + ) + } + } + if (isObjectPayload || hasJSONContentType) { + headers.setContentType("application/json", false) + return stringifySafely(data) + } + return data + } + ], + transformResponse: [ + function transformResponse(data) { + var transitional = this.transitional || defaults.transitional + var forcedJSONParsing = transitional && transitional.forcedJSONParsing + var JSONRequested = this.responseType === "json" + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing + var strictJSONParsing = !silentJSONParsing && JSONRequested + try { + return JSON.parse(data) + } catch (e) { + if (strictJSONParsing) { + if (e.name === "SyntaxError") { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response) + } + throw e + } + } + } + return data + } + ], + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + xsrfCookieName: "XSRF-TOKEN", + xsrfHeaderName: "X-XSRF-TOKEN", + maxContentLength: -1, + maxBodyLength: -1, + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300 + }, + headers: { + common: { + Accept: "application/json, text/plain, */*", + "Content-Type": undefined + } + } + } + utils$1.forEach(["delete", "get", "head", "post", "put", "patch"], function (method) { + defaults.headers[method] = {} + }) + var defaults$1 = defaults + + // RawAxiosHeaders whose duplicates are ignored by node + // c.f. https://nodejs.org/api/http.html#http_message_headers + var ignoreDuplicateOf = utils$1.toObjectSet([ + "age", + "authorization", + "content-length", + "content-type", + "etag", + "expires", + "from", + "host", + "if-modified-since", + "if-unmodified-since", + "last-modified", + "location", + "max-forwards", + "proxy-authorization", + "referer", + "retry-after", + "user-agent" + ]) + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ + var parseHeaders = function (rawHeaders) { + var parsed = {} + var key + var val + var i + rawHeaders && + rawHeaders.split("\n").forEach(function parser(line) { + i = line.indexOf(":") + key = line.substring(0, i).trim().toLowerCase() + val = line.substring(i + 1).trim() + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return + } + if (key === "set-cookie") { + if (parsed[key]) { + parsed[key].push(val) + } else { + parsed[key] = [val] + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ", " + val : val + } + }) + return parsed + } + + var $internals = Symbol("internals") + function normalizeHeader(header) { + return header && String(header).trim().toLowerCase() + } + function normalizeValue(value) { + if (value === false || value == null) { + return value + } + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value) + } + function parseTokens(str) { + var tokens = Object.create(null) + var tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g + var match + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2] + } + return tokens + } + var isValidHeaderName = function isValidHeaderName(str) { + return /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()) + } + function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header) + } + if (isHeaderNameFilter) { + value = header + } + if (!utils$1.isString(value)) return + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1 + } + if (utils$1.isRegExp(filter)) { + return filter.test(value) + } + } + function formatHeader(header) { + return header + .trim() + .toLowerCase() + .replace(/([a-z\d])(\w*)/g, function (w, _char, str) { + return _char.toUpperCase() + str + }) + } + function buildAccessors(obj, header) { + var accessorName = utils$1.toCamelCase(" " + header) + ;["get", "set", "has"].forEach(function (methodName) { + Object.defineProperty(obj, methodName + accessorName, { + value: function value(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3) + }, + configurable: true + }) + }) + } + var AxiosHeaders = /*#__PURE__*/ (function (_Symbol$iterator, _Symbol$toStringTag) { + function AxiosHeaders(headers) { + _classCallCheck(this, AxiosHeaders) + headers && this.set(headers) + } + _createClass( + AxiosHeaders, + [ + { + key: "set", + value: function set(header, valueOrRewrite, rewrite) { + var self = this + function setHeader(_value, _header, _rewrite) { + var lHeader = normalizeHeader(_header) + if (!lHeader) { + throw new Error("header name must be a non-empty string") + } + var key = utils$1.findKey(self, lHeader) + if (!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value) + } + } + var setHeaders = function setHeaders(headers, _rewrite) { + return utils$1.forEach(headers, function (_value, _header) { + return setHeader(_value, _header, _rewrite) + }) + } + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite) + } else if (utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite) + } else { + header != null && setHeader(valueOrRewrite, header, rewrite) + } + return this + } + }, + { + key: "get", + value: function get(header, parser) { + header = normalizeHeader(header) + if (header) { + var key = utils$1.findKey(this, header) + if (key) { + var value = this[key] + if (!parser) { + return value + } + if (parser === true) { + return parseTokens(value) + } + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key) + } + if (utils$1.isRegExp(parser)) { + return parser.exec(value) + } + throw new TypeError("parser must be boolean|regexp|function") + } + } + } + }, + { + key: "has", + value: function has(header, matcher) { + header = normalizeHeader(header) + if (header) { + var key = utils$1.findKey(this, header) + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))) + } + return false + } + }, + { + key: "delete", + value: function _delete(header, matcher) { + var self = this + var deleted = false + function deleteHeader(_header) { + _header = normalizeHeader(_header) + if (_header) { + var key = utils$1.findKey(self, _header) + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key] + deleted = true + } + } + } + if (utils$1.isArray(header)) { + header.forEach(deleteHeader) + } else { + deleteHeader(header) + } + return deleted + } + }, + { + key: "clear", + value: function clear(matcher) { + var keys = Object.keys(this) + var i = keys.length + var deleted = false + while (i--) { + var key = keys[i] + if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key] + deleted = true + } + } + return deleted + } + }, + { + key: "normalize", + value: function normalize(format) { + var self = this + var headers = {} + utils$1.forEach(this, function (value, header) { + var key = utils$1.findKey(headers, header) + if (key) { + self[key] = normalizeValue(value) + delete self[header] + return + } + var normalized = format ? formatHeader(header) : String(header).trim() + if (normalized !== header) { + delete self[header] + } + self[normalized] = normalizeValue(value) + headers[normalized] = true + }) + return this + } + }, + { + key: "concat", + value: function concat() { + var _this$constructor + for (var _len = arguments.length, targets = new Array(_len), _key = 0; _key < _len; _key++) { + targets[_key] = arguments[_key] + } + return (_this$constructor = this.constructor).concat.apply(_this$constructor, [this].concat(targets)) + } + }, + { + key: "toJSON", + value: function toJSON(asStrings) { + var obj = Object.create(null) + utils$1.forEach(this, function (value, header) { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(", ") : value) + }) + return obj + } + }, + { + key: _Symbol$iterator, + value: function value() { + return Object.entries(this.toJSON())[Symbol.iterator]() + } + }, + { + key: "toString", + value: function toString() { + return Object.entries(this.toJSON()) + .map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + header = _ref2[0], + value = _ref2[1] + return header + ": " + value + }) + .join("\n") + } + }, + { + key: _Symbol$toStringTag, + get: function get() { + return "AxiosHeaders" + } + } + ], + [ + { + key: "from", + value: function from(thing) { + return thing instanceof this ? thing : new this(thing) + } + }, + { + key: "concat", + value: function concat(first) { + var computed = new this(first) + for (var _len2 = arguments.length, targets = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + targets[_key2 - 1] = arguments[_key2] + } + targets.forEach(function (target) { + return computed.set(target) + }) + return computed + } + }, + { + key: "accessor", + value: function accessor(header) { + var internals = + (this[$internals] = + this[$internals] = + { + accessors: {} + }) + var accessors = internals.accessors + var prototype = this.prototype + function defineAccessor(_header) { + var lHeader = normalizeHeader(_header) + if (!accessors[lHeader]) { + buildAccessors(prototype, _header) + accessors[lHeader] = true + } + } + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header) + return this + } + } + ] + ) + return AxiosHeaders + })(Symbol.iterator, Symbol.toStringTag) + AxiosHeaders.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]) + + // reserved names hotfix + utils$1.reduceDescriptors(AxiosHeaders.prototype, function (_ref3, key) { + var value = _ref3.value + var mapped = key[0].toUpperCase() + key.slice(1) // map `set` => `Set` + return { + get: function get() { + return value + }, + set: function set(headerValue) { + this[mapped] = headerValue + } + } + }) + utils$1.freezeMethods(AxiosHeaders) + var AxiosHeaders$1 = AxiosHeaders + + /** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ + function transformData(fns, response) { + var config = this || defaults$1 + var context = response || config + var headers = AxiosHeaders$1.from(context.headers) + var data = context.data + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined) + }) + headers.normalize() + return data + } + + function isCancel(value) { + return !!(value && value.__CANCEL__) + } + + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? "canceled" : message, AxiosError.ERR_CANCELED, config, request) + this.name = "CanceledError" + } + utils$1.inherits(CanceledError, AxiosError, { + __CANCEL__: true + }) + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ + function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response) + } else { + reject( + new AxiosError( + "Request failed with status code " + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + ) + ) + } + } + + var cookies = platform.hasStandardBrowserEnv + ? // Standard browser envs support document.cookie + { + write: function write(name, value, expires, path, domain, secure) { + var cookie = [name + "=" + encodeURIComponent(value)] + utils$1.isNumber(expires) && cookie.push("expires=" + new Date(expires).toGMTString()) + utils$1.isString(path) && cookie.push("path=" + path) + utils$1.isString(domain) && cookie.push("domain=" + domain) + secure === true && cookie.push("secure") + document.cookie = cookie.join("; ") + }, + read: function read(name) { + var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)")) + return match ? decodeURIComponent(match[3]) : null + }, + remove: function remove(name) { + this.write(name, "", Date.now() - 86400000) + } + } + : // Non-standard browser env (web workers, react-native) lack needed support. + { + write: function write() {}, + read: function read() { + return null + }, + remove: function remove() {} + } + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url) + } + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ + function combineURLs(baseURL, relativeURL) { + return relativeURL ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL + } + + /** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ + function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL) + } + return requestedURL + } + + var isURLSameOrigin = platform.hasStandardBrowserEnv + ? // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent) + var urlParsingNode = document.createElement("a") + var originURL + + /** + * Parse a URL to discover its components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute("href", href) + href = urlParsingNode.href + } + urlParsingNode.setAttribute("href", href) + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "", + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "", + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "", + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname + } + } + originURL = resolveURL(window.location.href) + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = utils$1.isString(requestURL) ? resolveURL(requestURL) : requestURL + return parsed.protocol === originURL.protocol && parsed.host === originURL.host + } + })() + : // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true + } + })() + + function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url) + return (match && match[1]) || "" + } + + /** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ + function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10 + var bytes = new Array(samplesCount) + var timestamps = new Array(samplesCount) + var head = 0 + var tail = 0 + var firstSampleTS + min = min !== undefined ? min : 1000 + return function push(chunkLength) { + var now = Date.now() + var startedAt = timestamps[tail] + if (!firstSampleTS) { + firstSampleTS = now + } + bytes[head] = chunkLength + timestamps[head] = now + var i = tail + var bytesCount = 0 + while (i !== head) { + bytesCount += bytes[i++] + i = i % samplesCount + } + head = (head + 1) % samplesCount + if (head === tail) { + tail = (tail + 1) % samplesCount + } + if (now - firstSampleTS < min) { + return + } + var passed = startedAt && now - startedAt + return passed ? Math.round((bytesCount * 1000) / passed) : undefined + } + } + + function progressEventReducer(listener, isDownloadStream) { + var bytesNotified = 0 + var _speedometer = speedometer(50, 250) + return function (e) { + var loaded = e.loaded + var total = e.lengthComputable ? e.total : undefined + var progressBytes = loaded - bytesNotified + var rate = _speedometer(progressBytes) + var inRange = loaded <= total + bytesNotified = loaded + var data = { + loaded: loaded, + total: total, + progress: total ? loaded / total : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e + } + data[isDownloadStream ? "download" : "upload"] = true + listener(data) + } + } + var isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined" + var xhrAdapter = + isXHRAdapterSupported && + function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data + var requestHeaders = AxiosHeaders$1.from(config.headers).normalize() + var responseType = config.responseType, + withXSRFToken = config.withXSRFToken + var onCanceled + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled) + } + if (config.signal) { + config.signal.removeEventListener("abort", onCanceled) + } + } + var contentType + if (utils$1.isFormData(requestData)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + requestHeaders.setContentType(false) // Let the browser set it + } else if ((contentType = requestHeaders.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + var _ref = contentType + ? contentType + .split(";") + .map(function (token) { + return token.trim() + }) + .filter(Boolean) + : [], + _ref2 = _toArray(_ref), + type = _ref2[0], + tokens = _ref2.slice(1) + requestHeaders.setContentType([type || "multipart/form-data"].concat(_toConsumableArray(tokens)).join("; ")) + } + } + var request = new XMLHttpRequest() + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || "" + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : "" + requestHeaders.set("Authorization", "Basic " + btoa(username + ":" + password)) + } + var fullPath = buildFullPath(config.baseURL, config.url) + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true) + + // Set the request timeout in MS + request.timeout = config.timeout + function onloadend() { + if (!request) { + return + } + // Prepare the response + var responseHeaders = AxiosHeaders$1.from("getAllResponseHeaders" in request && request.getAllResponseHeaders()) + var responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + } + settle( + function _resolve(value) { + resolve(value) + done() + }, + function _reject(err) { + reject(err) + done() + }, + response + ) + + // Clean up request + request = null + } + if ("onloadend" in request) { + // Use onloadend if available + request.onloadend = onloadend + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) { + return + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend) + } + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return + } + reject(new AxiosError("Request aborted", AxiosError.ECONNABORTED, config, request)) + + // Clean up request + request = null + } + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError("Network Error", AxiosError.ERR_NETWORK, config, request)) + + // Clean up request + request = null + } + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded" + var transitional = config.transitional || transitionalDefaults + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage + } + reject( + new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request + ) + ) + + // Clean up request + request = null + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config)) + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) { + // Add xsrf header + var xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName) + if (xsrfValue) { + requestHeaders.set(config.xsrfHeaderName, xsrfValue) + } + } + } + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null) + + // Add headers to the request + if ("setRequestHeader" in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val) + }) + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials + } + + // Add responseType to request if needed + if (responseType && responseType !== "json") { + request.responseType = config.responseType + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === "function") { + request.addEventListener("progress", progressEventReducer(config.onDownloadProgress, true)) + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === "function" && request.upload) { + request.upload.addEventListener("progress", progressEventReducer(config.onUploadProgress)) + } + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function onCanceled(cancel) { + if (!request) { + return + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel) + request.abort() + request = null + } + config.cancelToken && config.cancelToken.subscribe(onCanceled) + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener("abort", onCanceled) + } + } + var protocol = parseProtocol(fullPath) + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError("Unsupported protocol " + protocol + ":", AxiosError.ERR_BAD_REQUEST, config)) + return + } + + // Send the request + request.send(requestData || null) + }) + } + + var knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter + } + utils$1.forEach(knownAdapters, function (fn, value) { + if (fn) { + try { + Object.defineProperty(fn, "name", { + value: value + }) + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, "adapterName", { + value: value + }) + } + }) + var renderReason = function renderReason(reason) { + return "- ".concat(reason) + } + var isResolvedHandle = function isResolvedHandle(adapter) { + return utils$1.isFunction(adapter) || adapter === null || adapter === false + } + var adapters = { + getAdapter: function getAdapter(adapters) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters] + var _adapters = adapters, + length = _adapters.length + var nameOrAdapter + var adapter + var rejectedReasons = {} + for (var i = 0; i < length; i++) { + nameOrAdapter = adapters[i] + var id = void 0 + adapter = nameOrAdapter + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()] + if (adapter === undefined) { + throw new AxiosError("Unknown adapter '".concat(id, "'")) + } + } + if (adapter) { + break + } + rejectedReasons[id || "#" + i] = adapter + } + if (!adapter) { + var reasons = Object.entries(rejectedReasons).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + id = _ref2[0], + state = _ref2[1] + return "adapter ".concat(id, " ") + (state === false ? "is not supported by the environment" : "is not available in the build") + }) + var s = length + ? reasons.length > 1 + ? "since :\n" + reasons.map(renderReason).join("\n") + : " " + renderReason(reasons[0]) + : "as no adapter specified" + throw new AxiosError("There is no suitable adapter to dispatch the request " + s, "ERR_NOT_SUPPORT") + } + return adapter + }, + adapters: knownAdapters + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested() + } + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config) + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ + function dispatchRequest(config) { + throwIfCancellationRequested(config) + config.headers = AxiosHeaders$1.from(config.headers) + + // Transform request data + config.data = transformData.call(config, config.transformRequest) + if (["post", "put", "patch"].indexOf(config.method) !== -1) { + config.headers.setContentType("application/x-www-form-urlencoded", false) + } + var adapter = adapters.getAdapter(config.adapter || defaults$1.adapter) + return adapter(config).then( + function onAdapterResolution(response) { + throwIfCancellationRequested(config) + + // Transform response data + response.data = transformData.call(config, config.transformResponse, response) + response.headers = AxiosHeaders$1.from(response.headers) + return response + }, + function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config) + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call(config, config.transformResponse, reason.response) + reason.response.headers = AxiosHeaders$1.from(reason.response.headers) + } + } + return Promise.reject(reason) + } + ) + } + + var headersToObject = function headersToObject(thing) { + return thing instanceof AxiosHeaders$1 ? thing.toJSON() : thing + } + + /** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ + function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {} + var config = {} + function getMergedValue(target, source, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call( + { + caseless: caseless + }, + target, + source + ) + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source) + } else if (utils$1.isArray(source)) { + return source.slice() + } + return source + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, caseless) + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, caseless) + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b) + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b) + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a) + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b) + } else if (prop in config1) { + return getMergedValue(undefined, a) + } + } + var mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: function headers(a, b) { + return mergeDeepProperties(headersToObject(a), headersToObject(b), true) + } + } + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties + var configValue = merge(config1[prop], config2[prop], prop) + ;(utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue) + }) + return config + } + + var VERSION = "1.6.5" + + var validators$1 = {} + + // eslint-disable-next-line func-names + ;["object", "boolean", "number", "function", "string", "symbol"].forEach(function (type, i) { + validators$1[type] = function validator(thing) { + return _typeof(thing) === type || "a" + (i < 1 ? "n " : " ") + type + } + }) + var deprecatedWarnings = {} + + /** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ + validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : "") + } + + // eslint-disable-next-line func-names + return function (value, opt, opts) { + if (validator === false) { + throw new AxiosError(formatMessage(opt, " has been removed" + (version ? " in " + version : "")), AxiosError.ERR_DEPRECATED) + } + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true + // eslint-disable-next-line no-console + console.warn(formatMessage(opt, " has been deprecated since v" + version + " and will be removed in the near future")) + } + return validator ? validator(value, opt, opts) : true + } + } + + /** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + + function assertOptions(options, schema, allowUnknown) { + if (_typeof(options) !== "object") { + throw new AxiosError("options must be an object", AxiosError.ERR_BAD_OPTION_VALUE) + } + var keys = Object.keys(options) + var i = keys.length + while (i-- > 0) { + var opt = keys[i] + var validator = schema[opt] + if (validator) { + var value = options[opt] + var result = value === undefined || validator(value, opt, options) + if (result !== true) { + throw new AxiosError("option " + opt + " must be " + result, AxiosError.ERR_BAD_OPTION_VALUE) + } + continue + } + if (allowUnknown !== true) { + throw new AxiosError("Unknown option " + opt, AxiosError.ERR_BAD_OPTION) + } + } + } + var validator = { + assertOptions: assertOptions, + validators: validators$1 + } + + var validators = validator.validators + + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ + var Axios = /*#__PURE__*/ (function () { + function Axios(instanceConfig) { + _classCallCheck(this, Axios) + this.defaults = instanceConfig + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + } + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + _createClass(Axios, [ + { + key: "request", + value: function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === "string") { + config = config || {} + config.url = configOrUrl + } else { + config = configOrUrl || {} + } + config = mergeConfig(this.defaults, config) + var _config = config, + transitional = _config.transitional, + paramsSerializer = _config.paramsSerializer, + headers = _config.headers + if (transitional !== undefined) { + validator.assertOptions( + transitional, + { + silentJSONParsing: validators.transitional(validators["boolean"]), + forcedJSONParsing: validators.transitional(validators["boolean"]), + clarifyTimeoutError: validators.transitional(validators["boolean"]) + }, + false + ) + } + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + } + } else { + validator.assertOptions( + paramsSerializer, + { + encode: validators["function"], + serialize: validators["function"] + }, + true + ) + } + } + + // Set config.method + config.method = (config.method || this.defaults.method || "get").toLowerCase() + + // Flatten headers + var contextHeaders = headers && utils$1.merge(headers.common, headers[config.method]) + headers && + utils$1.forEach(["delete", "get", "head", "post", "put", "patch", "common"], function (method) { + delete headers[method] + }) + config.headers = AxiosHeaders$1.concat(contextHeaders, headers) + + // filter out skipped interceptors + var requestInterceptorChain = [] + var synchronousRequestInterceptors = true + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) { + return + } + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected) + }) + var responseInterceptorChain = [] + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected) + }) + var promise + var i = 0 + var len + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest.bind(this), undefined] + chain.unshift.apply(chain, requestInterceptorChain) + chain.push.apply(chain, responseInterceptorChain) + len = chain.length + promise = Promise.resolve(config) + while (i < len) { + promise = promise.then(chain[i++], chain[i++]) + } + return promise + } + len = requestInterceptorChain.length + var newConfig = config + i = 0 + while (i < len) { + var onFulfilled = requestInterceptorChain[i++] + var onRejected = requestInterceptorChain[i++] + try { + newConfig = onFulfilled(newConfig) + } catch (error) { + onRejected.call(this, error) + break + } + } + try { + promise = dispatchRequest.call(this, newConfig) + } catch (error) { + return Promise.reject(error) + } + i = 0 + len = responseInterceptorChain.length + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]) + } + return promise + } + }, + { + key: "getUri", + value: function getUri(config) { + config = mergeConfig(this.defaults, config) + var fullPath = buildFullPath(config.baseURL, config.url) + return buildURL(fullPath, config.params, config.paramsSerializer) + } + } + ]) + return Axios + })() // Provide aliases for supported request methods + utils$1.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function (url, config) { + return this.request( + mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + }) + ) + } + }) + utils$1.forEach(["post", "put", "patch"], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request( + mergeConfig(config || {}, { + method: method, + headers: isForm + ? { + "Content-Type": "multipart/form-data" + } + : {}, + url: url, + data: data + }) + ) + } + } + Axios.prototype[method] = generateHTTPMethod() + Axios.prototype[method + "Form"] = generateHTTPMethod(true) + }) + var Axios$1 = Axios + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ + var CancelToken = /*#__PURE__*/ (function () { + function CancelToken(executor) { + _classCallCheck(this, CancelToken) + if (typeof executor !== "function") { + throw new TypeError("executor must be a function.") + } + var resolvePromise + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve + }) + var token = this + + // eslint-disable-next-line func-names + this.promise.then(function (cancel) { + if (!token._listeners) return + var i = token._listeners.length + while (i-- > 0) { + token._listeners[i](cancel) + } + token._listeners = null + }) + + // eslint-disable-next-line func-names + this.promise.then = function (onfulfilled) { + var _resolve + // eslint-disable-next-line func-names + var promise = new Promise(function (resolve) { + token.subscribe(resolve) + _resolve = resolve + }).then(onfulfilled) + promise.cancel = function reject() { + token.unsubscribe(_resolve) + } + return promise + } + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return + } + token.reason = new CanceledError(message, config, request) + resolvePromise(token.reason) + }) + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + _createClass( + CancelToken, + [ + { + key: "throwIfRequested", + value: function throwIfRequested() { + if (this.reason) { + throw this.reason + } + } + + /** + * Subscribe to the cancel signal + */ + }, + { + key: "subscribe", + value: function subscribe(listener) { + if (this.reason) { + listener(this.reason) + return + } + if (this._listeners) { + this._listeners.push(listener) + } else { + this._listeners = [listener] + } + } + + /** + * Unsubscribe from the cancel signal + */ + }, + { + key: "unsubscribe", + value: function unsubscribe(listener) { + if (!this._listeners) { + return + } + var index = this._listeners.indexOf(listener) + if (index !== -1) { + this._listeners.splice(index, 1) + } + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + } + ], + [ + { + key: "source", + value: function source() { + var cancel + var token = new CancelToken(function executor(c) { + cancel = c + }) + return { + token: token, + cancel: cancel + } + } + } + ] + ) + return CancelToken + })() + var CancelToken$1 = CancelToken + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ + function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr) + } + } + + /** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ + function isAxiosError(payload) { + return utils$1.isObject(payload) && payload.isAxiosError === true + } + + var HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511 + } + Object.entries(HttpStatusCode).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1] + HttpStatusCode[value] = key + }) + var HttpStatusCode$1 = HttpStatusCode + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios$1(defaultConfig) + var instance = bind(Axios$1.prototype.request, context) + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, { + allOwnKeys: true + }) + + // Copy context to instance + utils$1.extend(instance, context, null, { + allOwnKeys: true + }) + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)) + } + return instance + } + + // Create the default instance to be exported + var axios = createInstance(defaults$1) + + // Expose Axios class to allow class inheritance + axios.Axios = Axios$1 + + // Expose Cancel & CancelToken + axios.CanceledError = CanceledError + axios.CancelToken = CancelToken$1 + axios.isCancel = isCancel + axios.VERSION = VERSION + axios.toFormData = toFormData + + // Expose AxiosError class + axios.AxiosError = AxiosError + + // alias for CanceledError for backward compatibility + axios.Cancel = axios.CanceledError + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises) + } + axios.spread = spread + + // Expose isAxiosError + axios.isAxiosError = isAxiosError + + // Expose mergeConfig + axios.mergeConfig = mergeConfig + axios.AxiosHeaders = AxiosHeaders$1 + axios.formToJSON = function (thing) { + return formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing) + } + axios.getAdapter = adapters.getAdapter + axios.HttpStatusCode = HttpStatusCode$1 + axios["default"] = axios + + return axios +}) +//# sourceMappingURL=axios.js.map diff --git a/src/main/resources/static/components/activity/school/tissueInfo.vue b/src/main/resources/static/components/activity/school/tissueInfo.vue index 6b1666c..8cff329 100644 --- a/src/main/resources/static/components/activity/school/tissueInfo.vue +++ b/src/main/resources/static/components/activity/school/tissueInfo.vue @@ -1,373 +1,312 @@ diff --git a/src/main/resources/views/layouts/platform.html b/src/main/resources/views/layouts/platform.html index 322d3ce..c49983d 100644 --- a/src/main/resources/views/layouts/platform.html +++ b/src/main/resources/views/layouts/platform.html @@ -36,6 +36,9 @@ + + + @@ -146,6 +149,8 @@ window.viewImage = viewImage; Vue.prototype.$viewImage = viewImage Vue.prototype.$auth = commonUtil.authService() + Vue.prototype.$axios = commonUtil.axiosService() + Vue.prototype.$downLoad = commonUtil.downLoadService diff --git a/src/main/resources/views/mobile/activity/unionActivity/common/activityInfo.html b/src/main/resources/views/mobile/activity/unionActivity/common/activityInfo.html index 30e0372..fc5cedc 100644 --- a/src/main/resources/views/mobile/activity/unionActivity/common/activityInfo.html +++ b/src/main/resources/views/mobile/activity/unionActivity/common/activityInfo.html @@ -61,11 +61,7 @@ - + 点我查看详情