diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index 954dcc2..23c7754 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -20,12 +20,11 @@ - - - - - - + + com.alicp.jetcache + jetcache-starter-redis + 2.5.14 + org.nl diff --git a/nladmin-system/src/main/java/org/nl/AppRun.java b/nladmin-system/src/main/java/org/nl/AppRun.java index 6db3e94..768ea50 100644 --- a/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/nladmin-system/src/main/java/org/nl/AppRun.java @@ -1,5 +1,7 @@ package org.nl; +import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; +import com.alicp.jetcache.anno.config.EnableMethodCache; import io.swagger.annotations.Api; import org.nl.annotation.rest.AnonymousGetMapping; import org.nl.utils.SpringContextHolder; @@ -30,6 +32,8 @@ import org.springframework.web.bind.annotation.RestController; @ServletComponentScan @EnableTransactionManagement @EnableJpaAuditing(auditorAwareRef = "auditorAware") +@EnableMethodCache(basePackages = "org.nl") +@EnableCreateCacheAnnotation public class AppRun { public static void main(String[] args) { diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java new file mode 100644 index 0000000..1fe847c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java @@ -0,0 +1,69 @@ +package org.nl.modules.system.rest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.GridService; +import org.nl.modules.system.service.dto.GridDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 系统表格管理 + * @Date: 2022-08-01 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格管理") +@RequestMapping("/api/grid") +@Slf4j +public class GridController { + private final GridService gridService; + + @GetMapping + @Log("查询系统表格") + @ApiOperation("查询系统表格") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(gridService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增系统表格") + @ApiOperation("新增系统表格") + public ResponseEntity create(@Validated @RequestBody GridDto dto){ + log.info("dto:{}",dto); + gridService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改系统表格") + @ApiOperation("修改系统表格") + public ResponseEntity update(@Validated @RequestBody GridDto dto){ + gridService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除系统表格") + @ApiOperation("删除系统表格") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + gridService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/selectList") + @Log("下拉框获取表格数据") + @ApiOperation("下拉框获取表格数据") + public ResponseEntity getGridList(){ + return new ResponseEntity<>(gridService.getGridList(),HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java new file mode 100644 index 0000000..9913847 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java @@ -0,0 +1,89 @@ +package org.nl.modules.system.rest; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.GridFieldService; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 系统表格字段管理 + * @Date: 2022-08-01 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格字段管理") +@RequestMapping("/api/gridField") +@Slf4j +public class GridFieldController { + private final GridFieldService gridFieldService; + + @GetMapping + @Log("查询系统表格") + @ApiOperation("查询系统表格") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(gridFieldService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("单个新增表格字段") + @ApiOperation("单个新增表格字段") + public ResponseEntity create(@Validated @RequestBody GridFieldDto dto){ + log.info("dto:{}",dto); + gridFieldService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改表格字段") + @ApiOperation("修改表格字段") + public ResponseEntity update(@Validated @RequestBody GridFieldDto dto){ + gridFieldService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除表格字段") + @ApiOperation("删除表格字段") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + gridFieldService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/batchAdd") + @Log("批量新增表格字段") + @ApiOperation("批量新增表格字段") + public ResponseEntity batchAdd(@RequestBody JSONObject json){ +// log.info("json{}",json); + gridFieldService.batchAdd(json); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/getGridFields") + @Log("根据gridId获取所有字段") + @ApiOperation("根据gridId获取所有字段") + public ResponseEntity getGridFieldsById(@RequestBody String id){ + log.info("dto:{}",id); + return new ResponseEntity<>(gridFieldService.getGridFieldsById(id),HttpStatus.CREATED); + } + + @PostMapping("/getGridFieldsByCode") + @Log("根据gridCode获取所有字段") + @ApiOperation("根据gridCode获取所有字段") + public ResponseEntity getGridFieldsByCode(@RequestBody String grid_code){ + log.info("dto:{}",grid_code); + return new ResponseEntity<>(gridFieldService.getGridFieldsByCode(grid_code),HttpStatus.CREATED); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java new file mode 100644 index 0000000..1b4ca8c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java @@ -0,0 +1,57 @@ +package org.nl.modules.system.rest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.RedisService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: lyd + * @Description: Redis监控管理 + * @Date: 2022-08-04 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格管理") +@RequestMapping("/api/redis") +@Slf4j +public class RedisController { + + private final RedisService redisService; + + @GetMapping("/get-monitor-info") + @Log("查询redis的信息") + @ApiOperation("查询redis的信息") + public ResponseEntity getRedisMonitorInfo() { + return new ResponseEntity<>(redisService.getRedisMonitorInfo(),HttpStatus.OK); + } + + @GetMapping("/get-key-define-list") + @Log("获得 Redis Key 模板列表") + @ApiOperation("获得 Redis Key 模板列表") + public ResponseEntity getKeyDefineList() { + return new ResponseEntity<>(redisService.getKeyDefineList(),HttpStatus.OK); + } + + @GetMapping("/get-key-value-list") + @Log("获得 Redis Key Value列表") + @ApiOperation("获得 Redis Key Value列表") + public ResponseEntity getKeyValueList() { + return new ResponseEntity<>( redisService.getKeyValueList(),HttpStatus.OK); + } + + @Log("根据key删除Redis数据") + @ApiOperation("根据key删除Redis数据") + @DeleteMapping + public ResponseEntity deleteByKey(@RequestBody String[] ids) { + redisService.deleteByKey(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java new file mode 100644 index 0000000..8977317 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java @@ -0,0 +1,68 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格字段服务 + * @Date: 2022-08-01 + */ +public interface GridFieldService { + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * @param dto + */ + void create(GridFieldDto dto); + + /** + * 根据ID查询 + * @param id ID + * @return Param + */ + GridFieldDto findById(String id); + + /** + * 编辑 + * @param dto + */ + void update(GridFieldDto dto); + + /** + * 批量删除 + * @param ids + */ + void deleteAll(String[] ids); + + /** + * 批量添加数据 + * @param json + */ + void batchAdd(JSONObject json); + + /** + * 根据grid_id获取所有字段信息 + * @param id + * @return + */ + JSONArray getGridFieldsById(String id); + + /** + * 根据grid_code获取所有字段信息 + * @param grid_code + * @return + */ + JSONArray getGridFieldsByCode(String grid_code); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java new file mode 100644 index 0000000..312457b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java @@ -0,0 +1,53 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import org.nl.modules.system.service.dto.GridDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格服务接口 + * @Date: 2022-08-01 + */ +public interface GridService { + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * @param dto + */ + void create(GridDto dto); + + /** + * 根据ID查询 + * @param id ID + * @return Param + */ + GridDto findById(String id); + + /** + * 编辑 + * @param dto + */ + void update(GridDto dto); + + /** + * 批量删除 + * @param ids + */ + void deleteAll(String[] ids); + + /** + * 下拉选择表格 + * @return + */ + JSONArray getGridList(); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java new file mode 100644 index 0000000..e12c48b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java @@ -0,0 +1,35 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: lyd + * @Description: Redis监控的服务 + * @Date: 2022-08-04 + */ +public interface RedisService { + /** + * 获取redis的信息 + * @return + */ + JSONObject getRedisMonitorInfo(); + + /** + * 获得 Redis Key 模板列表 + * @return + */ + JSONObject getKeyDefineList(); + + /** + * 获取所有的键值信息 + * @return + */ + JSONArray getKeyValueList(); + + /** + * 删除redis缓存数据 + * @param ids + */ + void deleteByKey(String[] ids); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java new file mode 100644 index 0000000..39d9c13 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java @@ -0,0 +1,39 @@ +package org.nl.modules.system.service.convert; + +import cn.hutool.core.util.StrUtil; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.nl.modules.system.service.vo.RedisKeyDefineRespVO; +import org.nl.modules.system.service.vo.RedisMonitorRespVO; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: redis---Spring Boot 对象转换 MapStruct + * @Date: 2022-08-04 + */ +@Mapper +public interface RedisConvert { + + RedisConvert INSTANCE = Mappers.getMapper(RedisConvert.class); + + default RedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { + RedisMonitorRespVO respVO = RedisMonitorRespVO.builder().info(info).dbSize(dbSize) + .commandStats(new ArrayList<>(commandStats.size())).build(); + commandStats.forEach((key, value) -> { + respVO.getCommandStats().add(RedisMonitorRespVO.CommandStat.builder() + .command(StrUtil.subAfter((String) key, "cmdstat_", false)) + .calls(Integer.valueOf(StrUtil.subBetween((String) value, "calls=", ","))) + .usec(Long.valueOf(StrUtil.subBetween((String) value, "usec=", ","))) + .build()); + }); + return respVO; + } + + List convertList(List list); + +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java new file mode 100644 index 0000000..14ccd52 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java @@ -0,0 +1,61 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 系统表格dto + * @Date: 2022-08-01 + */ +@Data +public class GridDto { + /** + * 标识id + */ + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + /** + * 是否激活 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建人 + */ + private String create_by; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 更新人 + */ + private String update_by; + + /** + * 更新时间 + */ + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java new file mode 100644 index 0000000..2429f09 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java @@ -0,0 +1,96 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 表格字段dto + * @Date: 2022-08-01 + */ +@Data +public class GridFieldDto { + /** + * 标识id + */ + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 宽度 + */ + private Integer width; + + /** + * 对齐 + */ + private String align; + + /** + * 格式 + */ + private String format; + + /** + * 备注 + */ + private String remark; + + /** + * 排序 + */ + private Integer sort_num; + + /** + * 是否激活 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 是否隐藏 + */ + private String is_hidden; + + /** + * 创建人 + */ + private String create_by; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 更新人 + */ + private String update_by; + + /** + * 更新时间 + */ + private String update_time; + + /** + * 表格id + */ + private String grid_id; + + /** + * 表格名称 + */ + private String grid_name; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java new file mode 100644 index 0000000..cb6f031 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java @@ -0,0 +1,112 @@ +package org.nl.modules.system.service.entity; + +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: Redis Key 定义类 + * @Date: 2022-08-04 + */ +@Data +public class RedisKeyDefine { + + @Getter + @AllArgsConstructor + public enum KeyTypeEnum { + + STRING("String"), + LIST("List"), + HASH("Hash"), + SET("Set"), + ZSET("Sorted Set"), + STREAM("Stream"), + PUBSUB("Pub/Sub"); + + /** + * 类型 + */ + @JsonValue + private final String type; + + } + + @Getter + @AllArgsConstructor + public enum TimeoutTypeEnum { + + FOREVER(1), // 永不超时 + DYNAMIC(2), // 动态超时 + FIXED(3); // 固定超时 + + /** + * 类型 + */ + @JsonValue + private final Integer type; + + } + + /** + * Key 模板 + */ + private final String keyTemplate; + /** + * Key 类型的枚举 + */ + private final KeyTypeEnum keyType; + /** + * Value 类型 + * + * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 + */ + private final Class valueType; + /** + * 超时类型 + */ + private final TimeoutTypeEnum timeoutType; + /** + * 过期时间 + */ + private final Duration timeout; + /** + * 备注 + */ + private final String memo; + + private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, + TimeoutTypeEnum timeoutType, Duration timeout) { + this.memo = memo; + this.keyTemplate = keyTemplate; + this.keyType = keyType; + this.valueType = valueType; + this.timeout = timeout; + this.timeoutType = timeoutType; + // 添加注册表 + RedisKeyRegistry.add(this); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { + this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { + this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO); + } + + /** + * 格式化 Key + * + * 注意,内部采用 {@link String#format(String, Object...)} 实现 + * + * @param args 格式化的参数 + * @return Key + */ + public String formatKey(Object... args) { + return String.format(keyTemplate, args); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java new file mode 100644 index 0000000..8b5bb26 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java @@ -0,0 +1,28 @@ +package org.nl.modules.system.service.entity; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: {@link RedisKeyDefine} 注册表 + * @Date: 2022-08-04 + */ +public class RedisKeyRegistry { + /** + * Redis RedisKeyDefine 数组 + */ + private static final List defines = new ArrayList<>(); + + public static void add(RedisKeyDefine define) { + defines.add(define); + } + + public static List list() { + return defines; + } + + public static int size() { + return defines.size(); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java new file mode 100644 index 0000000..1cd9a9e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java @@ -0,0 +1,139 @@ +package org.nl.modules.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.service.GridFieldService; +import org.nl.modules.system.service.dto.GridDto; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.nl.utils.SecurityUtils; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.ResultBean; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格字段实现类 + * @Date: 2022-08-01 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class GridFieldServiceImpl implements GridFieldService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + String grid_name = (String) whereJson.get("name"); + map.put("flag","1"); + if (StrUtil.isNotEmpty(grid_name)){ + map.put("grid_name","%" + grid_name + "%"); + } + JSONObject json = WQL.getWO("GRIDFIELD").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "sys_grid_field.sort_num"); + return json; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(GridFieldDto dto) { + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + + dto.setId(IdUtil.simpleUUID()); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.insert(json); + } + + @Override + public GridFieldDto findById(String id) { + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = wo.query("id ='" + id + "' AND is_delete = '0'").uniqueResult(0); + final GridFieldDto obj = json.toJavaObject(GridFieldDto.class);; + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(GridFieldDto dto) { + GridFieldDto entity = this.findById(dto.getId()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_by(currentUsername); + + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + for (String id : ids) { + GridFieldDto gridFieldDto = this.findById(id); + gridFieldDto.setIs_delete("1"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(gridFieldDto)); + wo.update(json); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchAdd(JSONObject json) { + String grid_id = json.getString("grid_id"); + JSONArray fieldDatas = json.getJSONArray("gridFieldData"); + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + String currentUsername = SecurityUtils.getCurrentUsername(); + // 先删除原先所有的数据 + wo.delete("grid_id = '" + grid_id + "'"); + // 然后添加 + for (int i=0; i queryAll(Map whereJson, Pageable page) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + String where = "1=1"; + if (whereJson.get("name") != null) { + where = "name like ('%" + whereJson.get("name") + "%')"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), where +" AND is_delete = '0'", "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(GridDto dto) { + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + + dto.setId(IdUtil.simpleUUID()); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.insert(json); + } + + @Override + public GridDto findById(String id) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = wo.query("id ='" + id + "' AND is_delete = '0'").uniqueResult(0); + final GridDto obj = json.toJavaObject(GridDto.class);; + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(GridDto dto) { + GridDto entity = this.findById(dto.getId()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_by(currentUsername); + + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + WQLObject wqlObject = WQLObject.getWQLObject("sys_grid_field"); + // 删除明细 + for (String grid_id : ids) { + wqlObject.delete("grid_id = '" + grid_id + "'"); + wo.delete("id = '" + grid_id + "'"); + } + } + + @Override + public JSONArray getGridList() { + JSONArray arr = WQLObject.getWQLObject("sys_grid").query("is_delete= '0' AND is_active= '1'").getResultJSONArray(0); + JSONArray result = new JSONArray(); + for (int i = 0; i < arr.size(); i++) { + JSONObject obj = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("grid_id", obj.getString("id")); + json.put("grid_code", obj.getString("code")); + json.put("grid_name", obj.getString("name")); + result.add(json); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java new file mode 100644 index 0000000..189c8d1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java @@ -0,0 +1,84 @@ +package org.nl.modules.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.system.service.RedisService; +import org.nl.modules.system.service.convert.RedisConvert; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.nl.modules.system.service.entity.RedisKeyRegistry; +//import org.nl.modules.system.service.vo.IdempotentRedisDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.DataType; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * @Author: lyd + * @Description: Redis监控的实现类 + * @Date: 2022-08-04 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class RedisServiceImpl implements RedisService { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public JSONObject getRedisMonitorInfo() { + // 获得 Redis 统计信息 + Properties info = stringRedisTemplate.execute((RedisCallback) RedisServerCommands::info); + Long dbSize = stringRedisTemplate.execute(RedisServerCommands::dbSize); + Properties commandStats = stringRedisTemplate.execute(( + RedisCallback) connection -> connection.info("commandstats")); + assert commandStats != null; // 断言,避免警告 +// System.out.println("info:" + info + " dbsize:" + dbSize + " com:" + commandStats); + // 拼接结果返回 + // 转成实体 + JSONObject json = new JSONObject(); + json.put("info", RedisConvert.INSTANCE.build(info, dbSize, commandStats)); + return json; + } + + @Override + public JSONObject getKeyDefineList() { + List keyDefines = RedisKeyRegistry.list(); + JSONObject json = new JSONObject(); + System.out.println(keyDefines); + json.put("info", RedisConvert.INSTANCE.convertList(keyDefines)); + return json; + } + + @Override + public JSONArray getKeyValueList() { + JSONArray result = new JSONArray(); + Set keys = stringRedisTemplate.keys("*"); + // 迭代 + Iterator it = keys.iterator(); + while ( it.hasNext() ) { + String key = it.next(); + JSONObject redis = new JSONObject(); + DataType dataType = stringRedisTemplate.type(key); // 数据类型 + String s = stringRedisTemplate.opsForValue().get(key); // 获取值 + Long expire = stringRedisTemplate.getExpire(key); // 获取剩余时间 + redis.put("dataType", dataType); + redis.put("key", key); + redis.put("value", s); + redis.put("expire", expire); + result.add(redis); + } + return result; + } + + @Override + public void deleteByKey(String[] ids) { + stringRedisTemplate.delete(Arrays.asList(ids)); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java new file mode 100644 index 0000000..41ea9c5 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java @@ -0,0 +1,35 @@ +package org.nl.modules.system.service.vo; + +import lombok.AllArgsConstructor; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.concurrent.TimeUnit; + +import static org.nl.modules.system.service.entity.RedisKeyDefine.KeyTypeEnum.STRING; + +/** + * @Author: lyd + * @Description: 幂等操作 + * @Date: 2022-08-04 + */ +//@AllArgsConstructor +//public class IdempotentRedisDAO { +// +// private static final RedisKeyDefine IDEMPOTENT = new RedisKeyDefine("幂等操作", +// "idempotent:%s", // 参数为 uuid +// STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); +// +// private final StringRedisTemplate redisTemplate; +// +// public Boolean setIfAbsent(String key, long timeout, TimeUnit timeUnit) { +// String redisKey = formatKey(key); +// return redisTemplate.opsForValue().setIfAbsent(redisKey, "", timeout, timeUnit); +// } +// +// private static String formatKey(String key) { +// return String.format(IDEMPOTENT.getKeyTemplate(), key); +// } +// +//} + diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java new file mode 100644 index 0000000..cfc2e34 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java @@ -0,0 +1,39 @@ +package org.nl.modules.system.service.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import org.nl.modules.system.service.entity.RedisKeyDefine; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis Key 信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis Key 信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisKeyDefineRespVO { + @ApiModelProperty(value = "Key 模板", required = true, example = "login_user:%s") + private String keyTemplate; + + @ApiModelProperty(value = "Key 类型的枚举", required = true, example = "String") + private RedisKeyDefine.KeyTypeEnum keyType; + + @ApiModelProperty(value = "Value 类型", required = true, example = "java.lang.String") + private Class valueType; + + @ApiModelProperty(value = "超时类型", required = true, example = "1") + private RedisKeyDefine.TimeoutTypeEnum timeoutType; + + @ApiModelProperty(value = "过期时间,单位:毫秒", required = true, example = "1024") + private Duration timeout; + + @ApiModelProperty(value = "备注", required = true, example = "啦啦啦啦~") + private String memo; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java new file mode 100644 index 0000000..53c2625 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java @@ -0,0 +1,47 @@ +package org.nl.modules.system.service.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis 监控信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis 监控信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisMonitorRespVO { + @ApiModelProperty(value = "Redis info 指令结果", required = true, notes = "具体字段,查看 Redis 文档") + private Properties info; + + @ApiModelProperty(value = "Redis key 数量", required = true, example = "1024") + private Long dbSize; + + @ApiModelProperty(value = "CommandStat 数组", required = true) + private List commandStats; + + @ApiModel("Redis 命令统计结果") + @Data + @Builder + @AllArgsConstructor + public static class CommandStat { + + @ApiModelProperty(value = "Redis 命令", required = true, example = "get") + private String command; + + @ApiModelProperty(value = "调用次数", required = true, example = "1024") + private Integer calls; + + @ApiModelProperty(value = "消耗 CPU 秒数", required = true, example = "666") + private Long usec; + + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java new file mode 100644 index 0000000..7681d11 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java @@ -0,0 +1,21 @@ +package org.nl.modules.system.service.vo; + +import org.nl.config.RedisConfig; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; + +/** + * @Author: lyd + * @Description: 测试的Redistemplate模板 + * @Date: 2022-08-04 + */ +//@Configuration(proxyBeanMethods = false) +//@AutoConfigureAfter(RedisConfig.class) +//public class YudaoIdempotentConfiguration { +// @Bean +// public IdempotentRedisDAO idempotentRedisDAO(StringRedisTemplate stringRedisTemplate) { +// return new IdempotentRedisDAO(stringRedisTemplate); +// } +//} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql b/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql new file mode 100644 index 0000000..3de1a3f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql @@ -0,0 +1,56 @@ +[交易说明] + 交易名: 表格数据 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.grid_name TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + IF 输入.flag = "1" + PAGEQUERY + SELECT + sys_grid_field.*, sys_grid.name as grid_name + FROM + sys_grid_field + LEFT JOIN sys_grid ON sys_grid_field.grid_id = sys_grid.id + WHERE + sys_grid_field.is_delete = '0' AND sys_grid.is_delete = '0' + OPTION 输入.grid_name <> "" + sys_grid.name LIKE 输入.grid_name + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-ui/package.json b/nladmin-ui/package.json index 22e8b77..bda4ee1 100644 --- a/nladmin-ui/package.json +++ b/nladmin-ui/package.json @@ -38,7 +38,7 @@ "@riophae/vue-treeselect": "0.4.0", "af-table-column": "^1.0.3", "axios": "0.18.1", - "clipboard": "2.0.4", + "clipboard": "^2.0.4", "codemirror": "^5.49.2", "connect": "3.6.6", "echarts": "^4.2.1", @@ -62,6 +62,7 @@ "qs": "^6.9.1", "screenfull": "4.2.0", "sortablejs": "1.8.4", + "throttle-debounce": "^5.0.0", "vue": "2.6.10", "vue-color": "^2.8.1", "vue-count-to": "1.0.13", @@ -74,7 +75,7 @@ "vue-router": "3.0.2", "vue-seamless-scroll": "^1.1.23", "vue-splitpane": "1.0.4", - "vuedraggable": "2.20.0", + "vuedraggable": "^2.24.3", "vuex": "3.1.0", "vxe-table": "^3.3.10", "wangeditor": "^3.1.1", diff --git a/nladmin-ui/src/api/system/grid.js b/nladmin-ui/src/api/system/grid.js new file mode 100644 index 0000000..02857d4 --- /dev/null +++ b/nladmin-ui/src/api/system/grid.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/grid', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/grid/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/grid', + method: 'put', + data + }) +} +export function selectList() { + return request({ + url: 'api/grid/selectList', + method: 'get' + }) +} + +export default { add, edit, del, selectList } diff --git a/nladmin-ui/src/api/system/gridField.js b/nladmin-ui/src/api/system/gridField.js new file mode 100644 index 0000000..a207188 --- /dev/null +++ b/nladmin-ui/src/api/system/gridField.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/gridField', + method: 'post', + data + }) +} +export function batchAdd(json) { // use + return request({ + url: 'api/gridField/batchAdd', + method: 'post', + data: json + }) +} + +export function del(ids) { + return request({ + url: 'api/gridField/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/gridField', + method: 'put', + data + }) +} + +export function getGridFieldsById(id) { // use + return request({ + url: 'api/gridField/getGridFields', + method: 'post', + data: id + }) +} + +export function getGridFieldsByCode(grid_code) { // use + return request({ + url: 'api/gridField/getGridFieldsByCode', + method: 'post', + data: grid_code + }) +} + +export default { add, edit, del, batchAdd, getGridFieldsById, getGridFieldsByCode } diff --git a/nladmin-ui/src/api/system/redis.js b/nladmin-ui/src/api/system/redis.js new file mode 100644 index 0000000..71261ba --- /dev/null +++ b/nladmin-ui/src/api/system/redis.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/api/redis/get-monitor-info', + method: 'get' + }) +} + +// 获取模块 +export function getKeyDefineList() { + return request({ + url: '/api/redis/get-key-define-list', + method: 'get' + }) +} + +// 获取模块 +export function getKeyValueList() { + return request({ + url: '/api/redis/get-key-value-list', + method: 'get' + }) +} + +export function batch(ids) { + return request({ + url: 'api/redis/', + method: 'delete', + data: ids + }) +} + +export default { getCache, getKeyDefineList, batch } diff --git a/nladmin-ui/src/assets/icons/svg/button.svg b/nladmin-ui/src/assets/icons/svg/button.svg new file mode 100644 index 0000000..904fddc --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/cascader.svg b/nladmin-ui/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000..e256024 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/checkbox.svg b/nladmin-ui/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000..013fd3a --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/color.svg b/nladmin-ui/src/assets/icons/svg/color.svg new file mode 100644 index 0000000..44a81aa --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/component.svg b/nladmin-ui/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..29c3458 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/date-range.svg b/nladmin-ui/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000..fda571e --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/input.svg b/nladmin-ui/src/assets/icons/svg/input.svg new file mode 100644 index 0000000..ab91381 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/number.svg b/nladmin-ui/src/assets/icons/svg/number.svg new file mode 100644 index 0000000..ad5ce9a --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/radio.svg b/nladmin-ui/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000..0cde345 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/rate.svg b/nladmin-ui/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000..aa3b14d --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/rich-text.svg b/nladmin-ui/src/assets/icons/svg/rich-text.svg new file mode 100644 index 0000000..76c45bf --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/rich-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/row.svg b/nladmin-ui/src/assets/icons/svg/row.svg new file mode 100644 index 0000000..0780992 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/select.svg b/nladmin-ui/src/assets/icons/svg/select.svg new file mode 100644 index 0000000..d628382 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/slider.svg b/nladmin-ui/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000..fbe4f39 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/switch.svg b/nladmin-ui/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000..0ba61e3 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/table.svg b/nladmin-ui/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..e806845 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/textarea.svg b/nladmin-ui/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000..2709f29 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/time-range.svg b/nladmin-ui/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000..13c1202 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/time.svg b/nladmin-ui/src/assets/icons/svg/time.svg new file mode 100644 index 0000000..b376e32 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/upload.svg b/nladmin-ui/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000..bae49c0 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/components/TopNav/index.vue b/nladmin-ui/src/components/TopNav/index.vue index f1457e5..c3b10a2 100644 --- a/nladmin-ui/src/components/TopNav/index.vue +++ b/nladmin-ui/src/components/TopNav/index.vue @@ -2,7 +2,7 @@