From c2e2ce9e6e64d6d88de294afbaa09c3d6c2a2df5 Mon Sep 17 00:00:00 2001
From: 阿伏兔 <1738124622@qq.com>
Date: 星期三, 28 八月 2024 23:02:26 +0800
Subject: [PATCH] 添加尖峰平谷功能

---
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java       |   51 
 energy_management_ui/src/assets/icons/checkbox.png                                                                                            |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java                |   89 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java         |   43 
 energy_management_ui/src/assets/image/isbreadcrumbBg.png                                                                                      |    0 
 energy_management_server/src/main/resources/application.yml                                                                                   |    2 
 energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml                                   |  108 ++
 energy_management_ui/src/layout/index.vue                                                                                                     |  176 +++
 energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue                                                            |  181 +++
 energy_management_ui/src/assets/icons/checked.png                                                                                             |    0 
 energy_management_ui/src/assets/home/homeiconT.png                                                                                            |    0 
 energy_management_ui/src/views/index.vue                                                                                                      |  260 ++--
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java         |   54 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java    |   91 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java    |  114 ++
 energy_management_ui/src/assets/image/bg.jpg                                                                                                  |    0 
 energy_management_ui/src/views/energyPrice/index.vue                                                                                          |  558 ++++++++++
 energy_management_ui/src/api/energyPrice/price.js                                                                                             |   40 
 energy_management_ui/src/assets/home/homeicontitle.png                                                                                        |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java            |   24 
 energy_management_ui/src/assets/home/homeiconJ.png                                                                                            |    0 
 energy_management_ui/src/assets/home/homeiconDQ.png                                                                                           |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java         |   86 +
 energy_management_ui/src/views/energyPrice/index copy.vue                                                                                     |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java           |   72 +
 energy_management_ui/src/assets/image/navbar/Group.png                                                                                        |    0 
 energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml                                      |   31 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java     |   42 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java |  186 +++
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java      |   93 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java               |   30 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java    |  151 ++
 energy_management_ui/src/assets/image/breadcrumbBg.png                                                                                        |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java            |   52 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java  |   38 
 energy_management_ui/src/assets/home/homeiconY.png                                                                                            |    0 
 energy_management_ui/src/views/login.vue                                                                                                      |   50 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java         |   59 +
 energy_management_ui/src/assets/image/treeBg.png                                                                                              |    0 
 energy_management_ui/src/views/index copy.vue                                                                                                 |    1 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java              |  106 +
 energy_management_ui/src/views/index_bak.vue                                                                                                  |   88 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java        |   45 
 energy_management_ui/src/assets/home/homeiconW.png                                                                                            |    0 
 energy_management_ui/src/assets/home/homeiconD.png                                                                                            |    0 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java     |   66 +
 energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml                               |   88 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java          |   68 +
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java               |   24 
 energy_management_ui/vue.config.js                                                                                                            |    6 
 energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java       |   40 
 51 files changed, 3,013 insertions(+), 200 deletions(-)

diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java
new file mode 100644
index 0000000..ed75c48
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityDataItemController.java
@@ -0,0 +1,40 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.controller;
+
+
+import com.dingzhuo.energy.framework.web.controller.BaseController;
+import com.dingzhuo.energy.framework.web.domain.AjaxResult;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
+import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityDataItemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Controller
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@RestController
+@RequestMapping("/electricityDataItem")
+@Api(tags = "灏栧嘲骞宠胺鏁版嵁")
+public class ElectricityDataItemController extends BaseController {
+
+    @Resource
+    private IElectricityDataItemService rulesService;
+
+
+    /**
+     * 鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻
+     */
+    @GetMapping("/getDataStatistics")
+    @ApiOperation(value = "鑾峰彇灏栧嘲骞宠胺鏁版嵁缁熻")
+    public AjaxResult getDataStatistics(ElectricityDataItemListDTO dto) {
+        return AjaxResult.success(rulesService.getDataStatistics(dto));
+    }
+
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java
new file mode 100644
index 0000000..0fd2cfb
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/controller/ElectricityTypeSettingController.java
@@ -0,0 +1,91 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.controller;
+
+import com.dingzhuo.energy.framework.aspectj.lang.annotation.Log;
+import com.dingzhuo.energy.framework.aspectj.lang.enums.BusinessType;
+import com.dingzhuo.energy.framework.web.controller.BaseController;
+import com.dingzhuo.energy.framework.web.domain.AjaxResult;
+import com.dingzhuo.energy.framework.web.page.TableDataInfo;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityTypeSettingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 璁¤垂绛栫暐Controller
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@RestController
+@RequestMapping("/rule")
+@Api(tags = "璁¤垂绛栫暐")
+public class ElectricityTypeSettingController extends BaseController {
+
+    @Resource
+    private IElectricityTypeSettingService rulesService;
+
+
+    /**
+     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
+     */
+    @GetMapping("/list")
+    @ApiOperation(value = "鍒嗛〉鏌ヨ璁¤垂瑙勫垯鍒楄〃")
+    public TableDataInfo list(@ApiParam("璁¤垂瑙勫垯鍚嶇О") @RequestParam(value = "name", required = false) String name) {
+        startPage();
+        List<ElectricityTypeSettingPageListVO> responsePage = rulesService.selectPageList(name);
+        return getDataTable(responsePage);
+    }
+
+    /**
+     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
+     */
+    @GetMapping(value = "/getRuleDetail")
+    @ApiOperation(value = "鑾峰彇璁¤垂瑙勫垯璇︽儏")
+    public AjaxResult getRuleDetail(@ApiParam("璁¤垂瑙勫垯id") @NotNull(message = "id涓嶈兘涓虹┖!") @RequestParam("id") String id) {
+        ElectricityTypeSettingItemQueryVO response = rulesService.getRuleDetail(id);
+        return AjaxResult.success(response);
+    }
+
+    /**
+     * 鏂板璁¤垂绛栫暐
+     */
+    @PostMapping("/addRule")
+    @ApiOperation(value = "鏂板璁¤垂绛栫暐")
+    @Log(title = "鏂板璁¤垂绛栫暐", businessType = BusinessType.INSERT)
+    public AjaxResult addRule(@RequestBody @Validated ElectricityTypeSettingAddVO request) {
+        rulesService.addRule(request);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 淇敼璁¤垂绛栫暐
+     */
+    @PostMapping("/updateRule")
+    @ApiOperation(value = "淇敼璁¤垂绛栫暐")
+    @Log(title = "淇敼璁¤垂绛栫暐", businessType = BusinessType.UPDATE)
+    public AjaxResult updateRule(@RequestBody @Validated ElectricityTypeSettingUpdateVO request) {
+        rulesService.updateRule(request);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 鍒犻櫎璁¤垂绛栫暐
+     */
+    @DeleteMapping("/delRule/{id}")
+    @ApiOperation(value = "鍒犻櫎璁¤垂绛栫暐")
+    @Log(title = "鍒犻櫎璁¤垂绛栫暐", businessType = BusinessType.DELETE)
+    public AjaxResult delRule(@ApiParam("璁¤垂瑙勫垯id") @NotNull(message = "id涓嶈兘涓虹┖!") @PathVariable("id") String id) {
+        rulesService.delRule(id);
+        return AjaxResult.success();
+    }
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java
new file mode 100644
index 0000000..721001a
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityDataItemListDTO.java
@@ -0,0 +1,68 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
+
+import com.dingzhuo.energy.common.utils.time.TimeType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫� electricityDataItem
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "灏栧嘲骞宠胺鏁版嵁鍒楄〃瀹炰綋绫�")
+public class ElectricityDataItemListDTO {
+
+    /**
+     * 妯″瀷缂栧彿
+     */
+    @ApiModelProperty(value = "妯″瀷缂栧彿")
+    @NotBlank(message = "妯″瀷缂栧彿涓嶈兘涓虹┖!")
+    private String modelCode;
+
+    /**
+     * 鑺傜偣id
+     */
+    @ApiModelProperty(value = "鑺傜偣id")
+    @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖!")
+    private String nodeId;
+
+    /**
+     * 鏃堕棿绫诲瀷
+     */
+    @ApiModelProperty(value = "鏃堕棿绫诲瀷")
+    @NotBlank(message = "鏃堕棿绫诲瀷涓嶈兘涓虹┖!")
+    private String timeType;
+
+    /**
+     * 鏌ヨ鏃堕棿
+     */
+    @ApiModelProperty(value = "鏌ヨ鏃堕棿")
+    @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖!")
+    @DateTimeFormat(pattern = "yyyy-MM")
+    private Date queryTime;
+
+
+    public String getTimeType() {
+
+        switch (TimeType.valueOf(this.timeType)) {
+            case HOUR:
+            case DAY:
+                return TimeType.HOUR.name();
+            case MONTH:
+                return TimeType.DAY.name();
+            case YEAR:
+                return TimeType.MONTH.name();
+            default:
+                return TimeType.DAY.name();
+        }
+    }
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java
new file mode 100644
index 0000000..353000f
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingAddVO.java
@@ -0,0 +1,86 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鏂板璇锋眰瀹炰綋绫�")
+public class ElectricityTypeSettingAddVO {
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @NotNull(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal valleyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
+    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
+    private List<ElectricityTypeSettingItemAddVO> ruleDetailList;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java
new file mode 100644
index 0000000..3858b6b
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemAddVO.java
@@ -0,0 +1,42 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏂板璇锋眰绫�")
+public class ElectricityTypeSettingItemAddVO {
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    @NotNull(message = "璐圭敤绫诲瀷鏃堕棿娈典笉鑳戒负绌�!")
+    @Min(value = 1, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶灏忓�间负1")
+    @Max(value = 48, message = "璐圭敤绫诲瀷鏃堕棿娈垫渶澶у�间负48")
+    private Integer timePeriod;
+
+    /**
+     * 鏃堕棿娈电被鍨� 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "鏃堕棿娈电被鍨�")
+    @NotNull(message = "鏃堕棿娈电被鍨嬩笉鑳戒负绌�!")
+    private String type;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java
new file mode 100644
index 0000000..3ffdb5a
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingItemUpdateVO.java
@@ -0,0 +1,38 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璐圭敤绫诲瀷鍙婃椂闂存鏇存柊璇锋眰绫�")
+public class ElectricityTypeSettingItemUpdateVO {
+
+    /**
+     * 璁¤垂瑙勫垯瀛愯〃id
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
+    @NotNull(message = "璁¤垂瑙勫垯瀛愯〃id涓嶈兘涓虹┖!")
+    private String id;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷")
+    @NotNull(message = "璐圭敤绫诲瀷涓嶈兘涓虹┖!")
+    private String type;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java
new file mode 100644
index 0000000..c134da4
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/dto/ElectricityTypeSettingUpdateVO.java
@@ -0,0 +1,93 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鏇存柊璇锋眰瀹炰綋绫�")
+public class ElectricityTypeSettingUpdateVO {
+
+    /**
+     * 涓婚敭
+     */
+    @NotNull(message = "id涓嶈兘涓虹┖!")
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @NotBlank(message = "瑙勫垯鍚嶇О涓嶈兘涓虹┖!")
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @NotBlank(message = "鐢熸晥鏃堕棿涓嶈兘涓虹┖!")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    @NotNull(message = "灏栨椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "灏栨椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    @NotNull(message = "宄版椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "宄版椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    @NotNull(message = "骞虫椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "骞虫椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    @NotNull(message = "璋锋椂娈电數璐逛环鏍间笉鑳戒负绌�!")
+    @DecimalMin(value = "0", message = "璋锋椂娈电數璐逛环鏍兼渶灏忎负0")
+    private BigDecimal valleyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐璇︽儏鍒楄〃")
+    @NotNull(message = "灏栧嘲骞宠胺鏃堕棿娈典笉鑳戒负绌�!")
+    private List<ElectricityTypeSettingItemUpdateVO> ruleDetailList;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java
new file mode 100644
index 0000000..61a6bcb
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityDataItem.java
@@ -0,0 +1,106 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
+
+import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁琛�
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+@Data
+public class ElectricityDataItem {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐐逛綅id
+     */
+    @Excel(name = "鐐逛綅id")
+    private String indexId;
+
+    /**
+     * 鏃堕棿缂栧彿
+     */
+    @Excel(name = "鏃堕棿缂栧彿")
+    private String timeCode;
+
+    /**
+     * 鏃堕棿绫诲瀷
+     */
+    @Excel(name = "鏃堕棿绫诲瀷")
+    private String timeType;
+
+    /**
+     * 鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�
+     */
+    @Excel(name = "鐢ㄧ數绫诲瀷宄般�佸钩銆佽胺绛�")
+    private String electricityType;
+
+    /**
+     * 鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ
+     */
+    @Excel(name = "鎸囨爣缂栫爜锛屽啑浣欏瓧娈碉紝鍙互鐢� code 鏌ヨ")
+    private String indexCode;
+
+    /**
+     * 鏁版嵁鏃堕棿
+     */
+    @Excel(name = "鏁版嵁鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date dataTime;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @Excel(name = "寮�濮嬫椂闂�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date beginTime;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @Excel(name = "缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 鐢ㄧ數閲�
+     */
+    @Excel(name = "鐢ㄧ數閲�")
+    private BigDecimal electricity;
+
+    /**
+     * 鐢佃垂
+     */
+    @Excel(name = "鐢佃垂")
+    private BigDecimal cost;
+
+    /**
+     * 鍗曚环
+     */
+    @Excel(name = "鍗曚环")
+    private BigDecimal price;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java
new file mode 100644
index 0000000..760d29e
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSetting.java
@@ -0,0 +1,72 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
+
+import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
+import com.dingzhuo.energy.framework.web.domain.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+public class ElectricityTypeSetting extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * $column.columnComment
+     */
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @Excel(name = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @Excel(name = "鐢熸晥鏃堕棿")
+    private Date effectiveDate;
+
+    /**
+     * 灏栫數璐逛环鏍�
+     */
+    @Excel(name = "灏栫數璐逛环鏍�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄扮數璐逛环鏍�
+     */
+    @Excel(name = "宄扮數璐逛环鏍�")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞崇數璐逛环鏍�
+     */
+    @Excel(name = "骞崇數璐逛环鏍�")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋风數璐逛环鏍�
+     */
+    @Excel(name = "璋风數璐逛环鏍�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 缁勭粐鏋舵瀯id
+     */
+    @Excel(name = "缁勭粐鏋舵瀯id")
+    private Long deptId;
+
+    /**
+     * '0'鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
+     */
+    private String delFlag;
+
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java
new file mode 100644
index 0000000..3a5da03
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/entity/ElectricityTypeSettingItem.java
@@ -0,0 +1,51 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.entity;
+
+import com.dingzhuo.energy.framework.aspectj.lang.annotation.Excel;
+import com.dingzhuo.energy.framework.web.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+public class ElectricityTypeSettingItem extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * $column.columnComment
+     */
+    private String id;
+
+    /**
+     * 璁¤垂瑙勫垯id
+     */
+    @Excel(name = "璁¤垂瑙勫垯id")
+    private String ruleId;
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @Excel(name = "璐圭敤绫诲瀷鏃堕棿娈�", readConverterExp = "1=0:00")
+    private Integer timePeriod;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @Excel(name = "鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
+    private String type;
+
+    /**
+     * 缁勭粐鏋舵瀯id
+     */
+    @Excel(name = "缁勭粐鏋舵瀯id")
+    private Long deptId;
+
+    /**
+     * 鍒犻櫎鏍囪锛岄粯璁�0锛氭湭鍒犻櫎锛�2 鍒犻櫎
+     */
+    private String delFlag;
+
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java
new file mode 100644
index 0000000..e1d90ca
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/enums/ElectricityTypeEnum.java
@@ -0,0 +1,24 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ElectricityTypeEnum {
+    SHARP("灏�"),
+    PEAK("宄�"),
+    FLAT("骞�"),
+    VALLEY("璋�");
+
+    private final String desc;
+
+    public static String getNameByType(String type) {
+        for (ElectricityTypeEnum electricityType : ElectricityTypeEnum.values()) {
+            if (electricityType.name().equalsIgnoreCase(type)) {
+                return electricityType.name();
+            }
+        }
+        throw new IllegalArgumentException("Invalid electricity type: " + type);
+    }
+}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java
new file mode 100644
index 0000000..7695823
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityPeriodFeeDetailVO.java
@@ -0,0 +1,54 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鍚勬椂娈电殑璐圭敤杩斿洖瀹炰綋")
+public class ElectricityPeriodFeeDetailVO {
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    private Integer timePeriod;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
+    private Integer type;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
+    private String typeDesc;
+
+    /**
+     * 鐢佃垂浠锋牸
+     */
+    @ApiModelProperty(value = "鐢佃垂浠锋牸")
+    private BigDecimal electricityFee;
+
+    /**
+     * 鏈嶅姟璐逛环鏍�
+     */
+    @ApiModelProperty(value = "鏈嶅姟璐逛环鏍�")
+    private BigDecimal serviceFee;
+
+    /**
+     * 鍋滆溅璐逛环鏍�
+     */
+    @ApiModelProperty(value = "鍋滆溅璐逛环鏍�")
+    private BigDecimal parkingFee;
+
+    /**
+     * 瓒呮椂鍗犵敤璐逛环鏍�
+     */
+    @ApiModelProperty(value = "瓒呮椂鍗犵敤璐逛环鏍�")
+    private BigDecimal occupancyFee;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java
new file mode 100644
index 0000000..5d26193
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemQueryVO.java
@@ -0,0 +1,151 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖瀹炰綋绫�")
+public class ElectricityTypeSettingItemQueryVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date effectiveDate;
+
+    /**
+     * 灏栨椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "灏栨椂娈电數璐逛环鏍�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 宄版椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "宄版椂娈电數璐逛环鏍�")
+    private BigDecimal peakFee;
+
+    /**
+     * 骞虫椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "骞虫椂娈电數璐逛环鏍�")
+    private BigDecimal flatFee;
+
+    /**
+     * 璋锋椂娈电數璐逛环鏍�
+     */
+    @ApiModelProperty(value = "璋锋椂娈电數璐逛环鏍�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 灏栨椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal sharpServiceFee;
+
+    /**
+     * 宄版椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal peakServiceFee;
+
+    /**
+     * 骞虫椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal flatServiceFee;
+
+    /**
+     * 璋锋椂娈垫湇鍔¤垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈垫湇鍔¤垂浠锋牸")
+    private BigDecimal valleyServiceFee;
+
+    /**
+     * 灏栨椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal sharpParkingFee;
+
+    /**
+     * 宄版椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal peakParkingFee;
+
+    /**
+     * 骞虫椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal flatParkingFee;
+
+    /**
+     * 璋锋椂娈靛仠杞﹁垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈靛仠杞﹁垂浠锋牸")
+    private BigDecimal valleyParkingFee;
+
+    /**
+     * 灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "灏栨椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal sharpOccupancyFee;
+
+    /**
+     * 宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "宄版椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal peakOccupancyFee;
+
+    /**
+     * 骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "骞虫椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal flatOccupancyFee;
+
+    /**
+     * 璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸
+     */
+    @ApiModelProperty(value = "璋锋椂娈佃秴鏃跺崰鐢ㄨ垂浠锋牸")
+    private BigDecimal valleyOccupancyFee;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 璁¤垂绛栫暐璇︽儏鍒楄〃
+     */
+    @ApiModelProperty(value = "璁¤垂绛栫暐鏃堕棿娈佃鎯呭垪琛�")
+    private List<ElectricityTypeSettingItemVO> ruleDetailList;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java
new file mode 100644
index 0000000..04df5a2
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingItemVO.java
@@ -0,0 +1,59 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 浠锋牸瀵硅薄 rule_details
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯璇︽儏鏌ヨ杩斿洖鏃堕棿娈靛疄浣撶被")
+public class ElectricityTypeSettingItemVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯瀛愯〃id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 璁¤垂瑙勫垯id
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long ruleId;
+
+    /**
+     * 璐圭敤绫诲瀷鏃堕棿娈�
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鏃堕棿娈�")
+    private Integer timePeriod;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺")
+    private String type;
+
+    /**
+     * 鐢佃垂绫诲瀷 0:灏� 1:宄� 2:骞� 3:璋� 4:娣辫胺
+     */
+    @ApiModelProperty(value = "璐圭敤绫诲瀷鎻忚堪")
+    private String typeDesc;
+
+    /**
+     * 缁勭粐鏋舵瀯id
+     */
+    @ApiModelProperty(value = "缁勭粐鏋舵瀯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long deptId;
+
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java
new file mode 100644
index 0000000..066d585
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/ElectricityTypeSettingPageListVO.java
@@ -0,0 +1,66 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 璁¤垂瑙勫垯瀵硅薄 rules
+ *
+ * @author ruoyi
+ * @date 2024-06-19
+ */
+@Data
+@ApiModel(value = "璁¤垂瑙勫垯鍒嗛〉鏌ヨ杩斿洖瀹炰綋绫�")
+public class ElectricityTypeSettingPageListVO {
+
+    /**
+     * 涓婚敭
+     */
+    @ApiModelProperty(value = "璁¤垂瑙勫垯id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ApiModelProperty(value = "瑙勫垯鍚嶇О")
+    private String name;
+
+    /**
+     * 鏄惁鐢熸晥
+     */
+    @ApiModelProperty(value = "鏄惁鐢熸晥")
+    private boolean isEffective;
+
+    /**
+     * 鐢熸晥鏃堕棿
+     */
+    @ApiModelProperty(value = "鐢熸晥鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date effectiveDate;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @ApiModelProperty(value = "鍒涘缓鑰�")
+    private String createBy;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java
new file mode 100644
index 0000000..527d55f
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/domain/vo/PeakAndValleyReportVO.java
@@ -0,0 +1,89 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 灏栧嘲骞宠胺鎶ヨ〃 vo
+ */
+@Data
+@NoArgsConstructor
+@ApiModel(value = "灏栧嘲骞宠胺鎶ヨ〃 vo", description = "灏栧嘲骞宠胺鎶ヨ〃 vo")
+public class PeakAndValleyReportVO {
+
+    /**
+     * 鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鏃堕棿")
+    private Date time;
+
+    /**
+     * 灏栬垂鐢�
+     */
+    @ApiModelProperty(value = "灏栬垂鐢�")
+    private BigDecimal sharpFee;
+
+    /**
+     * 灏栫數閲�
+     */
+    @ApiModelProperty(value = "灏栫數閲�")
+    private BigDecimal sharpPower;
+
+    /**
+     * 宄拌垂鐢�
+     */
+    @ApiModelProperty(value = "宄拌垂鐢�")
+    private BigDecimal peakFee;
+
+    /**
+     * 宄扮數閲�
+     */
+    @ApiModelProperty(value = "宄扮數閲�")
+    private BigDecimal peakPower;
+
+    /**
+     * 骞宠垂鐢�
+     */
+    @ApiModelProperty(value = "骞宠垂鐢�")
+    private BigDecimal flatFee;
+
+    /**
+     * 骞崇數閲�
+     */
+    @ApiModelProperty(value = "骞崇數閲�")
+    private BigDecimal flatPower;
+
+    /**
+     * 璋疯垂鐢�
+     */
+    @ApiModelProperty(value = "璋疯垂鐢�")
+    private BigDecimal valleyFee;
+
+    /**
+     * 璋风數閲�
+     */
+    @ApiModelProperty(value = "璋风數閲�")
+    private BigDecimal valleyPower;
+
+
+    public PeakAndValleyReportVO(Date time, BigDecimal sharpFee, BigDecimal sharpPower, BigDecimal peakFee,
+                                 BigDecimal peakPower, BigDecimal flatFee, BigDecimal flatPower, BigDecimal valleyFee,
+                                 BigDecimal valleyPower) {
+        this.time = time;
+        this.sharpFee = sharpFee;
+        this.sharpPower = sharpPower;
+        this.peakFee = peakFee;
+        this.peakPower = peakPower;
+        this.flatFee = flatFee;
+        this.flatPower = flatPower;
+        this.valleyFee = valleyFee;
+        this.valleyPower = valleyPower;
+    }
+}
\ No newline at end of file
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java
new file mode 100644
index 0000000..2ad0763
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityDataItemMapper.java
@@ -0,0 +1,30 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
+
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁瀵硅薄 Mapper鎺ュ彛
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+public interface ElectricityDataItemMapper {
+
+    /**
+     * 鏌ヨ灏栧嘲骞宠胺缁熻鏁版嵁
+     *
+     * @param indexIdSet 鐐逛綅id闆嗗悎
+     * @param startTime  寮�濮嬫椂闂�
+     * @param endTime    鎴鏃堕棿
+     * @param timeType   鏃堕棿绫诲瀷
+     * @return 缁撴灉
+     */
+    List<ElectricityDataItem> getDataStatistics(@Param("indexIdSet") Set<String> indexIdSet, @Param("startTime") Date startTime,
+                                                @Param("endTime") Date endTime, @Param("timeType") String timeType);
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java
new file mode 100644
index 0000000..ec6f0bd
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingItemMapper.java
@@ -0,0 +1,45 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
+
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem;
+
+import java.util.List;
+
+/**
+ * 浠锋牸Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+public interface ElectricityTypeSettingItemMapper {
+
+    /**
+     * 鏍规嵁瑙勫垯id鏌ヨ瑙勫垯璇︽儏
+     *
+     * @param id 瑙勫垯id
+     * @return 缁撴灉
+     */
+    List<ElectricityTypeSettingItem> selectListByRuleId(String id);
+
+    /**
+     * 淇敼
+     *
+     * @param ruleDetails 瑙勫垯璇︽儏
+     */
+    int updateRuleDetails(ElectricityTypeSettingItem ruleDetails);
+
+    /**
+     * 鏂板瑙勫垯鏄庣粏
+     *
+     * @param ruleDetails 瑙勫垯鏄庣粏
+     * @return 缁撴灉
+     */
+    int insertRuleDetails(ElectricityTypeSettingItem ruleDetails);
+
+    /**
+     * 鏍规嵁瑙勫垯id鍒犻櫎瑙勫垯鏄庣粏
+     *
+     * @param ruleId 瑙勫垯id
+     */
+    int deleteRulesByRuleId(String ruleId);
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java
new file mode 100644
index 0000000..a0f4724
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/mapper/ElectricityTypeSettingMapper.java
@@ -0,0 +1,52 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.mapper;
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
+
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+public interface ElectricityTypeSettingMapper {
+
+    /**
+     * 鏌ヨ鍒楄〃
+     */
+    List<ElectricityTypeSettingPageListVO> selectList(String name);
+
+    /**
+     * 鏍规嵁id鏌ヨ璇︽儏
+     *
+     * @param id id
+     * @return 缁撴瀯
+     */
+    ElectricityTypeSetting selectById(String id);
+
+    /**
+     * 鏇存柊
+     *
+     * @param rules 瑙勫垯淇℃伅
+     * @return 缁撴灉
+     */
+    int updateRules(ElectricityTypeSetting rules);
+
+    /**
+     * 鏂板瑙勫垯
+     *
+     * @param rules 瑙勫垯
+     * @return 缁撴灉
+     */
+    int insertRules(ElectricityTypeSetting rules);
+
+    /**
+     * 鍒犻櫎璁¤垂瑙勫垯
+     *
+     * @param id id
+     * @return 缁撴灉
+     */
+    int deleteRulesById(String id);
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java
new file mode 100644
index 0000000..3b0744d
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityDataItemService.java
@@ -0,0 +1,24 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.service;
+
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.PeakAndValleyReportVO;
+
+import java.util.List;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Service鎺ュ彛
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+public interface IElectricityDataItemService {
+
+    /**
+     * 鏌ヨ缁熻鏁版嵁
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    List<PeakAndValleyReportVO> getDataStatistics(ElectricityDataItemListDTO dto);
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java
new file mode 100644
index 0000000..30a3158
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/IElectricityTypeSettingService.java
@@ -0,0 +1,43 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.service;
+
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
+
+import java.util.List;
+
+/**
+ * 璁¤垂瑙勫垯Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+public interface IElectricityTypeSettingService {
+
+    /**
+     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
+     */
+    List<ElectricityTypeSettingPageListVO> selectPageList(String name);
+
+    /**
+     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
+     */
+    ElectricityTypeSettingItemQueryVO getRuleDetail(String id);
+
+    /**
+     * 淇敼璁¤垂绛栫暐
+     */
+    void updateRule(ElectricityTypeSettingUpdateVO request);
+
+    /**
+     * 鏂板璁¤垂绛栫暐
+     */
+    void addRule(ElectricityTypeSettingAddVO request);
+
+    /**
+     * 鍒犻櫎璁¤垂绛栫暐
+     */
+    void delRule(String id);
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java
new file mode 100644
index 0000000..a6918dc
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityDataItemServiceImpl.java
@@ -0,0 +1,114 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.service.impl;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.dingzhuo.energy.common.utils.time.TimeType;
+import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
+import com.dingzhuo.energy.data.model.mapper.ModelNodeMapper;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.enums.ElectricityTypeEnum;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.PeakAndValleyReportVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityDataItemMapper;
+import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityDataItemService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 灏栧嘲骞宠胺鏁版嵁Service涓氬姟灞傚鐞�
+ *
+ * @author sys
+ * @date 2024-08-27
+ */
+@Service
+public class ElectricityDataItemServiceImpl implements IElectricityDataItemService {
+    @Resource
+    private ModelNodeMapper modelNodeMapper;
+    @Resource
+    private ElectricityDataItemMapper electricityDataItemMapper;
+
+
+    /**
+     * 鏌ヨ缁熻鏁版嵁
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    @Override
+    public List<PeakAndValleyReportVO> getDataStatistics(ElectricityDataItemListDTO dto) {
+        List<PeakAndValleyReportVO> reportVOList = new ArrayList<>();
+        // 鏌ヨ鏃堕棿鑼冨洿
+        Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
+        Date endTime = DateUtil.endOfMonth(startTime);
+        String timeType = dto.getTimeType();
+
+        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
+        // 鏌ヨ鐐逛綅淇℃伅
+        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
+        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
+
+            electricityDataMap = dataItemList.stream()
+                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
+        }
+        while (!startTime.after(endTime)) {
+            String mapKey = DateUtil.formatDateTime(startTime);
+            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
+
+            BigDecimal sharpFee = BigDecimal.ZERO;
+            BigDecimal sharpPower = BigDecimal.ZERO;
+            BigDecimal peakFee = BigDecimal.ZERO;
+            BigDecimal peakPower = BigDecimal.ZERO;
+            BigDecimal flatFee = BigDecimal.ZERO;
+            BigDecimal flatPower = BigDecimal.ZERO;
+            BigDecimal valleyFee = BigDecimal.ZERO;
+            BigDecimal valleyPower = BigDecimal.ZERO;
+
+            if (CollectionUtils.isNotEmpty(dataItemList)) {
+                for (ElectricityDataItem electricityDataItem : dataItemList) {
+                    String electricityType = electricityDataItem.getElectricityType();
+
+                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
+                        sharpFee = sharpFee.add(electricityDataItem.getCost());
+                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
+                        peakFee = peakFee.add(electricityDataItem.getCost());
+                        peakPower = peakPower.add(electricityDataItem.getElectricity());
+                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
+                        flatFee = flatFee.add(electricityDataItem.getCost());
+                        flatPower = flatPower.add(electricityDataItem.getElectricity());
+                    } else {
+                        valleyFee = valleyFee.add(electricityDataItem.getCost());
+                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
+                    }
+                }
+            }
+            PeakAndValleyReportVO peakAndValleyReportVO = new PeakAndValleyReportVO(startTime, sharpFee, sharpPower,
+                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
+
+            reportVOList.add(peakAndValleyReportVO);
+            switch (TimeType.valueOf(timeType)) {
+                case HOUR:
+                    startTime = DateUtil.offsetHour(startTime, 1);
+                    break;
+                case DAY:
+                    startTime = DateUtil.offsetDay(startTime, 1);
+                    break;
+                case MONTH:
+                    startTime = DateUtil.offsetMonth(startTime, 1);
+                    break;
+                default:
+                    startTime = DateUtil.offsetMonth(startTime, 12);
+                    break;
+            }
+        }
+
+        return reportVOList;
+    }
+}
diff --git a/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java
new file mode 100644
index 0000000..3558808
--- /dev/null
+++ b/energy_management_server/src/main/java/com/dingzhuo/energy/project/electricityTypeSetting/service/impl/ElectricityTypeSettingServiceImpl.java
@@ -0,0 +1,186 @@
+package com.dingzhuo.energy.project.electricityTypeSetting.service.impl;
+
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingAddVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingItemAddVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingItemUpdateVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityTypeSettingUpdateVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.enums.ElectricityTypeEnum;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemQueryVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingItemVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO;
+import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingItemMapper;
+import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingMapper;
+import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityTypeSettingService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+/**
+ * 璁¤垂瑙勫垯Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2024-06-14
+ */
+@Service
+public class ElectricityTypeSettingServiceImpl implements IElectricityTypeSettingService {
+
+    @Resource
+    private ElectricityTypeSettingMapper rulesMapper;
+    @Resource
+    private ElectricityTypeSettingItemMapper ruleDetailsMapper;
+
+
+    /**
+     * 鏌ヨ璁¤垂瑙勫垯鍒楄〃
+     */
+    @Override
+    public List<ElectricityTypeSettingPageListVO> selectPageList(String name) {
+        List<ElectricityTypeSettingPageListVO> rulesPageListVOList = rulesMapper.selectList(name);
+        if (CollectionUtils.isEmpty(rulesPageListVOList)) {
+            return rulesPageListVOList;
+        }
+        Date maxEffectiveDate = new Date();
+        Date date = new Date();
+
+        for (ElectricityTypeSettingPageListVO vo : rulesPageListVOList) {
+            Date effectiveDate = vo.getEffectiveDate();
+            // 鍒ゆ柇骞惰缃� effective 灞炴��
+            if (effectiveDate.before(date) && effectiveDate.after(maxEffectiveDate)) {
+                maxEffectiveDate = effectiveDate;
+                vo.setEffective(true);
+            }
+        }
+        return rulesPageListVOList;
+    }
+
+    /**
+     * 鑾峰彇璁¤垂瑙勫垯璇︽儏
+     */
+    @Override
+    public ElectricityTypeSettingItemQueryVO getRuleDetail(String id) {
+        ElectricityTypeSettingItemQueryVO rulesDetailQueryResponse = new ElectricityTypeSettingItemQueryVO();
+
+        ElectricityTypeSetting rules = rulesMapper.selectById(id);
+        if (ObjectUtils.isEmpty(rules)) {
+            return rulesDetailQueryResponse;
+        }
+        BeanUtils.copyProperties(rules, rulesDetailQueryResponse);
+
+        List<ElectricityTypeSettingItem> detailsList = ruleDetailsMapper.selectListByRuleId(id);
+        if (ObjectUtils.isNotEmpty(detailsList)) {
+            List<ElectricityTypeSettingItemVO> ruleDetailList = new ArrayList<>();
+            for (ElectricityTypeSettingItem ruleDetails : detailsList) {
+                ElectricityTypeSettingItemVO ruleDetailsResponse = new ElectricityTypeSettingItemVO();
+                BeanUtils.copyProperties(ruleDetails, ruleDetailsResponse);
+                ruleDetailsResponse.setTypeDesc(ElectricityTypeEnum.getNameByType(ruleDetails.getType()));
+                ruleDetailList.add(ruleDetailsResponse);
+            }
+            rulesDetailQueryResponse.setRuleDetailList(ruleDetailList);
+        }
+        return rulesDetailQueryResponse;
+    }
+
+    /**
+     * 淇敼璁¤垂绛栫暐
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateRule(ElectricityTypeSettingUpdateVO request) {
+        ElectricityTypeSetting rules = rulesMapper.selectById(request.getId());
+        if (ObjectUtils.isEmpty(rules)) {
+            throw new RuntimeException("璁¤垂瑙勫垯涓嶅瓨鍦�");
+        }
+
+        // 鍒ゆ柇褰撳墠鐢熸晥鏃堕棿涓嶈兘灏忎簬褰撳墠鏃ユ湡
+        Date now = new Date();
+        Date inputDate = request.getEffectiveDate();
+        if (inputDate.before(now) || inputDate.equals(now)) {
+            throw new RuntimeException("浼犲叆鏃堕棿鏃╀簬鎴栫瓑浜庡綋鍓嶆椂闂�: " + inputDate);
+        }
+
+        List<ElectricityTypeSettingItemUpdateVO> ruleDetailList = request.getRuleDetailList();
+
+        if (ruleDetailList.size() != 48) {
+            throw new RuntimeException("鏀惰垂鏃堕棿娈靛繀椤绘槸48鏉�");
+        }
+
+        BeanUtils.copyProperties(request, rules);
+        rulesMapper.updateRules(rules);
+
+        for (ElectricityTypeSettingItemUpdateVO ruleDetailsRequest : ruleDetailList) {
+            ElectricityTypeSettingItem ruleDetails = new ElectricityTypeSettingItem();
+
+            ruleDetails.setId(ruleDetailsRequest.getId());
+            ruleDetails.setType(ruleDetailsRequest.getType());
+            if (ObjectUtils.isNotEmpty(ruleDetailsRequest.getRemark())) {
+                ruleDetails.setRemark(ruleDetailsRequest.getRemark());
+            }
+            ruleDetailsMapper.updateRuleDetails(ruleDetails);
+        }
+    }
+
+    /**
+     * 鏂板璁¤垂绛栫暐
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addRule(ElectricityTypeSettingAddVO request) {
+        Date effectiveDate = request.getEffectiveDate();
+        Date now = new Date();
+        if (effectiveDate.before(now) || effectiveDate.equals(now)) {
+            throw new RuntimeException("浼犲叆鏃堕棿鏃╀簬鎴栫瓑浜庡綋鍓嶆椂闂�");
+        }
+
+        List<ElectricityTypeSettingItemAddVO> ruleDetailList = request.getRuleDetailList();
+
+        if (ruleDetailList.size() != 48) {
+            throw new RuntimeException("鏀惰垂鏃堕棿娈靛繀椤绘槸48鏉�!");
+        }
+        List<Integer> timePeriodList = ruleDetailList.stream().distinct().map(ElectricityTypeSettingItemAddVO::getTimePeriod).collect(Collectors.toList());
+        if (timePeriodList.size() != ruleDetailList.size()) {
+            throw new RuntimeException("鏀惰垂鏃堕棿娈典笉鑳介噸澶�!");
+        }
+        Date createTime = new Date();
+
+        ElectricityTypeSetting rules = new ElectricityTypeSetting();
+        BeanUtils.copyProperties(request, rules);
+        rules.setId(UUID.randomUUID().toString());
+        rules.setCreateTime(createTime);
+        rulesMapper.insertRules(rules);
+
+        for (ElectricityTypeSettingItemAddVO ruleDetailsAddRequest : ruleDetailList) {
+            ElectricityTypeSettingItem ruleDetails = new ElectricityTypeSettingItem();
+            ruleDetails.setRuleId(rules.getId());
+            BeanUtils.copyProperties(ruleDetailsAddRequest, ruleDetails);
+            ruleDetails.setId(UUID.randomUUID().toString());
+            ruleDetails.setCreateTime(createTime);
+            ruleDetailsMapper.insertRuleDetails(ruleDetails);
+        }
+    }
+
+    /**
+     * 鍒犻櫎璁¤垂绛栫暐
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delRule(String id) {
+        ElectricityTypeSetting rules = rulesMapper.selectById(id);
+        if (ObjectUtils.isEmpty(rules)) {
+            throw new RuntimeException("璁¤垂瑙勫垯涓嶅瓨鍦�");
+        }
+
+        rulesMapper.deleteRulesById(id);
+        ruleDetailsMapper.deleteRulesByRuleId(id);
+    }
+}
diff --git a/energy_management_server/src/main/resources/application.yml b/energy_management_server/src/main/resources/application.yml
index 845816c..7906203 100644
--- a/energy_management_server/src/main/resources/application.yml
+++ b/energy_management_server/src/main/resources/application.yml
@@ -1,7 +1,7 @@
 # 椤圭洰鐩稿叧閰嶇疆
 ruoyi:
   # 鍚嶇О
-  name: 涓滀附鍖荤枟
+  name: 鏅虹⒊鏈潵EMS
   # 鐗堟湰
   version: 1.0.0
   # 鐗堟潈骞翠唤
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml
new file mode 100644
index 0000000..0b5a2f3
--- /dev/null
+++ b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityDataItemMapper.xml
@@ -0,0 +1,31 @@
+<?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="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityDataItemMapper">
+
+
+    <select id="getDataStatistics"
+            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem">
+        SELECT
+        index_code indexCode,
+        time_code timeCode,
+        electricity_type electricityType,
+        data_time dataTime,
+        electricity,
+        "cost",
+        time_type timeType,
+        price,
+        remark
+        FROM
+        "electricity_data_item"
+        WHERE
+        index_id IN
+        <foreach collection="indexIdSet" item="indexId" open="(" separator="," close=")">
+            #{indexId}
+        </foreach>
+        AND (data_time BETWEEN #{startTime} AND #{endTime})
+        AND time_type = #{timeType}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml
new file mode 100644
index 0000000..1d17839
--- /dev/null
+++ b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingItemMapper.xml
@@ -0,0 +1,88 @@
+<?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="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingItemMapper">
+
+    <sql id="selectRuleDetailsVo">
+        select id,
+               rule_id,
+               start_time,
+               end_time,
+               type,
+               dept_id,
+               del_flag,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from electricity_type_setting_item
+    </sql>
+
+    <select id="selectListByRuleId"
+            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSettingItem">
+        SELECT *
+        FROM electricity_type_setting_item
+        WHERE rule_id = #{id}
+    </select>
+
+    <insert id="insertRuleDetails" parameterType="ElectricityTypeSettingItem">
+        insert into electricity_type_setting_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null ">id,</if>
+            <if test="ruleId != null ">rule_id,</if>
+            <if test="type != null ">type,</if>
+            <if test="deptId != null ">dept_id,</if>
+            <if test="delFlag != null ">del_flag,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+            <if test="timePeriod != null ">time_period,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null ">#{id},</if>
+            <if test="ruleId != null ">#{ruleId},</if>
+            <if test="type != null ">#{type},</if>
+            <if test="deptId != null ">#{deptId},</if>
+            <if test="delFlag != null ">#{delFlag},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+            <if test="timePeriod != null ">#{timePeriod},</if>
+        </trim>
+    </insert>
+
+    <update id="updateRuleDetails" parameterType="ElectricityTypeSettingItem">
+        update electricity_type_setting_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="ruleId != null ">rule_id = #{ruleId},</if>
+            <if test="type != null ">type = #{type},</if>
+            <if test="deptId != null ">dept_id = #{deptId},</if>
+            <if test="delFlag != null ">del_flag = #{delFlag},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+            <if test="timePeriod != null ">time_period = #{timePeriod},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteRuleDetailsById">
+        delete
+        from electricity_type_setting_item
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteRulesByRuleId">
+        delete
+        from electricity_type_setting_item
+        where rule_id = #{ruleId}
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml
new file mode 100644
index 0000000..2a59d5f
--- /dev/null
+++ b/energy_management_server/src/main/resources/mybatis/electricityTypeSetting/ElectricityTypeSettingMapper.xml
@@ -0,0 +1,108 @@
+<?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="com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityTypeSettingMapper">
+
+    <select id="selectList"
+            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.ElectricityTypeSettingPageListVO">
+        select
+        id,
+        name,
+        sharp_fee AS sharpFee,
+        peak_fee AS peakFee,
+        flat_fee AS flatFee,
+        valley_fee AS valleyFee,
+        create_by AS createBy,
+        create_time AS createTime,
+        effective_date AS effectiveDate,
+        remark
+        from electricity_type_setting
+        <where>
+            <if test="name != null  and name != ''">
+                and name like concat('%', #{name}, '%')
+            </if>
+            and del_flag = '0'
+        </where>
+        order by create_time desc
+    </select>
+    <select id="selectById"
+            resultType="com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityTypeSetting">
+        select id,
+               name,
+               effective_date,
+               sharp_fee,
+               peak_fee,
+               flat_fee,
+               valley_fee,
+               effective_date,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from electricity_type_setting
+        where id = #{id}
+    </select>
+
+    <insert id="insertRules" parameterType="ElectricityTypeSetting">
+        insert into electricity_type_setting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null ">id,</if>
+            <if test="name != null  and name != ''">name,</if>
+            <if test="sharpFee != null ">sharp_fee,</if>
+            <if test="peakFee != null ">peak_fee,</if>
+            <if test="flatFee != null ">flat_fee,</if>
+            <if test="valleyFee != null ">valley_fee,</if>
+            <if test="effectiveDate != null ">effective_date,</if>
+            <if test="deptId != null ">dept_id,</if>
+            <if test="delFlag != null ">del_flag,</if>
+            <if test="createBy != null  and createBy != ''">create_by,</if>
+            <if test="createTime != null ">create_time,</if>
+            <if test="updateBy != null  and updateBy != ''">update_by,</if>
+            <if test="updateTime != null ">update_time,</if>
+            <if test="remark != null  and remark != ''">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null ">#{id},</if>
+            <if test="name != null  and name != ''">#{name},</if>
+            <if test="sharpFee != null ">#{sharpFee},</if>
+            <if test="peakFee != null ">#{peakFee},</if>
+            <if test="flatFee != null ">#{flatFee},</if>
+            <if test="valleyFee != null ">#{valleyFee},</if>
+            <if test="effectiveDate != null ">#{effectiveDate},</if>
+            <if test="deptId != null ">#{deptId},</if>
+            <if test="delFlag != null ">#{delFlag},</if>
+            <if test="createBy != null  and createBy != ''">#{createBy},</if>
+            <if test="createTime != null ">#{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">#{updateBy},</if>
+            <if test="updateTime != null ">#{updateTime},</if>
+            <if test="remark != null  and remark != ''">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateRules" parameterType="ElectricityTypeSetting">
+        update electricity_type_setting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null  and name != ''">name = #{name},</if>
+            <if test="sharpFee != null ">sharp_fee = #{sharpFee},</if>
+            <if test="peakFee != null ">peak_fee = #{peakFee},</if>
+            <if test="flatFee != null ">flat_fee = #{flatFee},</if>
+            <if test="valleyFee != null ">valley_fee = #{valleyFee},</if>
+            <if test="effectiveDate != null ">valley_fee = #{effectiveDate},</if>
+            <if test="createBy != null  and createBy != ''">create_by = #{createBy},</if>
+            <if test="createTime != null ">create_time = #{createTime},</if>
+            <if test="updateBy != null  and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="updateTime != null ">update_time = #{updateTime},</if>
+            <if test="remark != null  and remark != ''">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteRulesById">
+        delete
+        from electricity_type_setting
+        where id = #{id}
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/energy_management_ui/src/api/energyPrice/price.js b/energy_management_ui/src/api/energyPrice/price.js
new file mode 100644
index 0000000..25c1251
--- /dev/null
+++ b/energy_management_ui/src/api/energyPrice/price.js
@@ -0,0 +1,40 @@
+import request from "@/utils/request";
+
+export default {
+  // 鏌ヨ鍙傛暟鍒楄〃
+  pageRule(query) {
+    return request({
+      url: "/rule/list",
+      method: "get",
+      params: query
+    });
+  },
+  addRule(query) {
+    return request({
+      url: "/rule/addRule",
+      method: "post",
+      data: query
+    });
+  },
+  editRule(query) {
+    return request({
+      url: "/rule/updateRule",
+      method: "post",
+      data: query
+    });
+  },
+  delRule(query) {
+    return request({
+      url: "/rule/delRule/" + query.id,
+      method: "delete",
+      params: query
+    });
+  },
+  getRuleDetail(query) {
+    return request({
+      url: "/rule/getRuleDetail",
+      method: "get",
+      params: query
+    });
+  }
+};
diff --git a/energy_management_ui/src/assets/home/homeiconD.png b/energy_management_ui/src/assets/home/homeiconD.png
new file mode 100644
index 0000000..7cd6a20
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconD.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconDQ.png b/energy_management_ui/src/assets/home/homeiconDQ.png
new file mode 100644
index 0000000..b92ab7b
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconDQ.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconJ.png b/energy_management_ui/src/assets/home/homeiconJ.png
new file mode 100644
index 0000000..76601fa
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconJ.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconT.png b/energy_management_ui/src/assets/home/homeiconT.png
new file mode 100644
index 0000000..7f8ab87
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconT.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconW.png b/energy_management_ui/src/assets/home/homeiconW.png
new file mode 100644
index 0000000..96b723d
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconW.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeiconY.png b/energy_management_ui/src/assets/home/homeiconY.png
new file mode 100644
index 0000000..ba6dc10
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeiconY.png
Binary files differ
diff --git a/energy_management_ui/src/assets/home/homeicontitle.png b/energy_management_ui/src/assets/home/homeicontitle.png
new file mode 100644
index 0000000..e882f61
--- /dev/null
+++ b/energy_management_ui/src/assets/home/homeicontitle.png
Binary files differ
diff --git a/energy_management_ui/src/assets/icons/checkbox.png b/energy_management_ui/src/assets/icons/checkbox.png
new file mode 100644
index 0000000..498f98e
--- /dev/null
+++ b/energy_management_ui/src/assets/icons/checkbox.png
Binary files differ
diff --git a/energy_management_ui/src/assets/icons/checked.png b/energy_management_ui/src/assets/icons/checked.png
new file mode 100644
index 0000000..4624643
--- /dev/null
+++ b/energy_management_ui/src/assets/icons/checked.png
Binary files differ
diff --git a/energy_management_ui/src/assets/image/bg.jpg b/energy_management_ui/src/assets/image/bg.jpg
new file mode 100644
index 0000000..e95e661
--- /dev/null
+++ b/energy_management_ui/src/assets/image/bg.jpg
Binary files differ
diff --git a/energy_management_ui/src/assets/image/breadcrumbBg.png b/energy_management_ui/src/assets/image/breadcrumbBg.png
new file mode 100644
index 0000000..9438d9c
--- /dev/null
+++ b/energy_management_ui/src/assets/image/breadcrumbBg.png
Binary files differ
diff --git a/energy_management_ui/src/assets/image/isbreadcrumbBg.png b/energy_management_ui/src/assets/image/isbreadcrumbBg.png
new file mode 100644
index 0000000..7d85284
--- /dev/null
+++ b/energy_management_ui/src/assets/image/isbreadcrumbBg.png
Binary files differ
diff --git a/energy_management_ui/src/assets/image/navbar/Group.png b/energy_management_ui/src/assets/image/navbar/Group.png
new file mode 100644
index 0000000..d307977
--- /dev/null
+++ b/energy_management_ui/src/assets/image/navbar/Group.png
Binary files differ
diff --git a/energy_management_ui/src/assets/image/treeBg.png b/energy_management_ui/src/assets/image/treeBg.png
new file mode 100644
index 0000000..ea4587e
--- /dev/null
+++ b/energy_management_ui/src/assets/image/treeBg.png
Binary files differ
diff --git a/energy_management_ui/src/layout/index.vue b/energy_management_ui/src/layout/index.vue
index b9ad55e..9c16707 100644
--- a/energy_management_ui/src/layout/index.vue
+++ b/energy_management_ui/src/layout/index.vue
@@ -9,9 +9,25 @@
     <div :class="{ hasTagsView: needTagsView }" class="main-container">
       <div :class="{ 'fixed-header': fixedHeader }">
         <navbar />
-        <!-- <div style="height: 70px;background: #fff;">
-          caidan-鑿滃崟
-        </div> -->
+        <div class="tabs-container">
+          <el-tabs
+            v-model="activePage"
+            type="card"
+            closable
+            @edit="handleTabsEdit"
+          >
+            <el-tab-pane
+              :id="page.fullPath"
+              :key="page.fullPath"
+              v-for="(page, index) in pageList"
+              :label="page.meta.title"
+              :name="page.fullPath"
+              :closable="!(page.meta.title == '棣栭〉')"
+            >
+              <!-- {{ page.content }} -->
+            </el-tab-pane>
+          </el-tabs>
+        </div>
       </div>
       <app-main />
     </div>
@@ -24,6 +40,7 @@
 import ResizeMixin from "./mixin/ResizeHandler";
 import { mapState } from "vuex";
 
+const indexKey = "/index";
 export default {
   name: "Layout",
   components: {
@@ -32,6 +49,14 @@
     RightPanel,
     Sidebar
   },
+  data() {
+    return {
+      pageList: [],
+      linkList: [],
+      activePage: "",
+      multipage: true
+    };
+  },
   mixins: [ResizeMixin],
   computed: {
     ...mapState({
@@ -39,7 +64,8 @@
       device: state => state.app.device,
       showSettings: state => state.settings.showSettings,
       needTagsView: state => state.settings.tagsView,
-      fixedHeader: state => state.settings.fixedHeader
+      fixedHeader: state => state.settings.fixedHeader,
+      tagsView: state => state.tagsView
     }),
     classObj() {
       return {
@@ -50,7 +76,117 @@
       };
     }
   },
+  created() {
+    if (this.$route.path !== indexKey) {
+      this.addIndexToFirst();
+    }
+    // 澶嶅埗涓�涓猺oute瀵硅薄鍑烘潵锛屼笉鑳藉奖鍝嶅師route
+    let currentRoute = Object.assign({}, this.$route);
+    currentRoute.meta = Object.assign({}, currentRoute.meta);
+    this.pageList.push(currentRoute);
+    this.linkList.push(currentRoute.fullPath);
+    this.activePage = currentRoute.fullPath;
+    console.log("pageList", this.pageList);
+  },
+  watch: {
+    $route: function(newRoute) {
+      this.activePage = newRoute.fullPath;
+      if (!this.multipage) {
+        this.linkList = [newRoute.fullPath];
+        this.pageList = [Object.assign({}, newRoute)];
+        // update-begin-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛�
+      } else if (indexKey == newRoute.fullPath) {
+        //棣栭〉鏃� 鍒ゆ柇鏄惁缂撳瓨 娌℃湁缂撳瓨 鍒锋柊涔�
+        if (newRoute.meta.keepAlive === false) {
+          this.routeReload();
+        }
+        // update-end-author:taoyan date:20200211 for: TASK #3368 銆愯矾鐢辩紦瀛樸�戦椤电殑缂撳瓨璁剧疆鏈夐棶棰橈紝闇�瑕佹牴鎹悗鍙扮殑璺敱閰嶇疆鏉ュ疄鐜版槸鍚︾紦瀛�
+      } else if (this.linkList.indexOf(newRoute.fullPath) < 0) {
+        this.linkList.push(newRoute.fullPath);
+        this.pageList.push(Object.assign({}, newRoute));
+        //// update-begin-author:sunjianlei date:20200103 for: 濡傛灉鏂板鐨勯〉闈㈤厤缃簡缂撳瓨璺敱锛岄偅涔堝氨寮哄埗鍒锋柊涓�閬� #842
+        // if (newRoute.meta.keepAlive) {
+        //   this.routeReload()
+        // }
+        //// update-end-author:sunjianlei date:20200103 for: 濡傛灉鏂板鐨勯〉闈㈤厤缃簡缂撳瓨璺敱锛岄偅涔堝氨寮哄埗鍒锋柊涓�閬� #842
+      } else if (this.linkList.indexOf(newRoute.fullPath) >= 0) {
+        let oldIndex = this.linkList.indexOf(newRoute.fullPath);
+        let oldPositionRoute = this.pageList[oldIndex];
+        this.pageList.splice(
+          oldIndex,
+          1,
+          Object.assign({}, newRoute, { meta: oldPositionRoute.meta })
+        );
+      }
+    },
+    activePage: function(key) {
+      let index = this.linkList.lastIndexOf(key);
+      let waitRouter = this.pageList[index];
+      // 銆怲ESTA-523銆戜慨澶嶏細涓嶅厑璁搁噸澶嶈烦杞矾鐢卞紓甯�
+      if (waitRouter.fullPath !== this.$route.fullPath) {
+        this.$router.push(Object.assign({}, waitRouter));
+      }
+      // this.changeTitle(waitRouter.meta.title);
+    }
+  },
   methods: {
+    addIndexToFirst() {
+      this.pageList.splice(0, 0, {
+        name: "home",
+        path: indexKey,
+        fullPath: indexKey,
+        meta: {
+          icon: "dashboard",
+          title: "棣栭〉"
+        }
+      });
+      this.linkList.splice(0, 0, indexKey);
+    },
+    changePage(key) {
+      this.activePage = key;
+    },
+    handleTabsEdit(key, action) {
+      console.log("handleTabsEdit", key, action);
+      this[action](key);
+    },
+    remove(key) {
+      if (key == indexKey) {
+        this.$message({
+          message: "棣栭〉涓嶈兘鍏抽棴!",
+          type: "warning"
+        });
+        return;
+      }
+      if (this.pageList.length === 1) {
+        this.$message({
+          message: "杩欐槸鏈�鍚庝竴椤碉紝涓嶈兘鍐嶅叧闂簡鍟�",
+          type: "warning"
+        });
+        return;
+      }
+      let removeRoute = this.pageList.filter(item => item.fullPath == key);
+      this.pageList = this.pageList.filter(item => item.fullPath !== key);
+      let index = this.linkList.indexOf(key);
+      this.linkList = this.linkList.filter(item => item !== key);
+      index = index >= this.linkList.length ? this.linkList.length - 1 : index;
+      this.activePage = this.linkList[index];
+
+      //update-begin--Author:scott  Date:20201015 for锛氳矾鐢辩紦瀛橀棶棰橈紝鍏抽棴浜唗ab椤垫椂鍐嶆墦寮�灏变笉鍒锋柊 #842
+      //鍏抽棴椤甸潰鍒欎粠缂撳瓨cache_included_routes涓垹闄よ矾鐢憋紝涓嬫鐐瑰嚮鑿滃崟浼氶噸鏂板姞杞介〉闈�
+      // let cacheRouterArray = Vue.ls.get(CACHE_INCLUDED_ROUTES) || [];
+      // if (removeRoute && removeRoute[0]) {
+      //   let componentName = removeRoute[0].meta.componentName;
+      //   if (cacheRouterArray.includes(componentName)) {
+      //     cacheRouterArray.splice(
+      //       cacheRouterArray.findIndex(item => item === componentName),
+      //       1
+      //     );
+      //     Vue.ls.set(CACHE_INCLUDED_ROUTES, cacheRouterArray);
+      //   }
+      //   this.emitPageClosed(removeRoute[0]);
+      // }
+      //update-end--Author:scott  Date:20201015 for锛氳矾鐢辩紦瀛橀棶棰橈紝鍏抽棴浜唗ab椤垫椂鍐嶆墦寮�灏变笉鍒锋柊 #842
+    },
     handleClickOutside() {
       this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
     }
@@ -67,6 +203,7 @@
   position: relative;
   height: 100%;
   width: 100%;
+  background: #001233;
 
   &.mobile.openSidebar {
     position: fixed;
@@ -74,6 +211,37 @@
   }
 }
 
+.tabs-container {
+  // background: #fff;
+  background: #001233;
+  height: #{$tabBarHeight};
+  ::v-deep {
+    .el-tabs__item {
+      height: #{$tabBarHeight};
+      line-height: #{$tabBarHeight};
+      background: url("../assets/image/breadcrumbBg.png") no-repeat;
+      background-size: 100% 100%;
+      border: none;
+      margin-right: 10px;
+      color: #95c1fd;
+    }
+    .is-active {
+      color: #fff;
+      background: url("../assets/image/isbreadcrumbBg.png") no-repeat;
+      background-size: 100% 100%;
+    }
+    .el-tabs__nav {
+      border: none !important;
+    }
+    .el-tabs__header {
+      margin: 0 !important;
+    }
+    .el-tabs--card > .el-tabs__header {
+      border-bottom: none;
+    }
+  }
+}
+
 .drawer-bg {
   background: #000;
   opacity: 0.3;
diff --git a/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue b/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue
new file mode 100644
index 0000000..075a6ea
--- /dev/null
+++ b/energy_management_ui/src/views/electricityPrice/statistics/electricityIndexNew.vue
@@ -0,0 +1,181 @@
+<template>
+  <div class="app-container">
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="缁熻鏃堕棿">
+        <el-date-picker
+          clearable
+          size="small"
+          style="width: 100%"
+          v-model="queryParams.queryTime"
+          type="month"
+          :clearable="false"
+          value-format="yyyy-MM"
+          placeholder="閫夋嫨鏈堜唤"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >鎼滅储</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >閲嶇疆</el-button
+        >
+        <!--<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">瀵煎嚭</el-button>-->
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="24" :lg="24">
+        <el-table border style="width: 100%" :data="tabledata">
+          <el-table-column
+            prop="time"
+            label="鏃ユ湡"
+            width="150"
+          ></el-table-column>
+          <el-table-column label="灏栨椂娈�">
+            <el-table-column label="鐢甸噺" prop="sharpPower" />
+            <el-table-column label="璐圭敤" prop="sharpFee" />
+          </el-table-column>
+          <el-table-column label="宄版椂娈�">
+            <el-table-column label="鐢甸噺" prop="peakPower" />
+            <el-table-column label="璐圭敤" prop="peakFee" />
+          </el-table-column>
+          <el-table-column label="骞虫椂娈�">
+            <el-table-column label="鐢甸噺" prop="flatPower" />
+            <el-table-column label="璐圭敤" prop="flatFee" />
+          </el-table-column>
+          <el-table-column label="璋锋椂娈�">
+            <el-table-column label="鐢甸噺" prop="valleyPower" />
+            <el-table-column label="璐圭敤" prop="valleyFee" />
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    <!-- <el-row :gutter="32">
+      <el-col :xs="24" :sm="24" :lg="24" >
+        <div class="chart-wrapper" style="margin-top: 20px;">
+          <pie-chart ref="pieChart" :chart-data="pieChartData"/>
+        </div>
+      </el-col>
+    </el-row> -->
+  </div>
+</template>
+<script>
+import { getElectricityDataItemStatistics } from "@/api/electricityPrice/statistics";
+import pieChart from "./pieChart";
+export default {
+  components: { pieChart },
+  data() {
+    return {
+      tablehead: [],
+      tabledata: [],
+      dateTypeOptions: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        timeType: "MONTH",
+        queryTime: "",
+        nodeId: undefined,
+        modelCode: undefined
+      },
+      pieChartData: {},
+      resultList: [],
+      skinName: ""
+    };
+  },
+  created() {
+    this.queryParams.queryTime = this.formatDate(new Date());
+  },
+  methods: {
+    modelNodeChange(node) {
+      this.queryParams.nodeId = node.id;
+      this.queryParams.nodeName = node.label;
+      this.getList();
+    },
+    getList() {
+      let params = {
+        ...this.queryParams,
+        timeType: "MONTH",
+        // modelCode: this.$route.query.modelCode
+        modelCode: "PEAK_VALLEY"
+      };
+      getElectricityDataItemStatistics(params).then(response => {
+        this.tabledata = response.data;
+      });
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    numFilter(value) {
+      // 鎴彇褰撳墠鏁版嵁鍒板皬鏁扮偣鍚庣殑鍑犱綅
+      let realVal = "";
+      if (!isNaN(value) && value !== "") {
+        realVal = parseFloat(value).toFixed(this.skinName);
+      } else {
+        realVal = "0.00";
+      }
+      return realVal;
+    },
+
+    getTime() {
+      var myDate = new Date();
+      var monthFirst = new Date(
+        myDate.getFullYear(),
+        parseInt(myDate.getMonth())
+      );
+      this.queryParams.beginTime = this.formatDate(monthFirst);
+      //this.queryParams.endTime=this.formatDate(monthFirst);
+      this.queryParams.endTime = this.getCurrentMonthLast(monthFirst);
+    },
+    //鑾峰彇鏈堜唤鏈�鍚庝竴澶�
+    getCurrentMonthLast(endTime) {
+      var date = new Date(endTime);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      month = month < 10 ? "0" + month : month;
+      var day = new Date(year, month, 0);
+      let endTimes = "";
+      endTimes = year + "-" + month + "-" + day.getDate();
+      return endTimes;
+    },
+    formatDate: function(value) {
+      let date = new Date(value);
+      let y = date.getFullYear();
+      let MM = date.getMonth() + 1;
+      MM = MM < 10 ? "0" + MM : MM;
+      let d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      let h = date.getHours();
+      h = h < 10 ? "0" + h : h;
+      let m = date.getMinutes();
+      m = m < 10 ? "0" + m : m;
+      let s = date.getSeconds();
+      s = s < 10 ? "0" + s : s;
+      return y + "-" + MM;
+    }
+  }
+};
+</script>
+<style lang="scss">
+.el-table td,
+.el-table th {
+  text-align: center !important;
+}
+</style>
diff --git a/energy_management_ui/src/views/energyPrice/index copy.vue b/energy_management_ui/src/views/energyPrice/index copy.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/energy_management_ui/src/views/energyPrice/index copy.vue
diff --git a/energy_management_ui/src/views/energyPrice/index.vue b/energy_management_ui/src/views/energyPrice/index.vue
new file mode 100644
index 0000000..150bbfa
--- /dev/null
+++ b/energy_management_ui/src/views/energyPrice/index.vue
@@ -0,0 +1,558 @@
+<template>
+  <div>
+    <basic-container>
+      <el-form
+        :model="queryParams"
+        ref="queryForm"
+        label-width="72px"
+        class="special-form"
+      >
+        <el-row :gutter="24">
+          <el-col :span="6">
+            <el-form-item label="绛栫暐鍚嶇О" prop="name">
+              <el-input
+                v-model="queryParams.name"
+                placeholder="璇疯緭鍏ョ瓥鐣ュ悕绉�"
+                clearable
+                size="small"
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="18">
+            <el-form-item class="operation">
+              <el-button
+                type="primary"
+                icon="el-icon-search"
+                size="mini"
+                @click="handleQuery"
+                >鎼滅储</el-button
+              >
+              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+                >閲嶇疆</el-button
+              >
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </basic-container>
+    <basic-container style="margin-top: 16px" :bodyStyle="bodyStyle">
+      <el-row :gutter="10" class="mb8" style="margin-bottom: 19px">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            icon="el-icon-plus"
+            size="mini"
+            @click="handleAdd"
+            >鏂板
+          </el-button>
+        </el-col>
+      </el-row>
+      <el-table
+        v-loading="loading"
+        :data="tableData"
+        :height="height"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column
+          label="璁¤垂绛栫暐鍚嶇О"
+          prop="name"
+          :show-overflow-tooltip="true"
+        />
+        <!-- <el-table-column label="灏栬垂鐢�" prop="sharpFee" />
+        <el-table-column label="宄拌垂鐢�" prop="peakFee" />
+        <el-table-column label="骞宠垂鐢�" prop="flatFee" />
+        <el-table-column label="璋疯垂鐢�" prop="valleyFee" /> -->
+        <el-table-column label="鏄惁鐢熸晥" prop="effective" align="center">
+          <template slot-scope="scope">
+            {{ scope.row.effective ? "鏄�" : "鍚�" }}
+          </template>
+        </el-table-column>
+        <el-table-column label="鐢熸晥鏃堕棿" prop="effectiveDate" align="center" />
+        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime">
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔"
+          align="center"
+          width="240"
+          class-name="small-padding fixed-width"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-edit"
+              @click="handleUpdate(scope.row)"
+              >淇敼
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDelete(scope.row)"
+              >鍒犻櫎
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </basic-container>
+    <!-- 娣诲姞鎴栦慨鏀�-->
+    <el-dialog
+      :title="title"
+      :visible.sync="open"
+      width="1000px"
+      class="dialog-form-row"
+    >
+      <el-form ref="form" :model="form" :rules="rules" label-width="150px">
+        <el-form-item class="nav-form-item" label="璁¤垂绛栫暐鍚嶇О" prop="name">
+          <el-input
+            maxlength="20"
+            v-model="form.name"
+            style="width: 425px"
+            placeholder="璇疯緭鍏ヨ璐圭瓥鐣ュ悕绉�"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item
+          class="nav-form-item"
+          label="鐢熸晥鏃堕棿"
+          prop="effectiveDate"
+        >
+          <el-date-picker
+            clearabl
+            style="width: 425px"
+            v-model="form.effectiveDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="閫夋嫨鐢熸晥鏃堕棿"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item class="nav-form-item" label="澶囨敞淇℃伅" prop="remark">
+          <el-input
+            type="textarea"
+            maxlength="200"
+            v-model="form.remark"
+            style="width: 425px"
+            placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+          />
+        </el-form-item>
+        <el-form-item class="nav-form-item" label="鐢佃垂锛堝厓/搴︼級">
+          <el-row
+            v-for="(item, index) in priceTypeList"
+            :key="index"
+            style="margin-bottom: 5px"
+          >
+            <el-tag
+              :style="
+                'margin-right: 20px;color: #fff;background-color: ' +
+                  item.cor +
+                  ';border-color:' +
+                  item.cor
+              "
+              >{{ item.txt }}</el-tag
+            >
+            <el-input-number
+              v-model="item.price"
+              controls-position="right"
+              :min="0.0"
+              :max="10"
+              :step="0.1"
+              style="width: 200px; margin-right: 10px"
+            ></el-input-number>
+          </el-row>
+          <div class="tipmincc" style="color: #fff;font-size: 13px;">
+            锛堝嘲銆佸钩銆佽胺鏃舵浠锋牸鍧囦负蹇呭~椤广�傚洜鍚勫湴鐢典环涓嶅悓锛岃鏍规嵁褰撳湴瀹為檯鐢典环濉啓銆傦級
+          </div>
+        </el-form-item>
+        <el-form-item class="nav-form-item" label="鏃舵璁剧疆">
+          <el-row>
+            <el-button
+              v-for="(item, index) in priceTypeList"
+              :key="index"
+              :style="
+                'margin-right: 20px;color: #fff;margin-top: 5px;margin-bottom: 20px;background-color: ' +
+                  item.cor +
+                  ';border-color:' +
+                  item.cor
+              "
+              @click="setTimeType(item.priceType)"
+            >
+              璁剧疆涓簕{ item.txt }}
+            </el-button>
+          </el-row>
+          <el-row>
+            <div style="display: flex; flex-wrap: wrap">
+              <div
+                class="time-item"
+                v-for="time in timePeriodList"
+                :key="time.value"
+                @click="time.selected = !time.selected"
+              >
+                <img
+                  class="sel-img"
+                  v-if="time.selected"
+                  src="@/assets/icons/checked.png"
+                  alt=""
+                />
+                <img
+                  class="sel-img"
+                  v-else
+                  src="@/assets/icons/checkbox.png"
+                  alt=""
+                />
+                <div
+                  :style="
+                    'color:#fff;background-color: ' +
+                      colorArray[time.priceType] +
+                      ';border-color:' +
+                      colorArray[time.priceType]
+                  "
+                  class="time-type-div"
+                >
+                  {{ txtArray[time.priceType] }}
+                </div>
+                <div style="color: #b1a2a2;">{{ time.time }}</div>
+              </div>
+            </div>
+          </el-row>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+const txtArray = ["", "灏�", "宄�", "骞�", "璋�"];
+const colorArray = ["", "#f56c6c", "#e6a23c", "#67c23a", "#909399"];
+
+import ruleApi from "@/api/energyPrice/price";
+import { getTimePeriod } from "@/utils/index";
+import mixins from "@/layout/mixin/getHeight";
+export default {
+  name: "energyPrice",
+  mixins: [mixins],
+  data() {
+    return {
+      txtArray,
+      colorArray,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 閫変腑鏁扮粍
+      codes: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 璁¢噺鍣ㄥ叿妗f缁存姢琛ㄦ牸鏁版嵁
+      tableData: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+
+      priceTypeList: [
+        {
+          id: "",
+          priceType: 1,
+          price: 1,
+          servicePrice: 0.8,
+          parkFee: 1,
+          occupancyFee: 1,
+          txt: "灏栨椂娈�",
+          cor: "#f56c6c"
+        },
+        {
+          id: "",
+          priceType: 2,
+          price: 1,
+          servicePrice: 0.8,
+          parkFee: 1,
+          occupancyFee: 1,
+          txt: "宄版椂娈�",
+          cor: "#e6a23c"
+        },
+        {
+          id: "",
+          priceType: 3,
+          price: 1,
+          servicePrice: 0.8,
+          parkFee: 1,
+          occupancyFee: 1,
+          txt: "骞虫椂娈�",
+          cor: "#67c23a"
+        },
+        {
+          id: "",
+          priceType: 4,
+          price: 1,
+          servicePrice: 0.8,
+          parkFee: 1,
+          occupancyFee: 1,
+          txt: "璋锋椂娈�",
+          cor: "#909399"
+        }
+      ],
+      // 鐢ㄦ埛瀵煎叆鍙傛暟
+      height: null,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: undefined,
+        meterName: undefined,
+        meterType: undefined,
+        measureRange: undefined,
+        manufacturer: undefined,
+        installactionLocation: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      timePeriodList: [],
+      form: {
+        sum: 0,
+        remark: "",
+        ruleType: "",
+        name: "",
+        effectiveDate: "",
+        priceList: []
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        name: [
+          { required: true, message: "璁¤垂绛栫暐鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    setCharts() {
+      this.bodyStyle = {
+        height: window.innerHeight - 220 + "px",
+        overflow: "hidden"
+      };
+      this.height = window.innerHeight - 340;
+    },
+    /** 鏌ヨ璁¢噺鍣ㄥ叿妗f缁存姢鍒楄〃 */
+    getList() {
+      this.loading = true;
+      ruleApi.pageRule(this.queryParams).then(response => {
+        this.tableData = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        name: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id);
+      this.codes = selection.map(item => item.code);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞璁¤垂绛栫暐";
+      this.form.name = "";
+      this.timePeriodList = [];
+      for (let i = 1; i < 49; i++) {
+        this.timePeriodList.push({
+          value: i,
+          time: getTimePeriod(i),
+          priceType: 1,
+          selected: false
+        });
+      }
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id;
+      ruleApi.getRuleDetail({ id }).then(response => {
+        let typeNameArr = ["sharp", "peak", "flat", "valley"];
+        let typeArr = ["SHARP", "PEAK", "FLAT", "VALLEY"];
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼璁¤垂绛栫暐";
+        let ruleDetailList = response.data.ruleDetailList;
+        this.timePeriodList = ruleDetailList.map(item => {
+          return {
+            ...item,
+            value: item.timePeriod,
+            time: getTimePeriod(item.timePeriod),
+            priceType: typeArr.indexOf(item.type) + 1,
+            selected: false,
+            id: item.id
+          };
+        });
+        this.priceTypeList.forEach((item, index) => {
+          item.price = response.data[typeNameArr[index] + "Fee"];
+          item.occupancyFee =
+            response.data[typeNameArr[index] + "OccupancyFee"];
+          item.parkFee = response.data[typeNameArr[index] + "ParkingFee"];
+          item.servicePrice = response.data[typeNameArr[index] + "ServiceFee"];
+        });
+      });
+    },
+    setTimeType(type) {
+      let arr = this.timePeriodList.filter(f => {
+        return f.selected;
+      });
+      if (arr.length === 0) {
+        this.msgWarning("璇疯嚦灏戦�夋嫨涓�涓椂娈�");
+        return;
+      }
+      arr.forEach(element => {
+        element.priceType = type;
+        element.selected = false;
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      let typeArr = ["SHARP", "PEAK", "FLAT", "VALLEY"];
+      // SHARP( "灏�"),
+      // PEAK("宄�"),
+      // FLAT("骞�"),
+      // VALLEY( "璋�");
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let params = {
+            name: this.form.name,
+            id: this.form.id,
+            remark: this.form.remark,
+            effectiveDate: this.form.effectiveDate,
+            sharpFee: this.priceTypeList[0].price, //灏栨椂娈�
+            peakFee: this.priceTypeList[1].price, //宄版椂娈�
+            flatFee: this.priceTypeList[2].price, //骞虫椂娈�
+            valleyFee: this.priceTypeList[3].price, //璋锋椂娈�
+            ruleDetailList: this.timePeriodList.map(item => {
+              return {
+                timePeriod: item.value,
+                type: typeArr[item.priceType - 1],
+                id: item.id || ""
+              };
+            })
+          };
+          if (this.form.id != undefined) {
+            ruleApi.editRule(params).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("淇敼鎴愬姛");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            ruleApi.addRule(params).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("鏂板鎴愬姛");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const id = row.id;
+      const name = row.name;
+      this.$confirm('鏄惁纭鍒犻櫎"' + name + '"鐨勬暟鎹」?', "璀﹀憡", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(function() {
+          return ruleApi.delRule({ id });
+        })
+        .then(() => {
+          this.getList();
+          this.msgSuccess("鍒犻櫎鎴愬姛");
+        })
+        .catch(function() {});
+    }
+  }
+};
+</script>
+<style scoped lang="scss">
+.special-form {
+  @import "~@/assets/styles/common-table-form.scss";
+}
+
+.dialog-form-row {
+  .el-row {
+    margin-bottom: 0;
+  }
+}
+::v-deep .el-dialog__body {
+  height: 75vh;
+  overflow: hidden;
+  overflow-y: auto;
+}
+.time-item {
+  margin-right: 12px;
+  border: 1px solid #eaeaea;
+  border-radius: 4px;
+  text-align: center;
+  margin-bottom: 12px;
+  width: 100px;
+  position: relative;
+  cursor: pointer;
+  .time-type-div {
+    border-radius: 4px 4px 0 0;
+  }
+  .sel-img {
+    position: absolute;
+    width: 15px;
+    height: 15px;
+    background: #fff;
+    border-radius: 2px;
+    left: 6px;
+    top: 6px;
+  }
+}
+</style>
diff --git a/energy_management_ui/src/views/index copy.vue b/energy_management_ui/src/views/index copy.vue
index 9d864a4..3d1dcb7 100644
--- a/energy_management_ui/src/views/index copy.vue
+++ b/energy_management_ui/src/views/index copy.vue
@@ -486,7 +486,6 @@
 
 <style lang="scss" scoped>
 .home-show {
-  background: #f0f2f5;
   overflow: hidden;
   overflow-y: scroll;
   height: calc(100vh - 90px);
diff --git a/energy_management_ui/src/views/index.vue b/energy_management_ui/src/views/index.vue
index 7e5dbd9..d8d3914 100644
--- a/energy_management_ui/src/views/index.vue
+++ b/energy_management_ui/src/views/index.vue
@@ -23,93 +23,89 @@
         </div>
       </div>
     </el-card> -->
+    <el-card
+      class="body-left-title"
+      :bordered="false"
+      style="margin-bottom: 12px;"
+    >
+      <div slot="header" class="clearfix">
+        <span>褰撴棩鍙屾帶鏁版嵁鎸囨爣鎬昏</span>
+      </div>
+      <el-row class="double-data-show-content">
+        <el-col :span="5" class="total">
+          <img alt="" src="~@/assets/home/zonghe.svg" />
+          <div class="left-title-style">
+            <div>
+              <div>鍏ㄥ巶缁煎悎鑳借��</div>
+              <div class="unit">{{ summation }} tce</div>
+            </div>
+          </div>
+        </el-col>
+        <el-col
+          :span="5"
+          class="co2"
+          v-for="(item, index) in energyStatistic"
+          :key="index"
+          style="border-left: 1px solid #999;"
+        >
+          <img
+            v-if="item.item.includes('鐢�')"
+            src="~@/assets/home/haodian.svg"
+            alt=""
+          />
+          <img
+            v-if="item.item.includes('姘�')"
+            src="~@/assets/home/haoshui.svg"
+            alt=""
+          />
+          <img
+            v-if="item.item.includes('姘�')"
+            src="~@/assets/home/haoqi.svg"
+            alt=""
+          />
+          <img
+            v-if="item.item.includes('钂告苯')"
+            src="~@/assets/home/haozhengqi.svg"
+            alt=""
+          />
+          <div class="left-title-style">
+            <div>
+              <div>
+                鑰梴{
+                  item.item.indexOf("澶╃劧") !== -1
+                    ? item.item.replace("澶╃劧", "")
+                    : item.item
+                }}閲�
+                {{ item.unit ? `锛�${item.unit}锛塦 : "" }}
+              </div>
+              <div class="unit">
+                {{ item.count || 0 }}
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="5" class="total" style="border-left: 1px solid #999;">
+          <img alt="" src="~@/assets/home/wen.png" />
+          <div class="left-title-style">
+            <div>
+              <div>瀹ゅ娓╁害</div>
+              <div class="unit">{{ temperature }}</div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="5" class="total" style="border-left: 1px solid #999;">
+          <img alt="" src="~@/assets/home/shi.png" />
+          <div class="left-title-style">
+            <div>
+              <div>瀹ゅ婀垮害</div>
+              <div class="unit">{{ humidity }}</div>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </el-card>
     <el-row type="flex" class="data-indicator-overview">
       <el-col class="home-body-left">
-        <el-card class="body-left-title" :bordered="false">
-          <div slot="header" class="clearfix">
-            <span>褰撴棩鍙屾帶鏁版嵁鎸囨爣鎬昏</span>
-          </div>
-          <el-row class="double-data-show-content">
-            <el-col :span="4" class="total">
-              <img alt="" src="~@/assets/home/zonghe.svg" />
-              <div class="left-title-style">
-                <div>
-                  <div>鍏ㄥ巶缁煎悎鑳借��</div>
-                  <div class="unit">{{ summation }} tce</div>
-                </div>
-              </div>
-            </el-col>
-            <el-col
-              :span="5"
-              class="co2"
-              v-for="(item, index) in energyStatistic"
-              :key="index"
-              style="border-left: 1px solid #e9e9e9;"
-            >
-              <img
-                v-if="item.item.includes('鐢�')"
-                src="~@/assets/home/haodian.svg"
-                alt=""
-              />
-              <img
-                v-if="item.item.includes('姘�')"
-                src="~@/assets/home/haoshui.svg"
-                alt=""
-              />
-              <img
-                v-if="item.item.includes('姘�')"
-                src="~@/assets/home/haoqi.svg"
-                alt=""
-              />
-              <img
-                v-if="item.item.includes('钂告苯')"
-                src="~@/assets/home/haozhengqi.svg"
-                alt=""
-              />
-              <div class="left-title-style">
-                <div>
-                  <div>
-                    鑰梴{
-                      item.item.indexOf("澶╃劧") !== -1
-                        ? item.item.replace("澶╃劧", "")
-                        : item.item
-                    }}閲�
-                    {{ item.unit ? `锛�${item.unit}锛塦 : "" }}
-                  </div>
-                  <div class="unit">
-                    {{ item.count || 0 }}
-                  </div>
-                </div>
-              </div>
-            </el-col>
-            <el-col
-              :span="5"
-              class="total"
-              style="border-left: 1px solid #e9e9e9;"
-            >
-              <img alt="" src="~@/assets/home/wen.png" />
-              <div class="left-title-style">
-                <div>
-                  <div>瀹ゅ娓╁害</div>
-                  <div class="unit">{{ temperature }}</div>
-                </div>
-              </div>
-            </el-col>
-            <el-col
-              :span="5"
-              class="total"
-              style="border-left: 1px solid #e9e9e9;"
-            >
-              <img alt="" src="~@/assets/home/shi.png" />
-              <div class="left-title-style">
-                <div>
-                  <div>瀹ゅ婀垮害</div>
-                  <div class="unit">{{ humidity }}</div>
-                </div>
-              </div>
-            </el-col>
-          </el-row>
-        </el-card>
         <el-card :bordered="false" class="body-left-title">
           <div slot="header" class="clearfix">
             <span>鑳芥簮瀹炴椂鐩戞祴</span>
@@ -120,7 +116,7 @@
             }}</span>
             <BarChart class="line-content" :chartData="chartDataObj" />
           </div>
-          <div class="chart-wrapper" style="border-top: 1px solid #e9e9e9">
+          <div class="chart-wrapper" style="border-top: 1px solid #999">
             <span class="chart-left-unit">{{
               `姘�/鍗曚綅${monitoringWaterUnit}`
             }}</span>
@@ -169,6 +165,7 @@
             class="second-chat"
             :chartData="secondPieData"
             pieTitle="鑳借�楄澶囧崰姣�"
+            height="280px"
           />
         </el-card>
       </el-col>
@@ -187,7 +184,6 @@
   getHomeOutdoorTemperature
 } from "@/api/home/home";
 import mixins from "@/layout/mixin/getHeight";
-import moment from "moment";
 import PieChart from "./dashboard/PieChart";
 import LineChart from "./dashboard/LineChart";
 import BarChart from "./dashboard/BarChart";
@@ -256,9 +252,9 @@
     clearInterval(this.timer);
     clearInterval(this.timer30);
     this.getHomeOutdoorTemperatureData();
-    this.timer = setInterval(() => {
-      this.getHomeOutdoorTemperatureData();
-    }, 12000);
+    // this.timer = setInterval(() => {
+    //   this.getHomeOutdoorTemperatureData();
+    // }, 12000);
     this.timer30 = setInterval(() => {
       // this.getEnergyType();
       this.getSummationData();
@@ -549,22 +545,53 @@
 
 <style lang="scss" scoped>
 .home-show {
-  background: #f0f2f5;
   overflow: hidden;
   overflow-y: scroll;
-  height: calc(100vh - 90px);
+  // height: calc(100vh - 88px);
   .home-head {
     display: flex;
     align-items: center;
 
     .home-select-label {
       margin-right: 10px;
-      color: #000;
+      color: #fff;
       font-weight: 600;
     }
 
     .select-month {
       margin: 0 8px;
+    }
+  }
+  .double-data-show-content {
+    display: flex;
+    align-items: center;
+    // border-bottom: 1px solid #e9e9e9;
+    // padding: 23px 0 24px 40px;
+    .el-col {
+      padding: 23px 0 24px 10px;
+    }
+
+    & > div {
+      display: flex;
+      align-items: center;
+    }
+
+    img {
+      width: 20px;
+      height: 20px;
+    }
+
+    .left-title-style {
+      display: flex;
+      align-items: center;
+      margin-left: 10px;
+      // border-right: 1px solid #e9e9e9;
+
+      .unit {
+        font-size: 22px;
+        color: #fff;
+        margin-top: 4px;
+      }
     }
   }
 
@@ -575,7 +602,7 @@
       position: absolute;
       top: 16px;
       left: 24px;
-      color: #333;
+      color: #fff;
       font-size: 18px;
     }
 
@@ -598,42 +625,9 @@
         margin: 0 16px 0px 0;
       }
 
-      .double-data-show-content {
-        display: flex;
-        align-items: center;
-        // border-bottom: 1px solid #e9e9e9;
-        // padding: 23px 0 24px 40px;
-        .el-col {
-          padding: 23px 0 24px 10px;
-        }
-
-        & > div {
-          display: flex;
-          align-items: center;
-        }
-
-        img {
-          width: 20px;
-          height: 20px;
-        }
-
-        .left-title-style {
-          display: flex;
-          align-items: center;
-          margin-left: 10px;
-          // border-right: 1px solid #e9e9e9;
-
-          .unit {
-            font-size: 22px;
-            color: #000000;
-            margin-top: 4px;
-          }
-        }
-      }
-
       .left-line-style {
         padding: 24px;
-        color: #000000;
+        color: #fff;
 
         .radio-list {
           width: 122px;
@@ -656,7 +650,7 @@
             position: absolute;
             top: 16px;
             left: 0;
-            color: #333;
+            color: #fff;
           }
 
           .line-content {
@@ -700,7 +694,7 @@
 
                 .number {
                   font-size: 24px;
-                  color: #000000;
+                  color: #fff;
                 }
               }
             }
@@ -718,7 +712,7 @@
 
         .first-chat {
           margin: 10px 0 0 0;
-          height: 340px;
+          height: 300px;
         }
       }
 
@@ -727,7 +721,7 @@
 
         .second-chat {
           margin: 10px 0 0 0;
-          height: 340px;
+          height: 290px;
         }
 
         .bottom-description-list {
@@ -744,7 +738,7 @@
 
             .energy-cost-sum {
               font-size: 24px;
-              color: #000000;
+              color: #fff;
             }
           }
 
diff --git a/energy_management_ui/src/views/index_bak.vue b/energy_management_ui/src/views/index_bak.vue
index 7c96b41..9a292dd 100644
--- a/energy_management_ui/src/views/index_bak.vue
+++ b/energy_management_ui/src/views/index_bak.vue
@@ -1,9 +1,8 @@
 <template>
   <div class="dashboard-editor-container">
-
     <panel-group @handleSetLineChartData="handleSetLineChartData" />
 
-    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
+    <el-row style="padding:16px 16px 0;margin-bottom:32px;">
       <line-chart :chart-data="lineChartData" />
     </el-row>
 
@@ -27,19 +26,18 @@
 
     <!--&lt;!&ndash;瀹炴椂&ndash;&gt;-->
     <!--<div class="live">-->
-      <!--<div class="live_content">瀹炴椂鎶ヨ</div>-->
-      <!--<div class="live_number">35</div>-->
+    <!--<div class="live_content">瀹炴椂鎶ヨ</div>-->
+    <!--<div class="live_number">35</div>-->
     <!--</div>-->
   </div>
-
 </template>
 
 <script>
-import PanelGroup from './dashboard/PanelGroup'
-import LineChart from './dashboard/LineChart'
-import RaddarChart from './dashboard/RaddarChart'
-import PieChart from './dashboard/PieChart'
-import BarChart from './dashboard/BarChart'
+import PanelGroup from "./dashboard/PanelGroup";
+import LineChart from "./dashboard/LineChart";
+import RaddarChart from "./dashboard/RaddarChart";
+import PieChart from "./dashboard/PieChart";
+import BarChart from "./dashboard/BarChart";
 
 const lineChartData = {
   newVisitis: {
@@ -58,10 +56,10 @@
     expectedData: [130, 140, 141, 142, 145, 150, 160],
     actualData: [120, 82, 91, 154, 162, 140, 130]
   }
-}
+};
 
 export default {
-  name: 'Index',
+  name: "Index",
   components: {
     PanelGroup,
     LineChart,
@@ -72,79 +70,77 @@
   data() {
     return {
       lineChartData: lineChartData.newVisitis
-    }
+    };
   },
   methods: {
     handleSetLineChartData(type) {
-      this.lineChartData = lineChartData[type]
+      this.lineChartData = lineChartData[type];
     }
   }
-}
+};
 </script>
 
 <style lang="scss" scoped>
 .dashboard-editor-container {
   padding: 32px;
-  background-color: rgb(240, 242, 245);
   position: relative;
 
   .chart-wrapper {
-    background: #fff;
     padding: 16px 16px 0;
     margin-bottom: 32px;
   }
 }
 
-@media (max-width:1024px) {
+@media (max-width: 1024px) {
   .chart-wrapper {
     padding: 8px;
   }
 }
-  .live{
-    position: fixed;
-    right: 0px;
-    top:70px;
-    display: flex;
-    flex-direction:column;
-    justify-content:center;
-    align-items:center;
-    width: 100px;
-    height: 60px;
-    background-color: red;
-    animation: fade 600ms infinite;
-    -webkit-animation: fade 600ms infinite;
-  }
-  .live_content{
-    font-size: 18px;
-    color: white;
-    font-weight: bold;
-  }
-  .live_number{
-    font-size: 32px;
-    color: white;
-    font-weight: bolder;
-  }
+.live {
+  position: fixed;
+  right: 0px;
+  top: 70px;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  width: 100px;
+  height: 60px;
+  background-color: red;
+  animation: fade 600ms infinite;
+  -webkit-animation: fade 600ms infinite;
+}
+.live_content {
+  font-size: 18px;
+  color: white;
+  font-weight: bold;
+}
+.live_number {
+  font-size: 32px;
+  color: white;
+  font-weight: bolder;
+}
 @keyframes fade {
   from {
-    opacity: 1.0;
+    opacity: 1;
   }
   50% {
     opacity: 0.4;
   }
   to {
-    opacity: 1.0;
+    opacity: 1;
   }
 }
 
 @-webkit-keyframes fade {
   from {
-    opacity: 1.0;
+    opacity: 1;
   }
   50% {
     opacity: 0.4;
   }
   to {
-    opacity: 1.0;
+    opacity: 1;
   }
 }
 </style>
diff --git a/energy_management_ui/src/views/login.vue b/energy_management_ui/src/views/login.vue
index ce36cab..7b32691 100644
--- a/energy_management_ui/src/views/login.vue
+++ b/energy_management_ui/src/views/login.vue
@@ -6,15 +6,23 @@
         :src="'https://www.toray.cn/shared/images/toray_logo_ch.svg'"
         alt=""
       />
-      <div>涓滀附鍖荤枟鑳芥簮绠$悊骞冲彴</div>
+      <div>缁煎悎鑳芥簮绠$悊绯荤粺</div>
     </div>
     <div class="login">
-      <div class="demo-image">
+      <!-- <div class="demo-image">
         <el-image style="width: 75%;" :src="logo"></el-image>
-      </div>
+      </div> -->
       <div class="login-form">
         <el-form ref="loginForm" :model="loginForm" :rules="loginRules">
-          <div class="title">鐢ㄦ埛鐧诲綍</div>
+          <!-- <div class="title">鐢ㄦ埛鐧诲綍</div> -->
+          <div class="logo-view title">
+            <img
+              style="width: 100px;margin-right: 30px "
+              :src="'https://www.toray.cn/shared/images/toray_logo_ch.svg'"
+              alt=""
+            />
+            <div>缁煎悎鑳芥簮绠$悊绯荤粺</div>
+          </div>
           <el-form-item prop="username" style="margin-bottom: 21px">
             <el-input
               v-model="loginForm.username"
@@ -170,22 +178,28 @@
 <style rel="stylesheet/scss" lang="scss" scoped>
 .logo-page {
   height: 100%;
-  background-image: url("../assets/image/login-background.png");
+  background-image: url("../assets/image/bg.jpg");
+  // background-image: url("../assets/image/login-background.png");
   background-size: cover;
   overflow: hidden;
+  // background: ;
+  // background: linear-gradient(80deg, #073b70 0%, rgba(7, 59, 112, 0) 100%);
+  // background: linear-gradient(90deg, #101d32 0%, rgba(0, 0, 0, 0.5) 100%);
 
   .logo-png {
     font-size: 24px;
     display: flex;
     align-items: center;
     font-weight: bold;
-    color: #333;
+    color: #fff;
     padding: 3.4% 0 0 74px;
+    position: absolute;
   }
 
   .login {
     display: flex;
-    justify-content: space-between;
+    // justify-content: space-between;
+    justify-content: center;
     padding: 0 17.24%;
     height: calc(100% - 73px * 2);
     align-items: center;
@@ -194,15 +208,29 @@
   .title {
     font-size: 22px;
     color: #38bcbf;
-    margin-bottom: 22px;
+    margin-bottom: 32px;
     font-weight: 600;
   }
 
   .login-form {
     border-radius: 10px;
-    background: #ffffff;
-    width: 32%;
-    padding: 25px 25px 5px 25px;
+    // background: #ffffff;
+    width: 36%;
+    padding: 32px 64px;
+    // background: #061844;
+    border-radius: 4px;
+    // box-shadow: 0 7px 14px 6px #2f4b9a;
+    margin-top: 6px;
+    border: 1px solid #061844;
+    background: rgba($color: #ffffff, $alpha: 0.06);
+
+    .logo-view {
+      display: flex;
+      align-items: center;
+      color: #fff;
+      font-size: 26px;
+      font-weight: 600;
+    }
 
     .el-input {
       height: 38px;
diff --git a/energy_management_ui/vue.config.js b/energy_management_ui/vue.config.js
index 5ee348f..5b7ded5 100644
--- a/energy_management_ui/vue.config.js
+++ b/energy_management_ui/vue.config.js
@@ -6,7 +6,7 @@
   return path.join(__dirname, dir);
 }
 
-const name = defaultSettings.title || "搴炲反杩兘婧愮鐞嗙郴缁�"; // 鏍囬
+const name = defaultSettings.title || "鏅虹⒊鏈潵鑳芥簮绠$悊绯荤粺"; // 鏍囬
 
 const port = process.env.port || process.env.npm_config_port || 80; // 绔彛
 
@@ -33,9 +33,7 @@
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: 'http://47.110.84.144:8097',
-        target: "http://192.168.0.6:8097",
-        // target: "http://q7unm6.natappfree.cc",
+        target: "http://localhost:8097",
         changeOrigin: true,
         pathRewrite: {
           ["^" + process.env.VUE_APP_BASE_API]: ""

--
Gitblit v1.9.3