Browse Source

梳理模块依赖关系,新增基本参数管理及各项参数

lw 1 year ago
parent
commit
42b6f643ae
100 changed files with 7309 additions and 42 deletions
  1. 7 2
      jeecg-module-system/jeecg-system-api/jeecg-system-local-api/pom.xml
  2. 0 31
      jeecg-module-system/jeecg-system-start/pom.xml
  3. 0 9
      module_base/pom.xml
  4. 177 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/controller/ElecfeeAddController.java
  5. 83 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/entity/ElecfeeAdd.java
  6. 17 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/mapper/ElecfeeAddMapper.java
  7. 5 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/mapper/xml/ElecfeeAddMapper.xml
  8. 14 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/service/IElecfeeAddService.java
  9. 19 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/service/impl/ElecfeeAddServiceImpl.java
  10. 213 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/ElecfeeAddList.vue
  11. 26 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/ElecfeeAdd_menu_insert.sql
  12. 137 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddForm.vue
  13. 84 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddModal.Style#Drawer.vue
  14. 60 0
      module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddModal.vue
  15. 177 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/controller/ElecfeeBaseController.java
  16. 87 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/entity/ElecfeeBase.java
  17. 17 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/mapper/ElecfeeBaseMapper.java
  18. 5 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/mapper/xml/ElecfeeBaseMapper.xml
  19. 14 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/service/IElecfeeBaseService.java
  20. 19 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/service/impl/ElecfeeBaseServiceImpl.java
  21. 219 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/ElecfeeBaseList.vue
  22. 26 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/ElecfeeBase_menu_insert.sql
  23. 142 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseForm.vue
  24. 84 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseModal.Style#Drawer.vue
  25. 60 0
      module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseModal.vue
  26. 177 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/controller/ElecfeeDegreeController.java
  27. 83 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/entity/ElecfeeDegree.java
  28. 17 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/mapper/ElecfeeDegreeMapper.java
  29. 5 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/mapper/xml/ElecfeeDegreeMapper.xml
  30. 14 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/service/IElecfeeDegreeService.java
  31. 19 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/service/impl/ElecfeeDegreeServiceImpl.java
  32. 213 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/ElecfeeDegreeList.vue
  33. 26 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/ElecfeeDegree_menu_insert.sql
  34. 137 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeForm.vue
  35. 84 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeModal.Style#Drawer.vue
  36. 60 0
      module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeModal.vue
  37. 177 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/controller/ElecfeeRatioController.java
  38. 87 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/entity/ElecfeeRatio.java
  39. 17 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/mapper/ElecfeeRatioMapper.java
  40. 5 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/mapper/xml/ElecfeeRatioMapper.xml
  41. 14 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/service/IElecfeeRatioService.java
  42. 19 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/service/impl/ElecfeeRatioServiceImpl.java
  43. 219 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/ElecfeeRatioList.vue
  44. 26 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/ElecfeeRatio_menu_insert.sql
  45. 142 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioForm.vue
  46. 84 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioModal.Style#Drawer.vue
  47. 60 0
      module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioModal.vue
  48. 177 0
      module_base/src/main/java/org/jeecg/modules/energyItem/controller/EnergyItemController.java
  49. 67 0
      module_base/src/main/java/org/jeecg/modules/energyItem/entity/EnergyItem.java
  50. 17 0
      module_base/src/main/java/org/jeecg/modules/energyItem/mapper/EnergyItemMapper.java
  51. 5 0
      module_base/src/main/java/org/jeecg/modules/energyItem/mapper/xml/EnergyItemMapper.xml
  52. 14 0
      module_base/src/main/java/org/jeecg/modules/energyItem/service/IEnergyItemService.java
  53. 19 0
      module_base/src/main/java/org/jeecg/modules/energyItem/service/impl/EnergyItemServiceImpl.java
  54. 189 0
      module_base/src/main/java/org/jeecg/modules/energyItem/vue/EnergyItemList.vue
  55. 26 0
      module_base/src/main/java/org/jeecg/modules/energyItem/vue/EnergyItem_menu_insert.sql
  56. 122 0
      module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemForm.vue
  57. 84 0
      module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemModal.Style#Drawer.vue
  58. 60 0
      module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemModal.vue
  59. 177 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/controller/EnergyQuotaController.java
  60. 105 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/entity/EnergyQuota.java
  61. 17 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/mapper/EnergyQuotaMapper.java
  62. 5 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/mapper/xml/EnergyQuotaMapper.xml
  63. 14 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/service/IEnergyQuotaService.java
  64. 19 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/service/impl/EnergyQuotaServiceImpl.java
  65. 246 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/vue/EnergyQuotaList.vue
  66. 26 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/vue/EnergyQuota_menu_insert.sql
  67. 167 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaForm.vue
  68. 84 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaModal.Style#Drawer.vue
  69. 60 0
      module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaModal.vue
  70. 177 0
      module_base/src/main/java/org/jeecg/modules/energyRate/controller/EnergyRateController.java
  71. 87 0
      module_base/src/main/java/org/jeecg/modules/energyRate/entity/EnergyRate.java
  72. 17 0
      module_base/src/main/java/org/jeecg/modules/energyRate/mapper/EnergyRateMapper.java
  73. 5 0
      module_base/src/main/java/org/jeecg/modules/energyRate/mapper/xml/EnergyRateMapper.xml
  74. 14 0
      module_base/src/main/java/org/jeecg/modules/energyRate/service/IEnergyRateService.java
  75. 19 0
      module_base/src/main/java/org/jeecg/modules/energyRate/service/impl/EnergyRateServiceImpl.java
  76. 219 0
      module_base/src/main/java/org/jeecg/modules/energyRate/vue/EnergyRateList.vue
  77. 26 0
      module_base/src/main/java/org/jeecg/modules/energyRate/vue/EnergyRate_menu_insert.sql
  78. 142 0
      module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateForm.vue
  79. 84 0
      module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateModal.Style#Drawer.vue
  80. 60 0
      module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateModal.vue
  81. 177 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/controller/EnergyRateDetailController.java
  82. 71 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/entity/EnergyRateDetail.java
  83. 17 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/mapper/EnergyRateDetailMapper.java
  84. 5 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/mapper/xml/EnergyRateDetailMapper.xml
  85. 14 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/service/IEnergyRateDetailService.java
  86. 19 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/service/impl/EnergyRateDetailServiceImpl.java
  87. 219 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/EnergyRateDetailList.vue
  88. 26 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/EnergyRateDetail_menu_insert.sql
  89. 145 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailForm.vue
  90. 84 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailModal.Style#Drawer.vue
  91. 60 0
      module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailModal.vue
  92. 188 0
      module_base/src/main/java/org/jeecg/modules/energyType/controller/EnergyTypeController.java
  93. 75 0
      module_base/src/main/java/org/jeecg/modules/energyType/entity/EnergyType.java
  94. 17 0
      module_base/src/main/java/org/jeecg/modules/energyType/mapper/EnergyTypeMapper.java
  95. 5 0
      module_base/src/main/java/org/jeecg/modules/energyType/mapper/xml/EnergyTypeMapper.xml
  96. 14 0
      module_base/src/main/java/org/jeecg/modules/energyType/service/IEnergyTypeService.java
  97. 19 0
      module_base/src/main/java/org/jeecg/modules/energyType/service/impl/EnergyTypeServiceImpl.java
  98. 201 0
      module_base/src/main/java/org/jeecg/modules/energyType/vue/EnergyTypeList.vue
  99. 26 0
      module_base/src/main/java/org/jeecg/modules/energyType/vue/EnergyType_menu_insert.sql
  100. 0 0
      module_base/src/main/java/org/jeecg/modules/energyType/vue/modules/EnergyTypeForm.vue

+ 7 - 2
jeecg-module-system/jeecg-system-api/jeecg-system-local-api/pom.xml

@@ -10,5 +10,10 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>jeecg-system-local-api</artifactId>
-
-</project>
+    <dependencies>
+        <dependency>
+            <groupId>org.jeecgframework.boot</groupId>
+            <artifactId>jeecg-boot-base-core</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 0 - 31
jeecg-module-system/jeecg-system-start/pom.xml

@@ -10,46 +10,15 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>jeecg-system-start</artifactId>
-
     <dependencies>
-        <!-- SYSTEM 系统管理模块 -->
-        <dependency>
-            <groupId>org.jeecgframework.boot</groupId>
-            <artifactId>jeecg-system-biz</artifactId>
-            <version>${jeecgboot.version}</version>
-        </dependency>
-        <!-- DEMO 示例模块 -->
-        <dependency>
-            <groupId>org.jeecgframework.boot</groupId>
-            <artifactId>jeecg-module-demo</artifactId>
-            <version>${jeecgboot.version}</version>
-        </dependency>
-
-        <!-- 运维module_cmms -->
         <dependency>
             <groupId>org.jeecgframework.boot</groupId>
             <artifactId>module_cmms</artifactId>
-            <version>${jeecgboot.version}</version>
         </dependency>
-        <!-- module_tpm 模块 -->
-        <dependency>
-            <groupId>org.jeecgframework.boot</groupId>
-            <artifactId>module_tpm</artifactId>
-            <version>${jeecgboot.version}</version>
-        </dependency>
-        <!-- module_base 模块 -->
-        <dependency>
-            <groupId>org.jeecgframework.boot</groupId>
-            <artifactId>module_base</artifactId>
-            <version>${jeecgboot.version}</version>
-        </dependency>
-        <!-- module_ems 模块 -->
         <dependency>
             <groupId>org.jeecgframework.boot</groupId>
             <artifactId>module_ems</artifactId>
-            <version>${jeecgboot.version}</version>
         </dependency>
-
     </dependencies>
 
     <build>

+ 0 - 9
module_base/pom.xml

@@ -10,17 +10,11 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>module_base</artifactId>
-
     <dependencies>
         <dependency>
             <groupId>org.jeecgframework.boot</groupId>
-            <artifactId>jeecg-boot-base-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.jeecgframework.boot</groupId>
             <artifactId>jeecg-system-biz</artifactId>
         </dependency>
-
         <!--  mapstruct      -->
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -42,9 +36,6 @@
     <properties>
         <!-- 版本依赖 -->
         <mapstruct.version>1.4.2.Final</mapstruct.version>
-
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
     </properties>
 
 </project>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/controller/ElecfeeAddController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.elecfeeAdd.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.elecfeeAdd.entity.ElecfeeAdd;
+import org.jeecg.modules.elecfeeAdd.service.IElecfeeAddService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="附加费")
+@RestController
+@RequestMapping("/elecfeeAdd/elecfeeAdd")
+@Slf4j
+public class ElecfeeAddController extends JeecgController<ElecfeeAdd, IElecfeeAddService> {
+	@Autowired
+	private IElecfeeAddService elecfeeAddService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param elecfeeAdd
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "附加费-分页列表查询")
+	@ApiOperation(value="附加费-分页列表查询", notes="附加费-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ElecfeeAdd>> queryPageList(ElecfeeAdd elecfeeAdd,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ElecfeeAdd> queryWrapper = QueryGenerator.initQueryWrapper(elecfeeAdd, req.getParameterMap());
+		Page<ElecfeeAdd> page = new Page<ElecfeeAdd>(pageNo, pageSize);
+		IPage<ElecfeeAdd> pageList = elecfeeAddService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param elecfeeAdd
+	 * @return
+	 */
+	@AutoLog(value = "附加费-添加")
+	@ApiOperation(value="附加费-添加", notes="附加费-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_add:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ElecfeeAdd elecfeeAdd) {
+		elecfeeAddService.save(elecfeeAdd);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param elecfeeAdd
+	 * @return
+	 */
+	@AutoLog(value = "附加费-编辑")
+	@ApiOperation(value="附加费-编辑", notes="附加费-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_add:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ElecfeeAdd elecfeeAdd) {
+		elecfeeAddService.updateById(elecfeeAdd);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "附加费-通过id删除")
+	@ApiOperation(value="附加费-通过id删除", notes="附加费-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_add:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		elecfeeAddService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "附加费-批量删除")
+	@ApiOperation(value="附加费-批量删除", notes="附加费-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_add:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.elecfeeAddService.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<ElecfeeAdd> queryById(@RequestParam(name="id",required=true) String id) {
+		ElecfeeAdd elecfeeAdd = elecfeeAddService.getById(id);
+		if(elecfeeAdd==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(elecfeeAdd);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param elecfeeAdd
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_elecfee_add:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ElecfeeAdd elecfeeAdd) {
+        return super.exportXls(request, elecfeeAdd, ElecfeeAdd.class, "附加费");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_elecfee_add:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ElecfeeAdd.class);
+    }
+
+}

+ 83 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/entity/ElecfeeAdd.java

@@ -0,0 +1,83 @@
+package org.jeecg.modules.elecfeeAdd.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_elecfee_add")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_elecfee_add对象", description="附加费")
+public class ElecfeeAdd implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**附加费ID*/
+	@Excel(name = "附加费ID", width = 15)
+    @ApiModelProperty(value = "附加费ID")
+    private Long elecfeeaddid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**部门ID*/
+	@Excel(name = "部门ID", width = 15)
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptid;
+	/**费用类别*/
+	@Excel(name = "费用类别", width = 15)
+    @ApiModelProperty(value = "费用类别")
+    private String addtype;
+	/**电价(元/kw)*/
+	@Excel(name = "电价(元/kw)", width = 15)
+    @ApiModelProperty(value = "电价(元/kw)")
+    private Double price;
+	/**开始时间*/
+	@Excel(name = "开始时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "开始时间")
+    private Date begintime;
+	/**结束时间*/
+	@Excel(name = "结束时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结束时间")
+    private Date endtime;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/mapper/ElecfeeAddMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.elecfeeAdd.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.elecfeeAdd.entity.ElecfeeAdd;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 附加费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface ElecfeeAddMapper extends BaseMapper<ElecfeeAdd> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/mapper/xml/ElecfeeAddMapper.xml

@@ -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.elecfeeAdd.mapper.ElecfeeAddMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/service/IElecfeeAddService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.elecfeeAdd.service;
+
+import org.jeecg.modules.elecfeeAdd.entity.ElecfeeAdd;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 附加费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IElecfeeAddService extends IService<ElecfeeAdd> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/service/impl/ElecfeeAddServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.elecfeeAdd.service.impl;
+
+import org.jeecg.modules.elecfeeAdd.entity.ElecfeeAdd;
+import org.jeecg.modules.elecfeeAdd.mapper.ElecfeeAddMapper;
+import org.jeecg.modules.elecfeeAdd.service.IElecfeeAddService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 附加费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class ElecfeeAddServiceImpl extends ServiceImpl<ElecfeeAddMapper, ElecfeeAdd> implements IElecfeeAddService {
+
+}

+ 213 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/ElecfeeAddList.vue

@@ -0,0 +1,213 @@
+<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>
+
+    <elecfee-add-modal ref="modalForm" @ok="modalFormOk"></elecfee-add-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ElecfeeAddModal from './modules/ElecfeeAddModal.vue'
+
+  export default {
+    name: 'ElecfeeAddList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ElecfeeAddModal
+    },
+    data () {
+      return {
+        description: '附加费管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'附加费ID',
+            align:"center",
+            dataIndex: 'elecfeeaddid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'部门ID',
+            align:"center",
+            dataIndex: 'deptid'
+          },
+          {
+            title:'费用类别',
+            align:"center",
+            dataIndex: 'addtype'
+          },
+          {
+            title:'电价(元/kw)',
+            align:"center",
+            dataIndex: 'price'
+          },
+          {
+            title:'开始时间',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'结束时间',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/elecfeeAdd/elecfeeAdd/list",
+          delete: "/elecfeeAdd/elecfeeAdd/delete",
+          deleteBatch: "/elecfeeAdd/elecfeeAdd/deleteBatch",
+          exportXlsUrl: "/elecfeeAdd/elecfeeAdd/exportXls",
+          importExcelUrl: "elecfeeAdd/elecfeeAdd/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'elecfeeaddid',text:'附加费ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'int',value:'deptid',text:'部门ID'})
+        fieldList.push({type:'string',value:'addtype',text:'费用类别'})
+        fieldList.push({type:'number',value:'price',text:'电价(元/kw)'})
+        fieldList.push({type:'date',value:'begintime',text:'开始时间'})
+        fieldList.push({type:'date',value:'endtime',text:'结束时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/ElecfeeAdd_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/elecfeeAdd文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311299430080', NULL, '附加费', '/elecfeeAdd/elecfeeAddList', 'elecfeeAdd/ElecfeeAddList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430081', '2024012311299430080', '添加附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430082', '2024012311299430080', '编辑附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430083', '2024012311299430080', '删除附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430084', '2024012311299430080', '批量删除附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430085', '2024012311299430080', '导出excel_附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311299430086', '2024012311299430080', '导入excel_附加费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_add:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:29:08', NULL, NULL, 0, 0, '1', 0);

+ 137 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddForm.vue

@@ -0,0 +1,137 @@
+<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="附加费ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="elecfeeaddid">
+              <a-input-number v-model="model.elecfeeaddid" placeholder="请输入附加费ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="部门ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deptid">
+              <a-input-number v-model="model.deptid" placeholder="请输入部门ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="费用类别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="addtype">
+              <a-input v-model="model.addtype" placeholder="请输入费用类别"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="电价(元/kw)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+              <a-input-number v-model="model.price" placeholder="请输入电价(元/kw)" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择开始时间" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择结束时间" v-model="model.endtime"  style="width: 100%" />
+            </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: 'ElecfeeAddForm',
+    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: {
+           elecfeeaddid: [
+              { required: true, message: '请输入附加费ID!'},
+           ],
+        },
+        url: {
+          add: "/elecfeeAdd/elecfeeAdd/add",
+          edit: "/elecfeeAdd/elecfeeAdd/edit",
+          queryById: "/elecfeeAdd/elecfeeAdd/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
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <elecfee-add-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></elecfee-add-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 ElecfeeAddForm from './ElecfeeAddForm.vue'
+
+  export default {
+    name: 'ElecfeeAddModal',
+    components: {
+      ElecfeeAddForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/elecfeeAdd/vue/modules/ElecfeeAddModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <elecfee-add-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></elecfee-add-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import ElecfeeAddForm from './ElecfeeAddForm.vue'
+  export default {
+    name: 'ElecfeeAddModal',
+    components: {
+      ElecfeeAddForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/controller/ElecfeeBaseController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.elecfeeBase.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.elecfeeBase.entity.ElecfeeBase;
+import org.jeecg.modules.elecfeeBase.service.IElecfeeBaseService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="基本电费")
+@RestController
+@RequestMapping("/elecfeeBase/elecfeeBase")
+@Slf4j
+public class ElecfeeBaseController extends JeecgController<ElecfeeBase, IElecfeeBaseService> {
+	@Autowired
+	private IElecfeeBaseService elecfeeBaseService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param elecfeeBase
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "基本电费-分页列表查询")
+	@ApiOperation(value="基本电费-分页列表查询", notes="基本电费-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ElecfeeBase>> queryPageList(ElecfeeBase elecfeeBase,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ElecfeeBase> queryWrapper = QueryGenerator.initQueryWrapper(elecfeeBase, req.getParameterMap());
+		Page<ElecfeeBase> page = new Page<ElecfeeBase>(pageNo, pageSize);
+		IPage<ElecfeeBase> pageList = elecfeeBaseService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param elecfeeBase
+	 * @return
+	 */
+	@AutoLog(value = "基本电费-添加")
+	@ApiOperation(value="基本电费-添加", notes="基本电费-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_base:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ElecfeeBase elecfeeBase) {
+		elecfeeBaseService.save(elecfeeBase);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param elecfeeBase
+	 * @return
+	 */
+	@AutoLog(value = "基本电费-编辑")
+	@ApiOperation(value="基本电费-编辑", notes="基本电费-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_base:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ElecfeeBase elecfeeBase) {
+		elecfeeBaseService.updateById(elecfeeBase);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "基本电费-通过id删除")
+	@ApiOperation(value="基本电费-通过id删除", notes="基本电费-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_base:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		elecfeeBaseService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "基本电费-批量删除")
+	@ApiOperation(value="基本电费-批量删除", notes="基本电费-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_base:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.elecfeeBaseService.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<ElecfeeBase> queryById(@RequestParam(name="id",required=true) String id) {
+		ElecfeeBase elecfeeBase = elecfeeBaseService.getById(id);
+		if(elecfeeBase==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(elecfeeBase);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param elecfeeBase
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_elecfee_base:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ElecfeeBase elecfeeBase) {
+        return super.exportXls(request, elecfeeBase, ElecfeeBase.class, "基本电费");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_elecfee_base:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ElecfeeBase.class);
+    }
+
+}

+ 87 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/entity/ElecfeeBase.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.elecfeeBase.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_elecfee_base")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_elecfee_base对象", description="基本电费")
+public class ElecfeeBase implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**基本电费ID*/
+	@Excel(name = "基本电费ID", width = 15)
+    @ApiModelProperty(value = "基本电费ID")
+    private Long elecfeebaseid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**部门ID*/
+	@Excel(name = "部门ID", width = 15)
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptid;
+	/**计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费*/
+	@Excel(name = "计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费", width = 15)
+    @ApiModelProperty(value = "计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费")
+    private String feetype;
+	/**变压器容量/合同最大需量(kVA)*/
+	@Excel(name = "变压器容量/合同最大需量(kVA)", width = 15)
+    @ApiModelProperty(value = "变压器容量/合同最大需量(kVA)")
+    private Double kva;
+	/**基本电价(元/kw)*/
+	@Excel(name = "基本电价(元/kw)", width = 15)
+    @ApiModelProperty(value = "基本电价(元/kw)")
+    private Double price;
+	/**开始时间*/
+	@Excel(name = "开始时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "开始时间")
+    private Date begintime;
+	/**结束时间*/
+	@Excel(name = "结束时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结束时间")
+    private Date endtime;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/mapper/ElecfeeBaseMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.elecfeeBase.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.elecfeeBase.entity.ElecfeeBase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 基本电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface ElecfeeBaseMapper extends BaseMapper<ElecfeeBase> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/mapper/xml/ElecfeeBaseMapper.xml

@@ -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.elecfeeBase.mapper.ElecfeeBaseMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/service/IElecfeeBaseService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.elecfeeBase.service;
+
+import org.jeecg.modules.elecfeeBase.entity.ElecfeeBase;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 基本电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IElecfeeBaseService extends IService<ElecfeeBase> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/service/impl/ElecfeeBaseServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.elecfeeBase.service.impl;
+
+import org.jeecg.modules.elecfeeBase.entity.ElecfeeBase;
+import org.jeecg.modules.elecfeeBase.mapper.ElecfeeBaseMapper;
+import org.jeecg.modules.elecfeeBase.service.IElecfeeBaseService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 基本电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class ElecfeeBaseServiceImpl extends ServiceImpl<ElecfeeBaseMapper, ElecfeeBase> implements IElecfeeBaseService {
+
+}

+ 219 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/ElecfeeBaseList.vue

@@ -0,0 +1,219 @@
+<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>
+
+    <elecfee-base-modal ref="modalForm" @ok="modalFormOk"></elecfee-base-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ElecfeeBaseModal from './modules/ElecfeeBaseModal.vue'
+
+  export default {
+    name: 'ElecfeeBaseList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ElecfeeBaseModal
+    },
+    data () {
+      return {
+        description: '基本电费管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'基本电费ID',
+            align:"center",
+            dataIndex: 'elecfeebaseid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'部门ID',
+            align:"center",
+            dataIndex: 'deptid'
+          },
+          {
+            title:'计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费',
+            align:"center",
+            dataIndex: 'feetype'
+          },
+          {
+            title:'变压器容量/合同最大需量(kVA)',
+            align:"center",
+            dataIndex: 'kva'
+          },
+          {
+            title:'基本电价(元/kw)',
+            align:"center",
+            dataIndex: 'price'
+          },
+          {
+            title:'开始时间',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'结束时间',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/elecfeeBase/elecfeeBase/list",
+          delete: "/elecfeeBase/elecfeeBase/delete",
+          deleteBatch: "/elecfeeBase/elecfeeBase/deleteBatch",
+          exportXlsUrl: "/elecfeeBase/elecfeeBase/exportXls",
+          importExcelUrl: "elecfeeBase/elecfeeBase/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'elecfeebaseid',text:'基本电费ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'int',value:'deptid',text:'部门ID'})
+        fieldList.push({type:'string',value:'feetype',text:'计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费'})
+        fieldList.push({type:'number',value:'kva',text:'变压器容量/合同最大需量(kVA)'})
+        fieldList.push({type:'number',value:'price',text:'基本电价(元/kw)'})
+        fieldList.push({type:'date',value:'begintime',text:'开始时间'})
+        fieldList.push({type:'date',value:'endtime',text:'结束时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/ElecfeeBase_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/elecfeeBase文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311287550460', NULL, '基本电费', '/elecfeeBase/elecfeeBaseList', 'elecfeeBase/ElecfeeBaseList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550461', '2024012311287550460', '添加基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550462', '2024012311287550460', '编辑基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550463', '2024012311287550460', '删除基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550464', '2024012311287550460', '批量删除基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550465', '2024012311287550460', '导出excel_基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311287550466', '2024012311287550460', '导入excel_基本电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_base:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:46', NULL, NULL, 0, 0, '1', 0);

+ 142 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseForm.vue

@@ -0,0 +1,142 @@
+<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="基本电费ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="elecfeebaseid">
+              <a-input-number v-model="model.elecfeebaseid" placeholder="请输入基本电费ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="部门ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deptid">
+              <a-input-number v-model="model.deptid" placeholder="请输入部门ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="feetype">
+              <a-input v-model="model.feetype" placeholder="请输入计费类型:按变压器容量计费、按合同最大需量计费、按实际最大需量计费"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="变压器容量/合同最大需量(kVA)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="kva">
+              <a-input-number v-model="model.kva" placeholder="请输入变压器容量/合同最大需量(kVA)" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="基本电价(元/kw)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+              <a-input-number v-model="model.price" placeholder="请输入基本电价(元/kw)" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择开始时间" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择结束时间" v-model="model.endtime"  style="width: 100%" />
+            </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: 'ElecfeeBaseForm',
+    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: {
+           elecfeebaseid: [
+              { required: true, message: '请输入基本电费ID!'},
+           ],
+        },
+        url: {
+          add: "/elecfeeBase/elecfeeBase/add",
+          edit: "/elecfeeBase/elecfeeBase/edit",
+          queryById: "/elecfeeBase/elecfeeBase/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
module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <elecfee-base-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></elecfee-base-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 ElecfeeBaseForm from './ElecfeeBaseForm.vue'
+
+  export default {
+    name: 'ElecfeeBaseModal',
+    components: {
+      ElecfeeBaseForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/elecfeeBase/vue/modules/ElecfeeBaseModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <elecfee-base-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></elecfee-base-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import ElecfeeBaseForm from './ElecfeeBaseForm.vue'
+  export default {
+    name: 'ElecfeeBaseModal',
+    components: {
+      ElecfeeBaseForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/controller/ElecfeeDegreeController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.elecfeeDegree.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.elecfeeDegree.entity.ElecfeeDegree;
+import org.jeecg.modules.elecfeeDegree.service.IElecfeeDegreeService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="电度电费")
+@RestController
+@RequestMapping("/elecfeeDegree/elecfeeDegree")
+@Slf4j
+public class ElecfeeDegreeController extends JeecgController<ElecfeeDegree, IElecfeeDegreeService> {
+	@Autowired
+	private IElecfeeDegreeService elecfeeDegreeService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param elecfeeDegree
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "电度电费-分页列表查询")
+	@ApiOperation(value="电度电费-分页列表查询", notes="电度电费-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ElecfeeDegree>> queryPageList(ElecfeeDegree elecfeeDegree,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ElecfeeDegree> queryWrapper = QueryGenerator.initQueryWrapper(elecfeeDegree, req.getParameterMap());
+		Page<ElecfeeDegree> page = new Page<ElecfeeDegree>(pageNo, pageSize);
+		IPage<ElecfeeDegree> pageList = elecfeeDegreeService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param elecfeeDegree
+	 * @return
+	 */
+	@AutoLog(value = "电度电费-添加")
+	@ApiOperation(value="电度电费-添加", notes="电度电费-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_degree:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ElecfeeDegree elecfeeDegree) {
+		elecfeeDegreeService.save(elecfeeDegree);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param elecfeeDegree
+	 * @return
+	 */
+	@AutoLog(value = "电度电费-编辑")
+	@ApiOperation(value="电度电费-编辑", notes="电度电费-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_degree:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ElecfeeDegree elecfeeDegree) {
+		elecfeeDegreeService.updateById(elecfeeDegree);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "电度电费-通过id删除")
+	@ApiOperation(value="电度电费-通过id删除", notes="电度电费-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_degree:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		elecfeeDegreeService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "电度电费-批量删除")
+	@ApiOperation(value="电度电费-批量删除", notes="电度电费-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_degree:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.elecfeeDegreeService.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<ElecfeeDegree> queryById(@RequestParam(name="id",required=true) String id) {
+		ElecfeeDegree elecfeeDegree = elecfeeDegreeService.getById(id);
+		if(elecfeeDegree==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(elecfeeDegree);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param elecfeeDegree
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_elecfee_degree:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ElecfeeDegree elecfeeDegree) {
+        return super.exportXls(request, elecfeeDegree, ElecfeeDegree.class, "电度电费");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_elecfee_degree:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ElecfeeDegree.class);
+    }
+
+}

+ 83 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/entity/ElecfeeDegree.java

@@ -0,0 +1,83 @@
+package org.jeecg.modules.elecfeeDegree.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_elecfee_degree")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_elecfee_degree对象", description="电度电费")
+public class ElecfeeDegree implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**电度电费ID*/
+	@Excel(name = "电度电费ID", width = 15)
+    @ApiModelProperty(value = "电度电费ID")
+    private Long elecfeedegreeid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**部门ID*/
+	@Excel(name = "部门ID", width = 15)
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptid;
+	/**计费类型:售电、光伏*/
+	@Excel(name = "计费类型:售电、光伏", width = 15)
+    @ApiModelProperty(value = "计费类型:售电、光伏")
+    private String feetype;
+	/**目录电价(元/kw)*/
+	@Excel(name = "目录电价(元/kw)", width = 15)
+    @ApiModelProperty(value = "目录电价(元/kw)")
+    private Double price;
+	/**开始时间*/
+	@Excel(name = "开始时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "开始时间")
+    private Date begintime;
+	/**结束时间*/
+	@Excel(name = "结束时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结束时间")
+    private Date endtime;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/mapper/ElecfeeDegreeMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.elecfeeDegree.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.elecfeeDegree.entity.ElecfeeDegree;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 电度电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface ElecfeeDegreeMapper extends BaseMapper<ElecfeeDegree> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/mapper/xml/ElecfeeDegreeMapper.xml

@@ -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.elecfeeDegree.mapper.ElecfeeDegreeMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/service/IElecfeeDegreeService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.elecfeeDegree.service;
+
+import org.jeecg.modules.elecfeeDegree.entity.ElecfeeDegree;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 电度电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IElecfeeDegreeService extends IService<ElecfeeDegree> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/service/impl/ElecfeeDegreeServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.elecfeeDegree.service.impl;
+
+import org.jeecg.modules.elecfeeDegree.entity.ElecfeeDegree;
+import org.jeecg.modules.elecfeeDegree.mapper.ElecfeeDegreeMapper;
+import org.jeecg.modules.elecfeeDegree.service.IElecfeeDegreeService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 电度电费
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class ElecfeeDegreeServiceImpl extends ServiceImpl<ElecfeeDegreeMapper, ElecfeeDegree> implements IElecfeeDegreeService {
+
+}

+ 213 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/ElecfeeDegreeList.vue

@@ -0,0 +1,213 @@
+<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>
+
+    <elecfee-degree-modal ref="modalForm" @ok="modalFormOk"></elecfee-degree-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ElecfeeDegreeModal from './modules/ElecfeeDegreeModal.vue'
+
+  export default {
+    name: 'ElecfeeDegreeList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ElecfeeDegreeModal
+    },
+    data () {
+      return {
+        description: '电度电费管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'电度电费ID',
+            align:"center",
+            dataIndex: 'elecfeedegreeid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'部门ID',
+            align:"center",
+            dataIndex: 'deptid'
+          },
+          {
+            title:'计费类型:售电、光伏',
+            align:"center",
+            dataIndex: 'feetype'
+          },
+          {
+            title:'目录电价(元/kw)',
+            align:"center",
+            dataIndex: 'price'
+          },
+          {
+            title:'开始时间',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'结束时间',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/elecfeeDegree/elecfeeDegree/list",
+          delete: "/elecfeeDegree/elecfeeDegree/delete",
+          deleteBatch: "/elecfeeDegree/elecfeeDegree/deleteBatch",
+          exportXlsUrl: "/elecfeeDegree/elecfeeDegree/exportXls",
+          importExcelUrl: "elecfeeDegree/elecfeeDegree/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'elecfeedegreeid',text:'电度电费ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'int',value:'deptid',text:'部门ID'})
+        fieldList.push({type:'string',value:'feetype',text:'计费类型:售电、光伏'})
+        fieldList.push({type:'number',value:'price',text:'目录电价(元/kw)'})
+        fieldList.push({type:'date',value:'begintime',text:'开始时间'})
+        fieldList.push({type:'date',value:'endtime',text:'结束时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/ElecfeeDegree_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/elecfeeDegree文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311283790230', NULL, '电度电费', '/elecfeeDegree/elecfeeDegreeList', 'elecfeeDegree/ElecfeeDegreeList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800231', '2024012311283790230', '添加电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800232', '2024012311283790230', '编辑电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800233', '2024012311283790230', '删除电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800234', '2024012311283790230', '批量删除电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800235', '2024012311283790230', '导出excel_电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311283800236', '2024012311283790230', '导入excel_电度电费', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_degree:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:28:23', NULL, NULL, 0, 0, '1', 0);

+ 137 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeForm.vue

@@ -0,0 +1,137 @@
+<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="电度电费ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="elecfeedegreeid">
+              <a-input-number v-model="model.elecfeedegreeid" placeholder="请输入电度电费ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="部门ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deptid">
+              <a-input-number v-model="model.deptid" placeholder="请输入部门ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="计费类型:售电、光伏" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="feetype">
+              <a-input v-model="model.feetype" placeholder="请输入计费类型:售电、光伏"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="目录电价(元/kw)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+              <a-input-number v-model="model.price" placeholder="请输入目录电价(元/kw)" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择开始时间" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择结束时间" v-model="model.endtime"  style="width: 100%" />
+            </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: 'ElecfeeDegreeForm',
+    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: {
+           elecfeedegreeid: [
+              { required: true, message: '请输入电度电费ID!'},
+           ],
+        },
+        url: {
+          add: "/elecfeeDegree/elecfeeDegree/add",
+          edit: "/elecfeeDegree/elecfeeDegree/edit",
+          queryById: "/elecfeeDegree/elecfeeDegree/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
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <elecfee-degree-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></elecfee-degree-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 ElecfeeDegreeForm from './ElecfeeDegreeForm.vue'
+
+  export default {
+    name: 'ElecfeeDegreeModal',
+    components: {
+      ElecfeeDegreeForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/elecfeeDegree/vue/modules/ElecfeeDegreeModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <elecfee-degree-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></elecfee-degree-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import ElecfeeDegreeForm from './ElecfeeDegreeForm.vue'
+  export default {
+    name: 'ElecfeeDegreeModal',
+    components: {
+      ElecfeeDegreeForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/controller/ElecfeeRatioController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.elecfeeRatio.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.elecfeeRatio.entity.ElecfeeRatio;
+import org.jeecg.modules.elecfeeRatio.service.IElecfeeRatioService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="力调系数")
+@RestController
+@RequestMapping("/elecfeeRatio/elecfeeRatio")
+@Slf4j
+public class ElecfeeRatioController extends JeecgController<ElecfeeRatio, IElecfeeRatioService> {
+	@Autowired
+	private IElecfeeRatioService elecfeeRatioService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param elecfeeRatio
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "力调系数-分页列表查询")
+	@ApiOperation(value="力调系数-分页列表查询", notes="力调系数-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ElecfeeRatio>> queryPageList(ElecfeeRatio elecfeeRatio,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ElecfeeRatio> queryWrapper = QueryGenerator.initQueryWrapper(elecfeeRatio, req.getParameterMap());
+		Page<ElecfeeRatio> page = new Page<ElecfeeRatio>(pageNo, pageSize);
+		IPage<ElecfeeRatio> pageList = elecfeeRatioService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param elecfeeRatio
+	 * @return
+	 */
+	@AutoLog(value = "力调系数-添加")
+	@ApiOperation(value="力调系数-添加", notes="力调系数-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_ratio:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ElecfeeRatio elecfeeRatio) {
+		elecfeeRatioService.save(elecfeeRatio);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param elecfeeRatio
+	 * @return
+	 */
+	@AutoLog(value = "力调系数-编辑")
+	@ApiOperation(value="力调系数-编辑", notes="力调系数-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_ratio:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ElecfeeRatio elecfeeRatio) {
+		elecfeeRatioService.updateById(elecfeeRatio);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "力调系数-通过id删除")
+	@ApiOperation(value="力调系数-通过id删除", notes="力调系数-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_ratio:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		elecfeeRatioService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "力调系数-批量删除")
+	@ApiOperation(value="力调系数-批量删除", notes="力调系数-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_elecfee_ratio:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.elecfeeRatioService.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<ElecfeeRatio> queryById(@RequestParam(name="id",required=true) String id) {
+		ElecfeeRatio elecfeeRatio = elecfeeRatioService.getById(id);
+		if(elecfeeRatio==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(elecfeeRatio);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param elecfeeRatio
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_elecfee_ratio:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ElecfeeRatio elecfeeRatio) {
+        return super.exportXls(request, elecfeeRatio, ElecfeeRatio.class, "力调系数");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_elecfee_ratio:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ElecfeeRatio.class);
+    }
+
+}

+ 87 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/entity/ElecfeeRatio.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.elecfeeRatio.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_elecfee_ratio")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_elecfee_ratio对象", description="力调系数")
+public class ElecfeeRatio implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**力调系数ID*/
+	@Excel(name = "力调系数ID", width = 15)
+    @ApiModelProperty(value = "力调系数ID")
+    private Long elecfeeratioid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**部门ID*/
+	@Excel(name = "部门ID", width = 15)
+    @ApiModelProperty(value = "部门ID")
+    private Integer deptid;
+	/**功率因数*/
+	@Excel(name = "功率因数", width = 15)
+    @ApiModelProperty(value = "功率因数")
+    private Double powerfactor;
+	/**考核因数*/
+	@Excel(name = "考核因数", width = 15)
+    @ApiModelProperty(value = "考核因数")
+    private Double assessfactor;
+	/**力调系数*/
+	@Excel(name = "力调系数", width = 15)
+    @ApiModelProperty(value = "力调系数")
+    private Double ratio;
+	/**开始时间*/
+	@Excel(name = "开始时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "开始时间")
+    private Date begintime;
+	/**结束时间*/
+	@Excel(name = "结束时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结束时间")
+    private Date endtime;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/mapper/ElecfeeRatioMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.elecfeeRatio.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.elecfeeRatio.entity.ElecfeeRatio;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 力调系数
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface ElecfeeRatioMapper extends BaseMapper<ElecfeeRatio> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/mapper/xml/ElecfeeRatioMapper.xml

@@ -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.elecfeeRatio.mapper.ElecfeeRatioMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/service/IElecfeeRatioService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.elecfeeRatio.service;
+
+import org.jeecg.modules.elecfeeRatio.entity.ElecfeeRatio;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 力调系数
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IElecfeeRatioService extends IService<ElecfeeRatio> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/service/impl/ElecfeeRatioServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.elecfeeRatio.service.impl;
+
+import org.jeecg.modules.elecfeeRatio.entity.ElecfeeRatio;
+import org.jeecg.modules.elecfeeRatio.mapper.ElecfeeRatioMapper;
+import org.jeecg.modules.elecfeeRatio.service.IElecfeeRatioService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 力调系数
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class ElecfeeRatioServiceImpl extends ServiceImpl<ElecfeeRatioMapper, ElecfeeRatio> implements IElecfeeRatioService {
+
+}

+ 219 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/ElecfeeRatioList.vue

@@ -0,0 +1,219 @@
+<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>
+
+    <elecfee-ratio-modal ref="modalForm" @ok="modalFormOk"></elecfee-ratio-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ElecfeeRatioModal from './modules/ElecfeeRatioModal.vue'
+
+  export default {
+    name: 'ElecfeeRatioList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ElecfeeRatioModal
+    },
+    data () {
+      return {
+        description: '力调系数管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'力调系数ID',
+            align:"center",
+            dataIndex: 'elecfeeratioid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'部门ID',
+            align:"center",
+            dataIndex: 'deptid'
+          },
+          {
+            title:'功率因数',
+            align:"center",
+            dataIndex: 'powerfactor'
+          },
+          {
+            title:'考核因数',
+            align:"center",
+            dataIndex: 'assessfactor'
+          },
+          {
+            title:'力调系数',
+            align:"center",
+            dataIndex: 'ratio'
+          },
+          {
+            title:'开始时间',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'结束时间',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/elecfeeRatio/elecfeeRatio/list",
+          delete: "/elecfeeRatio/elecfeeRatio/delete",
+          deleteBatch: "/elecfeeRatio/elecfeeRatio/deleteBatch",
+          exportXlsUrl: "/elecfeeRatio/elecfeeRatio/exportXls",
+          importExcelUrl: "elecfeeRatio/elecfeeRatio/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'elecfeeratioid',text:'力调系数ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'int',value:'deptid',text:'部门ID'})
+        fieldList.push({type:'number',value:'powerfactor',text:'功率因数'})
+        fieldList.push({type:'number',value:'assessfactor',text:'考核因数'})
+        fieldList.push({type:'number',value:'ratio',text:'力调系数'})
+        fieldList.push({type:'date',value:'begintime',text:'开始时间'})
+        fieldList.push({type:'date',value:'endtime',text:'结束时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/ElecfeeRatio_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/elecfeeRatio文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('202401231127960580', NULL, '力调系数', '/elecfeeRatio/elecfeeRatioList', 'elecfeeRatio/ElecfeeRatioList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960581', '202401231127960580', '添加力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960582', '202401231127960580', '编辑力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960583', '202401231127960580', '删除力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960584', '202401231127960580', '批量删除力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960585', '202401231127960580', '导出excel_力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202401231127960586', '202401231127960580', '导入excel_力调系数', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_elecfee_ratio:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:58', NULL, NULL, 0, 0, '1', 0);

+ 142 - 0
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioForm.vue

@@ -0,0 +1,142 @@
+<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="力调系数ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="elecfeeratioid">
+              <a-input-number v-model="model.elecfeeratioid" placeholder="请输入力调系数ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="部门ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="deptid">
+              <a-input-number v-model="model.deptid" placeholder="请输入部门ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="功率因数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="powerfactor">
+              <a-input-number v-model="model.powerfactor" placeholder="请输入功率因数" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="考核因数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="assessfactor">
+              <a-input-number v-model="model.assessfactor" placeholder="请输入考核因数" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="力调系数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ratio">
+              <a-input-number v-model="model.ratio" placeholder="请输入力调系数" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择开始时间" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择结束时间" v-model="model.endtime"  style="width: 100%" />
+            </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: 'ElecfeeRatioForm',
+    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: {
+           elecfeeratioid: [
+              { required: true, message: '请输入力调系数ID!'},
+           ],
+        },
+        url: {
+          add: "/elecfeeRatio/elecfeeRatio/add",
+          edit: "/elecfeeRatio/elecfeeRatio/edit",
+          queryById: "/elecfeeRatio/elecfeeRatio/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
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <elecfee-ratio-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></elecfee-ratio-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 ElecfeeRatioForm from './ElecfeeRatioForm.vue'
+
+  export default {
+    name: 'ElecfeeRatioModal',
+    components: {
+      ElecfeeRatioForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/elecfeeRatio/vue/modules/ElecfeeRatioModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <elecfee-ratio-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></elecfee-ratio-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import ElecfeeRatioForm from './ElecfeeRatioForm.vue'
+  export default {
+    name: 'ElecfeeRatioModal',
+    components: {
+      ElecfeeRatioForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/controller/EnergyItemController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.energyItem.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.energyItem.entity.EnergyItem;
+import org.jeecg.modules.energyItem.service.IEnergyItemService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="能耗分项")
+@RestController
+@RequestMapping("/energyItem/energyItem")
+@Slf4j
+public class EnergyItemController extends JeecgController<EnergyItem, IEnergyItemService> {
+	@Autowired
+	private IEnergyItemService energyItemService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param energyItem
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "能耗分项-分页列表查询")
+	@ApiOperation(value="能耗分项-分页列表查询", notes="能耗分项-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<EnergyItem>> queryPageList(EnergyItem energyItem,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EnergyItem> queryWrapper = QueryGenerator.initQueryWrapper(energyItem, req.getParameterMap());
+		Page<EnergyItem> page = new Page<EnergyItem>(pageNo, pageSize);
+		IPage<EnergyItem> pageList = energyItemService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param energyItem
+	 * @return
+	 */
+	@AutoLog(value = "能耗分项-添加")
+	@ApiOperation(value="能耗分项-添加", notes="能耗分项-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_item:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EnergyItem energyItem) {
+		energyItemService.save(energyItem);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param energyItem
+	 * @return
+	 */
+	@AutoLog(value = "能耗分项-编辑")
+	@ApiOperation(value="能耗分项-编辑", notes="能耗分项-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_item:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EnergyItem energyItem) {
+		energyItemService.updateById(energyItem);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "能耗分项-通过id删除")
+	@ApiOperation(value="能耗分项-通过id删除", notes="能耗分项-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_item:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		energyItemService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "能耗分项-批量删除")
+	@ApiOperation(value="能耗分项-批量删除", notes="能耗分项-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_item:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.energyItemService.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<EnergyItem> queryById(@RequestParam(name="id",required=true) String id) {
+		EnergyItem energyItem = energyItemService.getById(id);
+		if(energyItem==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(energyItem);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param energyItem
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_energy_item:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EnergyItem energyItem) {
+        return super.exportXls(request, energyItem, EnergyItem.class, "能耗分项");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_energy_item:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EnergyItem.class);
+    }
+
+}

+ 67 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/entity/EnergyItem.java

@@ -0,0 +1,67 @@
+package org.jeecg.modules.energyItem.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_energy_item")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_energy_item对象", description="能耗分项")
+public class EnergyItem implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**能耗分项ID*/
+	@Excel(name = "能耗分项ID", width = 15)
+    @ApiModelProperty(value = "能耗分项ID")
+    private Long energyitemid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**名称*/
+	@Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private String energyitemname;
+	/**能源分类ID*/
+	@Excel(name = "能源分类ID", width = 15)
+    @ApiModelProperty(value = "能源分类ID")
+    private Integer energytypeid;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/mapper/EnergyItemMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.energyItem.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.energyItem.entity.EnergyItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 能耗分项
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface EnergyItemMapper extends BaseMapper<EnergyItem> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/mapper/xml/EnergyItemMapper.xml

@@ -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.energyItem.mapper.EnergyItemMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/service/IEnergyItemService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.energyItem.service;
+
+import org.jeecg.modules.energyItem.entity.EnergyItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 能耗分项
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IEnergyItemService extends IService<EnergyItem> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/service/impl/EnergyItemServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.energyItem.service.impl;
+
+import org.jeecg.modules.energyItem.entity.EnergyItem;
+import org.jeecg.modules.energyItem.mapper.EnergyItemMapper;
+import org.jeecg.modules.energyItem.service.IEnergyItemService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 能耗分项
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class EnergyItemServiceImpl extends ServiceImpl<EnergyItemMapper, EnergyItem> implements IEnergyItemService {
+
+}

+ 189 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/vue/EnergyItemList.vue

@@ -0,0 +1,189 @@
+<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>
+
+    <energy-item-modal ref="modalForm" @ok="modalFormOk"></energy-item-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import EnergyItemModal from './modules/EnergyItemModal.vue'
+
+  export default {
+    name: 'EnergyItemList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      EnergyItemModal
+    },
+    data () {
+      return {
+        description: '能耗分项管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'能耗分项ID',
+            align:"center",
+            dataIndex: 'energyitemid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'名称',
+            align:"center",
+            dataIndex: 'energyitemname'
+          },
+          {
+            title:'能源分类ID',
+            align:"center",
+            dataIndex: 'energytypeid'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/energyItem/energyItem/list",
+          delete: "/energyItem/energyItem/delete",
+          deleteBatch: "/energyItem/energyItem/deleteBatch",
+          exportXlsUrl: "/energyItem/energyItem/exportXls",
+          importExcelUrl: "energyItem/energyItem/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'energyitemid',text:'能耗分项ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'string',value:'energyitemname',text:'名称'})
+        fieldList.push({type:'int',value:'energytypeid',text:'能源分类ID'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/vue/EnergyItem_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/energyItem文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311275150290', NULL, '能耗分项', '/energyItem/energyItemList', 'energyItem/EnergyItemList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150291', '2024012311275150290', '添加能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150292', '2024012311275150290', '编辑能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150293', '2024012311275150290', '删除能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150294', '2024012311275150290', '批量删除能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150295', '2024012311275150290', '导出excel_能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311275150296', '2024012311275150290', '导入excel_能耗分项', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_item:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:29', NULL, NULL, 0, 0, '1', 0);

+ 122 - 0
module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemForm.vue

@@ -0,0 +1,122 @@
+<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="能耗分项ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energyitemid">
+              <a-input-number v-model="model.energyitemid" placeholder="请输入能耗分项ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energyitemname">
+              <a-input v-model="model.energyitemname" placeholder="请输入名称"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="能源分类ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energytypeid">
+              <a-input-number v-model="model.energytypeid" placeholder="请输入能源分类ID" style="width: 100%" />
+            </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: 'EnergyItemForm',
+    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: {
+           energyitemid: [
+              { required: true, message: '请输入能耗分项ID!'},
+           ],
+        },
+        url: {
+          add: "/energyItem/energyItem/add",
+          edit: "/energyItem/energyItem/edit",
+          queryById: "/energyItem/energyItem/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
module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <energy-item-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></energy-item-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 EnergyItemForm from './EnergyItemForm.vue'
+
+  export default {
+    name: 'EnergyItemModal',
+    components: {
+      EnergyItemForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/energyItem/vue/modules/EnergyItemModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <energy-item-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></energy-item-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import EnergyItemForm from './EnergyItemForm.vue'
+  export default {
+    name: 'EnergyItemModal',
+    components: {
+      EnergyItemForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/controller/EnergyQuotaController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.energyQuota.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.energyQuota.entity.EnergyQuota;
+import org.jeecg.modules.energyQuota.service.IEnergyQuotaService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="能源计划")
+@RestController
+@RequestMapping("/energyQuota/energyQuota")
+@Slf4j
+public class EnergyQuotaController extends JeecgController<EnergyQuota, IEnergyQuotaService> {
+	@Autowired
+	private IEnergyQuotaService energyQuotaService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param energyQuota
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "能源计划-分页列表查询")
+	@ApiOperation(value="能源计划-分页列表查询", notes="能源计划-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<EnergyQuota>> queryPageList(EnergyQuota energyQuota,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EnergyQuota> queryWrapper = QueryGenerator.initQueryWrapper(energyQuota, req.getParameterMap());
+		Page<EnergyQuota> page = new Page<EnergyQuota>(pageNo, pageSize);
+		IPage<EnergyQuota> pageList = energyQuotaService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param energyQuota
+	 * @return
+	 */
+	@AutoLog(value = "能源计划-添加")
+	@ApiOperation(value="能源计划-添加", notes="能源计划-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_quota:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EnergyQuota energyQuota) {
+		energyQuotaService.save(energyQuota);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param energyQuota
+	 * @return
+	 */
+	@AutoLog(value = "能源计划-编辑")
+	@ApiOperation(value="能源计划-编辑", notes="能源计划-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_quota:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EnergyQuota energyQuota) {
+		energyQuotaService.updateById(energyQuota);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "能源计划-通过id删除")
+	@ApiOperation(value="能源计划-通过id删除", notes="能源计划-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_quota:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		energyQuotaService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "能源计划-批量删除")
+	@ApiOperation(value="能源计划-批量删除", notes="能源计划-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_quota:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.energyQuotaService.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<EnergyQuota> queryById(@RequestParam(name="id",required=true) String id) {
+		EnergyQuota energyQuota = energyQuotaService.getById(id);
+		if(energyQuota==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(energyQuota);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param energyQuota
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_energy_quota:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EnergyQuota energyQuota) {
+        return super.exportXls(request, energyQuota, EnergyQuota.class, "能源计划");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_energy_quota:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EnergyQuota.class);
+    }
+
+}

+ 105 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/entity/EnergyQuota.java

@@ -0,0 +1,105 @@
+package org.jeecg.modules.energyQuota.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_energy_quota")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_energy_quota对象", description="能源计划")
+public class EnergyQuota implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**能源计划ID*/
+	@Excel(name = "能源计划ID", width = 15)
+    @ApiModelProperty(value = "能源计划ID")
+    private Long energyquotaid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**设备ID*/
+	@Excel(name = "设备ID", width = 15)
+    @ApiModelProperty(value = "设备ID")
+    private Integer equipmentid;
+	/**设备编号*/
+	@Excel(name = "设备编号", width = 15)
+    @ApiModelProperty(value = "设备编号")
+    private String equipmentcode;
+	/**计划日期*/
+	@Excel(name = "计划日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "计划日期")
+    private Date quotadate;
+	/**能源分类ID*/
+	@Excel(name = "能源分类ID", width = 15)
+    @ApiModelProperty(value = "能源分类ID")
+    private Integer energytypeid;
+	/**计划值*/
+	@Excel(name = "计划值", width = 15)
+    @ApiModelProperty(value = "计划值")
+    private Double quotavalue;
+	/**所属年*/
+	@Excel(name = "所属年", width = 15)
+    @ApiModelProperty(value = "所属年")
+    private Integer year;
+	/**所属月*/
+	@Excel(name = "所属月", width = 15)
+    @ApiModelProperty(value = "所属月")
+    private Integer month;
+	/**日期*/
+	@Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private String day;
+	/**所属年月*/
+	@Excel(name = "所属年月", width = 15)
+    @ApiModelProperty(value = "所属年月")
+    private String yearmonth;
+	/**所属周*/
+	@Excel(name = "所属周", width = 15)
+    @ApiModelProperty(value = "所属周")
+    private Integer week;
+	/**周几*/
+	@Excel(name = "周几", width = 15)
+    @ApiModelProperty(value = "周几")
+    private Integer dayofweek;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/mapper/EnergyQuotaMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.energyQuota.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.energyQuota.entity.EnergyQuota;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 能源计划
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface EnergyQuotaMapper extends BaseMapper<EnergyQuota> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/mapper/xml/EnergyQuotaMapper.xml

@@ -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.energyQuota.mapper.EnergyQuotaMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/service/IEnergyQuotaService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.energyQuota.service;
+
+import org.jeecg.modules.energyQuota.entity.EnergyQuota;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 能源计划
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IEnergyQuotaService extends IService<EnergyQuota> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/service/impl/EnergyQuotaServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.energyQuota.service.impl;
+
+import org.jeecg.modules.energyQuota.entity.EnergyQuota;
+import org.jeecg.modules.energyQuota.mapper.EnergyQuotaMapper;
+import org.jeecg.modules.energyQuota.service.IEnergyQuotaService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 能源计划
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class EnergyQuotaServiceImpl extends ServiceImpl<EnergyQuotaMapper, EnergyQuota> implements IEnergyQuotaService {
+
+}

+ 246 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/vue/EnergyQuotaList.vue

@@ -0,0 +1,246 @@
+<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>
+
+    <energy-quota-modal ref="modalForm" @ok="modalFormOk"></energy-quota-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import EnergyQuotaModal from './modules/EnergyQuotaModal.vue'
+
+  export default {
+    name: 'EnergyQuotaList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      EnergyQuotaModal
+    },
+    data () {
+      return {
+        description: '能源计划管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'能源计划ID',
+            align:"center",
+            dataIndex: 'energyquotaid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'设备ID',
+            align:"center",
+            dataIndex: 'equipmentid'
+          },
+          {
+            title:'设备编号',
+            align:"center",
+            dataIndex: 'equipmentcode'
+          },
+          {
+            title:'计划日期',
+            align:"center",
+            dataIndex: 'quotadate',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'能源分类ID',
+            align:"center",
+            dataIndex: 'energytypeid'
+          },
+          {
+            title:'计划值',
+            align:"center",
+            dataIndex: 'quotavalue'
+          },
+          {
+            title:'所属年',
+            align:"center",
+            dataIndex: 'year'
+          },
+          {
+            title:'所属月',
+            align:"center",
+            dataIndex: 'month'
+          },
+          {
+            title:'日期',
+            align:"center",
+            dataIndex: 'day'
+          },
+          {
+            title:'所属年月',
+            align:"center",
+            dataIndex: 'yearmonth'
+          },
+          {
+            title:'所属周',
+            align:"center",
+            dataIndex: 'week'
+          },
+          {
+            title:'周几',
+            align:"center",
+            dataIndex: 'dayofweek'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/energyQuota/energyQuota/list",
+          delete: "/energyQuota/energyQuota/delete",
+          deleteBatch: "/energyQuota/energyQuota/deleteBatch",
+          exportXlsUrl: "/energyQuota/energyQuota/exportXls",
+          importExcelUrl: "energyQuota/energyQuota/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'energyquotaid',text:'能源计划ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'int',value:'equipmentid',text:'设备ID'})
+        fieldList.push({type:'string',value:'equipmentcode',text:'设备编号'})
+        fieldList.push({type:'date',value:'quotadate',text:'计划日期'})
+        fieldList.push({type:'int',value:'energytypeid',text:'能源分类ID'})
+        fieldList.push({type:'number',value:'quotavalue',text:'计划值'})
+        fieldList.push({type:'int',value:'year',text:'所属年'})
+        fieldList.push({type:'int',value:'month',text:'所属月'})
+        fieldList.push({type:'string',value:'day',text:'日期'})
+        fieldList.push({type:'string',value:'yearmonth',text:'所属年月'})
+        fieldList.push({type:'int',value:'week',text:'所属周'})
+        fieldList.push({type:'int',value:'dayofweek',text:'周几'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/vue/EnergyQuota_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/energyQuota文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311271760000', NULL, '能源计划', '/energyQuota/energyQuotaList', 'energyQuota/EnergyQuotaList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760001', '2024012311271760000', '添加能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760002', '2024012311271760000', '编辑能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760003', '2024012311271760000', '删除能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760004', '2024012311271760000', '批量删除能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760005', '2024012311271760000', '导出excel_能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311271760006', '2024012311271760000', '导入excel_能源计划', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_quota:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:27:00', NULL, NULL, 0, 0, '1', 0);

+ 167 - 0
module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaForm.vue

@@ -0,0 +1,167 @@
+<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="能源计划ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energyquotaid">
+              <a-input-number v-model="model.energyquotaid" placeholder="请输入能源计划ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="设备ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentid">
+              <a-input-number v-model="model.equipmentid" placeholder="请输入设备ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="设备编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentcode">
+              <a-input v-model="model.equipmentcode" placeholder="请输入设备编号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="计划日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="quotadate">
+              <j-date placeholder="请选择计划日期" v-model="model.quotadate"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="能源分类ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energytypeid">
+              <a-input-number v-model="model.energytypeid" placeholder="请输入能源分类ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="计划值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="quotavalue">
+              <a-input-number v-model="model.quotavalue" placeholder="请输入计划值" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="所属年" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="year">
+              <a-input-number v-model="model.year" placeholder="请输入所属年" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="所属月" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="month">
+              <a-input-number v-model="model.month" placeholder="请输入所属月" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="day">
+              <a-input v-model="model.day" placeholder="请输入日期"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="所属年月" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="yearmonth">
+              <a-input v-model="model.yearmonth" placeholder="请输入所属年月"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="所属周" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="week">
+              <a-input-number v-model="model.week" placeholder="请输入所属周" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="周几" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dayofweek">
+              <a-input-number v-model="model.dayofweek" placeholder="请输入周几" style="width: 100%" />
+            </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: 'EnergyQuotaForm',
+    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: {
+           energyquotaid: [
+              { required: true, message: '请输入能源计划ID!'},
+           ],
+        },
+        url: {
+          add: "/energyQuota/energyQuota/add",
+          edit: "/energyQuota/energyQuota/edit",
+          queryById: "/energyQuota/energyQuota/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
module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <energy-quota-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></energy-quota-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 EnergyQuotaForm from './EnergyQuotaForm.vue'
+
+  export default {
+    name: 'EnergyQuotaModal',
+    components: {
+      EnergyQuotaForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/energyQuota/vue/modules/EnergyQuotaModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <energy-quota-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></energy-quota-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import EnergyQuotaForm from './EnergyQuotaForm.vue'
+  export default {
+    name: 'EnergyQuotaModal',
+    components: {
+      EnergyQuotaForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/controller/EnergyRateController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.energyRate.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.energyRate.entity.EnergyRate;
+import org.jeecg.modules.energyRate.service.IEnergyRateService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="能源费率")
+@RestController
+@RequestMapping("/energyRate/energyRate")
+@Slf4j
+public class EnergyRateController extends JeecgController<EnergyRate, IEnergyRateService> {
+	@Autowired
+	private IEnergyRateService energyRateService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param energyRate
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "能源费率-分页列表查询")
+	@ApiOperation(value="能源费率-分页列表查询", notes="能源费率-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<EnergyRate>> queryPageList(EnergyRate energyRate,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EnergyRate> queryWrapper = QueryGenerator.initQueryWrapper(energyRate, req.getParameterMap());
+		Page<EnergyRate> page = new Page<EnergyRate>(pageNo, pageSize);
+		IPage<EnergyRate> pageList = energyRateService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param energyRate
+	 * @return
+	 */
+	@AutoLog(value = "能源费率-添加")
+	@ApiOperation(value="能源费率-添加", notes="能源费率-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EnergyRate energyRate) {
+		energyRateService.save(energyRate);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param energyRate
+	 * @return
+	 */
+	@AutoLog(value = "能源费率-编辑")
+	@ApiOperation(value="能源费率-编辑", notes="能源费率-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EnergyRate energyRate) {
+		energyRateService.updateById(energyRate);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "能源费率-通过id删除")
+	@ApiOperation(value="能源费率-通过id删除", notes="能源费率-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		energyRateService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "能源费率-批量删除")
+	@ApiOperation(value="能源费率-批量删除", notes="能源费率-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.energyRateService.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<EnergyRate> queryById(@RequestParam(name="id",required=true) String id) {
+		EnergyRate energyRate = energyRateService.getById(id);
+		if(energyRate==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(energyRate);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param energyRate
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_energy_rate:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EnergyRate energyRate) {
+        return super.exportXls(request, energyRate, EnergyRate.class, "能源费率");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_energy_rate:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EnergyRate.class);
+    }
+
+}

+ 87 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/entity/EnergyRate.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.energyRate.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_energy_rate")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_energy_rate对象", description="能源费率")
+public class EnergyRate implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**能源费率ID*/
+	@Excel(name = "能源费率ID", width = 15)
+    @ApiModelProperty(value = "能源费率ID")
+    private Long energyrateid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**名称*/
+	@Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private String name;
+	/**能源分类ID*/
+	@Excel(name = "能源分类ID", width = 15)
+    @ApiModelProperty(value = "能源分类ID")
+    private Integer energytypeid;
+	/**费率类型:分时费率、阶梯费率*/
+	@Excel(name = "费率类型:分时费率、阶梯费率", width = 15)
+    @ApiModelProperty(value = "费率类型:分时费率、阶梯费率")
+    private String ratetype;
+	/**单位*/
+	@Excel(name = "单位", width = 15)
+    @ApiModelProperty(value = "单位")
+    private String rateunit;
+	/**费率有效期开始*/
+	@Excel(name = "费率有效期开始", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "费率有效期开始")
+    private Date begintime;
+	/**费率有效期结束*/
+	@Excel(name = "费率有效期结束", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "费率有效期结束")
+    private Date endtime;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/mapper/EnergyRateMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.energyRate.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.energyRate.entity.EnergyRate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 能源费率
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface EnergyRateMapper extends BaseMapper<EnergyRate> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/mapper/xml/EnergyRateMapper.xml

@@ -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.energyRate.mapper.EnergyRateMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/service/IEnergyRateService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.energyRate.service;
+
+import org.jeecg.modules.energyRate.entity.EnergyRate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 能源费率
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IEnergyRateService extends IService<EnergyRate> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/service/impl/EnergyRateServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.energyRate.service.impl;
+
+import org.jeecg.modules.energyRate.entity.EnergyRate;
+import org.jeecg.modules.energyRate.mapper.EnergyRateMapper;
+import org.jeecg.modules.energyRate.service.IEnergyRateService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 能源费率
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class EnergyRateServiceImpl extends ServiceImpl<EnergyRateMapper, EnergyRate> implements IEnergyRateService {
+
+}

+ 219 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/vue/EnergyRateList.vue

@@ -0,0 +1,219 @@
+<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>
+
+    <energy-rate-modal ref="modalForm" @ok="modalFormOk"></energy-rate-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import EnergyRateModal from './modules/EnergyRateModal.vue'
+
+  export default {
+    name: 'EnergyRateList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      EnergyRateModal
+    },
+    data () {
+      return {
+        description: '能源费率管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'能源费率ID',
+            align:"center",
+            dataIndex: 'energyrateid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'名称',
+            align:"center",
+            dataIndex: 'name'
+          },
+          {
+            title:'能源分类ID',
+            align:"center",
+            dataIndex: 'energytypeid'
+          },
+          {
+            title:'费率类型:分时费率、阶梯费率',
+            align:"center",
+            dataIndex: 'ratetype'
+          },
+          {
+            title:'单位',
+            align:"center",
+            dataIndex: 'rateunit'
+          },
+          {
+            title:'费率有效期开始',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'费率有效期结束',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/energyRate/energyRate/list",
+          delete: "/energyRate/energyRate/delete",
+          deleteBatch: "/energyRate/energyRate/deleteBatch",
+          exportXlsUrl: "/energyRate/energyRate/exportXls",
+          importExcelUrl: "energyRate/energyRate/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'energyrateid',text:'能源费率ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'string',value:'name',text:'名称'})
+        fieldList.push({type:'int',value:'energytypeid',text:'能源分类ID'})
+        fieldList.push({type:'string',value:'ratetype',text:'费率类型:分时费率、阶梯费率'})
+        fieldList.push({type:'string',value:'rateunit',text:'单位'})
+        fieldList.push({type:'date',value:'begintime',text:'费率有效期开始'})
+        fieldList.push({type:'date',value:'endtime',text:'费率有效期结束'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/vue/EnergyRate_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/energyRate文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311262790300', NULL, '能源费率', '/energyRate/energyRateList', 'energyRate/EnergyRateList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790301', '2024012311262790300', '添加能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790302', '2024012311262790300', '编辑能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790303', '2024012311262790300', '删除能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790304', '2024012311262790300', '批量删除能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790305', '2024012311262790300', '导出excel_能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311262790306', '2024012311262790300', '导入excel_能源费率', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:26:30', NULL, NULL, 0, 0, '1', 0);

+ 142 - 0
module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateForm.vue

@@ -0,0 +1,142 @@
+<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="能源费率ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energyrateid">
+              <a-input-number v-model="model.energyrateid" placeholder="请输入能源费率ID" 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-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <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="能源分类ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energytypeid">
+              <a-input-number v-model="model.energytypeid" placeholder="请输入能源分类ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="费率类型:分时费率、阶梯费率" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ratetype">
+              <a-input v-model="model.ratetype" placeholder="请输入费率类型:分时费率、阶梯费率"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="rateunit">
+              <a-input v-model="model.rateunit" placeholder="请输入单位"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="费率有效期开始" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择费率有效期开始" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="费率有效期结束" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择费率有效期结束" v-model="model.endtime"  style="width: 100%" />
+            </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: 'EnergyRateForm',
+    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: {
+           energyrateid: [
+              { required: true, message: '请输入能源费率ID!'},
+           ],
+        },
+        url: {
+          add: "/energyRate/energyRate/add",
+          edit: "/energyRate/energyRate/edit",
+          queryById: "/energyRate/energyRate/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
module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <energy-rate-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></energy-rate-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 EnergyRateForm from './EnergyRateForm.vue'
+
+  export default {
+    name: 'EnergyRateModal',
+    components: {
+      EnergyRateForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/energyRate/vue/modules/EnergyRateModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <energy-rate-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></energy-rate-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import EnergyRateForm from './EnergyRateForm.vue'
+  export default {
+    name: 'EnergyRateModal',
+    components: {
+      EnergyRateForm
+    },
+    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>

+ 177 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/controller/EnergyRateDetailController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.energyRateDetail.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.energyRateDetail.entity.EnergyRateDetail;
+import org.jeecg.modules.energyRateDetail.service.IEnergyRateDetailService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="能源费率子表")
+@RestController
+@RequestMapping("/energyRateDetail/energyRateDetail")
+@Slf4j
+public class EnergyRateDetailController extends JeecgController<EnergyRateDetail, IEnergyRateDetailService> {
+	@Autowired
+	private IEnergyRateDetailService energyRateDetailService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param energyRateDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "能源费率子表-分页列表查询")
+	@ApiOperation(value="能源费率子表-分页列表查询", notes="能源费率子表-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<EnergyRateDetail>> queryPageList(EnergyRateDetail energyRateDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EnergyRateDetail> queryWrapper = QueryGenerator.initQueryWrapper(energyRateDetail, req.getParameterMap());
+		Page<EnergyRateDetail> page = new Page<EnergyRateDetail>(pageNo, pageSize);
+		IPage<EnergyRateDetail> pageList = energyRateDetailService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param energyRateDetail
+	 * @return
+	 */
+	@AutoLog(value = "能源费率子表-添加")
+	@ApiOperation(value="能源费率子表-添加", notes="能源费率子表-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate_detail:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EnergyRateDetail energyRateDetail) {
+		energyRateDetailService.save(energyRateDetail);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param energyRateDetail
+	 * @return
+	 */
+	@AutoLog(value = "能源费率子表-编辑")
+	@ApiOperation(value="能源费率子表-编辑", notes="能源费率子表-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate_detail:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EnergyRateDetail energyRateDetail) {
+		energyRateDetailService.updateById(energyRateDetail);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "能源费率子表-通过id删除")
+	@ApiOperation(value="能源费率子表-通过id删除", notes="能源费率子表-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate_detail:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		energyRateDetailService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "能源费率子表-批量删除")
+	@ApiOperation(value="能源费率子表-批量删除", notes="能源费率子表-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_rate_detail:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.energyRateDetailService.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<EnergyRateDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		EnergyRateDetail energyRateDetail = energyRateDetailService.getById(id);
+		if(energyRateDetail==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(energyRateDetail);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param energyRateDetail
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_energy_rate_detail:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EnergyRateDetail energyRateDetail) {
+        return super.exportXls(request, energyRateDetail, EnergyRateDetail.class, "能源费率子表");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_energy_rate_detail:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EnergyRateDetail.class);
+    }
+
+}

+ 71 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/entity/EnergyRateDetail.java

@@ -0,0 +1,71 @@
+package org.jeecg.modules.energyRateDetail.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_energy_rate_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_energy_rate_detail对象", description="能源费率子表")
+public class EnergyRateDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**能源费率明细ID*/
+	@Excel(name = "能源费率明细ID", width = 15)
+    @ApiModelProperty(value = "能源费率明细ID")
+    private Long detailid;
+	/**能源费率ID*/
+	@Excel(name = "能源费率ID", width = 15)
+    @ApiModelProperty(value = "能源费率ID")
+    private Integer energyrateid;
+	/**分时开始时间*/
+	@Excel(name = "分时开始时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "分时开始时间")
+    private Date begintime;
+	/**分时结束时间*/
+	@Excel(name = "分时结束时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "分时结束时间")
+    private Date endtime;
+	/**峰平谷:尖、峰、谷、平*/
+	@Excel(name = "峰平谷:尖、峰、谷、平", width = 15)
+    @ApiModelProperty(value = "峰平谷:尖、峰、谷、平")
+    private String pandv;
+	/**价格*/
+	@Excel(name = "价格", width = 15)
+    @ApiModelProperty(value = "价格")
+    private BigDecimal price;
+	/**起始量*/
+	@Excel(name = "起始量", width = 15)
+    @ApiModelProperty(value = "起始量")
+    private Double beginamount;
+	/**结束量*/
+	@Excel(name = "结束量", width = 15)
+    @ApiModelProperty(value = "结束量")
+    private Double endamount;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/mapper/EnergyRateDetailMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.energyRateDetail.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.energyRateDetail.entity.EnergyRateDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 能源费率子表
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface EnergyRateDetailMapper extends BaseMapper<EnergyRateDetail> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/mapper/xml/EnergyRateDetailMapper.xml

@@ -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.energyRateDetail.mapper.EnergyRateDetailMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/service/IEnergyRateDetailService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.energyRateDetail.service;
+
+import org.jeecg.modules.energyRateDetail.entity.EnergyRateDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 能源费率子表
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IEnergyRateDetailService extends IService<EnergyRateDetail> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/service/impl/EnergyRateDetailServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.energyRateDetail.service.impl;
+
+import org.jeecg.modules.energyRateDetail.entity.EnergyRateDetail;
+import org.jeecg.modules.energyRateDetail.mapper.EnergyRateDetailMapper;
+import org.jeecg.modules.energyRateDetail.service.IEnergyRateDetailService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 能源费率子表
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class EnergyRateDetailServiceImpl extends ServiceImpl<EnergyRateDetailMapper, EnergyRateDetail> implements IEnergyRateDetailService {
+
+}

+ 219 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/EnergyRateDetailList.vue

@@ -0,0 +1,219 @@
+<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>
+
+    <energy-rate-detail-modal ref="modalForm" @ok="modalFormOk"></energy-rate-detail-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import EnergyRateDetailModal from './modules/EnergyRateDetailModal.vue'
+
+  export default {
+    name: 'EnergyRateDetailList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      EnergyRateDetailModal
+    },
+    data () {
+      return {
+        description: '能源费率子表管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'能源费率明细ID',
+            align:"center",
+            dataIndex: 'detailid'
+          },
+          {
+            title:'能源费率ID',
+            align:"center",
+            dataIndex: 'energyrateid'
+          },
+          {
+            title:'分时开始时间',
+            align:"center",
+            dataIndex: 'begintime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'分时结束时间',
+            align:"center",
+            dataIndex: 'endtime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'峰平谷:尖、峰、谷、平',
+            align:"center",
+            dataIndex: 'pandv'
+          },
+          {
+            title:'价格',
+            align:"center",
+            dataIndex: 'price'
+          },
+          {
+            title:'起始量',
+            align:"center",
+            dataIndex: 'beginamount'
+          },
+          {
+            title:'结束量',
+            align:"center",
+            dataIndex: 'endamount'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/energyRateDetail/energyRateDetail/list",
+          delete: "/energyRateDetail/energyRateDetail/delete",
+          deleteBatch: "/energyRateDetail/energyRateDetail/deleteBatch",
+          exportXlsUrl: "/energyRateDetail/energyRateDetail/exportXls",
+          importExcelUrl: "energyRateDetail/energyRateDetail/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'detailid',text:'能源费率明细ID'})
+        fieldList.push({type:'int',value:'energyrateid',text:'能源费率ID'})
+        fieldList.push({type:'date',value:'begintime',text:'分时开始时间'})
+        fieldList.push({type:'date',value:'endtime',text:'分时结束时间'})
+        fieldList.push({type:'string',value:'pandv',text:'峰平谷:尖、峰、谷、平'})
+        fieldList.push({type:'number',value:'price',text:'价格'})
+        fieldList.push({type:'number',value:'beginamount',text:'起始量'})
+        fieldList.push({type:'number',value:'endamount',text:'结束量'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/EnergyRateDetail_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/energyRateDetail文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311252010580', NULL, '能源费率子表', '/energyRateDetail/energyRateDetailList', 'energyRateDetail/EnergyRateDetailList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010581', '2024012311252010580', '添加能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010582', '2024012311252010580', '编辑能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010583', '2024012311252010580', '删除能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010584', '2024012311252010580', '批量删除能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010585', '2024012311252010580', '导出excel_能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311252010586', '2024012311252010580', '导入excel_能源费率子表', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_rate_detail:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:58', NULL, NULL, 0, 0, '1', 0);

+ 145 - 0
module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailForm.vue

@@ -0,0 +1,145 @@
+<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="能源费率明细ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="detailid">
+              <a-input-number v-model="model.detailid" placeholder="请输入能源费率明细ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="能源费率ID" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energyrateid">
+              <a-input-number v-model="model.energyrateid" placeholder="请输入能源费率ID" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="分时开始时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
+              <j-date placeholder="请选择分时开始时间" v-model="model.begintime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="分时结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
+              <j-date placeholder="请选择分时结束时间" v-model="model.endtime"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="峰平谷:尖、峰、谷、平" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pandv">
+              <a-input v-model="model.pandv" placeholder="请输入峰平谷:尖、峰、谷、平"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="价格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+              <a-input-number v-model="model.price" placeholder="请输入价格" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="起始量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="beginamount">
+              <a-input-number v-model="model.beginamount" placeholder="请输入起始量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="结束量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endamount">
+              <a-input-number v-model="model.endamount" placeholder="请输入结束量" style="width: 100%" />
+            </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: 'EnergyRateDetailForm',
+    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: {
+           detailid: [
+              { required: true, message: '请输入能源费率明细ID!'},
+           ],
+           energyrateid: [
+              { required: true, message: '请输入能源费率ID!'},
+           ],
+        },
+        url: {
+          add: "/energyRateDetail/energyRateDetail/add",
+          edit: "/energyRateDetail/energyRateDetail/edit",
+          queryById: "/energyRateDetail/energyRateDetail/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
module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <energy-rate-detail-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></energy-rate-detail-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 EnergyRateDetailForm from './EnergyRateDetailForm.vue'
+
+  export default {
+    name: 'EnergyRateDetailModal',
+    components: {
+      EnergyRateDetailForm
+    },
+    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
module_base/src/main/java/org/jeecg/modules/energyRateDetail/vue/modules/EnergyRateDetailModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <energy-rate-detail-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></energy-rate-detail-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import EnergyRateDetailForm from './EnergyRateDetailForm.vue'
+  export default {
+    name: 'EnergyRateDetailModal',
+    components: {
+      EnergyRateDetailForm
+    },
+    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>

+ 188 - 0
module_base/src/main/java/org/jeecg/modules/energyType/controller/EnergyTypeController.java

@@ -0,0 +1,188 @@
+package org.jeecg.modules.energyType.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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.energyType.entity.EnergyType;
+import org.jeecg.modules.energyType.service.IEnergyTypeService;
+
+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-01-23
+ * @Version: V1.0
+ */
+@Api(tags="能源分类")
+@RestController
+@RequestMapping("/energyType/energyType")
+@Slf4j
+public class EnergyTypeController extends JeecgController<EnergyType, IEnergyTypeService> {
+	@Autowired
+	private IEnergyTypeService energyTypeService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param energyType
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "能源分类-分页列表查询")
+	@ApiOperation(value="能源分类-分页列表查询", notes="能源分类-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<EnergyType>> queryPageList(EnergyType energyType,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<EnergyType> queryWrapper = QueryGenerator.initQueryWrapper(energyType, req.getParameterMap());
+		Page<EnergyType> page = new Page<EnergyType>(pageNo, pageSize);
+		IPage<EnergyType> pageList = energyTypeService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	 @ApiOperation(value="能源分类-查询所有分类", notes="能源分类-查询所有分类")
+	 @GetMapping(value = "/types")
+	 public Result<List<EnergyType>> queryTypes() {
+		 LambdaQueryWrapper<EnergyType> wrapper = new LambdaQueryWrapper<>();
+		 wrapper.select(EnergyType::getEnergytypeid,EnergyType::getName);
+		 List<EnergyType> list = energyTypeService.list(wrapper);
+		 return Result.OK(list);
+	 }
+
+	/**
+	 *   添加
+	 *
+	 * @param energyType
+	 * @return
+	 */
+	@AutoLog(value = "能源分类-添加")
+	@ApiOperation(value="能源分类-添加", notes="能源分类-添加")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_type:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody EnergyType energyType) {
+		energyTypeService.save(energyType);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param energyType
+	 * @return
+	 */
+	@AutoLog(value = "能源分类-编辑")
+	@ApiOperation(value="能源分类-编辑", notes="能源分类-编辑")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_type:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody EnergyType energyType) {
+		energyTypeService.updateById(energyType);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "能源分类-通过id删除")
+	@ApiOperation(value="能源分类-通过id删除", notes="能源分类-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_type:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		energyTypeService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "能源分类-批量删除")
+	@ApiOperation(value="能源分类-批量删除", notes="能源分类-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:base_energy_type:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.energyTypeService.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<EnergyType> queryById(@RequestParam(name="id",required=true) String id) {
+		EnergyType energyType = energyTypeService.getById(id);
+		if(energyType==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(energyType);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param energyType
+    */
+    //@RequiresPermissions("org.jeecg.modules:base_energy_type:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, EnergyType energyType) {
+        return super.exportXls(request, energyType, EnergyType.class, "能源分类");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("base_energy_type:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, EnergyType.class);
+    }
+
+}

+ 75 - 0
module_base/src/main/java/org/jeecg/modules/energyType/entity/EnergyType.java

@@ -0,0 +1,75 @@
+package org.jeecg.modules.energyType.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 com.baomidou.mybatisplus.annotation.TableLogic;
+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-01-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("base_energy_type")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="base_energy_type对象", description="能源分类")
+public class EnergyType implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**能源分类ID*/
+	@Excel(name = "能源分类ID", width = 15)
+    @ApiModelProperty(value = "能源分类ID")
+    private Long energytypeid;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**名称*/
+	@Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private String name;
+	/**单位*/
+	@Excel(name = "单位", width = 15)
+    @ApiModelProperty(value = "单位")
+    private String unit;
+	/**千克标准煤*/
+	@Excel(name = "千克标准煤", width = 15)
+    @ApiModelProperty(value = "千克标准煤")
+    private Double kgce;
+	/**千克二氧化碳排放*/
+	@Excel(name = "千克二氧化碳排放", width = 15)
+    @ApiModelProperty(value = "千克二氧化碳排放")
+    private Double co2;
+}

+ 17 - 0
module_base/src/main/java/org/jeecg/modules/energyType/mapper/EnergyTypeMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.energyType.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.energyType.entity.EnergyType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 能源分类
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface EnergyTypeMapper extends BaseMapper<EnergyType> {
+
+}

+ 5 - 0
module_base/src/main/java/org/jeecg/modules/energyType/mapper/xml/EnergyTypeMapper.xml

@@ -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.energyType.mapper.EnergyTypeMapper">
+
+</mapper>

+ 14 - 0
module_base/src/main/java/org/jeecg/modules/energyType/service/IEnergyTypeService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.energyType.service;
+
+import org.jeecg.modules.energyType.entity.EnergyType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 能源分类
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+public interface IEnergyTypeService extends IService<EnergyType> {
+
+}

+ 19 - 0
module_base/src/main/java/org/jeecg/modules/energyType/service/impl/EnergyTypeServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.energyType.service.impl;
+
+import org.jeecg.modules.energyType.entity.EnergyType;
+import org.jeecg.modules.energyType.mapper.EnergyTypeMapper;
+import org.jeecg.modules.energyType.service.IEnergyTypeService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 能源分类
+ * @Author: jeecg-boot
+ * @Date:   2024-01-23
+ * @Version: V1.0
+ */
+@Service
+public class EnergyTypeServiceImpl extends ServiceImpl<EnergyTypeMapper, EnergyType> implements IEnergyTypeService {
+
+}

+ 201 - 0
module_base/src/main/java/org/jeecg/modules/energyType/vue/EnergyTypeList.vue

@@ -0,0 +1,201 @@
+<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>
+
+    <energy-type-modal ref="modalForm" @ok="modalFormOk"></energy-type-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import EnergyTypeModal from './modules/EnergyTypeModal.vue'
+
+  export default {
+    name: 'EnergyTypeList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      EnergyTypeModal
+    },
+    data () {
+      return {
+        description: '能源分类管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'能源分类ID',
+            align:"center",
+            dataIndex: 'energytypeid'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'名称',
+            align:"center",
+            dataIndex: 'name'
+          },
+          {
+            title:'单位',
+            align:"center",
+            dataIndex: 'unit'
+          },
+          {
+            title:'千克标准煤',
+            align:"center",
+            dataIndex: 'kgce'
+          },
+          {
+            title:'千克二氧化碳排放',
+            align:"center",
+            dataIndex: 'co2'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/energyType/energyType/list",
+          delete: "/energyType/energyType/delete",
+          deleteBatch: "/energyType/energyType/deleteBatch",
+          exportXlsUrl: "/energyType/energyType/exportXls",
+          importExcelUrl: "energyType/energyType/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'int',value:'energytypeid',text:'能源分类ID'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'string',value:'name',text:'名称'})
+        fieldList.push({type:'string',value:'unit',text:'单位'})
+        fieldList.push({type:'number',value:'kgce',text:'千克标准煤'})
+        fieldList.push({type:'number',value:'co2',text:'千克二氧化碳排放'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_base/src/main/java/org/jeecg/modules/energyType/vue/EnergyType_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/energyType文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('2024012311258560260', NULL, '能源分类', '/energyType/energyTypeList', 'energyType/EnergyTypeList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560261', '2024012311258560260', '添加能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560262', '2024012311258560260', '编辑能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560263', '2024012311258560260', '删除能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560264', '2024012311258560260', '批量删除能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560265', '2024012311258560260', '导出excel_能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('2024012311258560266', '2024012311258560260', '导入excel_能源分类', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:base_energy_type:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-01-23 11:25:26', NULL, NULL, 0, 0, '1', 0);

+ 0 - 0
module_base/src/main/java/org/jeecg/modules/energyType/vue/modules/EnergyTypeForm.vue


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