完善页面UI样式

main
jinna 3 years ago
parent fc5e45eb72
commit d7c2441f2c
  1. 1
      package.json
  2. BIN
      src/assets/img/data_bg.png
  3. BIN
      src/assets/img/down.png
  4. BIN
      src/assets/img/down1.png
  5. BIN
      src/assets/img/down2.png
  6. BIN
      src/assets/img/down3.png
  7. BIN
      src/assets/img/pie_bg.png
  8. BIN
      src/assets/img/up.png
  9. BIN
      src/assets/img/up1.png
  10. BIN
      src/assets/img/up2.png
  11. BIN
      src/assets/img/up3.png
  12. 583
      src/views/dashboard/home.vue
  13. 5
      src/views/dashboard/homepage.vue

@ -11,6 +11,7 @@
"axios": "^1.2.2",
"core-js": "^3.8.3",
"echarts": "^5.4.0",
"echarts-gl": "^2.0.9",
"element-ui": "^2.15.12",
"js-cookie": "^3.0.1",
"postcss-pxtorem": "^6.0.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -93,8 +93,14 @@
<div class="table_box">
<div class="table_line1">
<div class="table_item">站点名称</div>
<div class="table_item">上行</div>
<div class="table_item">下行</div>
<div class="table_item">
<span>上行</span>
<img src="~@/assets/img/up.png" alt="" />
</div>
<div class="table_item">
<span>下行</span>
<img src="~@/assets/img/down.png" alt="" />
</div>
</div>
<div class="swiper-container swiper2">
<div class="swiper-wrapper">
@ -112,8 +118,58 @@
</div>
</div>
</div>
<div class="center_top"></div>
<div class="center_bottom"></div>
<div class="center_top">
<div class="cen_left">
<div class="data_box" v-for="item in totalData" :key="item.name">
<div class="data_txt" style="font-family: 'ALHY'">{{ item.name }}</div>
<div class="data_txt data_text">{{ item.data }}</div>
<div class="data_txt">
<span class="hb_txt">环比</span>
<span class="hb_data">{{ item.huanbi }}</span>
<img
v-show="item.name == '收件量' && item.huanbi > 0"
src="~@/assets/img/up1.png"
alt=""
/>
<img
v-show="item.name == '收件量' && item.huanbi < 0"
src="~@/assets/img/down1.png"
alt=""
/>
<img
v-show="item.name == '发件量' && item.huanbi > 0"
src="~@/assets/img/up2.png"
alt=""
/>
<img
v-show="item.name == '发件量' && item.huanbi < 0"
src="~@/assets/img/down2.png"
alt=""
/>
<img
v-show="item.name !== '收件量' && item.name !== '发件量' && item.huanbi > 0"
src="~@/assets/img/up3.png"
alt=""
/>
<img
v-show="item.name !== '收件量' && item.name !== '发件量' && item.huanbi < 0"
src="~@/assets/img/down3.png"
alt=""
/>
</div>
</div>
</div>
<div class="cen_right">
<div class="btn_box" :class="active == 1 ? 'active' : ''" @click="changeData(1)"></div>
<div class="btn_box" :class="active == 2 ? 'active' : ''" @click="changeData(2)"></div>
</div>
</div>
<div class="center_bottom">
<div class="charts_box"></div>
<div class="charts_box">
<div id="trendChart" class="trend_box"></div>
</div>
</div>
<div class="map_wrap">
<a
@click="backMap"
@ -138,6 +194,8 @@
<span class="name">PROPORTION</span>
</div>
</div>
<div class="pie_box" id="pieChart"></div>
<!-- <div class="pie_bg"></div> -->
</div>
<div class="right_cen">
<div class="top_title">
@ -162,6 +220,7 @@
</template>
<script>
import 'echarts-gl'
import axios from "axios";
import * as XLSX from "xlsx/xlsx.mjs";
import Swiper from "swiper";
@ -282,6 +341,10 @@ export default {
this.temp = res.result.now.temp;
this.weather = res.result.now.text;
});
this.$nextTick(() =>{
this.createPieChart()
})
},
methods: {
backMap() {
@ -392,14 +455,342 @@ export default {
}
});
this.$nextTick(() => {
// this.createChart();
this.createChart();
// this.createCharts();
// this.createCharts1();
// this.run();
// this.run1();
this.run();
this.run1();
});
},
createChart() {
this.trendCharts = this.$echarts.init(document.getElementById("trendChart"));
window.addEventListener("resize", () => {
this.trendCharts.resize();
});
var option = {
color: ["#115fff", "#1dd58e"],
title: {
text: "仓库收件量趋势",
textStyle: {
fontSize: 15,
color: "#fff",
},
top: 12,
},
legend: {
data: ["到件量", "派件量"],
textStyle: {
color: "#fff",
},
top: 12,
right: 10,
itemHeight: 8,
},
tooltip: {
trigger: "axis",
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
top: "18%",
containLabel: true,
},
xAxis: {
type: "category",
boundaryGap: false,
data: this.xData,
axisLine: {
lineStyle: {
color: "rgba(255, 255, 255, .1)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "rgba(255, 255, 255, .7)",
},
},
yAxis: {
type: "value",
axisLabel: {
show: true,
color: "#fff",
},
splitLine: {
lineStyle: {
color: "rgba(255, 255, 255, .1)",
},
},
},
series: [
{
name: "到件量",
type: "line",
smooth: true,
data: this.yData1,
},
{
name: "派件量",
type: "line",
smooth: true,
data: this.yData2,
},
],
};
this.trendCharts.setOption(option);
},
createPieChart() {
this.pieChart = this.$echarts.init(document.getElementById("pieChart"));
window.addEventListener("resize", () => {
this.pieChart.resize();
});
var data = [
{
name: "不满意",
value: 30,
itemStyle: { color: "#00bfff" },
startRatio: 0,
endRatio: 0.7,
},
{
name: "非常满意",
value: 45,
itemStyle: { color: "#48f5c0" },
startRatio: 0.7,
endRatio: 1,
},
{ name: "满意", value: 6, itemStyle: { color: "#00dced" }, startRatio: 0.7, endRatio: 1 },
];
var optionConfig = {};
const getPie3D = (pieData, internalDiameterRatio) => {
//internalDiameterRatio:
let series = [];
let sumValue = 0;
let startValue = 0;
let endValue = 0;
let k = 1;
pieData.sort((a, b) => {
return b.value - a.value;
});
// series-surface
for (let i = 0; i < pieData.length; i++) {
sumValue += pieData[i].value;
let seriesItem = {
name: typeof pieData[i].name === "undefined" ? `series${i}` : pieData[i].name,
type: "surface",
parametric: true,
wireframe: {
show: false,
},
pieData: pieData[i],
pieStatus: {
selected: false,
hovered: false,
k: k,
},
radius: "50%",
center: ["10%", "10%"],
};
if (typeof pieData[i].itemStyle != "undefined") {
let itemStyle = {};
typeof pieData[i].itemStyle.color != "undefined"
? (itemStyle.color = pieData[i].itemStyle.color)
: null;
typeof pieData[i].itemStyle.opacity != "undefined"
? (itemStyle.opacity = pieData[i].itemStyle.opacity)
: null;
seriesItem.itemStyle = itemStyle;
}
series.push(seriesItem);
}
// 使 sumValue getParametricEquation
// series-surface series-surface.parametricEquation
for (let i = 0; i < series.length; i++) {
endValue = startValue + series[i].pieData.value;
series[i].pieData.startRatio = startValue / sumValue;
series[i].pieData.endRatio = endValue / sumValue;
series[i].parametricEquation = this.getParametricEquation(
series[i].pieData.startRatio,
series[i].pieData.endRatio,
false,
false,
k,
series[i].pieData.value
);
startValue = endValue;
}
// console.log(getParametricEquation)
let boxHeight = this.getHeight3D(series, 25); //3d/2626px
// legendDataseries
let option = {
// backgroundColor: "#203598",
labelLine: {
show: true,
lineStyle: {
color: "#404772",
},
},
label: {
show: false,
position: "outside",
rich: {
b: {
fontSize: 24,
lineHeight: 30,
fontWeight: "bold",
color: "#fff",
},
c: {
fontSize: 18,
color: "#fff",
},
},
formatter: "{b|{b}}\n{c|{c}%}",
},
tooltip: {
backgroundColor: "#053A8D",
formatter: (params) => {
if (params.seriesName !== "mouseoutSeries" && params.seriesName !== "pie2d") {
let bfb = (
(option.series[params.seriesIndex].pieData.endRatio -
option.series[params.seriesIndex].pieData.startRatio) *
100
).toFixed(2);
return (
`${params.seriesName}<br/>` +
`<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>` +
`${bfb}%`
);
}
},
},
xAxis3D: {
min: -1,
max: 1,
},
yAxis3D: {
min: -1,
max: 1,
},
zAxis3D: {
min: -1,
max: 1,
},
grid3D: {
show: false,
boxHeight: boxHeight, //
left: 0,
top: 0, //3d
viewControl: {
//3d
alpha: 20, //
distance: 250, //zoom
rotateSensitivity: 0, //0
zoomSensitivity: 0, //0
panSensitivity: 0, //0
autoRotate: false, //
},
},
series: series,
};
return option;
};
// series-surface.parametricEquation
var option = getPie3D(data, 0.8);
console.log(option);
//label线2d使labelLine3dsetOption
this.pieChart.setOption(option);
},
//3d
getHeight3D(series, height){
series.sort((a, b) => {
return b.pieData.value - a.pieData.value;
});
return (height * 25) / series[0].pieData.value;
},
getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, h) {
//
let midRatio = (startRatio + endRatio) / 2;
let startRadian = startRatio * Math.PI * 2;
let endRadian = endRatio * Math.PI * 2;
let midRadian = midRatio * Math.PI * 2;
//
if (startRatio === 0 && endRatio === 1) {
isSelected = true;
}
// / k 1/3
k = typeof k !== "undefined" ? k : 1 / 3;
// x y 0
let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
// 1
let hoverRate = isHovered ? 1.05 : 1;
//
return {
u: {
min: -Math.PI,
max: Math.PI * 3,
step: Math.PI / 32,
},
v: {
min: 0,
max: Math.PI * 2,
step: Math.PI / 20,
},
x: (u, v) => {
if (u < startRadian) {
return offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
}
if (u > endRadian) {
return offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
}
return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
},
y: (u, v)=> {
if (u < startRadian) {
return offsetY + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate;
}
if (u > endRadian) {
return offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate;
}
return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
},
z: (u, v)=> {
if (u < -Math.PI * 0.5) {
return Math.sin(u);
}
if (u > Math.PI * 2.5) {
return Math.sin(u) * h * 0.1;
}
return Math.sin(v) > 0 ? 1 * h * 0.1 : -1;
},
};
},
//
changeData(val) {
this.active = val;
if (val == 1) {
this.totalData = this.dayData;
} else if (val == 2) {
this.totalData = this.monthData;
}
},
run() {
this.mySwiper = new Swiper(".swiper1", {
loop: true, //
@ -410,6 +801,17 @@ export default {
});
},
run1() {
this.mySwiper = new Swiper(".swiper2", {
loop: true, //
// autoplay: true, //
autoplay: {
delay: 10000, //10
disableOnInteraction: false,
},
});
},
changeBtn(val) {
this.isActive = val;
this.slideList = [{ arr: [] }, { arr: [] }];
@ -907,6 +1309,11 @@ export default {
font-family: "FZSK";
font-size: 0.16rem;
color: #ffffff;
img {
width: 0.18rem;
height: 0.16rem;
}
}
}
@ -934,22 +1341,165 @@ export default {
}
.center_top {
width: 44%;
width: 46%;
height: 12%;
background: red;
background: url(~@/assets/img/data_bg.png);
background-size: 100% 100%;
position: absolute;
left: 28%;
top: 15%;
display: flex;
.cen_left {
width: 86%;
height: 100%;
display: flex;
.data_box {
width: 20%;
height: 100%;
&:first-child {
.data_text {
background-image: linear-gradient(
to bottom,
#fceece,
#e39054
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
.data_txt {
.hb_data {
background-image: linear-gradient(
to bottom,
#fceece,
#e39054
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
}
}
&:nth-child(2) {
.data_text {
background-image: linear-gradient(
to bottom,
#cefce7,
#16da85
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
.data_txt {
.hb_data {
background-image: linear-gradient(
to bottom,
#cefce7,
#16da85
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
}
}
.data_txt {
font-size: 0.16rem;
color: #fff;
color: #ffffff;
.hb_txt {
font-size: 0.14rem;
color: #ffffff;
opacity: 0.7;
}
.hb_data {
margin-left: 0.1rem;
font-size: 0.14rem;
background-image: linear-gradient(
to bottom,
#76e4ff,
#1c77f2
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
}
.data_text {
font-family: "ALHY";
font-size: 0.26rem;
line-height: 0.5rem;
background-image: linear-gradient(
to bottom,
#76e4ff,
#1c77f2
); /* 线性渐变背景,方向向上 */
-webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */
-webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */
}
}
}
.cen_right {
width: 8%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.btn_box {
font-size: 0.18rem;
color: #fff;
width: 0.46rem;
height: 0.35rem;
background: url(~@/assets/img/bg.png);
background-size: 100% 100%;
margin-bottom: 0.03rem;
display: flex;
align-items: center;
justify-content: center;
font-family: "FZSK";
font-size: 0.22erm;
color: #ffffff;
cursor: pointer;
&:first-child {
margin-left: 0.13rem;
}
}
.active {
background: url(~@/assets/img/active_bg.png);
background-size: 100% 100%;
}
}
}
.center_bottom {
width: 44%;
height: 25%;
background: red;
position: absolute;
left: 28%;
bottom: 6%;
bottom: 2%;
z-index: 11;
display: flex;
.charts_box {
width: 50%;
height: 100%;
.trend_box {
width: 100%;
height: 100%;
}
}
}
.right_box {
width: 24%;
@ -1022,6 +1572,15 @@ export default {
.right_top {
width: 100%;
height: 34%;
.pie_box {
height: 83%;
width: 50%;
background: url(~@/assets/img/pie_bg.png);
background-size: 100% 100%;
background-position: 0% 10%;
}
}
.right_cen {
@ -1037,7 +1596,7 @@ export default {
.map_wrap {
position: absolute;
left: 5.2rem;
top: 2.6rem;
top: 28%;
width: 8.82rem;
height: 4.2rem;
}

@ -686,6 +686,11 @@ export default {
show: true,
color: "#fff",
},
splitLine: {
lineStyle: {
color: "rgba(255, 255, 255, .1)"
}
}
},
series: [
{

Loading…
Cancel
Save