Browse Source

1、自动生成代码

master
Aug 1 year ago
parent
commit
ffee498a51
140 changed files with 10786 additions and 0 deletions
  1. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/controller/CarrentAreaController.java
  2. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/entity/CarrentArea.java
  3. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/mapper/CarrentAreaMapper.java
  4. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/mapper/xml/CarrentAreaMapper.xml
  5. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/service/ICarrentAreaService.java
  6. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/service/impl/CarrentAreaServiceImpl.java
  7. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/CarrentAreaList.vue
  8. +104
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaForm.vue
  9. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaModal.Style#Drawer.vue
  10. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaModal.vue
  11. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentArea.api.ts
  12. +23
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentArea.data.ts
  13. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentAreaList.vue
  14. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/components/CarrentAreaModal.vue
  15. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/controller/CarrentBannerController.java
  16. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/entity/CarrentBanner.java
  17. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/mapper/CarrentBannerMapper.java
  18. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/mapper/xml/CarrentBannerMapper.xml
  19. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/service/ICarrentBannerService.java
  20. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/service/impl/CarrentBannerServiceImpl.java
  21. +178
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/CarrentBannerList.vue
  22. +109
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerForm.vue
  23. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerModal.Style#Drawer.vue
  24. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerModal.vue
  25. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBanner.api.ts
  26. +36
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBanner.data.ts
  27. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBannerList.vue
  28. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/components/CarrentBannerModal.vue
  29. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/controller/CarrentCarController.java
  30. +98
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/entity/CarrentCar.java
  31. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/mapper/CarrentCarMapper.java
  32. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/mapper/xml/CarrentCarMapper.xml
  33. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/service/ICarrentCarService.java
  34. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/service/impl/CarrentCarServiceImpl.java
  35. +237
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/CarrentCarList.vue
  36. +159
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarForm.vue
  37. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarModal.Style#Drawer.vue
  38. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarModal.vue
  39. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCar.api.ts
  40. +133
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCar.data.ts
  41. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCarList.vue
  42. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/components/CarrentCarModal.vue
  43. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/controller/CarrentCategoryController.java
  44. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/entity/CarrentCategory.java
  45. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/mapper/CarrentCategoryMapper.java
  46. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/mapper/xml/CarrentCategoryMapper.xml
  47. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/service/ICarrentCategoryService.java
  48. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/service/impl/CarrentCategoryServiceImpl.java
  49. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/CarrentCategoryList.vue
  50. +104
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryForm.vue
  51. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryModal.Style#Drawer.vue
  52. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryModal.vue
  53. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategory.api.ts
  54. +23
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategory.data.ts
  55. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategoryList.vue
  56. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/components/CarrentCategoryModal.vue
  57. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/controller/CarrentCompanyController.java
  58. +79
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/entity/CarrentCompany.java
  59. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/mapper/CarrentCompanyMapper.java
  60. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/mapper/xml/CarrentCompanyMapper.xml
  61. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/service/ICarrentCompanyService.java
  62. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/service/impl/CarrentCompanyServiceImpl.java
  63. +209
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/CarrentCompanyList.vue
  64. +134
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyForm.vue
  65. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyModal.Style#Drawer.vue
  66. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyModal.vue
  67. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompany.api.ts
  68. +89
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompany.data.ts
  69. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompanyList.vue
  70. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/components/CarrentCompanyModal.vue
  71. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/controller/CarrentComponentController.java
  72. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/entity/CarrentComponent.java
  73. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/mapper/CarrentComponentMapper.java
  74. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/mapper/xml/CarrentComponentMapper.xml
  75. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/service/ICarrentComponentService.java
  76. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/service/impl/CarrentComponentServiceImpl.java
  77. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/CarrentComponentList.vue
  78. +104
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentForm.vue
  79. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentModal.Style#Drawer.vue
  80. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentModal.vue
  81. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponent.api.ts
  82. +23
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponent.data.ts
  83. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponentList.vue
  84. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/components/CarrentComponentModal.vue
  85. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/controller/CarrentMileageController.java
  86. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/entity/CarrentMileage.java
  87. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/mapper/CarrentMileageMapper.java
  88. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/mapper/xml/CarrentMileageMapper.xml
  89. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/service/ICarrentMileageService.java
  90. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/service/impl/CarrentMileageServiceImpl.java
  91. +177
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/CarrentMileageList.vue
  92. +109
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageForm.vue
  93. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageModal.Style#Drawer.vue
  94. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageModal.vue
  95. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileage.api.ts
  96. +33
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileage.data.ts
  97. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileageList.vue
  98. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/components/CarrentMileageModal.vue
  99. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentNews/controller/CarrentNewsController.java
  100. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentNews/entity/CarrentNews.java

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/controller/CarrentAreaController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentArea.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentArea.entity.CarrentArea;
import org.jeecg.modules.carrentArea.service.ICarrentAreaService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 区域表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="区域表")
@RestController
@RequestMapping("/carrentArea/carrentArea")
@Slf4j
public class CarrentAreaController extends JeecgController<CarrentArea, ICarrentAreaService> {
@Autowired
private ICarrentAreaService carrentAreaService;
/**
* 分页列表查询
*
* @param carrentArea
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "区域表-分页列表查询")
@ApiOperation(value="区域表-分页列表查询", notes="区域表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentArea>> queryPageList(CarrentArea carrentArea,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentArea> queryWrapper = QueryGenerator.initQueryWrapper(carrentArea, req.getParameterMap());
Page<CarrentArea> page = new Page<CarrentArea>(pageNo, pageSize);
IPage<CarrentArea> pageList = carrentAreaService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentArea
* @return
*/
@AutoLog(value = "区域表-添加")
@ApiOperation(value="区域表-添加", notes="区域表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentArea carrentArea) {
carrentAreaService.save(carrentArea);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentArea
* @return
*/
@AutoLog(value = "区域表-编辑")
@ApiOperation(value="区域表-编辑", notes="区域表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentArea carrentArea) {
carrentAreaService.updateById(carrentArea);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "区域表-通过id删除")
@ApiOperation(value="区域表-通过id删除", notes="区域表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentAreaService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "区域表-批量删除")
@ApiOperation(value="区域表-批量删除", notes="区域表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentAreaService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "区域表-通过id查询")
@ApiOperation(value="区域表-通过id查询", notes="区域表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentArea> queryById(@RequestParam(name="id",required=true) String id) {
CarrentArea carrentArea = carrentAreaService.getById(id);
if(carrentArea==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentArea);
}
/**
* 导出excel
*
* @param request
* @param carrentArea
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentArea carrentArea) {
return super.exportXls(request, carrentArea, CarrentArea.class, "区域表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentArea.class);
}
}

+ 54
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/entity/CarrentArea.java View File

@ -0,0 +1,54 @@
package org.jeecg.modules.carrentArea.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 区域表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_area")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_area对象", description="区域表")
public class CarrentArea implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属区域*/
@Excel(name = "所属区域", width = 15)
@ApiModelProperty(value = "所属区域")
private java.lang.String area;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/mapper/CarrentAreaMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentArea.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentArea.entity.CarrentArea;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 区域表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentAreaMapper extends BaseMapper<CarrentArea> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/mapper/xml/CarrentAreaMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentArea.mapper.CarrentAreaMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/service/ICarrentAreaService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentArea.service;
import org.jeecg.modules.carrentArea.entity.CarrentArea;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 区域表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentAreaService extends IService<CarrentArea> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/service/impl/CarrentAreaServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentArea.service.impl;
import org.jeecg.modules.carrentArea.entity.CarrentArea;
import org.jeecg.modules.carrentArea.mapper.CarrentAreaMapper;
import org.jeecg.modules.carrentArea.service.ICarrentAreaService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 区域表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentAreaServiceImpl extends ServiceImpl<CarrentAreaMapper, CarrentArea> implements ICarrentAreaService {
}

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/CarrentAreaList.vue View File

@ -0,0 +1,171 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('区域表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-area-modal ref="modalForm" @ok="modalFormOk"></carrent-area-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentAreaModal from './modules/CarrentAreaModal'
export default {
name: 'CarrentAreaList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentAreaModal
},
data () {
return {
description: '区域表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'所属区域',
align:"center",
dataIndex: 'area'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentArea/carrentArea/list",
delete: "/carrentArea/carrentArea/delete",
deleteBatch: "/carrentArea/carrentArea/deleteBatch",
exportXlsUrl: "/carrentArea/carrentArea/exportXls",
importExcelUrl: "carrentArea/carrentArea/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'area',text:'所属区域',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 104
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaForm.vue View File

@ -0,0 +1,104 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="所属区域" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="area">
<a-input v-model="model.area" placeholder="请输入所属区域" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentAreaForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentArea/carrentArea/add",
edit: "/carrentArea/carrentArea/edit",
queryById: "/carrentArea/carrentArea/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-area-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-area-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentAreaForm from './CarrentAreaForm'
export default {
name: 'CarrentAreaModal',
components: {
CarrentAreaForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue/modules/CarrentAreaModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-area-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-area-form>
</j-modal>
</template>
<script>
import CarrentAreaForm from './CarrentAreaForm'
export default {
name: 'CarrentAreaModal',
components: {
CarrentAreaForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentArea.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentArea/carrentArea/list',
save='/carrentArea/carrentArea/add',
edit='/carrentArea/carrentArea/edit',
deleteOne = '/carrentArea/carrentArea/delete',
deleteBatch = '/carrentArea/carrentArea/deleteBatch',
importExcel = '/carrentArea/carrentArea/importExcel',
exportXls = '/carrentArea/carrentArea/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 23
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentArea.data.ts View File

@ -0,0 +1,23 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '所属区域',
align:"center",
dataIndex: 'area'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '所属区域',
field: 'area',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/CarrentAreaList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentAreaModal @register="registerModal" @success="handleSuccess"></CarrentAreaModal>
</div>
</template>
<script lang="ts" name="carrentArea-carrentArea" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentAreaModal from './components/CarrentAreaModal.vue'
import {columns, searchFormSchema} from './carrentArea.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentArea.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '区域表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"区域表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentArea/vue3/components/CarrentAreaModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentArea.data';
import {saveOrUpdate} from '../carrentArea.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/controller/CarrentBannerController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentBanner.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentBanner.entity.CarrentBanner;
import org.jeecg.modules.carrentBanner.service.ICarrentBannerService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 轮播图表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="轮播图表")
@RestController
@RequestMapping("/carrentBanner/carrentBanner")
@Slf4j
public class CarrentBannerController extends JeecgController<CarrentBanner, ICarrentBannerService> {
@Autowired
private ICarrentBannerService carrentBannerService;
/**
* 分页列表查询
*
* @param carrentBanner
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "轮播图表-分页列表查询")
@ApiOperation(value="轮播图表-分页列表查询", notes="轮播图表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentBanner>> queryPageList(CarrentBanner carrentBanner,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentBanner> queryWrapper = QueryGenerator.initQueryWrapper(carrentBanner, req.getParameterMap());
Page<CarrentBanner> page = new Page<CarrentBanner>(pageNo, pageSize);
IPage<CarrentBanner> pageList = carrentBannerService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentBanner
* @return
*/
@AutoLog(value = "轮播图表-添加")
@ApiOperation(value="轮播图表-添加", notes="轮播图表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentBanner carrentBanner) {
carrentBannerService.save(carrentBanner);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentBanner
* @return
*/
@AutoLog(value = "轮播图表-编辑")
@ApiOperation(value="轮播图表-编辑", notes="轮播图表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentBanner carrentBanner) {
carrentBannerService.updateById(carrentBanner);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "轮播图表-通过id删除")
@ApiOperation(value="轮播图表-通过id删除", notes="轮播图表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentBannerService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "轮播图表-批量删除")
@ApiOperation(value="轮播图表-批量删除", notes="轮播图表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentBannerService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "轮播图表-通过id查询")
@ApiOperation(value="轮播图表-通过id查询", notes="轮播图表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentBanner> queryById(@RequestParam(name="id",required=true) String id) {
CarrentBanner carrentBanner = carrentBannerService.getById(id);
if(carrentBanner==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentBanner);
}
/**
* 导出excel
*
* @param request
* @param carrentBanner
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentBanner carrentBanner) {
return super.exportXls(request, carrentBanner, CarrentBanner.class, "轮播图表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentBanner.class);
}
}

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/entity/CarrentBanner.java View File

@ -0,0 +1,58 @@
package org.jeecg.modules.carrentBanner.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 轮播图表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_banner")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_banner对象", description="轮播图表")
public class CarrentBanner implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**图片名称*/
@Excel(name = "图片名称", width = 15)
@ApiModelProperty(value = "图片名称")
private java.lang.String name;
/**图片内容*/
@Excel(name = "图片内容", width = 15)
@ApiModelProperty(value = "图片内容")
private java.lang.String image;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/mapper/CarrentBannerMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentBanner.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentBanner.entity.CarrentBanner;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 轮播图表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentBannerMapper extends BaseMapper<CarrentBanner> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/mapper/xml/CarrentBannerMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentBanner.mapper.CarrentBannerMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/service/ICarrentBannerService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentBanner.service;
import org.jeecg.modules.carrentBanner.entity.CarrentBanner;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 轮播图表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentBannerService extends IService<CarrentBanner> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/service/impl/CarrentBannerServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentBanner.service.impl;
import org.jeecg.modules.carrentBanner.entity.CarrentBanner;
import org.jeecg.modules.carrentBanner.mapper.CarrentBannerMapper;
import org.jeecg.modules.carrentBanner.service.ICarrentBannerService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 轮播图表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentBannerServiceImpl extends ServiceImpl<CarrentBannerMapper, CarrentBanner> implements ICarrentBannerService {
}

+ 178
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/CarrentBannerList.vue View File

@ -0,0 +1,178 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('轮播图表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-banner-modal ref="modalForm" @ok="modalFormOk"></carrent-banner-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentBannerModal from './modules/CarrentBannerModal'
export default {
name: 'CarrentBannerList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentBannerModal
},
data () {
return {
description: '轮播图表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'图片名称',
align:"center",
dataIndex: 'name'
},
{
title:'图片内容',
align:"center",
dataIndex: 'image',
scopedSlots: {customRender: 'imgSlot'}
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentBanner/carrentBanner/list",
delete: "/carrentBanner/carrentBanner/delete",
deleteBatch: "/carrentBanner/carrentBanner/deleteBatch",
exportXlsUrl: "/carrentBanner/carrentBanner/exportXls",
importExcelUrl: "carrentBanner/carrentBanner/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'name',text:'图片名称',dictCode:''})
fieldList.push({type:'string',value:'image',text:'图片内容',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 109
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerForm.vue View File

@ -0,0 +1,109 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="图片名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
<a-input v-model="model.name" placeholder="请输入图片名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="图片内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="image">
<j-image-upload isMultiple v-model="model.image" ></j-image-upload>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentBannerForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentBanner/carrentBanner/add",
edit: "/carrentBanner/carrentBanner/edit",
queryById: "/carrentBanner/carrentBanner/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-banner-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-banner-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentBannerForm from './CarrentBannerForm'
export default {
name: 'CarrentBannerModal',
components: {
CarrentBannerForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue/modules/CarrentBannerModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-banner-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-banner-form>
</j-modal>
</template>
<script>
import CarrentBannerForm from './CarrentBannerForm'
export default {
name: 'CarrentBannerModal',
components: {
CarrentBannerForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBanner.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentBanner/carrentBanner/list',
save='/carrentBanner/carrentBanner/add',
edit='/carrentBanner/carrentBanner/edit',
deleteOne = '/carrentBanner/carrentBanner/delete',
deleteBatch = '/carrentBanner/carrentBanner/deleteBatch',
importExcel = '/carrentBanner/carrentBanner/importExcel',
exportXls = '/carrentBanner/carrentBanner/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 36
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBanner.data.ts View File

@ -0,0 +1,36 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '图片名称',
align:"center",
dataIndex: 'name'
},
{
title: '图片内容',
align:"center",
dataIndex: 'image',
customRender:render.renderAvatar,
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '图片名称',
field: 'name',
component: 'Input',
},
{
label: '图片内容',
field: 'image',
component: 'JImageUpload',
componentProps:{
},
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/CarrentBannerList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentBannerModal @register="registerModal" @success="handleSuccess"></CarrentBannerModal>
</div>
</template>
<script lang="ts" name="carrentBanner-carrentBanner" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentBannerModal from './components/CarrentBannerModal.vue'
import {columns, searchFormSchema} from './carrentBanner.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentBanner.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '轮播图表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"轮播图表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentBanner/vue3/components/CarrentBannerModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentBanner.data';
import {saveOrUpdate} from '../carrentBanner.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/controller/CarrentCarController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentCar.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentCar.entity.CarrentCar;
import org.jeecg.modules.carrentCar.service.ICarrentCarService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 车辆信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="车辆信息表")
@RestController
@RequestMapping("/carrentCar/carrentCar")
@Slf4j
public class CarrentCarController extends JeecgController<CarrentCar, ICarrentCarService> {
@Autowired
private ICarrentCarService carrentCarService;
/**
* 分页列表查询
*
* @param carrentCar
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "车辆信息表-分页列表查询")
@ApiOperation(value="车辆信息表-分页列表查询", notes="车辆信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentCar>> queryPageList(CarrentCar carrentCar,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentCar> queryWrapper = QueryGenerator.initQueryWrapper(carrentCar, req.getParameterMap());
Page<CarrentCar> page = new Page<CarrentCar>(pageNo, pageSize);
IPage<CarrentCar> pageList = carrentCarService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentCar
* @return
*/
@AutoLog(value = "车辆信息表-添加")
@ApiOperation(value="车辆信息表-添加", notes="车辆信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentCar carrentCar) {
carrentCarService.save(carrentCar);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentCar
* @return
*/
@AutoLog(value = "车辆信息表-编辑")
@ApiOperation(value="车辆信息表-编辑", notes="车辆信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentCar carrentCar) {
carrentCarService.updateById(carrentCar);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "车辆信息表-通过id删除")
@ApiOperation(value="车辆信息表-通过id删除", notes="车辆信息表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentCarService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "车辆信息表-批量删除")
@ApiOperation(value="车辆信息表-批量删除", notes="车辆信息表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentCarService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "车辆信息表-通过id查询")
@ApiOperation(value="车辆信息表-通过id查询", notes="车辆信息表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentCar> queryById(@RequestParam(name="id",required=true) String id) {
CarrentCar carrentCar = carrentCarService.getById(id);
if(carrentCar==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentCar);
}
/**
* 导出excel
*
* @param request
* @param carrentCar
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentCar carrentCar) {
return super.exportXls(request, carrentCar, CarrentCar.class, "车辆信息表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentCar.class);
}
}

+ 98
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/entity/CarrentCar.java View File

@ -0,0 +1,98 @@
package org.jeecg.modules.carrentCar.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 车辆信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_car")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_car对象", description="车辆信息表")
public class CarrentCar implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**车辆名称*/
@Excel(name = "车辆名称", width = 15)
@ApiModelProperty(value = "车辆名称")
private java.lang.String name;
/**车辆图片*/
@Excel(name = "车辆图片", width = 15)
@ApiModelProperty(value = "车辆图片")
private java.lang.String image;
/**车辆价格*/
@Excel(name = "车辆价格", width = 15)
@ApiModelProperty(value = "车辆价格")
private java.math.BigDecimal price;
/**车辆公里数*/
@Excel(name = "车辆公里数", width = 15)
@ApiModelProperty(value = "车辆公里数")
private java.lang.Integer mileage;
/**车辆类型*/
@Excel(name = "车辆类型", width = 15)
@ApiModelProperty(value = "车辆类型")
private java.lang.String type;
/**车辆标签*/
@Excel(name = "车辆标签", width = 15)
@ApiModelProperty(value = "车辆标签")
private java.lang.String tag;
/**服务*/
@Excel(name = "服务", width = 15)
@ApiModelProperty(value = "服务")
private java.lang.String services;
/**材质*/
@Excel(name = "材质", width = 15)
@ApiModelProperty(value = "材质")
private java.lang.String material;
/**尺寸*/
@Excel(name = "尺寸", width = 15)
@ApiModelProperty(value = "尺寸")
private java.lang.String size;
/**商品库存*/
@Excel(name = "商品库存", width = 15)
@ApiModelProperty(value = "商品库存")
private java.lang.Integer inventory;
/**已售商品数量*/
@Excel(name = "已售商品数量", width = 15)
@ApiModelProperty(value = "已售商品数量")
private java.lang.Integer saleNumber;
/**商品详情*/
@Excel(name = "商品详情", width = 15)
@ApiModelProperty(value = "商品详情")
private java.lang.String detail;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/mapper/CarrentCarMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentCar.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentCar.entity.CarrentCar;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 车辆信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentCarMapper extends BaseMapper<CarrentCar> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/mapper/xml/CarrentCarMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentCar.mapper.CarrentCarMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/service/ICarrentCarService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentCar.service;
import org.jeecg.modules.carrentCar.entity.CarrentCar;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 车辆信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentCarService extends IService<CarrentCar> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/service/impl/CarrentCarServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentCar.service.impl;
import org.jeecg.modules.carrentCar.entity.CarrentCar;
import org.jeecg.modules.carrentCar.mapper.CarrentCarMapper;
import org.jeecg.modules.carrentCar.service.ICarrentCarService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 车辆信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentCarServiceImpl extends ServiceImpl<CarrentCarMapper, CarrentCar> implements ICarrentCarService {
}

+ 237
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/CarrentCarList.vue View File

@ -0,0 +1,237 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('车辆信息表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-car-modal ref="modalForm" @ok="modalFormOk"></carrent-car-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentCarModal from './modules/CarrentCarModal'
export default {
name: 'CarrentCarList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentCarModal
},
data () {
return {
description: '车辆信息表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'车辆名称',
align:"center",
dataIndex: 'name'
},
{
title:'车辆图片',
align:"center",
dataIndex: 'image'
},
{
title:'车辆价格',
align:"center",
dataIndex: 'price'
},
{
title:'车辆公里数',
align:"center",
dataIndex: 'mileage'
},
{
title:'车辆类型',
align:"center",
dataIndex: 'type'
},
{
title:'车辆标签',
align:"center",
dataIndex: 'tag'
},
{
title:'服务',
align:"center",
dataIndex: 'services'
},
{
title:'材质',
align:"center",
dataIndex: 'material'
},
{
title:'尺寸',
align:"center",
dataIndex: 'size'
},
{
title:'商品库存',
align:"center",
dataIndex: 'inventory'
},
{
title:'已售商品数量',
align:"center",
dataIndex: 'saleNumber'
},
{
title:'商品详情',
align:"center",
dataIndex: 'detail'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentCar/carrentCar/list",
delete: "/carrentCar/carrentCar/delete",
deleteBatch: "/carrentCar/carrentCar/deleteBatch",
exportXlsUrl: "/carrentCar/carrentCar/exportXls",
importExcelUrl: "carrentCar/carrentCar/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'name',text:'车辆名称',dictCode:''})
fieldList.push({type:'string',value:'image',text:'车辆图片',dictCode:''})
fieldList.push({type:'BigDecimal',value:'price',text:'车辆价格',dictCode:''})
fieldList.push({type:'int',value:'mileage',text:'车辆公里数',dictCode:''})
fieldList.push({type:'string',value:'type',text:'车辆类型',dictCode:''})
fieldList.push({type:'string',value:'tag',text:'车辆标签',dictCode:''})
fieldList.push({type:'string',value:'services',text:'服务',dictCode:''})
fieldList.push({type:'string',value:'material',text:'材质',dictCode:''})
fieldList.push({type:'string',value:'size',text:'尺寸',dictCode:''})
fieldList.push({type:'int',value:'inventory',text:'商品库存',dictCode:''})
fieldList.push({type:'int',value:'saleNumber',text:'已售商品数量',dictCode:''})
fieldList.push({type:'Text',value:'detail',text:'商品详情',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 159
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarForm.vue View File

@ -0,0 +1,159 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="车辆名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
<a-input v-model="model.name" placeholder="请输入车辆名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="车辆图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="image">
<a-input v-model="model.image" placeholder="请输入车辆图片" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="车辆价格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
<a-input-number v-model="model.price" placeholder="请输入车辆价格" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="车辆公里数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mileage">
<a-input-number v-model="model.mileage" placeholder="请输入车辆公里数" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="车辆类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="type">
<a-input v-model="model.type" placeholder="请输入车辆类型" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="车辆标签" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tag">
<a-input v-model="model.tag" placeholder="请输入车辆标签" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="服务" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="services">
<a-input v-model="model.services" placeholder="请输入服务" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="材质" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="material">
<a-input v-model="model.material" placeholder="请输入材质" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="尺寸" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="size">
<a-input v-model="model.size" placeholder="请输入尺寸" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="商品库存" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventory">
<a-input-number v-model="model.inventory" placeholder="请输入商品库存" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="已售商品数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="saleNumber">
<a-input-number v-model="model.saleNumber" placeholder="请输入已售商品数量" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="商品详情" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="detail">
<a-input v-model="model.detail" placeholder="请输入商品详情" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentCarForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentCar/carrentCar/add",
edit: "/carrentCar/carrentCar/edit",
queryById: "/carrentCar/carrentCar/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-car-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-car-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentCarForm from './CarrentCarForm'
export default {
name: 'CarrentCarModal',
components: {
CarrentCarForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue/modules/CarrentCarModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-car-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-car-form>
</j-modal>
</template>
<script>
import CarrentCarForm from './CarrentCarForm'
export default {
name: 'CarrentCarModal',
components: {
CarrentCarForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCar.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentCar/carrentCar/list',
save='/carrentCar/carrentCar/add',
edit='/carrentCar/carrentCar/edit',
deleteOne = '/carrentCar/carrentCar/delete',
deleteBatch = '/carrentCar/carrentCar/deleteBatch',
importExcel = '/carrentCar/carrentCar/importExcel',
exportXls = '/carrentCar/carrentCar/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 133
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCar.data.ts View File

@ -0,0 +1,133 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '车辆名称',
align:"center",
dataIndex: 'name'
},
{
title: '车辆图片',
align:"center",
dataIndex: 'image'
},
{
title: '车辆价格',
align:"center",
dataIndex: 'price'
},
{
title: '车辆公里数',
align:"center",
dataIndex: 'mileage'
},
{
title: '车辆类型',
align:"center",
dataIndex: 'type'
},
{
title: '车辆标签',
align:"center",
dataIndex: 'tag'
},
{
title: '服务',
align:"center",
dataIndex: 'services'
},
{
title: '材质',
align:"center",
dataIndex: 'material'
},
{
title: '尺寸',
align:"center",
dataIndex: 'size'
},
{
title: '商品库存',
align:"center",
dataIndex: 'inventory'
},
{
title: '已售商品数量',
align:"center",
dataIndex: 'saleNumber'
},
{
title: '商品详情',
align:"center",
dataIndex: 'detail'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '车辆名称',
field: 'name',
component: 'Input',
},
{
label: '车辆图片',
field: 'image',
component: 'Input',
},
{
label: '车辆价格',
field: 'price',
component: 'InputNumber',
},
{
label: '车辆公里数',
field: 'mileage',
component: 'InputNumber',
},
{
label: '车辆类型',
field: 'type',
component: 'Input',
},
{
label: '车辆标签',
field: 'tag',
component: 'Input',
},
{
label: '服务',
field: 'services',
component: 'Input',
},
{
label: '材质',
field: 'material',
component: 'Input',
},
{
label: '尺寸',
field: 'size',
component: 'Input',
},
{
label: '商品库存',
field: 'inventory',
component: 'InputNumber',
},
{
label: '已售商品数量',
field: 'saleNumber',
component: 'InputNumber',
},
{
label: '商品详情',
field: 'detail',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/CarrentCarList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentCarModal @register="registerModal" @success="handleSuccess"></CarrentCarModal>
</div>
</template>
<script lang="ts" name="carrentCar-carrentCar" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentCarModal from './components/CarrentCarModal.vue'
import {columns, searchFormSchema} from './carrentCar.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentCar.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '车辆信息表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"车辆信息表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCar/vue3/components/CarrentCarModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentCar.data';
import {saveOrUpdate} from '../carrentCar.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/controller/CarrentCategoryController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentCategory.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentCategory.entity.CarrentCategory;
import org.jeecg.modules.carrentCategory.service.ICarrentCategoryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 分类表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="分类表")
@RestController
@RequestMapping("/carrentCategory/carrentCategory")
@Slf4j
public class CarrentCategoryController extends JeecgController<CarrentCategory, ICarrentCategoryService> {
@Autowired
private ICarrentCategoryService carrentCategoryService;
/**
* 分页列表查询
*
* @param carrentCategory
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "分类表-分页列表查询")
@ApiOperation(value="分类表-分页列表查询", notes="分类表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentCategory>> queryPageList(CarrentCategory carrentCategory,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentCategory> queryWrapper = QueryGenerator.initQueryWrapper(carrentCategory, req.getParameterMap());
Page<CarrentCategory> page = new Page<CarrentCategory>(pageNo, pageSize);
IPage<CarrentCategory> pageList = carrentCategoryService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentCategory
* @return
*/
@AutoLog(value = "分类表-添加")
@ApiOperation(value="分类表-添加", notes="分类表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentCategory carrentCategory) {
carrentCategoryService.save(carrentCategory);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentCategory
* @return
*/
@AutoLog(value = "分类表-编辑")
@ApiOperation(value="分类表-编辑", notes="分类表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentCategory carrentCategory) {
carrentCategoryService.updateById(carrentCategory);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "分类表-通过id删除")
@ApiOperation(value="分类表-通过id删除", notes="分类表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentCategoryService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "分类表-批量删除")
@ApiOperation(value="分类表-批量删除", notes="分类表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentCategoryService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "分类表-通过id查询")
@ApiOperation(value="分类表-通过id查询", notes="分类表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentCategory> queryById(@RequestParam(name="id",required=true) String id) {
CarrentCategory carrentCategory = carrentCategoryService.getById(id);
if(carrentCategory==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentCategory);
}
/**
* 导出excel
*
* @param request
* @param carrentCategory
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentCategory carrentCategory) {
return super.exportXls(request, carrentCategory, CarrentCategory.class, "分类表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentCategory.class);
}
}

+ 54
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/entity/CarrentCategory.java View File

@ -0,0 +1,54 @@
package org.jeecg.modules.carrentCategory.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 分类表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_category")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_category对象", description="分类表")
public class CarrentCategory implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**分类名称*/
@Excel(name = "分类名称", width = 15)
@ApiModelProperty(value = "分类名称")
private java.lang.String name;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/mapper/CarrentCategoryMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentCategory.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentCategory.entity.CarrentCategory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 分类表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentCategoryMapper extends BaseMapper<CarrentCategory> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/mapper/xml/CarrentCategoryMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentCategory.mapper.CarrentCategoryMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/service/ICarrentCategoryService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentCategory.service;
import org.jeecg.modules.carrentCategory.entity.CarrentCategory;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 分类表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentCategoryService extends IService<CarrentCategory> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/service/impl/CarrentCategoryServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentCategory.service.impl;
import org.jeecg.modules.carrentCategory.entity.CarrentCategory;
import org.jeecg.modules.carrentCategory.mapper.CarrentCategoryMapper;
import org.jeecg.modules.carrentCategory.service.ICarrentCategoryService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 分类表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentCategoryServiceImpl extends ServiceImpl<CarrentCategoryMapper, CarrentCategory> implements ICarrentCategoryService {
}

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/CarrentCategoryList.vue View File

@ -0,0 +1,171 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('分类表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-category-modal ref="modalForm" @ok="modalFormOk"></carrent-category-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentCategoryModal from './modules/CarrentCategoryModal'
export default {
name: 'CarrentCategoryList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentCategoryModal
},
data () {
return {
description: '分类表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'分类名称',
align:"center",
dataIndex: 'name'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentCategory/carrentCategory/list",
delete: "/carrentCategory/carrentCategory/delete",
deleteBatch: "/carrentCategory/carrentCategory/deleteBatch",
exportXlsUrl: "/carrentCategory/carrentCategory/exportXls",
importExcelUrl: "carrentCategory/carrentCategory/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'name',text:'分类名称',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 104
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryForm.vue View File

@ -0,0 +1,104 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="分类名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
<a-input v-model="model.name" placeholder="请输入分类名称" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentCategoryForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentCategory/carrentCategory/add",
edit: "/carrentCategory/carrentCategory/edit",
queryById: "/carrentCategory/carrentCategory/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-category-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-category-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentCategoryForm from './CarrentCategoryForm'
export default {
name: 'CarrentCategoryModal',
components: {
CarrentCategoryForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue/modules/CarrentCategoryModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-category-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-category-form>
</j-modal>
</template>
<script>
import CarrentCategoryForm from './CarrentCategoryForm'
export default {
name: 'CarrentCategoryModal',
components: {
CarrentCategoryForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategory.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentCategory/carrentCategory/list',
save='/carrentCategory/carrentCategory/add',
edit='/carrentCategory/carrentCategory/edit',
deleteOne = '/carrentCategory/carrentCategory/delete',
deleteBatch = '/carrentCategory/carrentCategory/deleteBatch',
importExcel = '/carrentCategory/carrentCategory/importExcel',
exportXls = '/carrentCategory/carrentCategory/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 23
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategory.data.ts View File

@ -0,0 +1,23 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '分类名称',
align:"center",
dataIndex: 'name'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '分类名称',
field: 'name',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/CarrentCategoryList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentCategoryModal @register="registerModal" @success="handleSuccess"></CarrentCategoryModal>
</div>
</template>
<script lang="ts" name="carrentCategory-carrentCategory" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentCategoryModal from './components/CarrentCategoryModal.vue'
import {columns, searchFormSchema} from './carrentCategory.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentCategory.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '分类表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"分类表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCategory/vue3/components/CarrentCategoryModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentCategory.data';
import {saveOrUpdate} from '../carrentCategory.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/controller/CarrentCompanyController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentCompany.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentCompany.entity.CarrentCompany;
import org.jeecg.modules.carrentCompany.service.ICarrentCompanyService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 企业信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="企业信息表")
@RestController
@RequestMapping("/carrentCompany/carrentCompany")
@Slf4j
public class CarrentCompanyController extends JeecgController<CarrentCompany, ICarrentCompanyService> {
@Autowired
private ICarrentCompanyService carrentCompanyService;
/**
* 分页列表查询
*
* @param carrentCompany
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "企业信息表-分页列表查询")
@ApiOperation(value="企业信息表-分页列表查询", notes="企业信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentCompany>> queryPageList(CarrentCompany carrentCompany,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentCompany> queryWrapper = QueryGenerator.initQueryWrapper(carrentCompany, req.getParameterMap());
Page<CarrentCompany> page = new Page<CarrentCompany>(pageNo, pageSize);
IPage<CarrentCompany> pageList = carrentCompanyService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentCompany
* @return
*/
@AutoLog(value = "企业信息表-添加")
@ApiOperation(value="企业信息表-添加", notes="企业信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentCompany carrentCompany) {
carrentCompanyService.save(carrentCompany);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentCompany
* @return
*/
@AutoLog(value = "企业信息表-编辑")
@ApiOperation(value="企业信息表-编辑", notes="企业信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentCompany carrentCompany) {
carrentCompanyService.updateById(carrentCompany);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "企业信息表-通过id删除")
@ApiOperation(value="企业信息表-通过id删除", notes="企业信息表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentCompanyService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "企业信息表-批量删除")
@ApiOperation(value="企业信息表-批量删除", notes="企业信息表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentCompanyService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "企业信息表-通过id查询")
@ApiOperation(value="企业信息表-通过id查询", notes="企业信息表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentCompany> queryById(@RequestParam(name="id",required=true) String id) {
CarrentCompany carrentCompany = carrentCompanyService.getById(id);
if(carrentCompany==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentCompany);
}
/**
* 导出excel
*
* @param request
* @param carrentCompany
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentCompany carrentCompany) {
return super.exportXls(request, carrentCompany, CarrentCompany.class, "企业信息表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentCompany.class);
}
}

+ 79
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/entity/CarrentCompany.java View File

@ -0,0 +1,79 @@
package org.jeecg.modules.carrentCompany.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 企业信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_company")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_company对象", description="企业信息表")
public class CarrentCompany implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**用户名*/
@Excel(name = "用户名", width = 15)
@ApiModelProperty(value = "用户名")
private java.lang.String userName;
/**公司名称*/
@Excel(name = "公司名称", width = 15)
@ApiModelProperty(value = "公司名称")
private java.lang.String companyName;
/**税收编码*/
@Excel(name = "税收编码", width = 15)
@ApiModelProperty(value = "税收编码")
private java.lang.String taxCode;
/**公司地址*/
@Excel(name = "公司地址", width = 15)
@ApiModelProperty(value = "公司地址")
private java.lang.String address;
/**联系电话*/
@Excel(name = "联系电话", width = 15)
@ApiModelProperty(value = "联系电话")
private java.lang.String phone;
/**营业执照*/
@Excel(name = "营业执照", width = 15)
@ApiModelProperty(value = "营业执照")
private java.lang.String businessLicense;
/**关联用户*/
@Excel(name = "关联用户", width = 15, dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id")
@Dict(dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id")
@ApiModelProperty(value = "关联用户")
private java.lang.String userId;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/mapper/CarrentCompanyMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentCompany.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentCompany.entity.CarrentCompany;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 企业信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentCompanyMapper extends BaseMapper<CarrentCompany> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/mapper/xml/CarrentCompanyMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentCompany.mapper.CarrentCompanyMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/service/ICarrentCompanyService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentCompany.service;
import org.jeecg.modules.carrentCompany.entity.CarrentCompany;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 企业信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentCompanyService extends IService<CarrentCompany> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/service/impl/CarrentCompanyServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentCompany.service.impl;
import org.jeecg.modules.carrentCompany.entity.CarrentCompany;
import org.jeecg.modules.carrentCompany.mapper.CarrentCompanyMapper;
import org.jeecg.modules.carrentCompany.service.ICarrentCompanyService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 企业信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentCompanyServiceImpl extends ServiceImpl<CarrentCompanyMapper, CarrentCompany> implements ICarrentCompanyService {
}

+ 209
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/CarrentCompanyList.vue View File

@ -0,0 +1,209 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('企业信息表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-company-modal ref="modalForm" @ok="modalFormOk"></carrent-company-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentCompanyModal from './modules/CarrentCompanyModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
export default {
name: 'CarrentCompanyList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentCompanyModal
},
data () {
return {
description: '企业信息表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'用户名',
align:"center",
dataIndex: 'userName'
},
{
title:'公司名称',
align:"center",
dataIndex: 'companyName'
},
{
title:'税收编码',
align:"center",
dataIndex: 'taxCode'
},
{
title:'公司地址',
align:"center",
dataIndex: 'address'
},
{
title:'联系电话',
align:"center",
dataIndex: 'phone'
},
{
title:'营业执照',
align:"center",
dataIndex: 'businessLicense',
scopedSlots: {customRender: 'imgSlot'}
},
{
title:'关联用户',
align:"center",
dataIndex: 'userId_dictText'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentCompany/carrentCompany/list",
delete: "/carrentCompany/carrentCompany/delete",
deleteBatch: "/carrentCompany/carrentCompany/deleteBatch",
exportXlsUrl: "/carrentCompany/carrentCompany/exportXls",
importExcelUrl: "carrentCompany/carrentCompany/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'userName',text:'用户名',dictCode:''})
fieldList.push({type:'string',value:'companyName',text:'公司名称',dictCode:''})
fieldList.push({type:'string',value:'taxCode',text:'税收编码',dictCode:''})
fieldList.push({type:'string',value:'address',text:'公司地址',dictCode:''})
fieldList.push({type:'string',value:'phone',text:'联系电话',dictCode:''})
fieldList.push({type:'string',value:'businessLicense',text:'营业执照',dictCode:''})
fieldList.push({type:'string',value:'userId',text:'关联用户',dictCode:"han_hai_member,nick_name,id"})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 134
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyForm.vue View File

@ -0,0 +1,134 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="用户名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userName">
<a-input v-model="model.userName" placeholder="请输入用户名" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="公司名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyName">
<a-input v-model="model.companyName" placeholder="请输入公司名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="税收编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="taxCode">
<a-input v-model="model.taxCode" placeholder="请输入税收编码" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="公司地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="address">
<a-input v-model="model.address" placeholder="请输入公司地址" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone">
<a-input v-model="model.phone" placeholder="请输入联系电话" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="营业执照" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="businessLicense">
<j-image-upload isMultiple v-model="model.businessLicense" ></j-image-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="关联用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userId">
<j-dict-select-tag type="list" v-model="model.userId" dictCode="han_hai_member,nick_name,id" placeholder="请选择关联用户" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentCompanyForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentCompany/carrentCompany/add",
edit: "/carrentCompany/carrentCompany/edit",
queryById: "/carrentCompany/carrentCompany/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-company-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-company-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentCompanyForm from './CarrentCompanyForm'
export default {
name: 'CarrentCompanyModal',
components: {
CarrentCompanyForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue/modules/CarrentCompanyModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-company-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-company-form>
</j-modal>
</template>
<script>
import CarrentCompanyForm from './CarrentCompanyForm'
export default {
name: 'CarrentCompanyModal',
components: {
CarrentCompanyForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompany.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentCompany/carrentCompany/list',
save='/carrentCompany/carrentCompany/add',
edit='/carrentCompany/carrentCompany/edit',
deleteOne = '/carrentCompany/carrentCompany/delete',
deleteBatch = '/carrentCompany/carrentCompany/deleteBatch',
importExcel = '/carrentCompany/carrentCompany/importExcel',
exportXls = '/carrentCompany/carrentCompany/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 89
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompany.data.ts View File

@ -0,0 +1,89 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '用户名',
align:"center",
dataIndex: 'userName'
},
{
title: '公司名称',
align:"center",
dataIndex: 'companyName'
},
{
title: '税收编码',
align:"center",
dataIndex: 'taxCode'
},
{
title: '公司地址',
align:"center",
dataIndex: 'address'
},
{
title: '联系电话',
align:"center",
dataIndex: 'phone'
},
{
title: '营业执照',
align:"center",
dataIndex: 'businessLicense',
customRender:render.renderAvatar,
},
{
title: '关联用户',
align:"center",
dataIndex: 'userId_dictText'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '用户名',
field: 'userName',
component: 'Input',
},
{
label: '公司名称',
field: 'companyName',
component: 'Input',
},
{
label: '税收编码',
field: 'taxCode',
component: 'Input',
},
{
label: '公司地址',
field: 'address',
component: 'Input',
},
{
label: '联系电话',
field: 'phone',
component: 'Input',
},
{
label: '营业执照',
field: 'businessLicense',
component: 'JImageUpload',
componentProps:{
},
},
{
label: '关联用户',
field: 'userId',
component: 'JDictSelectTag',
componentProps:{
dictCode:"han_hai_member,nick_name,id"
},
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/CarrentCompanyList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentCompanyModal @register="registerModal" @success="handleSuccess"></CarrentCompanyModal>
</div>
</template>
<script lang="ts" name="carrentCompany-carrentCompany" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentCompanyModal from './components/CarrentCompanyModal.vue'
import {columns, searchFormSchema} from './carrentCompany.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentCompany.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '企业信息表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"企业信息表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentCompany/vue3/components/CarrentCompanyModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentCompany.data';
import {saveOrUpdate} from '../carrentCompany.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/controller/CarrentComponentController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentComponent.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentComponent.entity.CarrentComponent;
import org.jeecg.modules.carrentComponent.service.ICarrentComponentService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 设备部件表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="设备部件表")
@RestController
@RequestMapping("/carrentComponent/carrentComponent")
@Slf4j
public class CarrentComponentController extends JeecgController<CarrentComponent, ICarrentComponentService> {
@Autowired
private ICarrentComponentService carrentComponentService;
/**
* 分页列表查询
*
* @param carrentComponent
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "设备部件表-分页列表查询")
@ApiOperation(value="设备部件表-分页列表查询", notes="设备部件表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentComponent>> queryPageList(CarrentComponent carrentComponent,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentComponent> queryWrapper = QueryGenerator.initQueryWrapper(carrentComponent, req.getParameterMap());
Page<CarrentComponent> page = new Page<CarrentComponent>(pageNo, pageSize);
IPage<CarrentComponent> pageList = carrentComponentService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentComponent
* @return
*/
@AutoLog(value = "设备部件表-添加")
@ApiOperation(value="设备部件表-添加", notes="设备部件表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentComponent carrentComponent) {
carrentComponentService.save(carrentComponent);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentComponent
* @return
*/
@AutoLog(value = "设备部件表-编辑")
@ApiOperation(value="设备部件表-编辑", notes="设备部件表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentComponent carrentComponent) {
carrentComponentService.updateById(carrentComponent);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "设备部件表-通过id删除")
@ApiOperation(value="设备部件表-通过id删除", notes="设备部件表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentComponentService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "设备部件表-批量删除")
@ApiOperation(value="设备部件表-批量删除", notes="设备部件表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentComponentService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "设备部件表-通过id查询")
@ApiOperation(value="设备部件表-通过id查询", notes="设备部件表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentComponent> queryById(@RequestParam(name="id",required=true) String id) {
CarrentComponent carrentComponent = carrentComponentService.getById(id);
if(carrentComponent==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentComponent);
}
/**
* 导出excel
*
* @param request
* @param carrentComponent
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentComponent carrentComponent) {
return super.exportXls(request, carrentComponent, CarrentComponent.class, "设备部件表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentComponent.class);
}
}

+ 54
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/entity/CarrentComponent.java View File

@ -0,0 +1,54 @@
package org.jeecg.modules.carrentComponent.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 设备部件表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_component")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_component对象", description="设备部件表")
public class CarrentComponent implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**部件名称*/
@Excel(name = "部件名称", width = 15)
@ApiModelProperty(value = "部件名称")
private java.lang.String name;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/mapper/CarrentComponentMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentComponent.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentComponent.entity.CarrentComponent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 设备部件表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentComponentMapper extends BaseMapper<CarrentComponent> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/mapper/xml/CarrentComponentMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentComponent.mapper.CarrentComponentMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/service/ICarrentComponentService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentComponent.service;
import org.jeecg.modules.carrentComponent.entity.CarrentComponent;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 设备部件表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentComponentService extends IService<CarrentComponent> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/service/impl/CarrentComponentServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentComponent.service.impl;
import org.jeecg.modules.carrentComponent.entity.CarrentComponent;
import org.jeecg.modules.carrentComponent.mapper.CarrentComponentMapper;
import org.jeecg.modules.carrentComponent.service.ICarrentComponentService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 设备部件表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentComponentServiceImpl extends ServiceImpl<CarrentComponentMapper, CarrentComponent> implements ICarrentComponentService {
}

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/CarrentComponentList.vue View File

@ -0,0 +1,171 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('设备部件表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-component-modal ref="modalForm" @ok="modalFormOk"></carrent-component-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentComponentModal from './modules/CarrentComponentModal'
export default {
name: 'CarrentComponentList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentComponentModal
},
data () {
return {
description: '设备部件表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'部件名称',
align:"center",
dataIndex: 'name'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentComponent/carrentComponent/list",
delete: "/carrentComponent/carrentComponent/delete",
deleteBatch: "/carrentComponent/carrentComponent/deleteBatch",
exportXlsUrl: "/carrentComponent/carrentComponent/exportXls",
importExcelUrl: "carrentComponent/carrentComponent/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'name',text:'部件名称',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 104
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentForm.vue View File

@ -0,0 +1,104 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="部件名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
<a-input v-model="model.name" placeholder="请输入部件名称" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentComponentForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentComponent/carrentComponent/add",
edit: "/carrentComponent/carrentComponent/edit",
queryById: "/carrentComponent/carrentComponent/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-component-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-component-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentComponentForm from './CarrentComponentForm'
export default {
name: 'CarrentComponentModal',
components: {
CarrentComponentForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue/modules/CarrentComponentModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-component-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-component-form>
</j-modal>
</template>
<script>
import CarrentComponentForm from './CarrentComponentForm'
export default {
name: 'CarrentComponentModal',
components: {
CarrentComponentForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponent.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentComponent/carrentComponent/list',
save='/carrentComponent/carrentComponent/add',
edit='/carrentComponent/carrentComponent/edit',
deleteOne = '/carrentComponent/carrentComponent/delete',
deleteBatch = '/carrentComponent/carrentComponent/deleteBatch',
importExcel = '/carrentComponent/carrentComponent/importExcel',
exportXls = '/carrentComponent/carrentComponent/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 23
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponent.data.ts View File

@ -0,0 +1,23 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '部件名称',
align:"center",
dataIndex: 'name'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '部件名称',
field: 'name',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/CarrentComponentList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentComponentModal @register="registerModal" @success="handleSuccess"></CarrentComponentModal>
</div>
</template>
<script lang="ts" name="carrentComponent-carrentComponent" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentComponentModal from './components/CarrentComponentModal.vue'
import {columns, searchFormSchema} from './carrentComponent.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentComponent.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '设备部件表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"设备部件表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentComponent/vue3/components/CarrentComponentModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentComponent.data';
import {saveOrUpdate} from '../carrentComponent.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/controller/CarrentMileageController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentMileage.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentMileage.entity.CarrentMileage;
import org.jeecg.modules.carrentMileage.service.ICarrentMileageService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 里程范围表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="里程范围表")
@RestController
@RequestMapping("/carrentMileage/carrentMileage")
@Slf4j
public class CarrentMileageController extends JeecgController<CarrentMileage, ICarrentMileageService> {
@Autowired
private ICarrentMileageService carrentMileageService;
/**
* 分页列表查询
*
* @param carrentMileage
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "里程范围表-分页列表查询")
@ApiOperation(value="里程范围表-分页列表查询", notes="里程范围表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentMileage>> queryPageList(CarrentMileage carrentMileage,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentMileage> queryWrapper = QueryGenerator.initQueryWrapper(carrentMileage, req.getParameterMap());
Page<CarrentMileage> page = new Page<CarrentMileage>(pageNo, pageSize);
IPage<CarrentMileage> pageList = carrentMileageService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentMileage
* @return
*/
@AutoLog(value = "里程范围表-添加")
@ApiOperation(value="里程范围表-添加", notes="里程范围表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentMileage carrentMileage) {
carrentMileageService.save(carrentMileage);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentMileage
* @return
*/
@AutoLog(value = "里程范围表-编辑")
@ApiOperation(value="里程范围表-编辑", notes="里程范围表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentMileage carrentMileage) {
carrentMileageService.updateById(carrentMileage);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "里程范围表-通过id删除")
@ApiOperation(value="里程范围表-通过id删除", notes="里程范围表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentMileageService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "里程范围表-批量删除")
@ApiOperation(value="里程范围表-批量删除", notes="里程范围表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentMileageService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "里程范围表-通过id查询")
@ApiOperation(value="里程范围表-通过id查询", notes="里程范围表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentMileage> queryById(@RequestParam(name="id",required=true) String id) {
CarrentMileage carrentMileage = carrentMileageService.getById(id);
if(carrentMileage==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentMileage);
}
/**
* 导出excel
*
* @param request
* @param carrentMileage
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentMileage carrentMileage) {
return super.exportXls(request, carrentMileage, CarrentMileage.class, "里程范围表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentMileage.class);
}
}

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/entity/CarrentMileage.java View File

@ -0,0 +1,58 @@
package org.jeecg.modules.carrentMileage.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 里程范围表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_mileage")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_mileage对象", description="里程范围表")
public class CarrentMileage implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**里程范围下限*/
@Excel(name = "里程范围下限", width = 15)
@ApiModelProperty(value = "里程范围下限")
private java.lang.String rangeLow;
/**里程范围上线*/
@Excel(name = "里程范围上线", width = 15)
@ApiModelProperty(value = "里程范围上线")
private java.lang.String rangeUp;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/mapper/CarrentMileageMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.carrentMileage.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.carrentMileage.entity.CarrentMileage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 里程范围表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface CarrentMileageMapper extends BaseMapper<CarrentMileage> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/mapper/xml/CarrentMileageMapper.xml View File

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.carrentMileage.mapper.CarrentMileageMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/service/ICarrentMileageService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.carrentMileage.service;
import org.jeecg.modules.carrentMileage.entity.CarrentMileage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 里程范围表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
public interface ICarrentMileageService extends IService<CarrentMileage> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/service/impl/CarrentMileageServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.carrentMileage.service.impl;
import org.jeecg.modules.carrentMileage.entity.CarrentMileage;
import org.jeecg.modules.carrentMileage.mapper.CarrentMileageMapper;
import org.jeecg.modules.carrentMileage.service.ICarrentMileageService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 里程范围表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Service
public class CarrentMileageServiceImpl extends ServiceImpl<CarrentMileageMapper, CarrentMileage> implements ICarrentMileageService {
}

+ 177
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/CarrentMileageList.vue View File

@ -0,0 +1,177 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('里程范围表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<carrent-mileage-modal ref="modalForm" @ok="modalFormOk"></carrent-mileage-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import CarrentMileageModal from './modules/CarrentMileageModal'
export default {
name: 'CarrentMileageList',
mixins:[JeecgListMixin, mixinDevice],
components: {
CarrentMileageModal
},
data () {
return {
description: '里程范围表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'里程范围下限',
align:"center",
dataIndex: 'rangeLow'
},
{
title:'里程范围上线',
align:"center",
dataIndex: 'rangeUp'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/carrentMileage/carrentMileage/list",
delete: "/carrentMileage/carrentMileage/delete",
deleteBatch: "/carrentMileage/carrentMileage/deleteBatch",
exportXlsUrl: "/carrentMileage/carrentMileage/exportXls",
importExcelUrl: "carrentMileage/carrentMileage/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'rangeLow',text:'里程范围下限',dictCode:''})
fieldList.push({type:'string',value:'rangeUp',text:'里程范围上线',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 109
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageForm.vue View File

@ -0,0 +1,109 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="里程范围下限" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="rangeLow">
<a-input v-model="model.rangeLow" placeholder="请输入里程范围下限" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="里程范围上线" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="rangeUp">
<a-input v-model="model.rangeUp" placeholder="请输入里程范围上线" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'CarrentMileageForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/carrentMileage/carrentMileage/add",
edit: "/carrentMileage/carrentMileage/edit",
queryById: "/carrentMileage/carrentMileage/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<carrent-mileage-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></carrent-mileage-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import CarrentMileageForm from './CarrentMileageForm'
export default {
name: 'CarrentMileageModal',
components: {
CarrentMileageForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue/modules/CarrentMileageModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<carrent-mileage-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></carrent-mileage-form>
</j-modal>
</template>
<script>
import CarrentMileageForm from './CarrentMileageForm'
export default {
name: 'CarrentMileageModal',
components: {
CarrentMileageForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileage.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/carrentMileage/carrentMileage/list',
save='/carrentMileage/carrentMileage/add',
edit='/carrentMileage/carrentMileage/edit',
deleteOne = '/carrentMileage/carrentMileage/delete',
deleteBatch = '/carrentMileage/carrentMileage/deleteBatch',
importExcel = '/carrentMileage/carrentMileage/importExcel',
exportXls = '/carrentMileage/carrentMileage/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 33
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileage.data.ts View File

@ -0,0 +1,33 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '里程范围下限',
align:"center",
dataIndex: 'rangeLow'
},
{
title: '里程范围上线',
align:"center",
dataIndex: 'rangeUp'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '里程范围下限',
field: 'rangeLow',
component: 'Input',
},
{
label: '里程范围上线',
field: 'rangeUp',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/CarrentMileageList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<CarrentMileageModal @register="registerModal" @success="handleSuccess"></CarrentMileageModal>
</div>
</template>
<script lang="ts" name="carrentMileage-carrentMileage" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import CarrentMileageModal from './components/CarrentMileageModal.vue'
import {columns, searchFormSchema} from './carrentMileage.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './carrentMileage.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '里程范围表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"里程范围表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentMileage/vue3/components/CarrentMileageModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../carrentMileage.data';
import {saveOrUpdate} from '../carrentMileage.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentNews/controller/CarrentNewsController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.carrentNews.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.carrentNews.entity.CarrentNews;
import org.jeecg.modules.carrentNews.service.ICarrentNewsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 新闻信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Api(tags="新闻信息表")
@RestController
@RequestMapping("/carrentNews/carrentNews")
@Slf4j
public class CarrentNewsController extends JeecgController<CarrentNews, ICarrentNewsService> {
@Autowired
private ICarrentNewsService carrentNewsService;
/**
* 分页列表查询
*
* @param carrentNews
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "新闻信息表-分页列表查询")
@ApiOperation(value="新闻信息表-分页列表查询", notes="新闻信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<CarrentNews>> queryPageList(CarrentNews carrentNews,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<CarrentNews> queryWrapper = QueryGenerator.initQueryWrapper(carrentNews, req.getParameterMap());
Page<CarrentNews> page = new Page<CarrentNews>(pageNo, pageSize);
IPage<CarrentNews> pageList = carrentNewsService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param carrentNews
* @return
*/
@AutoLog(value = "新闻信息表-添加")
@ApiOperation(value="新闻信息表-添加", notes="新闻信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody CarrentNews carrentNews) {
carrentNewsService.save(carrentNews);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param carrentNews
* @return
*/
@AutoLog(value = "新闻信息表-编辑")
@ApiOperation(value="新闻信息表-编辑", notes="新闻信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody CarrentNews carrentNews) {
carrentNewsService.updateById(carrentNews);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "新闻信息表-通过id删除")
@ApiOperation(value="新闻信息表-通过id删除", notes="新闻信息表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
carrentNewsService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "新闻信息表-批量删除")
@ApiOperation(value="新闻信息表-批量删除", notes="新闻信息表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.carrentNewsService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "新闻信息表-通过id查询")
@ApiOperation(value="新闻信息表-通过id查询", notes="新闻信息表-通过id查询")
@GetMapping(value = "/queryById")
public Result<CarrentNews> queryById(@RequestParam(name="id",required=true) String id) {
CarrentNews carrentNews = carrentNewsService.getById(id);
if(carrentNews==null) {
return Result.error("未找到对应数据");
}
return Result.OK(carrentNews);
}
/**
* 导出excel
*
* @param request
* @param carrentNews
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, CarrentNews carrentNews) {
return super.exportXls(request, carrentNews, CarrentNews.class, "新闻信息表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, CarrentNews.class);
}
}

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/carrentNews/entity/CarrentNews.java View File

@ -0,0 +1,58 @@
package org.jeecg.modules.carrentNews.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 新闻信息表
* @Author: jeecg-boot
* @Date: 2024-11-12
* @Version: V1.0
*/
@Data
@TableName("carrent_news")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="carrent_news对象", description="新闻信息表")
public class CarrentNews implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**新闻标题*/
@Excel(name = "新闻标题", width = 15)
@ApiModelProperty(value = "新闻标题")
private java.lang.String title;
/**新闻内容*/
@Excel(name = "新闻内容", width = 15)
@ApiModelProperty(value = "新闻内容")
private java.lang.String content;
}

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

Loading…
Cancel
Save