This commit is contained in:
启航 2024-03-15 17:24:24 +08:45
parent 0c085d7044
commit ca27ce245b
392 changed files with 47380 additions and 17 deletions

View File

@ -20,7 +20,7 @@ public class TokenFilter implements GlobalFilter, Ordered {
System.out.println("Token:"+token);
String url = exchange.getRequest().getURI().getPath();
System.out.println("intercept " + url);
if(url.equals("/api/sys-api/login")){
if(url.equals("/api/sys-api/login") || url.equals("/api/sys-api/getInfo") || url.equals("/api/sys-api/logout")){
// 登录页面 放行
return chain.filter(exchange);
}

View File

@ -44,9 +44,9 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
// String token = exchange.getRequest().getHeaders().getFirst(TOKEN_HEADER);
String token = request.getHeader("Authorization");
String url =request.getRequestURI();
log.info("intercept " + url);
log.info("token: " + token);
if(request.getRequestURI().equals("/login")){
// log.info("intercept " + url);
// log.info("token: " + token);
if(request.getRequestURI().equals("/login") || request.getRequestURI().equals("/getInfo") || request.getRequestURI().equals("/logout")){
// 登录页面放行
chain.doFilter(request, response);
return;

View File

@ -2,6 +2,7 @@ package com.qihang.security.entity;
import java.util.Date;
import java.util.List;
/**
* 用户对象 sys_user
@ -82,6 +83,8 @@ public class SysUser
this.userId = userId;
}
public Long getUserId()
{
return userId;

View File

@ -0,0 +1,121 @@
package com.qihang.sys.api.common;
import com.qihang.common.common.ServiceException;
import com.qihang.common.enums.HttpStatus;
import com.qihang.security.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 安全服务工具类
*
* @author qihang
*/
public class SecurityUtils
{
/**
* 用户ID
**/
public static Long getUserId()
{
try
{
return getLoginUser().getUserId();
}
catch (Exception e)
{
throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取部门ID
**/
public static Long getDeptId()
{
try
{
return getLoginUser().getDeptId();
}
catch (Exception e)
{
throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户账户
**/
public static String getUsername()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取用户
**/
public static LoginUser getLoginUser()
{
try
{
return (LoginUser) getAuthentication().getPrincipal();
}
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* 获取Authentication
*/
public static Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 生成BCryptPasswordEncoder密码
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
/**
* 是否为管理员
*
* @param userId 用户ID
* @return 结果
*/
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
}

View File

@ -16,19 +16,19 @@ public class LoginController {
private SysLoginService loginService;
@Autowired
private ISysUserService userService;
@PostMapping(value = "/login")
public AjaxResult login(@RequestBody LoginBody loginBody){
// AjaxResult ajax =
// SysUser user = userService.selectUserByUserName(loginBody.getUsername());
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
// ajax.put(Constants.TOKEN, token);
Map<String, String> map = new HashMap<>();
map.put("accessToken", token);
map.put("tokenType","Bearer");
return AjaxResult.success(map);
}
// @PostMapping(value = "/login")
// public AjaxResult login(@RequestBody LoginBody loginBody){
//// AjaxResult ajax =
//// SysUser user = userService.selectUserByUserName(loginBody.getUsername());
// // 生成令牌
// String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
// loginBody.getUuid());
//// ajax.put(Constants.TOKEN, token);
// Map<String, String> map = new HashMap<>();
// map.put("accessToken", token);
// map.put("tokenType","Bearer");
// return AjaxResult.success(map);
// }
//logout

View File

@ -0,0 +1,96 @@
package com.qihang.sys.api.controller;
//import com.zhijian.common.constant.Constants;
//import com.zhijian.common.core.domain.AjaxResult;
//import com.zhijian.common.core.domain.entity.SysMenu;
//import com.zhijian.common.core.domain.entity.SysUser;
//import com.zhijian.common.core.domain.model.LoginBody;
//import com.zhijian.common.utils.SecurityUtils;
//import com.zhijian.core.web.service.SysLoginService;
//import com.zhijian.core.web.service.SysPermissionService;
//import com.zhijian.system.service.ISysMenuService;
import com.qihang.common.common.AjaxResult;
import com.qihang.common.constant.Constants;
import com.qihang.security.entity.SysUser;
import com.qihang.security.service.SysLoginService;
import com.qihang.sys.api.common.SecurityUtils;
import com.qihang.sys.api.domain.LoginBody;
import com.qihang.sys.api.domain.SysMenu;
import com.qihang.sys.api.service.ISysMenuService;
import com.qihang.sys.api.service.SysPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
/**
* 登录验证
*
* @author qihang
*/
@RestController
public class SysLoginController
{
@Autowired
private SysLoginService loginService;
@Autowired
private ISysMenuService menuService;
@Autowired
private SysPermissionService permissionService;
/**
* 登录方法
*
* @param loginBody 登录信息
* @return 结果
*/
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody)
{
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
ajax.put(Constants.TOKEN, token);
return ajax;
}
/**
* 获取用户信息
*
* @return 用户信息
*/
@GetMapping("getInfo")
public AjaxResult getInfo()
{
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
return ajax;
}
/**
* 获取路由信息
*
* @return 路由信息
*/
// @GetMapping("getRouters")
// public AjaxResult getRouters()
// {
// Long userId = SecurityUtils.getUserId();
// List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
// return AjaxResult.success(menuService.buildMenus(menus));
// }
}

View File

@ -0,0 +1,137 @@
//package com.qihang.sys.api.controller;
//
////import com.zhijian.common.annotation.Log;
////import com.zhijian.common.constant.UserConstants;
////import com.zhijian.common.core.controller.BaseController;
////import com.zhijian.common.core.domain.AjaxResult;
////import com.zhijian.common.core.domain.entity.SysMenu;
////import com.zhijian.common.enums.BusinessType;
////import com.zhijian.common.utils.StringUtils;
////import com.zhijian.system.service.ISysMenuService;
//import com.qihang.sys.api.service.ISysMenuService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.access.prepost.PreAuthorize;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.List;
//
///**
// * 菜单信息
// *
// * @author qihang
// */
//@RestController
//@RequestMapping("/system/menu")
//public class SysMenuController
//{
// @Autowired
// private ISysMenuService menuService;
//
// /**
// * 获取菜单列表
// */
// @PreAuthorize("@ss.hasPermi('system:menu:list')")
// @GetMapping("/list")
// public AjaxResult list(SysMenu menu)
// {
// List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
// return success(menus);
// }
//
// /**
// * 根据菜单编号获取详细信息
// */
// @PreAuthorize("@ss.hasPermi('system:menu:query')")
// @GetMapping(value = "/{menuId}")
// public AjaxResult getInfo(@PathVariable Long menuId)
// {
// return success(menuService.selectMenuById(menuId));
// }
//
// /**
// * 获取菜单下拉树列表
// */
// @GetMapping("/treeselect")
// public AjaxResult treeselect(SysMenu menu)
// {
// List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
// return success(menuService.buildMenuTreeSelect(menus));
// }
//
// /**
// * 加载对应角色菜单列表树
// */
// @GetMapping(value = "/roleMenuTreeselect/{roleId}")
// public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
// {
// List<SysMenu> menus = menuService.selectMenuList(getUserId());
// AjaxResult ajax = AjaxResult.success();
// ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
// ajax.put("menus", menuService.buildMenuTreeSelect(menus));
// return ajax;
// }
//
// /**
// * 新增菜单
// */
// @PreAuthorize("@ss.hasPermi('system:menu:add')")
// @Log(title = "菜单管理", businessType = BusinessType.INSERT)
// @PostMapping
// public AjaxResult add(@Validated @RequestBody SysMenu menu)
// {
// if (!menuService.checkMenuNameUnique(menu))
// {
// return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
// }
// else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
// {
// return error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
// }
// menu.setCreateBy(getUsername());
// return toAjax(menuService.insertMenu(menu));
// }
//
// /**
// * 修改菜单
// */
// @PreAuthorize("@ss.hasPermi('system:menu:edit')")
// @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
// @PutMapping
// public AjaxResult edit(@Validated @RequestBody SysMenu menu)
// {
// if (!menuService.checkMenuNameUnique(menu))
// {
// return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
// }
// else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
// {
// return error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
// }
// else if (menu.getMenuId().equals(menu.getParentId()))
// {
// return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
// }
// menu.setUpdateBy(getUsername());
// return toAjax(menuService.updateMenu(menu));
// }
//
// /**
// * 删除菜单
// */
// @PreAuthorize("@ss.hasPermi('system:menu:remove')")
// @Log(title = "菜单管理", businessType = BusinessType.DELETE)
// @DeleteMapping("/{menuId}")
// public AjaxResult remove(@PathVariable("menuId") Long menuId)
// {
// if (menuService.hasChildByMenuId(menuId))
// {
// return warn("存在子菜单,不允许删除");
// }
// if (menuService.checkMenuExistRole(menuId))
// {
// return warn("菜单已分配,不允许删除");
// }
// return toAjax(menuService.deleteMenuById(menuId));
// }
//}

View File

@ -0,0 +1,352 @@
package com.qihang.sys.api.domain;
import java.io.Serializable;
import java.util.Date;
/**
* 角色信息表
* @TableName sys_role
*/
public class SysRole implements Serializable {
/**
* 角色ID
*/
private Long roleId;
/**
* 角色名称
*/
private String roleName;
/**
* 角色权限字符串
*/
private String roleKey;
/**
* 显示顺序
*/
private Integer roleSort;
/**
* 数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限
*/
private String dataScope;
/**
* 菜单树选择项是否关联显示
*/
private Integer menuCheckStrictly;
/**
* 部门树选择项是否关联显示
*/
private Integer deptCheckStrictly;
/**
* 角色状态0正常 1停用
*/
private String status;
/**
* 删除标志0代表存在 2代表删除
*/
private String delFlag;
/**
* 创建者
*/
private String createBy;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 备注
*/
private String remark;
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
public Long getRoleId() {
return roleId;
}
/**
* 角色ID
*/
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
/**
* 角色名称
*/
public String getRoleName() {
return roleName;
}
/**
* 角色名称
*/
public void setRoleName(String roleName) {
this.roleName = roleName;
}
/**
* 角色权限字符串
*/
public String getRoleKey() {
return roleKey;
}
/**
* 角色权限字符串
*/
public void setRoleKey(String roleKey) {
this.roleKey = roleKey;
}
/**
* 显示顺序
*/
public Integer getRoleSort() {
return roleSort;
}
/**
* 显示顺序
*/
public void setRoleSort(Integer roleSort) {
this.roleSort = roleSort;
}
/**
* 数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限
*/
public String getDataScope() {
return dataScope;
}
/**
* 数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限
*/
public void setDataScope(String dataScope) {
this.dataScope = dataScope;
}
/**
* 菜单树选择项是否关联显示
*/
public Integer getMenuCheckStrictly() {
return menuCheckStrictly;
}
/**
* 菜单树选择项是否关联显示
*/
public void setMenuCheckStrictly(Integer menuCheckStrictly) {
this.menuCheckStrictly = menuCheckStrictly;
}
/**
* 部门树选择项是否关联显示
*/
public Integer getDeptCheckStrictly() {
return deptCheckStrictly;
}
/**
* 部门树选择项是否关联显示
*/
public void setDeptCheckStrictly(Integer deptCheckStrictly) {
this.deptCheckStrictly = deptCheckStrictly;
}
/**
* 角色状态0正常 1停用
*/
public String getStatus() {
return status;
}
/**
* 角色状态0正常 1停用
*/
public void setStatus(String status) {
this.status = status;
}
/**
* 删除标志0代表存在 2代表删除
*/
public String getDelFlag() {
return delFlag;
}
/**
* 删除标志0代表存在 2代表删除
*/
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
/**
* 创建者
*/
public String getCreateBy() {
return createBy;
}
/**
* 创建者
*/
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
/**
* 创建时间
*/
public Date getCreateTime() {
return createTime;
}
/**
* 创建时间
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* 更新者
*/
public String getUpdateBy() {
return updateBy;
}
/**
* 更新者
*/
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
/**
* 更新时间
*/
public Date getUpdateTime() {
return updateTime;
}
/**
* 更新时间
*/
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
/**
* 备注
*/
public String getRemark() {
return remark;
}
/**
* 备注
*/
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
SysRole other = (SysRole) that;
return (this.getRoleId() == null ? other.getRoleId() == null : this.getRoleId().equals(other.getRoleId()))
&& (this.getRoleName() == null ? other.getRoleName() == null : this.getRoleName().equals(other.getRoleName()))
&& (this.getRoleKey() == null ? other.getRoleKey() == null : this.getRoleKey().equals(other.getRoleKey()))
&& (this.getRoleSort() == null ? other.getRoleSort() == null : this.getRoleSort().equals(other.getRoleSort()))
&& (this.getDataScope() == null ? other.getDataScope() == null : this.getDataScope().equals(other.getDataScope()))
&& (this.getMenuCheckStrictly() == null ? other.getMenuCheckStrictly() == null : this.getMenuCheckStrictly().equals(other.getMenuCheckStrictly()))
&& (this.getDeptCheckStrictly() == null ? other.getDeptCheckStrictly() == null : this.getDeptCheckStrictly().equals(other.getDeptCheckStrictly()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
&& (this.getDelFlag() == null ? other.getDelFlag() == null : this.getDelFlag().equals(other.getDelFlag()))
&& (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
&& (this.getUpdateBy() == null ? other.getUpdateBy() == null : this.getUpdateBy().equals(other.getUpdateBy()))
&& (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
&& (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getRoleId() == null) ? 0 : getRoleId().hashCode());
result = prime * result + ((getRoleName() == null) ? 0 : getRoleName().hashCode());
result = prime * result + ((getRoleKey() == null) ? 0 : getRoleKey().hashCode());
result = prime * result + ((getRoleSort() == null) ? 0 : getRoleSort().hashCode());
result = prime * result + ((getDataScope() == null) ? 0 : getDataScope().hashCode());
result = prime * result + ((getMenuCheckStrictly() == null) ? 0 : getMenuCheckStrictly().hashCode());
result = prime * result + ((getDeptCheckStrictly() == null) ? 0 : getDeptCheckStrictly().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
result = prime * result + ((getDelFlag() == null) ? 0 : getDelFlag().hashCode());
result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
result = prime * result + ((getUpdateBy() == null) ? 0 : getUpdateBy().hashCode());
result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", roleId=").append(roleId);
sb.append(", roleName=").append(roleName);
sb.append(", roleKey=").append(roleKey);
sb.append(", roleSort=").append(roleSort);
sb.append(", dataScope=").append(dataScope);
sb.append(", menuCheckStrictly=").append(menuCheckStrictly);
sb.append(", deptCheckStrictly=").append(deptCheckStrictly);
sb.append(", status=").append(status);
sb.append(", delFlag=").append(delFlag);
sb.append(", createBy=").append(createBy);
sb.append(", createTime=").append(createTime);
sb.append(", updateBy=").append(updateBy);
sb.append(", updateTime=").append(updateTime);
sb.append(", remark=").append(remark);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

View File

@ -0,0 +1,20 @@
package com.qihang.sys.api.mapper;
import com.qihang.sys.api.domain.SysRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @author TW
* @description 针对表sys_role(角色信息表)的数据库操作Mapper
* @createDate 2024-03-15 16:55:10
* @Entity com.qihang.sys.api.domain.SysRole
*/
public interface SysRoleMapper extends BaseMapper<SysRole> {
List<SysRole> selectRolePermissionByUserId(Long userId);
}

View File

@ -0,0 +1,83 @@
package com.qihang.sys.api.service;
import com.qihang.security.entity.SysUser;
import com.qihang.sys.api.domain.SysRole;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 用户权限处理
*
* @author qihang
*/
@Component
public class SysPermissionService
{
@Autowired
private SysRoleService roleService;
@Autowired
private ISysMenuService menuService;
/**
* 获取角色数据权限
*
* @param user 用户信息
* @return 角色权限信息
*/
public Set<String> getRolePermission(SysUser user)
{
Set<String> roles = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
roles.add("admin");
}
else
{
roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
}
return roles;
}
/**
* 获取菜单数据权限
*
* @param user 用户信息
* @return 菜单权限信息
*/
public Set<String> getMenuPermission(SysUser user)
{
Set<String> perms = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
perms.add("*:*:*");
}
else
{
// List<SysRole> roles = user.getRoles();
// if (!CollectionUtils.isEmpty(roles))
// {
// // 多角色设置permissions属性以便数据权限匹配权限
// for (SysRole role : roles)
// {
// Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
// role.setPermissions(rolePerms);
// perms.addAll(rolePerms);
// }
// }
// else
// {
perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
// }
}
return perms;
}
}

View File

@ -0,0 +1,19 @@
package com.qihang.sys.api.service;
import com.qihang.sys.api.domain.SysRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qihang.sys.api.mapper.SysRoleMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.Set;
/**
* @author TW
* @description 针对表sys_role(角色信息表)的数据库操作Service
* @createDate 2024-03-15 16:55:10
*/
public interface SysRoleService extends IService<SysRole> {
Set<String> selectRolePermissionByUserId(Long userId);
}

View File

@ -0,0 +1,45 @@
package com.qihang.sys.api.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.common.utils.StringUtils;
import com.qihang.sys.api.domain.SysRole;
import com.qihang.sys.api.service.SysRoleService;
import com.qihang.sys.api.mapper.SysRoleMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author TW
* @description 针对表sys_role(角色信息表)的数据库操作Service实现
* @createDate 2024-03-15 16:55:10
*/
@AllArgsConstructor
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole>
implements SysRoleService{
private final SysRoleMapper roleMapper;
@Override
public Set<String> selectRolePermissionByUserId(Long userId) {
List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (SysRole perm : perms)
{
if (StringUtils.isNotNull(perm))
{
permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
}
}
return permsSet;
}
}

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qihang.sys.api.mapper.SysRoleMapper">
<resultMap id="BaseResultMap" type="com.qihang.sys.api.domain.SysRole">
<id property="roleId" column="role_id" jdbcType="BIGINT"/>
<result property="roleName" column="role_name" jdbcType="VARCHAR"/>
<result property="roleKey" column="role_key" jdbcType="VARCHAR"/>
<result property="roleSort" column="role_sort" jdbcType="INTEGER"/>
<result property="dataScope" column="data_scope" jdbcType="CHAR"/>
<result property="menuCheckStrictly" column="menu_check_strictly" jdbcType="TINYINT"/>
<result property="deptCheckStrictly" column="dept_check_strictly" jdbcType="TINYINT"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
role_id,role_name,role_key,
role_sort,data_scope,menu_check_strictly,
dept_check_strictly,status,del_flag,
create_by,create_time,update_by,
update_time,remark
</sql>
<sql id="selectRoleVo">
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
left join sys_user u on u.user_id = ur.user_id
left join sys_dept d on u.dept_id = d.dept_id
</sql>
<select id="selectRolePermissionByUserId" parameterType="Long" resultMap="BaseResultMap">
<include refid="selectRoleVo"/>
WHERE r.del_flag = '0' and ur.user_id = #{userId}
</select>
</mapper>

22
vue/.editorconfig Normal file
View File

@ -0,0 +1,22 @@
# 告诉EditorConfig插件这是根文件不用继续往上查找
root = true
# 匹配全部文件
[*]
# 设置字符集
charset = utf-8
# 缩进风格可选space、tab
indent_style = space
# 缩进的空格数
indent_size = 2
# 结尾换行符可选lf、cr、crlf
end_of_line = lf
# 在文件结尾插入新行
insert_final_newline = true
# 删除一行中的前后空格
trim_trailing_whitespace = true
# 匹配md结尾的文件
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

11
vue/.env.development Normal file
View File

@ -0,0 +1,11 @@
# 页面标题
VUE_APP_TITLE = 启航电商OMS系统
# 开发环境配置
ENV = 'development'
# 启航电商OMS系统/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

8
vue/.env.production Normal file
View File

@ -0,0 +1,8 @@
# 页面标题
VUE_APP_TITLE = 启航电商管理系统
# 生产环境配置
ENV = 'production'
# 启航电商管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'

10
vue/.env.staging Normal file
View File

@ -0,0 +1,10 @@
# 页面标题
VUE_APP_TITLE = 启航电商管理系统
NODE_ENV = production
# 测试环境配置
ENV = 'staging'
# 启航电商管理系统/测试环境
VUE_APP_BASE_API = '/stage-api'

10
vue/.eslintignore Normal file
View File

@ -0,0 +1,10 @@
# 忽略build目录下类型为js的文件的语法检查
build/*.js
# 忽略src/assets目录下文件的语法检查
src/assets
# 忽略public目录下文件的语法检查
public
# 忽略当前目录下为js的文件的语法检查
*.js
# 忽略当前目录下为vue的文件的语法检查
*.vue

199
vue/.eslintrc.js Normal file
View File

@ -0,0 +1,199 @@
// ESlint 检查配置
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'never'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
'indent': [2, 2, {
'SwitchCase': 1
}],
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}

23
vue/.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock

30
vue/README.md Normal file
View File

@ -0,0 +1,30 @@
## 开发
```bash
# 克隆项目
# 进入项目目录
cd zhijian-vue
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev
```
浏览器访问 http://localhost:80
## 发布
```bash
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
```

13
vue/babel.config.js Normal file
View File

@ -0,0 +1,13 @@
module.exports = {
presets: [
// https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
'plugins': ['dynamic-import-node']
}
}
}

92
vue/package.json Normal file
View File

@ -0,0 +1,92 @@
{
"name": "qihang-ecerp",
"version": "0.1.1",
"description": "启航电商ERP系统",
"author": "qihang",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "https://gitee.com/qiliping/zhijian.git"
},
"dependencies": {
"@riophae/vue-treeselect": "^0.4.0",
"@smallwei/avue": "^2.10.15",
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"echarts": "5.4.0",
"element-china-area-data": "^6.1.0",
"element-ui": "2.15.13",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",
"sass-loader": "10.1.1",
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.6.12"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
}

BIN
vue/public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

46
vue/public/html/ie.html Normal file

File diff suppressed because one or more lines are too long

208
vue/public/index.html Normal file
View File

@ -0,0 +1,208 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= webpackConfig.name %></title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left {
left: 0;
}
#loader-wrapper .loader-section.section-right {
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
</body>
</html>

2
vue/public/robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-agent: *
Disallow: /

28
vue/src/App.vue Normal file
View File

@ -0,0 +1,28 @@
<template>
<div id="app">
<router-view />
<theme-picker />
</div>
</template>
<script>
import ThemePicker from "@/components/ThemePicker";
export default {
name: "App",
components: { ThemePicker },
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
titleTemplate: title => {
return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
}
}
}
};
</script>
<style scoped>
#app .theme-picker {
display: none;
}
</style>

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询物流公司列表
export function listLogistics(query) {
return request({
url: '/api/logistics/list',
method: 'get',
params: query
})
}
// 查询物流公司详细
export function getLogistics(id) {
return request({
url: '/api/logistics/' + id,
method: 'get'
})
}
// 新增物流公司
export function addLogistics(data) {
return request({
url: '/api/logistics',
method: 'post',
data: data
})
}
// 修改物流公司
export function updateLogistics(data) {
return request({
url: '/api/logistics',
method: 'put',
data: data
})
}
// 删除物流公司
export function delLogistics(id) {
return request({
url: '/api/logistics/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询退换货列表
export function listReturned(query) {
return request({
url: '/api/returned/list',
method: 'get',
params: query
})
}
// 查询退换货详细
export function getReturned(id) {
return request({
url: '/api/returned/' + id,
method: 'get'
})
}
// 新增退换货
export function addReturned(data) {
return request({
url: '/api/returned',
method: 'post',
data: data
})
}
// 修改退换货
export function updateReturned(data) {
return request({
url: '/api/returned',
method: 'put',
data: data
})
}
// 删除退换货
export function delReturned(id) {
return request({
url: '/api/returned/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询抖店订单退款列表
export function listDouRefund(query) {
return request({
url: '/dou/douRefund/list',
method: 'get',
params: query
})
}
// 查询抖店订单退款详细
export function getDouRefund(id) {
return request({
url: '/dou/douRefund/' + id,
method: 'get'
})
}
// 新增抖店订单退款
export function addDouRefund(data) {
return request({
url: '/dou/douRefund',
method: 'post',
data: data
})
}
// 修改抖店订单退款
export function updateDouRefund(data) {
return request({
url: '/dou/douRefund',
method: 'put',
data: data
})
}
// 删除抖店订单退款
export function delDouRefund(id) {
return request({
url: '/dou/douRefund/' + id,
method: 'delete'
})
}

53
vue/src/api/dou/order.js Normal file
View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询抖店订单列表
export function listOrder(query) {
return request({
url: '/dou/order/list',
method: 'get',
params: query
})
}
// 查询抖店订单详细
export function getOrder(id) {
return request({
url: '/dou/order/' + id,
method: 'get'
})
}
// 新增抖店订单
export function addOrder(data) {
return request({
url: '/dou/order',
method: 'post',
data: data
})
}
// 修改抖店订单
export function confirmOrder(data) {
return request({
url: '/dou/order/confirm',
method: 'post',
data: data
})
}
// 删除抖店订单
export function delOrder(id) {
return request({
url: '/dou/order/' + id,
method: 'delete'
})
}
// 接口拉取淘宝订单
export function pullOrder(query) {
return request({
url: '/douapi/order/pull_order',
method: 'get',
params: query
})
}

44
vue/src/api/dou/refund.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询抖店订单退款列表
export function listRefund(query) {
return request({
url: '/dou/refund/list',
method: 'get',
params: query
})
}
// 查询抖店订单退款详细
export function getRefund(id) {
return request({
url: '/dou/refund/' + id,
method: 'get'
})
}
// 新增抖店订单退款
export function addRefund(data) {
return request({
url: '/dou/refund',
method: 'post',
data: data
})
}
// 修改抖店订单退款
export function updateRefund(data) {
return request({
url: '/dou/refund',
method: 'put',
data: data
})
}
// 删除抖店订单退款
export function delRefund(id) {
return request({
url: '/dou/refund/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询财务管理-应付款-代发账单列表
export function listAgentShip(query) {
return request({
url: '/fms/agentShip/list',
method: 'get',
params: query
})
}
// 查询财务管理-应付款-代发账单详细
export function getAgentShip(id) {
return request({
url: '/fms/agentShip/' + id,
method: 'get'
})
}
// 新增财务管理-应付款-代发账单
export function addAgentShip(data) {
return request({
url: '/fms/agentShip',
method: 'post',
data: data
})
}
// 修改财务管理-应付款-代发账单
export function updateAgentShip(data) {
return request({
url: '/fms/agentShip',
method: 'put',
data: data
})
}
// 删除财务管理-应付款-代发账单
export function delAgentShip(id) {
return request({
url: '/fms/agentShip/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询库存存货报列表
export function listInventoryReport(query) {
return request({
url: '/fms/inventoryReport/list',
method: 'get',
params: query
})
}
// 查询库存存货报详细
export function getInventoryReport(id) {
return request({
url: '/fms/inventoryReport/' + id,
method: 'get'
})
}
// 新增库存存货报
export function addInventoryReport(data) {
return request({
url: '/fms/inventoryReport',
method: 'post',
data: data
})
}
// 修改库存存货报
export function updateInventoryReport(data) {
return request({
url: '/fms/inventoryReport',
method: 'put',
data: data
})
}
// 删除库存存货报
export function delInventoryReport(id) {
return request({
url: '/fms/inventoryReport/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询财务管理-应付款-采购货款列表
export function listPayablePurchase(query) {
return request({
url: '/fms/payablePurchase/list',
method: 'get',
params: query
})
}
// 查询财务管理-应付款-采购货款详细
export function getPayablePurchase(id) {
return request({
url: '/fms/payablePurchase/' + id,
method: 'get'
})
}
// 新增财务管理-应付款-采购货款
export function addPayablePurchase(data) {
return request({
url: '/fms/payablePurchase',
method: 'post',
data: data
})
}
// 修改财务管理-应付款-采购货款
export function updatePayablePurchase(data) {
return request({
url: '/fms/payablePurchase',
method: 'put',
data: data
})
}
// 删除财务管理-应付款-采购货款
export function delPayablePurchase(id) {
return request({
url: '/fms/payablePurchase/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询财务管理-应收款-订单收入列表
export function listReceivableOrder(query) {
return request({
url: '/fms/receivableOrder/list',
method: 'get',
params: query
})
}
// 查询财务管理-应收款-订单收入详细
export function getReceivableOrder(id) {
return request({
url: '/fms/receivableOrder/' + id,
method: 'get'
})
}
// 新增财务管理-应收款-订单收入
export function addReceivableOrder(data) {
return request({
url: '/fms/receivableOrder',
method: 'post',
data: data
})
}
// 修改财务管理-应收款-订单收入
export function updateReceivableOrder(data) {
return request({
url: '/fms/receivableOrder',
method: 'put',
data: data
})
}
// 删除财务管理-应收款-订单收入
export function delReceivableOrder(id) {
return request({
url: '/fms/receivableOrder/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询财务管理-应付款-物流费用列表
export function listShipFee(query) {
return request({
url: '/fms/shipFee/list',
method: 'get',
params: query
})
}
// 查询财务管理-应付款-物流费用详细
export function getShipFee(id) {
return request({
url: '/fms/shipFee/' + id,
method: 'get'
})
}
// 新增财务管理-应付款-物流费用
export function addShipFee(data) {
return request({
url: '/fms/shipFee',
method: 'post',
data: data
})
}
// 修改财务管理-应付款-物流费用
export function updateShipFee(data) {
return request({
url: '/fms/shipFee',
method: 'put',
data: data
})
}
// 删除财务管理-应付款-物流费用
export function delShipFee(id) {
return request({
url: '/fms/shipFee/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品品牌列表
export function listBrand(query) {
return request({
url: '/goods/brand/list',
method: 'get',
params: query
})
}
// 查询商品品牌详细
export function getBrand(id) {
return request({
url: '/goods/brand/' + id,
method: 'get'
})
}
// 新增商品品牌
export function addBrand(data) {
return request({
url: '/goods/brand',
method: 'post',
data: data
})
}
// 修改商品品牌
export function updateBrand(data) {
return request({
url: '/goods/brand',
method: 'put',
data: data
})
}
// 删除商品品牌
export function delBrand(id) {
return request({
url: '/goods/brand/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品分类列表
export function listCategory(query) {
return request({
url: '/goods/category/list',
method: 'get',
params: query
})
}
// 查询商品分类详细
export function getCategory(id) {
return request({
url: '/goods/category/' + id,
method: 'get'
})
}
// 新增商品分类
export function addCategory(data) {
return request({
url: '/goods/category',
method: 'post',
data: data
})
}
// 修改商品分类
export function updateCategory(data) {
return request({
url: '/goods/category',
method: 'put',
data: data
})
}
// 删除商品分类
export function delCategory(id) {
return request({
url: '/goods/category/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品分类属性列表
export function listCategoryAttribute(query) {
return request({
url: '/goods/categoryAttribute/list',
method: 'get',
params: query
})
}
// 查询商品分类属性详细
export function getCategoryAttribute(id) {
return request({
url: '/goods/categoryAttribute/' + id,
method: 'get'
})
}
// 新增商品分类属性
export function addCategoryAttribute(data) {
return request({
url: '/goods/categoryAttribute',
method: 'post',
data: data
})
}
// 修改商品分类属性
export function updateCategoryAttribute(data) {
return request({
url: '/goods/categoryAttribute',
method: 'put',
data: data
})
}
// 删除商品分类属性
export function delCategoryAttribute(id) {
return request({
url: '/goods/categoryAttribute/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品分类属性值列表
export function listCategoryAttributeValue(query) {
return request({
url: '/goods/categoryAttributeValue/list',
method: 'get',
params: query
})
}
// 查询商品分类属性值详细
export function getCategoryAttributeValue(id) {
return request({
url: '/goods/categoryAttributeValue/' + id,
method: 'get'
})
}
// 新增商品分类属性值
export function addCategoryAttributeValue(data) {
return request({
url: '/goods/categoryAttributeValue',
method: 'post',
data: data
})
}
// 修改商品分类属性值
export function updateCategoryAttributeValue(data) {
return request({
url: '/goods/categoryAttributeValue',
method: 'put',
data: data
})
}
// 删除商品分类属性值
export function delCategoryAttributeValue(id) {
return request({
url: '/goods/categoryAttributeValue/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询商品管理列表
export function listGoods(query) {
return request({
url: '/goods/goods/list',
method: 'get',
params: query
})
}
// 查询商品规格列表
export function searchSku(query) {
return request({
url: '/goods/goods/searchSku',
method: 'get',
params: query
})
}
// 查询商品管理详细
export function getGoods(id) {
return request({
url: '/goods/goods/' + id,
method: 'get'
})
}
// 新增商品管理
export function addGoods(data) {
return request({
url: '/goods/goods',
method: 'post',
data: data
})
}
// 修改商品管理
export function updateGoods(data) {
return request({
url: '/goods/goods',
method: 'put',
data: data
})
}
// 删除商品管理
export function delGoods(id) {
return request({
url: '/goods/goods/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品库存列表
export function listGoodsInventory(query) {
return request({
url: '/api/goodsInventory/list',
method: 'get',
params: query
})
}
// 查询商品库存详细
export function getGoodsInventory(id) {
return request({
url: '/api/goodsInventory/' + id,
method: 'get'
})
}
// 新增商品库存
export function addGoodsInventory(data) {
return request({
url: '/api/goodsInventory',
method: 'post',
data: data
})
}
// 修改商品库存
export function updateGoodsInventory(data) {
return request({
url: '/api/goodsInventory',
method: 'put',
data: data
})
}
// 删除商品库存
export function delGoodsInventory(id) {
return request({
url: '/api/goodsInventory/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品规格库存管理列表
export function listGoodsSpec(query) {
return request({
url: '/goods/goodsSpec/list',
method: 'get',
params: query
})
}
// 查询商品规格库存管理详细
export function getGoodsSpec(id) {
return request({
url: '/goods/goodsSpec/' + id,
method: 'get'
})
}
// 新增商品规格库存管理
export function addGoodsSpec(data) {
return request({
url: '/goods/goodsSpec',
method: 'post',
data: data
})
}
// 修改商品规格库存管理
export function updateGoodsSpec(data) {
return request({
url: '/goods/goodsSpec',
method: 'put',
data: data
})
}
// 删除商品规格库存管理
export function delGoodsSpec(id) {
return request({
url: '/goods/goodsSpec/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,33 @@
import request from '@/utils/request'
// 查询生成表数据
export function listAll(query) {
return request({
url: '/keyword/list',
method: 'get',
params: query
})
}
export function saveData(data) {
return request({
url: '/keyword/save',
method: 'post',
data: data
})
}
export function delData(id) {
return request({
url: '/keyword/del/' + id,
method: 'delete'
})
}
export function updateData(data) {
return request({
url: '/keyword/edit',
method: 'put',
data: data
})
}

59
vue/src/api/login.js Normal file
View File

@ -0,0 +1,59 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
return request({
url: '/api/sys-api/login',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 注册方法
export function register(data) {
return request({
url: '/register',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/api/sys-api/getInfo',
method: 'get'
})
}
// 退出方法
export function logout() {
return request({
url: '/api/sys-api/logout',
method: 'post'
})
}
// 获取验证码
export function getCodeImg() {
return request({
url: '/captchaImage',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}

9
vue/src/api/menu.js Normal file
View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取路由
export const getRouters = () => {
return request({
url: '/getRouters',
method: 'get'
})
}

View File

@ -0,0 +1,57 @@
import request from '@/utils/request'
// 查询缓存详细
export function getCache() {
return request({
url: '/monitor/cache',
method: 'get'
})
}
// 查询缓存名称列表
export function listCacheName() {
return request({
url: '/monitor/cache/getNames',
method: 'get'
})
}
// 查询缓存键名列表
export function listCacheKey(cacheName) {
return request({
url: '/monitor/cache/getKeys/' + cacheName,
method: 'get'
})
}
// 查询缓存内容
export function getCacheValue(cacheName, cacheKey) {
return request({
url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
method: 'get'
})
}
// 清理指定名称缓存
export function clearCacheName(cacheName) {
return request({
url: '/monitor/cache/clearCacheName/' + cacheName,
method: 'delete'
})
}
// 清理指定键名缓存
export function clearCacheKey(cacheKey) {
return request({
url: '/monitor/cache/clearCacheKey/' + cacheKey,
method: 'delete'
})
}
// 清理全部缓存
export function clearCacheAll() {
return request({
url: '/monitor/cache/clearCacheAll',
method: 'delete'
})
}

View File

@ -0,0 +1,71 @@
import request from '@/utils/request'
// 查询定时任务调度列表
export function listJob(query) {
return request({
url: '/monitor/job/list',
method: 'get',
params: query
})
}
// 查询定时任务调度详细
export function getJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'get'
})
}
// 新增定时任务调度
export function addJob(data) {
return request({
url: '/monitor/job',
method: 'post',
data: data
})
}
// 修改定时任务调度
export function updateJob(data) {
return request({
url: '/monitor/job',
method: 'put',
data: data
})
}
// 删除定时任务调度
export function delJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'delete'
})
}
// 任务状态修改
export function changeJobStatus(jobId, status) {
const data = {
jobId,
status
}
return request({
url: '/monitor/job/changeStatus',
method: 'put',
data: data
})
}
// 定时任务立即执行一次
export function runJob(jobId, jobGroup) {
const data = {
jobId,
jobGroup
}
return request({
url: '/monitor/job/run',
method: 'put',
data: data
})
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询调度日志列表
export function listJobLog(query) {
return request({
url: '/monitor/jobLog/list',
method: 'get',
params: query
})
}
// 删除调度日志
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
method: 'delete'
})
}
// 清空调度日志
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
method: 'delete'
})
}

View File

@ -0,0 +1,34 @@
import request from '@/utils/request'
// 查询登录日志列表
export function list(query) {
return request({
url: '/monitor/logininfor/list',
method: 'get',
params: query
})
}
// 删除登录日志
export function delLogininfor(infoId) {
return request({
url: '/monitor/logininfor/' + infoId,
method: 'delete'
})
}
// 解锁用户登录状态
export function unlockLogininfor(userName) {
return request({
url: '/monitor/logininfor/unlock/' + userName,
method: 'get'
})
}
// 清空登录日志
export function cleanLogininfor() {
return request({
url: '/monitor/logininfor/clean',
method: 'delete'
})
}

View File

@ -0,0 +1,18 @@
import request from '@/utils/request'
// 查询在线用户列表
export function list(query) {
return request({
url: '/monitor/online/list',
method: 'get',
params: query
})
}
// 强退用户
export function forceLogout(tokenId) {
return request({
url: '/monitor/online/' + tokenId,
method: 'delete'
})
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询操作日志列表
export function list(query) {
return request({
url: '/monitor/operlog/list',
method: 'get',
params: query
})
}
// 删除操作日志
export function delOperlog(operId) {
return request({
url: '/monitor/operlog/' + operId,
method: 'delete'
})
}
// 清空操作日志
export function cleanOperlog() {
return request({
url: '/monitor/operlog/clean',
method: 'delete'
})
}

View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取服务信息
export function getServer() {
return request({
url: '/monitor/server',
method: 'get'
})
}

54
vue/src/api/pdd/order.js Normal file
View File

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 查询拼多多订单列表
export function listOrder(query) {
return request({
url: '/pdd/order/list',
method: 'get',
params: query
})
}
// 查询拼多多订单详细
export function getOrder(id) {
return request({
url: '/pdd/order/' + id,
method: 'get'
})
}
// 新增拼多多订单
export function addOrder(data) {
return request({
url: '/pdd/order',
method: 'post',
data: data
})
}
// 修改拼多多订单
export function confirmOrder(data) {
return request({
url: '/pdd/order/confirm',
method: 'post',
data: data
})
}
// 删除拼多多订单
export function delOrder(id) {
return request({
url: '/pdd/order/' + id,
method: 'delete'
})
}
// 接口拉取淘宝订单
export function pullOrder(query) {
return request({
url: '/pdd_api/order/pull_order',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询拼多多订单退款列表
export function listOrderRefund(query) {
return request({
url: '/pdd/orderRefund/list',
method: 'get',
params: query
})
}
// 查询拼多多订单退款详细
export function getOrderRefund(id) {
return request({
url: '/pdd/orderRefund/' + id,
method: 'get'
})
}
// 新增拼多多订单退款
export function addOrderRefund(data) {
return request({
url: '/pdd/orderRefund',
method: 'post',
data: data
})
}
// 修改拼多多订单退款
export function updateOrderRefund(data) {
return request({
url: '/pdd/orderRefund',
method: 'put',
data: data
})
}
// 删除拼多多订单退款
export function delOrderRefund(id) {
return request({
url: '/pdd/orderRefund/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询拼多多订单退款列表
export function listPddRefund(query) {
return request({
url: '/pdd/pddRefund/list',
method: 'get',
params: query
})
}
// 查询拼多多订单退款详细
export function getPddRefund(id) {
return request({
url: '/pdd/pddRefund/' + id,
method: 'get'
})
}
// 新增拼多多订单退款
export function addPddRefund(data) {
return request({
url: '/pdd/pddRefund',
method: 'post',
data: data
})
}
// 修改拼多多订单退款
export function updatePddRefund(data) {
return request({
url: '/pdd/pddRefund',
method: 'put',
data: data
})
}
// 删除拼多多订单退款
export function delPddRefund(id) {
return request({
url: '/pdd/pddRefund/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询采购订单列表
export function listPurchaseOrder(query) {
return request({
url: '/purchase/purchaseOrder/list',
method: 'get',
params: query
})
}
// 查询采购订单详细
export function getPurchaseOrder(id) {
return request({
url: '/purchase/purchaseOrder/' + id,
method: 'get'
})
}
// 新增采购订单
export function addPurchaseOrder(data) {
return request({
url: '/purchase/purchaseOrder',
method: 'post',
data: data
})
}
// 修改采购订单
export function updatePurchaseOrder(data) {
return request({
url: '/purchase/purchaseOrder',
method: 'put',
data: data
})
}
// 删除采购订单
export function delPurchaseOrder(id) {
return request({
url: '/purchase/purchaseOrder/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询采购订单明细列表
export function listPurchaseOrderItem(query) {
return request({
url: '/purchase/purchaseOrderItem/list',
method: 'get',
params: query
})
}
// 查询采购订单明细详细
export function getPurchaseOrderItem(id) {
return request({
url: '/purchase/purchaseOrderItem/' + id,
method: 'get'
})
}
// 新增采购订单明细
export function addPurchaseOrderItem(data) {
return request({
url: '/purchase/purchaseOrderItem',
method: 'post',
data: data
})
}
// 修改采购订单明细
export function updatePurchaseOrderItem(data) {
return request({
url: '/purchase/purchaseOrderItem',
method: 'put',
data: data
})
}
// 删除采购订单明细
export function delPurchaseOrderItem(id) {
return request({
url: '/purchase/purchaseOrderItem/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 查询采购订单物流列表
export function listPurchaseOrderShip(query) {
return request({
url: '/purchase/PurchaseOrderShip/list',
method: 'get',
params: query
})
}
// 查询采购订单物流详细
export function getPurchaseOrderShip(id) {
return request({
url: '/purchase/PurchaseOrderShip/' + id,
method: 'get'
})
}
// 新增采购订单物流
export function addPurchaseOrderShip(data) {
return request({
url: '/purchase/PurchaseOrderShip',
method: 'post',
data: data
})
}
//创建入库单
export function createStockInEntry(data) {
return request({
url: '/purchase/PurchaseOrderShip/createStockInEntry',
method: 'post',
data: data
})
}
// 修改采购订单物流
export function updatePurchaseOrderShip(data) {
return request({
url: '/purchase/PurchaseOrderShip',
method: 'put',
data: data
})
}
// 删除采购订单物流
export function delPurchaseOrderShip(id) {
return request({
url: '/purchase/PurchaseOrderShip/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询供应商代发货列表
export function listAgentShipping(query) {
return request({
url: '/scm/agentShipping/list',
method: 'get',
params: query
})
}
// 查询供应商代发货详细
export function getAgentShipping(id) {
return request({
url: '/scm/agentShipping/' + id,
method: 'get'
})
}
// 新增供应商代发货
export function addAgentShipping(data) {
return request({
url: '/scm/agentShipping',
method: 'post',
data: data
})
}
// 修改供应商代发货
export function updateAgentShipping(data) {
return request({
url: '/scm/agentShipping',
method: 'put',
data: data
})
}
// 删除供应商代发货
export function delAgentShipping(id) {
return request({
url: '/scm/agentShipping/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询采购订单费用确认列表
export function listPurchaseOrderCost(query) {
return request({
url: '/purchase/purchaseOrderCost/list',
method: 'get',
params: query
})
}
// 查询采购订单费用确认详细
export function getPurchaseOrderCost(id) {
return request({
url: '/purchase/purchaseOrderCost/' + id,
method: 'get'
})
}
// 新增采购订单费用确认
export function addPurchaseOrderCost(data) {
return request({
url: '/purchase/purchaseOrderCost',
method: 'post',
data: data
})
}
// 修改采购订单费用确认
export function updatePurchaseOrderCost(data) {
return request({
url: '/purchase/purchaseOrderCost',
method: 'put',
data: data
})
}
// 删除采购订单费用确认
export function delPurchaseOrderCost(id) {
return request({
url: '/purchase/purchaseOrderCost/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询供应商管理列表
export function listSupplier(query) {
return request({
url: '/scm/supplier/list',
method: 'get',
params: query
})
}
// 查询供应商管理详细
export function getSupplier(id) {
return request({
url: '/scm/supplier/' + id,
method: 'get'
})
}
// 新增供应商管理
export function addSupplier(data) {
return request({
url: '/scm/supplier',
method: 'post',
data: data
})
}
// 修改供应商管理
export function updateSupplier(data) {
return request({
url: '/scm/supplier',
method: 'put',
data: data
})
}
// 删除供应商管理
export function delSupplier(id) {
return request({
url: '/scm/supplier/' + id,
method: 'delete'
})
}

44
vue/src/api/shop/goods.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询店铺商品列表
export function listGoods(query) {
return request({
url: '/shop/goods/list',
method: 'get',
params: query
})
}
// 查询店铺商品详细
export function getGoods(id) {
return request({
url: '/shop/goods/' + id,
method: 'get'
})
}
// 新增店铺商品
export function addGoods(data) {
return request({
url: '/shop/goods',
method: 'post',
data: data
})
}
// 修改店铺商品
export function updateGoods(data) {
return request({
url: '/shop/goods',
method: 'put',
data: data
})
}
// 删除店铺商品
export function delGoods(id) {
return request({
url: '/shop/goods/' + id,
method: 'delete'
})
}

54
vue/src/api/shop/order.js Normal file
View File

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 查询店铺订单列表
export function listOrder(query) {
return request({
url: '/api/order/list',
method: 'get',
params: query
})
}
// 查询店铺订单详细
export function getOrder(id) {
return request({
url: '/api/order/' + id,
method: 'get'
})
}
// 新增店铺订单
export function addOrder(data) {
return request({
url: '/api/order',
method: 'post',
data: data
})
}
export function shipOrder(data) {
return request({
url: '/api/order/ship',
method: 'post',
data: data
})
}
// 修改店铺订单
export function updateOrder(data) {
return request({
url: '/api/order',
method: 'put',
data: data
})
}
// 删除店铺订单
export function delOrder(id) {
return request({
url: '/api/order/' + id,
method: 'delete'
})
}

44
vue/src/api/shop/shop.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询店铺列表
export function listShop(query) {
return request({
url: '/shop/shop/list',
method: 'get',
params: query
})
}
// 查询店铺详细
export function getShop(id) {
return request({
url: '/shop/shop/' + id,
method: 'get'
})
}
// 新增店铺
export function addShop(data) {
return request({
url: '/shop/shop',
method: 'post',
data: data
})
}
// 修改店铺
export function updateShop(data) {
return request({
url: '/shop/shop',
method: 'put',
data: data
})
}
// 删除店铺
export function delShop(id) {
return request({
url: '/shop/shop/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询参数列表
export function listConfig(query) {
return request({
url: '/system/config/list',
method: 'get',
params: query
})
}
// 查询参数详细
export function getConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'get'
})
}
// 根据参数键名查询参数值
export function getConfigKey(configKey) {
return request({
url: '/system/config/configKey/' + configKey,
method: 'get'
})
}
// 新增参数配置
export function addConfig(data) {
return request({
url: '/system/config',
method: 'post',
data: data
})
}
// 修改参数配置
export function updateConfig(data) {
return request({
url: '/system/config',
method: 'put',
data: data
})
}
// 删除参数配置
export function delConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'delete'
})
}
// 刷新参数缓存
export function refreshCache() {
return request({
url: '/system/config/refreshCache',
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询部门列表
export function listDept(query) {
return request({
url: '/system/dept/list',
method: 'get',
params: query
})
}
// 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) {
return request({
url: '/system/dept/list/exclude/' + deptId,
method: 'get'
})
}
// 查询部门详细
export function getDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'get'
})
}
// 新增部门
export function addDept(data) {
return request({
url: '/system/dept',
method: 'post',
data: data
})
}
// 修改部门
export function updateDept(data) {
return request({
url: '/system/dept',
method: 'put',
data: data
})
}
// 删除部门
export function delDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询字典数据列表
export function listData(query) {
return request({
url: '/system/dict/data/list',
method: 'get',
params: query
})
}
// 查询字典数据详细
export function getData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'get'
})
}
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/type/' + dictType,
method: 'get'
})
}
// 新增字典数据
export function addData(data) {
return request({
url: '/system/dict/data',
method: 'post',
data: data
})
}
// 修改字典数据
export function updateData(data) {
return request({
url: '/system/dict/data',
method: 'put',
data: data
})
}
// 删除字典数据
export function delData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'delete'
})
}

View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询字典类型列表
export function listType(query) {
return request({
url: '/system/dict/type/list',
method: 'get',
params: query
})
}
// 查询字典类型详细
export function getType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'get'
})
}
// 新增字典类型
export function addType(data) {
return request({
url: '/system/dict/type',
method: 'post',
data: data
})
}
// 修改字典类型
export function updateType(data) {
return request({
url: '/system/dict/type',
method: 'put',
data: data
})
}
// 删除字典类型
export function delType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'delete'
})
}
// 刷新字典缓存
export function refreshCache() {
return request({
url: '/system/dict/type/refreshCache',
method: 'delete'
})
}
// 获取字典选择框列表
export function optionselect() {
return request({
url: '/system/dict/type/optionselect',
method: 'get'
})
}

View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询菜单列表
export function listMenu(query) {
return request({
url: '/system/menu/list',
method: 'get',
params: query
})
}
// 查询菜单详细
export function getMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'get'
})
}
// 查询菜单下拉树结构
export function treeselect() {
return request({
url: '/system/menu/treeselect',
method: 'get'
})
}
// 根据角色ID查询菜单下拉树结构
export function roleMenuTreeselect(roleId) {
return request({
url: '/system/menu/roleMenuTreeselect/' + roleId,
method: 'get'
})
}
// 新增菜单
export function addMenu(data) {
return request({
url: '/system/menu',
method: 'post',
data: data
})
}
// 修改菜单
export function updateMenu(data) {
return request({
url: '/system/menu',
method: 'put',
data: data
})
}
// 删除菜单
export function delMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询公告列表
export function listNotice(query) {
return request({
url: '/system/notice/list',
method: 'get',
params: query
})
}
// 查询公告详细
export function getNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'get'
})
}
// 新增公告
export function addNotice(data) {
return request({
url: '/system/notice',
method: 'post',
data: data
})
}
// 修改公告
export function updateNotice(data) {
return request({
url: '/system/notice',
method: 'put',
data: data
})
}
// 删除公告
export function delNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询岗位列表
export function listPost(query) {
return request({
url: '/system/post/list',
method: 'get',
params: query
})
}
// 查询岗位详细
export function getPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'get'
})
}
// 新增岗位
export function addPost(data) {
return request({
url: '/system/post',
method: 'post',
data: data
})
}
// 修改岗位
export function updatePost(data) {
return request({
url: '/system/post',
method: 'put',
data: data
})
}
// 删除岗位
export function delPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'delete'
})
}

119
vue/src/api/system/role.js Normal file
View File

@ -0,0 +1,119 @@
import request from '@/utils/request'
// 查询角色列表
export function listRole(query) {
return request({
url: '/system/role/list',
method: 'get',
params: query
})
}
// 查询角色详细
export function getRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'get'
})
}
// 新增角色
export function addRole(data) {
return request({
url: '/system/role',
method: 'post',
data: data
})
}
// 修改角色
export function updateRole(data) {
return request({
url: '/system/role',
method: 'put',
data: data
})
}
// 角色数据权限
export function dataScope(data) {
return request({
url: '/system/role/dataScope',
method: 'put',
data: data
})
}
// 角色状态修改
export function changeRoleStatus(roleId, status) {
const data = {
roleId,
status
}
return request({
url: '/system/role/changeStatus',
method: 'put',
data: data
})
}
// 删除角色
export function delRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'delete'
})
}
// 查询角色已授权用户列表
export function allocatedUserList(query) {
return request({
url: '/system/role/authUser/allocatedList',
method: 'get',
params: query
})
}
// 查询角色未授权用户列表
export function unallocatedUserList(query) {
return request({
url: '/system/role/authUser/unallocatedList',
method: 'get',
params: query
})
}
// 取消用户授权角色
export function authUserCancel(data) {
return request({
url: '/system/role/authUser/cancel',
method: 'put',
data: data
})
}
// 批量取消用户授权角色
export function authUserCancelAll(data) {
return request({
url: '/system/role/authUser/cancelAll',
method: 'put',
params: data
})
}
// 授权用户选择
export function authUserSelectAll(data) {
return request({
url: '/system/role/authUser/selectAll',
method: 'put',
params: data
})
}
// 根据角色ID查询部门树结构
export function deptTreeSelect(roleId) {
return request({
url: '/system/role/deptTree/' + roleId,
method: 'get'
})
}

135
vue/src/api/system/user.js Normal file
View File

@ -0,0 +1,135 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/zhijian";
// 查询用户列表
export function listUser(query) {
return request({
url: '/system/user/list',
method: 'get',
params: query
})
}
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
})
}
// 新增用户
export function addUser(data) {
return request({
url: '/system/user',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/system/user/' + userId,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
return request({
url: '/system/user/resetPwd',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
params: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}
// 查询部门下拉树结构
export function deptTreeSelect() {
return request({
url: '/system/user/deptTree',
method: 'get'
})
}

53
vue/src/api/tao/order.js Normal file
View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询淘宝订单列表
export function listOrder(query) {
return request({
url: '/tao/order/list',
method: 'get',
params: query
})
}
// 查询淘宝订单详细
export function getOrder(id) {
return request({
url: '/tao/order/' + id,
method: 'get'
})
}
// 新增淘宝订单
export function addOrder(data) {
return request({
url: '/tao/order',
method: 'post',
data: data
})
}
// 修改淘宝订单
export function confirmOrder(data) {
return request({
url: '/tao/order/confirmOrder',
method: 'post',
data: data
})
}
// 删除淘宝订单
export function delOrder(id) {
return request({
url: '/tao/order/' + id,
method: 'delete'
})
}
// 接口拉取淘宝订单
export function pullOrder(query) {
return request({
url: '/taoapi/order/pull_order',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,44 @@
// import request from '@/utils/request'
// // 查询淘宝订单地址列表
// export function listOrderAddress(query) {
// return request({
// url: '/tao/orderAddress/list',
// method: 'get',
// params: query
// })
// }
// // 查询淘宝订单地址详细
// export function getOrderAddress(id) {
// return request({
// url: '/tao/orderAddress/' + id,
// method: 'get'
// })
// }
// // 新增淘宝订单地址
// export function addOrderAddress(data) {
// return request({
// url: '/tao/orderAddress',
// method: 'post',
// data: data
// })
// }
// // 修改淘宝订单地址
// export function updateOrderAddress(data) {
// return request({
// url: '/tao/orderAddress',
// method: 'put',
// data: data
// })
// }
// // 删除淘宝订单地址
// export function delOrderAddress(id) {
// return request({
// url: '/tao/orderAddress/' + id,
// method: 'delete'
// })
// }

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询淘宝退款订单列表
export function listTaoRefund(query) {
return request({
url: '/tao/taoRefund/list',
method: 'get',
params: query
})
}
// 查询淘宝退款订单详细
export function getTaoRefund(id) {
return request({
url: '/tao/taoRefund/' + id,
method: 'get'
})
}
// 新增淘宝退款订单
export function addTaoRefund(data) {
return request({
url: '/tao/taoRefund',
method: 'post',
data: data
})
}
// 修改淘宝退款订单
export function updateTaoRefund(data) {
return request({
url: '/tao/taoRefund',
method: 'put',
data: data
})
}
// 删除淘宝退款订单
export function delTaoRefund(id) {
return request({
url: '/tao/taoRefund/' + id,
method: 'delete'
})
}

76
vue/src/api/tool/gen.js Normal file
View File

@ -0,0 +1,76 @@
import request from '@/utils/request'
// 查询生成表数据
export function listTable(query) {
return request({
url: '/tool/gen/list',
method: 'get',
params: query
})
}
// 查询db数据库列表
export function listDbTable(query) {
return request({
url: '/tool/gen/db/list',
method: 'get',
params: query
})
}
// 查询表详细信息
export function getGenTable(tableId) {
return request({
url: '/tool/gen/' + tableId,
method: 'get'
})
}
// 修改代码生成信息
export function updateGenTable(data) {
return request({
url: '/tool/gen',
method: 'put',
data: data
})
}
// 导入表
export function importTable(data) {
return request({
url: '/tool/gen/importTable',
method: 'post',
params: data
})
}
// 预览生成代码
export function previewTable(tableId) {
return request({
url: '/tool/gen/preview/' + tableId,
method: 'get'
})
}
// 删除表数据
export function delTable(tableId) {
return request({
url: '/tool/gen/' + tableId,
method: 'delete'
})
}
// 生成代码(自定义路径)
export function genCode(tableName) {
return request({
url: '/tool/gen/genCode/' + tableName,
method: 'get'
})
}
// 同步数据库
export function synchDb(tableName) {
return request({
url: '/tool/gen/synchDb/' + tableName,
method: 'get'
})
}

View File

@ -0,0 +1,35 @@
import request from '@/utils/request'
// 查询入库单列表
export function listWmsStockInEntry(query) {
return request({
url: '/wms/WmsStockInEntry/list',
method: 'get',
params: query
})
}
// 查询入库单详细
export function getWmsStockInEntry(id) {
return request({
url: '/wms/WmsStockInEntry/' + id,
method: 'get'
})
}
// 新增入库单
export function stockIn(data) {
return request({
url: '/wms/WmsStockInEntry/stockIn',
method: 'post',
data: data
})
}
export function complete(id) {
return request({
url: '/wms/WmsStockInEntry/complete/' + id,
method: 'get'
})
}

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询仓库货架列表
export function listLocation(query) {
return request({
url: '/wms/location/list',
method: 'get',
params: query
})
}
export function searchLocation(query) {
return request({
url: '/wms/location/search',
method: 'get',
params: query
})
}
// 查询仓库货架详细
export function getLocation(id) {
return request({
url: '/wms/location/' + id,
method: 'get'
})
}
// 新增仓库货架
export function addLocation(data) {
return request({
url: '/wms/location',
method: 'post',
data: data
})
}
// 修改仓库货架
export function updateLocation(data) {
return request({
url: '/wms/location',
method: 'put',
data: data
})
}
// 删除仓库货架
export function delLocation(id) {
return request({
url: '/wms/location/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询仓库订单发货列表
export function listShipping(query) {
return request({
url: '/wms/shipping/list',
method: 'get',
params: query
})
}
// 查询仓库订单发货详细
export function getShipping(id) {
return request({
url: '/wms/shipping/' + id,
method: 'get'
})
}
// 新增仓库订单发货
export function stockingAdd(data) {
return request({
url: '/wms/shipping/stockingAdd',
method: 'post',
data: data
})
}
// 修改仓库订单发货
export function updateShipping(data) {
return request({
url: '/wms/shipping',
method: 'put',
data: data
})
}
// 删除仓库订单发货
export function delShipping(id) {
return request({
url: '/wms/shipping/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,28 @@
import request from '@/utils/request'
// 查询出库单列表
export function listStockOutEntry(query) {
return request({
url: '/wms/stockOutEntry/list',
method: 'get',
params: query
})
}
// 查询出库单详细
export function getStockOutEntry(id) {
return request({
url: '/wms/stockOutEntry/' + id,
method: 'get'
})
}
// 出库
export function stockOut(data) {
return request({
url: '/wms/stockOutEntry/stockOut',
method: 'post',
data: data
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询出库明细详情列表
export function listStockOutEntryItemDetail(query) {
return request({
url: '/wms/stockOutEntryItemDetail/list',
method: 'get',
params: query
})
}
// 查询出库明细详情详细
export function getStockOutEntryItemDetail(id) {
return request({
url: '/wms/stockOutEntryItemDetail/' + id,
method: 'get'
})
}
// 新增出库明细详情
export function addStockOutEntryItemDetail(data) {
return request({
url: '/wms/stockOutEntryItemDetail',
method: 'post',
data: data
})
}
// 修改出库明细详情
export function updateStockOutEntryItemDetail(data) {
return request({
url: '/wms/stockOutEntryItemDetail',
method: 'put',
data: data
})
}
// 删除出库明细详情
export function delStockOutEntryItemDetail(id) {
return request({
url: '/wms/stockOutEntryItemDetail/' + id,
method: 'delete'
})
}

44
vue/src/api/xhs/order.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询小红书订单列表
export function listOrder(query) {
return request({
url: '/xhs/order/list',
method: 'get',
params: query
})
}
// 查询小红书订单详细
export function getOrder(id) {
return request({
url: '/xhs/order/' + id,
method: 'get'
})
}
// 新增小红书订单
export function addOrder(data) {
return request({
url: '/xhs/order',
method: 'post',
data: data
})
}
// 修改小红书订单
export function confirmOrder(data) {
return request({
url: '/xhs/order/confirm',
method: 'post',
data: data
})
}
// 删除小红书订单
export function delOrder(id) {
return request({
url: '/xhs/order/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询订单收件人信息列表
export function listOrderReceiver(query) {
return request({
url: '/xhs/orderReceiver/list',
method: 'get',
params: query
})
}
// 查询订单收件人信息详细
export function getOrderReceiver(id) {
return request({
url: '/xhs/orderReceiver/' + id,
method: 'get'
})
}
// 新增订单收件人信息
export function addOrderReceiver(data) {
return request({
url: '/xhs/orderReceiver',
method: 'post',
data: data
})
}
// 修改订单收件人信息
export function updateOrderReceiver(data) {
return request({
url: '/xhs/orderReceiver',
method: 'put',
data: data
})
}
// 删除订单收件人信息
export function delOrderReceiver(id) {
return request({
url: '/xhs/orderReceiver/' + id,
method: 'delete'
})
}

44
vue/src/api/xhs/refund.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询小红书订单退款列表
export function listRefund(query) {
return request({
url: '/xhs/refund/list',
method: 'get',
params: query
})
}
// 查询小红书订单退款详细
export function getRefund(id) {
return request({
url: '/xhs/refund/' + id,
method: 'get'
})
}
// 新增小红书订单退款
export function addRefund(data) {
return request({
url: '/xhs/refund',
method: 'post',
data: data
})
}
// 修改小红书订单退款
export function updateRefund(data) {
return request({
url: '/xhs/refund',
method: 'put',
data: data
})
}
// 删除小红书订单退款
export function delRefund(id) {
return request({
url: '/xhs/refund/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询小红书订单退款列表
export function listXhsRefund(query) {
return request({
url: '/xhs/xhsRefund/list',
method: 'get',
params: query
})
}
// 查询小红书订单退款详细
export function getXhsRefund(id) {
return request({
url: '/xhs/xhsRefund/' + id,
method: 'get'
})
}
// 新增小红书订单退款
export function addXhsRefund(data) {
return request({
url: '/xhs/xhsRefund',
method: 'post',
data: data
})
}
// 修改小红书订单退款
export function updateXhsRefund(data) {
return request({
url: '/xhs/xhsRefund',
method: 'put',
data: data
})
}
// 删除小红书订单退款
export function delXhsRefund(id) {
return request({
url: '/xhs/xhsRefund/' + id,
method: 'delete'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,9 @@
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

View File

@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899741379" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2054" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960 591.424V368.96c0-0.288 0.16-0.512 0.16-0.768S960 367.68 960 367.424V192a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v175.424c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768v222.464c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768V864a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32v-271.04c0-0.288 0.16-0.512 0.16-0.768S960 591.68 960 591.424z m-560-31.232v-160H608v160h-208z m208 64V832h-208v-207.808H608z m-480-224h208v160H128v-160z m544 0h224v160h-224v-160zM896 224v112.192H128V224h768zM128 624.192h208V832H128v-207.808zM672 832v-207.808h224V832h-224z" p-id="2055"></path></svg>

After

Width:  |  Height:  |  Size: 954 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1588670460195" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1314" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M230.4 307.712c13.824 0 25.088-11.264 25.088-25.088 0-100.352 81.92-182.272 182.272-182.272s182.272 81.408 182.272 182.272c0 13.824 11.264 25.088 25.088 25.088s25.088-11.264 24.576-25.088c0-127.488-103.936-231.936-231.936-231.936S205.824 154.624 205.824 282.624c-0.512 14.336 10.752 25.088 24.576 25.088z m564.736 234.496c-11.264 0-21.504 2.048-31.232 6.144 0-44.544-40.448-81.92-88.064-81.92-14.848 0-28.16 3.584-39.936 10.24-13.824-28.16-44.544-48.128-78.848-48.128-12.288 0-24.576 2.56-35.328 7.68V284.16c0-45.568-37.888-81.92-84.48-81.92s-84.48 36.864-84.48 81.92v348.672l-69.12-112.64c-18.432-28.16-58.368-36.864-91.136-19.968-26.624 14.336-46.592 47.104-30.208 88.064 3.072 8.192 76.8 205.312 171.52 311.296 0 0 28.16 24.576 43.008 58.88 4.096 9.728 13.312 15.36 22.528 15.36 3.072 0 6.656-0.512 9.728-2.048 12.288-5.12 18.432-19.968 12.8-32.256-19.456-44.544-53.76-74.752-53.76-74.752C281.6 768 209.408 573.44 208.384 570.88c-5.12-12.8-2.56-20.992 7.168-26.112 9.216-4.608 21.504-4.608 26.112 2.56l113.152 184.32c4.096 8.704 12.8 14.336 22.528 14.336 13.824 0 25.088-10.752 25.088-25.088V284.16c0-17.92 15.36-32.256 34.816-32.256s34.816 14.336 34.816 32.256v284.16c0 13.824 10.24 25.088 24.576 25.088 13.824 0 25.088-11.264 25.088-25.088v-57.344c0-17.92 15.36-32.768 34.816-32.768 19.968 0 37.376 15.36 37.376 32.768v95.232c0 7.168 3.072 13.312 7.68 17.92 4.608 4.608 10.752 7.168 17.92 7.168 13.824 0 24.576-11.264 24.576-25.088V547.84c0-18.432 13.824-32.256 32.256-32.256 20.48 0 38.912 15.36 38.912 32.256v95.232c0 13.824 11.264 25.088 25.088 25.088s24.576-11.264 25.088-25.088v-18.944c0-18.944 12.8-32.256 30.72-32.256 18.432 0 22.528 18.944 22.528 31.744 0 1.024-11.776 99.84-50.688 173.056-30.72 58.368-45.056 112.128-51.2 146.944-2.56 13.312 6.656 26.112 19.968 28.672 1.536 0 3.072 0.512 4.608 0.512 11.776 0 22.016-8.192 24.064-20.48 5.632-31.232 18.432-79.36 46.08-132.608 43.52-81.92 55.808-186.88 56.32-193.536-0.512-50.688-29.696-83.968-72.704-83.968z"></path></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1576153230908" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="971" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M772.87036133 734.06115723c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714843H475.90991211c-56.60705567 0-102.66723633-46.06018067-102.66723633-102.66723633V600.82446289h305.859375c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012S827.9942627 467.50537109 772.87036133 467.50537109c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714844H373.24267578V401.01062011h321.92687989c55.12390137 0 99.94812012-44.82421875 99.94812011-99.94812011V190.07312011C795.11767578 134.94921875 750.29345703 90.125 695.16955567 90.125H251.12963867C196.0057373 90.125 151.18151855 134.94921875 151.18151855 190.07312011V301.0625c0 55.12390137 44.82421875 99.94812012 99.94812012 99.94812012h55.53588867v296.96044921c0 93.35632325 75.97045898 169.32678223 169.32678224 169.32678223h203.19213866c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012s-44.90661622-99.86572266-100.03051758-99.86572265z m0-199.89624024c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857423s-14.91394043 33.28857422-33.28857422 33.28857421-33.28857422-14.91394043-33.28857422-33.28857421 14.91394043-33.28857422 33.28857422-33.28857422zM217.75866699 301.0625V190.07312011c0-18.37463379 14.91394043-33.28857422 33.28857423-33.28857421h444.03991698c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857422V301.0625c0 18.37463379-14.91394043 33.28857422-33.28857422 33.28857422H251.12963867c-18.37463379 0-33.37097168-14.91394043-33.37097168-33.28857422z m555.11169434 566.23535156c-18.37463379 0-33.28857422-14.91394043-33.28857422-33.28857422 0-18.37463379 14.91394043-33.28857422 33.28857422-33.28857422s33.28857422 14.91394043 33.28857422 33.28857422c0.08239747 18.29223633-14.91394043 33.28857422-33.28857422 33.28857422z" p-id="972"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h36.571V128H0V54.857zM91.429 27.43H128V128H91.429V27.429zM45.714 0h36.572v128H45.714V0z"/></svg>

After

Width:  |  Height:  |  Size: 179 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575982282951" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="902" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M828.40625 90.125H195.59375C137.375 90.125 90.125 137.375 90.125 195.59375v632.8125c0 58.21875 47.25 105.46875 105.46875 105.46875h632.8125c58.21875 0 105.46875-47.25 105.46875-105.46875V195.59375c0-58.21875-47.25-105.46875-105.46875-105.46875z m52.734375 738.28125c0 29.16-23.57015625 52.734375-52.734375 52.734375H195.59375c-29.109375 0-52.734375-23.574375-52.734375-52.734375V195.59375c0-29.109375 23.625-52.734375 52.734375-52.734375h632.8125c29.16 0 52.734375 23.625 52.734375 52.734375v632.8125z" p-id="903"></path><path d="M421.52890625 709.55984375a36.28125 36.28125 0 0 1-27.55265625-12.66890625L205.17453125 476.613125a36.28546875 36.28546875 0 0 1 55.10109375-47.22890625l164.986875 192.4846875 342.16171875-298.48078125a36.2896875 36.2896875 0 0 1 47.70984375 54.68765625L445.3859375 700.6203125a36.3234375 36.3234375 0 0 1-23.85703125 8.93953125z" p-id="904"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Some files were not shown because too many files have changed in this diff Show More