Merge branch 'develop1.0' into wt_from_develop1.0
已添加25个文件
已删除2个文件
已修改16个文件
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.web.controller.statisticalAnalysis; |
| | | |
| | | import com.zhitan.common.annotation.Log; |
| | | import com.zhitan.common.core.domain.AjaxResult; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | |
| | | /** |
| | | * @Description: è½æºæ¶èç»è®¡åæ |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ12æ¥ 14:11 |
| | | */ |
| | | @Api(tags = "è½èç»è®¡åæ") |
| | | @RestController |
| | | @RequestMapping("/energyTypeAnalysis") |
| | | @Slf4j |
| | | public class EnergyConsumeDataController { |
| | | @Autowired |
| | | private IEnergyConsumeDataService energyConsumeDataService; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ®") |
| | | @GetMapping(value = "/listEnergyCostTrend") |
| | | public AjaxResult listEnergyCostTrend(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, |
| | | @RequestParam(name = "timeCode") String timeCode, |
| | | @RequestParam(name = "timeType") String timeType, |
| | | @RequestParam(name = "energyType",required = false) String energyType, |
| | | @RequestParam(name = "modelCode") String modelCode) { |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyCostTrend(pageNo, pageSize, timeCode, timeType,energyType, |
| | | modelCode)); |
| | | } |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | @Log(title = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") |
| | | @ApiOperation(value = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼", notes = "è½èç»è®¡åæ-ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼") |
| | | @GetMapping(value = "/listEnergyCostTrendDetail") |
| | | public AjaxResult listEnergyCostTrendDetail(@RequestParam(name = "timeCode") String timeCode, |
| | | @RequestParam(name = "timeType") String timeType, |
| | | @RequestParam(name = "modelCode") String modelCode, |
| | | @RequestParam(name = "energyType",required = false) String energyType) { |
| | | return AjaxResult.success(energyConsumeDataService.listEnergyCostTrendDetail(timeCode, timeType, modelCode, energyType)); |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds); |
| | | |
| | | /** |
| | | * æ¥è¯¢è½æºç±»åéçµçç¨é |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param nodeId èç¹Id |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | BigDecimal getDataItemTimeRangeValueByNodeId(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("nodeId") String nodeId, @Param("energyType") String energyType); |
| | | } |
| | |
| | | List<ElectricityDataItem> getDataStatisticsDeviationAnalysis(@Param("indexIdSet") Set<String> indexIdSet, |
| | | @Param("timeType") String timeType); |
| | | |
| | | /** |
| | | * æ¥è¯¢ææ¬è¶å¿ |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param nodeId èç¹Id |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | List<ElectricityDataItem> getCostTrends(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, |
| | | @Param("timeType") String timeType, @Param("nodeId") String nodeId,@Param("energyType") String energyType); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.common; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.constant.TimeTypeConst; |
| | | import com.zhitan.common.utils.IntegerUtil; |
| | | import com.zhitan.common.utils.StringUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.time.DateUtils; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.GregorianCalendar; |
| | | |
| | | /** |
| | | * @Description: æ¶é´å·¥å
·ç±» |
| | | * @author: yxw |
| | | * @date: 2022å¹´02æ02æ¥ 12:23 |
| | | */ |
| | | @Slf4j |
| | | public class DateTimeUtil { |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ |
| | | */ |
| | | public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss"; |
| | | /** |
| | | * æ ¼å¼åæ¥æå°åé |
| | | */ |
| | | public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm"; |
| | | /** |
| | | * æ¥ææ ¼å¼ - å°æ¶:åé |
| | | */ |
| | | public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 年份 |
| | | */ |
| | | public static final String COMMON_PATTERN_YEAR = "yyyy"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä¸å¹´, |
| | | */ |
| | | public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy"; |
| | | |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_MONTH = "yyyyMM"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MMæ"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - æä»½ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyyå¹´MMæ"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 天 |
| | | */ |
| | | public static final String COMMON_PATTERN_DAY = "yyyyMMdd"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 天 |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 天 |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_DAY_WORD = "yyyy-MM-ddæ¥"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - ææ¥ |
| | | */ |
| | | public static final String COMMON_PATTERN_MONTH_DAY = "MM-dd"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - 天æä¸å¤©, |
| | | */ |
| | | public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - å°æ¶ |
| | | */ |
| | | public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - å°æ¶ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - å°æ¶ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_HOUR_WORD = "yyyy-MM-dd HHæ¶"; |
| | | /** |
| | | * æ¥æå¸¸ç¨æ ¼å¼ - å°æ¶ |
| | | */ |
| | | public static final String COMMON_PATTERN_TO_HOUR_TEXT = "yyyyå¹´MMæddæ¥ HHæ¶"; |
| | | |
| | | /** |
| | | * è·åå½åæ¶é´,æ¶é´æ ¼å¼ï¼yyyy-MM-dd HH:mm:ss |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getNowDateTime() { |
| | | return getNowDateTime(COMMON_PATTERN); |
| | | } |
| | | |
| | | /** |
| | | * è·åå½åæ¶é´ |
| | | * |
| | | * @param pattern æ¶é´æ ¼å¼ |
| | | * @return |
| | | */ |
| | | public static String getNowDateTime(String pattern) { |
| | | //è®¾ç½®æ¥ææ ¼å¼ |
| | | SimpleDateFormat df = new SimpleDateFormat(pattern); |
| | | String dateTime = df.format(new Date()); |
| | | return dateTime; |
| | | } |
| | | |
| | | /** |
| | | * è·åä»å¹´çå¹´ä»½å¼ |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getNowYear() { |
| | | return getNowDateTime(COMMON_PATTERN_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * è·åä»å¹´çæä»½å¼ |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getNowMonth() { |
| | | return getNowDateTime(COMMON_PATTERN_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * åç¬¦ä¸²è½¬ææ¶é´ç±»å,é»è®¤æ ¼å¼ï¼yyyy-MM-dd HH:mm:ss |
| | | * |
| | | * @param dateTimeStr |
| | | * @return |
| | | */ |
| | | public static Date toDateTime(String dateTimeStr) { |
| | | DateTime dt = null; |
| | | try { |
| | | dt = DateTime.of(dateTimeStr, COMMON_PATTERN); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * åç¬¦ä¸²è½¬ææ¶é´ç±»å |
| | | * |
| | | * @param dateTimeStr |
| | | * @return |
| | | */ |
| | | public static Date toDateTime(String dateTimeStr, String pattern) { |
| | | DateTime dt = null; |
| | | try { |
| | | dt = DateTime.of(dateTimeStr, pattern); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * å符串转æç¹å®æ ¼å¼çæ¶é´å符串类å |
| | | * |
| | | * @param dateTimeStr æ¶é´å符串 |
| | | * @param sourcePattern å符串æ¶é´æ ¼å¼ |
| | | * @param toPattern è¦è½¬æä»ä¹æ ¼å¼çæ¶é´ |
| | | * @return |
| | | */ |
| | | public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) { |
| | | String str = CommonConst.EMPTY; |
| | | try { |
| | | DateTime dt = DateTime.of(dateTimeStr, sourcePattern); |
| | | str = getDateTime(dt, toPattern); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´è½¬ææå®çæ ¼å¼ |
| | | * |
| | | * @param pattern æ¶é´æ ¼å¼ |
| | | * @return |
| | | */ |
| | | public static String getDateTime(Date dt, String pattern) { |
| | | //è®¾ç½®æ¥ææ ¼å¼ |
| | | SimpleDateFormat df = new SimpleDateFormat(pattern); |
| | | return df.format(dt); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´è½¬æyyyy-MM-dd HH:mm:ssæ ¼å¼ |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getDateTime(Date dt) { |
| | | if (ObjectUtil.isEmpty(dt)) { |
| | | return CommonConst.EMPTY; |
| | | } |
| | | return getDateTime(dt, COMMON_PATTERN); |
| | | } |
| | | |
| | | /** |
| | | * è·åå½åæ¶é´æå±æä»½çæåä¸å¤© |
| | | * |
| | | * @return |
| | | */ |
| | | public static int getDateTimeLastDay(Date dt) { |
| | | String month = getMonth(dt); |
| | | String firstDate = month + "01"; |
| | | Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1); |
| | | Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1); |
| | | int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH)); |
| | | return day; |
| | | } |
| | | |
| | | /** |
| | | * è·åå¹´ä»½å¼ |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getYear(Date dt) { |
| | | return getDateTime(dt, COMMON_PATTERN_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»½å¼ 202202 |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getMonth(Date dt) { |
| | | return getDateTime(dt, COMMON_PATTERN_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * è·å天,æ ¼å¼ï¼yyyyMMdd |
| | | * |
| | | * @return |
| | | */ |
| | | public static String toDay(Date dt) { |
| | | return getDateTime(dt, COMMON_PATTERN_DAY); |
| | | } |
| | | |
| | | /** |
| | | * è·åå°æ¶:yyyyMMddHH |
| | | * |
| | | * @return |
| | | */ |
| | | public static String toHour(Date dt) { |
| | | return getDateTime(dt, COMMON_PATTERN_HOUR); |
| | | } |
| | | |
| | | /** |
| | | * 转æå符串类åå¼ |
| | | * |
| | | * @return |
| | | */ |
| | | public static String toString(Date dt) { |
| | | return getDateTime(dt, COMMON_PATTERN); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçå¹´æ° |
| | | * |
| | | * @param dateTime |
| | | * @param years |
| | | * @return |
| | | */ |
| | | public static Date addYears(Date dateTime, int years) { |
| | | return calcDate(dateTime, years, Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçææ° |
| | | * |
| | | * @param dateTime |
| | | * @param months |
| | | * @return |
| | | */ |
| | | public static Date addMonths(Date dateTime, int months) { |
| | | return calcDate(dateTime, months, Calendar.MONTH); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçå¤©æ° |
| | | * |
| | | * @param dateTime |
| | | * @param days |
| | | * @return |
| | | */ |
| | | public static Date addDays(Date dateTime, int days) { |
| | | return calcDate(dateTime, days, Calendar.DATE); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçå°æ¶æ° |
| | | * |
| | | * @param dateTime |
| | | * @param hours |
| | | * @return |
| | | */ |
| | | public static Date addHours(Date dateTime, int hours) { |
| | | return calcDate(dateTime, hours, Calendar.HOUR); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçåéæ° |
| | | * |
| | | * @param dateTime |
| | | * @param minutes |
| | | * @return |
| | | */ |
| | | public static Date addMinutes(Date dateTime, int minutes) { |
| | | return calcDate(dateTime, minutes, Calendar.MINUTE); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´å¢å 对åºçå°æ¶æ° |
| | | * |
| | | * @param dateTime |
| | | * @param seconds |
| | | * @return |
| | | */ |
| | | public static Date addSeconds(Date dateTime, int seconds) { |
| | | return calcDate(dateTime, seconds, Calendar.SECOND); |
| | | } |
| | | |
| | | /** |
| | | * è®¡ç®æ¥æéç¨æ¹æ³ |
| | | * |
| | | * @param dateTime |
| | | * @param addValue |
| | | * @param calendarType 计ç®ç±»åï¼Calendar.YEARï¼Calendar.MONTH,Calendar.DAY |
| | | * @return |
| | | */ |
| | | private static Date calcDate(Date dateTime, int addValue, int calendarType) { |
| | | Date dt = null; |
| | | try { |
| | | Calendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(dateTime); |
| | | //ææ¥æå¾åå¢å ä¸å¹´ï¼æ´æ°å¾åæ¨ï¼è´æ°å¾åç§» |
| | | calendar.add(calendarType, addValue); |
| | | // è·åç¸å æè
ç¸åä¹åçæ¶é´å¼ |
| | | Date tempDt = calendar.getTime(); |
| | | // ææ¶é´è½¬ææéè¦çæ ¼å¼ |
| | | String temp = getDateTime(tempDt, COMMON_PATTERN); |
| | | dt = toDateTime(temp); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * è·å该æ¶é´å±äºå½å¤©ç第å ä¸ªå°æ¶ |
| | | * |
| | | * @param dateTime |
| | | * @return |
| | | */ |
| | | public static int getHourOfDay(Date dateTime) { |
| | | return getDateValue(dateTime, Calendar.HOUR_OF_DAY); |
| | | } |
| | | |
| | | /** |
| | | * è·å该æ¶é´å±äºå½æç第å 天 |
| | | * |
| | | * @param dateTime |
| | | * @return |
| | | */ |
| | | public static int getDayOfMonth(Date dateTime) { |
| | | return getDateValue(dateTime, Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * è·å该æ¶é´å±äºå½å¨ç第å 天 |
| | | * ä¸å¨ç第ä¸å¤©æ¯å¨æ¥ |
| | | * |
| | | * @param dateTime |
| | | * @return |
| | | */ |
| | | public static int getDayOfWeek(Date dateTime) { |
| | | return getDateValue(dateTime, Calendar.DAY_OF_WEEK); |
| | | } |
| | | |
| | | /** |
| | | * è·å该æ¶é´å±äºå¹´ç第å 个æ |
| | | * æä»½å¼+1æ¯çå®çå½åæ |
| | | * |
| | | * @param dateTime |
| | | * @return å·²ç»å¨ç³»ç»ä¸è·åå¼çåºç¡ä¸å 1äºï¼ç°å¨æ¯çå®çå½åæä»½å¼ |
| | | */ |
| | | public static int getMonthOfYear(Date dateTime) { |
| | | return getDateValue(dateTime, Calendar.MONTH) + 1; |
| | | } |
| | | |
| | | /** |
| | | * è·åå½å¤©ç第å ä¸ªå°æ¶/彿ç第å 天/å½å¹´ç第å 个æ |
| | | * |
| | | * @param dateTime 妿æ¶é´å¼ä¸ºç©ºï¼é»è®¤å½åæ¶é´ |
| | | * @param calendarType |
| | | * @return |
| | | */ |
| | | private static int getDateValue(Date dateTime, int calendarType) { |
| | | int value = 0; |
| | | try { |
| | | if (ObjectUtil.isEmpty(dateTime)) { |
| | | dateTime = new Date(); |
| | | } |
| | | Calendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(dateTime); |
| | | value = calendar.get(calendarType); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 对æ¯time1 å time2 çå¤§å° |
| | | * |
| | | * @param time1 |
| | | * @param time2 |
| | | * @return -1:time1å°äºtime2;0:time1çäºtime2;1:time1大äºtime2; |
| | | */ |
| | | public static int compareDateDiff(Date time1, Date time2) { |
| | | long diff = time1.getTime() - time2.getTime(); |
| | | int res = 0; |
| | | if (diff > 0) { |
| | | res = 1; |
| | | } else if (diff < 0) { |
| | | res = -1; |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢data_itemæéè¦çtimecodeå¼ |
| | | * |
| | | * @param timeType æ¥æç±»å |
| | | * @param date æ¶é´ |
| | | * @return |
| | | */ |
| | | public static String getTimeCode(String timeType, Date date) { |
| | | String timeCode = CommonConst.EMPTY; |
| | | if (ObjectUtil.isEmpty(date)) { |
| | | date = new Date(); |
| | | } |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | timeCode = CommonConst.WORD_H + getDateTime(date, COMMON_PATTERN_HOUR); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | timeCode = CommonConst.WORD_D + getDateTime(date, COMMON_PATTERN_DAY); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | timeCode = CommonConst.WORD_M + getDateTime(date, COMMON_PATTERN_MONTH); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | timeCode = CommonConst.WORD_Y + getDateTime(date, COMMON_PATTERN_YEAR); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return timeCode; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢æ¥æå¹´æ¥è¡¨æéè¦çtimecodeå¼ |
| | | * |
| | | * @param timeType æ¥æç±»å |
| | | * @param date æ¶é´ |
| | | * @return |
| | | */ |
| | | public static String getReportTimeCode(String timeType, Date date) { |
| | | String timeCode = CommonConst.EMPTY; |
| | | if (ObjectUtil.isEmpty(date)) { |
| | | date = new Date(); |
| | | } |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | timeCode = getDateTime(date, COMMON_PATTERN_TO_HOUR); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | timeCode = getDateTime(date, COMMON_PATTERN_TO_DAY); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | timeCode = getDateTime(date, COMMON_PATTERN_TO_MONTH); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | timeCode = getDateTime(date, COMMON_PATTERN_YEAR); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return timeCode; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¶é´å¯¹åºçç¯æ¯æ¶é´ |
| | | * |
| | | * @param timeType HOUR/DAY/MONTH/YEAR |
| | | * @param date æ¶é´å¼ |
| | | * @return |
| | | */ |
| | | public static Date getLoopTime(String timeType, Date date) { |
| | | Date dt = null; |
| | | if (ObjectUtil.isEmpty(date)) { |
| | | date = new Date(); |
| | | } |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | dt = addHours(date, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | dt = addDays(date, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | dt = addMonths(date, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | dt = addYears(date, CommonConst.DIGIT_MINUS_1); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ´ç¹æ¶é´ |
| | | * |
| | | * @param timeType HOUR/DAY/MONTH/YEAR |
| | | * @param date æ¶é´å¼ |
| | | * @return |
| | | */ |
| | | public static Date getHourTime(String timeType, Date date) { |
| | | Date dt = null; |
| | | if (ObjectUtil.isEmpty(date)) { |
| | | date = new Date(); |
| | | } |
| | | String tempStr = null; |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | tempStr = getDateTime(date, COMMON_PATTERN_TO_HOUR); |
| | | dt = toDateTime(tempStr, COMMON_PATTERN_TO_HOUR); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | tempStr = getDateTime(date, COMMON_PATTERN_TO_DAY); |
| | | dt = toDateTime(tempStr, COMMON_PATTERN_TO_DAY); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | tempStr = getDateTime(date, COMMON_PATTERN_TO_MONTH); |
| | | dt = toDateTime(tempStr, COMMON_PATTERN_TO_MONTH); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | tempStr = getDateTime(date, COMMON_PATTERN_YEAR); |
| | | dt = toDateTime(tempStr, COMMON_PATTERN_YEAR); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®ä¸¤ä¸ªæ¶é´é´é天æ°ï¼æ¥ææ ¼å¼æ¯è¾ï¼ |
| | | * |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @return |
| | | */ |
| | | public static int daysBetween(Date beginTime, Date endTime) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(beginTime); |
| | | long beginStamp = calendar.getTimeInMillis(); |
| | | calendar.setTime(endTime); |
| | | long endStamp = calendar.getTimeInMillis(); |
| | | long betweenDays = (endStamp - beginStamp) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(betweenDays)); |
| | | } |
| | | |
| | | /** |
| | | * 计ç®ä¸¤ä¸ªæ¶é´é´é天æ°ï¼åç¬¦ä¸²æ ¼å¼æ¯è¾ï¼ |
| | | * |
| | | * @param beginTime |
| | | * @param endTime |
| | | * @return |
| | | */ |
| | | public static int daysBetween(String beginTime, String endTime) { |
| | | try { |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Date begin = format.parse(beginTime); |
| | | Date end = format.parse(endTime); |
| | | return daysBetween(begin, end); |
| | | } catch (ParseException exception) { |
| | | log.error("计ç®ä¸¤ä¸ªæ¶é´é´é天æ°" + exception.getMessage()); |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ¶é´ç±»åæå符串转æå¯¹åºçæ¶é´ |
| | | * |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param time æ¶é´å符串 |
| | | * @return |
| | | */ |
| | | public static Date getTime(String timeType, String time) { |
| | | Date dt = null; |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | dt = toDateTime(time, COMMON_PATTERN_TO_HOUR); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | dt = toDateTime(time, COMMON_PATTERN_TO_DAY); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | dt = toDateTime(time, COMMON_PATTERN_TO_MONTH); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | dt = toDateTime(time, COMMON_PATTERN_YEAR); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ¶é´ç±»åæè¿ç»çæ¥æå符串转æå¯¹åºçæ¶é´ ï¼202303ã20230303ã2023030301ã202303030101ï¼ |
| | | * |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param time æ¶é´å符串 |
| | | * @return |
| | | */ |
| | | public static Date getTimeByContinuousTimeCode(String timeType, String time) { |
| | | Date dt = null; |
| | | timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | dt = toDateTime(time, COMMON_PATTERN_HOUR); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | dt = toDateTime(time, COMMON_PATTERN_DAY); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | dt = toDateTime(time, COMMON_PATTERN_MONTH); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | dt = toDateTime(time, COMMON_PATTERN_YEAR); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ¶é´ç±»åè¿å天ãæãå¹´æåçæ¶é´ |
| | | * |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param time æ¶é´ |
| | | * @return |
| | | */ |
| | | public static Date getEndTimeByType(String timeType, Date time) { |
| | | Date dt = null; |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | dt = DateUtil.endOfDay(time); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | dt = DateUtil.endOfMonth(time); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | dt = DateUtil.endOfYear(time); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return dt; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å¨æç±»å对çäº§å¨æè¿è¡å åè®¡ç® |
| | | * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ |
| | | * |
| | | * @param date çäº§å¨æ |
| | | * @param cycleType çäº§å¨æç±»å |
| | | * @param cycleType çäº§å¨æç±»å |
| | | * @param val 计ç®å¼ |
| | | * @return |
| | | */ |
| | | public static Date productionCycleCal(Date date, String cycleType,int val) { |
| | | Date momDate = date; |
| | | switch (cycleType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | momDate = DateUtils.addHours(date, val); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | momDate = DateUtils.addDays(date, val); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | momDate = DateUtils.addMonths(date, val); |
| | | break; |
| | | } |
| | | return momDate; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å¨æç±»å对çäº§å¨æè¿è¡å åè®¡ç® å¹¶ä¸è¿ä½ ä¾å¦ï¼ HOUR +1è¿ä½å°±æ¯ å ä¸å¤© |
| | | * å¡«æ¥å¨æç±»åï¼HOURå°æ¶ãDAY天ãMONTHæãYEARå¹´ï¼ |
| | | * |
| | | * @param date çäº§å¨æ |
| | | * @param cycleType çäº§å¨æç±»å |
| | | * @param val 计ç®å¼ |
| | | * @return |
| | | */ |
| | | public static Date productionCycleCalCarry(Date date, String cycleType,int val) { |
| | | Date momDate = date; |
| | | switch (cycleType) { |
| | | case TimeTypeConst.TIME_TYPE_HOUR: |
| | | momDate = DateUtils.addDays(date, val); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | momDate = DateUtils.addMonths(date, val); |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | momDate = DateUtils.addYears(date, val); |
| | | break; |
| | | } |
| | | return momDate; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | |
| | | |
| | | /** |
| | | * ææ¬è¶å¿-è½æºç±»å |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "ææ¬è¶å¿-è½æºç±»å", description = "ææ¬è¶å¿-è½æºç±»å") |
| | | public class CostTrendEnergyTypeItem implements Serializable { |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private String energyType; |
| | | |
| | | /** |
| | | * è½æºåç§° |
| | | */ |
| | | @ApiModelProperty(value = "è½æºåç§°") |
| | | private String energyName; |
| | | |
| | | /** |
| | | * 累积é |
| | | */ |
| | | @ApiModelProperty(value = "累积é") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal accumulation; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal cost; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯ |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯", description = "è´¹ç¨åæ-ææ¬è¶å¿åæç»è®¡å¾è¿åå¼ä¿¡æ¯") |
| | | public class EnergyConsumeTrendDetailItem { |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private String energyType; |
| | | |
| | | /** |
| | | * è½æºåä½ |
| | | */ |
| | | @ApiModelProperty(value = "è½æºåä½") |
| | | private String energyUnit; |
| | | |
| | | /** |
| | | * ç´¯ç§¯éæ ç¾ |
| | | */ |
| | | @ApiModelProperty(value = "ç´¯ç§¯éæ ç¾") |
| | | private String accumulationLabel; |
| | | |
| | | /** |
| | | * è´¹ç¨æ ç¾ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨æ ç¾") |
| | | private String costLabel; |
| | | |
| | | /** |
| | | * 累积é |
| | | */ |
| | | @ApiModelProperty(value = "累积é") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal accumulation; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal cost; |
| | | |
| | | /** |
| | | * 累积ékeyéå |
| | | */ |
| | | @ApiModelProperty(value = "累积ékeyéå") |
| | | private List<String> accumulationKeyList; |
| | | |
| | | /** |
| | | * 累积évalueéå |
| | | */ |
| | | @ApiModelProperty(value = "累积évalueéå") |
| | | private List<BigDecimal> accumulationValueList; |
| | | |
| | | /** |
| | | * è´¹ç¨keyéå |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨keyéå") |
| | | private List<String> costKeyList; |
| | | |
| | | /** |
| | | * è´¹ç¨valueéå |
| | | */ |
| | | @ApiModelProperty(value = "è´¹ç¨valueéå") |
| | | private List<BigDecimal> costValueList; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | |
| | | /** |
| | | * è½èå®ä½ç±» |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/1/28 |
| | | */ |
| | | @Data |
| | | public class EnergyConsumeVO implements Serializable { |
| | | |
| | | /** |
| | | * 计éå¨å
·id |
| | | */ |
| | | private String deviceId; |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | private String energyType; |
| | | |
| | | /** |
| | | * æ¶é´ç¼ç |
| | | */ |
| | | private Date dataTime; |
| | | |
| | | /** |
| | | * è´¹ç¨ |
| | | */ |
| | | private BigDecimal costValue; |
| | | |
| | | /** |
| | | * 累计é |
| | | */ |
| | | private BigDecimal accumulationValue; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯ |
| | | * |
| | | * @Author: Zhujw |
| | | * @Date: 2023/2/14 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯", description = "ææ¬è¶å¿åæ-è¡¨æ ¼ä¿¡æ¯") |
| | | public class EnergyCostTrendItem { |
| | | |
| | | /** |
| | | * ç¨è½åå
id |
| | | */ |
| | | @ApiModelProperty(value = "ç¨è½åå
id") |
| | | private String energyUnitId; |
| | | |
| | | /** |
| | | * ç¨è½åå
åç§° |
| | | */ |
| | | @ApiModelProperty(value = "ç¨è½åå
åç§°") |
| | | private String energyUnitName; |
| | | |
| | | /** |
| | | * æ»è´¹ç¨ |
| | | */ |
| | | @ApiModelProperty(value = "æ»è´¹ç¨") |
| | | @JsonFormat(shape = JsonFormat.Shape.STRING) |
| | | private BigDecimal total; |
| | | |
| | | /** |
| | | * æ¶é´ |
| | | */ |
| | | @ApiModelProperty(value = "æ¶é´") |
| | | private String dateCode; |
| | | |
| | | /** |
| | | * è½æºç±»å |
| | | */ |
| | | @ApiModelProperty(value = "è½æºç±»å") |
| | | private List<CostTrendEnergyTypeItem> itemList; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.domain.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @Description: TODO |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ15æ¥ 10:07 |
| | | */ |
| | | @Data |
| | | public class EnergyCostTrendPage { |
| | | /** |
| | | * æ°æ®å表 |
| | | */ |
| | | private List<EnergyCostTrendItem> itemList; |
| | | /** |
| | | * è®°å½æ»æ°é |
| | | */ |
| | | private long total; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.service; |
| | | |
| | | import com.zhitan.statisticalAnalysis.domain.vo.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * è½æºæ¶èç»è®¡ç¸å
³æ¥è¯¢ |
| | | */ |
| | | public interface IEnergyConsumeDataService { |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType,String energyType, String modelCode); |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.zhitan.statisticalAnalysis.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.zhitan.basicdata.domain.SysEnergy; |
| | | import com.zhitan.basicdata.mapper.SysEnergyMapper; |
| | | import com.zhitan.carbonemission.domain.CarbonEmission; |
| | | import com.zhitan.common.constant.CommonConst; |
| | | import com.zhitan.common.constant.TimeTypeConst; |
| | | import com.zhitan.common.utils.StringUtils; |
| | | import com.zhitan.dataitem.mapper.DataItemMapper; |
| | | import com.zhitan.model.domain.ModelNode; |
| | | import com.zhitan.model.domain.NodeIndex; |
| | | import com.zhitan.model.mapper.ModelNodeMapper; |
| | | import com.zhitan.model.mapper.NodeIndexMapper; |
| | | import com.zhitan.peakvalley.domain.ElectricityDataItem; |
| | | import com.zhitan.peakvalley.mapper.PeakValleyMapper; |
| | | import com.zhitan.statisticalAnalysis.common.DateTimeUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import com.zhitan.statisticalAnalysis.domain.vo.*; |
| | | import com.zhitan.statisticalAnalysis.service.IEnergyConsumeDataService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Description: TODO |
| | | * @author: yxw |
| | | * @date: 2022å¹´04æ12æ¥ 14:15 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class EnergyConsumeDataServiceImpl implements IEnergyConsumeDataService { |
| | | |
| | | private DataItemMapper dataItemMapper; |
| | | private ModelNodeMapper modelNodeMapper; |
| | | private NodeIndexMapper nodeIndexMapper; |
| | | private PeakValleyMapper peakValleyMapper; |
| | | private SysEnergyMapper sysEnergyMapper; |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼- è·åè¡¨æ ¼åè¡¨æ°æ® |
| | | * |
| | | * @param pageNo é¡µç æ° |
| | | * @param pageSize æ¯é¡µæ°æ®å¤å° |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param energyType è½æºç±»å |
| | | * @param modelCode 模åCode |
| | | * @return |
| | | */ |
| | | @Override |
| | | public EnergyCostTrendPage listEnergyCostTrend(int pageNo, int pageSize, String timeCode, String timeType, String energyType, |
| | | String modelCode) { |
| | | //è½æºç±»åä¿¡æ¯ |
| | | SysEnergy sysEnergy = new SysEnergy(); |
| | | if (StringUtils.isNotEmpty(energyType)) { |
| | | sysEnergy.setEnersno(energyType); |
| | | } |
| | | List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); |
| | | if (sysEnergies.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); |
| | | } |
| | | //èç¹ä¿¡æ¯ |
| | | List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) |
| | | .isNull(ModelNode::getParentId)); |
| | | if (ObjectUtils.isEmpty(modelNodes)) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); |
| | | } |
| | | ModelNode modelNodeInfo = modelNodes.stream().findFirst().get(); |
| | | //ç¹ä½ä¿¡æ¯ |
| | | List<NodeIndex> nodeIndices = nodeIndexMapper.selectList(Wrappers.<NodeIndex>lambdaQuery() |
| | | .eq(NodeIndex::getNodeId, modelNodeInfo.getNodeId())); |
| | | if (nodeIndices.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°ç¹ä½ä¿¡æ¯"); |
| | | } |
| | | |
| | | // æ»è´¹ç¨ |
| | | BigDecimal totalCost = BigDecimal.ZERO; |
| | | // éåè½æºç±»å |
| | | List<CostTrendEnergyTypeItem> itemList = new ArrayList<>(); |
| | | for (SysEnergy sysEnergyInfo : sysEnergies) { |
| | | CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem(); |
| | | item.setEnergyType(sysEnergyInfo.getEnersno()); |
| | | item.setEnergyName(sysEnergyInfo.getEnername()); |
| | | // å¤çæ¶é´ |
| | | Date bsTime = DateTimeUtil.getTime(timeType, timeCode); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); |
| | | totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, modelNodeInfo.getNodeId(), sysEnergyInfo, item); |
| | | itemList.add(item); |
| | | } |
| | | // éåç¨è½åå
è·åè¡¨æ ¼ä¸çæ°æ® |
| | | List<EnergyCostTrendItem> trendItemList = new ArrayList<>(); |
| | | EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem(); |
| | | energyCostTrendItem.setDateCode(timeCode); |
| | | energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); |
| | | energyCostTrendItem.setItemList(itemList); |
| | | trendItemList.add(energyCostTrendItem); |
| | | |
| | | EnergyCostTrendPage energyCostTrendPage = new EnergyCostTrendPage(); |
| | | energyCostTrendPage.setTotal(1); |
| | | energyCostTrendPage.setItemList(trendItemList); |
| | | return energyCostTrendPage; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨è½åå
ææ¬è¶å¿åæç´¯ç§¯éãè´¹ç¨ä¿¡æ¯ |
| | | * |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param bsTime å¼å§æ¶é´ |
| | | * @param endTime ç»ææ¶é´ |
| | | * @param totalCost æ»è´¹ç¨ |
| | | * @param nodeIndices èç¹ç¹ä½éå |
| | | * @param nodeId èç¹id |
| | | * @param sysEnergyInfo è½æºç±»åä¿¡æ¯ |
| | | * @param item è¿å对象 |
| | | * @return |
| | | */ |
| | | private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost, |
| | | List<NodeIndex> nodeIndices, String nodeId, SysEnergy sysEnergyInfo, |
| | | CostTrendEnergyTypeItem item) { |
| | | BigDecimal costValue = BigDecimal.ZERO; |
| | | BigDecimal accumulationValue = BigDecimal.ZERO; |
| | | switch (sysEnergyInfo.getEnersno()) { |
| | | case "electric": |
| | | List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, timeType); |
| | | costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | break; |
| | | default: |
| | | accumulationValue = dataItemMapper.getDataItemTimeRangeValueByNodeId(bsTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | costValue = accumulationValue.multiply(sysEnergyInfo.getPrice()); |
| | | break; |
| | | } |
| | | costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | totalCost = totalCost.add(costValue); |
| | | item.setCost(costValue); |
| | | item.setAccumulation(accumulationValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); |
| | | return totalCost; |
| | | } |
| | | |
| | | /** |
| | | * ææ¬è¶å¿åæï¼è½æºæ¶èææ¬ï¼ |
| | | * |
| | | * @param timeCode æ¶é´å¼ 䏿¶é´ç±»å对åºï¼2022-03-21/2022-03/2022 |
| | | * @param timeType æ¶é´ç±»å DAY/MONTH/YEAR |
| | | * @param modelCode 模åCode |
| | | * @param energyType è½æºç±»å |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) { |
| | | //è½æºç±»åä¿¡æ¯ |
| | | SysEnergy sysEnergy = new SysEnergy(); |
| | | if (StringUtils.isNotEmpty(energyType)) { |
| | | sysEnergy.setEnersno(energyType); |
| | | } |
| | | List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); |
| | | if (sysEnergies.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°è½æºä¿¡æ¯"); |
| | | } |
| | | |
| | | //èç¹ä¿¡æ¯ |
| | | List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) |
| | | .isNull(ModelNode::getParentId)); |
| | | if (modelNodes.isEmpty()) { |
| | | throw new RuntimeException("æªæ¥è¯¢å°èç¹ä¿¡æ¯"); |
| | | } |
| | | String nodeId = modelNodes.stream().findFirst().get().getNodeId(); |
| | | |
| | | // è½èä¿¡æ¯ |
| | | List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>(); |
| | | List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>(); |
| | | Date startTime = DateTimeUtil.getTime(timeType, timeCode); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime); |
| | | for (SysEnergy sysEnergyInfo : sysEnergies) { |
| | | switch (sysEnergyInfo.getEnersno()) { |
| | | case "electric": |
| | | List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!electricityDataItems.isEmpty()) { |
| | | electricityDataItems.forEach(electricityDataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(electricityDataItem.getDataTime()); |
| | | temp.setCostValue(electricityDataItem.getCost()); |
| | | temp.setAccumulationValue(electricityDataItem.getElectricity()); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | default: |
| | | List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); |
| | | if (!dataItems.isEmpty()) { |
| | | dataItems.forEach(electricityDataItem -> { |
| | | EnergyConsumeVO temp = new EnergyConsumeVO(); |
| | | temp.setDataTime(electricityDataItem.getDataTime()); |
| | | temp.setCostValue(new BigDecimal(electricityDataItem.getValue())); |
| | | temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice())); |
| | | energyConsumeVOList.add(temp); |
| | | }); |
| | | } |
| | | break; |
| | | } |
| | | BigDecimal cost = energyConsumeVOList.stream().map(EnergyConsumeVO::getCostValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | BigDecimal accumulation = energyConsumeVOList.stream().map(EnergyConsumeVO::getAccumulationValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | // ç»è£
ç»è®¡å¾ä¿¡æ¯ |
| | | EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem(); |
| | | item.setEnergyType(sysEnergyInfo.getEnersno()); |
| | | item.setEnergyUnit(sysEnergyInfo.getMuid()); |
| | | item.setCostLabel(sysEnergyInfo.getEnername() + "è´¹"); |
| | | item.setAccumulationLabel(sysEnergyInfo.getEnername() + "ç¨é"); |
| | | item.setCost(cost); |
| | | item.setAccumulation(accumulation); |
| | | // ç»è£
å¾è¡¨ä¿¡æ¯ |
| | | getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item); |
| | | itemList.add(item); |
| | | } |
| | | return itemList; |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
ææ¬è¶å¿åæ-ç»è®¡å¾ä¿¡æ¯ |
| | | * |
| | | * @param bsTime æ¶é´ |
| | | * @param timeType æ¶é´ç±»å |
| | | * @param dataItems è½è |
| | | * @param item è¿å对象 |
| | | */ |
| | | private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType, |
| | | List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) { |
| | | List<String> costKeyList = new ArrayList<>(); |
| | | List<String> accumulationKeyList = new ArrayList<>(); |
| | | List<BigDecimal> costValueList = new ArrayList<>(); |
| | | List<BigDecimal> accumulationValueList = new ArrayList<>(); |
| | | Map<String, List<EnergyConsumeVO>> energyConsumeVOMap; |
| | | //ææ¶é´ç±»åç»ç»è¿åæ°æ® |
| | | switch (timeType) { |
| | | case TimeTypeConst.TIME_TYPE_DAY: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_24; i++) { |
| | | String formatDate = i + CommonConst.TIME_UNIT_SHOW_HOUR; |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | String key = DateUtil.formatDateTime(DateUtil.offsetHour(bsTime, i)); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, key, costValueList, accumulationValueList); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_MONTH: |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDate(li.getDataTime()))); |
| | | Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); |
| | | while (bsTime.before(endTime)) { |
| | | String formatDate = DateUtil.formatDate(bsTime); |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); |
| | | bsTime = DateUtil.offsetDay(bsTime, CommonConst.DIGIT_1); |
| | | } |
| | | break; |
| | | case TimeTypeConst.TIME_TYPE_YEAR: |
| | | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); |
| | | energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> formatter.format(li.getDataTime()))); |
| | | for (int i = 0; i < CommonConst.DIGIT_12; i++) { |
| | | Date newDate = DateUtil.offsetMonth(bsTime, i); |
| | | String formatDate = DateUtil.format(newDate, DateTimeUtil.COMMON_PATTERN_TO_MONTH_ZH); |
| | | costKeyList.add(formatDate); |
| | | accumulationKeyList.add(formatDate); |
| | | calculateCostAndAccumulation(energyConsumeVOMap, formatDate, costValueList, accumulationValueList); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | item.setCostKeyList(costKeyList); |
| | | item.setCostValueList(costValueList); |
| | | item.setAccumulationKeyList(accumulationKeyList); |
| | | item.setAccumulationValueList(accumulationValueList); |
| | | } |
| | | |
| | | /** |
| | | * 计ç®è´¹ç¨åç¨é |
| | | * @param energyConsumeVOMap |
| | | * @param formatDate |
| | | * @param costValueList |
| | | * @param accumulationValueList |
| | | */ |
| | | private static void calculateCostAndAccumulation(Map<String, List<EnergyConsumeVO>> energyConsumeVOMap, String formatDate, List<BigDecimal> costValueList, List<BigDecimal> accumulationValueList) { |
| | | List<EnergyConsumeVO> energyConsumeList = Optional.ofNullable(energyConsumeVOMap.get(formatDate)) |
| | | .orElse(Collections.emptyList()); |
| | | BigDecimal totalCost = energyConsumeList.stream() |
| | | .map(EnergyConsumeVO::getCostValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | |
| | | BigDecimal totalAccumulation = energyConsumeList.stream() |
| | | .map(EnergyConsumeVO::getAccumulationValue) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); |
| | | costValueList.add(totalCost); |
| | | accumulationValueList.add(totalAccumulation); |
| | | } |
| | | } |
| | |
| | | AND ( begin_time BETWEEN #{beginTime} AND #{endTime} ) |
| | | AND time_type = #{timeType} |
| | | </select> |
| | | |
| | | <select id="getDataItemTimeRangeValueByNodeId" resultType="java.math.BigDecimal"> |
| | | SELECT |
| | | COALESCE (SUM ( "value" ), 0) |
| | | FROM |
| | | "data_item" di |
| | | JOIN energy_index ei ON di.index_id = ei.index_id |
| | | WHERE |
| | | di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) |
| | | <if test="energyType !='' and energyType !=null and energyType =='allType'"> |
| | | AND ei.energy_id != '' |
| | | </if> |
| | | <if test="energyType !='' and energyType !=null and energyType !='allType'"> |
| | | AND ei.energy_id = #{energyType} |
| | | </if> |
| | | AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) |
| | | AND di.time_type = #{timeType} |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | AND time_type = #{timeType} |
| | | </select> |
| | | <select id="getCostTrends" |
| | | resultType="com.zhitan.peakvalley.domain.ElectricityDataItem"> |
| | | SELECT |
| | | di.index_code, |
| | | di.time_code, |
| | | di.electricity_type, |
| | | di.data_time, |
| | | di.electricity, |
| | | di.cost, |
| | | di.time_type, |
| | | di.price, |
| | | di.remark |
| | | FROM |
| | | "electricity_data_item" di |
| | | JOIN energy_index ei ON di.index_id = ei.index_id |
| | | WHERE |
| | | di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) |
| | | <if test="energyType !='' and energyType !=null and energyType =='allType'"> |
| | | AND ei.energy_id != '' |
| | | </if> |
| | | <if test="energyType !='' and energyType !=null and energyType !='allType'"> |
| | | AND ei.energy_id = #{energyType} |
| | | </if> |
| | | AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) |
| | | AND di.time_type = #{timeType} |
| | | </select> |
| | | </mapper> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | //å
¨å综åè½èç»è®¡ |
| | | export function getDataList(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | //å
¨å综åè½èç»è®¡å¾ |
| | | export function getlistChart(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/listChart', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | export function exportList(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/export', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | export function getEnergyList(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/getList', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | //éç¹è®¾å¤è½èæå |
| | | export function energyList(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/energyList', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | //è®¾å¤ |
| | | export function getFacilityArchives() { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/getFacilityArchives', |
| | | method: 'get' |
| | | }) |
| | | } |
| | | //éç¹è®¾å¤ |
| | | export function getPointFacility() { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/getPointFacility', |
| | | method: 'get' |
| | | }) |
| | | } |
| | | export function getDeviceList(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/getDeviceList', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | //è·å模åä¸çè½æºåç§ |
| | | export function energyDevice(query) { |
| | | return request({ |
| | | url: '/statisticalData/comprehensiveStatistics/energyDevice', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | //æ¥è¯¢æ¥æ¥è¡¨ |
| | | export function getDataList(query) { |
| | | return request({ |
| | | url: "/comprehensive/dailyComprehensive/list", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | export function getlistChart(query) { |
| | | return request({ |
| | | url: "/comprehensive/dailyComprehensive/listChart", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | |
| | | // 导åºç»¼åæ¥è¡¨ |
| | | export function exportList(query) { |
| | | return request({ |
| | | url: "/report/dailyReport/export", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | //æ¥è¯¢æ¥æ¥è¡¨ |
| | | export function getDataList(query) { |
| | | return request({ |
| | | url: '/comprehensive/monthlyComprehensive/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | export function getlistChart(query) { |
| | | return request({ |
| | | url: '/comprehensive/monthlyComprehensive/listChart', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | //å
¨å综åè½èç»è®¡ |
| | | export function getDataList(query) { |
| | | return request({ |
| | | url: '/statisticalData/processEnergyConsumption/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | //å
¨å综åè½èç»è®¡å¾ |
| | | export function getlistChart(query) { |
| | | return request({ |
| | | url: '/statisticalData/processEnergyConsumption/listChart', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | //æ¥è¯¢æ¥æ¥è¡¨ |
| | | export function getDataList(query) { |
| | | return request({ |
| | | url: '/comprehensive/yearComprehensive/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | export function getlistChart(query) { |
| | | return request({ |
| | | url: '/comprehensive/yearComprehensive/listChart', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | |
| | | import request from '@/utils/request' |
| | | import request from "@/utils/request" |
| | | |
| | | // è½è对æ¯åæ-åºåè½èåæ-è½èè¶å¿/åºåè½èç»è®¡åæè¡¨-å表 |
| | | // è½è对æ¯åæ-ç§å®¤è½èåæ-è½èè¶å¿/è½èç»è®¡åæè¡¨-å表 |
| | | // è½è对æ¯åæ-设å¤è½èåæ-è½èè¶å¿/è½èç»è®¡åæè¡¨-å表 |
| | | export function listRegion(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getByArea', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getByArea", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | // è½è对æ¯åæ-ç§å®¤è½èåæ-è½èæå-å表 |
| | | // è½è对æ¯åæ-设å¤è½èåæ-è½èæå-å表 |
| | | export function listDepartment(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getByDepartment', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getByDepartment", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | // è½è对æ¯åæ-è½èææ èæ ¸-è½èè¶å¿/åºåè½èç»è®¡åæè¡¨ |
| | | export function listIndicatorassessment(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getPlanAndProdCount', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getPlanAndProdCount", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | // è½è对æ¯åæ-综åè½èåæ-综åè½èè¶å¿/åä»è´¨è½èå æ¯/åºåè½èç»è®¡åæè¡¨-å表 |
| | | export function listComprehensive(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getComprehensiveEnergy', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getComprehensiveEnergy", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | // è½è对æ¯åæ-综åè½èåæ-è½èåæ¯ç¯æ¯-å表 |
| | | export function listYoY(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getYOY', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getYOY", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | // è½è对æ¯åæ-综åè½èåæ-ç¨è½åå
è½èæå-å表 |
| | | export function listEnergyRanking(query) { |
| | | return request({ |
| | | url: '/consumptionanalysis/getEnergyRanking', |
| | | method: 'get', |
| | | params: query |
| | | url: "/consumptionanalysis/getEnergyRanking", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
| | | |
| | | // statisticsAnalysis/getFlowCharts |
| | | export function getFlowCharts(query) { |
| | | return request({ |
| | | url: "/statisticsAnalysis/getFlowCharts", |
| | | method: "get", |
| | | params: query, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çåçå æ°æ°æ® |
| | | export function powerFactorAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/powerFactorAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åä¸ç¸ä¸å¹³è¡¡åææ°æ® |
| | | export function threePhaseUnbalanceAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/threePhaseUnbalanceAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request" |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表 |
| | | export function listElectricityMeter(params) { |
| | | return request({ |
| | | url: "/meter/listElectricityMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸çæä¸ªçµè¡¨çè´è·åææ°æ® |
| | | export function loadAnalysisDetail(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/detail", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | // è·åç¨è½åå
ä¸ççµè¡¨å表-å®ä½è¡¨ |
| | | export function listElectricityDeviceMeter(params) { |
| | | return request({ |
| | | url: "/loadAnalysis/listElectricMeter", |
| | | method: "get", |
| | | params, |
| | | }) |
| | | } |
| | |
| | | // tr:hover > td { |
| | | // background-color: #141E4A; |
| | | // } |
| | | |
| | | .el-table-fixed-column--left { |
| | | background-color: #110f2e !important; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | .el-tabs__item.is-active { |
| | | color: #409EFF; |
| | | } |
| | | |
| | | .el-descriptions__cell { |
| | | background: transparent; |
| | | color: #fff !important; |
| | | } |
| | | .el-descriptions__body { |
| | | background-color: transparent; |
| | | color: #fff; |
| | | } |
| | | .el-descriptions__label { |
| | | color: #fff !important; |
| | | background-color: #1a235d !important; |
| | | } |
| | | } |
| | | |
| | |
| | | // tr:hover > td { |
| | | // background-color: #141E4A; |
| | | // } |
| | | .el-table-fixed-column--left { |
| | | background-color: #fff; |
| | | } |
| | | } |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="chart-item"> |
| | | <div id="ChartDom" style="width: 100%; height: 100%"></div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | const emit = defineEmits() |
| | | const props = defineProps({ |
| | | chartData: { |
| | | type: Object, |
| | | default: () => {}, |
| | | }, |
| | | chartType: { |
| | | type: String, |
| | | default: "line", // bar |
| | | }, |
| | | }) |
| | | |
| | | watch( |
| | | () => props.chartData, |
| | | (val) => { |
| | | console.log("watch", val) |
| | | initChart() |
| | | } |
| | | ) |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | initChart() |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | console.log("initChart", props.chartData) |
| | | if (!props.chartData.xAxis) { |
| | | return |
| | | } |
| | | const chartDom = document.getElementById("ChartDom") |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | | echarts.dispose(chartDom) |
| | | } |
| | | const myChart = echarts.init(chartDom) |
| | | // å¤çå¤ç³»åæ°æ® |
| | | const series = props.chartData.series.map((item) => ({ |
| | | name: item.name, |
| | | type: props.chartType, // æ ¹æ®ä¼ å
¥ç±»å渲æ |
| | | data: item.data, |
| | | barWidth: "16", |
| | | itemStyle: { |
| | | borderRadius: [15, 15, 0, 0], |
| | | }, |
| | | smooth: true, // å¯ç¨å¹³æ»æ²çº¿ |
| | | })) |
| | | let option = { |
| | | title: { |
| | | // text: props.chartData.title, |
| | | left: "40", |
| | | textStyle: { |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | legend: { |
| | | data: props.chartData.series.map((item) => item.name), // å¾ä¾æ°æ® |
| | | icon: "rect", |
| | | right: 40, |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "40", |
| | | left: "40", |
| | | right: "40", |
| | | bottom: "20", |
| | | containLabel: true, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | data: props.chartData.xAxis, |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | ], |
| | | series: series, |
| | | } |
| | | setTimeout(() => { |
| | | myChart.setOption(option) |
| | | }, 200) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-item { |
| | | width: 100%; |
| | | height: 360px !important; |
| | | margin-top: 0px; |
| | | padding-top: 20px; |
| | | } |
| | | </style> |
| | |
| | | |
| | | |
| | | /** |
| | | * éç¨jsæ¹æ³å°è£
å¤ç |
| | | * Copyright (c) 2019 ruoyi |
| | |
| | | if (arguments.length === 0 || !time) { |
| | | return null |
| | | } |
| | | const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' |
| | | const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}" |
| | | let date |
| | | if (typeof time === 'object') { |
| | | if (typeof time === "object") { |
| | | date = time |
| | | } else { |
| | | if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { |
| | | if (typeof time === "string" && /^[0-9]+$/.test(time)) { |
| | | time = parseInt(time) |
| | | } else if (typeof time === 'string') { |
| | | time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); |
| | | } else if (typeof time === "string") { |
| | | time = time |
| | | .replace(new RegExp(/-/gm), "/") |
| | | .replace("T", " ") |
| | | .replace(new RegExp(/\.[\d]{3}/gm), "") |
| | | } |
| | | if ((typeof time === 'number') && (time.toString().length === 10)) { |
| | | if (typeof time === "number" && time.toString().length === 10) { |
| | | time = time * 1000 |
| | | } |
| | | date = new Date(time) |
| | |
| | | h: date.getHours(), |
| | | i: date.getMinutes(), |
| | | s: date.getSeconds(), |
| | | a: date.getDay() |
| | | a: date.getDay(), |
| | | } |
| | | const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { |
| | | let value = formatObj[key] |
| | | // Note: getDay() returns 0 on Sunday |
| | | if (key === 'a') { return ['æ¥', 'ä¸', 'äº', 'ä¸', 'å', 'äº', 'å
'][value] } |
| | | if (key === "a") { |
| | | return ["æ¥", "ä¸", "äº", "ä¸", "å", "äº", "å
"][value] |
| | | } |
| | | if (result.length > 0 && value < 10) { |
| | | value = '0' + value |
| | | value = "0" + value |
| | | } |
| | | return value || 0 |
| | | }) |
| | |
| | | // 表åéç½® |
| | | export function resetForm(refName) { |
| | | if (this.$refs[refName]) { |
| | | this.$refs[refName].resetFields(); |
| | | this.$refs[refName].resetFields() |
| | | } |
| | | } |
| | | |
| | | // æ·»å æ¥æèå´ |
| | | export function addDateRange(params, dateRange, propName) { |
| | | let search = params; |
| | | search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; |
| | | dateRange = Array.isArray(dateRange) ? dateRange : []; |
| | | if (typeof (propName) === 'undefined') { |
| | | search.params['beginTime'] = dateRange[0]; |
| | | search.params['endTime'] = dateRange[1]; |
| | | let search = params |
| | | search.params = |
| | | typeof search.params === "object" && search.params !== null && !Array.isArray(search.params) ? search.params : {} |
| | | dateRange = Array.isArray(dateRange) ? dateRange : [] |
| | | if (typeof propName === "undefined") { |
| | | search.params["beginTime"] = dateRange[0] |
| | | search.params["endTime"] = dateRange[1] |
| | | } else { |
| | | search.params['begin' + propName] = dateRange[0]; |
| | | search.params['end' + propName] = dateRange[1]; |
| | | search.params["begin" + propName] = dateRange[0] |
| | | search.params["end" + propName] = dateRange[1] |
| | | } |
| | | return search; |
| | | return search |
| | | } |
| | | |
| | | // åæ¾æ°æ®åå
¸ |
| | | export function selectDictLabel(datas, value) { |
| | | if (value === undefined) { |
| | | return ""; |
| | | return "" |
| | | } |
| | | var actions = []; |
| | | var actions = [] |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == ('' + value)) { |
| | | actions.push(datas[key].label); |
| | | return true; |
| | | if (datas[key].value == "" + value) { |
| | | actions.push(datas[key].label) |
| | | return true |
| | | } |
| | | }) |
| | | if (actions.length === 0) { |
| | | actions.push(value); |
| | | actions.push(value) |
| | | } |
| | | return actions.join(''); |
| | | return actions.join("") |
| | | } |
| | | |
| | | // åæ¾æ°æ®åå
¸ï¼å符串æ°ç»ï¼ |
| | | export function selectDictLabels(datas, value, separator) { |
| | | if (value === undefined || value.length ===0) { |
| | | return ""; |
| | | if (value === undefined || value.length === 0) { |
| | | return "" |
| | | } |
| | | if (Array.isArray(value)) { |
| | | value = value.join(","); |
| | | value = value.join(",") |
| | | } |
| | | var actions = []; |
| | | var currentSeparator = undefined === separator ? "," : separator; |
| | | var temp = value.split(currentSeparator); |
| | | var actions = [] |
| | | var currentSeparator = undefined === separator ? "," : separator |
| | | var temp = value.split(currentSeparator) |
| | | Object.keys(value.split(currentSeparator)).some((val) => { |
| | | var match = false; |
| | | var match = false |
| | | Object.keys(datas).some((key) => { |
| | | if (datas[key].value == ('' + temp[val])) { |
| | | actions.push(datas[key].label + currentSeparator); |
| | | match = true; |
| | | if (datas[key].value == "" + temp[val]) { |
| | | actions.push(datas[key].label + currentSeparator) |
| | | match = true |
| | | } |
| | | }) |
| | | if (!match) { |
| | | actions.push(temp[val] + currentSeparator); |
| | | actions.push(temp[val] + currentSeparator) |
| | | } |
| | | }) |
| | | return actions.join('').substring(0, actions.join('').length - 1); |
| | | return actions.join("").substring(0, actions.join("").length - 1) |
| | | } |
| | | |
| | | // åç¬¦ä¸²æ ¼å¼å(%s ) |
| | | export function sprintf(str) { |
| | | var args = arguments, flag = true, i = 1; |
| | | var args = arguments, |
| | | flag = true, |
| | | i = 1 |
| | | str = str.replace(/%s/g, function () { |
| | | var arg = args[i++]; |
| | | if (typeof arg === 'undefined') { |
| | | flag = false; |
| | | return ''; |
| | | var arg = args[i++] |
| | | if (typeof arg === "undefined") { |
| | | flag = false |
| | | return "" |
| | | } |
| | | return arg; |
| | | }); |
| | | return flag ? str : ''; |
| | | return arg |
| | | }) |
| | | return flag ? str : "" |
| | | } |
| | | |
| | | // 转æ¢å符串ï¼undefined,nullç转å为"" |
| | | export function parseStrEmpty(str) { |
| | | if (!str || str == "undefined" || str == "null") { |
| | | return ""; |
| | | return "" |
| | | } |
| | | return str; |
| | | return str |
| | | } |
| | | |
| | | // æ°æ®åå¹¶ |
| | |
| | | for (var p in target) { |
| | | try { |
| | | if (target[p].constructor == Object) { |
| | | source[p] = mergeRecursive(source[p], target[p]); |
| | | source[p] = mergeRecursive(source[p], target[p]) |
| | | } else { |
| | | source[p] = target[p]; |
| | | source[p] = target[p] |
| | | } |
| | | } catch (e) { |
| | | source[p] = target[p]; |
| | | source[p] = target[p] |
| | | } |
| | | } |
| | | return source; |
| | | }; |
| | | return source |
| | | } |
| | | |
| | | /** |
| | | * æé æ åç»ææ°æ® |
| | |
| | | */ |
| | | export function handleTree(data, id, parentId, children) { |
| | | let config = { |
| | | id: id || 'id', |
| | | parentId: parentId || 'parentId', |
| | | childrenList: children || 'children' |
| | | }; |
| | | id: id || "id", |
| | | parentId: parentId || "parentId", |
| | | childrenList: children || "children", |
| | | } |
| | | |
| | | var childrenListMap = {}; |
| | | var nodeIds = {}; |
| | | var tree = []; |
| | | var childrenListMap = {} |
| | | var nodeIds = {} |
| | | var tree = [] |
| | | |
| | | for (let d of data) { |
| | | let parentId = d[config.parentId]; |
| | | let parentId = d[config.parentId] |
| | | if (childrenListMap[parentId] == null) { |
| | | childrenListMap[parentId] = []; |
| | | childrenListMap[parentId] = [] |
| | | } |
| | | nodeIds[d[config.id]] = d; |
| | | childrenListMap[parentId].push(d); |
| | | nodeIds[d[config.id]] = d |
| | | childrenListMap[parentId].push(d) |
| | | } |
| | | |
| | | for (let d of data) { |
| | | let parentId = d[config.parentId]; |
| | | let parentId = d[config.parentId] |
| | | if (nodeIds[parentId] == null) { |
| | | tree.push(d); |
| | | tree.push(d) |
| | | } |
| | | } |
| | | |
| | | for (let t of tree) { |
| | | adaptToChildrenList(t); |
| | | adaptToChildrenList(t) |
| | | } |
| | | |
| | | function adaptToChildrenList(o) { |
| | | if (childrenListMap[o[config.id]] !== null) { |
| | | o[config.childrenList] = childrenListMap[o[config.id]]; |
| | | o[config.childrenList] = childrenListMap[o[config.id]] |
| | | } |
| | | if (o[config.childrenList]) { |
| | | for (let c of o[config.childrenList]) { |
| | | adaptToChildrenList(c); |
| | | adaptToChildrenList(c) |
| | | } |
| | | } |
| | | } |
| | | return tree; |
| | | return tree |
| | | } |
| | | |
| | | /** |
| | | * åæ°å¤ç |
| | | * @param {*} params åæ° |
| | | */ |
| | | * åæ°å¤ç |
| | | * @param {*} params åæ° |
| | | */ |
| | | export function tansParams(params) { |
| | | let result = '' |
| | | let result = "" |
| | | for (const propName of Object.keys(params)) { |
| | | const value = params[propName]; |
| | | var part = encodeURIComponent(propName) + "="; |
| | | if (value !== null && value !== "" && typeof (value) !== "undefined") { |
| | | if (typeof value === 'object') { |
| | | const value = params[propName] |
| | | var part = encodeURIComponent(propName) + "=" |
| | | if (value !== null && value !== "" && typeof value !== "undefined") { |
| | | if (typeof value === "object") { |
| | | for (const key of Object.keys(value)) { |
| | | if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { |
| | | let params = propName + '[' + key + ']'; |
| | | var subPart = encodeURIComponent(params) + "="; |
| | | result += subPart + encodeURIComponent(value[key]) + "&"; |
| | | if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") { |
| | | let params = propName + "[" + key + "]" |
| | | var subPart = encodeURIComponent(params) + "=" |
| | | result += subPart + encodeURIComponent(value[key]) + "&" |
| | | } |
| | | } |
| | | } else { |
| | | result += part + encodeURIComponent(value) + "&"; |
| | | result += part + encodeURIComponent(value) + "&" |
| | | } |
| | | } |
| | | } |
| | | return result |
| | | } |
| | | |
| | | |
| | | // è¿å项ç®è·¯å¾ |
| | | export function getNormalPath(p) { |
| | | if (p.length === 0 || !p || p == 'undefined') { |
| | | if (p.length === 0 || !p || p == "undefined") { |
| | | return p |
| | | }; |
| | | let res = p.replace('//', '/') |
| | | if (res[res.length - 1] === '/') { |
| | | } |
| | | let res = p.replace("//", "/") |
| | | if (res[res.length - 1] === "/") { |
| | | return res.slice(0, res.length - 1) |
| | | } |
| | | return res; |
| | | return res |
| | | } |
| | | |
| | | // éªè¯æ¯å¦ä¸ºblobæ ¼å¼ |
| | | export function blobValidate(data) { |
| | | return data.type !== 'application/json' |
| | | return data.type !== "application/json" |
| | | } |
| | | |
| | | // éç¨ä¸è½½æ¹æ³ |
| | | const baseURL = import.meta.env.VITE_APP_BASE_API |
| | | export function download(fileName) { |
| | | window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true |
| | | } |
| | | |
| | | // éç¨ä¸è½½æ¹æ³ showfileNameï¼ä¸è½½åçæä»¶å称带æ©å±å;filePath:è¦ä¸è½½æä»¶çç»å¯¹è·¯å¾,带çæä»¶ååæ©å±åï¼deleteflageä¸è½½å®æåæ¯å¦å 餿件 |
| | | export function fileDownload(showfileName, filePath, deleteflage) { |
| | | window.location.href = |
| | | baseURL + |
| | | "/common/downloadAssign?showFileName=" + |
| | | encodeURI(showfileName) + |
| | | "&filePath=" + |
| | | encodeURI(filePath) + |
| | | "&delete=" + |
| | | deleteflage |
| | | } |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="æé´" clearable style="width: 100%" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 100%" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´"> |
| | | <el-date-picker v-model="queryParams.dataTime" :clearable="false" |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :clearable="false" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format="queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD'" |
| | | value-format="YYYY-MM-DD" placeholder="æ¶é´" style="width: 100%" /> |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">æç´¢</el-button> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import * as echarts from 'echarts'; |
| | | import { onMounted, reactive, ref } from 'vue'; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { period } = proxy.useDict("period"); |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category"); |
| | | import * as echarts from "echarts" |
| | | import { onMounted, reactive, ref } from "vue" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | const { proxy } = getCurrentInstance() |
| | | const { period } = proxy.useDict("period") |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category") |
| | | let energyTypeList = ref([]) |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | }); |
| | | energyTypeList.value = res.data |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | function formatterLabel(list, value) { |
| | | console.log(list, value); |
| | | console.log(list, value) |
| | | |
| | | let dict = list.find(item => item.enersno == value) |
| | | return dict ? dict.enername : '' |
| | | let dict = list.find((item) => item.enersno == value) |
| | | return dict ? dict.enername : "" |
| | | } |
| | | |
| | | |
| | | let queryParams = ref({ |
| | | timeType: null, |
| | | dataTime: null, |
| | | nodeId: null |
| | | nodeId: null, |
| | | }) |
| | | |
| | | import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage"; |
| | | import { el } from 'element-plus/es/locales.mjs'; |
| | | let form = ref({}); |
| | | import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage" |
| | | import { el } from "element-plus/es/locales.mjs" |
| | | let form = ref({}) |
| | | let currentNode = ref() |
| | | |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | function handleNodeClick(e) { |
| | | currentNode.value = e |
| | | queryParams.value.nodeId = e.id |
| | | handleTimeType('YEAR') |
| | | handleTimeType("YEAR") |
| | | getByNodeIdFun() |
| | | } |
| | | |
| | | function getByNodeIdFun() { |
| | | getByNodeId(queryParams.value).then(res => { |
| | | getByNodeId(queryParams.value).then((res) => { |
| | | let alarmList = [] |
| | | let energyList = [] |
| | | let alarmNumberList = { |
| | | data: [], |
| | | xAxisData: [] |
| | | xAxisData: [], |
| | | } |
| | | console.log(111, res); |
| | | console.log(111, res) |
| | | if (res.code == 200) { |
| | | let { data } = res |
| | | alarmList = data.alarmProportion.map(item => { |
| | | alarmList = data.alarmProportion.map((item) => { |
| | | return { |
| | | name: proxy.selectDictLabel(alarm_record_category.value, item.energyName), |
| | | value: item.percentage |
| | | value: item.percentage, |
| | | } |
| | | }) |
| | | energyList = data.energyProportion.map(item => { |
| | | energyList = data.energyProportion.map((item) => { |
| | | return { |
| | | name: formatterLabel(energyTypeList.value, item.energyName), |
| | | value: item.percentage |
| | | value: item.percentage, |
| | | } |
| | | }) |
| | | for (const item of data.chartDataList) { |
| | |
| | | alarmNumberList.data.push(item.yvalue) |
| | | } |
| | | |
| | | pieChart('Chart1', alarmList, 'æ¥è¦ç±»åå æ¯') |
| | | pieChart('Chart2', energyList, 'è½æºç±»åå æ¯') |
| | | getChart('Chart3', alarmNumberList) |
| | | pieChart("Chart1", alarmList, "æ¥è¦ç±»åå æ¯") |
| | | pieChart("Chart2", energyList, "è½æºç±»åå æ¯") |
| | | getChart("Chart3", alarmNumberList) |
| | | } |
| | | }) |
| | | } |
| | |
| | | getByNodeIdFun() |
| | | } |
| | | function resetQuery() { |
| | | handleTimeType('YEAR') |
| | | handleTimeType("YEAR") |
| | | getByNodeIdFun() |
| | | } |
| | | |
| | | |
| | | function pieChart(Id, data, name) { |
| | | let total = 0; |
| | | let total = 0 |
| | | data.forEach(function (val, idx, arr) { |
| | | total += val.value; |
| | | total += val.value |
| | | }) |
| | | const myChart = echarts.init(document.getElementById(Id)); |
| | | const myChart = echarts.init(document.getElementById(Id)) |
| | | myChart.setOption({ |
| | | color: ['#4D94FF', '#00C27C', '#F0142F', '#F2D261', '#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'], |
| | | color: [ |
| | | "#4D94FF", |
| | | "#00C27C", |
| | | "#F0142F", |
| | | "#F2D261", |
| | | "#0E7CE2", |
| | | "#FF8352", |
| | | "#E271DE", |
| | | "#F8456B", |
| | | "#00FFFF", |
| | | "#4AEAB0", |
| | | ], |
| | | grid: { |
| | | top: '20%', |
| | | left: '1%', |
| | | right: '1%', |
| | | bottom: '0%', |
| | | containLabel: true |
| | | top: "20%", |
| | | left: "1%", |
| | | right: "1%", |
| | | bottom: "0%", |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item' |
| | | trigger: "item", |
| | | }, |
| | | legend: { |
| | | orient: 'vertical', |
| | | top: 'center', |
| | | icon: 'circle', |
| | | orient: "vertical", |
| | | top: "center", |
| | | icon: "circle", |
| | | itemWidth: 14, |
| | | itemHeight: 14, |
| | | right: '2%', |
| | | right: "2%", |
| | | itemGap: 10, |
| | | textStyle: { |
| | | align: 'left', |
| | | verticalAlign: 'middle', |
| | | align: "left", |
| | | verticalAlign: "middle", |
| | | rich: { |
| | | name: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | value: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | rate: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | }, |
| | | formatter: (name) => { |
| | | if (data.length) { |
| | | let target, percent; |
| | | let target, percent |
| | | for (let i = 0; i < data.length; i++) { |
| | | if (data[i].name === name) { |
| | | target = data[i].value; |
| | | percent = ((target / total) * 100).toFixed(2); |
| | | target = data[i].value |
| | | percent = ((target / total) * 100).toFixed(2) |
| | | } |
| | | } |
| | | return `{name|${name} }{value| ${target}} {rate| ${percent}%}`; |
| | | |
| | | return `{name|${name} }{value| ${target}} {rate| ${percent}%}` |
| | | } else { |
| | | return `{name|${name} }{value| ${0}} {rate| ${0}%}`; |
| | | |
| | | return `{name|${name} }{value| ${0}} {rate| ${0}%}` |
| | | } |
| | | }, |
| | | }, |
| | | series: [{ |
| | | name, |
| | | type: 'pie', |
| | | radius: ['45%', '70%'], |
| | | center: ['35%', '50%'], |
| | | avoidLabelOverlap: false, |
| | | label: { |
| | | show: false, |
| | | overflow: 'none', |
| | | formatter: '{b} {d}% \n {c} tce', |
| | | series: [ |
| | | { |
| | | name, |
| | | type: "pie", |
| | | radius: ["45%", "70%"], |
| | | center: ["35%", "50%"], |
| | | avoidLabelOverlap: false, |
| | | label: { |
| | | show: false, |
| | | overflow: "none", |
| | | formatter: "{b} {d}% \n {c} tce", |
| | | }, |
| | | data, |
| | | }, |
| | | data, |
| | | }] |
| | | ], |
| | | }) |
| | | } |
| | | function getChart(Id, dataList) { |
| | | const myChart3 = echarts.init(document.getElementById(Id)); |
| | | myChart3.setOption( |
| | | { |
| | | |
| | | grid: { |
| | | left: '3%', |
| | | right: '2%', |
| | | bottom: '2%', |
| | | containLabel: true |
| | | const myChart3 = echarts.init(document.getElementById(Id)) |
| | | myChart3.setOption({ |
| | | grid: { |
| | | left: "3%", |
| | | right: "2%", |
| | | bottom: "2%", |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: "axis", |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | // boundaryGap: false, |
| | | data: dataList.xAxisData, |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5, |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | // boundaryGap: false, |
| | | data: dataList.xAxisData, |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: "#ddd", |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5 |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: '#ddd' |
| | | } |
| | | }, |
| | | |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: false, |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: 'rgba(220,222,226,0.4)' |
| | | } |
| | | }, |
| | | axisLabel: { |
| | | color: '#999', |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: 'ï¼æ¬¡ï¼', |
| | | // 设置åç§°æ ·å¼ |
| | | nameTextStyle: { |
| | | color: ' #CEE3FF', |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | // åæ è½´å»åº¦ |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5 |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: '' |
| | | } |
| | | }, |
| | | |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: 'rgba(220,222,226,0.4)' |
| | | } |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: false, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: "rgba(220,222,226,0.4)", |
| | | }, |
| | | |
| | | // åæ è½´å»åº¦é´é |
| | | // interval: '50', |
| | | // // åæ è½´æå°å¼ |
| | | // min: 'dataMin', |
| | | // // åæ è½´æå¤§å¼ |
| | | // max: 'dataMax', |
| | | // // åæ è½´å°æ°ç¹ç²¾åº¦ |
| | | // precision: 0, |
| | | // // åæ è½´å»åº¦ææ¬çå¸å±æå |
| | | // position: 'left' |
| | | axisLabel: { |
| | | color: '#B2B8C2', |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "bar", |
| | | barWidth: '17', |
| | | stack: 'number', |
| | | data: dataList.data, |
| | | tooltip: { |
| | | show: false, |
| | | } |
| | | axisLabel: { |
| | | color: "#999", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | }, |
| | | yAxis: { |
| | | type: "value", |
| | | name: "ï¼æ¬¡ï¼", |
| | | // 设置åç§°æ ·å¼ |
| | | nameTextStyle: { |
| | | color: " #CEE3FF", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | // åæ è½´å»åº¦ |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5, |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: "", |
| | | }, |
| | | { |
| | | name: 'æ¥è¦æ¬¡æ°', |
| | | type: 'line', |
| | | symbol: 'none', // 设置为 'none' 廿åç¹ |
| | | lineStyle: { |
| | | color: '#EE0303' |
| | | }, |
| | | data: dataList.data, |
| | | }, |
| | | ] |
| | | }) |
| | | }, |
| | | |
| | | window.addEventListener("resize", () => { |
| | | myChart1.resize(); |
| | | myChart2.resize(); |
| | | myChart3.resize(); |
| | | }, { passive: true }); |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: "rgba(220,222,226,0.4)", |
| | | }, |
| | | }, |
| | | |
| | | // åæ è½´å»åº¦é´é |
| | | // interval: '50', |
| | | // // åæ è½´æå°å¼ |
| | | // min: 'dataMin', |
| | | // // åæ è½´æå¤§å¼ |
| | | // max: 'dataMax', |
| | | // // åæ è½´å°æ°ç¹ç²¾åº¦ |
| | | // precision: 0, |
| | | // // åæ è½´å»åº¦ææ¬çå¸å±æå |
| | | // position: 'left' |
| | | axisLabel: { |
| | | color: "#B2B8C2", |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "bar", |
| | | barWidth: "12", |
| | | stack: "number", |
| | | data: dataList.data, |
| | | tooltip: { |
| | | show: false, |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "line", |
| | | symbol: "none", // 设置为 'none' 廿åç¹ |
| | | lineStyle: { |
| | | color: "#EE0303", |
| | | }, |
| | | data: dataList.data, |
| | | }, |
| | | ], |
| | | }) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | myChart3.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | |
| | | .chart-box { |
| | | height: calc((100vh - 410px)/2) !important; |
| | | height: calc((100vh - 410px) / 2) !important; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="æé´" clearable style="width: 120px" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´"> |
| | | <el-date-picker v-model="queryParams.dataTime" :clearable="false" |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :clearable="false" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format="queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD'" |
| | | value-format="YYYY-MM-DD" placeholder="æ¶é´" style="width: 100%" /> |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">æç´¢</el-button> |
| | |
| | | </div> |
| | | |
| | | <div class="mt20 mb20 text-center data-item"> |
| | | æ¬ç¨è½åå
ææ <span>{{ dataArray.indexCount }}</span>ä¸ªï¼ |
| | | æ¬å¹´åº¦æ¥è¦<span>{{ dataArray.yearCount }}</span>æ¬¡ï¼æ¬æ<span>{{ dataArray.monthCount }}</span>次 |
| | | æ¬ç¨è½åå
ææ <span>{{ dataArray.indexCount }}</span |
| | | >ä¸ªï¼ æ¬å¹´åº¦æ¥è¦<span>{{ dataArray.yearCount }}</span |
| | | >æ¬¡ï¼æ¬æ<span>{{ dataArray.monthCount }}</span |
| | | >次 |
| | | </div> |
| | | <el-row :gutter="24" class="mb20"> |
| | | <el-col :span="12"> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import * as echarts from 'echarts'; |
| | | import { onMounted, reactive, ref } from 'vue'; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { period } = proxy.useDict("period"); |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category"); |
| | | import * as echarts from "echarts" |
| | | import { onMounted, reactive, ref } from "vue" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | const { proxy } = getCurrentInstance() |
| | | const { period } = proxy.useDict("period") |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category") |
| | | let energyTypeList = ref([]) |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | }); |
| | | energyTypeList.value = res.data |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | function formatterLabel(list, value) { |
| | | let dict = list.find(item => item.enersno == value) |
| | | return dict ? dict.enername : '' |
| | | let dict = list.find((item) => item.enersno == value) |
| | | return dict ? dict.enername : "" |
| | | } |
| | | |
| | | |
| | | let queryParams = ref({ |
| | | timeType: null, |
| | | dataTime: null, |
| | | nodeId: null |
| | | nodeId: null, |
| | | }) |
| | | |
| | | import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage"; |
| | | import { el } from 'element-plus/es/locales.mjs'; |
| | | let form = ref({}); |
| | | import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage" |
| | | import { el } from "element-plus/es/locales.mjs" |
| | | let form = ref({}) |
| | | let currentNode = ref() |
| | | |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | function handleNodeClick(e) { |
| | | currentNode.value = e |
| | | queryParams.value.nodeId = e.id |
| | | handleTimeType(period.value[0].value); |
| | | handleTimeType(period.value[0].value) |
| | | |
| | | getByNodeIdFun() |
| | | } |
| | | |
| | | function getByNodeIdFun() { |
| | | getByNodeId(queryParams.value).then(res => { |
| | | getByNodeId(queryParams.value).then((res) => { |
| | | let alarmList = [] |
| | | let energyList = [] |
| | | let alarmNumberList = { |
| | | data: [], |
| | | xAxisData: [] |
| | | xAxisData: [], |
| | | } |
| | | if (res.code == 200) { |
| | | let { data } = res |
| | | alarmList = data.alarmProportion.map(item => { |
| | | alarmList = data.alarmProportion.map((item) => { |
| | | return { |
| | | name: proxy.selectDictLabel(alarm_record_category.value, item.energyName), |
| | | value: item.count, |
| | | percentage: item.percentage |
| | | percentage: item.percentage, |
| | | } |
| | | }) |
| | | energyList = data.energyProportion.map(item => { |
| | | energyList = data.energyProportion.map((item) => { |
| | | return { |
| | | name: formatterLabel(energyTypeList.value, item.energyName), |
| | | value: item.count, |
| | | percentage: item.percentage |
| | | percentage: item.percentage, |
| | | } |
| | | }) |
| | | for (const item of data.chartDataList) { |
| | |
| | | alarmNumberList.data.push(item.yvalue) |
| | | } |
| | | |
| | | pieChart('Chart1', alarmList, 'æ¥è¦ç±»åå æ¯') |
| | | pieChart('Chart2', energyList, 'è½æºç±»åå æ¯') |
| | | getChart('Chart3', alarmNumberList) |
| | | pieChart("Chart1", alarmList, "æ¥è¦ç±»åå æ¯") |
| | | pieChart("Chart2", energyList, "è½æºç±»åå æ¯") |
| | | getChart("Chart3", alarmNumberList) |
| | | } |
| | | }) |
| | | } |
| | |
| | | getByNodeIdFun() |
| | | } |
| | | function resetQuery() { |
| | | handleTimeType('YEAR') |
| | | handleTimeType("YEAR") |
| | | getByNodeIdFun() |
| | | } |
| | | let dataArray = ref({ |
| | | indexCount: 0, |
| | | yearCount: 0, |
| | | monthCount: 0 |
| | | monthCount: 0, |
| | | }) |
| | | function getCountInfoFun() { |
| | | getCountInfo(queryParams.value).then(res => { |
| | | getCountInfo(queryParams.value).then((res) => { |
| | | if (res.code == 200) { |
| | | dataArray.value = res.data |
| | | } |
| | |
| | | getCountInfoFun() |
| | | function pieChart(Id, data, name) { |
| | | console.log(data) |
| | | let total = 0; |
| | | let total = 0 |
| | | data.forEach(function (val, idx, arr) { |
| | | total += val.value; |
| | | total += val.value |
| | | }) |
| | | const myChart = echarts.init(document.getElementById(Id)); |
| | | const myChart = echarts.init(document.getElementById(Id)) |
| | | myChart.setOption({ |
| | | color: ['#4D94FF', '#00C27C', '#F0142F', '#F2D261', '#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0'], |
| | | color: [ |
| | | "#4D94FF", |
| | | "#00C27C", |
| | | "#F0142F", |
| | | "#F2D261", |
| | | "#0E7CE2", |
| | | "#FF8352", |
| | | "#E271DE", |
| | | "#F8456B", |
| | | "#00FFFF", |
| | | "#4AEAB0", |
| | | ], |
| | | grid: { |
| | | top: '20%', |
| | | left: '1%', |
| | | right: '1%', |
| | | bottom: '0%', |
| | | containLabel: true |
| | | top: "20%", |
| | | left: "1%", |
| | | right: "1%", |
| | | bottom: "0%", |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item' |
| | | trigger: "item", |
| | | }, |
| | | legend: { |
| | | orient: 'vertical', |
| | | top: 'center', |
| | | icon: 'circle', |
| | | orient: "vertical", |
| | | top: "center", |
| | | icon: "circle", |
| | | itemWidth: 14, |
| | | itemHeight: 14, |
| | | right: '2%', |
| | | right: "2%", |
| | | itemGap: 10, |
| | | textStyle: { |
| | | align: 'left', |
| | | verticalAlign: 'middle', |
| | | align: "left", |
| | | verticalAlign: "middle", |
| | | rich: { |
| | | name: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | value: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | rate: { |
| | | color: '#999', |
| | | color: "#999", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | formatter: (name) => { |
| | | for (let i = 0; i < data.length; i++) { |
| | | if (data[i].name === name) { |
| | | return `{name|${data[i].name} }{value| ${data[i].value}} {rate| ${data[i].percentage}%}`; |
| | | return `{name|${data[i].name} }{value| ${data[i].value}} {rate| ${data[i].percentage}%}` |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | series: [{ |
| | | name, |
| | | type: 'pie', |
| | | radius: ['45%', '70%'], |
| | | center: ['35%', '50%'], |
| | | avoidLabelOverlap: false, |
| | | label: { |
| | | show: false, |
| | | overflow: 'none', |
| | | formatter: '{b} {d}% \n {c} tce', |
| | | series: [ |
| | | { |
| | | name, |
| | | type: "pie", |
| | | radius: ["45%", "70%"], |
| | | center: ["35%", "50%"], |
| | | avoidLabelOverlap: false, |
| | | label: { |
| | | show: false, |
| | | overflow: "none", |
| | | formatter: "{b} {d}% \n {c} tce", |
| | | }, |
| | | data, |
| | | }, |
| | | data, |
| | | }] |
| | | ], |
| | | }) |
| | | } |
| | | function getChart(Id, dataList) { |
| | | const myChart3 = echarts.init(document.getElementById(Id)); |
| | | myChart3.setOption( |
| | | { |
| | | |
| | | grid: { |
| | | left: '3%', |
| | | right: '2%', |
| | | bottom: '2%', |
| | | containLabel: true |
| | | const myChart3 = echarts.init(document.getElementById(Id)) |
| | | myChart3.setOption({ |
| | | grid: { |
| | | left: "3%", |
| | | right: "2%", |
| | | bottom: "2%", |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: "axis", |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | // boundaryGap: false, |
| | | data: dataList.xAxisData, |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5, |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | // boundaryGap: false, |
| | | data: dataList.xAxisData, |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: "#ddd", |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5 |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: '#ddd' |
| | | } |
| | | }, |
| | | |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: false, |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: 'rgba(220,222,226,0.4)' |
| | | } |
| | | }, |
| | | axisLabel: { |
| | | color: '#999', |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: 'ï¼æ¬¡ï¼', |
| | | // 设置åç§°æ ·å¼ |
| | | nameTextStyle: { |
| | | color: ' #CEE3FF', |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | // åæ è½´å»åº¦ |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5 |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: '' |
| | | } |
| | | }, |
| | | |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: 'rgba(220,222,226,0.4)' |
| | | } |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: false, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: "rgba(220,222,226,0.4)", |
| | | }, |
| | | |
| | | // åæ è½´å»åº¦é´é |
| | | // interval: '50', |
| | | // // åæ è½´æå°å¼ |
| | | // min: 'dataMin', |
| | | // // åæ è½´æå¤§å¼ |
| | | // max: 'dataMax', |
| | | // // åæ è½´å°æ°ç¹ç²¾åº¦ |
| | | // precision: 0, |
| | | // // åæ è½´å»åº¦ææ¬çå¸å±æå |
| | | // position: 'left' |
| | | axisLabel: { |
| | | color: '#B2B8C2', |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "bar", |
| | | barWidth: '17', |
| | | stack: 'number', |
| | | data: dataList.data, |
| | | tooltip: { |
| | | show: false, |
| | | } |
| | | axisLabel: { |
| | | color: "#999", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | }, |
| | | yAxis: { |
| | | type: "value", |
| | | name: "ï¼æ¬¡ï¼", |
| | | // 设置åç§°æ ·å¼ |
| | | nameTextStyle: { |
| | | color: " #CEE3FF", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | // åæ è½´å»åº¦ |
| | | axisTick: { |
| | | show: false, |
| | | alignWithLabel: true, |
| | | length: 5, |
| | | }, |
| | | // åæ è½´å»åº¦çº¿æ ·å¼ |
| | | axisTick: { |
| | | show: false, |
| | | length: 5, |
| | | lineStyle: { |
| | | color: "", |
| | | }, |
| | | { |
| | | name: 'æ¥è¦æ¬¡æ°', |
| | | type: 'line', |
| | | symbol: 'none', // 设置为 'none' 廿åç¹ |
| | | lineStyle: { |
| | | color: '#EE0303' |
| | | }, |
| | | data: dataList.data, |
| | | }, |
| | | ] |
| | | }) |
| | | }, |
| | | |
| | | window.addEventListener("resize", () => { |
| | | myChart1.resize(); |
| | | myChart2.resize(); |
| | | myChart3.resize(); |
| | | }, { passive: true }); |
| | | // åå²çº¿ |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: "rgba(220,222,226,0.4)", |
| | | }, |
| | | }, |
| | | |
| | | // åæ è½´å»åº¦é´é |
| | | // interval: '50', |
| | | // // åæ è½´æå°å¼ |
| | | // min: 'dataMin', |
| | | // // åæ è½´æå¤§å¼ |
| | | // max: 'dataMax', |
| | | // // åæ è½´å°æ°ç¹ç²¾åº¦ |
| | | // precision: 0, |
| | | // // åæ è½´å»åº¦ææ¬çå¸å±æå |
| | | // position: 'left' |
| | | axisLabel: { |
| | | color: "#B2B8C2", |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "bar", |
| | | barWidth: "12", |
| | | stack: "number", |
| | | data: dataList.data, |
| | | tooltip: { |
| | | show: false, |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¥è¦æ¬¡æ°", |
| | | type: "line", |
| | | symbol: "none", // 设置为 'none' 廿åç¹ |
| | | lineStyle: { |
| | | color: "#EE0303", |
| | | }, |
| | | data: dataList.data, |
| | | }, |
| | | ], |
| | | }) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | myChart3.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | |
| | | .chart-box { |
| | | height: calc((100vh - 410px)/2) !important; |
| | | height: calc((100vh - 410px) / 2) !important; |
| | | } |
| | | |
| | | .data-item { |
| | |
| | | font-weight: bold; |
| | | |
| | | span { |
| | | color: #397AEE; |
| | | color: #397aee; |
| | | margin: 0 5px; |
| | | } |
| | | } |
| | |
| | | font-weight: bold; |
| | | |
| | | span { |
| | | color: #397AEE; |
| | | color: #397aee; |
| | | margin: 0 5px; |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="æé´" clearable style="width: 120px" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´"> |
| | | <el-date-picker v-model="queryParams.dataTime" :type="queryParams.timeType == 'YEAR' |
| | | ? 'year' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'month' |
| | | : 'date' |
| | | " :format="queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " value-format="YYYY-MM-DD" placeholder="æ¶é´" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | æç´¢ |
| | | </el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | å¯¼åº |
| | | </el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style=" |
| | | height: calc(100vh - 220px) !important; |
| | | max-height: calc(100vh - 220px) !important; |
| | | overflow-y: auto; |
| | | "> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | > |
| | | <div class="card-list" v-if="listTop.length > 1"> |
| | | <el-button @click="dialogVisible = true"> æ¥çæ´å¤ </el-button> |
| | | </div> |
| | |
| | | <template v-for="(item, index) in row" :key="index"> |
| | | <div class="card-list-item"> |
| | | <div class="item-top"> |
| | | <div class="top-icon" :style="{ |
| | | backgroundImage: 'url(' + bgList[index].icon + ')', |
| | | }" /> |
| | | <div |
| | | class="top-icon" |
| | | :style="{ |
| | | backgroundImage: 'url(' + bgList[index].icon + ')', |
| | | }" |
| | | /> |
| | | <div class="top-right"> |
| | | {{ item.allEneryType }} |
| | | </div> |
| | |
| | | <div class="bottom-left">忝</div> |
| | | <div class="bottom-right" :style="{ color: bgList[index].color }"> |
| | | {{ Math.abs(item.yoyEnery) }}% |
| | | <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 |
| | | ? 'green' |
| | | : item.yoyEnery < 0 |
| | | ? 'red' |
| | | : '' |
| | | "> |
| | | <el-icon |
| | | v-if="!!item.yoyEnery" |
| | | :color="item.yoyEnery > 0 ? 'green' : item.yoyEnery < 0 ? 'red' : ''" |
| | | > |
| | | <Top v-if="item.yoyEnery > 0" /> |
| | | <Bottom v-if="item.yoyEnery < 0" /> |
| | | </el-icon> |
| | |
| | | </template> |
| | | </div> |
| | | </template> |
| | | <BaseCard :title="queryParams.nodeName + |
| | | '-ç¢³ææ¾éåç¯æ¯(' + |
| | | queryParams.dataTime + |
| | | ')' |
| | | "> |
| | | <BaseCard :title="queryParams.nodeName + '-ç¢³ææ¾éåç¯æ¯(' + queryParams.dataTime + ')'"> |
| | | <div class="chart-box" v-loading="loading"> |
| | | <div id="Chart1" /> |
| | | </div> |
| | | </BaseCard> |
| | | <BaseCard :title="queryParams.nodeName + |
| | | '-ç¢³ææ¾éç»è®¡åæè¡¨(' + |
| | | queryParams.dataTime + |
| | | ')' |
| | | "> |
| | | <BaseCard :title="queryParams.nodeName + '-ç¢³ææ¾éç»è®¡åæè¡¨(' + queryParams.dataTime + ')'"> |
| | | <div class="table-box"> |
| | | <el-table :data="listBottom" v-loading="loading"> |
| | | <el-table-column label="æ¶é´" align="center" key="xaxis" prop="xaxis" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="ç ´ææ¾é(tCOâe) |
| | | " align="center" key="yaxis" prop="yaxis" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="ç ´ææ¾é(tCOâe) |
| | | " |
| | | align="center" |
| | | key="yaxis" |
| | | prop="yaxis" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="忝" align="center" key="yoy" prop="yoy" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="ç¯æ¯" align="center" key="qoq" prop="qoq" :show-overflow-tooltip="true" /> |
| | | </el-table> |
| | |
| | | <template v-for="(item, index) in row" :key="index"> |
| | | <div class="card-list-item"> |
| | | <div class="item-top"> |
| | | <div class="top-icon" :style="{ |
| | | backgroundImage: 'url(' + bgList[index].icon + ')', |
| | | }" /> |
| | | <div |
| | | class="top-icon" |
| | | :style="{ |
| | | backgroundImage: 'url(' + bgList[index].icon + ')', |
| | | }" |
| | | /> |
| | | <div class="top-right"> |
| | | {{ item.allEneryType }} |
| | | </div> |
| | |
| | | <div class="bottom-left">忝</div> |
| | | <div class="bottom-right" :style="{ color: bgList[index].color }"> |
| | | {{ Math.abs(item.yoyEnery) }}% |
| | | <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 |
| | | ? 'green' |
| | | : item.yoyEnery < 0 |
| | | ? 'red' |
| | | : '' |
| | | "> |
| | | <el-icon v-if="!!item.yoyEnery" :color="item.yoyEnery > 0 ? 'green' : item.yoyEnery < 0 ? 'red' : ''"> |
| | | <Top v-if="item.yoyEnery > 0" /> |
| | | <Bottom v-if="item.yoyEnery < 0" /> |
| | | </el-icon> |
| | |
| | | </div> |
| | | </template> |
| | | <script setup name="carbonEmission"> |
| | | import { |
| | | listUpCarbonemission, |
| | | listMiddleCarbonemission, |
| | | } from "@/api/carbonemission/carbonemission"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import { useRoute } from "vue-router"; |
| | | const { period } = proxy.useDict("period"); |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listUpCarbonemission, listMiddleCarbonemission } from "@/api/carbonemission/carbonemission" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period } = proxy.useDict("period") |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const loading = ref(false); |
| | | const dialogVisible = ref(false); |
| | | import icon1 from "@/assets/images/period/icon1.png"; |
| | | import icon2 from "@/assets/images/period/icon2.png"; |
| | | import icon3 from "@/assets/images/period/icon3.png"; |
| | | import icon4 from "@/assets/images/period/icon4.png"; |
| | | import icon5 from "@/assets/images/period/icon5.png"; |
| | | ) |
| | | const loading = ref(false) |
| | | const dialogVisible = ref(false) |
| | | import icon1 from "@/assets/images/period/icon1.png" |
| | | import icon2 from "@/assets/images/period/icon2.png" |
| | | import icon3 from "@/assets/images/period/icon3.png" |
| | | import icon4 from "@/assets/images/period/icon4.png" |
| | | import icon5 from "@/assets/images/period/icon5.png" |
| | | const bgList = ref([ |
| | | { |
| | | icon: icon1, |
| | |
| | | icon: icon5, |
| | | color: "#78e801", |
| | | }, |
| | | ]); |
| | | const listTop = ref([]); |
| | | const listBottom = ref([]); |
| | | ]) |
| | | const listTop = ref([]) |
| | | const listBottom = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | dataTime: null, |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | handleTimeType(period.value[0].value); |
| | | handleQuery(); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å表 |
| | | function getList() { |
| | | loading.value = true; |
| | | listTop.value = []; |
| | | loading.value = true |
| | | listTop.value = [] |
| | | listUpCarbonemission( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | |
| | | ).then((res) => { |
| | | res.data.upData.map((item, index) => { |
| | | if (index % 5 === 0) { |
| | | listTop.value.push(res.data.upData.slice(index, index + 5)); |
| | | listTop.value.push(res.data.upData.slice(index, index + 5)) |
| | | } |
| | | }); |
| | | }); |
| | | }) |
| | | }) |
| | | // å¨åå§åä¹åï¼å
disposeæ§çå®ä¾ |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | listMiddleCarbonemission( |
| | | proxy.addDateRange({ |
| | | emissionType: "allType", |
| | |
| | | }) |
| | | ).then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | loading.value = false; |
| | | let xaxis = []; |
| | | let yaxis = []; |
| | | let yoy = []; |
| | | let qoq = []; |
| | | loading.value = false |
| | | let xaxis = [] |
| | | let yaxis = [] |
| | | let yoy = [] |
| | | let qoq = [] |
| | | if (!!res.data) { |
| | | res.data.map((item) => { |
| | | xaxis.push(item.xaxis); |
| | | yaxis.push(!!item.yaxis ? item.yaxis : 0); |
| | | yoy.push(!!item.yoy ? item.yoy : 0); |
| | | qoq.push(!!item.qoq ? item.qoq : 0); |
| | | }); |
| | | listBottom.value = res.data; |
| | | xaxis.push(item.xaxis) |
| | | yaxis.push(!!item.yaxis ? item.yaxis : 0) |
| | | yoy.push(!!item.yoy ? item.yoy : 0) |
| | | qoq.push(!!item.qoq ? item.qoq : 0) |
| | | }) |
| | | listBottom.value = res.data |
| | | } |
| | | setTimeout(() => { |
| | | myChart1.setOption({ |
| | |
| | | type: "shadow", |
| | | textStyle: { |
| | | fontSize: 14, |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | name: "tCOâe", |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | name: "%", |
| | | alignTicks: true, |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | { |
| | | name: "ç¢³ææ¾é", |
| | | type: "bar", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | itemStyle: { |
| | | borderRadius: [15, 15, 0, 0], |
| | | }, |
| | |
| | | data: qoq, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | }) |
| | | }, 100) |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | myChart1.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | queryParams.value.timeType = null; |
| | | queryParams.value.dataTime = null; |
| | | handleTimeType(period.value[0].value); |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="chart-box"> |
| | | <div id="ChartDom" style="width: 100%; height: 100%"></div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | const emit = defineEmits() |
| | | const props = defineProps({ |
| | | chartData: { |
| | | type: Object, |
| | | default: () => {}, |
| | | }, |
| | | }) |
| | | |
| | | watch( |
| | | () => props.chartData, |
| | | (val) => { |
| | | console.log("watch", val) |
| | | initChart() |
| | | } |
| | | ) |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | initChart() |
| | | } |
| | | ) |
| | | |
| | | onMounted(() => { |
| | | initChart() |
| | | }) |
| | | |
| | | function initChart(value) { |
| | | const chartDom = document.getElementById("ChartDom") |
| | | if (echarts.getInstanceByDom(chartDom)) { |
| | | echarts.dispose(chartDom) |
| | | } |
| | | const myChart = echarts.init(chartDom) |
| | | let option = { |
| | | title: { |
| | | text: props.chartData.title, |
| | | left: "40", |
| | | textStyle: { |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | legend: { |
| | | icon: "rect", |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "40", |
| | | left: "50", |
| | | right: "40", |
| | | bottom: "20", |
| | | containLabel: true, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | data: props.chartData.xData, |
| | | }, |
| | | yAxis: [ |
| | | { |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | ], |
| | | series: [ |
| | | { |
| | | name: props.chartData.title, |
| | | type: "bar", |
| | | barWidth: "16", |
| | | // tooltip: { |
| | | // valueFormatter: function (value) { |
| | | // return value + "tce" |
| | | // }, |
| | | // }, |
| | | itemStyle: { |
| | | borderRadius: [15, 15, 0, 0], |
| | | }, |
| | | data: props.chartData.yData, |
| | | markPoint: { |
| | | data: [ |
| | | { type: "max", name: "Max" }, |
| | | { type: "min", name: "Min" }, |
| | | ], |
| | | }, |
| | | }, |
| | | ], |
| | | } |
| | | setTimeout(() => { |
| | | myChart.setOption(option) |
| | | }, 200) |
| | | |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 400px; |
| | | border: 1px solid #eaeaea; |
| | | margin-top: 20px; |
| | | padding-top: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> |
| | | <el-form-item label="è½æºç±»å" prop="energyType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="è¯·éæ©è½æºç±»å"> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è®¡æ¶é´"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | type="date" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="éæ©æ¥æ" |
| | | style="width: 100%" |
| | | :clearable="false" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table :data="energyList" v-loading="loading" border max-height="380px"> |
| | | <el-table-column fixed prop="indexName" label="ææ åç§°" width="210px"> |
| | | <template #default="scope"> |
| | | <div style="width: 100%; text-align: left"> |
| | | <el-button |
| | | v-if="scope.row.indexId == queryParams.indexId" |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="color: #fff; background: #409eff; margin-right: 8px" |
| | | ></el-button> |
| | | <el-button |
| | | v-else |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="margin-right: 8px" |
| | | ></el-button> |
| | | <el-tooltip |
| | | v-if="scope.row.indexName.length > 9" |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.indexName" |
| | | placement="top-end" |
| | | > |
| | | <span> |
| | | {{ scope.row.indexName.substr(0, 9) + "..." }} |
| | | </span> |
| | | </el-tooltip> |
| | | <span v-else>{{ scope.row.indexName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-for="index in 24" :key="index" :label="index - 1 + 'æ¶'" align="center" min-width="100"> |
| | | <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div> |
| | | <line-chart ref="LineChartRef" :chartData="lineChartData" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { |
| | | getDataList, |
| | | getlistChart, |
| | | exportList, |
| | | } from "@/api/comprehensiveStatistics/dailyComprehensive/dailyComprehensive" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import LineChart from "../comps/LineChart.vue" |
| | | let { proxy } = getCurrentInstance() |
| | | const energyTypeList = ref() |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data |
| | | // form.value.indexType = alarm_record_category.value[0].value |
| | | // form.value.energyType = energyTypeList.value[0].enersno |
| | | getList() |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | function numFilter(value) { |
| | | // æªåå½åæ°æ®å°å°æ°ç¹åçå ä½ |
| | | let realVal = "" |
| | | if (!isNaN(value) && value !== "" && value !== null) { |
| | | realVal = parseFloat(value).toFixed(2) |
| | | } else { |
| | | realVal = "--" |
| | | } |
| | | return realVal |
| | | } |
| | | let loading = ref(false) |
| | | let total = ref(0) |
| | | let queryParams = ref({ |
| | | indexStorageId: "", |
| | | indexCode: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: "", |
| | | }) |
| | | |
| | | const energyList = ref([]) |
| | | const lineChartData = ref({}) |
| | | function getList() { |
| | | queryParams.value.indexCode = proxy.$route.query.modelCode |
| | | getDataList({ |
| | | ...queryParams.value, |
| | | timeType: "HOUR", |
| | | }).then((response) => { |
| | | energyList.value = response.data |
| | | if (response.data && response.data.length !== 0) { |
| | | selectChange(response.data[0]) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function selectChange(row) { |
| | | queryParams.value.indexId = row ? row.indexId : undefined |
| | | queryParams.value.timeType = "HOUR" |
| | | getlistChart(queryParams.value).then((response) => { |
| | | let actualData = [] |
| | | let expectedData = [] |
| | | let title = "" |
| | | response.data.forEach((item) => { |
| | | expectedData.push(numFilter(item.value)) |
| | | actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶") |
| | | title = item.indexName + "(" + (item.unitId || "") + ")" |
| | | }) |
| | | |
| | | console.log(response) |
| | | console.log(actualData) |
| | | console.log(expectedData) |
| | | |
| | | lineChartData.value = { |
| | | // xData: [ |
| | | // "0æ¶", |
| | | // "1æ¶", |
| | | // "2æ¶", |
| | | // "3æ¶", |
| | | // "4æ¶", |
| | | // "5æ¶", |
| | | // "6æ¶", |
| | | // "7æ¶", |
| | | // "8æ¶", |
| | | // "9æ¶", |
| | | // "10æ¶", |
| | | // "11æ¶", |
| | | // "12æ¶", |
| | | // "13æ¶", |
| | | // "14æ¶", |
| | | // "15æ¶", |
| | | // "16æ¶", |
| | | // "17æ¶", |
| | | // "18æ¶", |
| | | // "19æ¶", |
| | | // "20æ¶", |
| | | // "21æ¶", |
| | | // "22æ¶", |
| | | // "23æ¶", |
| | | // ], |
| | | xData: actualData, |
| | | yData: expectedData, |
| | | title, |
| | | } |
| | | // LineChartRef.value.initChart() |
| | | // this.lineChartData.actualData = actualData; |
| | | // this.lineChartData.expectedData = expectedData; |
| | | // this.lineChartData.title = title; |
| | | // this.$refs.LineChart.initChart(this.lineChartData); |
| | | // this.$refs.BarChart.initChart(this.lineChartData); |
| | | }) |
| | | } |
| | | |
| | | function getTime() { |
| | | var date = new Date() |
| | | var year = date.getFullYear() |
| | | var month = date.getMonth() + 1 |
| | | var date = date.getDate() |
| | | month = month < 10 ? "0" + month : month |
| | | date = date < 10 ? "0" + date : date |
| | | queryParams.value.dataTime = year + "-" + month + "-" + date |
| | | } |
| | | getTime() |
| | | |
| | | // å¯¼åºæé®æä½ |
| | | function handleExport() { |
| | | exportList(queryParams.value).then((response) => { |
| | | console.log(response) |
| | | // download(response.msg); |
| | | }) |
| | | } |
| | | |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | function resetQuery() { |
| | | queryParams.value = { |
| | | limitName: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: null, |
| | | } |
| | | getTime() |
| | | getList() |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .header-box { |
| | | :deep .el-form-item__content { |
| | | color: #fff; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | |
| | | :deep .el-table--fit { |
| | | border-bottom: 1px solid #eaeaea; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> |
| | | <el-form-item label="è½æºç±»å" prop="energyType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="è¯·éæ©è½æºç±»å"> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è®¡æ¶é´"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="queryParams.dataTime" |
| | | type="month" |
| | | :clearable="false" |
| | | value-format="yyyy-MM" |
| | | placeholder="éæ©æ¥æ" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table :data="energyList" v-loading="loading" border max-height="380px"> |
| | | <el-table-column fixed prop="indexName" label="ææ åç§°" width="210px"> |
| | | <template #default="scope"> |
| | | <div style="width: 100%; text-align: left"> |
| | | <el-button |
| | | v-if="scope.row.indexId == queryParams.indexId" |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="color: #fff; background: #409eff; margin-right: 8px" |
| | | ></el-button> |
| | | <el-button |
| | | v-else |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="margin-right: 8px" |
| | | ></el-button> |
| | | <el-tooltip |
| | | v-if="scope.row.indexName.length > 9" |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.indexName" |
| | | placement="top-end" |
| | | > |
| | | <span> |
| | | {{ scope.row.indexName.substr(0, 9) + "..." }} |
| | | </span> |
| | | </el-tooltip> |
| | | <span v-else>{{ scope.row.indexName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-for="index in 31" :key="index" :label="index + 'æ¥'" align="center" min-width="100"> |
| | | <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div> |
| | | <line-chart ref="LineChartRef" :chartData="lineChartData" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/monthlyComprehensive/monthlyComprehensive" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import LineChart from "../comps/LineChart.vue" |
| | | let { proxy } = getCurrentInstance() |
| | | const energyTypeList = ref() |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data |
| | | // form.value.indexType = alarm_record_category.value[0].value |
| | | // form.value.energyType = energyTypeList.value[0].enersno |
| | | getList() |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | function numFilter(value) { |
| | | // æªåå½åæ°æ®å°å°æ°ç¹åçå ä½ |
| | | let realVal = "" |
| | | if (!isNaN(value) && value !== "" && value !== null) { |
| | | realVal = parseFloat(value).toFixed(2) |
| | | } else { |
| | | realVal = "--" |
| | | } |
| | | return realVal |
| | | } |
| | | let loading = ref(false) |
| | | let total = ref(0) |
| | | let queryParams = ref({ |
| | | indexStorageId: "", |
| | | indexCode: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: "", |
| | | timeType: "DAY", |
| | | }) |
| | | |
| | | const energyList = ref([]) |
| | | const lineChartData = ref({}) |
| | | function getList() { |
| | | queryParams.value.indexCode = proxy.$route.query.modelCode |
| | | getDataList({ |
| | | ...queryParams.value, |
| | | }).then((response) => { |
| | | energyList.value = response.data.tabledata |
| | | if (energyList.value && energyList.value.length !== 0) { |
| | | selectChange(energyList.value[0]) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function selectChange(row) { |
| | | queryParams.value.indexId = row ? row.indexId : undefined |
| | | getlistChart(queryParams.value).then((response) => { |
| | | let actualData = [] |
| | | let expectedData = [] |
| | | let title = "" |
| | | response.data.forEach((item) => { |
| | | expectedData.push(numFilter(item.value)) |
| | | actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¥") |
| | | title = item.indexName + "(" + (item.unitId || "") + ")" |
| | | }) |
| | | |
| | | console.log(response) |
| | | console.log(actualData) |
| | | console.log(expectedData) |
| | | |
| | | lineChartData.value = { |
| | | // xData: [ |
| | | // "0æ¶", |
| | | // "1æ¶", |
| | | // "2æ¶", |
| | | // "3æ¶", |
| | | // "4æ¶", |
| | | // "5æ¶", |
| | | // "6æ¶", |
| | | // "7æ¶", |
| | | // "8æ¶", |
| | | // "9æ¶", |
| | | // "10æ¶", |
| | | // "11æ¶", |
| | | // "12æ¶", |
| | | // "13æ¶", |
| | | // "14æ¶", |
| | | // "15æ¶", |
| | | // "16æ¶", |
| | | // "17æ¶", |
| | | // "18æ¶", |
| | | // "19æ¶", |
| | | // "20æ¶", |
| | | // "21æ¶", |
| | | // "22æ¶", |
| | | // "23æ¶", |
| | | // ], |
| | | xData: actualData, |
| | | yData: expectedData, |
| | | title, |
| | | } |
| | | // LineChartRef.value.initChart() |
| | | // this.lineChartData.actualData = actualData; |
| | | // this.lineChartData.expectedData = expectedData; |
| | | // this.lineChartData.title = title; |
| | | // this.$refs.LineChart.initChart(this.lineChartData); |
| | | // this.$refs.BarChart.initChart(this.lineChartData); |
| | | }) |
| | | } |
| | | |
| | | function getTime() { |
| | | var date = new Date() |
| | | var year = date.getFullYear() |
| | | var month = date.getMonth() + 1 |
| | | var date = date.getDate() |
| | | month = month < 10 ? "0" + month : month |
| | | date = date < 10 ? "0" + date : date |
| | | queryParams.value.dataTime = year + "-" + month |
| | | } |
| | | getTime() |
| | | |
| | | // å¯¼åºæé®æä½ |
| | | function handleExport() { |
| | | exportList(queryParams.value).then((response) => { |
| | | console.log(response) |
| | | // download(response.msg); |
| | | }) |
| | | } |
| | | |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | function resetQuery() { |
| | | queryParams.value = { |
| | | limitName: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: null, |
| | | timeType: "DAY", |
| | | } |
| | | getTime() |
| | | getList() |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .header-box { |
| | | :deep .el-form-item__content { |
| | | color: #fff; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | |
| | | :deep .el-table--fit { |
| | | border-bottom: 1px solid #eaeaea; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px"> |
| | | <el-form-item label="è½æºç±»å" prop="energyType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="è¯·éæ©è½æºç±»å"> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è®¡æ¶é´"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="queryParams.dataTime" |
| | | type="year" |
| | | :clearable="false" |
| | | value-format="YYYY" |
| | | placeholder="éæ©æ¥æ" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table :data="energyList" v-loading="loading" border max-height="380px"> |
| | | <el-table-column fixed prop="indexName" label="ææ åç§°" width="210px"> |
| | | <template #default="scope"> |
| | | <div style="width: 100%; text-align: left"> |
| | | <el-button |
| | | v-if="scope.row.indexId == queryParams.indexId" |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="color: #fff; background: #409eff; margin-right: 8px" |
| | | ></el-button> |
| | | <el-button |
| | | v-else |
| | | icon="search" |
| | | circle |
| | | @click="selectChange(scope.row)" |
| | | style="margin-right: 8px" |
| | | ></el-button> |
| | | <el-tooltip |
| | | v-if="scope.row.indexName.length > 9" |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.indexName" |
| | | placement="top-end" |
| | | > |
| | | <span> |
| | | {{ scope.row.indexName.substr(0, 9) + "..." }} |
| | | </span> |
| | | </el-tooltip> |
| | | <span v-else>{{ scope.row.indexName }}</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-for="index in 12" :key="index" :label="index + 'æ'" align="center" min-width="100"> |
| | | <template #default="scope">{{ numFilter(scope.row[`value${index - 1}`]) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div> |
| | | <line-chart ref="LineChartRef" :chartData="lineChartData" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { getDataList, getlistChart } from "@/api/comprehensiveStatistics/yearComprehensive/yearComprehensive" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import LineChart from "../comps/LineChart.vue" |
| | | let { proxy } = getCurrentInstance() |
| | | const energyTypeList = ref() |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data |
| | | // form.value.indexType = alarm_record_category.value[0].value |
| | | // form.value.energyType = energyTypeList.value[0].enersno |
| | | getList() |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | function numFilter(value) { |
| | | // æªåå½åæ°æ®å°å°æ°ç¹åçå ä½ |
| | | let realVal = "" |
| | | if (!isNaN(value) && value !== "" && value !== null) { |
| | | realVal = parseFloat(value).toFixed(2) |
| | | } else { |
| | | realVal = "--" |
| | | } |
| | | return realVal |
| | | } |
| | | let loading = ref(false) |
| | | let queryParams = ref({ |
| | | indexStorageId: "", |
| | | indexCode: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: "2025-01-0", |
| | | timeType: "MONTH", |
| | | }) |
| | | |
| | | const energyList = ref([]) |
| | | const lineChartData = ref({}) |
| | | function getList() { |
| | | queryParams.value.indexCode = proxy.$route.query.modelCode |
| | | getDataList({ |
| | | ...queryParams.value, |
| | | dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "", |
| | | }).then((response) => { |
| | | energyList.value = response.data |
| | | if (response.data && response.data.length !== 0) { |
| | | selectChange(response.data[0]) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function selectChange(row) { |
| | | queryParams.value.indexId = row ? row.indexId : undefined |
| | | getlistChart({ |
| | | ...queryParams.value, |
| | | dataTime: queryParams.value.dataTime ? queryParams.value.dataTime + "-01" : "", |
| | | }).then((response) => { |
| | | let actualData = [] |
| | | let expectedData = [] |
| | | let title = "" |
| | | response.data.forEach((item) => { |
| | | expectedData.push(numFilter(item.value)) |
| | | actualData.push(item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶") |
| | | title = item.indexName + "(" + (item.unitId || "") + ")" |
| | | }) |
| | | |
| | | console.log(response) |
| | | console.log(actualData) |
| | | console.log(expectedData) |
| | | |
| | | lineChartData.value = { |
| | | // xData: [ |
| | | // "0æ¶", |
| | | // "1æ¶", |
| | | // "2æ¶", |
| | | // "3æ¶", |
| | | // "4æ¶", |
| | | // "5æ¶", |
| | | // "6æ¶", |
| | | // "7æ¶", |
| | | // "8æ¶", |
| | | // "9æ¶", |
| | | // "10æ¶", |
| | | // "11æ¶", |
| | | // "12æ¶", |
| | | // "13æ¶", |
| | | // "14æ¶", |
| | | // "15æ¶", |
| | | // "16æ¶", |
| | | // "17æ¶", |
| | | // "18æ¶", |
| | | // "19æ¶", |
| | | // "20æ¶", |
| | | // "21æ¶", |
| | | // "22æ¶", |
| | | // "23æ¶", |
| | | // ], |
| | | xData: actualData, |
| | | yData: expectedData, |
| | | title, |
| | | } |
| | | // LineChartRef.value.initChart() |
| | | // this.lineChartData.actualData = actualData; |
| | | // this.lineChartData.expectedData = expectedData; |
| | | // this.lineChartData.title = title; |
| | | // this.$refs.LineChart.initChart(this.lineChartData); |
| | | // this.$refs.BarChart.initChart(this.lineChartData); |
| | | }) |
| | | } |
| | | |
| | | function getTime() { |
| | | var date = new Date() |
| | | var year = date.getFullYear() |
| | | var month = date.getMonth() + 1 |
| | | var date = date.getDate() |
| | | month = month < 10 ? "0" + month : month |
| | | date = date < 10 ? "0" + date : date |
| | | queryParams.value.dataTime = year + "" |
| | | } |
| | | |
| | | // å¯¼åºæé®æä½ |
| | | function handleExport() { |
| | | exportList(queryParams.value).then((response) => { |
| | | console.log(response) |
| | | // download(response.msg); |
| | | }) |
| | | } |
| | | |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | function resetQuery() { |
| | | queryParams.value = { |
| | | limitName: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | dataTime: null, |
| | | timeType: "MONTH", |
| | | } |
| | | getTime() |
| | | getList() |
| | | } |
| | | |
| | | getTime() |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .header-box { |
| | | :deep .el-form-item__content { |
| | | color: #fff; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | |
| | | :deep .el-table--fit { |
| | | border-bottom: 1px solid #eaeaea; |
| | | } |
| | | </style> |
| | |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="80px"> |
| | | <el-form-item label="è½æºç±»å" prop="energyType"> |
| | | <el-select v-model="form.energyType" placeholder="è¯·éæ©è½æºç±»å"> |
| | | <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" |
| | | :key="item.enersno" /> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æé´" prop="timeType" > |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select v-model="form.timeType" placeholder="æé´" clearable style="width: 120px" @change="handleTimeType"> |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´éæ©" prop="dataTime"> |
| | | <el-date-picker v-if="form.type == 1" v-model="form.dataTime" type="year" /> |
| | | <el-date-picker v-else-if="form.type == 2" v-model="form.dataTime" type="month" format="YYYY-MM" |
| | | value-format="YYYY-MM" /> |
| | | <el-date-picker v-if="form.timeType == 'YEAR'" v-model="form.dataTime" type="year" /> |
| | | <el-date-picker |
| | | v-else-if="form.timeType == 'MONTH'" |
| | | v-model="form.dataTime" |
| | | type="month" |
| | | format="YYYY-MM" |
| | | value-format="YYYY-MM" |
| | | /> |
| | | <el-date-picker v-else v-model="form.dataTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import useSettingsStore from '@/store/modules/settings' |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import { getFlowCharts } from "@/api/energyAnalysis/energyAnalysis" |
| | | const settingsStore = useSettingsStore() |
| | | import * as echarts from 'echarts'; |
| | | import * as echarts from "echarts" |
| | | let { proxy } = getCurrentInstance() |
| | | import { onMounted } from 'vue'; |
| | | const { period } = proxy.useDict("period"); |
| | | import { nextTick, onMounted } from "vue" |
| | | const { period } = proxy.useDict("period") |
| | | console.log(period) |
| | | let form = ref({ |
| | | energyType: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | }) |
| | | function handleTimeType(e) { |
| | | form.value.timeType = e; |
| | | form.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | form.value.timeType = e |
| | | form.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getData() |
| | | } |
| | | const energyTypeList = ref(); |
| | | const energyTypeList = ref() |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | energyTypeList.value = res.data |
| | | form.value.energyType = energyTypeList.value[0].enersno |
| | | handleTimeType(period.value[0].value); |
| | | }); |
| | | handleTimeType(period.value[0].value) |
| | | }) |
| | | } |
| | | getEnergyTypeList() |
| | | |
| | | function handleSelect(e) { |
| | | console.log(e, form.value.type) |
| | | if (form.value.type == 1) { |
| | | form.value.time = proxy.dayjs().format('YYYY') |
| | | form.value.time = proxy.dayjs().format("YYYY") |
| | | } else if (form.value.type == 2) { |
| | | form.value.time = proxy.dayjs().format('YYYY-MM') |
| | | form.value.time = proxy.dayjs().format("YYYY-MM") |
| | | } else { |
| | | form.value.time = proxy.dayjs().format('YYYY-MM-DD') |
| | | form.value.time = proxy.dayjs().format("YYYY-MM-DD") |
| | | } |
| | | } |
| | | function handleQuery() { } |
| | | function handleQuery() { |
| | | getData() |
| | | } |
| | | |
| | | function resetQuery() { |
| | | form.value = { |
| | | type: 1, |
| | | time: proxy.dayjs().format('YYYY'), |
| | | time: proxy.dayjs().format("YYYY"), |
| | | } |
| | | } |
| | | |
| | | import icon1 from '@/assets/images/period/icon1.png' |
| | | import icon2 from '@/assets/images/period/icon2.png' |
| | | import icon3 from '@/assets/images/period/icon3.png' |
| | | import icon4 from '@/assets/images/period/icon4.png' |
| | | import icon5 from '@/assets/images/period/icon5.png' |
| | | import icon1 from "@/assets/images/period/icon1.png" |
| | | import icon2 from "@/assets/images/period/icon2.png" |
| | | import icon3 from "@/assets/images/period/icon3.png" |
| | | import icon4 from "@/assets/images/period/icon4.png" |
| | | import icon5 from "@/assets/images/period/icon5.png" |
| | | const periodList = ref([ |
| | | { |
| | | icon: icon1, |
| | | color: "#3371eb", |
| | | title: "累计è½è", |
| | | data: '1000.1 m³' |
| | | data: "1000.1 m³", |
| | | }, |
| | | { |
| | | icon: icon3, |
| | | color: "#ff6200", |
| | | title: "å表è½è", |
| | | data: ' 0 m³' |
| | | data: " 0 m³", |
| | | }, |
| | | { |
| | | icon: icon4, |
| | | color: "#ffce0c", |
| | | title: "æå¤±é", |
| | | data: '1000.1 m³' |
| | | data: "1000.1 m³", |
| | | }, |
| | | { |
| | | icon: icon5, |
| | | color: "#78e801", |
| | | title: "æå¤±æ¯ä¾", |
| | | data: '100.00%' |
| | | data: "100.00%", |
| | | }, |
| | | ]) |
| | | |
| | | watch(() => settingsStore.sideTheme, (val) => { |
| | | getChart() |
| | | }) |
| | | const flowData = ref({}) |
| | | function getData() { |
| | | getFlowCharts({ |
| | | energyType: form.value.energyType, |
| | | nodeId: "", |
| | | queryTime: form.value.dataTime, |
| | | timeType: form.value.timeType, |
| | | modelCode: proxy.$route.query.modelCode, |
| | | }).then((res) => { |
| | | periodList.value[0].data = res.data.totalAccumulatedAmount |
| | | periodList.value[1].data = res.data.childNodeAccumulatedAmount |
| | | periodList.value[2].data = res.data.difference |
| | | periodList.value[3].data = res.data.energyLossRatio + "%" |
| | | flowData.value = res.data.itemVOList |
| | | nextTick(() => { |
| | | getChart() |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getChart() |
| | | } |
| | | ) |
| | | |
| | | function getChart() { |
| | | let colors = ["#FBB4AE", "#B3CDE3", "#CCEBC5", "#DECBE4", "#5470C6"] |
| | | let mydata = [] |
| | | let mylinks = [] |
| | | if (flowData.value.length) { |
| | | mylinks = flowData.value || [] |
| | | let nodes = [] |
| | | mylinks.forEach((element) => { |
| | | nodes.push(element.source) |
| | | nodes.push(element.target) |
| | | }) |
| | | mydata = Array.from(new Set(nodes)).map((item) => { |
| | | return { |
| | | name: item, |
| | | } |
| | | }) |
| | | } |
| | | console.log(mydata) |
| | | console.log(mylinks) |
| | | |
| | | |
| | | let colors = ['#FBB4AE', '#B3CDE3', '#CCEBC5', '#DECBE4', '#5470C6']; |
| | | let mydata = [ |
| | | { name: 'L1', itemStyle: { color: colors[0] }, depth: 0 }, |
| | | { name: 'L1-1', itemStyle: { color: colors[0] }, depth: 0 }, |
| | | { name: 'L1-2', itemStyle: { color: colors[0] }, depth: 0 }, |
| | | { name: 'L1-3', itemStyle: { color: colors[0] }, depth: 0 }, |
| | | |
| | | |
| | | { name: 'L2', itemStyle: { color: colors[1] }, depth: 1 }, |
| | | { name: 'L2-1', itemStyle: { color: colors[1] }, depth: 1 }, |
| | | { name: 'L2-2', itemStyle: { color: colors[1] }, depth: 1 }, |
| | | { name: 'L2-3', itemStyle: { color: colors[1] }, depth: 1 }, |
| | | |
| | | |
| | | { name: 'L3', itemStyle: { color: colors[2] }, depth: 2 }, |
| | | { name: 'L3-1', itemStyle: { color: colors[2] }, depth: 2 }, |
| | | { name: 'L3-2', itemStyle: { color: colors[2] }, depth: 2 }, |
| | | |
| | | |
| | | { name: 'L4', itemStyle: { color: colors[3] }, depth: 3 }, |
| | | |
| | | |
| | | |
| | | ]; |
| | | // mydata.reverse() |
| | | let mylinks = [ |
| | | // L1âL4 9720 |
| | | { source: 'L1', target: 'L4', value: 9720 }, |
| | | // L2âL4 24396 |
| | | { source: 'L2', target: 'L4', value: 24396 }, |
| | | // L3âL4 1462 |
| | | { source: 'L3', target: 'L4', value: 1462 }, |
| | | |
| | | // L1âL2âL3âL4 215 |
| | | { source: 'L1-1', target: 'L2-1', value: 215 }, |
| | | { source: 'L2-1', target: 'L3-1', value: 215 }, |
| | | { source: 'L3-1', target: 'L4', value: 215 }, |
| | | |
| | | // L1âL2âL4 4518 |
| | | { source: 'L1-2', target: 'L2-2', value: 4518 }, |
| | | { source: 'L2-2', target: 'L4', value: 4518 }, |
| | | // L1âL3âL4 217 |
| | | { source: 'L1-3', target: 'L3-2', value: 217 }, |
| | | { source: 'L3-2', target: 'L4', value: 217 }, |
| | | |
| | | // L2âL3âL4 893 |
| | | { source: 'L2-3', target: 'L3-3', value: 893 }, |
| | | { source: 'L3-3', target: 'L4', value: 893 }, |
| | | |
| | | ]; |
| | | |
| | | |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | myChart1.setOption({ |
| | | tooltip: { |
| | | trigger: 'item', |
| | | triggerOn: 'mousemove', |
| | | trigger: "item", |
| | | triggerOn: "mousemove", |
| | | }, |
| | | series: { |
| | | type: 'sankey', |
| | | lineStyle: { |
| | | opacity: 0.3, |
| | | color: 'gradient', |
| | | curveness: 0.7, |
| | | // series: { |
| | | // type: "sankey", |
| | | // lineStyle: { |
| | | // opacity: 0.3, |
| | | // color: "gradient", |
| | | // curveness: 0.7, |
| | | // }, |
| | | // // nodeAlign: 'left', |
| | | // nodeGap: 18, |
| | | // layoutIterations: 1, |
| | | // emphasis: { |
| | | // focus: "adjacency", |
| | | // }, |
| | | // data: mydata, |
| | | // links: mylinks, |
| | | // }, |
| | | series: [ |
| | | { |
| | | type: "sankey", |
| | | left: 50.0, |
| | | top: 20.0, |
| | | right: 100.0, |
| | | bottom: 25.0, |
| | | data: mydata, |
| | | links: mylinks, |
| | | nodeGap: 18, |
| | | layoutIterations: 1, |
| | | //emphasis: { |
| | | // focus: 'adjacency', |
| | | //}, |
| | | nodeAlign: "left", |
| | | lineStyle: { |
| | | color: "source", |
| | | curveness: 0.7, |
| | | opacity: 0.3, |
| | | }, |
| | | itemStyle: { |
| | | color: "#333", |
| | | borderColor: "#1f77b4", |
| | | }, |
| | | // label: { |
| | | // color: "rgba(0,0,0,0.7)", |
| | | // fontSize: 10, |
| | | // }, |
| | | levels: [ |
| | | { |
| | | depth: 0, |
| | | itemStyle: { |
| | | color: colors[0], |
| | | }, |
| | | lineStyle: { |
| | | color: "source", |
| | | opacity: 0.3, |
| | | }, |
| | | }, |
| | | { |
| | | depth: 1, |
| | | itemStyle: { |
| | | color: colors[1], |
| | | }, |
| | | lineStyle: { |
| | | color: "source", |
| | | opacity: 0.3, |
| | | }, |
| | | }, |
| | | { |
| | | depth: 2, |
| | | itemStyle: { |
| | | color: colors[2], |
| | | }, |
| | | lineStyle: { |
| | | color: "source", |
| | | opacity: 0.3, |
| | | }, |
| | | }, |
| | | { |
| | | depth: 3, |
| | | itemStyle: { |
| | | color: colors[3], |
| | | }, |
| | | lineStyle: { |
| | | color: "source", |
| | | opacity: 0.3, |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | // nodeAlign: 'left', |
| | | nodeGap: 18, |
| | | layoutIterations: 1, |
| | | emphasis: { |
| | | focus: 'adjacency', |
| | | }, |
| | | data: mydata, |
| | | links: mylinks, |
| | | }, |
| | | ], |
| | | }) |
| | | window.addEventListener("resize", () => { |
| | | myChart1.resize(); |
| | | }, { passive: true }); |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | onMounted(() => { |
| | | getChart() |
| | | getEnergyTypeList() |
| | | }) |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | |
| | | .card-list { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | height: 167px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #E8E8E8; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 20px 18px 23px 16px; |
| | |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | color: #5D5C5C; |
| | | color: #5d5c5c; |
| | | } |
| | | |
| | | .bottom-right { |
| | |
| | | height: 100%; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <div class="top-right"> |
| | | <div class="right-name"> |
| | | {{ item.energyName }} |
| | | <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span> |
| | | </div> |
| | | <div class="right-value"> |
| | | <span> {{ item.count }}</span> |
| | | <span class="unit">{{ item.energyUnit }}</span> |
| | | <!-- <span class="unit">{{ item.energyUnit }}</span> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | display: flex; |
| | | |
| | | .top-icon { |
| | | width: 69px; |
| | | height: 69px; |
| | | width: 50px; |
| | | height: 50px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | margin-left: 12px; |
| | | |
| | | .right-name { |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | .unit { |
| | | margin-left: 2px; |
| | | font-size: 16px; |
| | | font-weight: normal; |
| | | } |
| | | } |
| | | |
| | | .right-value { |
| | |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="form-card"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryRef" |
| | | :inline="true" |
| | | > |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æ¶é´" prop="queryTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.queryTime" |
| | |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | æç´¢ |
| | | </el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div |
| | | style=" |
| | | height: calc(100vh - 205px) !important; |
| | | max-height: calc(100vh - 205px) !important; |
| | | overflow-y: auto; |
| | | " |
| | | style="height: calc(100vh - 205px) !important; max-height: calc(100vh - 205px) !important; overflow-y: auto" |
| | | v-loading="loading" |
| | | > |
| | | <div class="card-list"> |
| | | <div |
| | | class="card-list-item" |
| | | v-for="item in periodList" |
| | | :key="item.title" |
| | | > |
| | | <div class="card-list-item" v-for="item in periodList" :key="item.title"> |
| | | <div class="item-top"> |
| | | <div |
| | | class="icon" |
| | | :style="{ backgroundImage: 'url(' + item.icon + ')' }" |
| | | ></div> |
| | | <div class="icon" :style="{ backgroundImage: 'url(' + item.icon + ')' }"></div> |
| | | <div class="name">{{ item.title }}</div> |
| | | </div> |
| | | <div |
| | | class="item-bottom" |
| | | v-for="(node, nodeIndex) in item.data" |
| | | :key="nodeIndex" |
| | | > |
| | | <div class="item-bottom" v-for="(node, nodeIndex) in item.data" :key="nodeIndex"> |
| | | <div class="bottom-left">{{ node.label }}</div> |
| | | <div class="bottom-right" :style="{ color: item.color }"> |
| | | {{ node.value }} |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <BaseCard :title="queryParams.nodeName+'-å°å³°å¹³è°·çµéå¾'"> |
| | | <BaseCard :title="queryParams.nodeName + '-å°å³°å¹³è°·çµéå¾'"> |
| | | <div class="chart-box"> |
| | | <div id="Chart1" /> |
| | | </div> |
| | | </BaseCard> |
| | | <BaseCard :title="queryParams.nodeName+'-å°å³°å¹³è°·çµè´¹å¾'"> |
| | | <BaseCard :title="queryParams.nodeName + '-å°å³°å¹³è°·çµè´¹å¾'"> |
| | | <div class="chart-box"> |
| | | <div id="Chart2" /> |
| | | </div> |
| | |
| | | </div> |
| | | </template> |
| | | <script setup name="period"> |
| | | import { listPeriod } from "@/api/peakValley/period"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listPeriod } from "@/api/peakValley/period" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const loading = ref(false); |
| | | import icon1 from "@/assets/images/period/icon1.png"; |
| | | import icon2 from "@/assets/images/period/icon2.png"; |
| | | import icon3 from "@/assets/images/period/icon3.png"; |
| | | import icon4 from "@/assets/images/period/icon4.png"; |
| | | import icon5 from "@/assets/images/period/icon5.png"; |
| | | ) |
| | | const loading = ref(false) |
| | | import icon1 from "@/assets/images/period/icon1.png" |
| | | import icon2 from "@/assets/images/period/icon2.png" |
| | | import icon3 from "@/assets/images/period/icon3.png" |
| | | import icon4 from "@/assets/images/period/icon4.png" |
| | | import icon5 from "@/assets/images/period/icon5.png" |
| | | const periodList = ref([ |
| | | { |
| | | icon: icon1, |
| | |
| | | }, |
| | | ], |
| | | }, |
| | | ]); |
| | | ]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | queryTime: null, |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM"); |
| | | handleQuery(); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM") |
| | | handleQuery() |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·æ¶æ®µç»è®¡-å表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | listPeriod( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }) |
| | | ).then((res) => { |
| | | loading.value = false; |
| | | loading.value = false |
| | | if (!!res.code && res.code == 200) { |
| | | if (!!res.data.totalVO) { |
| | | periodList.value[0].data[0].value = !!res.data.totalVO |
| | | .totalPowerConsumption |
| | | periodList.value[0].data[0].value = !!res.data.totalVO.totalPowerConsumption |
| | | ? res.data.totalVO.totalPowerConsumption |
| | | : 0; |
| | | periodList.value[0].data[1].value = !!res.data.totalVO.totalCost |
| | | ? res.data.totalVO.totalCost |
| | | : 0; |
| | | : 0 |
| | | periodList.value[0].data[1].value = !!res.data.totalVO.totalCost ? res.data.totalVO.totalCost : 0 |
| | | |
| | | periodList.value[1].data[0].value = !!res.data.totalVO |
| | | .tipPowerConsumption |
| | | periodList.value[1].data[0].value = !!res.data.totalVO.tipPowerConsumption |
| | | ? res.data.totalVO.tipPowerConsumption |
| | | : 0; |
| | | : 0 |
| | | periodList.value[1].data[1].value = |
| | | (!!res.data.totalVO.tipPowerProportion |
| | | ? res.data.totalVO.tipPowerProportion |
| | | : 0) + "%"; |
| | | periodList.value[1].data[2].value = !!res.data.totalVO.tipPowerCost |
| | | ? res.data.totalVO.tipPowerCost |
| | | : 0; |
| | | (!!res.data.totalVO.tipPowerProportion ? res.data.totalVO.tipPowerProportion : 0) + "%" |
| | | periodList.value[1].data[2].value = !!res.data.totalVO.tipPowerCost ? res.data.totalVO.tipPowerCost : 0 |
| | | periodList.value[1].data[3].value = |
| | | (!!res.data.totalVO.tipPowerCostProportion |
| | | ? res.data.totalVO.tipPowerCostProportion |
| | | : 0) + "%"; |
| | | (!!res.data.totalVO.tipPowerCostProportion ? res.data.totalVO.tipPowerCostProportion : 0) + "%" |
| | | |
| | | periodList.value[2].data[0].value = !!res.data.totalVO |
| | | .peakPowerConsumption |
| | | periodList.value[2].data[0].value = !!res.data.totalVO.peakPowerConsumption |
| | | ? res.data.totalVO.peakPowerConsumption |
| | | : 0; |
| | | : 0 |
| | | periodList.value[2].data[1].value = |
| | | (!!res.data.totalVO.peakPowerProportion |
| | | ? res.data.totalVO.peakPowerProportion |
| | | : 0) + "%"; |
| | | periodList.value[2].data[2].value = !!res.data.totalVO.peakPowerCost |
| | | ? res.data.totalVO.peakPowerCost |
| | | : 0; |
| | | (!!res.data.totalVO.peakPowerProportion ? res.data.totalVO.peakPowerProportion : 0) + "%" |
| | | periodList.value[2].data[2].value = !!res.data.totalVO.peakPowerCost ? res.data.totalVO.peakPowerCost : 0 |
| | | periodList.value[2].data[3].value = |
| | | (!!res.data.totalVO.peakPowerCostProportion |
| | | ? res.data.totalVO.peakPowerCostProportion |
| | | : 0) + "%"; |
| | | (!!res.data.totalVO.peakPowerCostProportion ? res.data.totalVO.peakPowerCostProportion : 0) + "%" |
| | | |
| | | periodList.value[3].data[0].value = !!res.data.totalVO |
| | | .flatPowerConsumption |
| | | periodList.value[3].data[0].value = !!res.data.totalVO.flatPowerConsumption |
| | | ? res.data.totalVO.flatPowerConsumption |
| | | : 0; |
| | | : 0 |
| | | periodList.value[3].data[1].value = |
| | | (!!res.data.totalVO.flatPowerProportion |
| | | ? res.data.totalVO.flatPowerProportion |
| | | : 0) + "%"; |
| | | periodList.value[3].data[2].value = !!res.data.totalVO.flatPowerCost |
| | | ? res.data.totalVO.flatPowerCost |
| | | : 0; |
| | | (!!res.data.totalVO.flatPowerProportion ? res.data.totalVO.flatPowerProportion : 0) + "%" |
| | | periodList.value[3].data[2].value = !!res.data.totalVO.flatPowerCost ? res.data.totalVO.flatPowerCost : 0 |
| | | periodList.value[3].data[3].value = |
| | | (!!res.data.totalVO.flatPowerCostProportion |
| | | ? res.data.totalVO.flatPowerCostProportion |
| | | : 0) + "%"; |
| | | (!!res.data.totalVO.flatPowerCostProportion ? res.data.totalVO.flatPowerCostProportion : 0) + "%" |
| | | |
| | | periodList.value[4].data[0].value = !!res.data.totalVO |
| | | .troughPowerConsumption |
| | | periodList.value[4].data[0].value = !!res.data.totalVO.troughPowerConsumption |
| | | ? res.data.totalVO.troughPowerConsumption |
| | | : 0; |
| | | : 0 |
| | | periodList.value[4].data[1].value = |
| | | (!!res.data.totalVO.troughPowerProportion |
| | | ? res.data.totalVO.troughPowerProportion |
| | | : 0) + "%"; |
| | | periodList.value[4].data[2].value = !!res.data.totalVO.troughPowerCost |
| | | ? res.data.totalVO.troughPowerCost |
| | | : 0; |
| | | (!!res.data.totalVO.troughPowerProportion ? res.data.totalVO.troughPowerProportion : 0) + "%" |
| | | periodList.value[4].data[2].value = !!res.data.totalVO.troughPowerCost ? res.data.totalVO.troughPowerCost : 0 |
| | | periodList.value[4].data[3].value = |
| | | (!!res.data.totalVO.troughPowerCostProportion |
| | | ? res.data.totalVO.troughPowerCostProportion |
| | | : 0) + "%"; |
| | | (!!res.data.totalVO.troughPowerCostProportion ? res.data.totalVO.troughPowerCostProportion : 0) + "%" |
| | | } |
| | | // å¨åå§åä¹åï¼å
disposeæ§çå®ä¾ |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { |
| | | echarts.dispose(document.getElementById("Chart2")); |
| | | echarts.dispose(document.getElementById("Chart2")) |
| | | } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")) |
| | | if (!!res.data.powerConsumptionList) { |
| | | let xdata = []; |
| | | let ytip = []; |
| | | let ypeak = []; |
| | | let yflat = []; |
| | | let ytrough = []; |
| | | let xdata = [] |
| | | let ytip = [] |
| | | let ypeak = [] |
| | | let yflat = [] |
| | | let ytrough = [] |
| | | res.data.powerConsumptionList.map((item) => { |
| | | xdata.push(Number(item.xdata.slice(-2)) + "æ¥"); |
| | | ytip.push(!!item.ytip ? item.ytip : 0); |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0); |
| | | yflat.push(!!item.yflat ? item.yflat : 0); |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0); |
| | | }); |
| | | xdata.push(Number(item.xdata.slice(-2)) + "æ¥") |
| | | ytip.push(!!item.ytip ? item.ytip : 0) |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0) |
| | | yflat.push(!!item.yflat ? item.yflat : 0) |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0) |
| | | }) |
| | | myChart1.setOption({ |
| | | color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], |
| | | tooltip: { |
| | |
| | | type: "shadow", |
| | | textStyle: { |
| | | fontSize: 14, |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | itemHeight: 10, |
| | | // right: 0, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | name: "èçµé(KWH)", |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | }, |
| | |
| | | name: "å°", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ytip, |
| | | }, |
| | | { |
| | | name: "å³°", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ypeak, |
| | | }, |
| | | { |
| | | name: "å¹³", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: yflat, |
| | | }, |
| | | { |
| | | name: "è°·", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ytrough, |
| | | }, |
| | | ], |
| | | }); |
| | | }) |
| | | } |
| | | if (!!res.data.costList) { |
| | | let xdata = []; |
| | | let ytip = []; |
| | | let ypeak = []; |
| | | let yflat = []; |
| | | let ytrough = []; |
| | | let xdata = [] |
| | | let ytip = [] |
| | | let ypeak = [] |
| | | let yflat = [] |
| | | let ytrough = [] |
| | | res.data.costList.map((item) => { |
| | | xdata.push(Number(item.xdata.slice(-2)) + "æ¥"); |
| | | ytip.push(!!item.ytip ? item.ytip : 0); |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0); |
| | | yflat.push(!!item.yflat ? item.yflat : 0); |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0); |
| | | }); |
| | | xdata.push(Number(item.xdata.slice(-2)) + "æ¥") |
| | | ytip.push(!!item.ytip ? item.ytip : 0) |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0) |
| | | yflat.push(!!item.yflat ? item.yflat : 0) |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0) |
| | | }) |
| | | myChart2.setOption({ |
| | | color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], |
| | | tooltip: { |
| | |
| | | type: "shadow", |
| | | textStyle: { |
| | | fontSize: 14, |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | itemHeight: 10, |
| | | // right: 0, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | name: "çµè´¹(å
)", |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | }, |
| | |
| | | name: "å°", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ytip, |
| | | }, |
| | | { |
| | | name: "å³°", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ypeak, |
| | | }, |
| | | { |
| | | name: "å¹³", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: yflat, |
| | | }, |
| | | { |
| | | name: "è°·", |
| | | type: "bar", |
| | | stack: "total", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | data: ytrough, |
| | | }, |
| | | ], |
| | | }); |
| | | }) |
| | | } |
| | | window.addEventListener("resize", () => { |
| | | myChart1.resize(); |
| | | myChart2.resize(); |
| | | },{passive: true}); |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·æ¶æ®µç»è®¡-æç´¢ |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·æ¶æ®µç»è®¡-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM"); |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM") |
| | | handleQuery() |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | æç´¢ |
| | | </el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | å¯¼åº |
| | | </el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div |
| | | style=" |
| | | height: calc(100vh - 205px) !important; |
| | | max-height: calc(100vh - 205px) !important; |
| | | overflow-y: auto; |
| | | " |
| | | style="height: calc(100vh - 205px) !important; max-height: calc(100vh - 205px) !important; overflow-y: auto" |
| | | v-loading="loading" |
| | | > |
| | | <el-row> |
| | |
| | | <el-col :span="24"> |
| | | <BaseCard :title="queryParams.nodeName + '-å³°å¹³è°·åæ¶ç»è®¡'"> |
| | | <div class="table-box"> |
| | | <el-table |
| | | :data="timeSharingList" |
| | | style="width: 100%" |
| | | show-summary |
| | | > |
| | | <el-table-column |
| | | label="æ¶é´" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | > |
| | | <el-table :data="timeSharingList" style="width: 100%" show-summary> |
| | | <el-table-column label="æ¶é´" align="center" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | {{ proxy.dayjs(scope.row.time).format("HHæ¶") }} |
| | | </template> |
| | |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="sharpFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="sharpFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip /> |
| | | </el-table-column> |
| | | <el-table-column label="å³°" align="center"> |
| | | <el-table-column |
| | |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="peakFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="peakFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip /> |
| | | </el-table-column> |
| | | <el-table-column label="å¹³" align="center"> |
| | | <el-table-column |
| | |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="flatFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="flatFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip /> |
| | | </el-table-column> |
| | | <el-table-column label="è°·" align="center"> |
| | | <el-table-column |
| | |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="valleyFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="valleyFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip /> |
| | | </el-table-column> |
| | | <el-table-column label="å计" align="center"> |
| | | <el-table-column |
| | |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="totalFee" |
| | | label="æ»çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="totalFee" label="æ»çµè´¹(å
)" align="center" show-overflow-tooltip /> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="æä½" align="center"> |
| | | <template #default="scope"> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-dialog |
| | | v-model="timeSharingDialogTableVisible" |
| | | title="æ¥çåæ¶ç»è®¡è¯¦æ
" |
| | | width="1300" |
| | | > |
| | | <el-dialog v-model="timeSharingDialogTableVisible" title="æ¥çåæ¶ç»è®¡è¯¦æ
" width="1300"> |
| | | <div class="table-box"> |
| | | <el-table :data="viewTimeSharingList" style="width: 100%" height="420"> |
| | | <el-table-column |
| | | label="æ¶é´" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="200" |
| | | > |
| | | <el-table-column label="æ¶é´" align="center" show-overflow-tooltip width="200"> |
| | | <template #default="scope"> {{ scope.row.time }}æ¶ </template> |
| | | </el-table-column> |
| | | <el-table-column label="å°" align="center"> |
| | | <el-table-column |
| | | prop="sharpPower" |
| | | label="èçµé(kWh)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="sharpFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="90" |
| | | /> |
| | | <el-table-column prop="sharpPower" label="èçµé(kWh)" align="center" show-overflow-tooltip width="120" /> |
| | | <el-table-column prop="sharpFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip width="90" /> |
| | | </el-table-column> |
| | | <el-table-column label="å³°" align="center"> |
| | | <el-table-column |
| | | prop="peakPower" |
| | | label="èçµé(kWh)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="peakFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="90" |
| | | /> |
| | | <el-table-column prop="peakPower" label="èçµé(kWh)" align="center" show-overflow-tooltip width="120" /> |
| | | <el-table-column prop="peakFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip width="90" /> |
| | | </el-table-column> |
| | | <el-table-column label="å¹³" align="center"> |
| | | <el-table-column |
| | | prop="flatPower" |
| | | label="èçµé(kWh)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="flatFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="90" |
| | | /> |
| | | <el-table-column prop="flatPower" label="èçµé(kWh)" align="center" show-overflow-tooltip width="120" /> |
| | | <el-table-column prop="flatFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip width="90" /> |
| | | </el-table-column> |
| | | <el-table-column label="è°·" align="center"> |
| | | <el-table-column |
| | | prop="valleyPower" |
| | | label="èçµé(kWh)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | prop="valleyFee" |
| | | label="çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="90" |
| | | /> |
| | | <el-table-column prop="valleyPower" label="èçµé(kWh)" align="center" show-overflow-tooltip width="120" /> |
| | | <el-table-column prop="valleyFee" label="çµè´¹(å
)" align="center" show-overflow-tooltip width="90" /> |
| | | </el-table-column> |
| | | <el-table-column label="å计" align="center"> |
| | | <el-table-column |
| | |
| | | width="120" |
| | | > |
| | | <template #default="scope"> |
| | | {{ |
| | | scope.row.sharpPower + |
| | | scope.row.peakPower + |
| | | scope.row.flatPower + |
| | | scope.row.valleyPower |
| | | }} |
| | | {{ scope.row.sharpPower + scope.row.peakPower + scope.row.flatPower + scope.row.valleyPower }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="totalCost" |
| | | label="æ»çµè´¹(å
)" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="100" |
| | | > |
| | | <el-table-column prop="totalCost" label="æ»çµè´¹(å
)" align="center" show-overflow-tooltip width="100"> |
| | | <template #default="scope"> |
| | | {{ |
| | | scope.row.sharpFee + |
| | | scope.row.peakFee + |
| | | scope.row.flatFee + |
| | | scope.row.valleyFee |
| | | }} |
| | | {{ scope.row.sharpFee + scope.row.peakFee + scope.row.flatFee + scope.row.valleyFee }} |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="nodeName" |
| | | label="ç¨è½åå
" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | width="200" |
| | | /> |
| | | <el-table-column prop="nodeName" label="ç¨è½åå
" align="center" show-overflow-tooltip width="200" /> |
| | | </el-table> |
| | | </div> |
| | | </el-dialog> |
| | |
| | | </template> |
| | | |
| | | <script setup name="timeSharing"> |
| | | import { listTimeSharing } from "@/api/peakValley/timeSharing"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listTimeSharing } from "@/api/peakValley/timeSharing" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const loading = ref(false); |
| | | const timeSharingList = ref([]); |
| | | const timeSharingDialogTableVisible = ref(false); |
| | | const viewTimeSharingList = ref([]); |
| | | const nodeOptions = ref(undefined); |
| | | ) |
| | | const loading = ref(false) |
| | | const timeSharingList = ref([]) |
| | | const timeSharingDialogTableVisible = ref(false) |
| | | const viewTimeSharingList = ref([]) |
| | | const nodeOptions = ref(undefined) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | queryTime: null, |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** éè¿æ¡ä»¶è¿æ»¤èç¹ */ |
| | | const filterNode = (value, data) => { |
| | | if (!value) return true; |
| | | return data.label.indexOf(value) !== -1; |
| | | }; |
| | | if (!value) return true |
| | | return data.label.indexOf(value) !== -1 |
| | | } |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | handleQuery(); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | handleQuery() |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·åæ¶ç»è®¡-å表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | listTimeSharing( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }) |
| | | ).then((res) => { |
| | | loading.value = false; |
| | | loading.value = false |
| | | if (!!res.code && res.code == 200) { |
| | | // å¨åå§åä¹åï¼å
disposeæ§çå®ä¾ |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { |
| | | echarts.dispose(document.getElementById("Chart2")); |
| | | echarts.dispose(document.getElementById("Chart2")) |
| | | } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")) |
| | | if (!!res.data.lineChat) { |
| | | let xdata = []; |
| | | let ytip = []; |
| | | let ypeak = []; |
| | | let yflat = []; |
| | | let ytrough = []; |
| | | let xdata = [] |
| | | let ytip = [] |
| | | let ypeak = [] |
| | | let yflat = [] |
| | | let ytrough = [] |
| | | res.data.lineChat.map((item) => { |
| | | xdata.push(Number(item.xdata.slice(-8).substring(0, 2)) + "æ¶"); |
| | | ytip.push(!!item.ytip ? item.ytip : 0); |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0); |
| | | yflat.push(!!item.yflat ? item.yflat : 0); |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0); |
| | | }); |
| | | xdata.push(Number(item.xdata.slice(-8).substring(0, 2)) + "æ¶") |
| | | ytip.push(!!item.ytip ? item.ytip : 0) |
| | | ypeak.push(!!item.ypeak ? item.ypeak : 0) |
| | | yflat.push(!!item.yflat ? item.yflat : 0) |
| | | ytrough.push(!!item.ytrough ? item.ytrough : 0) |
| | | }) |
| | | myChart1.setOption({ |
| | | color: ["#f52528", "#ff6200", "#ffce0c", "#78e801"], |
| | | grid: { |
| | |
| | | itemHeight: 10, |
| | | // right: 0, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | // data: ['å°', 'å³°', 'å¹³', 'è°·'] |
| | | }, |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | name: "èçµé(KWH)", |
| | | type: "value", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | // formatter: '{value} ml' |
| | | }, |
| | |
| | | { |
| | | name: "å°", // ytip |
| | | type: "bar", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | stack: "total", |
| | | data: ytip, |
| | | }, |
| | | { |
| | | name: "å³°", // ypeak |
| | | type: "bar", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | stack: "total", |
| | | data: ypeak, |
| | | }, |
| | | { |
| | | name: "å¹³", // yflat |
| | | type: "bar", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | stack: "total", |
| | | data: yflat, |
| | | }, |
| | | { |
| | | name: "è°·", // ytrough |
| | | type: "bar", |
| | | barWidth: "27", |
| | | barWidth: "12", |
| | | stack: "total", |
| | | data: ytrough, |
| | | }, |
| | | ], |
| | | }); |
| | | }) |
| | | } |
| | | if (!!res.data.pieChat) { |
| | | myChart2.setOption({ |
| | |
| | | itemGap: 10, |
| | | // right: 0, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | series: [ |
| | |
| | | label: { |
| | | overflow: "none", |
| | | formatter: "{b} {c}% ", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | data: [ |
| | | { |
| | | value: !!res.data.pieChat.tip |
| | | ? Number(res.data.pieChat.tip) |
| | | : 0, |
| | | value: !!res.data.pieChat.tip ? Number(res.data.pieChat.tip) : 0, |
| | | name: "å°", |
| | | }, |
| | | { |
| | | value: !!res.data.pieChat.peak |
| | | ? Number(res.data.pieChat.peak) |
| | | : 0, |
| | | value: !!res.data.pieChat.peak ? Number(res.data.pieChat.peak) : 0, |
| | | name: "å³°", |
| | | }, |
| | | { |
| | | value: !!res.data.pieChat.flat |
| | | ? Number(res.data.pieChat.flat) |
| | | : 0, |
| | | value: !!res.data.pieChat.flat ? Number(res.data.pieChat.flat) : 0, |
| | | name: "å¹³", |
| | | }, |
| | | { |
| | | value: !!res.data.pieChat.trough |
| | | ? Number(res.data.pieChat.trough) |
| | | : 0, |
| | | value: !!res.data.pieChat.trough ? Number(res.data.pieChat.trough) : 0, |
| | | name: "è°·", |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | }); |
| | | }) |
| | | } |
| | | if (!!res.data.dataList) { |
| | | timeSharingList.value = !!res.data.dataList ? res.data.dataList : []; |
| | | timeSharingList.value = !!res.data.dataList ? res.data.dataList : [] |
| | | } |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | myChart2.resize(); |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·åæ¶ç»è®¡-æ¥ç |
| | | function handleView(row) { |
| | | queryParams.value.key = row.timeStr; |
| | | timeSharingDialogTableVisible.value = true; |
| | | viewTimeSharingList.value = [row]; |
| | | queryParams.value.key = row.timeStr |
| | | timeSharingDialogTableVisible.value = true |
| | | viewTimeSharingList.value = [row] |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·åæ¶ç»è®¡-æç´¢ |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·åæ¶ç»è®¡-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | (queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD")), |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | ;(queryParams.value.queryTime = proxy.dayjs(new Date()).format("YYYY-MM-DD")), handleQuery() |
| | | } |
| | | // 峰平谷è½èåæ-å³°å¹³è°·åæ¶ç»è®¡-å¯¼åº |
| | | function handleExport() { |
| | |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}_å³°å¹³è°·åæ¶ç»è®¡_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-è´è·åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="activeKey = 1" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="activeKey = 2" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-descriptions title="" size="large" border :column="2"> |
| | | <el-descriptions-item label="æå¤§è´è·"> |
| | | {{ detailData.max || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.maxTime || "" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="æå°è´è·"> |
| | | {{ detailData.min || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="åçæ¶é´"> |
| | | {{ detailData.minTime || "--" }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item label="å¹³åè´è·"> |
| | | {{ detailData.avg || "--" }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="è´è·ç"> |
| | | {{ detailData.rate || "" }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </div> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType == 'DAY'" label="è´è·" prop="value" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå¤§è´è·" prop="max" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="æå°è´è·" prop="min" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="å¹³åè´è·" prop="avg" align="center" /> |
| | | <el-table-column v-if="queryParams.timeType != 'DAY'" label="è´è·ç(%)" prop="rate" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { loadAnalysisDetail, listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period } = proxy.useDict("period") |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const activeKey = ref(1) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | setTimeout(() => { |
| | | handleTimeType(period.value[0].value) |
| | | }, 200) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | loadAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | tableData.value = res.data.itemList |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | if (queryParams.value.timeType == "DAY") { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "è´è·å¼", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | lineChartData.value = { |
| | | title: "è´è·åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "å¹³åè´è·", |
| | | data: itemList.map((item) => { |
| | | return item.avg |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.max |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå°è´è·", |
| | | data: itemList.map((item) => { |
| | | return item.min |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-åçå æ°åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æ¶é´" prop="dataTime"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select v-model="queryParams.meterId" placeholder="éæ©çµè¡¨" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <div style="padding: 16px"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column label="åçå æ°" prop="title" align="center" /> |
| | | <el-table-column label="æå¤§å¼" prop="max" align="center" /> |
| | | <el-table-column label="æå°å¼" prop="min" align="center" /> |
| | | <el-table-column label="å¹³åå¼" prop="avg" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { powerFactorAnalysisDetail } from "@/api/powerquality/electric-power-factor/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const loading = ref(false) |
| | | const tableData = ref([]) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: "DAY", |
| | | dataTime: proxy.dayjs(new Date()).format("YYYY-MM-DD"), |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | |
| | | const LineChartRef = ref() |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | powerFactorAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | loading.value = false |
| | | let detailData = res.data.detail |
| | | tableData.value = [ |
| | | { |
| | | title: "åçå¼", |
| | | max: detailData.max, |
| | | min: detailData.min, |
| | | avg: detailData.avg, |
| | | }, |
| | | { |
| | | title: "åçæ¶é´", |
| | | max: detailData.maxTime, |
| | | min: detailData.minTime, |
| | | avg: "--", |
| | | }, |
| | | ] |
| | | detailData.value = res.data.detail |
| | | let itemList = res.data.itemList |
| | | lineChartData.value = { |
| | | title: "åçå æ°åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(0, 2) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "åçå æ°", |
| | | data: itemList.map((item) => { |
| | | return item.value |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | margin-top: 16px; |
| | | margin-right: 16px; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div |
| | | style="height: calc(100vh - 150px) !important; max-height: calc(100vh - 150px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-ä¸ç¸ä¸å¹³è¡¡åæ'"> |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="æé´" prop="timeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="æé´" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶é´"> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="æ¶é´" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©çµè¡¨" prop="meterId"> |
| | | <el-select |
| | | v-model="queryParams.meterId" |
| | | placeholder="éæ©çµè¡¨" |
| | | clearable |
| | | style="width: 200px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div style="padding: 0 16px"> |
| | | <el-tabs v-model="activeTabKey" type="card"> |
| | | <el-tab-pane label="çµåä¸å¹³è¡¡" name="1"> </el-tab-pane> |
| | | <el-tab-pane label="çµæµä¸å¹³è¡¡" name="2"> </el-tab-pane> |
| | | </el-tabs> |
| | | <div class="display-buttons"> |
| | | <div class="display-btn" @click="switchBtnType(1)" :class="{ 'active-display-btn': activeKey === 1 }"> |
| | | å¾å½¢ |
| | | </div> |
| | | <div class="display-btn" @click="switchBtnType(2)" :class="{ 'active-display-btn': activeKey === 2 }"> |
| | | æ°æ® |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <el-table :data="tableData1" v-loading="loading"> |
| | | <el-table-column label="ç±»å" prop="type" align="center" /> |
| | | <el-table-column label="ä¸é¡¹ä¸å¹³è¡¡æå¼" prop="value" align="center" /> |
| | | <el-table-column label="åçæ¶é´" prop="time" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="A项çµå(V)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="B项çµå(V)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 1" label="C项çµå(V)" prop="valueC" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Aé¡¹çµæµ(A)" prop="valueA" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Bé¡¹çµæµ(A)" prop="valueB" align="center" /> |
| | | <el-table-column v-if="activeTabKey == 2" label="Cé¡¹çµæµ(A)" prop="valueC" align="center" /> |
| | | </el-table> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | | <el-table :data="tableData2" v-loading="loading" height="calc(100vh - 400px)"> |
| | | <el-table-column label="æ¶é´" prop="timeCode" align="center" /> |
| | | <el-table-column label="çµè¡¨åç§°" prop="name" align="center" /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="A项çµå(V)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="B项çµå(V)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType == 'DAY'" |
| | | label="C项çµå(V)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Aé¡¹çµæµ(A)" |
| | | prop="valueA" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Bé¡¹çµæµ(A)" |
| | | prop="valueB" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType == 'DAY'" |
| | | label="Cé¡¹çµæµ(A)" |
| | | prop="valueC" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(V)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 1 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(V)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå¤§å¼(A)" |
| | | prop="max" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | v-if="activeTabKey == 2 && queryParams.timeType !== 'DAY'" |
| | | label="æå°å¼(A)" |
| | | prop="min" |
| | | align="center" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="loadAnalysis"> |
| | | import { threePhaseUnbalanceAnalysisDetail } from "@/api/powerquality/electricThreePhase/api.js" |
| | | import { listElectricityDeviceMeter } from "@/api/powerquality/load-analysis/api.js" |
| | | import LineChart from "@/components/Echarts/LineChart.vue" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period } = proxy.useDict("period") |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList() |
| | | } |
| | | ) |
| | | const activeTabKey = ref("1") |
| | | const activeKey = ref(1) |
| | | const activeKeyA = ref(1) |
| | | const loading = ref(false) |
| | | const tableData1 = ref([]) |
| | | const tableData2 = ref([]) |
| | | const detailData = ref({}) |
| | | const lineChartData = ref({}) |
| | | const electricityMeter = ref([]) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | | nodeName: null, |
| | | timeType: null, |
| | | dataTime: null, |
| | | meterId: "", |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | function getElectricityMeter(params) { |
| | | listElectricityDeviceMeter(params).then((res) => { |
| | | if (res.code === 200) { |
| | | electricityMeter.value = res.data.map((item) => { |
| | | return { |
| | | ...item, |
| | | value: item.code, |
| | | } |
| | | }) |
| | | queryParams.value.meterId = res.data.length > 0 ? res.data[0].code : "" |
| | | getList() |
| | | } |
| | | }) |
| | | } |
| | | /** èç¹åå»äºä»¶ */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | getElectricityMeter({ nodeId: queryParams.value.nodeId }) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | |
| | | function switchBtnType(e) { |
| | | activeKey.value = e |
| | | if (e === 1) { |
| | | getList() |
| | | } |
| | | } |
| | | // å表 |
| | | function getList() { |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |
| | | timeType: queryParams.value.timeType, |
| | | timeCode: queryParams.value.dataTime, |
| | | meterId: queryParams.value.meterId, |
| | | requestType: activeTabKey.value == 1 ? 0 : 1, |
| | | } |
| | | if (queryParams.value.timeType == "DAY") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM-DD") |
| | | } else if (queryParams.value.timeType == "MONTH") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY-MM") |
| | | } else if (queryParams.value.timeType == "YEAR") { |
| | | params.timeCode = proxy.dayjs(new Date(queryParams.value.dataTime)).format("YYYY") |
| | | } |
| | | threePhaseUnbalanceAnalysisDetail(params) |
| | | .then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | // detailData.value = res.data.detail |
| | | loading.value = false |
| | | let itemList = res.data.itemList || [] |
| | | let detail = res.data.detail || {} |
| | | if (detail) { |
| | | tableData1.value = [ |
| | | { |
| | | type: "æå¤§å¼", |
| | | value: detail.max || "--", |
| | | time: detail.maxTime, |
| | | valueA: detail.valueMaxA, |
| | | valueB: detail.valueMaxB, |
| | | valueC: detail.valueMaxC, |
| | | }, |
| | | { |
| | | type: "æå°å¼", |
| | | value: detail.min, |
| | | time: detail.minTime, |
| | | valueA: detail.valueMinA, |
| | | valueB: detail.valueMinB, |
| | | valueC: detail.valueMinC, |
| | | }, |
| | | ] |
| | | } |
| | | |
| | | let tableDataWithMeterList = itemList |
| | | tableData2.value = |
| | | tableDataWithMeterList.map((item) => { |
| | | // item.timeCode = this.formatTime(item.timeCode) |
| | | return item |
| | | }) || [] |
| | | |
| | | // chart |
| | | let chartData = {} |
| | | chartData.title = "ä¸ç¸ä¸å¹³è¡¡åæ" |
| | | if (queryParams.value.timeType !== "DAY") { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCodeChart |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "æå°å¼", |
| | | data: itemList.map((item) => { |
| | | return item.min === "--" || !item.min ? null : Number(item.min) |
| | | }), |
| | | }, |
| | | { |
| | | name: "æå¤§å¼", |
| | | data: itemList.map((item) => { |
| | | return item.max === "--" || !item.max ? null : Number(item.max) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } else { |
| | | chartData = { |
| | | title: "ä¸ç¸ä¸å¹³è¡¡åæ", |
| | | xAxis: itemList.map((item) => { |
| | | return item.timeCode.slice(item.timeCode.length - 2, item.timeCode.length) + "æ¶" |
| | | }), |
| | | series: [ |
| | | { |
| | | name: "Aç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueA === "--" || !item.valueA ? null : Number(item.valueA) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Bç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueB === "--" || !item.valueB ? null : Number(item.valueB) |
| | | }), |
| | | }, |
| | | { |
| | | name: "Cç¸" + (activeTabKey.value == 1 ? "çµå" : "çµæµ"), |
| | | data: itemList.map((item) => { |
| | | return item.valueC === "--" || !item.valueC ? null : Number(item.valueC) |
| | | }), |
| | | }, |
| | | ], |
| | | } |
| | | } |
| | | lineChartData.value = chartData |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | loading.value = false |
| | | }) |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-æç´¢ |
| | | function handleQuery() { |
| | | getList() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // ç¢³ææ¾ç®¡ç-ç¢³ææ¾éæ ¸ç®-å¯¼åº |
| | | function handleExport() { |
| | | proxy.download( |
| | | "carbonEmission/export", |
| | | { |
| | | emissionType: "allType", |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-ç¢³ææ¾éæ ¸ç®_${new Date().getTime()}.xlsx` |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .themeDark { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | color: #fff; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #223386; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #4868b7; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .themeLight { |
| | | .card-list { |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 18px; |
| | | |
| | | .card-list-item { |
| | | width: 19%; |
| | | margin-right: 1%; |
| | | height: 157px; |
| | | background: #fff; |
| | | border-radius: 5px 5px 5px 5px; |
| | | border: 1px solid #e8e8e8; |
| | | background-size: 100% 100%; |
| | | box-sizing: border-box; |
| | | padding: 25px 18px 12px 16px; |
| | | |
| | | .item-top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .top-icon { |
| | | width: 40px; |
| | | height: 40px; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .top-right { |
| | | margin-left: 16px; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | color: #000; |
| | | font-family: OPPOSans-Bold; |
| | | } |
| | | } |
| | | |
| | | .item-bottom { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 18px; |
| | | font-family: OPPOSans, OPPOSans; |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .chart-box { |
| | | width: 100%; |
| | | height: 100% !important; |
| | | } |
| | | .display-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | .display-btn, |
| | | .active-display-btn { |
| | | width: 78px; |
| | | height: 34px; |
| | | background: #fff; |
| | | color: #409eff; |
| | | border: 2px solid #409eff; |
| | | border-radius: 4px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | line-height: 31px; |
| | | font-size: 14px; |
| | | font-weight: 400; |
| | | cursor: pointer; |
| | | &:hover { |
| | | opacity: 0.9; |
| | | } |
| | | } |
| | | .active-display-btn { |
| | | background: #409eff; |
| | | color: #fff; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <div class="page"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px"> |
| | | <el-form-item label="æ¥æçé" prop="dataTime"> |
| | | <el-date-picker v-model="queryParams.dataTime" value-format="YYYY-MM-DD 00:00:00" type="date" |
| | | placeholder="æ¥æçé" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | type="date" |
| | | placeholder="æ¥æçé" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | æç´¢ |
| | | </el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> æç´¢ </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | å¯¼åº |
| | | </el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> å¯¼åº </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="chart-box" v-loading="loading"> |
| | |
| | | </template> |
| | | |
| | | <script setup name="chartModal"> |
| | | import * as echarts from "echarts"; |
| | | import { getEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | const dialogTableVisible = ref(false); |
| | | import * as echarts from "echarts" |
| | | import { getEnergyRealTimeMonitor } from "@/api/realTimeMonitor/realTimeMonitor" |
| | | const { proxy } = getCurrentInstance() |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | const dialogTableVisible = ref(false) |
| | | const data = reactive({ |
| | | title: null, |
| | | queryParams: { |
| | | tagCode: null, |
| | | dataTime: null, |
| | | }, |
| | | }); |
| | | const { queryParams, title } = toRefs(data); |
| | | const loading = ref(false); |
| | | defineExpose({ handleOpen }); |
| | | }) |
| | | const { queryParams, title } = toRefs(data) |
| | | const loading = ref(false) |
| | | defineExpose({ handleOpen }) |
| | | function handleOpen(row) { |
| | | title.value = row.name; |
| | | dialogTableVisible.value = true; |
| | | queryParams.value.nodeName = row.nodeName; |
| | | queryParams.value.tagCode = row.indexCode; |
| | | queryParams.value.unit = row.unit; |
| | | queryParams.value.name = row.name; |
| | | queryParams.value.dataTime = proxy |
| | | .dayjs(new Date()) |
| | | .format("YYYY-MM-DD 00:00:00"); |
| | | getList(); |
| | | title.value = row.name |
| | | dialogTableVisible.value = true |
| | | queryParams.value.nodeName = row.nodeName |
| | | queryParams.value.tagCode = row.indexCode |
| | | queryParams.value.unit = row.unit |
| | | queryParams.value.name = row.name |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00") |
| | | getList() |
| | | } |
| | | function handleClose() { |
| | | dialogTableVisible.value = false; |
| | | dialogTableVisible.value = false |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-å表 |
| | | function getList() { |
| | | loading.value = true; |
| | | getEnergyRealTimeMonitor(proxy.addDateRange(queryParams.value)).then( |
| | | (res) => { |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | if (!!res.code && res.code == 200) { |
| | | if (!!res.data) { |
| | | let xdata = []; |
| | | let ydata = []; |
| | | res.data.map((item) => { |
| | | xdata.push(proxy.dayjs(item.name).format("HH:mm")); |
| | | ydata.push(!!item.value ? item.value : 0); |
| | | }); |
| | | loading.value = false; |
| | | myChart1.setOption({ |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | grid: { |
| | | top: "45", |
| | | left: "6%", |
| | | right: "5%", |
| | | bottom: "10", |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | data: xdata, |
| | | }, |
| | | yAxis: { |
| | | type: "value", |
| | | name: |
| | | queryParams.value.name + |
| | | (!!queryParams.value.unit |
| | | ? "(" + queryParams.value.unit + ")" |
| | | : ""), |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: title.value + "å岿°æ®æ¥è¯¢", // ytip |
| | | type: "line", |
| | | barWidth: "27", |
| | | stack: "total", |
| | | data: ydata, |
| | | }, |
| | | ], |
| | | }); |
| | | } |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | loading.value = true |
| | | getEnergyRealTimeMonitor(proxy.addDateRange(queryParams.value)).then((res) => { |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | if (!!res.code && res.code == 200) { |
| | | if (!!res.data) { |
| | | let xdata = [] |
| | | let ydata = [] |
| | | res.data.map((item) => { |
| | | xdata.push(proxy.dayjs(item.name).format("HH:mm")) |
| | | ydata.push(!!item.value ? item.value : 0) |
| | | }) |
| | | loading.value = false |
| | | myChart1.setOption({ |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | grid: { |
| | | top: "45", |
| | | left: "6%", |
| | | right: "5%", |
| | | bottom: "10", |
| | | containLabel: true, |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | | type: "shadow", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | | }, |
| | | data: xdata, |
| | | }, |
| | | yAxis: { |
| | | type: "value", |
| | | name: queryParams.value.name + (!!queryParams.value.unit ? "(" + queryParams.value.unit + ")" : ""), |
| | | nameTextStyle: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | | show: false, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | name: title.value + "å岿°æ®æ¥è¯¢", // ytip |
| | | type: "line", |
| | | barWidth: "12", |
| | | stack: "total", |
| | | data: ydata, |
| | | }, |
| | | ], |
| | | }) |
| | | } |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize() |
| | | }, |
| | | { passive: true } |
| | | ) |
| | | } |
| | | ); |
| | | }) |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-æç´¢ |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-éç½® |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | (queryParams.value.dataTime = proxy |
| | | .dayjs(new Date()) |
| | | .format("YYYY-MM-DD 00:00:00")), |
| | | handleNodeClick(nodeOptions.value[0]); |
| | | proxy.resetForm("queryRef") |
| | | ;(queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00")), |
| | | handleNodeClick(nodeOptions.value[0]) |
| | | } |
| | | // è½æºå®æ¶çæ§-è½æºå®æ¶çæ§-å¯¼åº |
| | | function handleExport() { |
| | |
| | | "rtdb/realtimeTrend/export", |
| | | queryParams.value, |
| | | `${queryParams.value.nodeName}-${queryParams.value.name}_è½æºå®æ¶çæ§_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | form.value.svgType = "COLLECT" |
| | | updateEquipmentfile(form.value).then((result) => { |
| | | if (result.code === 200) { |
| | | filePath.value = response.msg |
| | | filePath.value = val[0].fullUrl |
| | | tags.value = [] |
| | | getSvg() |
| | | } else { |
| | |
| | | } |
| | | }) |
| | | } else { |
| | | proxy.$modal.msgError(response.msg) |
| | | proxy.$modal.msgError(result.msg) |
| | | } |
| | | } |
| | | |