孙永军 1 anno fa
parent
commit
f3150dad09

+ 46 - 0
src/main/java/com/smcic/api/neican/aspect/AclAspect.java

@@ -0,0 +1,46 @@
+package com.smcic.api.neican.aspect;
+
+import com.smcic.api.neican.service.impl.RoleAclModuleServiceImpl;
+import com.smcic.core.advice.APIException;
+import com.smcic.core.auth.HttpContextUtil;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+@Aspect
+@Component
+public class AclAspect {
+
+    @Resource
+    private RoleAclModuleServiceImpl roleAclModuleService;
+
+    @Pointcut("execution(* com.smcic.api.neican.controller.*Controller.*(..))")
+    public void logPointCut(){}
+
+    /** 前置通知 */
+    @Before("logPointCut()")
+    public void before(JoinPoint joinPoint){
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        String path = request.getServletPath();
+
+        if (path.contains("login") || path.contains("check")) {
+            return;
+        }
+        String prefix = path.substring(0, path.replaceAll("\\/\\d+$", "").lastIndexOf("/"));
+
+        if(HttpContextUtil.getToken().isPresent() && !roleAclModuleService.getCurrAllowPath().contains(prefix)){
+            throw new APIException("没有权限");
+        }
+
+    }
+}

+ 6 - 0
src/main/java/com/smcic/api/neican/controller/AdminRoleController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.smcic.api.neican.dto.NamePageDTO;
 import com.smcic.api.neican.entity.AdminRole;
 import com.smcic.api.neican.service.impl.AdminRoleServiceImpl;
+import com.smcic.core.auth.LoginRequired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -25,26 +26,31 @@ public class AdminRoleController {
     private AdminRoleServiceImpl adminRoleService;
 
     @PostMapping("/list")
+    @LoginRequired
     public Page<AdminRole> rolePage(@RequestBody NamePageDTO namePageDTO){
         return adminRoleService.rolePage(namePageDTO);
     }
 
     @PostMapping("/add")
+    @LoginRequired
     public void addRole(@RequestBody AdminRole adminRole){
         adminRoleService.create(adminRole);
     }
 
     @DeleteMapping("/delete/{id}")
+    @LoginRequired
     public void deleteRole(@PathVariable Long id){
         adminRoleService.delete(id);
     }
 
     @PostMapping("/update")
+    @LoginRequired
     public void updateRole(@RequestBody AdminRole adminRole){
         adminRoleService.modify(adminRole);
     }
 
     @GetMapping("/info/{id}")
+    @LoginRequired
     public AdminRole getRole(@PathVariable Long id){
         return adminRoleService.info(id);
     }

+ 44 - 3
src/main/java/com/smcic/api/neican/controller/LeadersController.java

@@ -1,9 +1,17 @@
 package com.smcic.api.neican.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.google.common.collect.ImmutableMap;
+import com.smcic.api.neican.entity.Leaders;
+import com.smcic.api.neican.service.impl.LeadersServiceImpl;
+import com.smcic.core.auth.LoginRequired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -14,7 +22,40 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-11-16
  */
 @RestController
-@RequestMapping("/neican/leaders")
+@RequestMapping("/admin/leaders")
 public class LeadersController {
 
+    @Resource
+    private LeadersServiceImpl leadersService;
+
+    @RequestMapping("upload")
+    @LoginRequired
+    public Map<String, String> upload(@RequestParam(value = "file", required = false) MultipartFile file){
+        return ImmutableMap.of("url", leadersService.upload(file));
+    }
+
+    @PostMapping("add")
+    @LoginRequired
+    public void add(@RequestBody Leaders leaders) {
+        leadersService.add(leaders);
+    }
+
+    @GetMapping("list/{regionId}")
+    @LoginRequired
+    public List<Leaders> list(@PathVariable Long regionId) {
+        return leadersService.listByRegion(regionId);
+    }
+
+    @DeleteMapping("delete/{id}")
+    @LoginRequired
+    public void delete(@PathVariable Long id) {
+        leadersService.delete(id);
+    }
+
+    @PostMapping("update")
+    @LoginRequired
+    public void update(@RequestBody Leaders leaders) {
+        leadersService.update(leaders);
+    }
+
 }

+ 33 - 3
src/main/java/com/smcic/api/neican/controller/LifeServiceController.java

@@ -1,9 +1,14 @@
 package com.smcic.api.neican.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.smcic.api.neican.dto.NamePageDTO;
+import com.smcic.api.neican.entity.LifeService;
+import com.smcic.api.neican.service.impl.LifeServiceServiceImpl;
+import com.smcic.core.auth.LoginRequired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -14,7 +19,32 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-11-16
  */
 @RestController
-@RequestMapping("/neican/life-service")
+@RequestMapping("/admin/life-service")
 public class LifeServiceController {
+    @Resource
+    private LifeServiceServiceImpl lifeServiceService;
 
+    @PostMapping("/add")
+    @LoginRequired
+    public void add(@RequestBody LifeService lifeService) {
+        lifeServiceService.add(lifeService);
+    }
+
+    @RequestMapping("/list")
+    @LoginRequired
+    public Page<LifeService> list(@RequestBody NamePageDTO namePageDTO) {
+        return lifeServiceService.listByPage(namePageDTO);
+    }
+
+    @PostMapping("/update")
+    @LoginRequired
+    public void update(@RequestBody LifeService lifeService) {
+        lifeServiceService.update(lifeService);
+    }
+
+    @DeleteMapping("/delete/{id}")
+    @LoginRequired
+    public void delete(@PathVariable Long id) {
+        lifeServiceService.delete(id);
+    }
 }

+ 31 - 3
src/main/java/com/smcic/api/neican/controller/LiveStreamController.java

@@ -1,9 +1,13 @@
 package com.smcic.api.neican.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.smcic.api.neican.entity.LiveStream;
+import com.smcic.api.neican.service.impl.LiveStreamServiceImpl;
+import com.smcic.core.auth.LoginRequired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * <p>
@@ -14,7 +18,31 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-11-16
  */
 @RestController
-@RequestMapping("/neican/live-stream")
+@RequestMapping("/admin/live-stream")
 public class LiveStreamController {
 
+    @Resource
+    private LiveStreamServiceImpl liveStreamService;
+
+    @RequestMapping("/list")
+    public List<LiveStream> list() {
+        return liveStreamService.list();
+    }
+
+    @PostMapping("/add")
+    public void add(@RequestBody LiveStream liveStream) {
+        liveStreamService.add(liveStream);
+    }
+
+    @PostMapping("/update")
+    public void update(@RequestBody LiveStream liveStream) {
+        liveStreamService.update(liveStream);
+    }
+
+    @DeleteMapping("/delete/{id}")
+    public void delete(@PathVariable Long id) {
+        liveStreamService.delete(id);
+    }
+
+
 }

+ 6 - 0
src/main/java/com/smcic/api/neican/controller/MenuModuleController.java

@@ -3,6 +3,7 @@ package com.smcic.api.neican.controller;
 
 import com.smcic.api.neican.entity.MenuModule;
 import com.smcic.api.neican.service.impl.MenuModuleServiceImpl;
+import com.smcic.core.auth.LoginRequired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -24,26 +25,31 @@ public class MenuModuleController {
     private MenuModuleServiceImpl menuModuleService;
 
     @GetMapping("/list")
+    @LoginRequired
     public List<MenuModule> list(){
         return menuModuleService.adminMenuModule(0L);
     }
 
     @PostMapping("add")
+    @LoginRequired
     public void add(@RequestBody MenuModule menuModule){
         menuModuleService.create(menuModule);
     }
 
     @PostMapping("update")
+    @LoginRequired
     public void update(@RequestBody MenuModule menuModule){
         menuModuleService.update(menuModule);
     }
 
     @DeleteMapping("delete/{id}")
+    @LoginRequired
     public void delete(@PathVariable Long id){
         menuModuleService.delete(id);
     }
 
     @GetMapping("/client")
+    @LoginRequired
     public List<MenuModule> clientMenuModule(){
         return menuModuleService.clientMenuModule();
     }

+ 2 - 0
src/main/java/com/smcic/api/neican/controller/RegionController.java

@@ -3,6 +3,7 @@ package com.smcic.api.neican.controller;
 
 import com.smcic.api.neican.entity.Region;
 import com.smcic.api.neican.service.impl.RegionServiceImpl;
+import com.smcic.core.auth.LoginRequired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
@@ -27,6 +28,7 @@ public class RegionController {
     private RegionServiceImpl regionService;
 
     @GetMapping("tree")
+    @LoginRequired
     public List<Region> tree(){
         return regionService.regionTree();
     }

+ 6 - 1
src/main/java/com/smcic/api/neican/controller/UserRoleController.java

@@ -3,6 +3,7 @@ package com.smcic.api.neican.controller;
 
 import com.smcic.api.neican.dto.UserRoleDTO;
 import com.smcic.api.neican.service.impl.UserRoleServiceImpl;
+import com.smcic.core.auth.LoginRequired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -17,28 +18,32 @@ import java.util.List;
  * @since 2023-11-16
  */
 @RestController
-@RequestMapping("/admin/user/role")
+@RequestMapping("/admin/user-role")
 public class UserRoleController {
 
     @Resource
     private UserRoleServiceImpl userRoleService;
 
     @GetMapping("/list")
+    @LoginRequired
     public List<UserRoleDTO> list(){
         return userRoleService.userRoles();
     }
 
     @PostMapping("/add")
+    @LoginRequired
     public void add(@RequestBody UserRoleDTO userRoleDTO){
         userRoleService.create(userRoleDTO);
     }
 
     @PostMapping("/update")
+    @LoginRequired
     public void update(@RequestBody UserRoleDTO userRoleDTO){
         userRoleService.modify(userRoleDTO);
     }
 
     @DeleteMapping("/delete/{id}")
+    @LoginRequired
     public void delete(@PathVariable Long id){
         userRoleService.del(id);
     }

+ 6 - 0
src/main/java/com/smcic/api/neican/controller/UsersController.java

@@ -6,6 +6,7 @@ import com.smcic.api.neican.dto.NamePageDTO;
 import com.smcic.api.neican.dto.PwdResetDTO;
 import com.smcic.api.neican.entity.Users;
 import com.smcic.api.neican.service.impl.UsersServiceImpl;
+import com.smcic.core.auth.LoginRequired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -26,26 +27,31 @@ public class UsersController {
     private UsersServiceImpl usersService;
 
     @PostMapping("/list")
+    @LoginRequired
     public Page<Users> list(@RequestBody NamePageDTO namePageDTO){
         return usersService.usersPage(namePageDTO);
     }
 
     @PostMapping("/add")
+    @LoginRequired
     public void add(@RequestBody Users users){
         usersService.create(users);
     }
 
     @DeleteMapping("/delete/{id}")
+    @LoginRequired
     public void delete(@PathVariable Long id){
         usersService.del(id);
     }
 
     @PostMapping("/update")
+    @LoginRequired
     public void update(@RequestBody Users users){
         usersService.modify(users);
     }
 
     @PostMapping("/pwd/reset")
+    @LoginRequired
     public void pwdReset(@RequestBody PwdResetDTO pwdResetDTO){
         usersService.resetPwd(pwdResetDTO);
     }

+ 2 - 2
src/main/java/com/smcic/api/neican/entity/Leaders.java

@@ -25,7 +25,7 @@ public class Leaders implements Serializable {
 
     private String name;
 
-    private String desc;
+    private String info;
 
     private String photo;
 
@@ -41,7 +41,7 @@ public class Leaders implements Serializable {
 
     private String level;
 
-    private Long areaId;
+    private Long regionId;
 
     /**
      * 审核状态

+ 1 - 1
src/main/java/com/smcic/api/neican/entity/LifeService.java

@@ -31,7 +31,7 @@ public class LifeService implements Serializable {
 
     private String url;
 
-    private String status;
+    private Integer status;
 
     private Integer sort;
 

+ 37 - 0
src/main/java/com/smcic/api/neican/service/OSSService.java

@@ -0,0 +1,37 @@
+package com.smcic.api.neican.service;
+
+import cn.hutool.core.io.IoUtil;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.PutObjectResult;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+@Service
+public class OSSService {
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    private final OSS ossClient = new OSSClientBuilder().build("https://oss-cn-chengdu.aliyuncs.com",
+            "LTAI4GEBqfF1GX4VwsYU2Wpg",
+            "rVIv0E1lRfXOCrAmkFTZnfgWiuv4ea");
+
+    @SneakyThrows
+    public void put(String bucketName, String key, String data) {
+        ossClient.putObject(bucketName, key, new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)));
+    }
+
+    @SneakyThrows
+    public PutObjectResult put(String bucketName, String key, MultipartFile file) {
+        return ossClient.putObject(bucketName, key, new ByteArrayInputStream(IoUtil.readBytes(file.getInputStream())));
+    }
+
+}

+ 50 - 0
src/main/java/com/smcic/api/neican/service/impl/LeadersServiceImpl.java

@@ -1,10 +1,19 @@
 package com.smcic.api.neican.service.impl;
 
+import cn.hutool.core.date.DateTime;
+import com.aliyun.oss.model.PutObjectResult;
 import com.smcic.api.neican.entity.Leaders;
 import com.smcic.api.neican.mapper.LeadersMapper;
 import com.smcic.api.neican.service.ILeadersService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smcic.api.neican.service.OSSService;
+import com.smcic.core.advice.APIException;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Random;
 
 /**
  * <p>
@@ -17,4 +26,45 @@ import org.springframework.stereotype.Service;
 @Service
 public class LeadersServiceImpl extends ServiceImpl<LeadersMapper, Leaders> implements ILeadersService {
 
+    @Resource
+    private OSSService ossService;
+
+    public String upload(MultipartFile file){
+        if(null == file){
+            throw new APIException("文件为空");
+        }
+        Random random = new Random();
+        String path = "neican/img/leader/" + (new DateTime().toString("yyyyMMddHHmmss"))+"/" + random.nextInt() + "-" + file.getOriginalFilename();
+        ossService.put("smcic-index", path, file);
+        return  "https://cxzx.smcic.net/" + path;
+    }
+
+    public void add(Leaders leaders){
+        leaders.setStatus(0);
+        save(leaders);
+    }
+
+    public void update(Leaders leaders){
+        Leaders old = getById(leaders.getLeaderId());
+        if(null == old){
+            throw new APIException("领导信息不存在");
+        }
+
+        leaders.setStatus(0);
+        updateById(leaders);
+    }
+
+    public List<Leaders> listByRegion(Long regionId){
+        return lambdaQuery().eq(Leaders::getRegionId, regionId).list();
+    }
+
+    public void delete(Long leaderId){
+        Leaders leaders = getById(leaderId);
+        if(null == leaders){
+            throw new APIException("领导信息不存在");
+        }
+        removeById(leaderId);
+    }
+
+
 }

+ 34 - 0
src/main/java/com/smcic/api/neican/service/impl/LifeServiceServiceImpl.java

@@ -1,9 +1,15 @@
 package com.smcic.api.neican.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.smcic.api.neican.dto.NamePageDTO;
 import com.smcic.api.neican.entity.LifeService;
 import com.smcic.api.neican.mapper.LifeServiceMapper;
 import com.smcic.api.neican.service.ILifeServiceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smcic.core.advice.APIException;
+import org.apache.http.util.TextUtils;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +23,32 @@ import org.springframework.stereotype.Service;
 @Service
 public class LifeServiceServiceImpl extends ServiceImpl<LifeServiceMapper, LifeService> implements ILifeServiceService {
 
+    public void add(LifeService lifeService){
+        lifeService.setStatus(0);
+        save(lifeService);
+    }
+
+    public void update(LifeService lifeService){
+        LifeService old = getById(lifeService.getServiceId());
+        if(null == old){
+            throw new APIException("不存在的生活服务");
+        }
+        lifeService.setStatus(0);
+        updateById(lifeService);
+    }
+
+    public Page<LifeService> listByPage(NamePageDTO namePageDTO){
+        LambdaQueryWrapper<LifeService> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        return baseMapper.selectPage(new Page<>(namePageDTO.getPage(), namePageDTO.getPageSize()),
+                lambdaQueryWrapper.eq(!TextUtils.isEmpty(namePageDTO.getName()), LifeService::getName, namePageDTO.getName())
+                        .eq(LifeService::getStatus, 1).orderByAsc(LifeService::getSort));
+    }
+
+    public void delete(Long id){
+        LifeService old = getById(id);
+        if(null == old){
+            throw new APIException("不存在的生活服务");
+        }
+        removeById(id);
+    }
 }

+ 26 - 0
src/main/java/com/smcic/api/neican/service/impl/LiveStreamServiceImpl.java

@@ -4,8 +4,11 @@ import com.smcic.api.neican.entity.LiveStream;
 import com.smcic.api.neican.mapper.LiveStreamMapper;
 import com.smcic.api.neican.service.ILiveStreamService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smcic.core.advice.APIException;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 电视广播直播流地址管理 服务实现类
@@ -17,4 +20,27 @@ import org.springframework.stereotype.Service;
 @Service
 public class LiveStreamServiceImpl extends ServiceImpl<LiveStreamMapper, LiveStream> implements ILiveStreamService {
 
+    public void add(LiveStream liveStream) {
+        save(liveStream);
+    }
+
+    public void update(LiveStream liveStream) {
+        LiveStream exist = getById(liveStream.getLiveId());
+        if (exist == null){
+            throw new APIException("数据不存在");
+        }
+        updateById(liveStream);
+    }
+
+    public List<LiveStream> liveStreamList() {
+        return list();
+    }
+
+    public void delete(Long liveId) {
+        LiveStream liveStream = getById(liveId);
+        if (liveStream == null){
+            throw new APIException("数据不存在");
+        }
+        removeById(liveId);
+    }
 }

+ 25 - 0
src/main/java/com/smcic/api/neican/service/impl/RoleAclModuleServiceImpl.java

@@ -2,10 +2,14 @@ package com.smcic.api.neican.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smcic.api.neican.entity.AdminRole;
 import com.smcic.api.neican.entity.MenuModule;
 import com.smcic.api.neican.entity.RoleAclModule;
 import com.smcic.api.neican.mapper.RoleAclModuleMapper;
 import com.smcic.api.neican.service.IRoleAclModuleService;
+import com.smcic.core.advice.APIException;
+import com.smcic.core.auth.AESUtil;
+import com.smcic.core.auth.HttpContextUtil;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -28,8 +32,16 @@ public class RoleAclModuleServiceImpl extends ServiceImpl<RoleAclModuleMapper, R
     @Resource
     private MenuModuleServiceImpl menuModuleService;
 
+    @Resource
+    private AdminUserRoleServiceImpl adminUserRoleService;
+
     public List<MenuModule> getModules(Long roleId) {
         List<Long> moduleIds = lambdaQuery().eq(RoleAclModule::getRoleId, roleId).list().stream().map(RoleAclModule::getModuleId).collect(Collectors.toList());
+
+        if (moduleIds.contains( -1L)) {
+            return menuModuleService.list();
+        }
+
         List<MenuModule> menuModules = menuModuleService.lambdaQuery().in(MenuModule::getModuleId, moduleIds).list();
 
         if(!menuModules.isEmpty()) {
@@ -56,4 +68,17 @@ public class RoleAclModuleServiceImpl extends ServiceImpl<RoleAclModuleMapper, R
         return rs;
 
     }
+
+    public List<String> getCurrAllowPath(){
+        if(!HttpContextUtil.getToken().isPresent()){
+            throw new APIException("请先登录");
+        }
+        Long uid = Long.valueOf(AESUtil.decryptStr(HttpContextUtil.getToken().get()));
+        List<AdminRole> roles = adminUserRoleService.getRoles(uid);
+        List<MenuModule> modules = new ArrayList<>();
+        for (AdminRole adminRole: roles){
+            modules.addAll(getModules(adminRole.getRoleId()));
+        }
+        return modules.stream().map(MenuModule::getRouter).distinct().collect(Collectors.toList());
+    }
 }

+ 178 - 6
src/test/java/neican.http

@@ -7,14 +7,19 @@ Content-Type: application/json
   "loginPassword": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"
 }
 
+> {%
+    client.global.set("token", response.body.data.token)
+  %}
+
 ### 登出
 GET {{ip}}/admin/users/logout
-Authorization: 58c668fc9f110cf07038a91ba87b928d
+Authorization: {{token}}
 
 
 ### 菜单添加
 POST {{ip}}/admin/module/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "name": "首页",
@@ -26,11 +31,13 @@ Content-Type: application/json
 
 ### 后台菜单查询
 GET {{ip}}/admin/module/list
+Authorization: {{token}}
 
 
 ### 菜单修改
 POST {{ip}}/admin/module/update
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "moduleId": 2,
@@ -43,13 +50,16 @@ Content-Type: application/json
 
 ### 菜单删除
 DELETE {{ip}}/admin/module/delete/5
+Authorization: {{token}}
 
 ### 地域
 GET {{ip}}/admin/region/tree
+Authorization: {{token}}
 
 ### 机构
 POST {{ip}}/admin/organ/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "regionId": 130107105,
@@ -64,6 +74,7 @@ Content-Type: application/json
 ### 机构查询
 POST {{ip}}/admin/organ/list
 Content-Type: application/json
+Authorization: {{token}}
 
 {
 "page": 1,
@@ -73,14 +84,29 @@ Content-Type: application/json
 
 ### 机构编辑
 POST {{ip}}/admin/organ/update
-Content-Type:
+Content-Type:application/json
+Authorization: {{token}}
+
+{
+  "organId": 1,
+  "regionId": 130107105,
+  "pid": 1,
+  "level": 1,
+  "name": "广信1",
+  "category": "--",
+  "authType": "资质",
+  "info": "这是他上班的地方"
+}
+
 
 ### 机构删除
 DELETE {{ip}}/admin/organ/delete/3
+Authorization: {{token}}
 
 ###角色添加
 POST {{ip}}/admin/role/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "name": "角色1",
@@ -101,6 +127,7 @@ Content-Type: application/json
 ###角色查询
 POST {{ip}}/admin/role/list
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "page": 1,
@@ -109,10 +136,12 @@ Content-Type: application/json
 
 ### 角色详情
 GET {{ip}}/admin/role/info/3
+Authorization: {{token}}
 
 ### 管理员添加
 POST {{ip}}/admin/users/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "phone": "17691223255",
@@ -128,6 +157,7 @@ Content-Type: application/json
 ### 管理员列表
 POST {{ip}}/admin/users/list
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "page": 1,
@@ -137,6 +167,7 @@ Content-Type: application/json
 ### 管理员修改
 POST {{ip}}/admin/users/update
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "userId": 1,
@@ -153,16 +184,20 @@ Content-Type: application/json
 ### 管理员删除
 DELETE {{ip}}/admin/users/delete/1
 Content-Type: application/json
+Authorization: {{token}}
 
 ### 客户端菜单查询(配置客户权限用)
 GET  {{ip}}/admin/module/client
+Authorization: {{token}}
 
 ### 客户角色查询
-GET {{ip}}/admin/user/role/list
+GET {{ip}}/admin/user-role/list
+Authorization: {{token}}
 
 ### 客户角色创建
-POST {{ip}}/admin/user/role/add
+POST {{ip}}/admin/user-role/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "name": "测试角色1",
@@ -173,8 +208,9 @@ Content-Type: application/json
 }
 
 ### 客户角色修改
-POST {{ip}}/admin/user/role/update
+POST {{ip}}/admin/user-role/update
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "name": "测试角色1",
@@ -185,11 +221,13 @@ Content-Type: application/json
 }
 
 ### 客户角色删除
-DELETE {{ip}}/admin/user/role/delete/2
+DELETE {{ip}}/admin/user-role/delete/2
+Authorization: {{token}}
 
 ### 客户添加
 POST {{ip}}/admin/custom/add
 Content-Type: application/json
+Authorization: {{token}}
 
 {
   "name": "姓名xx",
@@ -206,3 +244,137 @@ Content-Type: application/json
 }
 
 ### 客户查询
+POST {{ip}}/admin/custom/list
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+  "name": "",
+  "page": 1,
+  "pageSize": 10
+}
+
+### 领导管理,头像上传
+POST {{ip}}/admin/leaders/upload
+Content-Type: multipart/form-data; boundary=WebAppBoundary
+Authorization: {{token}}
+
+--WebAppBoundary
+Content-Disposition: form-data; name="file"; filename="3.jpg"
+Content-Type: multipart/form-data
+
+< C:\Users\admin\Pictures\壁纸\v2-90a79d1eacb521d470c5b7192004cf42_r.jpg
+--WebAppBoundary
+
+
+### 领导添加
+POST {{ip}}/admin/leaders/add
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+  "name": "姓名",
+  "info": "描述",
+  "photo": "https://cxzx.smcic.net/neican/img/leader/20231214114516/-1829771934-3.jpg",
+  "position": "职位",
+  "resume": "履历",
+  "level": "级别",
+  "regionId": 100100100,
+  "sort": 1
+}
+
+### 领导查询
+GET {{ip}}/admin/leaders/list/100100100
+Content-Type: application/json
+Authorization: {{token}}
+
+
+### 领导修改
+POST {{ip}}/admin/leaders/update
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+      "leaderId": 2,
+      "name": "姓名1",
+      "info": "描述1",
+      "photo": "https://cxzx.smcic.net/neican/img/leader/20231214114516/-1829771934-3.jpg",
+      "position": "职位",
+      "resume": "履历",
+      "level": "级别",
+      "regionId": 100100100,
+      "status": 0,
+      "sort": 1
+    }
+
+
+### 生活服务添加
+POST {{ip}}/admin/life-service/add
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+"name": "服务名称",
+  "logo": "https://cxzx.smcic.net/neican/img/leader/20231214114516/-1829771934-3.jpg",
+  "url": "http://服务外链地址.com",
+  "sort": 1
+}
+
+### 生活服务分页查询
+POST {{ip}}/admin/life-service/list
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+  "name": "",
+  "page": 1,
+  "pageSize": 10
+}
+
+### 生活服务修改
+POST {{ip}}/admin/life-service/update
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+        "serviceId": 1,
+        "name": "服务名称1",
+        "logo": "https://cxzx.smcic.net/neican/img/leader/20231214114516/-1829771934-3.jpg",
+        "url": "http://服务外链地址.com",
+        "sort": 1
+      }
+
+### 生活服务删除
+DELETE {{ip}}/admin/life-service/delete/1
+Authorization: {{token}}
+
+### 直播流地址管理 添加
+POST {{ip}}/admin/live-stream/add
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+  "name": "陕西卫视",
+  "url": "http://stream1.com",
+  "desc": "陕西卫视高清直播流"
+}
+
+### 直播流地址管理 列表
+GET {{ip}}/admin/live-stream/list
+
+
+###  直播流地址管理 修改
+POST {{ip}}/admin/live-stream/update
+Content-Type: application/json
+Authorization: {{token}}
+
+{
+  "liveId": 1,
+  "name": "陕西卫视",
+  "url": "http://stream1.com",
+  "desc": "陕西卫视高清直播流1"
+}
+
+### 直播流地址管理
+DELETE {{ip}}/admin/live-stream/delete/1
+Authorization: {{token}}