17 Commits

Author SHA1 Message Date
88d8c80250 update fan 2023-07-22 17:55:21 +08:00
lb
091b58f4cf update header 2023-07-19 11:03:04 +08:00
lb
0c31996011 update bg-color 2023-07-17 09:41:20 +08:00
lb
776ba572da update 2023-07-12 17:12:12 +08:00
lb
3409e7dd8a update 2023-07-12 16:51:58 +08:00
lb
908b3beda0 update 2023-07-12 16:35:22 +08:00
lb
78a9cd4db6 update 2023-07-12 16:10:29 +08:00
lb
e8c76421a2 update scale 2023-07-12 16:02:03 +08:00
lb
66e92a693c update 基本完成 2023-07-12 15:09:37 +08:00
lb
f729af36c6 update 基本完成 2023-07-12 14:18:23 +08:00
lb
a3bb68c81e update baselayout 2023-07-12 13:44:18 +08:00
lb
86a606b177 update 进出口实时水温 2023-07-12 11:11:23 +08:00
lb
1c3be47344 update 进出口实时 2023-07-12 10:30:53 +08:00
lb
8a746794b1 update 缺陷分析 2023-07-12 09:34:13 +08:00
lb
a008e75126 update 底部 2023-07-11 17:14:00 +08:00
lb
a11c01dc63 update 完成header的重构 2023-07-11 11:20:17 +08:00
lb
3c51d2207b update monitor1 2023-07-11 08:59:40 +08:00
48 changed files with 1600 additions and 1263 deletions

View File

@@ -6,6 +6,4 @@
<script></script> <script></script>
<style lang="scss"> <style lang="scss"></style>
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 899 KiB

After

Width:  |  Height:  |  Size: 966 KiB

BIN
src/assets/i-water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 21 KiB

BIN
src/assets/o-water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 B

After

Width:  |  Height:  |  Size: 917 B

View File

@@ -55,8 +55,8 @@ export default {
} }
.vertical-line { .vertical-line {
margin: 0 adjust(3px); margin: 0 6px;
width: adjust(3px); width: 6px;
background: radial-gradient( background: radial-gradient(
ellipse at center, ellipse at center,
#3565ff, #3565ff,

View File

@@ -24,13 +24,13 @@
<table class="table-1"> <table class="table-1">
<thead> <thead>
<tr class="t-row"> <tr class="t-row">
<th style="width: 90px">序号</th> <th style="width: 160px">序号</th>
<!-- <th style="width: 180px">设备名称</th> <!-- <th style="width: 180px">设备名称</th>
<th style="width: 180px">运行频率</th> <th style="width: 180px">运行频率</th>
<th style="width: 180px">设备状态</th> --> <th style="width: 180px">设备状态</th> -->
<th style="width: 220px">设备名称</th> <th style="width: 240px">设备名称</th>
<th style="width: 160px">运行频率</th> <th style="width: 200px">运行频率</th>
<th style="width: 160px">设备状态</th> <th style="width: 200px">设备状态</th>
</tr> </tr>
</thead> </thead>
<transition-group name="fan-list" tag="tbody" mode="out-in"> <transition-group name="fan-list" tag="tbody" mode="out-in">
@@ -39,7 +39,14 @@
v-for="row in tableData1" v-for="row in tableData1"
:key="row && 'length' in row ? row[0] : Math.random()" :key="row && 'length' in row ? row[0] : Math.random()"
> >
<td v-for="(d, idx) in row" :key="idx"> <td
v-for="(d, idx) in row"
:key="idx"
:data-title="idx == 1 ? d : null"
>
<!-- :data-cx="cursorX"
:data-cy="cursorY"
@mouseover="handleMouseOver" -->
<template v-if="idx === 2"> <template v-if="idx === 2">
<FrequentComp :value="d" /> <FrequentComp :value="d" />
</template> </template>
@@ -48,7 +55,9 @@
</template> </template>
<template v-else> <template v-else>
<!-- <el-tooltip effect="light" :content="d" placement="top"> --> <!-- <el-tooltip effect="light" :content="d" placement="top"> -->
<span>{{ d }}</span> <span :class="idx == 1 ? 'eqName' : 'sequence'">{{
d
}}</span>
<!-- </el-tooltip> --> <!-- </el-tooltip> -->
</template> </template>
</td> </td>
@@ -104,43 +113,45 @@ export default {
return { return {
tableHead: ["序号", "设备名称", "运行频率", "设备状态"], tableHead: ["序号", "设备名称", "运行频率", "设备状态"],
tableCache: [ tableCache: [
[11, "风机11", "未运行", "正常" /**or 0,1*/], // [11, "风机11", "未运行", "正常" /**or 0,1*/],
[12, "风机12", "未运行", "正常" /**or 0,1*/], // [12, "风机12", "未运行", "正常" /**or 0,1*/],
[13, "风机13", "73Hz", "正常" /**or 0,1*/], // [13, "风机13", "73Hz", "正常" /**or 0,1*/],
], ],
tableData1: [ tableData1: [
[1, "风机1", "2332Hz", "正常" /**or 0,1*/], // [1, "风机1", "2332Hz", "正常" /**or 0,1*/],
[2, "2#风机水电费款经典款", "未运行", "故障" /**or 0,1*/], // [2, "2#风机水电费款经典款", "未运行", "故障" /**or 0,1*/],
[3, "风机3", "333Hz", "正常" /**or 0,1*/], // [3, "风机3", "333Hz", "正常" /**or 0,1*/],
[4, "风机4", "100Hz", "正常" /**or 0,1*/], // [4, "风机4", "100Hz", "正常" /**or 0,1*/],
[5, "风机5", "未运行", "正常" /**or 0,1*/], // [5, "风机5", "未运行", "正常" /**or 0,1*/],
[6, "风机6", "未运行", "故障" /**or 0,1*/], // [6, "风机6", "未运行", "故障" /**or 0,1*/],
[7, "风机7", "3000Hz", "正常" /**or 0,1*/], // [7, "风机7", "3000Hz", "正常" /**or 0,1*/],
[8, "风机8", "未运行", "正常" /**or 0,1*/], // [8, "风机8", "未运行", "正常" /**or 0,1*/],
[9, "风机9", "未运行", "正常" /**or 0,1*/], // [9, "风机9", "未运行", "正常" /**or 0,1*/],
[10, "风机10", "86423Hz", "正常" /**or 0,1*/], // [10, "风机10", "86423Hz", "正常" /**or 0,1*/],
], ],
cursorX: 0,
cursorY: 0
}; };
}, },
computed: { computed: {
// ...mapState(["fan"]), ...mapState(["fan"]),
}, },
watch: { watch: {
// fan: { fan: {
// handler: function (data) { handler: function (data) {
// if (!data) return; if (!data) return;
// let idx = 0; let idx = 0;
// this.tableData1 = data.slice(0, 10).map((item, index) => { this.tableData1 = data.slice(0, 10).map((item, index) => {
// idx += 1; idx += 1;
// return [idx, ...item]; return [idx, ...item];
// }); });
// this.tableCache = data this.tableCache = data
// .slice(10) .slice(10)
// .map((item, index) => [index + 1 + idx, ...item]); .map((item, index) => [index + 1 + idx, ...item]);
// }, },
// deep: true, deep: true,
// immediate: true, immediate: true,
// }, },
}, },
mounted() { mounted() {
setInterval(() => { setInterval(() => {
@@ -150,7 +161,17 @@ export default {
if (inData) this.tableData1.splice(this.tableData1.length, 0, inData); if (inData) this.tableData1.splice(this.tableData1.length, 0, inData);
}, 200); }, 200);
if (outData) this.tableCache.push(outData); if (outData) this.tableCache.push(outData);
}, 3000); }, 1000 * 3);
},
methods: {
// handleMouseOver(e) {
// if (e.target.dataset.title) {
// // 获取鼠标位置
// console.log("handleMouseOver", e.clientX, e.pageX, e.layorX, e.offsetX); // e.target.dataset.title);
// this.cursorX = e.offsetX + 10
// this.cursorY = e.offsetY + 10
// }
// },
}, },
}; };
</script> </script>
@@ -189,30 +210,24 @@ export default {
} }
.table-wrapper { .table-wrapper {
height: 400px; height: 420px;
overflow: hidden; overflow: hidden;
// background: #f001; // background: #f001;
} }
table { table {
table-layout: fixed;
width: 100%; width: 100%;
border-spacing: adjust(1px); border-spacing: 2px;
} }
// .table-1 {
// background: #00f3;
// }
// tr, td, th {
// max-height: 13.88px !important;
// }
.t-row { .t-row {
height: adjust(14px); height: 50px;
} }
.tables { .tables {
overflow: hidden; overflow: hidden;
padding: 12px 32px 32px;
} }
.tables > table { .tables > table {
@@ -228,38 +243,67 @@ thead > tr th:first-child {
} }
thead > tr th { thead > tr th {
font-size: adjust(8px); font-size: 36px;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
"微软雅黑", Arial, Helvetica, sans-serif; "微软雅黑", Arial, Helvetica, sans-serif;
line-height: 1.25; line-height: 1;
letter-spacing: 1px; letter-spacing: 1px;
padding: adjust(3px) adjust(8px); padding: 8px 48px;
font-weight: 600; font-weight: 600;
background: #4288df23; background: #4288df23;
color: #030609d6; color: #030609d6;
text-align: left; text-align: left;
user-select: none;
} }
tbody > tr:nth-child(even) { tbody > tr:nth-child(even) {
background: #4288df13; background: #4288df13;
} }
// tbody > tr td:not(:nth-child(2)) {
tbody > tr td { tbody > tr td {
user-select: none;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
"微软雅黑", Arial, Helvetica, sans-serif; "微软雅黑", Arial, Helvetica, sans-serif;
color: #030609d6; color: #030609d6;
font-size: adjust(8px); font-size: 32px;
height: adjust(8px * 1.2); line-height: 1;
line-height: 1.2;
padding: adjust(2px) adjust(8px);
font-weight: 400;
overflow: hidden;
background: inherit; background: inherit;
padding: 0 48px;
} }
tbody > tr td:first-child { tbody > tr td > span.eqName {
text-align: center; display: inline-block;
width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
[data-title] {
position: relative;
}
[data-title]::after {
content: attr(data-title);
position: absolute;
padding: 12px 24px;
background: #000;
color: #fff;
border-radius: 12px;
left: 70%;
top: 100%;
white-space: nowrap;
opacity: 0;
transition: all 0.3s ease-out;
z-index: 9999;
visibility: hidden;
}
[data-title]:hover::after {
visibility: visible;
opacity: 1;
} }
</style> </style>

View File

@@ -3,11 +3,23 @@
<Container usage="Charts"> <Container usage="Charts">
<SubContainer title="天然气流量" icon="gas" padding="24px 32px"> <SubContainer title="天然气流量" icon="gas" padding="24px 32px">
<div class="tables flex" style="height: 100%"> <div class="tables flex" style="height: 100%">
<LineChart key="1" id="line-chart-3" class="flex-1" unit="单位 m³/h" :legend="Object.keys(gasTable1)" <LineChart
:series="gasTable1" /> key="1"
id="line-chart-3"
class="flex-1"
unit="单位 m³/h"
:legend="Object.keys(gasTable1)"
:series="gasTable1"
/>
<div class="vertical-line"></div> <div class="vertical-line"></div>
<LineChart key="2" id="line-chart-4" class="flex-1" unit="单位 m³/h" :legend="Object.keys(gasTable2)" <LineChart
:series="gasTable2" /> key="2"
id="line-chart-4"
class="flex-1"
unit="单位 m³/h"
:legend="Object.keys(gasTable2)"
:series="gasTable2"
/>
</div> </div>
</SubContainer> </SubContainer>
</Container> </Container>
@@ -43,12 +55,14 @@ export default {
} }
.vertical-line { .vertical-line {
margin: 0 adjust(3px); margin: 0 6px;
width: adjust(3px); width: 6px;
background: radial-gradient(ellipse at center, background: radial-gradient(
#3565ff, ellipse at center,
#3565ff51, #3565ff,
transparent, #3565ff51,
transparent); transparent,
transparent
);
} }
</style> </style>

View File

@@ -1,52 +1,50 @@
<template> <template>
<div class="history-temp flex flex-col" style="height: 100%; position: relative;"> <div
<h3>{{ title }}</h3> class="history-temp flex flex-col"
<BarChart class="flex-1" :series="series" /> style="height: 100%; position: relative"
<div >
v-if="series && series.length === 0" <h3>{{ title }}</h3>
style=" <BarChart class="flex-1" :series="series" />
position: absolute; <div
top: 8px; v-if="series && series.length === 0"
left: -20px; style="
width: 110%; position: absolute;
height: 105%; top: 8px;
background: #eee1; left: -20px;
display: grid; width: 110%;
place-items: center; height: 105%;
font-size: 12px; background: #eee1;
color: #eee9; display: grid;
" place-items: center;
> font-size: 32px;
无数据 letter-spacing: 6px;
</div> color: #777;
</div> "
>
无数据
</div>
</div>
</template> </template>
<script> <script>
import BarChart from "../charts/BarChart.vue"; import BarChart from "../charts/BarChart.vue";
import { mapState } from "vuex";
export default { export default {
name: "HistoryTemp", name: "HistoryTemp",
components: { BarChart }, components: { BarChart },
props: { props: {
series: { series: {
type: Array, type: Array,
default: () => [], default: () => [],
}, },
title: { title: {
type: String, type: String,
default: "窑炉历史温度趋势", default: "窑炉历史温度趋势",
}, },
}, },
data() { data() {
return {}; return {};
}, },
computed: {
...mapState(["kilnWaterIn", "kilnWaterOut"]),
},
mounted() {},
methods: {},
}; };
</script> </script>
@@ -54,17 +52,22 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
.flex-1 { .flex-1 {
flex: 1; flex: 1;
// background: #eee; // background: #eee;
}
.history-temp {
// background: #f003;
} }
h3 { h3 {
margin: 0; margin: 0;
font-family: sans-serif; font-family: sans-serif;
font-weight: 400; font-weight: 400;
font-size: adjust(h(20px)); font-size: 30px;
letter-spacing: 1px; line-height: 34px;
color: #0c71ff; letter-spacing: 2px;
margin: adjust(h(12px)) 0; color: #0c71ff;
margin: 0;
} }
</style> </style>

View File

@@ -1,22 +1,25 @@
<template> <template>
<!-- 窑炉进口水温 --> <!-- 窑炉进口水温 -->
<Container class="in-water" usage="NumberAndChart"> <Container class="in-water" usage="NumberAndChart">
<SubContainer title="进口实时水温" icon="inWater"> <SubContainer title="进口实时水温" icon="inWater">
<div class="pic" style=""></div> <!-- <div class="pic" style=""></div> -->
<div class="content flex flex-col"> <div class="content flex">
<div class="realtime"> <div class="realtime">
<div class="time flex flex-center"> <div class="time flex flex-center">
<span class="temp-data">{{ waterInTemp }}</span> <span class="temp-data">{{ waterInTemp }}</span>
<span class="unit"></span> <span class="unit"></span>
</div> </div>
</div> </div>
<div class="wave"></div> <div class="graph flex-1">
<div class="graph flex-1"> <HistoryTrend
<HistoryTrend key="water-in" title="窑炉进口水温历史" :series="kilnWaterIn" /> key="water-in"
</div> title="窑炉进口水温历史"
</div> :series="kilnWaterIn"
</SubContainer> />
</Container> </div>
</div>
</SubContainer>
</Container>
</template> </template>
<script> <script>
@@ -28,17 +31,17 @@ import HistoryTrend from "./HistoryTemp.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
export default { export default {
name: "InWater", name: "InWater",
props: {}, props: {},
components: { Container, SubContainer, LineChart, DigitalBox, HistoryTrend }, components: { Container, SubContainer, LineChart, DigitalBox, HistoryTrend },
data() { data() {
return { return {
chartConfig: {}, chartConfig: {},
}; };
}, },
computed: { computed: {
...mapState(["kilnWaterIn", "waterInTemp"]), ...mapState(["kilnWaterIn", "waterInTemp"]),
}, },
}; };
</script> </script>
@@ -46,68 +49,59 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
.in-water { .in-water {
position: absolute; position: absolute;
top: adjust(h(430px)); top: -200px;
left: adjust(w(5630px)); left: 27px;
height: adjust(h(620px)); height: 509px;
width: adjust(w(880px)); width: 1323px;
} background: url(../../assets/in-water.png) top 0 left 0 / cover no-repeat;
.pic {
background: url(../../assets/in-water.png) top 0 left 0 / 90% no-repeat;
position: absolute;
top: adjust(10px);
right: 0;
width: adjust(w(440px));
height: adjust(h(380px));
} }
.content { .content {
height: 100%; height: 100%;
} }
.wave { .realtime {
transform: translateX(adjust(-8px)); width: 530px;
width: adjust(w(852px)); // height: 337px;
height: adjust(h(76px)); background: url(../../assets/inwater.png) top 90% left 0 / 100% 80% no-repeat,
background: url(../../assets/inwater.png) no-repeat; url(../../assets/i-water.png) top 24px right 24px / 40% 70% no-repeat;
background-size: 100% 100%;
} }
.graph { .graph {
// background: #ccc3; // background: #0cc3;
height: 436px;
transform: translate(0, -64px);
} }
.flex-1 { .flex-1 {
flex: 1; flex: 1;
// background: #eee; // background: #eee;
} }
.time { .time {
// background: #eee; transform: translate(56px, 80px);
margin: adjust(6px) 0 0; // background: #eee;
padding-left: adjust(14px);
} }
.time--item:not(:last-child) { .time--item:not(:last-child) {
margin-right: adjust(5px); margin-right: adjust(5px);
} }
.temp-data { .temp-data {
color: #0068ff; color: #0068ff;
font-size: adjust(h(88px)); font-size: 80px;
letter-spacing: 1px; letter-spacing: 2px;
} }
.unit { .unit {
font-family: sans-serif !important; font-family: sans-serif !important;
font-size: adjust(h(48px)); font-size: 48px;
font-weight: 400; font-weight: 400;
letter-spacing: 1px; letter-spacing: 1px;
align-self: flex-end; align-self: flex-end;
margin-bottom: 4px; margin-bottom: 4px;
margin-left: 4px; margin-left: 4px;
color: #0068ff; color: #0068ff;
} }
</style> </style>

View File

@@ -1,20 +1,20 @@
<template> <template>
<!-- 窑炉运行时间 --> <!-- 窑炉运行时间 -->
<Container usage="NumberOrDate"> <Container usage="NumberOrDate">
<SubContainer title="窑炉运行时间" icon="clock" padding="34px"> <SubContainer title="窑炉运行时间" icon="clock" padding="34px">
<div class="flex flex-col"> <div class="flex flex-col">
<div class="time flex flex-center"> <div class="time flex flex-center">
<DigitalBox <DigitalBox
class="time--item" class="time--item"
v-for="(item, index) in time" v-for="(item, index) in time"
:key="index" :key="index"
:value="item" :value="item"
/> />
</div> </div>
<div class="text">窑炉运行时间</div> <div class="text">窑炉运行时间</div>
</div> </div>
</SubContainer> </SubContainer>
</Container> </Container>
</template> </template>
<script> <script>
@@ -23,28 +23,28 @@ import SubContainer from "../layout/SubContainer.vue";
import DigitalBox from "../common/DigitalBox.vue"; import DigitalBox from "../common/DigitalBox.vue";
export default { export default {
name: "KilnRuntime", name: "KilnRuntime",
components: { Container, SubContainer, DigitalBox }, components: { Container, SubContainer, DigitalBox },
props: {}, props: {},
data() { data() {
return { return {
time: " 天", time: " 天",
}; };
}, },
mounted() { mounted() {
this.getRuntime() this.getRuntime();
setInterval(this.getRuntime, 1000 * 60 * 60); setInterval(this.getRuntime, 1000 * 60 * 60);
}, },
methods: { methods: {
getRuntime() { getRuntime() {
const diff = Date.now() - new Date("2023-5-7 8:00:00"); const diff = Date.now() - new Date("2023-5-7 8:00:00");
const days = parseInt(diff / 1000 / 60 / 60 / 24); const days = parseInt(diff / 1000 / 60 / 60 / 24);
const hours = parseInt( const hours = parseInt(
(diff - days * 24 * 60 * 60 * 1000) / 1000 / 60 / 60 (diff - days * 24 * 60 * 60 * 1000) / 1000 / 60 / 60
); );
this.time = `${days}`; this.time = `${days}`;
}, },
}, },
}; };
</script> </script>
@@ -52,47 +52,47 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
.time { .time {
// background: #eee; // background: #eee;
margin: adjust(12px) 0; margin: adjust(12px) 0;
} }
.flex-center { .flex-center {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.time--item:not(:last-child) { .time--item:not(:last-child) {
margin-right: adjust(8px); margin-right: adjust(8px);
} }
.text { .text {
padding: adjust(12px) 0; padding: adjust(12px) 0;
text-align: center; text-align: center;
font-size: adjust(23px); font-size: adjust(23px);
letter-spacing: adjust(4px); letter-spacing: adjust(4px);
position: relative; position: relative;
z-index: 10; z-index: 10;
user-select: none; user-select: none;
} }
.text::after { .text::after {
content: ""; content: "";
display: block; display: block;
position: absolute; position: absolute;
z-index: 0; z-index: 0;
left: 12%; left: 12%;
bottom: adjust(10px); bottom: adjust(10px);
height: adjust(4px); height: adjust(4px);
width: 76%; width: 76%;
/* 渐变色 */ /* 渐变色 */
background: radial-gradient( background: radial-gradient(
ellipse at center, ellipse at center,
#6fe2ff, #6fe2ff,
#6fe2ffc0, #6fe2ffc0,
#52cbef80, #52cbef80,
#52cbef30, #52cbef30,
#52cbef00, #52cbef00,
transparent transparent
); );
} }
</style> </style>

View File

@@ -39,62 +39,53 @@ export default {
data() { data() {
return { return {
chartConfig: {}, chartConfig: {},
oilTable1: { // oilTable1: {
FT111: Array(24) // FT111: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
FT112: Array(24) // FT112: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
FT113: Array(24) // FT113: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
FT114: Array(24) // FT114: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
FT115: Array(24) // FT115: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
}, // },
oilTable2: { // oilTable2: {
OT001: Array(24) // OT001: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT002: Array(24) // OT002: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT004: Array(24) // OT004: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT003: Array(24) // OT003: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT005: Array(24) // OT005: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT006: Array(24) // OT006: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT007: Array(24) // OT007: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT008: Array(24) // OT008: Array(24)
.fill(1) // .fill(1)
.map((_) => randomInt()), // .map((_) => randomInt()),
OT009: Array(24) // },
.fill(1)
.map((_) => randomInt()),
OT000: Array(24)
.fill(1)
.map((_) => randomInt()),
OT011: Array(24)
.fill(1)
.map((_) => randomInt()),
},
}; };
}, },
computed: { computed: {
// ...mapState(["oilTable1", "oilTable2"]), ...mapState(["oilTable1", "oilTable2"]),
}, },
}; };
</script> </script>
@@ -108,8 +99,8 @@ export default {
} }
.vertical-line { .vertical-line {
margin: 0 adjust(3px); margin: 0 6px;
width: adjust(3px); width: 6px;
background: radial-gradient( background: radial-gradient(
ellipse at center, ellipse at center,
#3565ff, #3565ff,

View File

@@ -1,22 +1,25 @@
<template> <template>
<!-- 窑炉出口水温 --> <!-- 窑炉出口水温 -->
<Container class="out-water" usage="NumberAndChart"> <Container class="out-water" usage="NumberAndChart">
<SubContainer title="出口实时水温" icon="inWater"> <SubContainer title="出口实时水温" icon="inWater">
<div class="pic" style=""></div> <div class="content flex">
<div class="content flex flex-col"> <div class="realtime">
<div class="realtime"> <div class="time flex flex-center">
<div class="time flex flex-center"> <span class="temp-data">{{ waterOutTemp }}</span>
<span class="temp-data">{{ waterOutTemp }}</span> <span class="unit"></span>
<span class="unit"></span> </div>
</div> </div>
</div> <div class="graph flex-1">
<div class="wave"></div> <HistoryTrend
<div class="graph flex-1"> key="water-out"
<HistoryTrend key="water-out" title="窑炉出口水温历史" :series="kilnWaterOut" /> title="窑炉出口水温历史"
</div> :series="kilnWaterOut"
</div> />
</SubContainer> <!-- :series="[11, 22, 33, 44, 55, 66, 77, 88, 99, 100, 32, 99, 88, 31]" -->
</Container> </div>
</div>
</SubContainer>
</Container>
</template> </template>
<script> <script>
@@ -28,85 +31,74 @@ import HistoryTrend from "./HistoryTemp.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
export default { export default {
name: "OutWater", name: "OutWater",
props: {}, props: {},
components: { Container, SubContainer, LineChart, DigitalBox, HistoryTrend }, components: { Container, SubContainer, LineChart, DigitalBox, HistoryTrend },
data() { data() {
return { return {
chartConfig: {}, chartConfig: {},
}; };
}, },
computed: { computed: {
...mapState(["kilnWaterOut", "waterOutTemp"]), ...mapState(["kilnWaterOut", "waterOutTemp"]),
}, },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
.out-water { .out-water {
position: absolute; position: absolute;
top: adjust(h(1065px)); top: -200px;
left: adjust(w(5630px)); left: 1350px;
height: adjust(h(620px)); height: 509px;
width: adjust(w(880px)); width: 1323px;
} background: url(../../assets/out-water.png) top 0 left 0 / cover no-repeat;
.pic {
background: url(../../assets/out-water.png) top 0 left 0 / 90% no-repeat;
position: absolute;
top: adjust(10px);
right: 0;
width: adjust(w(440px));
height: adjust(h(380px));
} }
.content { .content {
height: 100%; height: 100%;
} }
.wave { .realtime {
transform: translateX(adjust(-8px)); width: 530px;
width: adjust(w(852px)); // height: 337px;
height: adjust(h(76px)); background: url(../../assets/outwater.png) top 90% left 0 / 100% 80% no-repeat,
background: url(../../assets/outwater.png) no-repeat; url(../../assets/o-water.png) top 24px right 24px / 40% 70% no-repeat;
background-size: 100% 100%;
} }
.graph { .graph {
// background: #ccc3; // background: #0cc3;
height: 436px;
transform: translate(0, -64px);
} }
.flex-1 { .flex-1 {
flex: 1; flex: 1;
// background: #eee; // background: #eee;
} }
.time { .time {
// background: #eee; transform: translate(56px, 80px);
margin: adjust(4px) 0 0;
padding-left: adjust(14px);
} }
.time--item:not(:last-child) { .time--item:not(:last-child) {
margin-right: adjust(5px); margin-right: adjust(5px);
} }
.temp-data { .temp-data {
color: #0068ff; color: #0068ff;
font-size: adjust(h(88px)); font-size: 80px;
letter-spacing: 1px; letter-spacing: 2px;
} }
.unit { .unit {
font-family: sans-serif !important; font-family: sans-serif !important;
font-size: adjust(h(48px)); font-size: 48px;
font-weight: 400; font-weight: 400;
letter-spacing: 1px; letter-spacing: 1px;
align-self: flex-end; align-self: flex-end;
margin-bottom: 4px; margin-bottom: 4px;
margin-left: 4px; margin-left: 4px;
color: #0068ff; color: #0068ff;
} }
</style> </style>

View File

@@ -3,11 +3,23 @@
<Container usage="Charts"> <Container usage="Charts">
<SubContainer title="窑顶温度" icon="ktop" padding="24px 32px"> <SubContainer title="窑顶温度" icon="ktop" padding="24px 32px">
<div class="tables flex" style="height: 100%"> <div class="tables flex" style="height: 100%">
<LineChart key="1" id="line-chart-5" class="flex-1" unit="单位/℃" :legend="Object.keys(kilnTop1)" <LineChart
:series="kilnTop1" /> key="1"
id="line-chart-5"
class="flex-1"
unit="单位/℃"
:legend="Object.keys(kilnTop1)"
:series="kilnTop1"
/>
<div class="vertical-line"></div> <div class="vertical-line"></div>
<LineChart key="2" id="line-chart-6" class="flex-1" unit="单位/℃" :legend="Object.keys(kilnTop2)" <LineChart
:series="kilnTop2" /> key="2"
id="line-chart-6"
class="flex-1"
unit="单位/℃"
:legend="Object.keys(kilnTop2)"
:series="kilnTop2"
/>
</div> </div>
</SubContainer> </SubContainer>
</Container> </Container>
@@ -31,8 +43,8 @@ export default {
computed: { computed: {
...mapState(["kilnTop1", "kilnTop2"]), ...mapState(["kilnTop1", "kilnTop2"]),
legend_1() { legend_1() {
return Object.keys(this.kilnTop1) return Object.keys(this.kilnTop1);
} },
}, },
watch: { watch: {
kilnTop1(val) { kilnTop1(val) {
@@ -51,12 +63,14 @@ export default {
} }
.vertical-line { .vertical-line {
margin: 0 adjust(3px); margin: 0 6px;
width: adjust(3px); width: 6px;
background: radial-gradient(ellipse at center, background: radial-gradient(
#3565ff, ellipse at center,
#3565ff51, #3565ff,
transparent, #3565ff51,
transparent); transparent,
transparent
);
} }
</style> </style>

View File

@@ -55,12 +55,12 @@ export default {
} }
.vertical-line { .vertical-line {
margin: 0 adjust(3px); margin: 0 6px;
width: adjust(3px); width: 6px;
background: radial-gradient( background: radial-gradient(
ellipse at center, ellipse at center,
#6fe2ff, #3565ff,
#52cbef80, #3565ff51,
transparent, transparent,
transparent transparent
); );

View File

@@ -27,21 +27,21 @@ export default {
.table-status { .table-status {
/* font-family: Ubuntu, sans-serif !important; */ /* font-family: Ubuntu, sans-serif !important; */
color: #3984ff; color: #3984ff;
padding-left: adjust(10px); padding-left: 24px;
position: relative; position: relative;
} }
.table-status::after { .table-status::after {
content: ""; content: "";
position: absolute; position: absolute;
left: adjust(1px); left: 2px;
top: adjust(2px); top: 8px;
display: inline-block; display: inline-block;
width: adjust(4px); width: 12px;
height: adjust(4px); height: 12px;
border-radius: adjust(100px); border-radius: 100px;
background: #3984ff; background: #3984ff;
box-shadow: 0px 0px adjust(2px) adjust(2px) rgba(39, 96, 255, 0.5); box-shadow: 0px 0px 4px 4px rgba(39, 96, 255, 0.5);
} }
.invalid { .invalid {
@@ -50,6 +50,6 @@ export default {
.invalid::after { .invalid::after {
background: #ff0c0c; background: #ff0c0c;
box-shadow: 0px 0px adjust(2px) adjust(2px) rgba(255, 39, 39, 0.5); box-shadow: 0px 0px 4px 4px rgba(255, 39, 39, 0.5);
} }
</style> </style>

View File

@@ -75,10 +75,10 @@ export default {
this.chart = echarts.init(document.getElementById(this.id)); this.chart = echarts.init(document.getElementById(this.id));
this.chart.setOption({ this.chart.setOption({
grid: { grid: {
top: adjust(0), top: 32,
left: adjust(10), left: 64,
bottom: adjust(10), bottom: 64,
right: adjust(0), right: 32,
}, },
xAxis: { xAxis: {
type: "category", type: "category",
@@ -93,10 +93,10 @@ export default {
}, },
axisLabel: { axisLabel: {
color: "#3C4E8B", color: "#3C4E8B",
fontSize: adjust(4), fontSize: 16,
lineHeight: adjust(0), lineHeight: 0,
margin: adjust(4), margin: 16,
rotate: 30, rotate: 45,
}, },
}, },
yAxis: { yAxis: {
@@ -119,8 +119,8 @@ export default {
axisLabel: { axisLabel: {
formatter: "{value} ℃", formatter: "{value} ℃",
color: "#3C4E8B", color: "#3C4E8B",
fontSize: adjust(4), fontSize: 16,
lineHeight: adjust(0), lineHeight: 0,
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {
@@ -132,20 +132,11 @@ export default {
series: [ series: [
{ {
data: this.series, data: this.series,
// Array(24)
// .fill(1)
// .map(() => {
// let v = Math.ceil(Math.random() * 100);
// while (v < 60) {
// v = Math.ceil(Math.random() * 100);
// }
// return v;
// }),
type: "bar", type: "bar",
barWidth: adjust(4), barWidth: 12,
label: { label: {
show: true, show: true,
fontSize: adjust(7), fontSize: 18,
color: "#eee8", color: "#eee8",
position: "topRight", position: "topRight",
rotate: 90, rotate: 90,
@@ -153,11 +144,16 @@ export default {
}, },
itemStyle: { itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: "#A0FF49" }, { offset: 0, color: "#996ef9" },
{ offset: 0.35, color: "#49FF9A" }, { offset: 0.7, color: "#187aff" },
{ offset: 0.7, color: "#49F2FF" },
{ offset: 1, color: "#0D6FFF" }, { offset: 1, color: "#0D6FFF" },
]), ]),
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// { offset: 0, color: "#A0FF49" },
// { offset: 0.35, color: "#49FF9A" },
// { offset: 0.7, color: "#49F2FF" },
// { offset: 1, color: "#0D6FFF" },
// ]),
}, },
}, },
], ],

View File

@@ -1,33 +1,37 @@
<template> <template>
<!-- line chart --> <!-- line chart -->
<div class="line-chart__wrapper"> <div class="line-chart__wrapper">
<div class="line-chart__custom-legend flex" v-if="legend.length"> <div
<!-- <span>产线1 - 产线5</span> --> class="line-chart__custom-legend flex"
<ul style="" class=""> v-if="legend.length"
<li v-for="(v, i) in legend" :key="i">{{ v }}</li> :style="legendWidth"
</ul> >
</div> <!-- <span>产线1 - 产线5</span> -->
<div :id="id" style="width: 100%; height: 100%"></div> <ul :style="gridColumn" class="">
<div <li v-for="(v, i) in legend" :key="i">{{ v }}</li>
v-show="legend.length === 0" </ul>
style=" </div>
position: absolute; <div :id="id" style="width: 100%; height: 100%"></div>
top: 0; <div
left: 0; v-show="legend.length === 0"
background: #eee0; style="
width: 100%; position: absolute;
height: 100%; top: 0;
display: grid; left: 0;
place-items: center; background: #eee0;
font-size: 18px; width: 100%;
letter-spacing: 2px; height: 100%;
color: #3C4E8B; display: grid;
user-select: none; place-items: center;
" font-size: 56px;
> letter-spacing: 2px;
无数据 color: #3c4e8b88;
</div> user-select: none;
</div> "
>
无数据
</div>
</div>
</template> </template>
<script> <script>
@@ -35,9 +39,9 @@ import * as echarts from "echarts/core";
import { LineChart } from "echarts/charts"; import { LineChart } from "echarts/charts";
import { import {
TitleComponent, TitleComponent,
TooltipComponent, TooltipComponent,
GridComponent, GridComponent,
} from "echarts/components"; } from "echarts/components";
import { LabelLayout, UniversalTransition } from "echarts/features"; import { LabelLayout, UniversalTransition } from "echarts/features";
@@ -45,211 +49,226 @@ import { LabelLayout, UniversalTransition } from "echarts/features";
import { CanvasRenderer } from "echarts/renderers"; import { CanvasRenderer } from "echarts/renderers";
echarts.use([ echarts.use([
TitleComponent, TitleComponent,
TooltipComponent, TooltipComponent,
GridComponent, GridComponent,
LineChart, LineChart,
LabelLayout, LabelLayout,
UniversalTransition, UniversalTransition,
CanvasRenderer, CanvasRenderer,
]); ]);
function adjust(v) { function adjust(v) {
return v * 2; return v * 2;
} }
export default { export default {
name: "LineChart", name: "LineChart",
props: { props: {
id: { id: {
type: String, type: String,
default: "line-chart", default: "line-chart",
},
config: {
type: Object,
default: () => ({
title: { text: "default chart" },
}),
},
unit: {
type: String,
default: "单位/m³",
},
legend: {
type: Array,
default: () => [],
},
series: {
type: Object,
default: () => ({}),
},
},
data() {
return {
chart: null,
colors: [
"#18c7f3",
"#FFD160",
"#F31868",
"#30E89A",
"#2760FF",
"#7138FF",
"#F318D8",
"#C0F318",
"#ff7777",
"#1199ff",
"#9988ff",
"#3388ff",
"#337788",
],
data: [],
legendtext: [
"asdfsadf",
"asdfsadf",
"asdfsadf",
"asdfsadf",
"asdfsadf",
"asdfsadf",
"asdfsadf",
"asdfsadf",
],
};
},
mounted() {
this.init();
},
computed: {
legendWidth() {
let w = null;
switch (this.doMath()) {
case 1: w = '55%'; break;
// case 2: w = '75%'; break;
case 2: w = '50%'; break;
// case 3: w = '100%'; break;
}
if (!w) return {};
return {
width: w,
top: w == '50%' ? '-72px' : '-42px'
};
},
gridColumn() {
switch(this.doMath()) {
// case 2: return { 'grid-template-columns': 'repeat(6, 1fr)'}
case 2: return { 'grid-template-columns': 'repeat(4, 1fr)'}
case 3: return { 'grid-template-columns': 'repeat(8, 1fr)'}
}
}
},
watch: {
series: {
deep: true,
handler: function () {
console.log("LineChart: series changed!");
this.init();
},
},
},
methods: {
doMath() {
if (this.legend && Array.isArray(this.legend) && this.legend.length > 0) {
const len = this.legend.length
if (len > 0 && len <= 5) return 1
else if (len > 5 && len <= 10) return 2
else return 3
}
return 0
}, },
config: {
type: Object, updateXAxis() {
default: () => ({ const hour = +new Date().getHours();
title: { text: "default chart" }, return Array(24)
}), .fill(1)
}, .map((_, index) => {
unit: { if (hour - index < 0) {
type: String, return 24 + hour - index + ":00";
default: "单位/m³", }
}, return hour - index + ":00";
legend: { })
type: Array, .reverse();
default: () => [], },
}, init() {
series: { if (!this.chart)
type: Object, this.chart = echarts.init(document.getElementById(this.id));
default: () => ({}), this.chart.setOption({
}, grid: {
}, top: 56,
data() { left: 80,
return { bottom: 64,
chart: null, right: 56,
colors: [ },
"#18c7f3", tooltip: {},
"#FFD160", xAxis: {
"#F31868", data: this.updateXAxis(),
"#30E89A", axisLine: {
"#2760FF", lineStyle: {
"#7138FF", color: "#5982b2a0",
"#F318D8", },
"#C0F318", },
"#ff7777", axisTick: {
"#1199ff", show: true,
"#9988ff", length: 8,
"#3388ff", alignWithLabel: true,
"#337788", lineStyle: {
], width: 3,
data: [], },
legendtext: [ },
"asdfsadf", axisLabel: {
"asdfsadf", color: "#3C4E8Baa",
"asdfsadf", fontSize: 20,
"asdfsadf", lineHeight: 0,
"asdfsadf", margin: 18,
"asdfsadf", rotate: 45,
"asdfsadf", },
"asdfsadf", },
], yAxis: {
}; type: "value",
}, name: this.unit,
mounted() { nameTextStyle: {
this.init(); color: "#3C4E8Baa",
}, fontSize: 20,
watch: { lineHeight: 32,
series: { align: "center",
deep: true, },
handler: function () { axisLine: {
console.log("LineChart: series changed!"); show: true,
this.init(); lineStyle: {
}, // width: 1,
}, color: "#5982b2a0",
}, },
methods: { },
updateXAxis() { axisTick: {
const hour = +new Date().getHours(); show: false,
return Array(24) },
.fill(1) axisLabel: {
.map((_, index) => { color: "#3C4E8Baa",
if (hour - index < 0) { fontSize: 18,
return 24 + hour - index + ":00"; lineHeight: 0,
} },
return hour - index + ":00"; splitLine: {
}) lineStyle: {
.reverse(); color: "#5982b2a0",
}, },
init() { },
if (!this.chart) },
this.chart = echarts.init(document.getElementById(this.id)); color: this.colors,
this.chart.setOption({ series: Array(this.legend.length)
grid: { .fill(1)
top: adjust(22), .map((_, index) => {
left: adjust(22), let lgd = this.legend[index];
bottom: adjust(20), // console.log("series: ", lgd, index, this.series[lgd]);
right: adjust(8), return {
}, name: lgd,
tooltip: {}, type: "line",
xAxis: { symbol: "circle",
data: this.updateXAxis(), symbolSize: adjust(2),
axisLine: { lineStyle: {
lineStyle: { width: adjust(1),
color: "#5982b2a0", },
}, areaStyle: {
}, color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
axisTick: { { offset: 0, color: this.colors[index] + "33" },
show: false, { offset: 1, color: "transparent" },
}, ]),
axisLabel: { },
color: "#3C4E8Baa", data: this.series[lgd],
fontSize: adjust(6), };
lineHeight: adjust(0), }),
margin: adjust(4), });
rotate: 45, },
}, },
},
yAxis: {
type: "value",
name: this.unit,
nameTextStyle: {
color: "#3C4E8Baa",
fontSize: adjust(8),
lineHeight: adjust(12),
align: "center",
},
axisLine: {
show: true,
lineStyle: {
// width: 1,
color: "#5982b2a0",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "#3C4E8Baa",
fontSize: adjust(7),
lineHeight: adjust(0),
},
splitLine: {
lineStyle: {
color: "#5982b2a0",
},
},
// data: [100, 200, 300, 400, 500],
},
color: this.colors,
// series: Array(5)
// .fill(1)
// .map((_, index) => ({
// name: Math.random(),
// type: "line",
// symbol: "circle",
// symbolSize: adjust(3),
// lineStyle: {
// width: adjust(1),
// },
// areaStyle: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// { offset: 0, color: this.colors[index] + "33" },
// { offset: 1, color: "transparent" },
// ]),
// },
// data: Array(31)
// .fill(1)
// .map(() => {
// let v = Math.floor(Math.random() * 5000);
// while (v < 3000) v = Math.floor(Math.random() * 5000);
// return v;
// }),
// })),
series: Array(this.legend.length)
.fill(1)
.map((_, index) => {
let lgd = this.legend[index];
// console.log("series: ", lgd, index, this.series[lgd]);
return {
name: lgd,
type: "line",
symbol: "circle",
symbolSize: adjust(2),
lineStyle: {
width: adjust(1),
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: this.colors[index] + "33" },
{ offset: 1, color: "transparent" },
]),
},
data: this.series[lgd],
};
}),
});
},
},
}; };
</script> </script>
@@ -257,119 +276,116 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
::-webkit-scrollbar { ::-webkit-scrollbar {
// display: none; height: adjust(2px);
height: adjust(2px);
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
height: adjust(2px); height: adjust(2px);
border-radius: adjust(2px); border-radius: adjust(2px);
background: #ccc3; background: #ccc3;
}
// ::-webkit-scrollbar-track {
// height: adjust(1px);
// background: blue;
// }
ul,
li {
margin: 0;
padding: 0;
list-style: none;
min-width: adjust(20px);
}
ul {
// background: #0005;
width: 100%;
height: adjust(14px);
white-space: pre-wrap;
padding-bottom: 0;
padding-left: adjust(6px);
display: grid;
grid-template-columns: repeat(5, 1fr);
column-gap: 6px;
// column-span: none;
justify-items: end;
align-items: end;
}
li {
padding-left: adjust(1px);
position: relative;
// background: #f003;
user-select: none;
}
.line-chart__custom-legend {
position: absolute;
top: adjust(-20px);
right: 0;
font-size: adjust(5px);
font-family: Ubuntu, sans-serif;
padding: 0;
// max-width: 100%;
width: 75%;
align-items: flex-end;
justify-content: flex-end;
}
li::before {
content: "";
position: absolute;
top: adjust(.5px);
left: adjust(-5px);
width: adjust(5px);
height: adjust(5px);
border-radius: adjust(1px);
background: #eee6;
}
li:nth-child(1)::before {
background: #18c7f3;
}
li:nth-child(2)::before {
background: #ffd160;
}
li:nth-child(3)::before {
background: #f31868;
}
li:nth-child(4)::before {
background: #30e89a;
}
li:nth-child(5)::before {
background: #2760ff;
}
li:nth-child(6)::before {
background: #7138FF;
}
li:nth-child(7)::before {
background: #F318D8;
}
li:nth-child(8)::before {
background: #C0F318;
}
li:nth-child(9)::before {
background: #f77;
}
li:nth-child(10)::before {
background: #19f;
}
li:nth-child(11)::before {
background: #98f;
}
li:nth-child(12)::before {
background: #38f;
} }
.line-chart__wrapper { .line-chart__wrapper {
position: relative; position: relative;
background: #3564ff0f; background: #3564ff0f;
border-radius: adjust(4px); border-radius: 12px;
backdrop-filter: blur(adjust(2px)); backdrop-filter: 2px;
box-shadow: inset 0 0 adjust(10px) adjust(2px) rgba($color: #fff, $alpha: 0.1); box-shadow: inset 0 0 12px 4px rgba($color: #fff, $alpha: 0.1);
height: 100%; height: 96%;
width: adjust(1px); width: 1px;
}
.line-chart__custom-legend {
position: absolute;
top: -42px;
right: 18px;
font-family: Ubuntu, sans-serif;
font-size: 28px;
line-height: 1;
padding: 0;
color: #3b4d87;
// width: 75%;
width: 55%;
align-items: flex-end;
justify-content: flex-end;
}
ul,
li {
margin: 0;
padding: 0;
list-style: none;
min-width: 20px;
}
ul {
// background: #0005;
width: 100%;
height: 32px;
line-height: 32px;
white-space: pre-wrap;
padding-bottom: 0;
padding-left: 12px;
display: grid;
grid-template-columns: repeat(5, 1fr);
column-gap: 12px;
// column-span: none;
justify-items: end;
align-items: end;
}
li {
padding-left: 12px;
position: relative;
// background: #f003;
user-select: none;
}
li::before {
content: "";
position: absolute;
top: 4px;
left: -20px;
width: 24px;
height: 24px;
border-radius: 4px;
background: #eee6;
}
li:nth-child(1)::before {
background: #18c7f3;
}
li:nth-child(2)::before {
background: #ffd160;
}
li:nth-child(3)::before {
background: #f31868;
}
li:nth-child(4)::before {
background: #30e89a;
}
li:nth-child(5)::before {
background: #2760ff;
}
li:nth-child(6)::before {
background: #7138ff;
}
li:nth-child(7)::before {
background: #f318d8;
}
li:nth-child(8)::before {
background: #c0f318;
}
li:nth-child(9)::before {
background: #f77;
}
li:nth-child(10)::before {
background: #19f;
}
li:nth-child(11)::before {
background: #98f;
}
li:nth-child(12)::before {
background: #38f;
} }
</style> </style>

View File

@@ -59,38 +59,38 @@ export default {
flex-shrink: 0; flex-shrink: 0;
padding: 0; padding: 0;
user-select: none; user-select: none;
width: adjust(w(820px)); width: 744px;
height: adjust(h(350px)); height: 366px;
display: flex; display: flex;
background: url(../../assets/top-middle.png) no-repeat; background: url(../../assets/top-middle.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
background-position: bottom; background-position: bottom;
.icon { .icon {
margin-top: adjust(h(56px)); margin-top: 48px;
margin-left: adjust(w(24px)); margin-left: 48px;
width: adjust(h(172px)); width: 172px;
height: adjust(h(172px)); height: 172px;
} }
.info { .info {
margin-top: adjust(h(56px)); margin-top: 56px;
flex: 1 auto; flex: 1 auto;
font-family: "微软雅黑", sans-serif; font-family: "微软雅黑", sans-serif;
padding-left: adjust(5px); padding-left: 12px;
h2 { h2 {
font-size: adjust(12px); font-size: 54px;
line-height: 48px;
opacity: 0.7; opacity: 0.7;
letter-spacing: adjust(1px); letter-spacing: 2px;
font-weight: 400; font-weight: 400;
color: hsla(0, 0%, 0%, 0.9); color: hsla(0, 0%, 0%, 0.9);
} }
.value { .value {
color: #030609; color: #030609;
font-size: adjust(18px); font-size: 96px;
line-height: adjust(22px); line-height: 98px;
} }
} }
} }

View File

@@ -1,12 +1,12 @@
<template> <template>
<section class="data-group absolute"> <section class="data-group">
<OilFlow /> <OilFlow />
<GasFlow /> <GasFlow />
<TopTemp /> <TopTemp />
<BottomTemp /> <BottomTemp />
<OilFlow /> <XicaoTemp />
<FanRuntime /> <FanRuntime />
</section> </section>
</template> </template>
<script> <script>
@@ -15,24 +15,26 @@ import GasFlow from "../boxes/GasFlow.vue";
import TopTemp from "../boxes/TopTemp.vue"; import TopTemp from "../boxes/TopTemp.vue";
import BottomTemp from "../boxes/BottomTemp.vue"; import BottomTemp from "../boxes/BottomTemp.vue";
import FanRuntime from "../boxes/FanRuntime.vue"; import FanRuntime from "../boxes/FanRuntime.vue";
import XicaoTemp from '../boxes/XicaoTemp.vue';
// import { mapState } from "vuex"; // import { mapState } from "vuex";
export default { export default {
name: "DataGroup", name: "DataGroup",
props: {}, props: {},
components: { components: {
FanRuntime, FanRuntime,
OilFlow, OilFlow,
GasFlow, GasFlow,
TopTemp, TopTemp,
BottomTemp, BottomTemp,
}, XicaoTemp
data() { },
return {}; data() {
}, return {};
computed: { },
// ...mapState(["kilnWaterIn", "waterInTemp"]), computed: {
}, // ...mapState(["kilnWaterIn", "waterInTemp"]),
},
}; };
</script> </script>
@@ -40,32 +42,30 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
section { section {
background: url('../../assets/middle-under.png') left 110px top 4px / 380px 22px no-repeat; // background: url('../../assets/middle-under.png') left 110px top 4px / 380px 22px no-repeat;
width: adjust(w(13700px)); // background: rgba(124, 63, 238, 0.722);
height: adjust(h(830px)); width: 100%;
// width: adjust(w(13500px)); position: absolute;
// height: adjust(h(960px)); bottom: 0;
position: absolute;
top: adjust(h(3390px));
// top: adjust(h(3265px));
left: adjust(w(3700px));
}
section::before {
content: '数据组';
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
font-size: adjust(h(64px));
font-weight: 400;
letter-spacing: 1px;
position: absolute;
color: $main-color;
top: 0;
left: 0; left: 0;
display: flex;
justify-content: space-around;
align-items: flex-end;
padding: 24px;
} }
.data-group { // section::before {
display: flex; // // content: "数据组";
justify-content: space-between; // content: "";
align-items: flex-end; // font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
} // Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
// "微软雅黑", Arial, Helvetica, sans-serif;
// font-size: adjust(h(64px));
// font-weight: 400;
// letter-spacing: 1px;
// position: absolute;
// color: $main-color;
// top: 0;
// left: 0;
// }
</style> </style>

View File

@@ -1,22 +1,20 @@
<template> <template>
<section class="environ-analysis"> <section class="environ-analysis"></section>
</section>
</template> </template>
<script> <script>
// import { mapState } from "vuex"; // import { mapState } from "vuex";
export default { export default {
name: "EnviroAnalysis", name: "EnviroAnalysis",
props: {}, props: {},
components: {}, components: {},
data() { data() {
return {}; return {};
}, },
computed: { computed: {
// ...mapState(["kilnWaterIn", "waterInTemp"]), // ...mapState(["kilnWaterIn", "waterInTemp"]),
}, },
}; };
</script> </script>
@@ -24,24 +22,38 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
section { section {
background: url('../../assets/fault-analysis.png') left 144px top 4px / 79% 54% no-repeat, #ccc7; width: 1920px;
width: adjust(w(1900px)); height: 1080px;
height: adjust(h(1260px)); position: absolute;
position: absolute; top: 490px;
top: adjust(h(430px)); right: 0;
// left: adjust(w(15300px)); background: #ccc3;
left: adjust(w(15500px));
} }
section::before { section::before {
content: '环境浓度'; content: "环境浓度";
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
font-size: adjust(h(64px)); Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
font-weight: 400; "微软雅黑", Arial, Helvetica, sans-serif;
letter-spacing: 1px; font-size: 80px;
position: absolute; font-weight: 400;
color: $main-color; letter-spacing: 2px;
top: 0; position: absolute;
left: 0; color: $main-color;
top: -128px;
left: 0;
}
section::after {
content: "";
display: inline-block;
width: 100%;
height: 100%;
background: url("../../assets/fault-analysis.png") left 360px top 18px / 90%
no-repeat;
position: absolute;
color: $main-color;
top: -128px;
left: 0;
} }
</style> </style>

View File

@@ -1,22 +1,20 @@
<template> <template>
<section class="fault-analysis"> <section class="fault-analysis"></section>
</section>
</template> </template>
<script> <script>
// import { mapState } from "vuex"; // import { mapState } from "vuex";
export default { export default {
name: "FaultAnalysis", name: "FaultAnalysis",
props: {}, props: {},
components: {}, components: {},
data() { data() {
return {}; return {};
}, },
computed: { computed: {
// ...mapState(["kilnWaterIn", "waterInTemp"]), // ...mapState(["kilnWaterIn", "waterInTemp"]),
}, },
}; };
</script> </script>
@@ -24,23 +22,39 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
section { section {
background: url('../../assets/fault-analysis.png') left 144px top 4px / 79% 54% no-repeat, #ccc7; width: 1920px;
width: adjust(w(1900px)); height: 1080px;
height: adjust(h(1260px)); position: absolute;
position: absolute; // top: 452px;
top: adjust(h(430px)); top: 490px;
left: adjust(w(3700px)); left: 0;
background: #ccc3;
} }
section::before { section::before {
content: '缺陷分析'; content: "缺陷分析";
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
font-size: adjust(h(64px)); Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
font-weight: 400; "微软雅黑", Arial, Helvetica, sans-serif;
letter-spacing: 1px; font-size: 80px;
position: absolute; font-weight: 400;
color: $main-color; letter-spacing: 1px;
top: 0; color: $main-color;
left: 0; position: absolute;
top: -128px;
left: 0;
}
section::after {
content: "";
display: inline-block;
width: 110%;
height: 100%;
position: absolute;
top: -128px;
left: 0;
background: url("../../assets/fault-analysis.png") no-repeat;
background-position: 356px 20px;
background-size: 78%;
} }
</style> </style>

View File

@@ -24,7 +24,7 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
section { section {
background: url('../../assets/monitor-group.png') left 144px top 4px / 1152px 80% no-repeat, #ccc7; // background: url('../../assets/monitor-group.png') left 144px top 4px / 1152px 80% no-repeat, #ccc7;
width: adjust(w(3570px)); width: adjust(w(3570px));
height: adjust(h(3790px)); height: adjust(h(3790px));
position: absolute; position: absolute;
@@ -33,7 +33,8 @@ section {
} }
section::before { section::before {
content: '监控组 1'; // content: '监控组 1';
content: '';
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
font-size: adjust(h(64px)); font-size: adjust(h(64px));
font-weight: 400; font-weight: 400;

View File

@@ -24,25 +24,27 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
section { section {
background: url('../../assets/middle1.png') left 144px top 4px / 97% 420px no-repeat, #ccc7; // background: rgba(47, 203, 255, 0.225);
width: adjust(w(13700px)); width: 100%;
height: adjust(h(1600px)); // height: 1178px;
// width: adjust(w(13500px)); height: 1469px;
// height: adjust(h(1470px));
position: absolute; position: absolute;
top: adjust(h(1740px)); // bottom: 690px;
left: adjust(w(3700px)); // top: 2160px;
} top: 1570px;
section::before {
content: '监控组 2';
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
font-size: adjust(h(64px));
font-weight: 400;
letter-spacing: 1px;
position: absolute;
color: $main-color;
top: 0;
left: 0; left: 0;
} }
// section::before {
// // content: '监控组 2';
// content: '';
// font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
// font-size: adjust(h(64px));
// font-weight: 400;
// letter-spacing: 1px;
// position: absolute;
// color: $main-color;
// top: 0;
// left: 0;
// }
</style> </style>

View File

@@ -1,7 +1,5 @@
<template> <template>
<svg <svg
:width="adjust('64px')"
:height="adjust('64px')"
viewBox="0 0 95 96" viewBox="0 0 95 96"
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@@ -1,7 +1,5 @@
<template> <template>
<svg <svg
:width="adjust('46px')"
:height="adjust('46px')"
viewBox="0 0 96 96" viewBox="0 0 96 96"
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@@ -1,7 +1,5 @@
<template> <template>
<svg <svg
:width="adjust('46px')"
:height="adjust('46px')"
viewBox="0 0 95 96" viewBox="0 0 95 96"
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@@ -1,7 +1,5 @@
<template> <template>
<svg <svg
:width="adjust('46px')"
:height="adjust('46px')"
viewBox="0 0 122 122" viewBox="0 0 122 122"
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@@ -1,7 +1,5 @@
<template> <template>
<svg <svg
:width="adjust('46px')"
:height="adjust('46px')"
viewBox="0 0 94 96" viewBox="0 0 94 96"
version="1.1" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@@ -1,21 +1,31 @@
<template> <template>
<DragabbleContainer class="isolate-area-1"> <DragabbleContainer class="isolate-area-1">
<div class="data pressure"> <div class="data pressure">
<span></span> <span></span>
<span></span> <span></span>
<span v-for="press, index in pressure" :key="index" <span
:class="{ 'digit': true, 'dot': press == '.' ? true : false }">{{ press v-for="(press, index) in pressure"
}}</span> :key="index"
<span>Pa</span> :class="{ digit: true, dot: press == '.' ? true : false }"
</div> >{{ press }}</span
<SmallBox2 class="data-center" v-for="rd in rdata" :key="rd.icon" :icon="rd.icon" :title="rd.title" :value="rd.value"></SmallBox2> >
<div class="data runtime"> <span>Pa</span>
</div>
<SmallBox2
class="data-center"
v-for="rd in rdata"
:key="rd.icon"
:icon="rd.icon"
:title="rd.title"
:value="rd.value"
></SmallBox2>
<!-- <div class="data runtime">
<span></span> <span></span>
<span></span> <span></span>
<span v-for="val, index in runtime" :key="index" :class="{ 'digit': true, 'dot': press == '.' ? true : false }">{{ val }}</span> <span v-for="val, index in runtime" :key="index" :class="{ 'digit': true, 'dot': press == '.' ? true : false }">{{ val }}</span>
<span></span> <span></span>
</div> </div> -->
</DragabbleContainer> </DragabbleContainer>
</template> </template>
<script> <script>
@@ -23,50 +33,53 @@ import DragabbleContainer from "../layout/DragableContainer.vue";
import SmallBox2 from "../common/SmallBox2.vue"; import SmallBox2 from "../common/SmallBox2.vue";
import { mapState } from "vuex"; import { mapState } from "vuex";
let timeFun = null let timeFun = null;
export default { export default {
name: "IsolateArea--1", name: "IsolateArea--1",
components: { DragabbleContainer, SmallBox2 }, components: { DragabbleContainer, SmallBox2 },
data() { data() {
return { return {
pressure: '10.1'.split(''), pressure: "10.1".split(""),
runtime: '0012'.split(''), runtime: "0012".split(""),
rdata: [ rdata: [
// { icon: "temp", title: "车间温度", value: "27℃" }, // { icon: "temp", title: "车间温度", value: "27℃" },
{ icon: "fire", title: "当前火向", value: "" }, { icon: "fire", title: "当前火向", value: "" },
{ icon: "clock", title: "换火时间", value: "20分" }, { icon: "clock", title: "换火时间", value: "20分" },
{ icon: "sand", title: "剩余时间", value: "19分20秒" }, { icon: "sand", title: "剩余时间", value: "19分20秒" },
], ],
}; };
}, },
watch: { watch: {
fireDirection: function (val) { fireDirection: function (val) {
this.$set(this.rdata[0], 'value', val) this.$set(this.rdata[0], "value", val);
}, },
fireChangeTime: function (val) { fireChangeTime: function (val) {
this.$set(this.rdata[1], 'value', val) this.$set(this.rdata[1], "value", val);
}, },
lastFireChangeTime: function (val) { lastFireChangeTime: function (val) {
let [_, min, sec] = /(\d+)分(\d+)秒/.exec(val || '0分0秒') let [_, min, sec] = /(\d+)分(\d+)秒/.exec(val || "0分0秒");
if (timeFun) clearInterval(timeFun) if (timeFun) clearInterval(timeFun);
timeFun = setInterval(() => { timeFun = setInterval(() => {
if (sec > 0) sec -= 1 if (sec > 0) sec -= 1;
else { else {
if (min > 0) { if (min > 0) {
sec = 59 sec = 59;
min -= 1 min -= 1;
} else { } else {
if (timeFun) clearInterval(timeFun) if (timeFun) clearInterval(timeFun);
} }
} }
this.$set(this.rdata[2], 'value', `${min}${sec}`) this.$set(this.rdata[2], "value", `${min}${sec}`);
}, 1000) }, 1000);
}, },
}, kilnPressure: function(val) {
computed: { this.pressure = val.split("")
...mapState(["fireDirection", "lastFireChangeTime", "fireChangeTime"]), }
}, },
computed: {
...mapState(["fireDirection", "lastFireChangeTime", "fireChangeTime", "kilnPressure"]),
},
}; };
</script> </script>
@@ -74,43 +87,44 @@ export default {
@import "../../assets/styles/functions"; @import "../../assets/styles/functions";
.isolate-area-1 { .isolate-area-1 {
display: flex; display: flex;
color: $main-color; color: $main-color;
min-width: 300px; min-width: 300px;
align-items: center; align-items: flex-end;
> *:not(:last-child) { > *:not(:last-child) {
margin: { margin: {
right: adjust(10px); right: 128px;
} }
} }
> .data { > .data {
flex-shrink: 0; flex-shrink: 0;
font-family: zcoolqingkehuangyouti-Regular, sans-serif; font-family: zcoolqingkehuangyouti-Regular, sans-serif;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
} }
> .data > span:not(.dot) { > .data > span:not(.dot) {
/** 边框 */ /** 边框 */
background: url('../../assets/digitbox1.png') no-repeat; background: url("../../assets/digitbox1.png") no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
display: inline-block; display: inline-block;
width: adjust(w(220px)); width: 228px;
height: adjust(h(260px)); height: 299px;
color: #0068ffaa; color: #0068ffaa;
font-size: h(200px); font-size: 142px;
line-height: h(600px); line-height: 328px;
text-align: center; text-align: center;
vertical-align: bottom; vertical-align: bottom;
} user-select: none;
}
> .data > span.digit {
/** 数字字体大小 */ > .data > span.digit {
color: #0071ff; /** 数字字体大小 */
font-size: h(360px); color: #0071ff;
line-height: h(540px); font-size: 242px;
} line-height: 286px;
}
} }
</style> </style>

View File

@@ -0,0 +1,78 @@
<template>
<div class="data runtime">
<span></span>
<span></span>
<span
v-for="(val, index) in runtime"
:key="index"
:class="{ digit: true, dot: val == '.' ? true : false }"
>{{ val }}</span
>
<span></span>
</div>
</template>
<script>
export default {
name: "RuntimeComp",
props: {},
data() {
return {
runtime: "0012".split(""),
};
},
mounted() {
this.getRuntime();
setInterval(this.getRuntime, 1000 * 60 * 60);
},
methods: {
getRuntime() {
const diff = Date.now() - new Date("2023-5-7 8:00:00");
const days = parseInt(diff / 1000 / 60 / 60 / 24);
const hours = parseInt(
(diff - days * 24 * 60 * 60 * 1000) / 1000 / 60 / 60
);
console.log("days", days);
this.runtime = (days + "").padStart(4, "0");
},
},
};
</script>
<style scoped lang="scss">
@import "../../assets/styles/functions";
.runtime {
width: 1920px;
}
.data {
padding: 0 32px;
font-family: zcoolqingkehuangyouti-Regular, sans-serif;
display: flex;
align-items: center;
justify-content: space-between;
}
.data > span:not(.dot) {
/** 边框 */
background: url("../../assets/digitbox1.png") no-repeat;
background-size: 100% 100%;
display: inline-block;
width: 280px;
height: 360px;
color: #0068ffaa;
font-size: 160px;
line-height: 380px;
text-align: center;
vertical-align: bottom;
user-select: none;
}
.data > span.digit {
/** 数字字体大小 */
color: #0071ff;
font-size: 280px;
line-height: 350px;
}
</style>

View File

@@ -27,14 +27,14 @@ export default {
cls: { cls: {
// 'NumberOrDate': {}, // 'NumberOrDate': {},
NumberOrDate: "number-or-date", NumberOrDate: "number-or-date",
Table: 'tables', Table: "tables",
Charts: 'charts', Charts: "charts",
NumberAndChart: 'number-and-chart', NumberAndChart: "number-and-chart",
}, },
}; };
}, },
created() { }, created() {},
mounted() { }, mounted() {},
methods: {}, methods: {},
}; };
</script> </script>
@@ -50,22 +50,20 @@ export default {
.tables { .tables {
display: inline-block; display: inline-block;
// width: adjust(w(1115px)); width: 1145px;
width: adjust(w(1400px)); height: 618px;
height: adjust(h(700px));
background: url(../../assets/box-table.png); background: url(../../assets/box-table.png);
background-position: 0 0; background-position: 0 0;
/** top left */
background-size: 100% 100%; background-size: 100% 100%;
} }
.charts { .charts {
display: inline-block; display: inline-block;
width: adjust(w(2440px)); height: 618px;
height: adjust(h(700px)); width: 2452px;
// width: 2400px;
background: url(../../assets/box-chart.png); background: url(../../assets/box-chart.png);
background-position: 0 0; background-position: 0 0;
/** top left */
background-size: 100% 100%; background-size: 100% 100%;
} }
@@ -75,4 +73,4 @@ export default {
height: adjust(h(931px)); height: adjust(h(931px));
background: url(../../assets/box-right.png) 0 0 / 100% 100% no-repeat; background: url(../../assets/box-right.png) 0 0 / 100% 100% no-repeat;
} }
</style> </style>

View File

@@ -10,9 +10,7 @@
设计单位: 中建材智能自动化研究院 设计单位: 中建材智能自动化研究院
</span> </span>
<span class="header--wing absolute datetime"> <span class="header--wing absolute datetime">
{{ moment(today).format('YYYY.M.D dddd') }} {{ moment(today).format('YYYY.M.D dddd') }}&nbsp;{{ moment(today).format('HH:mm:ss') }}
&nbsp;&nbsp;
{{ moment(today).format('HH:mm:ss') }}
</span> </span>
</header> </header>
</template> </template>
@@ -70,33 +68,31 @@ export default {
@import "../../assets/styles/variables"; @import "../../assets/styles/variables";
header { header {
background: url(../../assets/header.png) center / 65% 100% no-repeat; width: 100%;
// background-size: 100% 100%; height: 628px;
// background-size: 13515px 634px; background: url(../../assets/header.png) no-repeat;
// background-position: bottom;
height: adjust(h(580px));
width: adjust(w(21120px));
display: grid; display: grid;
place-items: center; place-items: center;
// padding-bottom: adjust(2px);
>div { >div {
margin-left: 378px;
margin-bottom: 72px;
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: adjust(10px);
margin-left: adjust(64px);
.header--logo { .header--logo {
width: adjust(128px); width: 648px;
height: adjust(h(337px)); height: 337px;
margin-right: 96px;
background: url(../../assets/logo.png) center/contain no-repeat; background: url(../../assets/logo.png) center/contain no-repeat;
} }
h1 { h1 {
margin-left: adjust(20px); font-size: 220px;
font-size: adjust(42px); line-height: 330px;
margin: 0;
letter-spacing: 36px;
user-select: none; user-select: none;
letter-spacing: adjust(6px);
font-weight: 600; font-weight: 600;
color: $main-color; color: $main-color;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
@@ -105,34 +101,25 @@ header {
} }
.header--wing { .header--wing {
top: adjust(h(128px)); top: 138px;
left: 0; left: 0;
bottom: adjust(10px); line-height: 130px;
height: adjust(h(130px)); font-size: 130px;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif;
} }
.company { .company {
margin-left: adjust(w(4035px)); left: 240px;
height: adjust(h(130px));
// font-weight: 600;
text-align: center; text-align: center;
color: lighten($main-color, 8); color: lighten($main-color, 8);
font-size: adjust(h(90px));
letter-spacing: unset;
// background: red;
// width: adjust(w(1320px));
// background: url("../../assets/company.png") center/cover no-repeat;
} }
.datetime { .datetime {
left: unset;
right: 240px;
color: $main-color; color: $main-color;
font-size: adjust(h(90px));
text-align: center; text-align: center;
margin-left: adjust(w(15420px));
color: lighten($main-color, 8); color: lighten($main-color, 8);
height: adjust(h(130px)); font-size: 140px;
// width: adjust(w(1764px));
// background: url("../../assets/date.png") center/cover no-repeat;
} }
</style> </style>

View File

@@ -1,8 +1,5 @@
<template> <template>
<main class=""> <main class="relative">
<!-- 监控组 -->
<MonitorGroup />
<!-- 缺陷分析 --> <!-- 缺陷分析 -->
<FaultAnalysis /> <FaultAnalysis />
@@ -12,19 +9,28 @@
<!-- 监控组 2 --> <!-- 监控组 2 -->
<MonitorGroup2 /> <MonitorGroup2 />
<!-- 监控组 3 -->
<MonitorGroup3 />
<!-- 数据组 --> <!-- 数据组 -->
<DataGroup /> <DataGroup />
<div class="video-crash" v-if="false"></div> <div class="video-crash" v-if="false"></div>
<div class="eq-main absolute"> <div class="eq-main absolute">
<div class="arrow ar-top-left" :class="topLeftArrowRolling === '运行' ? 'ar-running' : ''"></div> <div
<div class="arrow ar-top-right" :class="topRightArrowRolling === '运行' ? 'ar-running' : ''"></div> class="arrow ar-top-left"
<div class="arrow ar-bottom-left" :class="bottomLeftArrowRolling === '运行' ? 'ar-running' : ''"></div> :class="bottomLeftArrowRolling === '运行' ? 'ar-running' : ''"
<div class="arrow ar-bottom-right" :class="bottomRightArrowRolling === '运行' ? 'ar-running' : ''"></div> ></div>
<div
class="arrow ar-top-right"
:class="topRightArrowRolling === '运行' ? 'ar-running' : ''"
></div>
<div
class="arrow ar-bottom-left"
:class="bottomLeftArrowRolling === '运行' ? 'ar-running' : ''"
></div>
<div
class="arrow ar-bottom-right"
:class="bottomRightArrowRolling === '运行' ? 'ar-running' : ''"
></div>
<div class="swd onekb"> <div class="swd onekb">
<div class="swd-box"> <div class="swd-box">
@@ -51,70 +57,59 @@
</div> </div>
</div> </div>
<div class="video-bottom--wrapper" v-show="true || fireDirection === '北火'" style=""> <div
<video class="video-bottom" id="1" preload="auto" height="130" muted autoplay loop disablepictureinpicture class="video-bottom--wrapper"
src="../../assets/videos/fire-to-top.mp4"></video> v-show="fireDirection === '北火'"
style=""
>
<video
class="video-bottom"
id="1"
preload="auto"
height=""
muted
autoplay
loop
disablepictureinpicture
src="../../assets/videos/fire-to-top.mp4"
></video>
</div> </div>
<div class="video-top--wrapper" v-show="true || fireDirection === '南火'" style=""> <div
<video id="2" class="video-top" preload="auto" height="130" muted autoplay loop disablepictureinpicture class="video-top--wrapper"
src="../../assets/videos/fire-to-bottom.mp4"></video> v-show="fireDirection === '南火'"
style=""
>
<video
id="2"
class="video-top"
preload="auto"
height=""
muted
autoplay
loop
disablepictureinpicture
src="../../assets/videos/fire-to-bottom.mp4"
></video>
</div> </div>
</div> </div>
<AreaOne class="area-one" /> <AreaOne class="area-one" />
<Runtime class="runtime" />
<!-- <div class="absolute left kiln-runtime">
<KilnRuntime />
</div>
<div class="absolute left kiln-pressure">
<KilnPressure />
</div>
<div class="absolute left fan-runtime">
<FanRuntime />
</div>
<div class="absolute left oil-flow">
<OilFlow />
</div>
<div class="absolute left gas-flow">
<GasFlow />
</div>
<div class="absolute left top-temp">
<TopTemp />
</div>
<div class="absolute left bottom-temp">
<BottomTemp />
</div>
<div class="absolute left ou-temp">
<XicaoTemp />
</div> -->
<InWater /> <InWater />
<OutWater /> <OutWater />
</main> </main>
</template> </template>
<script> <script>
// import KilnRuntime from "../boxes/KilnRuntime.vue";
// import KilnPressure from "../boxes/KilnPressure.vue";
// import OilFlow from "../boxes/OilFlow.vue";
// import GasFlow from "../boxes/GasFlow.vue";
// import TopTemp from "../boxes/TopTemp.vue";
// import BottomTemp from "../boxes/BottomTemp.vue";
// import XicaoTemp from "../boxes/XicaoTemp.vue";
import InWater from "../boxes/InWater.vue"; import InWater from "../boxes/InWater.vue";
import OutWater from "../boxes/OutWater.vue"; import OutWater from "../boxes/OutWater.vue";
// import FanRuntime from "../boxes/FanRuntime.vue";
import AreaOne from "../isolate-area-1/Area.vue"; import AreaOne from "../isolate-area-1/Area.vue";
import MonitorGroup from '../groups/monitor.vue' import Runtime from "../isolate-area-1/Runtime.vue";
import MonitorGroup2 from '../groups/monitor2.vue' import MonitorGroup2 from "../groups/monitor2.vue";
import MonitorGroup3 from '../groups/monitor3.vue' import DataGroup from "../groups/data.vue";
import DataGroup from '../groups/data.vue' import FaultAnalysis from "../groups/fault.vue";
import FaultAnalysis from '../groups/fault.vue' import Environ from "../groups/environ.vue";
import Environ from '../groups/environ.vue'
// import Container from './Container.vue'
import { mapMutations, mapState } from "vuex"; import { mapMutations, mapState } from "vuex";
import WsClient from "../../utils/wsClass"; import WsClient from "../../utils/wsClass";
@@ -122,21 +117,12 @@ import WsClient from "../../utils/wsClass";
export default { export default {
name: "Main", name: "Main",
components: { components: {
Runtime,
DataGroup, DataGroup,
MonitorGroup,
MonitorGroup2, MonitorGroup2,
MonitorGroup3,
Environ, Environ,
FaultAnalysis, FaultAnalysis,
AreaOne, AreaOne,
// KilnRuntime,
// KilnPressure,
// FanRuntime,
// OilFlow,
// GasFlow,
// TopTemp,
// BottomTemp,
// XicaoTemp,
InWater, InWater,
OutWater, OutWater,
}, },
@@ -154,7 +140,7 @@ export default {
"onekb", "onekb",
"twokb", "twokb",
"onesp", "onesp",
"twosp" "twosp",
]), ]),
mounted() { mounted() {
const wsc = new WsClient(this); const wsc = new WsClient(this);
@@ -179,13 +165,19 @@ main {
.area-one { .area-one {
position: absolute; position: absolute;
top: adjust(150px); top: 124px;
left: adjust(1310px); left: 3910px;
}
.runtime {
position: absolute;
top: 0;
right: 0;
} }
.video-crash { .video-crash {
height: adjust(h(424px)); height: 640px;
width: adjust(w(800px)); background: #fcc2;
// background: url(../../assets/tv.png) no-repeat; // background: url(../../assets/tv.png) no-repeat;
background-size: 100%; background-size: 100%;
display: inline-block; display: inline-block;
@@ -196,25 +188,25 @@ main {
.video-bottom { .video-bottom {
position: absolute; position: absolute;
bottom: adjust(207px); bottom: 400px;
left: adjust(29px); left: 268px;
transform: scale(0.95); transform: scale(1.25, 1.15);
} }
.video-top { .video-top {
position: absolute; position: absolute;
top: adjust(35px); top: 250px;
left: adjust(38px); left: 320px;
transform: scale(0.95, 0.9); transform: scale(1.25);
} }
.arrow { .arrow {
width: adjust(12px);
height: adjust(12px);
display: inline-block; display: inline-block;
width: 64px;
height: 64px;
border-radius: 100%;
position: absolute; position: absolute;
background: #ff5757; background: #ff5757;
border-radius: adjust(10px);
} }
.arrow.ar-running { .arrow.ar-running {
@@ -222,53 +214,56 @@ main {
} }
.ar-top-right { .ar-top-right {
top: 66px; top: 190px;
left: 38px; left: 110px;
} }
.ar-top-left { .ar-top-left {
top: 88px; top: 200px;
left: 515px; left: 1480px;
} }
.ar-bottom-left { .ar-bottom-left {
top: 232px; top: 700px;
left: 500px; left: 1430px;
} }
.ar-bottom-right { .ar-bottom-right {
top: 258px; top: 720px;
left: 14px; left: 40px;
} }
.swd { .swd {
// background-size: 100% 10px; // background-size: 100% 10px;
width: adjust(w(376px)); width: 350px;
height: adjust(h(218px)); height: 202px;
position: absolute; position: absolute;
transform: rotateY(180deg); transform: rotateY(180deg);
p { p {
margin: 0; margin: 0;
color: #0008; color: #000;
margin-top: adjust(8px); margin-top: 16px;
} }
.swd-box { .swd-box {
margin-left: adjust(8px); margin-left: 54px;
font-size: adjust(8px); margin-top: 44px;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, "微软雅黑", Arial, Helvetica, sans-serif; font-size: 30px;
letter-spacing: 2px;
color: #000;
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
"微软雅黑", Arial, Helvetica, sans-serif;
.swd-value { .swd-value {
color: #ff2020; color: #ff2020;
margin-top: adjust(3px); margin-top: 12px;
font-size: adjust(14px); font-size: 64px;
overflow: hidden; overflow: hidden;
/*超出部分隐藏*/
white-space: nowrap; white-space: nowrap;
/*禁止换行*/
text-overflow: ellipsis; text-overflow: ellipsis;
/*省略号*/ font-weight: 700;
} }
} }
} }
@@ -279,13 +274,13 @@ main {
} }
.onekb { .onekb {
top: adjust(158px); top: 760px;
left: adjust(180px) left: 1560px;
} }
.onesp { .onesp {
top: adjust(135px); top: 860px;
left: adjust(275px) left: 1100px;
} }
.twokb, .twokb,
@@ -294,22 +289,22 @@ main {
} }
.twokb { .twokb {
top: adjust(-10px); top: 72px;
left: adjust(188px) left: 1580px;
} }
.twosp { .twosp {
top: adjust(6px); top: -32px;
left: adjust(275px) left: 1080px;
} }
.eq-main { .eq-main {
width: adjust(w(8800px)); width: 9162px;
height: adjust(h(1400px)); height: 1178px;
background: url(../../assets/eq.png) no-repeat; background: url(../../assets/eq.png) no-repeat;
background-size: 100%; background-size: 100%;
top: adjust(h(220px)); top: 256px;
left: adjust(w(6600px)); left: 2172px;
position: relative; position: relative;
transform: rotateY(0.5turn); transform: rotateY(0.5turn);
} }
@@ -318,9 +313,9 @@ main {
content: ""; content: "";
position: absolute; position: absolute;
opacity: 0; opacity: 0;
top: adjust(55px); top: 56px;
width: adjust(75px); width: 72px;
height: adjust(75px); height: 72px;
background: url(../../assets/mirror.png) no-repeat; background: url(../../assets/mirror.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
// animation: 10s linear 0.3s infinite mirror-to-left-2; // animation: 10s linear 0.3s infinite mirror-to-left-2;
@@ -330,9 +325,9 @@ main {
content: ""; content: "";
position: absolute; position: absolute;
opacity: 0; opacity: 0;
top: adjust(55px); top: 56px;
width: adjust(75px); width: 72px;
height: adjust(75px); height: 72px;
background: url(../../assets/mirror.png) no-repeat; background: url(../../assets/mirror.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
// animation: 10s linear 5s infinite mirror-to-left; // animation: 10s linear 5s infinite mirror-to-left;
@@ -340,7 +335,7 @@ main {
@keyframes mirror-to-left { @keyframes mirror-to-left {
0% { 0% {
right: adjust(700px); right: 700px;
opacity: 1; opacity: 1;
} }
@@ -349,13 +344,13 @@ main {
} }
100% { 100% {
right: adjust(30px); right: 32px;
} }
} }
@keyframes mirror-to-left-2 { @keyframes mirror-to-left-2 {
0% { 0% {
right: adjust(700px); right: 700px;
opacity: 1; opacity: 1;
} }
@@ -364,56 +359,7 @@ main {
} }
100% { 100% {
right: adjust(30px); right: 32px;
} }
} }
.kiln-runtime {
top: adjust(h(200px));
// left: adjust(w(60px));
left: adjust(w(8110px));
}
.kiln-pressure {
top: adjust(h(610px));
// left: adjust(w(60px));
left: adjust(w(8110px));
}
.fan-runtime {
top: adjust(h(1020px));
// left: adjust(w(60px));
left: adjust(w(8110px));
}
.oil-flow {
top: adjust(h(1588px));
// left: adjust(w(60px));
// left: adjust(w(460px));
left: adjust(w(880px));
}
.gas-flow {
top: adjust(h(1588px));
// left: adjust(w(1660px));
left: adjust(w(2500px));
}
.top-temp {
top: adjust(h(1588px));
// left: adjust(w(3260px));
left: adjust(w(4110px));
}
.bottom-temp {
top: adjust(h(1588px));
// left: adjust(w(4860px));
left: adjust(w(5720px));
}
.ou-temp {
top: adjust(h(1588px));
left: adjust(w(7330px));
// left: adjust(w(6460px));
}
</style> </style>

View File

@@ -37,9 +37,9 @@ export default {
gas: "icon-gas", gas: "icon-gas",
xicao: "icon-xc", xicao: "icon-xc",
inWater: "icon-water-in", inWater: "icon-water-in",
fan: 'icon-fan', fan: "icon-fan",
ktop: 'icon-kiln-top', ktop: "icon-kiln-top",
kbtm: 'icon-kiln-bottom', kbtm: "icon-kiln-bottom",
}, },
}; };
}, },
@@ -56,8 +56,8 @@ export default {
} }
.icon { .icon {
height: adjust(17px); height: 64px;
width: adjust(16px); width: 60px;
margin-right: 0; margin-right: 0;
} }
@@ -82,8 +82,8 @@ export default {
} }
.icon-xc { .icon-xc {
background: url(../../assets/xicao-icon.png); background: url(../../assets/xicao-icon.png) top 0 left 0 / 90% 75% no-repeat;
background-size: 100% 100%; margin-right: 6px;
} }
.icon-fan { .icon-fan {
@@ -92,31 +92,35 @@ export default {
} }
.icon-kiln-top { .icon-kiln-top {
background: url(../../assets/kiln-top-icon.png) top 0 left 0 / 90% 75% no-repeat; background: url(../../assets/kiln-top-icon.png) top 0 left 0 / 90% 75%
no-repeat;
margin-right: 6px; margin-right: 6px;
} }
.icon-kiln-bottom { .icon-kiln-bottom {
background: url(../../assets/kiln-bottom-icon.png) top 0 left 0 / 90% 75% no-repeat; background: url(../../assets/kiln-bottom-icon.png) top 0 left 0 / 90% 75%
no-repeat;
margin-right: 6px; margin-right: 6px;
} }
.icon-water-in { .icon-water-in {
background: url(../../assets/water-temp.png) top 24% left 0 / 80% 75% no-repeat; background: url(../../assets/water-temp.png) top 24% left 0 / 80% 75%
no-repeat;
} }
.title { .title {
font-size: adjust(h(40px)); padding: 24px 0 0 32px;
letter-spacing: 1px;
color: #3565ff;
font-family: sans-serif;
user-select: none; user-select: none;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.title_text { .title_text {
line-height: 0; font-size: 42px;
letter-spacing: 1px;
color: #3565ff;
font-family: sans-serif;
line-height: 52px;
margin-bottom: 10px; margin-bottom: 10px;
} }
@@ -127,7 +131,6 @@ export default {
.content { .content {
height: 1px; height: 1px;
/* background: #eee; */
flex: 1; flex: 1;
} }
</style> </style>

30
src/directives/title.js Normal file
View File

@@ -0,0 +1,30 @@
export default {
inserted: function (el, binding) {
const value = binding.value
console.log('[v-title] value', value)
el.addEventListener('mouseover', function (event) {
console.log('[v-title] mouseover', event)
})
// find mouse pointer's location
// find element with id 'tooltip'
let tooltip = document.getElementById('tooltip')
if (!tooltip) {
const tooltipDiv = document.createElement('div')
tooltipDiv.id = 'tooltip'
tooltipDiv.style.position = 'absolute';
tooltipDiv.style.padding = '24px 32px';
tooltipDiv.style.visibility = 'hidden';
document.body.appendChild(tooltipDiv)
tooltip = tooltipDiv
}
// fit tooltip content with value
tooltip.innerText = value
// show tooltip with location of mouse pointer
}
}

View File

@@ -2,12 +2,15 @@ import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import title from './directives/title'
import 'normalize.css' import 'normalize.css'
import './style.css' import './style.css'
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.directive('title', title)
new Vue({ new Vue({
router, router,
store, store,

45
src/utils/slider.vue Normal file
View File

@@ -0,0 +1,45 @@
<template>
<div class="fixed-slider">
<h1>{{ value }}</h1>
<input type="range" :value="value" @input="$emit('change', +$event.target.value)">
</div>
</template>
<script>
export default {
name: "FixedSlider",
model: {
prop: 'value',
event: 'change'
},
props: {
value: {
type: Number,
default: 0,
},
},
data() {
return {
// value: 0
};
},
};
</script>
<style scoped>
.fixed-slider {
position: fixed;
bottom: 0;
left: 0;
height: 10vh;
width: 100vw;
background: #0002;
color: #fff;
z-index: 100000;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 100px 0;
}
</style>

View File

@@ -1,37 +1,137 @@
<template> <template>
<div class="home-view"> <!-- transform: 'scale(0.18182, 0.25)', -->
<BigHeader /> <!-- :style="{
<Main /> transform: 'scale(0.72727, 1)',
transformOrigin: 'top left',
}" -->
<div class="home-view" :style="styles">
<div class="bg-layer"></div>
<LeftSide />
<section class="center">
<BigHeader />
<Main />
</section>
<RightSide />
</div> </div>
</template> </template>
<script> <script>
import BigHeader from '../components/layout/Header.vue' import BigHeader from "../components/layout/Header.vue";
import Main from '../components/layout/Main.vue' import Main from "../components/layout/Main.vue";
import LeftSide from "./LeftSide.vue";
import RightSide from "./RightSide.vue";
export default { export default {
name: "HomeView", name: "HomeView",
components: { BigHeader, Main }, components: { BigHeader, Main, LeftSide, RightSide },
props: {}, props: {},
data() { data() {
return {}; return {
value: 100,
};
},
computed: {
styles() {
let v = (this.value / 100).toFixed(2);
return {
transform: `scale(${v * 24 / 33}, ${v})`,
transformOrigin: "top left",
};
},
},
mounted() {
const slider = document.createElement("div");
slider.id = "slider";
slider.classList.add("slider");
const ranger = document.createElement("input");
ranger.type = "range";
ranger.value = 100;
ranger.addEventListener("input", this.handleSlide);
slider.appendChild(ranger);
document.body.appendChild(slider);
// this.$watch('value', val => {
// ranger.value = val
// })
document.addEventListener("keydown", (e) => {
if (e.shiftKey && e.key === "L") {
document.getElementById("slider").classList.toggle("show");
}
});
document.getElementById("slider").addEventListener("mouseleave", () => {
setTimeout(() => {
document.getElementById("slider").classList.remove("show");
}, 200);
});
},
methods: {
handleSlide(e) {
this.value = e.target.value;
window.scroll(0, 0);
},
}, },
created() {},
mounted() {},
methods: {},
}; };
</script> </script>
<style scoped lang="scss"> <style lang="scss">
@import '../assets/styles/functions'; @import "../assets/styles/functions";
.home-view { .home-view {
height: adjust($actual_height); height: 4320px;
width: adjust($actual_width); width: 21120px;
overflow: hidden; overflow: hidden;
background: url(../assets/bg.png) center/cover no-repeat, #E0E3F6; // background: #C9CCE5;
background: url(../assets/bg.png) center/cover no-repeat;
color: white; color: white;
display: flex; display: flex;
position: relative;
}
.bg-layer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #c9cce577;
// background: url(../assets/bg.png) center/cover no-repeat;
}
.center {
width: 13515px;
height: 4320px;
display: flex;
flex-direction: column; flex-direction: column;
} }
.slider {
height: 5vh;
width: 20vw;
border-radius: 88px;
box-shadow: 0 0 68px 8px rgba($color: #000000, $alpha: 0.3);
padding: 32px;
display: grid;
place-items: center;
background: #fff;
position: fixed;
// bottom: 64px;
bottom: 0;
opacity: 0;
left: 50%;
transform: translateX(-50%);
transition: opacity 0.3s ease-out, bottom 0.3s ease-out;
input {
width: 100%;
transform: translateY(-7px);
color: #0b58ff;
background: #fcc;
}
}
.slider.show {
opacity: 1;
bottom: 64px;
}
</style> </style>

26
src/views/LeftSide.vue Normal file
View File

@@ -0,0 +1,26 @@
<template>
<div class="left-side"></div>
</template>
<script>
export default {
name: "LeftSide",
props: {},
data() {
return {};
},
created() {},
mounted() {},
methods: {},
};
</script>
<style scoped lang="scss">
// import
.left-side {
// background: rgba(243, 54, 145, 0.166);
height: 4320px;
width: 3840px;
}
</style>

26
src/views/RightSide.vue Normal file
View File

@@ -0,0 +1,26 @@
<template>
<div class="right-side"></div>
</template>
<script>
export default {
name: "RightSide",
props: {},
data() {
return {};
},
created() {},
mounted() {},
methods: {},
};
</script>
<style scoped lang="scss">
// import
.right-side {
// background: rgba(30, 133, 244, 0.292);
height: 4320px;
width: 3840px;
}
</style>