diff --git a/maintain-admin/src/main/java/com/maintain/web/controller/system/SysDeptController.java b/maintain-admin/src/main/java/com/maintain/web/controller/system/SysDeptController.java index 499f1132716f30e3ec577af6f5e6cf2aed934538..1bd734c68eea4f7da20b56d1e7b0dc4ab3859577 100644 --- a/maintain-admin/src/main/java/com/maintain/web/controller/system/SysDeptController.java +++ b/maintain-admin/src/main/java/com/maintain/web/controller/system/SysDeptController.java @@ -1,6 +1,5 @@ package com.maintain.web.controller.system; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.convert.Convert; @@ -136,10 +135,18 @@ public class SysDeptController extends BaseController { } - @SaIgnore - @PostMapping("/deptExtracted") - public R deptExtracted() { - deptService.deptExtracted(); - return R.ok("操作成功"); + + + /** + * 同步外部数据 + * @return + */ + // @SaIgnore + @SaCheckPermission("system:dept:sync") + @Log(title = "同步部门外部数据", businessType = BusinessType.OTHER) + @PostMapping("/deptSync") + public R deptSync() { + deptService.deptSync(); + return R.ok("数据同步成功"); } } diff --git a/maintain-admin/src/main/java/com/maintain/web/controller/system/SysUserController.java b/maintain-admin/src/main/java/com/maintain/web/controller/system/SysUserController.java index 4777568d3fa7084b445afc3dd8e43a944f7bcb00..55d9c4108ce6a00a764484beb0c7eb78dbc2ca80 100644 --- a/maintain-admin/src/main/java/com/maintain/web/controller/system/SysUserController.java +++ b/maintain-admin/src/main/java/com/maintain/web/controller/system/SysUserController.java @@ -255,10 +255,14 @@ public class SysUserController extends BaseController { } - @SaIgnore - @PostMapping("/userExtracted") - public R userExtracted() { - userService.userExtracted(); + /** + * 同步外部用户数据 + */ +// @SaIgnore + @SaCheckPermission("system:user:sync") + @PostMapping("/userSync") + public R userSync() { + userService.userSync(); return R.ok("操作成功"); } } diff --git a/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalDept.java b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalDept.java new file mode 100644 index 0000000000000000000000000000000000000000..59be75dca2d7a70b8f646dc862615527b8b78477 --- /dev/null +++ b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalDept.java @@ -0,0 +1,72 @@ +package com.maintain.common.core.domain.entity; + +import lombok.Data; + +/** + * 外部部门 + */ +public class ExternalDept { + private String deptName; + private String upperDeptName; + private String upperDeptCode; + private String deptType; + private String deptCode; + private String deptFullName; + private String status; + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getUpperDeptName() { + return upperDeptName; + } + + public void setUpperDeptName(String upperDeptName) { + this.upperDeptName = upperDeptName; + } + + public String getUpperDeptCode() { + return upperDeptCode; + } + + public void setUpperDeptCode(String upperDeptCode) { + this.upperDeptCode = upperDeptCode; + } + + public String getDeptType() { + return deptType; + } + + public void setDeptType(String deptType) { + this.deptType = deptType; + } + + public String getDeptCode() { + return deptCode; + } + + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + + public String getDeptFullName() { + return deptFullName; + } + + public void setDeptFullName(String deptFullName) { + this.deptFullName = deptFullName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalUser.java b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalUser.java new file mode 100644 index 0000000000000000000000000000000000000000..d387bf327337be4b9fc6e7eed1c4394f49d3e09c --- /dev/null +++ b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/ExternalUser.java @@ -0,0 +1,115 @@ +package com.maintain.common.core.domain.entity; + +/** + * 外部部门 + */ +public class ExternalUser { + private String filaNo; + private String groupName; + private String lineNo; + private String empName; + private String statusName; + private String lineName; + private String empNo; + private String groupNo; + private String subStatusName; + private String filaName; + private String subStatus; + private String status; + + public String getFilaNo() { + return filaNo; + } + + public void setFilaNo(String filaNo) { + this.filaNo = filaNo; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getLineNo() { + return lineNo; + } + + public void setLineNo(String lineNo) { + this.lineNo = lineNo; + } + + public String getEmpName() { + return empName; + } + + public void setEmpName(String empName) { + this.empName = empName; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public String getLineName() { + return lineName; + } + + public void setLineName(String lineName) { + this.lineName = lineName; + } + + public String getEmpNo() { + return empNo; + } + + public void setEmpNo(String empNo) { + this.empNo = empNo; + } + + public String getGroupNo() { + return groupNo; + } + + public void setGroupNo(String groupNo) { + this.groupNo = groupNo; + } + + public String getSubStatusName() { + return subStatusName; + } + + public void setSubStatusName(String subStatusName) { + this.subStatusName = subStatusName; + } + + public String getFilaName() { + return filaName; + } + + public void setFilaName(String filaName) { + this.filaName = filaName; + } + + public String getSubStatus() { + return subStatus; + } + + public void setSubStatus(String subStatus) { + this.subStatus = subStatus; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/maintain-common/src/main/java/com/maintain/common/core/domain/entity/SysDept.java b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/SysDept.java index 23d6dac6c608e883f933f07b59903f8ef36ae887..aaa486cb8d7a044cf166974ce1411027b9d97f8f 100644 --- a/maintain-common/src/main/java/com/maintain/common/core/domain/entity/SysDept.java +++ b/maintain-common/src/main/java/com/maintain/common/core/domain/entity/SysDept.java @@ -72,6 +72,11 @@ public class SysDept extends TreeEntity { @TableLogic private String delFlag; + /** + * 外部code + */ + private String externalDeptCode; + /** * 祖级列表 */ diff --git a/maintain-system/src/main/java/com/maintain/system/service/ISysDeptService.java b/maintain-system/src/main/java/com/maintain/system/service/ISysDeptService.java index 5c6d7f87f9627735ce3fbabb5ee6d43f940cdde1..b837f96f4158e8a2809bdcdcf7a5af0d01e5efca 100644 --- a/maintain-system/src/main/java/com/maintain/system/service/ISysDeptService.java +++ b/maintain-system/src/main/java/com/maintain/system/service/ISysDeptService.java @@ -125,4 +125,9 @@ public interface ISysDeptService { * 外部数据创建 */ void deptExtracted(); + + /** + * 根据外部接口同步部门数据 + */ + void deptSync(); } diff --git a/maintain-system/src/main/java/com/maintain/system/service/ISysUserService.java b/maintain-system/src/main/java/com/maintain/system/service/ISysUserService.java index ec245a67ef33f17356015afec53e10b042b9a1de..461461e25d2b1078e8199221ab4bc5f63cdb5e47 100644 --- a/maintain-system/src/main/java/com/maintain/system/service/ISysUserService.java +++ b/maintain-system/src/main/java/com/maintain/system/service/ISysUserService.java @@ -209,8 +209,13 @@ public interface ISysUserService { int deleteUserByIds(Long[] userIds); /** - * 外部数据创建 + * 根据文件同步外部数据 */ void userExtracted(); + /** + * 根据接口同步外部数据 + */ + void userSync(); + } diff --git a/maintain-system/src/main/java/com/maintain/system/service/impl/SysDeptServiceImpl.java b/maintain-system/src/main/java/com/maintain/system/service/impl/SysDeptServiceImpl.java index d1df37dfebd2936c25ea3ed2ad788cfb5ce8560f..f056a57ca62fa98bd48992ab77c52a73fb5fdc41 100644 --- a/maintain-system/src/main/java/com/maintain/system/service/impl/SysDeptServiceImpl.java +++ b/maintain-system/src/main/java/com/maintain/system/service/impl/SysDeptServiceImpl.java @@ -1,17 +1,22 @@ package com.maintain.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.fasterxml.jackson.databind.ObjectMapper; import com.maintain.common.constant.CacheNames; import com.maintain.common.constant.UserConstants; +import com.maintain.common.core.domain.entity.ExternalDept; import com.maintain.common.core.domain.entity.SysDept; import com.maintain.common.core.domain.entity.SysRole; import com.maintain.common.core.domain.entity.SysUser; import com.maintain.common.core.service.DeptService; +import com.maintain.common.enums.IsEnableStatus; import com.maintain.common.exception.ServiceException; import com.maintain.common.helper.DataBaseHelper; import com.maintain.common.helper.LoginHelper; @@ -32,6 +37,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * 部门管理 服务实现 @@ -323,4 +329,48 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { baseMapper.insertBatch(sysDeptList); } + /** + * 根据外部接口同步部门数据 + */ + @Override + public void deptSync() { + String res = com.zxw.util.tm.HttpTmEncryptUtil.sendPostRequest("http://10.100.102.67:22220/api/basis/deptInfoExtRepair", null, null); + Map map = JSONUtil.toBean(res, Map.class); + List departmentList = JSONUtil.toList(JSONUtil.toJsonStr(map.get("data")), ExternalDept.class); + departmentList.forEach(department -> { + SysDept selectOne = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysDept::getExternalDeptCode, department.getDeptCode())); + // 查询是否已存在系统 + if (null == selectOne) { + SysDept dept = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysDept::getExternalDeptCode, department.getUpperDeptCode())); + if (dept != null) { + SysDept sysDept = new SysDept(); + sysDept.setAncestors(dept.getAncestors() + StringUtils.SEPARATOR + dept.getDeptId()); + sysDept.setParentId(dept.getDeptId()); + sysDept.setDeptName(department.getDeptName()); + sysDept.setExternalDeptCode(department.getDeptCode()); + // 状态转换 + sysDept.setStatus( + department.getStatus().equals("已启用") + ? String.valueOf(IsEnableStatus.YES.getCode()) // 已启用对应YES + : String.valueOf(IsEnableStatus.NO.getCode()) + ); + baseMapper.insert(sysDept); + } else if (department.getUpperDeptCode().equals("-1")) { + SysDept sysDept = new SysDept(); + sysDept.setAncestors("0,1"); + sysDept.setParentId(1L); + sysDept.setDeptName(department.getDeptName()); + sysDept.setExternalDeptCode(department.getDeptCode()); + // 状态转换 + sysDept.setStatus( + department.getStatus().equals("已启用") + ? String.valueOf(IsEnableStatus.YES.getCode()) // 已启用对应YES + : String.valueOf(IsEnableStatus.NO.getCode()) + ); + baseMapper.insert(sysDept); + } + } + }); + } + } diff --git a/maintain-system/src/main/java/com/maintain/system/service/impl/SysUserServiceImpl.java b/maintain-system/src/main/java/com/maintain/system/service/impl/SysUserServiceImpl.java index 0bc6a8ce2851d6520027ca392a723c80168286d7..d4fd6e228715e30da0b36ac88ea72a85da72f1e8 100644 --- a/maintain-system/src/main/java/com/maintain/system/service/impl/SysUserServiceImpl.java +++ b/maintain-system/src/main/java/com/maintain/system/service/impl/SysUserServiceImpl.java @@ -1,8 +1,10 @@ package com.maintain.system.service.impl; +import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -12,11 +14,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.maintain.common.constant.CacheNames; import com.maintain.common.constant.UserConstants; import com.maintain.common.core.domain.PageQuery; -import com.maintain.common.core.domain.entity.SysDept; -import com.maintain.common.core.domain.entity.SysRole; -import com.maintain.common.core.domain.entity.SysUser; +import com.maintain.common.core.domain.entity.*; import com.maintain.common.core.page.TableDataInfo; import com.maintain.common.core.service.UserService; +import com.maintain.common.enums.UserStatus; import com.maintain.common.exception.ServiceException; import com.maintain.common.helper.DataBaseHelper; import com.maintain.common.helper.LoginHelper; @@ -34,6 +35,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -490,4 +492,32 @@ public class SysUserServiceImpl implements ISysUserService, UserService { baseMapper.insertBatch(userList); } + /** + * 根据接口同步外部数据 + */ + @Override + public void userSync() { + String res = com.zxw.util.tm.HttpTmEncryptUtil.sendPostRequest("http://10.100.102.67:22220/api/basis/empInfoExtRepair", null, null); + Map map = JSONUtil.toBean(res, Map.class); + List externalUserList = JSONUtil.toList(JSONUtil.toJsonStr(map.get("data")), ExternalUser.class); + List users = new ArrayList<>(); + List sysUserList = baseMapper.selectList(); + List sysDeptList = deptMapper.selectList(); + externalUserList.forEach(externalUser -> { + if (sysUserList.stream().noneMatch(item -> externalUser.getEmpNo().equals(item.getUserName()))) { + SysUser sysUser = new SysUser(); + SysDept dept = sysDeptList.stream().filter(item -> item.getExternalDeptCode().equals(externalUser.getGroupNo())) + .findFirst() + .orElseThrow(() -> new RuntimeException("未找到部门=" + externalUser.getGroupNo())); + sysUser.setDeptId(dept != null ? dept.getDeptId() : null); + sysUser.setUserName(externalUser.getEmpNo()); + sysUser.setNickName(externalUser.getEmpName()); + sysUser.setStatus(externalUser.getStatusName().equals("在职") ? UserStatus.OK.getCode() : UserStatus.DISABLE.getCode()); + sysUser.setPassword(BCrypt.hashpw(externalUser.getEmpNo())); + users.add(sysUser); + } + }); + baseMapper.insertBatch(users); + } + } diff --git a/maintain-system/src/main/java/com/maintain/system/util/HttpTmEncryptUtil.java b/maintain-system/src/main/java/com/maintain/system/util/HttpTmEncryptUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..cd7ca5c242e38cb476098c0486cc93b870b119f2 --- /dev/null +++ b/maintain-system/src/main/java/com/maintain/system/util/HttpTmEncryptUtil.java @@ -0,0 +1,190 @@ +package com.zxw.util.tm; + +import cn.hutool.core.codec.Base64; +import cn.hutool.json.JSONObject; +import org.apache.commons.codec.digest.HmacUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import sun.misc.BASE64Decoder; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.io.UnsupportedEncodingException; +import java.net.*; +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.util.*; + +/** + * 天迈数据http请求 + */ +public class HttpTmEncryptUtil { + /** + * 客户端appid + */ + private static String appId = "1924051882771222530"; + /** + * 客户端鉴权密钥 + */ + private static String secret = "869v5NED"; + /** + * 数据加密密钥 + */ + private static String secretKey = "..."; + + /** + * 天迈数据请求地址 + */ + private static final String TM_PERSON_DATA_URL = "http://10.100.102.67:22220/api/basis/deptInfoExtRepair"; + + // 示例调用 + public static void main(String[] args) { + // 构造请求参数 + MultiValueMap params = new LinkedMultiValueMap<>(); +// params.add("dataDate", "20250301"); +// params.add("curPage", "1"); +// params.add("pageSize", "10"); + + JSONObject boby = new JSONObject(); + boby.append("curPage", "1"); + boby.append("pageSize", "1"); + + // 构造请求体(JSON) +// String body = "{\"dataDate\":\"20250301\"}"; + + // 发送请求 + String response = sendPostRequest(TM_PERSON_DATA_URL, params, boby.toString()); + System.out.println("响应结果: " + response); + } + + /** + * 构建带有鉴权头的POST请求 + */ + public static String sendPostRequest(String url, MultiValueMap params, String body) { + RestTemplate restTemplate = new RestTemplate(); + try { + // 1. 生成鉴权头 + HttpHeaders headers = getHeaders(params, body); + // 2. 构建请求实体(包含头和体) + HttpEntity requestEntity = new HttpEntity<>(body, headers); + // 3. 发送POST请求 + ResponseEntity response = restTemplate.exchange( + url, + HttpMethod.POST, + requestEntity, + String.class + ); + return response.getBody(); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("编码错误", e); + } + } + + /** + * 拼装请求数据 + * + * @param appid appid + * @param timestamp 时间戳 + * @param params 参数 + * @param body 请求体 + */ + public static String baseString(String appid, long timestamp, MultiValueMap params, @Nullable String body) throws UnsupportedEncodingException { + StringBuilder baseString = new StringBuilder(); + if (MapUtils.isNotEmpty(params)) { + params.keySet().stream().sorted().forEach(key -> { + List values = params.get(key); + if (CollectionUtils.isNotEmpty(values)) { + baseString.append(key).append("="); + baseString.append(values.size() == 1 ? values.get(0) : Arrays.toString(values.toArray())); + baseString.append("&"); + } + }); + } + baseString.append("appid=").append(appid).append("&"); + baseString.append("timestamp=").append(timestamp); + if (StringUtils.isNotBlank(body)) { + body = body.replaceAll("\\s*", StringUtils.EMPTY); + baseString.append("&body=").append(body); + } + + return URLDecoder.decode(baseString.toString(), StandardCharsets.UTF_8.name()); + } + + /** + * 生成摘要digest + * + * @param secret secret + * @param salt 拼接好的请求参数字符串 + */ + public static String encode(String secret , String salt) { + final byte[] key = secret .getBytes(StandardCharsets.UTF_8); + final byte[] digest = salt.getBytes(StandardCharsets.UTF_8); + byte[] bytes = HmacUtils.hmacSha1(key, digest); + return Base64.encode(bytes); + } + + /** + * 获取鉴权Authorization + * + * @param timestamp 当前请求时间戳 + * @param params 请求url参数 + * @param body 请求体 + * @return 鉴权Authorization + */ + private static String getAuthorization(long timestamp, MultiValueMap params, String body) throws UnsupportedEncodingException { + String salt = baseString(appId, timestamp, params, body); + return "HmacSHA " + appId + ":" + timestamp + ":" + encode(secret , salt); + } + + /** + * 获取设置鉴权的HttpHeaders + * + * @param params 请求url参数 + * @param body 请求体 + * @return HttpHeaders + */ + private static HttpHeaders getHeaders(MultiValueMap params, String body) throws UnsupportedEncodingException { + // 当前请求时间戳 + long timestamp = System.currentTimeMillis(); + String authorization = getAuthorization(timestamp, params, body); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set("Content-Type", "application/json"); + httpHeaders.set("Authorization", authorization); + System.out.println(authorization); + return httpHeaders; + } + + + /** + * 解密 + * @param result 返回数据(AES加密后的) + * @return 解密数据 + */ + protected String decrypt(String result) throws Exception { + // 将接口返回的加密数据使用BASE64算法解码 + byte[] datas = new BASE64Decoder().decodeBuffer(result); + + // 使用AES/ECB/PKCS5Padding解密算法 + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + + // 使用服务端发放的128位解密密钥secretKey + Key key = new SecretKeySpec(secretKey.getBytes(), "AES"); + cipher.init(Cipher.DECRYPT_MODE, key); + + //解密 + byte[] bytes = cipher.doFinal(datas); + + // 将解密的字节数组转出字符串使用 + return new String(bytes, StandardCharsets.UTF_8); + } +} diff --git a/maintain-ui/package.json b/maintain-ui/package.json index 090e74357ffaac68063ddba60e6f5702b939a811..075abba584f287d81218dffc6e8930da80b97029 100644 --- a/maintain-ui/package.json +++ b/maintain-ui/package.json @@ -2,7 +2,7 @@ "name": "ruoyi-vue-plus", "version": "4.8.2", "description": "维修管理系统", - "author": "LionLi", + "author": "LiuShuai", "license": "MIT", "scripts": { "dev": "vue-cli-service serve", diff --git a/maintain-ui/src/api/system/dept.js b/maintain-ui/src/api/system/dept.js index 331c4b2c1d94c270875d21684d5f8079aaf648c6..ac47c3ab303a25955d36dbb1b00d47679ae39651 100644 --- a/maintain-ui/src/api/system/dept.js +++ b/maintain-ui/src/api/system/dept.js @@ -50,3 +50,11 @@ export function delDept(deptId) { method: 'delete' }) } + +// 删除部门 +export function deptSync() { + return request({ + url: '/system/dept/deptSync', + method: 'post' + }) +} diff --git a/maintain-ui/src/api/system/user.js b/maintain-ui/src/api/system/user.js index f2f76ef9fed4310e3028afd0fd17f269b2178a54..bfd14284143b110907b5cd46e1ecb630fb55ee0b 100644 --- a/maintain-ui/src/api/system/user.js +++ b/maintain-ui/src/api/system/user.js @@ -133,3 +133,11 @@ export function deptTreeSelect() { method: 'get' }) } + +// 同步用户数据 +export function userSync() { + return request({ + url: '/system/user/userSync', + method: 'post' + }) +} diff --git a/maintain-ui/src/router/index.js b/maintain-ui/src/router/index.js index d02d569f03f45835a8fa0161c948d035a0a909a7..399d61c0045006565c0617c8df0f51cd2ffac48e 100644 --- a/maintain-ui/src/router/index.js +++ b/maintain-ui/src/router/index.js @@ -68,7 +68,7 @@ export const constantRoutes = [ children: [ { path: 'index', - component: () => import('@/views/index'), + component: () => import('@/views/business/repairForm/index'), name: 'Index', meta: { title: '首页', icon: 'dashboard', affix: true } } diff --git a/maintain-ui/src/utils/request.js b/maintain-ui/src/utils/request.js index 49ced2527cb3aa802effba9436f8204224aa6342..083a0462a5eadc4189a7a5ce07d718ecdd7a07ff 100644 --- a/maintain-ui/src/utils/request.js +++ b/maintain-ui/src/utils/request.js @@ -19,7 +19,7 @@ const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 10000 + timeout: 50000 }) // request拦截器 diff --git a/maintain-ui/src/views/system/dept/index.vue b/maintain-ui/src/views/system/dept/index.vue index 3c5557480b28490541bda4e2042f375957cfc3a1..f148537f51f456997674eacb5c0df185e21e41d3 100644 --- a/maintain-ui/src/views/system/dept/index.vue +++ b/maintain-ui/src/views/system/dept/index.vue @@ -45,6 +45,17 @@ @click="toggleExpandAll" >展开/折叠 + + 同步数据 + @@ -158,7 +169,7 @@