|
@@ -0,0 +1,467 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <u-sticky class="shadow-default" bgColor="#fff" style="top: 0">
|
|
|
|
|
+ <u-navbar :titleStyle="{ color: '#000' }" :autoBack="true" title="能耗概览" :placeholder="true" :safeAreaInsetTop="true" bgColor="#fff">
|
|
|
|
|
+ <template #left>
|
|
|
|
|
+ <view class="u-navbar__content__left__item">
|
|
|
|
|
+ <u-icon name="arrow-left" size="20" color="#000"></u-icon>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </u-navbar>
|
|
|
|
|
+
|
|
|
|
|
+ <oa-switch :items="filterItems" @change="handleFilterChange" @reset="resetSwitch" />
|
|
|
|
|
+ </u-sticky>
|
|
|
|
|
+
|
|
|
|
|
+ <oa-scroll
|
|
|
|
|
+ customClass="overview-container scroll-height"
|
|
|
|
|
+ :isSticky="true"
|
|
|
|
|
+ :refresherLoad="false"
|
|
|
|
|
+ :refresherEnabled="true"
|
|
|
|
|
+ :refresherEnabledTitle="false"
|
|
|
|
|
+ :refresherDefaultStyle="'none'"
|
|
|
|
|
+ :refresherThreshold="44"
|
|
|
|
|
+ :refresherBackground="'#eef3fb'"
|
|
|
|
|
+ :customStyle="{
|
|
|
|
|
+ //#ifdef APP-PLUS || MP-WEIXIN
|
|
|
|
|
+ height: `calc(100vh - (44px + 50px + ${proxy.$settingStore.StatusBarHeight}))`,
|
|
|
|
|
+ //#endif
|
|
|
|
|
+ //#ifdef H5
|
|
|
|
|
+ height: 'calc(100vh - (44px + 50px))',
|
|
|
|
|
+ //#endif
|
|
|
|
|
+ }"
|
|
|
|
|
+ @refresh="init"
|
|
|
|
|
+ :data-theme="'theme-' + proxy.$settingStore.themeColor.name"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #default>
|
|
|
|
|
+ <view class="overview-page p10">
|
|
|
|
|
+ <project-intro ref="projectIntroRef"></project-intro>
|
|
|
|
|
+
|
|
|
|
|
+ <kpi-grid
|
|
|
|
|
+ ref="kpiGridRef"
|
|
|
|
|
+ :date-type="form.dateType"
|
|
|
|
|
+ :energy-type="form.energyType"
|
|
|
|
|
+ v-model:unit-index="unitIndex"
|
|
|
|
|
+ v-model:category-data="categoryData"
|
|
|
|
|
+ ></kpi-grid>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__title">分类能耗占比</view>
|
|
|
|
|
+ <category-pie-chart :chart-data="categoryData"></category-pie-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__title">单位综合能耗指标</view>
|
|
|
|
|
+ <unit-gauge-chart :value="unitIndex" :max="100"></unit-gauge-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__title">设备信息</view>
|
|
|
|
|
+ <device-bar-chart :chart-data="deviceData"></device-bar-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__title">建筑能耗排名</view>
|
|
|
|
|
+ <building-rank-chart :chart-data="buildingData"></building-rank-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__title">分项能耗占比</view>
|
|
|
|
|
+ <item-pie-chart :chart-data="itemData"></item-pie-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+
|
|
|
|
|
+ <view class="chart-card bg-white radius mb10">
|
|
|
|
|
+ <view class="chart-card__header flex">
|
|
|
|
|
+ <view class="chart-card__title">能耗用电趋势</view>
|
|
|
|
|
+ <view class="chart-wrap__fullscreen flex" @click="openTrendFullscreen">
|
|
|
|
|
+ <view class="chart-wrap__fullscreen-icon"></view>
|
|
|
|
|
+ <text class="chart-wrap__fullscreen-text">横屏</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <trend-line-chart :x-data="trendXData" :current-data="trendCurrent" :compare-data="trendCompare"></trend-line-chart>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </oa-scroll>
|
|
|
|
|
+
|
|
|
|
|
+ <trend-chart-fullscreen
|
|
|
|
|
+ :show="trendFullscreen.show"
|
|
|
|
|
+ :x-data="trendXData"
|
|
|
|
|
+ :current-data="trendCurrent"
|
|
|
|
|
+ :compare-data="trendCompare"
|
|
|
|
|
+ @close="closeTrendFullscreen"
|
|
|
|
|
+ ></trend-chart-fullscreen>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script setup>
|
|
|
|
|
+/*----------------------------------依赖引入-----------------------------------*/
|
|
|
|
|
+import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
|
|
|
|
|
+import { getCurrentInstance, reactive, toRefs, computed, ref } from "vue";
|
|
|
|
|
+/*----------------------------------接口引入-----------------------------------*/
|
|
|
|
|
+import {
|
|
|
|
|
+ getEmsOverviewItem,
|
|
|
|
|
+ getEmsItemRatio,
|
|
|
|
|
+ getEmsBuildingRanking,
|
|
|
|
|
+ getEmsEnergyTrend,
|
|
|
|
|
+ getEmsProductPage,
|
|
|
|
|
+} from "@/api/business/ems/overview.js";
|
|
|
|
|
+/*----------------------------------组件引入-----------------------------------*/
|
|
|
|
|
+import projectIntro from "./components/projectIntro.vue";
|
|
|
|
|
+import kpiGrid from "./components/kpiGrid.vue";
|
|
|
|
|
+import categoryPieChart from "./components/categoryPieChart.vue";
|
|
|
|
|
+import unitGaugeChart from "./components/unitGaugeChart.vue";
|
|
|
|
|
+import deviceBarChart from "./components/deviceBarChart.vue";
|
|
|
|
|
+import buildingRankChart from "./components/buildingRankChart.vue";
|
|
|
|
|
+import itemPieChart from "./components/itemPieChart.vue";
|
|
|
|
|
+import trendLineChart from "./components/trendLineChart.vue";
|
|
|
|
|
+import trendChartFullscreen from "./components/trendChartFullscreen.vue";
|
|
|
|
|
+
|
|
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
|
|
+const kpiGridRef = ref(null);
|
|
|
|
|
+const projectIntroRef = ref(null);
|
|
|
|
|
+
|
|
|
|
|
+const ITEM_COLORS = ["#4a90e2", "#40b883", "#f5c542", "#ef6b6b"];
|
|
|
|
|
+
|
|
|
|
|
+const TIME_LIST = [
|
|
|
|
|
+ { name: "日", value: "1" },
|
|
|
|
|
+ { name: "月", value: "2" },
|
|
|
|
|
+ { name: "年", value: "3" },
|
|
|
|
|
+];
|
|
|
|
|
+
|
|
|
|
|
+const state = reactive({
|
|
|
|
|
+ form: {
|
|
|
|
|
+ dateType: "1",
|
|
|
|
|
+ energyType: "1",
|
|
|
|
|
+ },
|
|
|
|
|
+ energyTypeList: [],
|
|
|
|
|
+ categoryData: [{ name: "电", value: 0, color: "#40b883" }],
|
|
|
|
|
+ unitIndex: 0,
|
|
|
|
|
+ deviceData: [],
|
|
|
|
|
+ buildingData: [],
|
|
|
|
|
+ itemData: [],
|
|
|
|
|
+ trendXData: [],
|
|
|
|
|
+ trendCurrent: [],
|
|
|
|
|
+ trendCompare: [],
|
|
|
|
|
+ trendFullscreen: {
|
|
|
|
|
+ show: false,
|
|
|
|
|
+ },
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+const { form, categoryData, unitIndex, deviceData, buildingData, itemData, trendXData, trendCurrent, trendCompare, trendFullscreen } = toRefs(state);
|
|
|
|
|
+
|
|
|
|
|
+/*----------------------------------计算属性-----------------------------------*/
|
|
|
|
|
+/** 当前选中的时间维度文案 */
|
|
|
|
|
+const timeLabel = computed(() => {
|
|
|
|
|
+ const current = TIME_LIST.find((item) => item.value === state.form.dateType);
|
|
|
|
|
+ return current ? current.name : "日";
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+/** 当前选中的能源类型文案 */
|
|
|
|
|
+const energyTypeLabel = computed(() => {
|
|
|
|
|
+ const current = state.energyTypeList.find((item) => String(item.energyType) === String(state.form.energyType));
|
|
|
|
|
+ return current ? current.name : "电";
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+const filterItems = computed(() => [
|
|
|
|
|
+ {
|
|
|
|
|
+ key: "time",
|
|
|
|
|
+ label: timeLabel.value,
|
|
|
|
|
+ active: state.form.dateType !== "1",
|
|
|
|
|
+ type: "sheet",
|
|
|
|
|
+ options: TIME_LIST,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ key: "energy",
|
|
|
|
|
+ label: energyTypeLabel.value,
|
|
|
|
|
+ active: !!state.form.energyType,
|
|
|
|
|
+ type: "sheet",
|
|
|
|
|
+ options: state.energyTypeList.map((item) => ({
|
|
|
|
|
+ name: item.name,
|
|
|
|
|
+ value: String(item.energyType),
|
|
|
|
|
+ })),
|
|
|
|
|
+ },
|
|
|
|
|
+]);
|
|
|
|
|
+
|
|
|
|
|
+function handleFilterChange({ key, value }) {
|
|
|
|
|
+ if (key === "time") {
|
|
|
|
|
+ state.form.dateType = value.value;
|
|
|
|
|
+ resetEnergyTrend();
|
|
|
|
|
+ } else if (key === "energy") {
|
|
|
|
|
+ state.form.energyType = value.value;
|
|
|
|
|
+ }
|
|
|
|
|
+ loadOverviewData();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/*----------------------------------工具方法-----------------------------------*/
|
|
|
|
|
+/** 数值保留一位小数 */
|
|
|
|
|
+function toFixedNum(val, fallback = 0) {
|
|
|
|
|
+ const num = Number(val);
|
|
|
|
|
+ return Number.isFinite(num) ? Number(num.toFixed(1)) : fallback;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 按日/月/年生成趋势图时间轴 */
|
|
|
|
|
+function buildTrendTimeline() {
|
|
|
|
|
+ const now = proxy.$dayjs();
|
|
|
|
|
+
|
|
|
|
|
+ if (state.form.dateType === "1") {
|
|
|
|
|
+ return Array.from({ length: 24 }, (_, index) => ({
|
|
|
|
|
+ time: index,
|
|
|
|
|
+ label: `${index}点`,
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (state.form.dateType === "2") {
|
|
|
|
|
+ const daysInMonth = now.daysInMonth();
|
|
|
|
|
+ return Array.from({ length: daysInMonth }, (_, index) => {
|
|
|
|
|
+ const day = index + 1;
|
|
|
|
|
+ return {
|
|
|
|
|
+ time: day,
|
|
|
|
|
+ label: now.date(day).format("YYYY-MM-DD"),
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return Array.from({ length: 12 }, (_, index) => {
|
|
|
|
|
+ const month = index + 1;
|
|
|
|
|
+ return {
|
|
|
|
|
+ time: month,
|
|
|
|
|
+ label: now.month(month - 1).date(1).format("YYYY-MM-DD"),
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 重置趋势图为空数据 */
|
|
|
|
|
+function resetEnergyTrend() {
|
|
|
|
|
+ const timeline = buildTrendTimeline();
|
|
|
|
|
+ state.trendXData = timeline.map((item) => item.label);
|
|
|
|
|
+ state.trendCurrent = timeline.map(() => 0);
|
|
|
|
|
+ state.trendCompare = timeline.map(() => 0);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/*----------------------------------数据获取方法-----------------------------------*/
|
|
|
|
|
+/** 获取能源类型列表 */
|
|
|
|
|
+function fetchOverviewItem() {
|
|
|
|
|
+ return getEmsOverviewItem()
|
|
|
|
|
+ .then((requset) => {
|
|
|
|
|
+ if (requset.status === "SUCCESS" && requset.data?.length) {
|
|
|
|
|
+ state.energyTypeList = requset.data;
|
|
|
|
|
+ const exists = requset.data.some((item) => String(item.energyType) === String(state.form.energyType));
|
|
|
|
|
+ if (!exists) {
|
|
|
|
|
+ state.form.energyType = String(requset.data[0].energyType);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {});
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 获取分项能耗占比 */
|
|
|
|
|
+function fetchItemRatio() {
|
|
|
|
|
+ return getEmsItemRatio({
|
|
|
|
|
+ dateType: state.form.dateType,
|
|
|
|
|
+ energyType: state.form.energyType,
|
|
|
|
|
+ })
|
|
|
|
|
+ .then((requset) => {
|
|
|
|
|
+ if (requset.status === "SUCCESS" && Array.isArray(requset.data) && requset.data.length) {
|
|
|
|
|
+ state.itemData = requset.data.map((item, index) => ({
|
|
|
|
|
+ name: item.name,
|
|
|
|
|
+ value: toFixedNum((Number(item.total) || 0) * (Number(item.consume) || 0)),
|
|
|
|
|
+ color: ITEM_COLORS[index % ITEM_COLORS.length],
|
|
|
|
|
+ }));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ state.itemData = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {
|
|
|
|
|
+ state.itemData = [];
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 获取建筑能耗排名 */
|
|
|
|
|
+function fetchBuildingRanking() {
|
|
|
|
|
+ return getEmsBuildingRanking({
|
|
|
|
|
+ dateType: state.form.dateType,
|
|
|
|
|
+ energyType: state.form.energyType,
|
|
|
|
|
+ })
|
|
|
|
|
+ .then((requset) => {
|
|
|
|
|
+ if (requset.status === "SUCCESS" && Array.isArray(requset.data) && requset.data.length) {
|
|
|
|
|
+ state.buildingData = requset.data.map((item) => ({
|
|
|
|
|
+ name: item.name,
|
|
|
|
|
+ value: toFixedNum(item.value),
|
|
|
|
|
+ }));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ state.buildingData = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {
|
|
|
|
|
+ state.buildingData = [];
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 获取能耗趋势 */
|
|
|
|
|
+function fetchEnergyTrend() {
|
|
|
|
|
+ return getEmsEnergyTrend({
|
|
|
|
|
+ dateType: state.form.dateType,
|
|
|
|
|
+ energyType: state.form.energyType,
|
|
|
|
|
+ })
|
|
|
|
|
+ .then((requset) => {
|
|
|
|
|
+ const list = requset.status === "SUCCESS" ? requset.data : [];
|
|
|
|
|
+ const timeline = buildTrendTimeline();
|
|
|
|
|
+ const dataMap = {};
|
|
|
|
|
+
|
|
|
|
|
+ (list || []).forEach((item) => {
|
|
|
|
|
+ const key = Number(item.time);
|
|
|
|
|
+ if (Number.isFinite(key)) {
|
|
|
|
|
+ dataMap[key] = item;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ state.trendXData = timeline.map((item) => item.label);
|
|
|
|
|
+ state.trendCurrent = timeline.map((item) => {
|
|
|
|
|
+ const row = dataMap[item.time];
|
|
|
|
|
+ return row ? toFixedNum(row.thisValue) : 0;
|
|
|
|
|
+ });
|
|
|
|
|
+ state.trendCompare = timeline.map((item) => {
|
|
|
|
|
+ const row = dataMap[item.time];
|
|
|
|
|
+ return row ? toFixedNum(row.oldValue) : 0;
|
|
|
|
|
+ });
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {
|
|
|
|
|
+ resetEnergyTrend();
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 获取设备信息统计 */
|
|
|
|
|
+function fetchDeviceInfo() {
|
|
|
|
|
+ return getEmsProductPage({ current: 1, size: 1000 })
|
|
|
|
|
+ .then((requset) => {
|
|
|
|
|
+ if (requset.status === "SUCCESS") {
|
|
|
|
|
+ const list = (requset.data?.records || [])
|
|
|
|
|
+ .map((item) => ({
|
|
|
|
|
+ name: item.productName || "未知设备",
|
|
|
|
|
+ value: Number(item.deviceCount ?? item.deviceNum ?? 0) || 0,
|
|
|
|
|
+ }))
|
|
|
|
|
+ .filter((item) => item.name);
|
|
|
|
|
+ state.deviceData = list.length ? list : [];
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(() => {});
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 加载除 KPI 外的概览图表数据 */
|
|
|
|
|
+function loadOverviewData() {
|
|
|
|
|
+ fetchItemRatio();
|
|
|
|
|
+ fetchBuildingRanking();
|
|
|
|
|
+ fetchEnergyTrend();
|
|
|
|
|
+ fetchDeviceInfo();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 页面初始化 / 下拉刷新 */
|
|
|
|
|
+function init() {
|
|
|
|
|
+ projectIntroRef.value?.refresh();
|
|
|
|
|
+ fetchOverviewItem().finally(() => {
|
|
|
|
|
+ kpiGridRef.value?.refresh();
|
|
|
|
|
+ loadOverviewData();
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/*----------------------------------交互方法-----------------------------------*/
|
|
|
|
|
+/** 重置日/月/年与能源类型筛选 */
|
|
|
|
|
+function resetSwitch() {
|
|
|
|
|
+ state.form = {
|
|
|
|
|
+ dateType: "1",
|
|
|
|
|
+ energyType: state.energyTypeList[0] ? String(state.energyTypeList[0].energyType) : "1",
|
|
|
|
|
+ };
|
|
|
|
|
+ resetEnergyTrend();
|
|
|
|
|
+ loadOverviewData();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 打开趋势图横屏全屏 */
|
|
|
|
|
+function openTrendFullscreen() {
|
|
|
|
|
+ state.trendFullscreen.show = true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 关闭趋势图横屏全屏 */
|
|
|
|
|
+function closeTrendFullscreen() {
|
|
|
|
|
+ state.trendFullscreen.show = false;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/*----------------------------------生命周期-----------------------------------*/
|
|
|
|
|
+onShow(() => {
|
|
|
|
|
+ proxy.$settingStore.systemThemeColor([1]);
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+onLoad(() => {
|
|
|
|
|
+ resetEnergyTrend(); // 预置空趋势数据,避免首屏图表空白
|
|
|
|
|
+ init();
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+onUnload(() => {
|
|
|
|
|
+ closeTrendFullscreen(); // 离开页面时关闭全屏
|
|
|
|
|
+});
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
|
+.overview-container {
|
|
|
|
|
+ background-color: #eef3fb;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.overview-page {
|
|
|
|
|
+ padding-bottom: 20px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.chart-card {
|
|
|
|
|
+ padding: 12px 12px 4px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+
|
|
|
|
|
+ &__header {
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ margin-bottom: 4px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__title {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: #559aff;
|
|
|
|
|
+ line-height: 22px;
|
|
|
|
|
+
|
|
|
|
|
+ &::before {
|
|
|
|
|
+ content: "丨 ";
|
|
|
|
|
+ color: #559aff;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.chart-wrap {
|
|
|
|
|
+ &__fullscreen {
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 4px 8px;
|
|
|
|
|
+ border: 1px solid #eee;
|
|
|
|
|
+ border-radius: 14px;
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__fullscreen-icon {
|
|
|
|
|
+ width: 12px;
|
|
|
|
|
+ height: 12px;
|
|
|
|
|
+ border: 1.5px solid #666;
|
|
|
|
|
+ border-radius: 1px;
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+
|
|
|
|
|
+ &::before {
|
|
|
|
|
+ content: "";
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: -3px;
|
|
|
|
|
+ right: -3px;
|
|
|
|
|
+ width: 5px;
|
|
|
|
|
+ height: 5px;
|
|
|
|
|
+ border-top: 1.5px solid #666;
|
|
|
|
|
+ border-right: 1.5px solid #666;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &__fullscreen-text {
|
|
|
|
|
+ margin-left: 4px;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: #666;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|