This commit is contained in:
gtz
2022-11-07 08:45:49 +08:00
commit 4d1231adc2
1222 changed files with 194552 additions and 0 deletions

View File

@@ -0,0 +1,143 @@
<!--
* @Author: gtz
* @Date: 2022-01-19 15:58:17
* @LastEditors: zhp
* @LastEditTime: 2022-01-24 09:18:01
* @Description: file content
* @FilePath: \mt-bus-fe\src\views\OperationalOverview\components\baseContainer\index.vue
-->
<template>
<div class="base-container" :style="{height: height * beilv + 'px', fontSize: 12 * beilv + 'px'}">
<div class="line" />
<div class="line line-vertical" />
<div class="line line-right" />
<div class="line line-right-vertical" />
<div class="line line-bottom" />
<div class="line line-bottom-vertical" />
<div class="line line-bottom-right" />
<div class="line line-bottom-right-vertical" />
<div class="bar-item">
<div v-if="title" class="bar-title">
<span>
<svg-icon :icon-class="titleIcon" style="font-size: 1.5em; position: relative; top: .08em" />
{{ title }}
</span>
</div>
<div class="bar-content">
<slot />
</div>
</div>
</div>
</template>
<script>
export default {
name: 'BaseContainer',
props: {
title: {
type: String,
default: ''
},
titleIcon: {
type: String,
default: ''
},
height: {
type: Number,
default: 200
},
baseSize: {
type: Number,
default: 12
},
beilv: {
type: Number,
default: 1
}
},
data() {
return {
curIndex: 0
}
},
mounted() {
},
methods: {
changeTab(num) {
this.curIndex = num
this.$emit('tabSelect', num)
}
}
}
</script>
<style lang="scss" scoped>
.base-container {
color: #fff;
width: 100%;
background-color: rgba($color: #061027, $alpha: 0.15);
position: relative;
border: 2px solid;
border-image: linear-gradient(90deg, rgba(82, 255, 241, 0.6), rgba(95, 190, 249, 0), rgba(82, 255, 241, 0.6)) 2 2;
.line {
position: absolute;
border-top: 4px solid #52FFF1;
width: 2em;
top: -.25em;
left: -.25em;
&-vertical {
top: calc(-5em / 12);
left: calc(-1em / 12);
transform: rotate(90deg);
transform-origin: left;
}
&-right {
top: -.25em;
right: -.25em;
left: inherit;
}
&-right-vertical {
top: calc(-5em / 12);
right: calc(-1em / 12);
left: inherit;
transform: rotate(-90deg);
transform-origin: right;
}
&-bottom {
top: inherit;
left: -.25em;
bottom: -.25em;
}
&-bottom-vertical {
top: inherit;
left: calc(-1em / 12);
bottom: calc(-5em / 12);
transform: rotate(-90deg);
transform-origin: left;
}
&-bottom-right {
top: inherit;
left: inherit;
right: -.25em;
bottom: -.25em;
}
&-bottom-right-vertical {
top: inherit;
left: inherit;
right: calc(-1em / 12);
bottom: calc(-5em / 12);
transform: rotate(90deg);
transform-origin: right;
}
}
.bar-title {
width: 100%;
color: #52FFF1;
font-size: 1.5em;
padding: .67em;
}
// .bar-content{
// padding: 1em;
// }
}
</style>

View File

@@ -0,0 +1,58 @@
<template>
<div class="dataShowBox" :style="{height: height * beilv + 'px'}">
<el-row>
<el-col :span="7" :style="{paddingTop: 24 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 8 * beilv + 'px', fontSize: 32 * beilv + 'px'}">12131</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}">品类1</div>
</el-col>
<el-col :span="1">
<span class="aa" :style="{height: 80 * beilv + 'px', marginTop: 16 * beilv + 'px'}" />
</el-col>
<el-col :span="7" :style="{paddingTop: 24 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 8 * beilv + 'px', fontSize: 32 * beilv + 'px'}">12131</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}">品类2</div>
</el-col>
<el-col :span="1">
<span class="aa" :style="{height: 80 * beilv + 'px', marginTop: 16 * beilv + 'px'}" />
</el-col>
<el-col :span="7" :style="{paddingTop: 24 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 8 * beilv + 'px', fontSize: 32 * beilv + 'px'}">12131</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}">品类3</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
props: {
height: {
type: Number,
default: 200
},
beilv: {
type: Number,
default: 1
}
}
}
</script>
<style lang="scss" scoped>
.dataShowBox {
text-align: center;
width: 100%;
background: rgba(0, 255, 241, 0.03);
box-shadow: inset 0px 0px 20px 0px rgba(255, 255, 255, 0.22);
}
.numStyle {
color: #52fff1;
}
.fontStyle {
color: #ffffff;
}
.aa {
display: block;
width: 1px;
background: linear-gradient(153deg, rgba(153, 255, 249, 0) 0%, #60fff1 46%, rgba(96, 255, 241, 0) 100%);
margin: auto;
}
</style>

View File

@@ -0,0 +1,71 @@
<template>
<div class="dataShowMain" :style="{height: height * beilv + 'px'}">
<el-row>
<el-col :span="7" :style="{paddingTop: 64 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 16 * beilv + 'px'}">
<span :style="{fontSize: 24 * beilv + 'px'}">¥</span>
<span :style="{fontSize: 36 * beilv + 'px'}">400,000.</span>
<span :style="{fontSize: 24 * beilv + 'px'}">00</span>
</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}"> 年度销售目标 </div>
</el-col>
<el-col :span="1">
<span class="aa" :style="{height: 160 * beilv + 'px', marginTop: 28 * beilv + 'px'}" />
</el-col>
<el-col :span="7" :style="{paddingTop: 64 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 16 * beilv + 'px'}">
<span :style="{fontSize: 24 * beilv + 'px'}">¥</span>
<span :style="{fontSize: 36 * beilv + 'px'}">417,997.</span>
<span :style="{fontSize: 24 * beilv + 'px'}">00</span>
</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}"> 年度完成值 </div>
</el-col>
<el-col :span="1">
<span class="aa" :style="{height: 160 * beilv + 'px', marginTop: 28 * beilv + 'px'}" />
</el-col>
<el-col :span="7" :style="{paddingTop: 64 * beilv + 'px'}">
<div class="numStyle" :style="{marginBottom: 16 * beilv + 'px'}">
<span :style="{fontSize: 36 * beilv + 'px'}">104.</span>
<span :style="{fontSize: 24 * beilv + 'px'}">5</span>
<span :style="{fontSize: 36 * beilv + 'px'}">%</span>
</div>
<div class="fontStyle" :style="{fontSize: 18 * beilv + 'px'}"> 目标完成率 </div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
props: {
height: {
type: Number,
default: 200
},
beilv: {
type: Number,
default: 1
}
}
}
</script>
<style scoped>
.dataShowMain {
text-align: center;
height: 90px;
background: rgba(0, 255, 241, 0.03);
box-shadow: inset 0px 0px 20px 0px rgba(255, 255, 255, 0.22);
}
.numStyle {
color: #fff;
font-weight: 600;
}
.fontStyle {
color: #52fff1;
}
.aa {
display: block;
width: 1px;
background: linear-gradient(153deg, rgba(153, 255, 249, 0) 0%, #60fff1 46%, rgba(96, 255, 241, 0) 100%);
margin: auto;
}
</style>

View File

@@ -0,0 +1,191 @@
<template>
<div id="monthChart" :style="{ height: height * beilv + 'px', width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
export default {
mixins: [resize],
props: {
beilv: {
type: Number,
default: 1
},
height: {
type: String,
default: '300px'
},
width: {
type: String,
default: '100%'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById('monthChart'))
this.chart.setOption({
legend: {
itemWidth: 15, // 设置legend图标的宽度
itemHeight: 15, // 设置legend图标的高度
right: '10%',
data: ['求和项:金额', '求和项:数量'],
textStyle: {
color: '#ffffff80'
}
},
xAxis: {
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
axisLine: {
lineStyle: {
color: '#ffffff80'
},
show: false
},
axisTick: {
show: false
}
},
yAxis: [
{
type: 'value',
name: '金额',
position: 'left',
alignTicks: true,
axisLine: {
lineStyle: {
type: 'solid',
color: '#21325980'
},
show: true
},
splitLine: {
lineStyle: {
type: 'solid',
color: '#21325980'
}
},
axisTick: {
show: false
},
axisLabel: {
// y轴文字的配置
textStyle: {
color: '#ffffff80' // Y轴内容文字颜色
},
formatter: '{value} W'
},
nameTextStyle: {
color: '#FFFFFF80',
fontSize: 12
}
},
{
type: 'value',
name: '数量',
position: 'right',
alignTicks: true,
splitLine: {
lineStyle: {
type: 'dashed',
color: '#21325980'
}
},
axisLine: {
lineStyle: {
type: 'dashed',
color: '#21325980'
}
},
axisTick: {
show: false
},
axisLabel: {
// y轴文字的配置
textStyle: {
color: '#ffffff80' // Y轴内容文字颜色
}
},
nameTextStyle: {
color: '#FFFFFF80',
fontSize: 12
}
}
],
series: [
{
name: '求和项:金额',
data: [12, 20, 15, 8, 7, 11, 13, 11, 9, 10.5, 13, 15],
type: 'bar',
barMaxWidth: 'auto',
barWidth: 12,
itemStyle: {
color: {
x: 0,
y: 0,
x2: 1,
y2: 0,
type: 'linear',
colorStops: [
{
offset: 0,
color: '#1EBEAC' // 0% 处的颜色
},
{
offset: 1,
color: '#52FDEA' // 100% 处的颜色
}
]
}
}
},
{
data: [12, 20, 15, 8, 7, 11, 13, 11, 9, 10.5, 13, 15],
type: 'pictorialBar',
barMaxWidth: '20',
symbolPosition: 'end',
symbol: 'diamond',
itemStyle: {
// 设置symbol的颜色
normal: {
color: '#A4FFF5'
}
},
symbolOffset: [0, '-50%'],
symbolSize: [12, 10],
zlevel: 2
},
{
name: '求和项:数量',
type: 'line',
yAxisIndex: 1,
data: [90, 210, 180, 120, 60, 90, 150, 120, 40, 130, 145, 90],
showSymbol: true,
symbol: 'circle',
symbolSize: 5,
color: '#DE9134',
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: 'rgba(255, 145, 52, 1)' }, // 顶端颜色
{ offset: 1, color: 'rgba(255, 145, 52, 0.1)' } // 底部颜色
])
}
}
}
]
})
}
}
}
</script>

View File

@@ -0,0 +1,55 @@
import { debounce } from '@/utils'
export default {
data() {
return {
$_sidebarElm: null,
$_resizeHandler: null
}
},
mounted() {
this.$_resizeHandler = debounce(() => {
if (this.chart) {
this.chart.resize()
}
}, 100)
this.$_initResizeEvent()
this.$_initSidebarResizeEvent()
},
beforeDestroy() {
this.$_destroyResizeEvent()
this.$_destroySidebarResizeEvent()
},
// to fixed bug when cached by keep-alive
// https://github.com/PanJiaChen/vue-element-admin/issues/2116
activated() {
this.$_initResizeEvent()
this.$_initSidebarResizeEvent()
},
deactivated() {
this.$_destroyResizeEvent()
this.$_destroySidebarResizeEvent()
},
methods: {
// use $_ for mixins properties
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
$_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler)
},
$_destroyResizeEvent() {
window.removeEventListener('resize', this.$_resizeHandler)
},
$_sidebarResizeHandler(e) {
if (e.propertyName === 'width') {
this.$_resizeHandler()
}
},
$_initSidebarResizeEvent() {
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
},
$_destroySidebarResizeEvent() {
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
}
}
}

View File

@@ -0,0 +1,160 @@
<template>
<div>
<div :id="id" :style="{ height: height * beilv + 'px', width:width}" />
</div>
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
const color1 = new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{ offset: 0, color: '#E77657' },
{ offset: 1, color: '#53222A' }
],
false
)
const color2 = new echarts.graphic.LinearGradient(
0,
0,
1,
0,
[
{ offset: 0, color: '#31AFF0' },
{ offset: 1, color: '#0B3A52' }
],
false
)
const color3 = new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{ offset: 0, color: '#F9A237' },
{ offset: 1, color: '#6E4A27' }
],
false
)
const color4 = new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{ offset: 0, color: '#7AEAE0' },
{ offset: 1, color: '#18433F' }
],
false
)
export default {
mixins: [resize],
props: {
id: {
type: String,
default: 'OverviewLine'
},
beilv: {
type: Number,
default: 1
},
height: {
type: String,
default: '300px'
},
width: {
type: String,
default: '100%'
},
pieData: {
type: Array,
default: () => []
},
formatter: {
type: String,
default: '{firstLine|{b}} \n {secondLine|{c}}'
},
pieStyle: {
type: Object,
default: () => {}
}
},
data() {
return {
chart: null
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById(this.id))
this.chart.setOption({
tooltip: {
trigger: 'item'
},
color: [color1, color2, color3, color4],
series: [
{
name: 'Access From',
type: 'pie',
radius: ['60%', '90%'],
hoverAnimation: false,
itemStyle: {
borderRadius: 0,
borderWidth: 3,
borderColor: '#060F20'
},
labelLine: {
show: true,
length: 0,
length2: this.beilv * this.pieStyle.line_s,
smooth: true,
lineStyle: {
width: 1,
cap: 'butt'
}
},
label: {
formatter: this.pieStyle.formatter,
minMargin: 5,
rich: {
firstLine: {
fontSize: this.beilv * 14,
lineHeight: this.beilv * 30,
color: '#ffffff80'
},
secondLine: {
fontSize: this.beilv * this.pieStyle.num_fs,
color: '#fff'
}
}
},
data: this.pieStyle.pieData,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
})
}
}
}
</script>

View File

@@ -0,0 +1,55 @@
<template>
<el-row class="progress-main-box">
<el-col :span="24">
<template v-for="(item,index) in productData">
<el-row :key="index" :style="{marginBottom: 18 * beilv + 'px'}">
<el-col :span="4" style="text-align: right;padding-right:5px">{{ item.name }}</el-col>
<el-col :span="20">
<div
class="progress"
:class="index%2===0?'progress1':'progress2'"
:style="{height: 18 * beilv + 'px', width: item.percentage}"
>
{{ item.number }}
</div>
</el-col>
</el-row>
</template>
</el-col>
</el-row>
</template>
<script>
export default {
naem: 'progressBox',
props: {
productData: {
type: Array,
default: () => []
},
beilv: {
type: Number,
default: 1
}
},
data() {
return {}
}
}
</script>
<style scoped>
.progress-main-box {
padding: 0 10px;
}
.progress {
text-align: right;
line-height: 18px;
border-radius: 5px;
padding-right: 5px;
}
.progress1 {
background: linear-gradient(270deg, #83f7ec 0%, rgba(76, 236, 213, 0.05) 100%);
}
.progress2 {
background: linear-gradient(270deg, #3ac6fc 0%, rgba(56, 195, 255, 0.05) 100%);
}
</style>

View File

@@ -0,0 +1,204 @@
<template>
<div class="ringChartContainer">
<ul v-if="orderList.length > 0" class="pieBox">
<li v-for="(item,index) in orderList" :key="index">
<div>
<span class="title">{{ item.name }}</span>
</div>
<div :id="item.id" style="height:250px;width:250px" />
</li>
</ul>
<div v-else class="imgBox">
<img src="./../../../../assets/img/empty.png" alt="">
</div>
</div>
</template>
<script>
import echarts from 'echarts'
import i18n from '@/lang'
export default {
props: {
orderList: {
type: Array,
default: () => {
return []
}
}
},
data() {
return {
dataS: []
}
},
mounted() {
},
methods: {
initChart() {
for (const item of this.orderList) {
var chartDom = document.getElementById(item.id)
var myChart = echarts.init(chartDom)
var outQuantity = item.outQuantity ? item.outQuantity : 0 // 加工数量
var scrapQuantity = item.scrapQuantity ? item.scrapQuantity : 0 // 损坏数量
var planQuantity = item.planQuantity ? item.planQuantity : 0 // 计划加工量
var syQuantity = (planQuantity - outQuantity - scrapQuantity) > 0 ? (planQuantity - outQuantity - scrapQuantity) : 0// 剩余数量
var option = {
color: ['#2C3AAE', '#C5E951', '#DCE4F1'],
tooltip: {
trigger: 'item'
},
legend: {
icon: 'circle',
bottom: '5%',
left: 'center',
itemWidth: 8,
itemHeight: 8
},
series: [
// 内圆1
{
type: 'pie',
zlevel: 2, // 层级
radius: ['46%', '50%'],
center: ['50%', '45%'],
itemStyle: {
normal: {
shadowBlur: 10,
shadowColor: 'rgba(209, 204, 214, 0.64)',
color: '#fff',
label: {
show: false
},
labelLine: {
show: false
}
}
},
tooltip: {
show: false
},
hoverAnimation: false,
data: [100]
},
// 外环1
{
type: 'pie',
radius: ['70%', '71%'],
center: ['50%', '45%'],
zlevel: 1, // 层级
itemStyle: {
normal: {
shadowBlur: 10,
shadowColor: 'rgba(0,0,0,.5)',
color: '#fff',
label: {
show: false
},
labelLine: {
show: false
}
}
},
tooltip: {
show: false
},
hoverAnimation: false,
data: [100]
},
// 占比环
{
name: 'Access From',
type: 'pie',
radius: ['50%', '70%'],
center: ['50%', '45%'],
clockWise: true,
avoidLabelOverlap: false,
hoverAnimation: false,
silent: true,
label: {
normal: {
show: true,
position: 'center',
color: '#9A9EBA',
formatter: ['{a|' + planQuantity + '}', '{b|' + i18n.t('module.orderManage.orderMonitoring.orderQuantity') + '}'].join('\n\n'),
rich: {
a: {
color: '#2F3AA7',
fontSize: 24
},
b: {
color: '#1E2AA8',
fontSize: 12
}
}
}
},
labelLine: {
show: false
},
data: [
{
value: outQuantity,
name: i18n.t('module.orderManage.orderMonitoring.processingCapacity') + outQuantity,
itemStyle: {
normal: {
color: '#2C3AAE'
}
}
},
{
value: scrapQuantity,
name: i18n.t('module.orderManage.orderMonitoring.damageQuantity') + scrapQuantity,
itemStyle: {
normal: {
color: '#C5E951'
}
}
},
{
value: syQuantity,
itemStyle: {
normal: {
color: '#DCE4F1'
}, // 默认颜色
emphasis: {
color: '#DCE4F1'
} // hover 颜色
}
}
]
}
]
}
myChart.setOption(option, true)
}
}
}
}
</script>
<style scoped>
ul {
list-style: none;
margin: 0;
padding: 0;
}
.pieBox {
display: flex;
flex-flow: row wrap;
}
.pieBox > li {
background-color: rgba(247, 248, 255, 0.7);
margin: 0 16px 16px 0;
padding: 16px;
}
.pieBox .title {
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
}
.imgBox {
text-align: center;
padding-top: 20px;
}
</style>

View File

@@ -0,0 +1,200 @@
<template>
<div id="saleTop" :style="{ height: height * beilv + 'px', width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
export default {
mixins: [resize],
props: {
beilv: {
type: Number,
default: 1
},
height: {
type: String,
default: '300px'
},
width: {
type: String,
default: '100%'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById('saleTop'))
this.chart.setOption({
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['员工2', '员工1', '员工3'],
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: '#fff'
}
}
}
],
yAxis: [
{
type: 'value',
show: false
}
],
series: [
{
name: 'Direct',
type: 'bar',
barWidth: 32,
itemStyle: {
// 柱状颜色和圆角
barBorderRadius: [16, 16, 16, 16] // (顺时针左上,右上,右下,左下)
},
label: {
// 柱体上显示数值
show: true, // 开启显示
position: 'top', // 在上方显示
textStyle: {
// 数值样式
fontSize: this.beilv * 22,
color: '#FFF89F'
},
formatter: '{c}'
},
data: [
{
value: 100,
itemStyle: {
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{ offset: 0, color: '#281B0E' },
{ offset: 1, color: '#3AC6FC' }
],
false
)
}
},
{
value: 205,
itemStyle: {
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{ offset: 0, color: '#281B0E' },
{ offset: 1, color: '#F9A237' }
],
false
)
}
},
{
value: 152,
itemStyle: {
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{ offset: 0, color: '#281B0E' },
{ offset: 1, color: '#83F7EC' }
],
false
)
}
}
]
},
{
type: 'pictorialBar',
name: 'pictorial element',
symbolSize: 50,
z: 10,
data: [
{
value: 100,
symbol:
'image://data:data:image/png;base64,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',
xAxis: 0,
symbolPosition: 'end',
symbolOffset: [0, this.beilv * -200 + '%']
},
{
value: 205,
symbol:
'image://data:image/png;base64,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',
xAxis: 1,
symbolPosition: 'end',
symbolOffset: [0, this.beilv * -200 + '%']
},
{
value: 152,
symbol:
'image://data:data:image/png;base64,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',
xAxis: 2,
symbolPosition: 'end',
symbolOffset: [0, this.beilv * -200 + '%']
}
]
}
]
})
}
}
}
</script>
<style scoped>
.progress {
width: 12px;
border-radius: 5px;
}
.progress1 {
background: linear-gradient(180deg, #3ac6fc 0%, rgba(56, 195, 255, 0.05) 100%);
}
.progress2 {
background: linear-gradient(346deg, #281b0e 0%, #f9a237 100%);
}
.progress3 {
background: linear-gradient(180deg, #83f7ec 0%, rgba(76, 236, 213, 0.05) 100%);
}
</style>

View File

@@ -0,0 +1,239 @@
<template>
<div class="app-container">
<head-form :form-config="headFormConfig" @headBtnClick="btnClick" />
<el-tabs v-model="activeName" @tab-click="toggleClick">
<el-tab-pane :label="this.$t('module.orderManage.orderMonitoring.datasheets')" name="dataList" />
<el-tab-pane :label="this.$t('module.orderManage.orderMonitoring.donutChart')" name="ringChart" />
</el-tabs>
<!-- 数据列表 -->
<div v-if="showList">
<base-table
:page="listQuery.current"
:limit="listQuery.size"
:height="tableH"
:table-config="tableProps"
:table-data="list"
:is-loading="listLoading"
>
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="trueWidth"
:method-list="tableBtn"
@clickBtn="handleClick"
/>
</base-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="listQuery.current"
:limit.sync="listQuery.size"
@pagination="getList()"
/>
</div>
<!-- 环状图 -->
<ring-chart v-else ref="ringCharts" :order-list="list" />
</div>
</template>
<script>
import HeadForm from '@/components/basicData/HeadForm'
import i18n from '@/lang'
import { timeFormatter, rateFormatter } from '@/filters'
import BaseTable from '@/components/BaseTable'
import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
import MethodBtn from '@/components/BaseTable/subcomponents/MethodBtn'
import { orderMonitor } from '@/api/orderManage/order/order'
import ringChart from './components/ringChart.vue'
import newBasicData from '@/filters/newBasicData'
import Vue from 'vue'
import { tableHeight } from '@/utils/index'
// detail是跳到监控详情的详情是假数据目前暂时不放详情按钮
const tableBtn = [
// {
// type: 'detail',
// btnName: 'btn.detail'
// }
]
const tableProps = [
{
prop: 'name',
label: i18n.t('module.orderManage.orderMonitoring.orderName'),
minWidth: 230,
isFixed: true
},
{
prop: 'startProduceTime',
label: i18n.t('module.orderManage.orderMonitoring.startProcessingTime'),
minWidth: 160,
filter: timeFormatter
},
{
prop: 'finishProduceTime',
label: i18n.t('module.orderManage.orderMonitoring.completeTime'),
minWidth: 160,
filter: timeFormatter
},
{
prop: 'pdl',
label: i18n.t('module.orderManage.orderMonitoring.processingLine')
},
{
prop: 'outRate',
label: i18n.t('module.orderManage.orderMonitoring.processingCompletionRate'),
minWidth: 160,
filter: rateFormatter
},
{
prop: 'inQuantity',
label: i18n.t('module.orderManage.orderMonitoring.originalFilmInput')
},
{
prop: 'inRate',
label: i18n.t('module.orderManage.orderMonitoring.originalFilmusage'),
filter: rateFormatter
},
{
prop: 'scrapRate',
label: i18n.t('module.orderManage.orderMonitoring.scrapRate'),
filter: rateFormatter
},
{
prop: 'customerName',
label: i18n.t('module.orderManage.orderMonitoring.customer')
},
{
prop: 'status',
label: i18n.t('module.orderManage.orderMonitoring.orderStatus'),
filter: newBasicData('1526063541841727490')
},
{
prop: 'unitCode',
label: i18n.t('module.orderManage.orderMonitoring.unit'),
filter: newBasicData('1')
},
{
prop: 'outQuantity',
label: i18n.t('module.orderManage.orderMonitoring.processingCapacity')
},
{
prop: 'specifications',
label: i18n.t('module.orderManage.orderMonitoring.productSpecifications')
},
{
prop: 'price',
label: i18n.t('module.orderManage.orderMonitoring.price')
}
]
export default {
name: 'OrderMonitoring',
components: { HeadForm, BaseTable, Pagination, MethodBtn, ringChart },
data() {
return {
showList: true,
headFormConfig: [
{
type: 'input',
label: i18n.t('module.orderManage.orderMonitoring.orderName'),
placeholder: i18n.t('module.orderManage.orderMonitoring.orderName'),
param: 'name'
},
{
type: 'datePicker',
label: i18n.t('module.orderManage.orderMonitoring.period'),
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
rangeSeparator: '-',
startPlaceholder: this.$t('module.orderManage.orderMonitoring.startTime'),
endPlaceholder: this.$t('module.orderManage.orderMonitoring.endTime'),
param: 'searchTime'
},
{
type: 'button',
btnName: 'btn.search',
name: 'search',
color: 'primary'
}
],
headFormValue: {},
activeName: 'dataList',
listQuery: {
current: 1,
size: 20,
name: '',
startTime: '',
endTime: ''
},
tableProps,
tableBtn,
list: [],
listLoading: false,
trueWidth: 80,
tableH: tableHeight(333),
total: 0,
unitList: JSON.parse(localStorage.getItem('dictObj'))['1'],
unitObj: {},
statusList: JSON.parse(localStorage.getItem('dictObj'))['1'],
statusObj: {}
}
},
mounted() {
window.addEventListener('resize', () => {
this.tableH = tableHeight(333)
})
this.unitList.map((item) => {
this.unitObj[item.dataCode] = item.dataName
})
Vue.set(this.tableProps[12], 'unitObj', this.unitObj)
this.statusList.map(item => {
this.statusObj[item.dataCode] = item.dataName
})
Vue.set(this.tableProps[11], 'statusObj', this.statusObj)
this.getList()
},
methods: {
getList() {
this.listQuery.name = this.headFormValue.name
this.listQuery.startTime = this.headFormValue.searchTime ? this.headFormValue.searchTime[0] + 'T00:00:00' : ''
this.listQuery.endTime = this.headFormValue.searchTime ? this.headFormValue.searchTime[1] + 'T23:59:59' : ''
orderMonitor(this.listQuery).then(res => {
if (res.data.records) {
this.list = res.data.records
} else {
this.list = []
}
this.total = res.data.total
if (!this.showList) {
this.$nextTick(() => {
this.$refs.ringCharts.initChart()
})
}
})
},
btnClick(val) {
this.headFormValue = val
// 如果点击的是搜索栏的其他按钮在这里继续写判断
if (this.headFormValue.btnName === 'search') {
this.listQuery.current = 1
this.getList()
}
},
toggleClick() {
if (this.activeName === 'ringChart') {
this.showList = false
this.$nextTick(() => {
this.$refs.ringCharts.initChart()
})
} else if (this.activeName === 'dataList') {
this.showList = true
}
this.getList()
},
handleClick() {
this.$router.push({
name: 'orderMonitoringDetail'
})
}
}
}
</script>

View File

@@ -0,0 +1,301 @@
<template>
<div id="container" ref="container" class="visual-container">
<el-row
class="container-title"
:style="{
height: beilv * 88 + 'px',
lineHeight: beilv * 88 + 'px',
fontSize: beilv * 30 + 'px'
}"
>
<img src="../../../assets/img/logo.png" style="width:1.1em;position:relative;top:.4em" alt="">
合肥新能源数智工厂订单监控查询
<el-button
type="text"
class="title-button"
:style="{ right: 33 * beilv + 'px', top: 37 * beilv + 'px' }"
@click="changeFullScreen"
>
<svg-icon v-if="isFullScreen" icon-class="unFullScreenView" />
<svg-icon v-else icon-class="fullScreenView" />
</el-button>
</el-row>
<el-row class="container-main">
<el-row :style="{ padding: '0 ' + 9 * beilv + 'px' }" :gutter="9 * beilv">
<el-col :span="6">
<el-row>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24" style="position: relative;">
<base-container :beilv="beilv" :height="463" :title="'三大品类'" :title-icon="'productType'">
<pie-chart1 :id="'pie-chart1'" :beilv="beilv" :height="'256'" :pie-style="pieStyle1" />
<dataShowBox :beilv="beilv" :height="112" style="position: absolute;bottom: 0;" />
</base-container>
</el-col>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24">
<base-container :beilv="beilv" :height="463" :title="'销售额前十产品'" :title-icon="'5_4'">
<progressBox :beilv="beilv" :product-data="progressData1" :style="{paddingTop: 20 * beilv + 'px'}" />
</base-container>
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24">
<dataShowMain :beilv="beilv" :height="216" />
</el-col>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24">
<base-container :beilv="beilv" :height="711" :title="'各个季度完成情况'" :title-icon="'number'">
<pie-chart2 :id="'pie-chart2'" :beilv="beilv" :height="'310'" :pie-style="pieStyle2" />
<div>
<div class="bar-title">
<span>
<svg-icon :icon-class="'5_2'" style="font-size: 1.5em; position: relative; top: .08em" />
各月情况
</span>
</div>
<lineChart :beilv="beilv" :height="'330'" />
</div>
</base-container>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-row>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24">
<base-container :beilv="beilv" :height="463" :title="'销售三甲员工'" :title-icon="'1_1'">
<saleTop :beilv="beilv" :height="'356'" />
</base-container>
</el-col>
<el-col :style="{ margin: 8 * beilv + 'px' + ' 0' }" :span="24">
<base-container :beilv="beilv" :height="463" :title="'大客户'" :title-icon="'1_4'">
<progressBox :beilv="beilv" :product-data="progressData2" :style="{paddingTop: 20 * beilv + 'px'}" />
</base-container>
</el-col>
</el-row>
</el-col>
</el-row>
</el-row>
</div>
</template>
<script>
import baseContainer from './components/baseContainer'
import pieChart1 from './components/pieChart'
import pieChart2 from './components/pieChart'
import screenfull from 'screenfull'
import dataShowBox from './components/dataShowBox'
import dataShowMain from './components/dataShowMain'
import progressBox from './components/progressBox'
import saleTop from './components/saleTop'
import lineChart from './components/lineChart'
const pieStyle1 = {
num_fs: 18,
line_s: 24,
pieData: [
{ value: 330, name: '品类1' },
{ value: 120, name: '品类2' },
{ value: 250, name: '品类3' }
],
formatter: '{firstLine|{b}} \n {secondLine|{d}%}'
}
const pieStyle2 = {
num_fs: 24,
line_s: 95,
pieData: [
{ value: 329, name: '第一季度' },
{ value: 119, name: '第二季度' },
{ value: 251, name: '第三季度' },
{ value: 301, name: '第四季度' }
],
formatter: '{firstLine|{b} {d}%} \n {secondLine|{c}}'
}
export default {
name: 'OrderMonitoringDetail',
components: {
baseContainer,
pieChart1,
pieChart2,
dataShowBox,
dataShowMain,
progressBox,
saleTop,
lineChart
},
data() {
return {
beilv: 1,
isFullScreen: false,
pieStyle1,
pieStyle2,
progressData1: [],
progressData2: []
}
},
watch: {
isFullScreen: function(val) {
if (val) {
this.beilv = document.body.offsetWidth / 1920
} else {
this.beilv = document.getElementById('container').offsetWidth / 1920
}
},
'sidebar.opened': function(val) {
console.log(val)
if (!this.isFullScreen) {
setTimeout(() => {
this.beilv = document.getElementById('container').offsetWidth / 1920
}, 300)
}
}
},
mounted() {
this.beilv = document.getElementById('container').offsetWidth / 1920
window.addEventListener('resize', () => {
if (this.isFullScreen) {
this.beilv = document.body.offsetWidth / 1920
} else {
this.beilv = document.getElementById('container').offsetWidth / 1920
}
})
this.getMsg()
},
methods: {
getMsg() {
this.progressData1 = [
{ name: '产品1', number: 1000, percentage: '100%' },
{ name: '产品2', number: 900, percentage: '90%' },
{ name: '产品3', number: 850, percentage: '85%' },
{ name: '产品4', number: 700, percentage: '70%' },
{ name: '产品5', number: 620, percentage: '62%' },
{ name: '产品6', number: 550, percentage: '55%' },
{ name: '产品7', number: 530, percentage: '53%' },
{ name: '产品8', number: 500, percentage: '50%' },
{ name: '产品9', number: 430, percentage: '43%' },
{ name: '产品10', number: 300, percentage: '30%' }
]
this.progressData2 = [
{ name: '客户1', number: 1000, percentage: '100%' },
{ name: '客户2', number: 900, percentage: '90%' },
{ name: '客户3', number: 850, percentage: '85%' },
{ name: '客户4', number: 700, percentage: '70%' },
{ name: '客户5', number: 620, percentage: '62%' },
{ name: '客户6', number: 550, percentage: '55%' },
{ name: '客户7', number: 530, percentage: '53%' },
{ name: '客户8', number: 500, percentage: '50%' },
{ name: '客户9', number: 430, percentage: '43%' },
{ name: '客户10', number: 300, percentage: '30%' }
]
},
change() {
this.isFullScreen = screenfull.isFullscreen
},
init() {
if (screenfull.enabled) {
screenfull.on('change', this.change)
}
},
destroy() {
if (screenfull.enabled) {
screenfull.off('change', this.change)
}
},
changeFullScreen() {
if (!screenfull.enabled) {
this.$message({
message: 'you browser can not work',
type: 'warning'
})
return false
}
screenfull.toggle(this.$refs.container)
}
}
}
</script>
<style lang="scss" scoped>
.visual-container {
width: 100%;
min-width: 960px;
background: url('../../../assets/img/OperationalOverview/back.png') no-repeat;
background-size: cover;
.container-title {
width: 100%;
background: url('../../../assets/img/OperationalOverview/title.png') no-repeat;
background-size: 100% 100%;
color: #00fff0;
text-align: center;
.title-button {
color: #00fff0;
font-size: 20px;
position: absolute;
}
}
.container-main {
padding: 16px;
}
}
.now-team-title {
margin: 0;
margin-top: -1em;
font-size: 1.2em;
line-height: 2em;
color: #fff;
}
.main-title {
text-align: center;
}
.now-secondary-title {
margin: 0;
font-size: 1em;
line-height: 2em;
color: #fff;
}
.now-team-content {
font-size: 3em;
line-height: 1em;
color: #52fff1;
text-align: center;
}
// ::v-deep .el-progress-bar__inner {
// background-color: unset;
// background-image: linear-gradient(to right, #4573fe, #47f8dc);
// }
</style>
<style lang="scss">
.visual-container {
::-webkit-scrollbar {
width: 8px;
height: 8px;
background-color: transparent;
}
::-webkit-scrollbar-track-piece {
background: #1b2b3d;
}
::-webkit-scrollbar-corner {
background: #1b2b3d;
}
::-webkit-scrollbar-track {
width: 6px;
background: #1b2b3d;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
::-webkit-scrollbar-thumb {
background: rgba($color: #5bc4be, $alpha: 0.7);
background-clip: padding-box;
min-height: 28px;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
transition: background-color 0.3s;
cursor: pointer;
}
::-webkit-scrollbar-thumb:hover {
background-color: rgba($color: #5bc4be, $alpha: 1);
}
}
</style>