Browse Source

1、数据库表内容生成

master
Aug 1 year ago
parent
commit
a41b9562bf
84 changed files with 6407 additions and 0 deletions
  1. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/controller/WorkorderBannerController.java
  2. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/entity/WorkorderBanner.java
  3. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/mapper/WorkorderBannerMapper.java
  4. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/mapper/xml/WorkorderBannerMapper.xml
  5. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/service/IWorkorderBannerService.java
  6. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/service/impl/WorkorderBannerServiceImpl.java
  7. +178
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue/WorkorderBannerList.vue
  8. +109
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue/modules/WorkorderBannerForm.vue
  9. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue/modules/WorkorderBannerModal.Style#Drawer.vue
  10. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue/modules/WorkorderBannerModal.vue
  11. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue3/WorkorderBanner.api.ts
  12. +36
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue3/WorkorderBanner.data.ts
  13. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue3/WorkorderBannerList.vue
  14. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue3/components/WorkorderBannerModal.vue
  15. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/controller/WorkorderNewsController.java
  16. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/entity/WorkorderNews.java
  17. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/mapper/WorkorderNewsMapper.java
  18. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/mapper/xml/WorkorderNewsMapper.xml
  19. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/service/IWorkorderNewsService.java
  20. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/service/impl/WorkorderNewsServiceImpl.java
  21. +178
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue/WorkorderNewsList.vue
  22. +109
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue/modules/WorkorderNewsForm.vue
  23. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue/modules/WorkorderNewsModal.Style#Drawer.vue
  24. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue/modules/WorkorderNewsModal.vue
  25. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/WorkorderNews.api.ts
  26. +34
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/WorkorderNews.data.ts
  27. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/WorkorderNewsList.vue
  28. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/components/WorkorderNewsModal.vue
  29. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/controller/WorkorderRoleController.java
  30. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/entity/WorkorderRole.java
  31. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/mapper/WorkorderRoleMapper.java
  32. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/mapper/xml/WorkorderRoleMapper.xml
  33. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/service/IWorkorderRoleService.java
  34. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/service/impl/WorkorderRoleServiceImpl.java
  35. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue/WorkorderRoleList.vue
  36. +104
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue/modules/WorkorderRoleForm.vue
  37. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue/modules/WorkorderRoleModal.Style#Drawer.vue
  38. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue/modules/WorkorderRoleModal.vue
  39. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue3/WorkorderRole.api.ts
  40. +23
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue3/WorkorderRole.data.ts
  41. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue3/WorkorderRoleList.vue
  42. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue3/components/WorkorderRoleModal.vue
  43. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/controller/WorkorderStatusController.java
  44. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/entity/WorkorderStatus.java
  45. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/mapper/WorkorderStatusMapper.java
  46. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/mapper/xml/WorkorderStatusMapper.xml
  47. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/service/IWorkorderStatusService.java
  48. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/service/impl/WorkorderStatusServiceImpl.java
  49. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue/WorkorderStatusList.vue
  50. +104
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue/modules/WorkorderStatusForm.vue
  51. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue/modules/WorkorderStatusModal.Style#Drawer.vue
  52. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue/modules/WorkorderStatusModal.vue
  53. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue3/WorkorderStatus.api.ts
  54. +23
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue3/WorkorderStatus.data.ts
  55. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue3/WorkorderStatusList.vue
  56. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue3/components/WorkorderStatusModal.vue
  57. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/controller/WorkorderTemplateController.java
  58. +91
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/entity/WorkorderTemplate.java
  59. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/mapper/WorkorderTemplateMapper.java
  60. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/mapper/xml/WorkorderTemplateMapper.xml
  61. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/service/IWorkorderTemplateService.java
  62. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/service/impl/WorkorderTemplateServiceImpl.java
  63. +230
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/WorkorderTemplateList.vue
  64. +149
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/modules/WorkorderTemplateForm.vue
  65. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/modules/WorkorderTemplateModal.Style#Drawer.vue
  66. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/modules/WorkorderTemplateModal.vue
  67. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/WorkorderTemplate.api.ts
  68. +128
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/WorkorderTemplate.data.ts
  69. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/WorkorderTemplateList.vue
  70. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/components/WorkorderTemplateModal.vue
  71. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/controller/WorkorderUserController.java
  72. +67
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/entity/WorkorderUser.java
  73. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/mapper/WorkorderUserMapper.java
  74. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/mapper/xml/WorkorderUserMapper.xml
  75. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/service/IWorkorderUserService.java
  76. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/service/impl/WorkorderUserServiceImpl.java
  77. +191
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/WorkorderUserList.vue
  78. +119
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/modules/WorkorderUserForm.vue
  79. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/modules/WorkorderUserModal.Style#Drawer.vue
  80. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/modules/WorkorderUserModal.vue
  81. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/WorkorderUser.api.ts
  82. +59
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/WorkorderUser.data.ts
  83. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/WorkorderUserList.vue
  84. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/components/WorkorderUserModal.vue

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

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderBanner.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.workorderBanner.entity.WorkorderBanner;
import org.jeecg.modules.workorderBanner.service.IWorkorderBannerService;
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-16
* @Version: V1.0
*/
@Api(tags="轮播图表")
@RestController
@RequestMapping("/workorderBanner/workorderBanner")
@Slf4j
public class WorkorderBannerController extends JeecgController<WorkorderBanner, IWorkorderBannerService> {
@Autowired
private IWorkorderBannerService workorderBannerService;
/**
* 分页列表查询
*
* @param workorderBanner
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "轮播图表-分页列表查询")
@ApiOperation(value="轮播图表-分页列表查询", notes="轮播图表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderBanner>> queryPageList(WorkorderBanner workorderBanner,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderBanner> queryWrapper = QueryGenerator.initQueryWrapper(workorderBanner, req.getParameterMap());
Page<WorkorderBanner> page = new Page<WorkorderBanner>(pageNo, pageSize);
IPage<WorkorderBanner> pageList = workorderBannerService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderBanner
* @return
*/
@AutoLog(value = "轮播图表-添加")
@ApiOperation(value="轮播图表-添加", notes="轮播图表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderBanner workorderBanner) {
workorderBannerService.save(workorderBanner);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderBanner
* @return
*/
@AutoLog(value = "轮播图表-编辑")
@ApiOperation(value="轮播图表-编辑", notes="轮播图表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderBanner workorderBanner) {
workorderBannerService.updateById(workorderBanner);
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) {
workorderBannerService.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.workorderBannerService.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<WorkorderBanner> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderBanner workorderBanner = workorderBannerService.getById(id);
if(workorderBanner==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderBanner);
}
/**
* 导出excel
*
* @param request
* @param workorderBanner
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderBanner workorderBanner) {
return super.exportXls(request, workorderBanner, WorkorderBanner.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, WorkorderBanner.class);
}
}

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

@ -0,0 +1,58 @@
package org.jeecg.modules.workorderBanner.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_banner")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_banner对象", description="轮播图表")
public class WorkorderBanner 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/workorderBanner/mapper/WorkorderBannerMapper.java View File

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

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/mapper/xml/WorkorderBannerMapper.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.workorderBanner.mapper.WorkorderBannerMapper">
</mapper>

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

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

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

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

+ 178
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderBanner/vue/WorkorderBannerList.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>
<workorder-banner-modal ref="modalForm" @ok="modalFormOk"></workorder-banner-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderBannerModal from './modules/WorkorderBannerModal'
export default {
name: 'WorkorderBannerList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderBannerModal
},
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: "/workorderBanner/workorderBanner/list",
delete: "/workorderBanner/workorderBanner/delete",
deleteBatch: "/workorderBanner/workorderBanner/deleteBatch",
exportXlsUrl: "/workorderBanner/workorderBanner/exportXls",
importExcelUrl: "workorderBanner/workorderBanner/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/workorderBanner/vue/modules/WorkorderBannerForm.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: 'WorkorderBannerForm',
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: "/workorderBanner/workorderBanner/add",
edit: "/workorderBanner/workorderBanner/edit",
queryById: "/workorderBanner/workorderBanner/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/workorderBanner/vue/modules/WorkorderBannerModal.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">
<workorder-banner-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-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 WorkorderBannerForm from './WorkorderBannerForm'
export default {
name: 'WorkorderBannerModal',
components: {
WorkorderBannerForm
},
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/workorderBanner/vue/modules/WorkorderBannerModal.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="关闭">
<workorder-banner-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-banner-form>
</j-modal>
</template>
<script>
import WorkorderBannerForm from './WorkorderBannerForm'
export default {
name: 'WorkorderBannerModal',
components: {
WorkorderBannerForm
},
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/workorderBanner/vue3/WorkorderBanner.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderBanner/workorderBanner/list',
save='/workorderBanner/workorderBanner/add',
edit='/workorderBanner/workorderBanner/edit',
deleteOne = '/workorderBanner/workorderBanner/delete',
deleteBatch = '/workorderBanner/workorderBanner/deleteBatch',
importExcel = '/workorderBanner/workorderBanner/importExcel',
exportXls = '/workorderBanner/workorderBanner/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/workorderBanner/vue3/WorkorderBanner.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/workorderBanner/vue3/WorkorderBannerList.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>
<!-- 表单区域 -->
<WorkorderBannerModal @register="registerModal" @success="handleSuccess"></WorkorderBannerModal>
</div>
</template>
<script lang="ts" name="workorderBanner-workorderBanner" 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 WorkorderBannerModal from './components/WorkorderBannerModal.vue'
import {columns, searchFormSchema} from './workorderBanner.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderBanner.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/workorderBanner/vue3/components/WorkorderBannerModal.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 '../workorderBanner.data';
import {saveOrUpdate} from '../workorderBanner.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/workorderNews/controller/WorkorderNewsController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderNews.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.workorderNews.entity.WorkorderNews;
import org.jeecg.modules.workorderNews.service.IWorkorderNewsService;
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-16
* @Version: V1.0
*/
@Api(tags="公告信息表")
@RestController
@RequestMapping("/workorderNews/workorderNews")
@Slf4j
public class WorkorderNewsController extends JeecgController<WorkorderNews, IWorkorderNewsService> {
@Autowired
private IWorkorderNewsService workorderNewsService;
/**
* 分页列表查询
*
* @param workorderNews
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "公告信息表-分页列表查询")
@ApiOperation(value="公告信息表-分页列表查询", notes="公告信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderNews>> queryPageList(WorkorderNews workorderNews,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderNews> queryWrapper = QueryGenerator.initQueryWrapper(workorderNews, req.getParameterMap());
Page<WorkorderNews> page = new Page<WorkorderNews>(pageNo, pageSize);
IPage<WorkorderNews> pageList = workorderNewsService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderNews
* @return
*/
@AutoLog(value = "公告信息表-添加")
@ApiOperation(value="公告信息表-添加", notes="公告信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderNews workorderNews) {
workorderNewsService.save(workorderNews);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderNews
* @return
*/
@AutoLog(value = "公告信息表-编辑")
@ApiOperation(value="公告信息表-编辑", notes="公告信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderNews workorderNews) {
workorderNewsService.updateById(workorderNews);
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) {
workorderNewsService.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.workorderNewsService.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<WorkorderNews> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderNews workorderNews = workorderNewsService.getById(id);
if(workorderNews==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderNews);
}
/**
* 导出excel
*
* @param request
* @param workorderNews
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderNews workorderNews) {
return super.exportXls(request, workorderNews, WorkorderNews.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, WorkorderNews.class);
}
}

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/entity/WorkorderNews.java View File

@ -0,0 +1,61 @@
package org.jeecg.modules.workorderNews.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_news")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_news对象", description="公告信息表")
public class WorkorderNews 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;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**公告标题*/
@Excel(name = "公告标题", width = 15)
@ApiModelProperty(value = "公告标题")
private java.lang.String title;
/**公告内容*/
@Excel(name = "公告内容", width = 15)
@ApiModelProperty(value = "公告内容")
private java.lang.String content;
}

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

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

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/mapper/xml/WorkorderNewsMapper.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.workorderNews.mapper.WorkorderNewsMapper">
</mapper>

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

@ -0,0 +1,14 @@
package org.jeecg.modules.workorderNews.service;
import org.jeecg.modules.workorderNews.entity.WorkorderNews;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 公告信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface IWorkorderNewsService extends IService<WorkorderNews> {
}

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

@ -0,0 +1,19 @@
package org.jeecg.modules.workorderNews.service.impl;
import org.jeecg.modules.workorderNews.entity.WorkorderNews;
import org.jeecg.modules.workorderNews.mapper.WorkorderNewsMapper;
import org.jeecg.modules.workorderNews.service.IWorkorderNewsService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 公告信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
@Service
public class WorkorderNewsServiceImpl extends ServiceImpl<WorkorderNewsMapper, WorkorderNews> implements IWorkorderNewsService {
}

+ 178
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue/WorkorderNewsList.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>
<workorder-news-modal ref="modalForm" @ok="modalFormOk"></workorder-news-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderNewsModal from './modules/WorkorderNewsModal'
export default {
name: 'WorkorderNewsList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderNewsModal
},
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: 'title'
},
{
title:'公告内容',
align:"center",
dataIndex: 'content',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/workorderNews/workorderNews/list",
delete: "/workorderNews/workorderNews/delete",
deleteBatch: "/workorderNews/workorderNews/deleteBatch",
exportXlsUrl: "/workorderNews/workorderNews/exportXls",
importExcelUrl: "workorderNews/workorderNews/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:'title',text:'公告标题',dictCode:''})
fieldList.push({type:'Text',value:'content',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/workorderNews/vue/modules/WorkorderNewsForm.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="title">
<a-input v-model="model.title" placeholder="请输入公告标题" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="公告内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="content">
<j-editor v-model="model.content" />
</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: 'WorkorderNewsForm',
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: "/workorderNews/workorderNews/add",
edit: "/workorderNews/workorderNews/edit",
queryById: "/workorderNews/workorderNews/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/workorderNews/vue/modules/WorkorderNewsModal.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">
<workorder-news-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-news-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 WorkorderNewsForm from './WorkorderNewsForm'
export default {
name: 'WorkorderNewsModal',
components: {
WorkorderNewsForm
},
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/workorderNews/vue/modules/WorkorderNewsModal.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="关闭">
<workorder-news-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-news-form>
</j-modal>
</template>
<script>
import WorkorderNewsForm from './WorkorderNewsForm'
export default {
name: 'WorkorderNewsModal',
components: {
WorkorderNewsForm
},
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/workorderNews/vue3/WorkorderNews.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderNews/workorderNews/list',
save='/workorderNews/workorderNews/add',
edit='/workorderNews/workorderNews/edit',
deleteOne = '/workorderNews/workorderNews/delete',
deleteBatch = '/workorderNews/workorderNews/deleteBatch',
importExcel = '/workorderNews/workorderNews/importExcel',
exportXls = '/workorderNews/workorderNews/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});
}

+ 34
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/WorkorderNews.data.ts View File

@ -0,0 +1,34 @@
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: 'title'
},
{
title: '公告内容',
align:"center",
dataIndex: 'content',
slots: { customRender: 'htmlSlot' },
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '公告标题',
field: 'title',
component: 'Input',
},
{
label: '公告内容',
field: 'content',
component: 'JCodeEditor', //TODO String后缀暂未添加
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderNews/vue3/WorkorderNewsList.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>
<!-- 表单区域 -->
<WorkorderNewsModal @register="registerModal" @success="handleSuccess"></WorkorderNewsModal>
</div>
</template>
<script lang="ts" name="workorderNews-workorderNews" 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 WorkorderNewsModal from './components/WorkorderNewsModal.vue'
import {columns, searchFormSchema} from './workorderNews.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderNews.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/workorderNews/vue3/components/WorkorderNewsModal.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 '../workorderNews.data';
import {saveOrUpdate} from '../workorderNews.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/workorderRole/controller/WorkorderRoleController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderRole.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.workorderRole.entity.WorkorderRole;
import org.jeecg.modules.workorderRole.service.IWorkorderRoleService;
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-16
* @Version: V1.0
*/
@Api(tags="用户角色表")
@RestController
@RequestMapping("/workorderRole/workorderRole")
@Slf4j
public class WorkorderRoleController extends JeecgController<WorkorderRole, IWorkorderRoleService> {
@Autowired
private IWorkorderRoleService workorderRoleService;
/**
* 分页列表查询
*
* @param workorderRole
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "用户角色表-分页列表查询")
@ApiOperation(value="用户角色表-分页列表查询", notes="用户角色表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderRole>> queryPageList(WorkorderRole workorderRole,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderRole> queryWrapper = QueryGenerator.initQueryWrapper(workorderRole, req.getParameterMap());
Page<WorkorderRole> page = new Page<WorkorderRole>(pageNo, pageSize);
IPage<WorkorderRole> pageList = workorderRoleService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderRole
* @return
*/
@AutoLog(value = "用户角色表-添加")
@ApiOperation(value="用户角色表-添加", notes="用户角色表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderRole workorderRole) {
workorderRoleService.save(workorderRole);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderRole
* @return
*/
@AutoLog(value = "用户角色表-编辑")
@ApiOperation(value="用户角色表-编辑", notes="用户角色表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderRole workorderRole) {
workorderRoleService.updateById(workorderRole);
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) {
workorderRoleService.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.workorderRoleService.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<WorkorderRole> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderRole workorderRole = workorderRoleService.getById(id);
if(workorderRole==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderRole);
}
/**
* 导出excel
*
* @param request
* @param workorderRole
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderRole workorderRole) {
return super.exportXls(request, workorderRole, WorkorderRole.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, WorkorderRole.class);
}
}

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

@ -0,0 +1,54 @@
package org.jeecg.modules.workorderRole.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_role")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_role对象", description="用户角色表")
public class WorkorderRole 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/workorderRole/mapper/WorkorderRoleMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.workorderRole.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.workorderRole.entity.WorkorderRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 用户角色表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface WorkorderRoleMapper extends BaseMapper<WorkorderRole> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/mapper/xml/WorkorderRoleMapper.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.workorderRole.mapper.WorkorderRoleMapper">
</mapper>

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

@ -0,0 +1,14 @@
package org.jeecg.modules.workorderRole.service;
import org.jeecg.modules.workorderRole.entity.WorkorderRole;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 用户角色表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface IWorkorderRoleService extends IService<WorkorderRole> {
}

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

@ -0,0 +1,19 @@
package org.jeecg.modules.workorderRole.service.impl;
import org.jeecg.modules.workorderRole.entity.WorkorderRole;
import org.jeecg.modules.workorderRole.mapper.WorkorderRoleMapper;
import org.jeecg.modules.workorderRole.service.IWorkorderRoleService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 用户角色表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
@Service
public class WorkorderRoleServiceImpl extends ServiceImpl<WorkorderRoleMapper, WorkorderRole> implements IWorkorderRoleService {
}

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderRole/vue/WorkorderRoleList.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>
<workorder-role-modal ref="modalForm" @ok="modalFormOk"></workorder-role-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderRoleModal from './modules/WorkorderRoleModal'
export default {
name: 'WorkorderRoleList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderRoleModal
},
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: "/workorderRole/workorderRole/list",
delete: "/workorderRole/workorderRole/delete",
deleteBatch: "/workorderRole/workorderRole/deleteBatch",
exportXlsUrl: "/workorderRole/workorderRole/exportXls",
importExcelUrl: "workorderRole/workorderRole/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/workorderRole/vue/modules/WorkorderRoleForm.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: 'WorkorderRoleForm',
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: "/workorderRole/workorderRole/add",
edit: "/workorderRole/workorderRole/edit",
queryById: "/workorderRole/workorderRole/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/workorderRole/vue/modules/WorkorderRoleModal.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">
<workorder-role-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-role-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 WorkorderRoleForm from './WorkorderRoleForm'
export default {
name: 'WorkorderRoleModal',
components: {
WorkorderRoleForm
},
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/workorderRole/vue/modules/WorkorderRoleModal.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="关闭">
<workorder-role-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-role-form>
</j-modal>
</template>
<script>
import WorkorderRoleForm from './WorkorderRoleForm'
export default {
name: 'WorkorderRoleModal',
components: {
WorkorderRoleForm
},
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/workorderRole/vue3/WorkorderRole.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderRole/workorderRole/list',
save='/workorderRole/workorderRole/add',
edit='/workorderRole/workorderRole/edit',
deleteOne = '/workorderRole/workorderRole/delete',
deleteBatch = '/workorderRole/workorderRole/deleteBatch',
importExcel = '/workorderRole/workorderRole/importExcel',
exportXls = '/workorderRole/workorderRole/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/workorderRole/vue3/WorkorderRole.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/workorderRole/vue3/WorkorderRoleList.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>
<!-- 表单区域 -->
<WorkorderRoleModal @register="registerModal" @success="handleSuccess"></WorkorderRoleModal>
</div>
</template>
<script lang="ts" name="workorderRole-workorderRole" 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 WorkorderRoleModal from './components/WorkorderRoleModal.vue'
import {columns, searchFormSchema} from './workorderRole.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderRole.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/workorderRole/vue3/components/WorkorderRoleModal.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 '../workorderRole.data';
import {saveOrUpdate} from '../workorderRole.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/workorderStatus/controller/WorkorderStatusController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderStatus.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.workorderStatus.entity.WorkorderStatus;
import org.jeecg.modules.workorderStatus.service.IWorkorderStatusService;
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-16
* @Version: V1.0
*/
@Api(tags="工单状态表")
@RestController
@RequestMapping("/workorderStatus/workorderStatus")
@Slf4j
public class WorkorderStatusController extends JeecgController<WorkorderStatus, IWorkorderStatusService> {
@Autowired
private IWorkorderStatusService workorderStatusService;
/**
* 分页列表查询
*
* @param workorderStatus
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "工单状态表-分页列表查询")
@ApiOperation(value="工单状态表-分页列表查询", notes="工单状态表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderStatus>> queryPageList(WorkorderStatus workorderStatus,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderStatus> queryWrapper = QueryGenerator.initQueryWrapper(workorderStatus, req.getParameterMap());
Page<WorkorderStatus> page = new Page<WorkorderStatus>(pageNo, pageSize);
IPage<WorkorderStatus> pageList = workorderStatusService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderStatus
* @return
*/
@AutoLog(value = "工单状态表-添加")
@ApiOperation(value="工单状态表-添加", notes="工单状态表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderStatus workorderStatus) {
workorderStatusService.save(workorderStatus);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderStatus
* @return
*/
@AutoLog(value = "工单状态表-编辑")
@ApiOperation(value="工单状态表-编辑", notes="工单状态表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderStatus workorderStatus) {
workorderStatusService.updateById(workorderStatus);
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) {
workorderStatusService.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.workorderStatusService.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<WorkorderStatus> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderStatus workorderStatus = workorderStatusService.getById(id);
if(workorderStatus==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderStatus);
}
/**
* 导出excel
*
* @param request
* @param workorderStatus
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderStatus workorderStatus) {
return super.exportXls(request, workorderStatus, WorkorderStatus.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, WorkorderStatus.class);
}
}

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

@ -0,0 +1,54 @@
package org.jeecg.modules.workorderStatus.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_status")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_status对象", description="工单状态表")
public class WorkorderStatus 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/workorderStatus/mapper/WorkorderStatusMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.workorderStatus.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.workorderStatus.entity.WorkorderStatus;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 工单状态表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface WorkorderStatusMapper extends BaseMapper<WorkorderStatus> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/mapper/xml/WorkorderStatusMapper.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.workorderStatus.mapper.WorkorderStatusMapper">
</mapper>

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

@ -0,0 +1,14 @@
package org.jeecg.modules.workorderStatus.service;
import org.jeecg.modules.workorderStatus.entity.WorkorderStatus;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 工单状态表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface IWorkorderStatusService extends IService<WorkorderStatus> {
}

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

@ -0,0 +1,19 @@
package org.jeecg.modules.workorderStatus.service.impl;
import org.jeecg.modules.workorderStatus.entity.WorkorderStatus;
import org.jeecg.modules.workorderStatus.mapper.WorkorderStatusMapper;
import org.jeecg.modules.workorderStatus.service.IWorkorderStatusService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 工单状态表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
@Service
public class WorkorderStatusServiceImpl extends ServiceImpl<WorkorderStatusMapper, WorkorderStatus> implements IWorkorderStatusService {
}

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderStatus/vue/WorkorderStatusList.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>
<workorder-status-modal ref="modalForm" @ok="modalFormOk"></workorder-status-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderStatusModal from './modules/WorkorderStatusModal'
export default {
name: 'WorkorderStatusList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderStatusModal
},
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: "/workorderStatus/workorderStatus/list",
delete: "/workorderStatus/workorderStatus/delete",
deleteBatch: "/workorderStatus/workorderStatus/deleteBatch",
exportXlsUrl: "/workorderStatus/workorderStatus/exportXls",
importExcelUrl: "workorderStatus/workorderStatus/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/workorderStatus/vue/modules/WorkorderStatusForm.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: 'WorkorderStatusForm',
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: "/workorderStatus/workorderStatus/add",
edit: "/workorderStatus/workorderStatus/edit",
queryById: "/workorderStatus/workorderStatus/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/workorderStatus/vue/modules/WorkorderStatusModal.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">
<workorder-status-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-status-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 WorkorderStatusForm from './WorkorderStatusForm'
export default {
name: 'WorkorderStatusModal',
components: {
WorkorderStatusForm
},
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/workorderStatus/vue/modules/WorkorderStatusModal.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="关闭">
<workorder-status-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-status-form>
</j-modal>
</template>
<script>
import WorkorderStatusForm from './WorkorderStatusForm'
export default {
name: 'WorkorderStatusModal',
components: {
WorkorderStatusForm
},
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/workorderStatus/vue3/WorkorderStatus.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderStatus/workorderStatus/list',
save='/workorderStatus/workorderStatus/add',
edit='/workorderStatus/workorderStatus/edit',
deleteOne = '/workorderStatus/workorderStatus/delete',
deleteBatch = '/workorderStatus/workorderStatus/deleteBatch',
importExcel = '/workorderStatus/workorderStatus/importExcel',
exportXls = '/workorderStatus/workorderStatus/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/workorderStatus/vue3/WorkorderStatus.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/workorderStatus/vue3/WorkorderStatusList.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>
<!-- 表单区域 -->
<WorkorderStatusModal @register="registerModal" @success="handleSuccess"></WorkorderStatusModal>
</div>
</template>
<script lang="ts" name="workorderStatus-workorderStatus" 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 WorkorderStatusModal from './components/WorkorderStatusModal.vue'
import {columns, searchFormSchema} from './workorderStatus.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderStatus.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/workorderStatus/vue3/components/WorkorderStatusModal.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 '../workorderStatus.data';
import {saveOrUpdate} from '../workorderStatus.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/workorderTemplate/controller/WorkorderTemplateController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderTemplate.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.workorderTemplate.entity.WorkorderTemplate;
import org.jeecg.modules.workorderTemplate.service.IWorkorderTemplateService;
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-16
* @Version: V1.0
*/
@Api(tags="工单信息表")
@RestController
@RequestMapping("/workorderTemplate/workorderTemplate")
@Slf4j
public class WorkorderTemplateController extends JeecgController<WorkorderTemplate, IWorkorderTemplateService> {
@Autowired
private IWorkorderTemplateService workorderTemplateService;
/**
* 分页列表查询
*
* @param workorderTemplate
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "工单信息表-分页列表查询")
@ApiOperation(value="工单信息表-分页列表查询", notes="工单信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderTemplate>> queryPageList(WorkorderTemplate workorderTemplate,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderTemplate> queryWrapper = QueryGenerator.initQueryWrapper(workorderTemplate, req.getParameterMap());
Page<WorkorderTemplate> page = new Page<WorkorderTemplate>(pageNo, pageSize);
IPage<WorkorderTemplate> pageList = workorderTemplateService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderTemplate
* @return
*/
@AutoLog(value = "工单信息表-添加")
@ApiOperation(value="工单信息表-添加", notes="工单信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderTemplate workorderTemplate) {
workorderTemplateService.save(workorderTemplate);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderTemplate
* @return
*/
@AutoLog(value = "工单信息表-编辑")
@ApiOperation(value="工单信息表-编辑", notes="工单信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderTemplate workorderTemplate) {
workorderTemplateService.updateById(workorderTemplate);
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) {
workorderTemplateService.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.workorderTemplateService.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<WorkorderTemplate> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderTemplate workorderTemplate = workorderTemplateService.getById(id);
if(workorderTemplate==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderTemplate);
}
/**
* 导出excel
*
* @param request
* @param workorderTemplate
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderTemplate workorderTemplate) {
return super.exportXls(request, workorderTemplate, WorkorderTemplate.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, WorkorderTemplate.class);
}
}

+ 91
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/entity/WorkorderTemplate.java View File

@ -0,0 +1,91 @@
package org.jeecg.modules.workorderTemplate.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_template")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_template对象", description="工单信息表")
public class WorkorderTemplate 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 taskNo;
/**担当信息*/
@Excel(name = "担当信息", width = 15)
@ApiModelProperty(value = "担当信息")
private java.lang.String responsibler;
/**机型信息*/
@Excel(name = "机型信息", width = 15)
@ApiModelProperty(value = "机型信息")
private java.lang.String model;
/**数量*/
@Excel(name = "数量", width = 15)
@ApiModelProperty(value = "数量")
private java.lang.Integer number;
/**备注*/
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private java.lang.String remark;
/**关联状态id*/
@Excel(name = "关联状态id", width = 15, dictTable = "workorder_status", dicText = "name", dicCode = "id")
@Dict(dictTable = "workorder_status", dicText = "name", dicCode = "id")
@ApiModelProperty(value = "关联状态id")
private java.lang.String statusId;
/**选配*/
@Excel(name = "选配", width = 15)
@ApiModelProperty(value = "选配")
private java.lang.String choice;
/**工序1*/
@Excel(name = "工序1", width = 15)
@ApiModelProperty(value = "工序1")
private java.lang.String stepone;
/**工序2*/
@Excel(name = "工序2", width = 15)
@ApiModelProperty(value = "工序2")
private java.lang.String steptwo;
/**总成*/
@Excel(name = "总成", width = 15)
@ApiModelProperty(value = "总成")
private java.lang.String assembly;
}

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

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

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/mapper/xml/WorkorderTemplateMapper.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.workorderTemplate.mapper.WorkorderTemplateMapper">
</mapper>

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

@ -0,0 +1,14 @@
package org.jeecg.modules.workorderTemplate.service;
import org.jeecg.modules.workorderTemplate.entity.WorkorderTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 工单信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface IWorkorderTemplateService extends IService<WorkorderTemplate> {
}

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

@ -0,0 +1,19 @@
package org.jeecg.modules.workorderTemplate.service.impl;
import org.jeecg.modules.workorderTemplate.entity.WorkorderTemplate;
import org.jeecg.modules.workorderTemplate.mapper.WorkorderTemplateMapper;
import org.jeecg.modules.workorderTemplate.service.IWorkorderTemplateService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 工单信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
@Service
public class WorkorderTemplateServiceImpl extends ServiceImpl<WorkorderTemplateMapper, WorkorderTemplate> implements IWorkorderTemplateService {
}

+ 230
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/WorkorderTemplateList.vue View File

@ -0,0 +1,230 @@
<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>
<workorder-template-modal ref="modalForm" @ok="modalFormOk"></workorder-template-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderTemplateModal from './modules/WorkorderTemplateModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
export default {
name: 'WorkorderTemplateList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderTemplateModal
},
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: 'taskNo'
},
{
title:'担当信息',
align:"center",
dataIndex: 'responsibler'
},
{
title:'机型信息',
align:"center",
dataIndex: 'model'
},
{
title:'数量',
align:"center",
dataIndex: 'number'
},
{
title:'备注',
align:"center",
dataIndex: 'remark'
},
{
title:'关联状态id',
align:"center",
dataIndex: 'statusId_dictText'
},
{
title:'选配',
align:"center",
dataIndex: 'choice',
scopedSlots: {customRender: 'fileSlot'}
},
{
title:'工序1',
align:"center",
dataIndex: 'stepone',
scopedSlots: {customRender: 'fileSlot'}
},
{
title:'工序2',
align:"center",
dataIndex: 'steptwo',
scopedSlots: {customRender: 'fileSlot'}
},
{
title:'总成',
align:"center",
dataIndex: 'assembly',
scopedSlots: {customRender: 'fileSlot'}
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/workorderTemplate/workorderTemplate/list",
delete: "/workorderTemplate/workorderTemplate/delete",
deleteBatch: "/workorderTemplate/workorderTemplate/deleteBatch",
exportXlsUrl: "/workorderTemplate/workorderTemplate/exportXls",
importExcelUrl: "workorderTemplate/workorderTemplate/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:'taskNo',text:'任务号',dictCode:''})
fieldList.push({type:'string',value:'responsibler',text:'担当信息',dictCode:''})
fieldList.push({type:'string',value:'model',text:'机型信息',dictCode:''})
fieldList.push({type:'int',value:'number',text:'数量',dictCode:''})
fieldList.push({type:'Text',value:'remark',text:'备注',dictCode:''})
fieldList.push({type:'string',value:'statusId',text:'关联状态id',dictCode:"workorder_status,name,id"})
fieldList.push({type:'string',value:'choice',text:'选配',dictCode:''})
fieldList.push({type:'string',value:'stepone',text:'工序1',dictCode:''})
fieldList.push({type:'string',value:'steptwo',text:'工序2',dictCode:''})
fieldList.push({type:'string',value:'assembly',text:'总成',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 149
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue/modules/WorkorderTemplateForm.vue View File

@ -0,0 +1,149 @@
<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="taskNo">
<a-input v-model="model.taskNo" placeholder="请输入任务号" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="担当信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responsibler">
<a-input v-model="model.responsibler" placeholder="请输入担当信息" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="机型信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="model">
<a-textarea v-model="model.model" rows="4" placeholder="请输入机型信息" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="number">
<a-input-number v-model="model.number" placeholder="请输入数量" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
<a-textarea v-model="model.remark" rows="4" placeholder="请输入备注" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="关联状态id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="statusId">
<j-dict-select-tag type="list" v-model="model.statusId" dictCode="workorder_status,name,id" placeholder="请选择关联状态id" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="选配" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="choice">
<j-upload v-model="model.choice" ></j-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="工序1" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stepone">
<j-upload v-model="model.stepone" ></j-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="工序2" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="steptwo">
<j-upload v-model="model.steptwo" ></j-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="总成" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="assembly">
<j-upload v-model="model.assembly" ></j-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: 'WorkorderTemplateForm',
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: "/workorderTemplate/workorderTemplate/add",
edit: "/workorderTemplate/workorderTemplate/edit",
queryById: "/workorderTemplate/workorderTemplate/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/workorderTemplate/vue/modules/WorkorderTemplateModal.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">
<workorder-template-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-template-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 WorkorderTemplateForm from './WorkorderTemplateForm'
export default {
name: 'WorkorderTemplateModal',
components: {
WorkorderTemplateForm
},
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/workorderTemplate/vue/modules/WorkorderTemplateModal.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="关闭">
<workorder-template-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-template-form>
</j-modal>
</template>
<script>
import WorkorderTemplateForm from './WorkorderTemplateForm'
export default {
name: 'WorkorderTemplateModal',
components: {
WorkorderTemplateForm
},
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/workorderTemplate/vue3/WorkorderTemplate.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderTemplate/workorderTemplate/list',
save='/workorderTemplate/workorderTemplate/add',
edit='/workorderTemplate/workorderTemplate/edit',
deleteOne = '/workorderTemplate/workorderTemplate/delete',
deleteBatch = '/workorderTemplate/workorderTemplate/deleteBatch',
importExcel = '/workorderTemplate/workorderTemplate/importExcel',
exportXls = '/workorderTemplate/workorderTemplate/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});
}

+ 128
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/WorkorderTemplate.data.ts View File

@ -0,0 +1,128 @@
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: 'taskNo'
},
{
title: '担当信息',
align:"center",
dataIndex: 'responsibler'
},
{
title: '机型信息',
align:"center",
dataIndex: 'model'
},
{
title: '数量',
align:"center",
dataIndex: 'number'
},
{
title: '备注',
align:"center",
dataIndex: 'remark'
},
{
title: '关联状态id',
align:"center",
dataIndex: 'statusId_dictText'
},
{
title: '选配',
align:"center",
dataIndex: 'choice',
slots: { customRender: 'fileSlot' },
},
{
title: '工序1',
align:"center",
dataIndex: 'stepone',
slots: { customRender: 'fileSlot' },
},
{
title: '工序2',
align:"center",
dataIndex: 'steptwo',
slots: { customRender: 'fileSlot' },
},
{
title: '总成',
align:"center",
dataIndex: 'assembly',
slots: { customRender: 'fileSlot' },
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '任务号',
field: 'taskNo',
component: 'Input',
},
{
label: '担当信息',
field: 'responsibler',
component: 'Input',
},
{
label: '机型信息',
field: 'model',
component: 'InputTextArea',//TODO 注意string转换问题
},
{
label: '数量',
field: 'number',
component: 'InputNumber',
},
{
label: '备注',
field: 'remark',
component: 'InputTextArea',//TODO 注意string转换问题
},
{
label: '关联状态id',
field: 'statusId',
component: 'JDictSelectTag',
componentProps:{
dictCode:"workorder_status,name,id"
},
},
{
label: '选配',
field: 'choice',
component: 'JUpload',
componentProps:{
},
},
{
label: '工序1',
field: 'stepone',
component: 'JUpload',
componentProps:{
},
},
{
label: '工序2',
field: 'steptwo',
component: 'JUpload',
componentProps:{
},
},
{
label: '总成',
field: 'assembly',
component: 'JUpload',
componentProps:{
},
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderTemplate/vue3/WorkorderTemplateList.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>
<!-- 表单区域 -->
<WorkorderTemplateModal @register="registerModal" @success="handleSuccess"></WorkorderTemplateModal>
</div>
</template>
<script lang="ts" name="workorderTemplate-workorderTemplate" 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 WorkorderTemplateModal from './components/WorkorderTemplateModal.vue'
import {columns, searchFormSchema} from './workorderTemplate.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderTemplate.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/workorderTemplate/vue3/components/WorkorderTemplateModal.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 '../workorderTemplate.data';
import {saveOrUpdate} from '../workorderTemplate.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/workorderUser/controller/WorkorderUserController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.workorderUser.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.workorderUser.entity.WorkorderUser;
import org.jeecg.modules.workorderUser.service.IWorkorderUserService;
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-16
* @Version: V1.0
*/
@Api(tags="用户信息表")
@RestController
@RequestMapping("/workorderUser/workorderUser")
@Slf4j
public class WorkorderUserController extends JeecgController<WorkorderUser, IWorkorderUserService> {
@Autowired
private IWorkorderUserService workorderUserService;
/**
* 分页列表查询
*
* @param workorderUser
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "用户信息表-分页列表查询")
@ApiOperation(value="用户信息表-分页列表查询", notes="用户信息表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<WorkorderUser>> queryPageList(WorkorderUser workorderUser,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<WorkorderUser> queryWrapper = QueryGenerator.initQueryWrapper(workorderUser, req.getParameterMap());
Page<WorkorderUser> page = new Page<WorkorderUser>(pageNo, pageSize);
IPage<WorkorderUser> pageList = workorderUserService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param workorderUser
* @return
*/
@AutoLog(value = "用户信息表-添加")
@ApiOperation(value="用户信息表-添加", notes="用户信息表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody WorkorderUser workorderUser) {
workorderUserService.save(workorderUser);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param workorderUser
* @return
*/
@AutoLog(value = "用户信息表-编辑")
@ApiOperation(value="用户信息表-编辑", notes="用户信息表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody WorkorderUser workorderUser) {
workorderUserService.updateById(workorderUser);
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) {
workorderUserService.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.workorderUserService.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<WorkorderUser> queryById(@RequestParam(name="id",required=true) String id) {
WorkorderUser workorderUser = workorderUserService.getById(id);
if(workorderUser==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workorderUser);
}
/**
* 导出excel
*
* @param request
* @param workorderUser
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, WorkorderUser workorderUser) {
return super.exportXls(request, workorderUser, WorkorderUser.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, WorkorderUser.class);
}
}

+ 67
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/entity/WorkorderUser.java View File

@ -0,0 +1,67 @@
package org.jeecg.modules.workorderUser.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-16
* @Version: V1.0
*/
@Data
@TableName("workorder_user")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="workorder_user对象", description="用户信息表")
public class WorkorderUser 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 password;
/**用户头像*/
@Excel(name = "用户头像", width = 15)
@ApiModelProperty(value = "用户头像")
private java.lang.String image;
/**关联角色id*/
@Excel(name = "关联角色id", width = 15, dictTable = "workorder_role", dicText = "name", dicCode = "id")
@Dict(dictTable = "workorder_role", dicText = "name", dicCode = "id")
@ApiModelProperty(value = "关联角色id")
private java.lang.String roleId;
}

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

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

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/mapper/xml/WorkorderUserMapper.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.workorderUser.mapper.WorkorderUserMapper">
</mapper>

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

@ -0,0 +1,14 @@
package org.jeecg.modules.workorderUser.service;
import org.jeecg.modules.workorderUser.entity.WorkorderUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 用户信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
public interface IWorkorderUserService extends IService<WorkorderUser> {
}

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

@ -0,0 +1,19 @@
package org.jeecg.modules.workorderUser.service.impl;
import org.jeecg.modules.workorderUser.entity.WorkorderUser;
import org.jeecg.modules.workorderUser.mapper.WorkorderUserMapper;
import org.jeecg.modules.workorderUser.service.IWorkorderUserService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 用户信息表
* @Author: jeecg-boot
* @Date: 2024-11-16
* @Version: V1.0
*/
@Service
public class WorkorderUserServiceImpl extends ServiceImpl<WorkorderUserMapper, WorkorderUser> implements IWorkorderUserService {
}

+ 191
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/WorkorderUserList.vue View File

@ -0,0 +1,191 @@
<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>
<workorder-user-modal ref="modalForm" @ok="modalFormOk"></workorder-user-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import WorkorderUserModal from './modules/WorkorderUserModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
export default {
name: 'WorkorderUserList',
mixins:[JeecgListMixin, mixinDevice],
components: {
WorkorderUserModal
},
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: 'password'
},
{
title:'用户头像',
align:"center",
dataIndex: 'image',
scopedSlots: {customRender: 'imgSlot'}
},
{
title:'关联角色id',
align:"center",
dataIndex: 'roleId_dictText'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/workorderUser/workorderUser/list",
delete: "/workorderUser/workorderUser/delete",
deleteBatch: "/workorderUser/workorderUser/deleteBatch",
exportXlsUrl: "/workorderUser/workorderUser/exportXls",
importExcelUrl: "workorderUser/workorderUser/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:'password',text:'用户密码',dictCode:''})
fieldList.push({type:'string',value:'image',text:'用户头像',dictCode:''})
fieldList.push({type:'string',value:'roleId',text:'关联角色id',dictCode:"workorder_role,name,id"})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 119
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue/modules/WorkorderUserForm.vue View File

@ -0,0 +1,119 @@
<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="password">
<a-input v-model="model.password" 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-col :span="24">
<a-form-model-item label="关联角色id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="roleId">
<j-dict-select-tag type="list" v-model="model.roleId" dictCode="workorder_role,name,id" placeholder="请选择关联角色id" />
</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: 'WorkorderUserForm',
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: "/workorderUser/workorderUser/add",
edit: "/workorderUser/workorderUser/edit",
queryById: "/workorderUser/workorderUser/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/workorderUser/vue/modules/WorkorderUserModal.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">
<workorder-user-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></workorder-user-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 WorkorderUserForm from './WorkorderUserForm'
export default {
name: 'WorkorderUserModal',
components: {
WorkorderUserForm
},
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/workorderUser/vue/modules/WorkorderUserModal.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="关闭">
<workorder-user-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></workorder-user-form>
</j-modal>
</template>
<script>
import WorkorderUserForm from './WorkorderUserForm'
export default {
name: 'WorkorderUserModal',
components: {
WorkorderUserForm
},
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/workorderUser/vue3/WorkorderUser.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/workorderUser/workorderUser/list',
save='/workorderUser/workorderUser/add',
edit='/workorderUser/workorderUser/edit',
deleteOne = '/workorderUser/workorderUser/delete',
deleteBatch = '/workorderUser/workorderUser/deleteBatch',
importExcel = '/workorderUser/workorderUser/importExcel',
exportXls = '/workorderUser/workorderUser/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});
}

+ 59
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/WorkorderUser.data.ts View File

@ -0,0 +1,59 @@
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: 'password'
},
{
title: '用户头像',
align:"center",
dataIndex: 'image',
customRender:render.renderAvatar,
},
{
title: '关联角色id',
align:"center",
dataIndex: 'roleId_dictText'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '用户名称',
field: 'name',
component: 'Input',
},
{
label: '用户密码',
field: 'password',
component: 'Input',
},
{
label: '用户头像',
field: 'image',
component: 'JImageUpload',
componentProps:{
},
},
{
label: '关联角色id',
field: 'roleId',
component: 'JDictSelectTag',
componentProps:{
dictCode:"workorder_role,name,id"
},
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/workorderUser/vue3/WorkorderUserList.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>
<!-- 表单区域 -->
<WorkorderUserModal @register="registerModal" @success="handleSuccess"></WorkorderUserModal>
</div>
</template>
<script lang="ts" name="workorderUser-workorderUser" 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 WorkorderUserModal from './components/WorkorderUserModal.vue'
import {columns, searchFormSchema} from './workorderUser.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './workorderUser.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/workorderUser/vue3/components/WorkorderUserModal.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 '../workorderUser.data';
import {saveOrUpdate} from '../workorderUser.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>

Loading…
Cancel
Save