@@ -67,6 +67,7 @@ | |||
"node-sass": "^4.14.1", | |||
"sass-loader": "8.0.0", | |||
"vue-axios": "2.1.4", | |||
"vue-seamless-scroll": "^1.1.23", | |||
"vue-template-compiler": "2.6.10" | |||
}, | |||
"eslintConfig": { | |||
@@ -7,7 +7,7 @@ | |||
.icon { | |||
width: 80px; | |||
height: 90px; | |||
height: 100px; | |||
} | |||
.right { | |||
@@ -0,0 +1 @@ | |||
<div :id="id" class="chart"></div> |
@@ -0,0 +1,184 @@ | |||
import * as echarts from 'echarts'; | |||
import elementResizeDetectorMaker from 'element-resize-detector'; | |||
export default { | |||
props: { | |||
id: { | |||
type: String, | |||
default: 'line' | |||
}, | |||
data: { | |||
type: Array, | |||
default: function () { | |||
return [ | |||
{ | |||
name: '1月', | |||
value: '10' | |||
}, | |||
{ | |||
name: '2月', | |||
value: '19' | |||
} | |||
]; | |||
} | |||
} | |||
}, | |||
data () { | |||
return { | |||
chart: null | |||
}; | |||
}, | |||
mounted () { | |||
this.initChart(); | |||
}, | |||
computed: { | |||
}, | |||
methods: { | |||
// 设置监听器 页面尺寸变化重新绘制图表 | |||
initResizeCallBack () { | |||
const erd = elementResizeDetectorMaker(); | |||
erd.listenTo(document.getElementById(this.id), () => { | |||
this.$nextTick(() => { | |||
this.chart.resize(); | |||
}); | |||
}); | |||
}, | |||
initChart () { | |||
this.chart = echarts.init(document.getElementById(this.id)); | |||
this.chartSetOption(); | |||
}, | |||
chartSetOption () { | |||
let xAxisData = []; | |||
let data = []; | |||
this.data.forEach(item => { | |||
xAxisData.push(item.name) | |||
data.push(item.value) | |||
}); | |||
const option = { | |||
grid: { | |||
left: "5%", | |||
right: "10%", | |||
top: "15%", | |||
bottom: "10%", | |||
containLabel: true, | |||
}, | |||
tooltip: { | |||
show: true, | |||
trigger: "item", | |||
}, | |||
legend: { | |||
show: false | |||
}, | |||
color: { | |||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ | |||
{ | |||
offset: 1, | |||
color: "rgba(134, 91, 252, 1)", | |||
}, | |||
{ | |||
offset: 0.5, | |||
color: "rgba(26, 106, 226, 0.5)", | |||
}, | |||
{ | |||
offset: 0, | |||
color: "rgba(26, 106, 226, 0)", | |||
}, | |||
]), | |||
}, | |||
xAxis: [ | |||
{ | |||
type: "category", | |||
boundaryGap: false, | |||
axisLabel: { | |||
color: 'rgba(185, 211, 235, 1)', | |||
}, | |||
axisLine: { | |||
show: false | |||
}, | |||
axisTick: { | |||
show: false | |||
}, | |||
splitLine: { | |||
show: false | |||
}, | |||
data: xAxisData | |||
}, | |||
], | |||
yAxis: [ | |||
{ | |||
type: "value", | |||
name: "单位:万元", | |||
nameTextStyle: { | |||
color: 'rgba(185, 211, 235, 1)' | |||
}, | |||
axisLabel: { | |||
formatter: "{value}", | |||
textStyle: { | |||
color: "rgba(185, 211, 235, 1)", | |||
}, | |||
}, | |||
axisLine: { | |||
lineStyle: { | |||
color: "#27b4c2", | |||
}, | |||
}, | |||
axisTick: { | |||
show: false, | |||
}, | |||
splitLine: { | |||
show: true, | |||
lineStyle: { | |||
color: "#11366e", | |||
}, | |||
}, | |||
} | |||
], | |||
series: [ | |||
{ | |||
name: "", | |||
type: "line", | |||
smooth: true, | |||
// symbol: "circle", | |||
symbolSize: 12, | |||
itemStyle: { | |||
normal: { | |||
color: "#0092f6", | |||
lineStyle: { | |||
color: "#0092f6", | |||
width: 1, | |||
}, | |||
areaStyle: { | |||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ | |||
{ | |||
offset: 1, | |||
color: "rgba(134, 91, 252, 1)", | |||
}, | |||
{ | |||
offset: 0.5, | |||
color: "rgba(26, 106, 226, 0.5)", | |||
}, | |||
{ | |||
offset: 0, | |||
color: "rgba(26, 106, 226, 0)", | |||
}, | |||
]), | |||
}, | |||
}, | |||
}, | |||
markPoint: { | |||
itemStyle: { | |||
normal: { | |||
color: "red", | |||
}, | |||
}, | |||
}, | |||
data: data | |||
} | |||
], | |||
};; | |||
this.chart.setOption(option); | |||
this.initResizeCallBack(); | |||
} | |||
} | |||
}; |
@@ -0,0 +1,6 @@ | |||
.chart { | |||
overflow: visible; | |||
width: 100%; | |||
height: 100%; | |||
z-index: 2; | |||
} |
@@ -0,0 +1,3 @@ | |||
<template src='./index.html'/> | |||
<script lang='js' src='./index.js'></script> | |||
<style lang='scss' src='./index.scss' scoped></style> |
@@ -0,0 +1 @@ | |||
<div :id="id" class="chart"></div> |
@@ -0,0 +1,177 @@ | |||
import * as echarts from 'echarts'; | |||
import elementResizeDetectorMaker from 'element-resize-detector'; | |||
export default { | |||
props: { | |||
id: { | |||
type: String, | |||
default: 'pie' | |||
}, | |||
data: { | |||
type: Array, | |||
default: function () { | |||
return [ | |||
{ | |||
name: '1月', | |||
value: '10' | |||
}, | |||
{ | |||
name: '2月', | |||
value: '19' | |||
} | |||
]; | |||
} | |||
} | |||
}, | |||
data () { | |||
return { | |||
chart: null | |||
}; | |||
}, | |||
mounted () { | |||
this.initChart(); | |||
}, | |||
computed: { | |||
}, | |||
methods: { | |||
// 设置监听器 页面尺寸变化重新绘制图表 | |||
initResizeCallBack () { | |||
const erd = elementResizeDetectorMaker(); | |||
erd.listenTo(document.getElementById(this.id), () => { | |||
this.$nextTick(() => { | |||
this.chart.resize(); | |||
}); | |||
}); | |||
}, | |||
initChart () { | |||
this.chart = echarts.init(document.getElementById(this.id)); | |||
this.chartSetOption(); | |||
}, | |||
chartSetOption () { | |||
var scale = 1; | |||
var echartData = [ | |||
{ | |||
value: 2154, | |||
unit: '万元', | |||
name: "经营收入", | |||
}, | |||
{ | |||
value: 3854, | |||
unit: '万元', | |||
name: "投资收益", | |||
}, | |||
{ | |||
value: 3854, | |||
unit: '万吨', | |||
name: "补助收入", | |||
}, | |||
{ | |||
value: 3854, | |||
unit: '万吨', | |||
name: "其他收入", | |||
} | |||
]; | |||
var rich = { | |||
yellow: { | |||
color: "rgba(185, 211, 235, 1)", | |||
fontSize: 18 * scale, | |||
padding: [5, 4], | |||
align: "center", | |||
}, | |||
total: { | |||
color: "#ffc72b", | |||
fontSize: 40 * scale, | |||
align: "center", | |||
}, | |||
white: { | |||
color: "rgba(185, 211, 235, 1)", | |||
align: "center", | |||
fontSize: 18 * scale, | |||
padding: [0, 0], | |||
}, | |||
blue: { | |||
color: "rgba(185, 211, 235, 1)", | |||
fontSize: 16 * scale, | |||
align: "center", | |||
}, | |||
hr: { | |||
// borderColor: "#0b5263", | |||
width: "100%", | |||
borderWidth: 1, | |||
height: 0, | |||
}, | |||
}; | |||
let xAxisData = []; | |||
let data = []; | |||
this.data.forEach(item => { | |||
xAxisData.push(item.name) | |||
data.push(item.value) | |||
}); | |||
const option = { | |||
title: [ | |||
{ | |||
text: "总库存量", | |||
left: "center", | |||
top: "40%", | |||
padding: [0, 0], | |||
textStyle: { | |||
color: "#fff", | |||
fontSize: 18 * scale, | |||
align: "center", | |||
}, | |||
}, | |||
{ | |||
text: "1000 万吨", | |||
left: "center", | |||
top: "50%", | |||
padding: [0, 0], | |||
textStyle: { | |||
color: "#fff", | |||
fontSize: 18 * scale, | |||
align: "center", | |||
}, | |||
} | |||
], | |||
series: [ | |||
{ | |||
name: "", | |||
type: "pie", | |||
radius: ["42%", "60%"], | |||
hoverAnimation: false, | |||
color: ["#c487ee", "#deb140", "#49dff0", "#034079", "#6f81da", "#00ffb4"], | |||
label: { | |||
normal: { | |||
formatter: function (params, ticket, callback) { | |||
var total = 0; //考生总数量 | |||
var percent = 0; //考生占比 | |||
echartData.forEach(function (value, index, array) { | |||
total += value.value; | |||
}); | |||
percent = ((params.value / total) * 100).toFixed(1); | |||
return ( | |||
"{white|" + | |||
percent + "%" + | |||
"}\n{blue|" + | |||
params.name + | |||
"}\n{hr|}\n{yellow|" + | |||
params.value + params.data.unit + '}' | |||
); | |||
}, | |||
rich: rich, | |||
}, | |||
}, | |||
labelLine: { | |||
normal: { | |||
length: 10 * scale, | |||
length2: 20 * scale, | |||
}, | |||
}, | |||
data: echartData, | |||
}, | |||
], | |||
}; | |||
this.chart.setOption(option); | |||
this.initResizeCallBack(); | |||
} | |||
} | |||
}; |
@@ -0,0 +1,6 @@ | |||
.chart { | |||
overflow: visible; | |||
width: 100%; | |||
height: 100%; | |||
z-index: 2; | |||
} |
@@ -0,0 +1,3 @@ | |||
<template src='./index.html'/> | |||
<script lang='js' src='./index.js'></script> | |||
<style lang='scss' src='./index.scss' scoped></style> |
@@ -0,0 +1,3 @@ | |||
<div class="pannel_tabs row"> | |||
<div v-for="(item) in data" class="tab hover_pointer" :class="[item.id === currentClick ? 'active' : '']" @click="tabClick(item)">{{item.name}}</div> | |||
</div> |
@@ -0,0 +1,34 @@ | |||
export default { | |||
props: { | |||
data: { | |||
type: Array, | |||
default: function () { | |||
return [ | |||
{ | |||
id: '1', | |||
name: '趋势' | |||
}, | |||
{ | |||
id: '2', | |||
name: '类型' | |||
} | |||
] | |||
} | |||
}, | |||
}, | |||
data () { | |||
return { | |||
currentClick: '1' | |||
}; | |||
}, | |||
created () { | |||
}, | |||
methods: { | |||
tabClick (info) { | |||
this.currentClick = info.id | |||
this.$emit('change', info) | |||
} | |||
} | |||
}; |
@@ -0,0 +1,26 @@ | |||
.tab { | |||
margin-right: 4px; | |||
font-size: 12px; | |||
line-height: 23px; | |||
text-align: center; | |||
border-radius: 10px; | |||
width: 55px; | |||
height: 23px; | |||
background: RGBA(0, 0, 0, 0); | |||
border: 1px solid rgba(43, 108, 206, 0.66); | |||
} | |||
.pannel_tabs { | |||
height: 23px !important; | |||
width: auto; | |||
display: flex; | |||
justify-content: flex-end; | |||
} | |||
.active { | |||
background: linear-gradient(-90deg, #1c4ca5 0%, #215AC3 98%); | |||
font-size: 12px; | |||
width: 55px; | |||
height: 23px; | |||
text-align: center; | |||
} |
@@ -0,0 +1,3 @@ | |||
<template src='./index.html'/> | |||
<script lang='js' src='./index.js'></script> | |||
<style lang='scss' src='./index.scss' scoped></style> |
@@ -76,6 +76,7 @@ | |||
position: relative; | |||
flex: 1; | |||
background-color: rgba(11, 28, 58, 1); | |||
overflow: hidden; | |||
.bottom_line { | |||
position: absolute; | |||
@@ -0,0 +1,65 @@ | |||
export default [ | |||
{ | |||
area: '长春', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '松原', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '通化', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '四平', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '吉林', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '辽源', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '通化', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '白山', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
}, | |||
{ | |||
area: '延边', | |||
count: 233, | |||
money: 534534, | |||
dealCount: 564, | |||
dealMoney: 31 | |||
} | |||
]; |
@@ -0,0 +1,14 @@ | |||
<div :style="[style]"> | |||
<div class="table_show"> | |||
<div class="table_header table_one clearfix"> | |||
<div v-for="header in headers" :key="header" class="item test_center">{{header}}</div> | |||
</div> | |||
<div class="table_bodyer"> | |||
<scroll :data="data" class="seamless-warp" :class-option="swiperOption"> | |||
<div v-for="(line, index) in data" class="table_one clearfix item_height"> | |||
<div v-for="(item, index) in line" class="item test_center ellipsis_1" >{{item }}</div> | |||
</div> | |||
</scroll> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,69 @@ | |||
import scroll from 'vue-seamless-scroll' | |||
export default { | |||
components: { | |||
scroll | |||
}, | |||
data () { | |||
return { | |||
}; | |||
}, | |||
props: { | |||
width: { | |||
type: [String, Number], | |||
default: '100%' | |||
}, | |||
height: { | |||
type: [String, Number], | |||
default: '100' | |||
}, | |||
headers: { | |||
type: Array, | |||
default: function () { | |||
return ['表头1', '表头2', '表头3'] | |||
} | |||
}, | |||
data: { | |||
type: Array, | |||
default: function () { | |||
return [ | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头1', '表头2', '表头3'], | |||
['表头11', '表头22', '表头33'] | |||
] | |||
} | |||
} | |||
}, | |||
computed: { | |||
dataLength: function () { | |||
return this.dataList.length; | |||
}, | |||
style: function () { | |||
return { | |||
height: this.height, | |||
width: this.width | |||
}; | |||
}, | |||
// 如果数据不足5条则不滚动 | |||
swiperOption: function () { | |||
return { | |||
step: 0.4, | |||
limitMoveNum: 1, | |||
hoverStop: true, | |||
direction: 1, | |||
openWatch: true, | |||
singleHeight: 0, | |||
singleHeight: 0, | |||
waitTime: 1000 | |||
} | |||
} | |||
}, | |||
created () { | |||
}, | |||
methods: { | |||
} | |||
}; |
@@ -0,0 +1,132 @@ | |||
.table_show { | |||
box-sizing: border-box; | |||
padding: 0 10px; | |||
margin-top: 10px; | |||
.table_header { | |||
width: 100%; | |||
background: rgba(44, 117, 223, 0.5); | |||
border-radius: 4px; | |||
height: 40px; | |||
font-size: 12px; | |||
font-family: MicrosoftYaHeiUI, MicrosoftYaHeiUI-Bold; | |||
font-weight: 700; | |||
text-align: center; | |||
color: rgba(185, 211, 235, 1); | |||
} | |||
.table_bodyer { | |||
margin-top: 20px; | |||
overflow: hidden; | |||
height: 200px; | |||
line-height: 40px; | |||
.table_one { | |||
height: 40px; | |||
display: flex; | |||
justify-content: space-around; | |||
} | |||
} | |||
.table_one { | |||
width: 100%; | |||
height: 40px; | |||
display: flex; | |||
justify-content: space-around; | |||
align-items: center; | |||
} | |||
} | |||
.swiper-container { | |||
height: 100%; | |||
} | |||
.table_bodyer { | |||
height: 100%; | |||
} | |||
.margin { | |||
margin-right: 5px; | |||
} | |||
.item_height { | |||
color: rgba(214, 234, 252, 1); | |||
font-size: 10px; | |||
line-height: 40px; | |||
height: 40px; | |||
display: flex; | |||
justify-content: space-around; | |||
align-items: center; | |||
border-bottom: 1px solid #183053; | |||
&:nth-child(odd) { | |||
background-color: rgba(49, 129, 246, 0.1); | |||
} | |||
&:hover { | |||
color: rgba(49, 129, 246, 1); | |||
} | |||
} | |||
.item { | |||
font-size: 14px; | |||
text-align: center; | |||
overflow: hidden; | |||
white-space: nowrap; | |||
} | |||
.item1 { | |||
flex: 1.8; | |||
} | |||
.item:nth-child(1) { | |||
text-align: left; | |||
flex: 1.8; | |||
padding-left: 5px; | |||
} | |||
.item:nth-child(2) { | |||
flex: 1.3; | |||
} | |||
.item:nth-child(3) { | |||
flex: 1.8; | |||
} | |||
.item:nth-child(4) { | |||
flex: 1.4; | |||
} | |||
.item:nth-child(5) { | |||
flex: 1.3; | |||
} | |||
.item:nth-child(6) { | |||
flex: 1.3; | |||
} | |||
.item:nth-child(7) { | |||
flex: 2; | |||
} | |||
.text_overflow { | |||
text-overflow: ellipsis; | |||
} | |||
.test_center { | |||
text-align: center; | |||
} | |||
.pop { | |||
padding: 4px; | |||
position: fixed; | |||
z-index: 20; | |||
color: white; | |||
background: rgba($color: #000000, $alpha: 0.3); | |||
border-radius: 6px; | |||
} | |||
.margin_top { | |||
margin-top: 5px; | |||
} |
@@ -0,0 +1,3 @@ | |||
<template src='./index.html'/> | |||
<script lang='js' src='./index.js'></script> | |||
<style lang='scss' src='./index.scss' scoped></style> |
@@ -1,3 +1,11 @@ | |||
<Pannel title="资金收入分析" height="340"> | |||
<div class="full"> | |||
<div class="top"> | |||
<PannelTabs @change="tabChange"></PannelTabs> | |||
</div> | |||
<div class="buttom"> | |||
<LineCharts v-if="tabIndex === '1'"></LineCharts> | |||
<PieCharts v-if="tabIndex === '2'"></PieCharts> | |||
</div> | |||
</div> | |||
</Pannel> |
@@ -1,11 +1,18 @@ | |||
import Pannel from '@/components/pannel/index.vue'; | |||
import PannelTabs from '@/components/pannel-tabs/index.vue'; | |||
import LineCharts from '@/components/charts/line/index.vue'; | |||
import PieCharts from '@/components/charts/pie/index.vue'; | |||
export default { | |||
components: { | |||
LineCharts, | |||
PieCharts, | |||
PannelTabs, | |||
Pannel | |||
}, | |||
data () { | |||
return { | |||
tabIndex: '1' | |||
}; | |||
}, | |||
created () { | |||
@@ -13,5 +20,9 @@ export default { | |||
mounted () { | |||
}, | |||
methods: { | |||
tabChange (info) { | |||
console.log(info); | |||
this.tabIndex = info.id | |||
} | |||
} | |||
}; |
@@ -0,0 +1,17 @@ | |||
.full { | |||
display: flex; | |||
flex-direction: column; | |||
.top { | |||
height: 50px !important; | |||
width: 100%; | |||
display: flex !important; | |||
align-items: center !important; | |||
justify-content: flex-end; | |||
} | |||
.buttom { | |||
flex: 1; | |||
width: 100%; | |||
} | |||
} |
@@ -1,3 +1,3 @@ | |||
<Pannel title="资金支出排名" height="340"> | |||
<ScrollTable></ScrollTable> | |||
</Pannel> |
@@ -1,7 +1,9 @@ | |||
import Pannel from '@/components/pannel/index.vue'; | |||
import ScrollTable from '@/components/scroll-table/index.vue'; | |||
export default { | |||
components: { | |||
ScrollTable, | |||
Pannel | |||
}, | |||
data () { | |||
@@ -1,3 +1,3 @@ | |||
<Pannel title="资金收入排名" height="340"> | |||
<ScrollTable></ScrollTable> | |||
</Pannel> |
@@ -1,7 +1,9 @@ | |||
import Pannel from '@/components/pannel/index.vue'; | |||
import ScrollTable from '@/components/scroll-table/index.vue'; | |||
export default { | |||
components: { | |||
ScrollTable, | |||
Pannel | |||
}, | |||
data () { | |||
@@ -0,0 +1,26 @@ | |||
export default [ | |||
[ | |||
{ | |||
name: '总资产(万元)', | |||
icon: require('./1.png'), | |||
value: '8000' | |||
}, | |||
{ | |||
name: '总负债(万元)', | |||
icon: require('./2.png'), | |||
value: '257' | |||
} | |||
], | |||
[ | |||
{ | |||
name: '总收入(万元)', | |||
icon: require('./3.png'), | |||
value: '1460' | |||
}, | |||
{ | |||
name: '总支出(万元)', | |||
icon: require('./2.png'), | |||
value: '1011' | |||
} | |||
] | |||
] |
@@ -1,3 +1,9 @@ | |||
<Pannel title="资产负债分析" height="232"> | |||
<table> | |||
<tr v-for="line in data"> | |||
<td v-for="item in line"> | |||
<Block :data="item"></Block> | |||
</td> | |||
</tr> | |||
</table> | |||
</Pannel> |
@@ -1,17 +1,14 @@ | |||
import Pannel from '@/components/pannel/index.vue'; | |||
import Block from '@/components/block/index.vue'; | |||
import data from './data.js'; | |||
export default { | |||
components: { | |||
Block, | |||
Pannel | |||
}, | |||
data () { | |||
return { | |||
data | |||
}; | |||
}, | |||
created () { | |||
}, | |||
mounted () { | |||
}, | |||
methods: { | |||
} | |||
}; |
@@ -0,0 +1,12 @@ | |||
table { | |||
width: 100%; | |||
height: 100%; | |||
tr { | |||
width: 100%; | |||
td { | |||
width: 50%; | |||
} | |||
} | |||
} |