排名柱状图
示例
代码
< ! -- 排名数据趋势图 -- >
< div class = "rank" >
< div class = "rank_title" >
< div class = "rank_title_left" >
< span v- if = "rankType === 1" > { { $lang ( '代理区排名' ) } } < / span>
< span v- else > { { $lang ( '中心排名' ) } } < / span>
< / div>
< div class = "rank_title_right" >
< el- button size= "small" type= "info" : class = "rankType === 1 ? 'btnBgc' : ''" @click= "rankChange(1)" > { { $lang ( '代理区' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "rankType !== 1 ? 'btnBgc' : ''" @click= "rankChange(2)" > { { $lang ( '中心' ) } } < / el- button>
< / div>
< / div>
< div class = "rank_table" >
< el- table ref= "table" : data= "tableData" : border= "false" >
< el- table- column prop= "rank" type= "index" : label= "$lang('排名')" width= "90" header- align= "right" align= "right" >
< template slot- scope= "{ row }" >
< div v- if = "row.rank < 4" >
< span class = "btnBgc top" > Top< / span> < span> { { row. rank } } < / span>
< / div>
< div v- else > { { row. rank } } < / div>
< / template>
< / el- table- column>
< el- table- column prop= "netWorkName" : label= "rankType === 1 ? $lang('代理区名称') : $lang('中心名称')" width= "140" header- align= "center" align= "center" >
< template slot- scope= "{ row }" > { { row. netWorkName } } < / template>
< / el- table- column>
< el- table- column : label= "$lang('总主单号数量')" header- align= "left" align= "left" > < / el- table- column>
< / el- table>
< v- chart ref= "RankChart" class = "rank_chart" : options= "rankOptions" : style= "{ height: rankHeight,width: rankWidth}" v- if = "rankNum" / >
< / div>
data ( {
return {
tableData: [ ] ,
rankNum: [ ] ,
rankType: 1 ,
rankPage: {
size: 10 ,
current: 1 ,
total: 0
} ,
}
} )
< ! -- 分页 -- >
< div class = "rank_pages b('pagination')" >
< el- pagination
: page- size= "rankPage.size"
: current- page= "rankPage.current"
layout= "prev, pager, next"
: total= "rankPage.total"
@size- change= "sizeChangeRank"
@current- change= "currentChangeRank"
>
< / el- pagination>
< / div>
< / div>
rankOptions ( ) {
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
}
} ,
grid: {
top: 5 ,
left: 0 ,
bottom: 0 ,
backgroundColor: 'transparent'
} ,
xAxis: {
show: false ,
splitNumber: 15 ,
interval: 25
} ,
yAxis: {
type: 'category' ,
show: false
} ,
series: [
{
type: 'bar' ,
data: this . rankNum,
showBackground: true ,
backgroundStyle: {
color: '#ccc'
} ,
label: {
show: true ,
position: 'right'
} ,
itemStyle: {
barBorderRadius: 30
} ,
barWidth: 12
}
] ,
direction: 'horizontal'
}
} ,
rankHeight ( ) {
this . $nextTick ( ( ) => {
this . $refs[ 'RankChart' ] . resize ( )
} )
return this . rankNum && this . rankNum. length > 0 ? 38 * this . rankNum. length + 'px' : '0px'
}
汇总
示例
代码
< ! -- 汇总数据趋势图 -- >
< div class = "collect" >
< div class = "collect_btn" >
< el- button size= "small" type= "info" : class = "charType === 1 ? 'btnBgc' : ''" @click= "collectChange(1)" > { { $lang ( '总包号数量' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "charType === 3 ? 'btnBgc' : ''" @click= "collectChange(3)" > { { $lang ( '总主单重量' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "charType === 2 ? 'btnBgc' : ''" @click= "collectChange(2)" > { { $lang ( '总交运重量' ) } } < / el- button>
< / div>
< v- chart ref= "CollectChart" class = "collect_chart" : options= "collectOptions" / >
< / div>
data ( ) {
return {
collectColumnars: [ ] ,
collectBrokenLines: [ ] ,
xAxisDataCollect: [ ] ,
collectMax: null ,
collectMin: null ,
lineMinValue: null ,
lineMaxValue: null ,
charType: 1 ,
collectData: [ '' , this . $lang ( '总包号数量' ) , this . $lang ( '总交运重量' ) , this . $lang ( '总主单重量' ) ] ,
}
}
collectOptions ( ) {
const $this = this
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
} ,
formatter : function ( params ) {
let value1 = ''
let value2 = ''
let axisValue = ''
params. map ( ( item ) => {
if ( item. componentSubType === 'bar' ) {
axisValue = item. axisValue
value1 = item. value. toLocaleString ( )
}
if ( item. componentSubType === 'line' ) {
value2 = item. value
}
} )
return axisValue + '<br>' + $this . collectData[ $this . charType] + ' : ' + value1 + '<br>' + $this . $lang ( '环比' ) + ' : ' + value2 + '%'
}
} ,
legend: {
data: [ $this . collectData[ $this . charType] , this . $lang ( '环比' ) ]
} ,
xAxis: [
{
type: 'category' ,
data: this . xAxisDataCollect
}
] ,
yAxis: [
{
type: 'value' ,
min: 0 ,
max: this . collectMax
} ,
{
type: 'value' ,
min: this . lineMinValue,
max: this . lineMaxValue,
axisLabel: {
formatter: '{value} %'
}
}
] ,
series: [
{
name: $this . collectData[ $this . charType] ,
type: 'bar' ,
data: this . collectColumnars,
label: {
show: true ,
position: 'top' ,
fontSize: 15
}
} ,
{
name: $this . $lang ( '环比' ) ,
type: 'line' ,
yAxisIndex: 1 ,
data: this . collectBrokenLines
}
]
}
} ,
平均时效
示例
代码
< ! -- 平均时效趋势图 -- >
< div class = "average_aging" v- if = "isShowAverageAgingChart" >
< div class = "average_aging_title" > { { $lang ( '平均时效(分钟)' ) } } < / div>
< v- chart ref= "AverageAgingChart" class = "average_aging_chart" : options= "averageAgingOption" / >
< / div>
data ( ) {
return {
averageAgingColumnars: [ ] ,
averageAgingBrokenLines: [ ] ,
xAxisDataAverageAging: [ ] ,
agingMax: null ,
agingMin: null ,
agingLineMin: null ,
agingLineMax: null
}
}
averageAgingOption ( ) {
const $this = this
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
} ,
formatter : function ( params ) {
let value1 = ''
let value2 = ''
let axisValue = ''
params. map ( ( item ) => {
if ( item. componentSubType === 'bar' ) {
axisValue = item. axisValue
value1 = item. value. toLocaleString ( )
}
if ( item. componentSubType === 'line' ) {
value2 = item. value
}
} )
return axisValue + '<br>' + $this . $lang ( '平均时效' ) + ' : ' + value1 + $this . $lang ( '(分钟)' ) + ' <br>' + $this . $lang ( '环比' ) + ' : ' + value2 + '%'
}
} ,
legend: {
data: [ this . $lang ( '平均时效' ) , this . $lang ( '环比' ) ]
} ,
xAxis: [
{
type: 'category' ,
data: this . xAxisDataAverageAging
}
] ,
yAxis: [
{
type: 'value' ,
min: this . agingMin,
max: this . agingMax
} ,
{
type: 'value' ,
min: this . agingLineMin,
max: this . agingLineMax,
axisLabel: {
formatter: '{value} %'
}
}
] ,
series: [
{
name: $this . $lang ( '平均时效' ) ,
type: 'bar' ,
data: this . averageAgingColumnars,
label: {
show: true ,
position: 'top' ,
fontSize: 15
}
} ,
{
name: $this . $lang ( '环比' ) ,
type: 'line' ,
yAxisIndex: 1 ,
data: this . averageAgingBrokenLines
}
]
}
} ,
全图
< template>
< div class = "flight-transit-timeAbnormal-all" >
< avue- crud
ref= "params"
: data= "tableList"
: option= "listOpt"
: page= "page"
: table- loading= "loading"
@size- change= "sizeChange"
@current- change= "currentChange"
@search- reset= "resetList"
@search- change= "searchChange"
: summary- method= "summaryMethod"
@cell- click= "cellClick"
: cell- class - name= "cellClassName"
>
< template slot= "menuLeft" >
< el- button size= "small" type= "info" @click= "handleExportExcel()" v- if = "hasPower('OUTEXCELALL')" >
< i class = "icon-iconfont iconfont icondaochu1" > < / i> < span> { { $lang ( '导出' ) } } < / span>
< / el- button>
< el- button size= "small" v- if = "hasPower('EXPORTLOGALL')" type= "info" @click= "exportLogDisplay = true" >
< i class = "iconfont icon-iconfont icondaochurizhi1" > < / i> < span> { { $lang ( '导出日志' ) } } < / span>
< / el- button>
< ! -- 列表模式 + 图表模式 -- >
< el- button size= "small" type= "info" @click= "listModel" v- if = "listAndChartShow" >
< i class = "iconfont icon-iconfont iconanniu-shujushuaxin" > < / i> < span> { { $lang ( '列表模式' ) } } < / span>
< / el- button>
< el- button size= "small" type= "info" @click= "chartModel" v- else >
< i class = "iconfont icon-iconfont iconanniu-shujushuaxin" > < / i> < span> { { $lang ( '图表模式' ) } } < / span>
< / el- button>
< / template>
< template slot= "timeSearch" >
< div style= "width: 416px" >
< el- row>
< el- radio- group v- model= "searchForm.queryTimeType" >
< el- radio : label= "1" > { { $lang ( '实际起飞时间' ) } } < / el- radio>
< el- radio : label= "2" > { { $lang ( '实际起飞时间(WIB)' ) } } < / el- radio>
< / el- radio- group>
< / el- row>
< el- date- picker
v- model= "searchForm.operateDate"
type= "daterange"
range- separator= "—"
format= "yyyy-MM-dd"
value- format= "yyyy-MM-dd"
: clearable= "false"
: start- placeholder= "$lang('开始时间')"
: end- placeholder= "$lang('结束时间')"
>
< / el- date- picker>
< / div>
< / template>
< ! -- 始发代理区 登录账号非总部禁用始发代理区-- >
< template slot= "startRegionCodeNameSearch" >
< BaseNetWorkNew
style= "width: 250px"
: query= "{ current: 1, size: 100, typeIds: organLevelObj.NT_AGENT_AREA }"
: dicUrl= "'/transportation/tmsSysNetwork/permissionControlQueryNet'"
: multiple= "true"
: disabled= "user.institutionalLevelId !== 22"
: propObj= "searchForm"
v- on: update: propObj= "searchForm = $event"
: code= "networkKeyValues[0].code"
: name= "networkKeyValues[0].name"
/ >
< / template>
< ! -- 始发转运中心 登录账号是中心禁用始发转运中心-- >
< template slot= "startNetworkNameSearch" >
< BaseNetWorkNew
style= "width: 250px"
: query= "{ current: 1, size: 100, typeIds: organLevelObj.NT_CENTER }"
: dicUrl= "'/transportation/tmsSysNetwork/permissionControlQueryNet'"
: multiple= "true"
: disabled= "user.institutionalLevelId === 335"
: propObj= "searchForm"
v- on: update: propObj= "searchForm = $event"
: code= "networkKeyValues[1].code"
: name= "networkKeyValues[1].name"
/ >
< / template>
< ! -- 异常类型 -- >
< template slot= "exFlagsSearch" >
< el- select v- model= "searchForm.exFlags" : placeholder= "$lang('请选择')" : multiple= "true" style= "width:250px" collapse- tags clearable>
< el- option v- for = "temp in DICT.exceptionRegistrationType" : label= "temp.label" : value= "temp.value" : key= "temp.value" > < / el- option>
< / el- select>
< / template>
< template slot= "searchExtend" >
< div class = "ibank-total-right" >
< div class = "ibank-total-con" v- if = "!chartModelShow" >
< span> { { $lang ( '汇总项' ) } } :< / span>
< el- checkbox v- model= "searchForm.regionCount" > { { $lang ( '始发代理区' ) } } < / el- checkbox>
< el- checkbox v- model= "searchForm.networkCount" > { { $lang ( '始发中心' ) } } < / el- checkbox>
< el- checkbox v- model= "searchForm.exCount" > { { $lang ( '异常类型' ) } } < / el- checkbox>
< / div>
< / div>
< / template>
< / avue- crud>
< ! -- 导出日志 -- >
< DownloadCenter : dialogVisible. sync= "exportLogDisplay" : moduleType= "313" > < / DownloadCenter>
< ! -- 图表模式 -- >
< div class = "chartBox" v- if = "chartModelShow" >
< ! -- 汇总数据展示 -- >
< div class = "collect_data" >
< div class = "collect_data_item" >
< div class = "collect_data_text" > { { $lang ( '平均时效(分钟)' ) } } < / div>
< div class = "collect_data_num" > { { isShowAverageAgingChart ? total. averageTimeLimit : '-' } } < / div>
< / div>
< div class = "collect_data_item" >
< div class = "collect_data_text" > { { $lang ( '总包号' ) } } < / div>
< div class = "collect_data_num" > { { total. pkgNumber } } < / div>
< / div>
< div class = "collect_data_item" >
< div class = "collect_data_text" > { { $lang ( '总主单重量' ) } } < / div>
< div class = "collect_data_num" > { { total. sentWeightNumber } } < / div>
< / div>
< div class = "collect_data_item" >
< div class = "collect_data_text" > { { $lang ( '总交运重量' ) } } < / div>
< div class = "collect_data_num" > { { total. airportSentWeightNumber } } < / div>
< / div>
< / div>
< ! -- 排名和汇总数据趋势图 -- >
< div class = "middle" >
< ! -- 排名数据趋势图 -- >
< div class = "rank" >
< div class = "rank_title" >
< div class = "rank_title_left" >
< span v- if = "rankType === 1" > { { $lang ( '代理区排名' ) } } < / span>
< span v- else > { { $lang ( '中心排名' ) } } < / span>
< / div>
< div class = "rank_title_right" >
< el- button size= "small" type= "info" : class = "rankType === 1 ? 'btnBgc' : ''" @click= "rankChange(1)" > { { $lang ( '代理区' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "rankType !== 1 ? 'btnBgc' : ''" @click= "rankChange(2)" > { { $lang ( '中心' ) } } < / el- button>
< / div>
< / div>
< div class = "rank_table" >
< el- table ref= "table" : data= "tableData" : border= "false" >
< el- table- column prop= "rank" type= "index" : label= "$lang('排名')" width= "90" header- align= "right" align= "right" >
< template slot- scope= "{ row }" >
< div v- if = "row.rank < 4" >
< span class = "btnBgc top" > Top< / span> < span> { { row. rank } } < / span>
< / div>
< div v- else > { { row. rank } } < / div>
< / template>
< / el- table- column>
< el- table- column prop= "netWorkName" : label= "rankType === 1 ? $lang('代理区名称') : $lang('中心名称')" width= "140" header- align= "center" align= "center" >
< template slot- scope= "{ row }" > { { row. netWorkName } } < / template>
< / el- table- column>
< el- table- column : label= "$lang('总主单号数量')" header- align= "left" align= "left" > < / el- table- column>
< / el- table>
< v- chart ref= "RankChart" class = "rank_chart" : options= "rankOptions" : style= "{ height: rankHeight,width: rankWidth}" v- if = "rankNum" / >
< / div>
< ! -- 分页 -- >
< div class = "rank_pages b('pagination')" >
< el- pagination
: page- size= "rankPage.size"
: current- page= "rankPage.current"
layout= "prev, pager, next"
: total= "rankPage.total"
@size- change= "sizeChangeRank"
@current- change= "currentChangeRank"
>
< / el- pagination>
< / div>
< / div>
< ! -- 汇总数据趋势图 -- >
< div class = "collect" >
< div class = "collect_btn" >
< el- button size= "small" type= "info" : class = "charType === 1 ? 'btnBgc' : ''" @click= "collectChange(1)" > { { $lang ( '总包号数量' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "charType === 3 ? 'btnBgc' : ''" @click= "collectChange(3)" > { { $lang ( '总主单重量' ) } } < / el- button>
< el- button size= "small" type= "info" : class = "charType === 2 ? 'btnBgc' : ''" @click= "collectChange(2)" > { { $lang ( '总交运重量' ) } } < / el- button>
< / div>
< v- chart ref= "CollectChart" class = "collect_chart" : options= "collectOptions" / >
< / div>
< / div>
< ! -- 平均时效趋势图 -- >
< div class = "average_aging" v- if = "isShowAverageAgingChart" >
< div class = "average_aging_title" > { { $lang ( '平均时效(分钟)' ) } } < / div>
< v- chart ref= "AverageAgingChart" class = "average_aging_chart" : options= "averageAgingOption" / >
< / div>
< / div>
< / div>
< / template>
< script>
import mixin from '@mixins/mixin'
import { FlightTransitTimeAbnormalAll } from './pool.js'
import { RESPONSE_CODE } from '@public/http/config'
import { DICT } from '@/common/utils/dict'
import { TIMEOUT_TIMES } from '@public/utils/const'
import ExportMixin from '@/common/mixin/exportMixin'
import VChart from '@components/base/echarts/index'
import 'echarts'
import { commonFun } from '@public/utils/common'
import { mapGetters } from 'vuex'
import getNetworkInfo from '@/common/mixin/getNetworkInfo'
const START = ' 00:00:00'
const END = ' 23:59:59'
import debounce from 'lodash/debounce'
export default {
name: 'FlightTransitTimeAbnormalAll' ,
mixins: [ mixin, ExportMixin, getNetworkInfo] ,
components: { VChart } ,
props: { } ,
data ( ) {
return {
DICT ,
COM_HTTP : FlightTransitTimeAbnormalAll,
tableList: [ ] ,
page: {
sizes: [ 10 , 20 , 30 , 40 , 50 , 100 , 150 , 200 ]
} ,
searchForm: {
queryCyclical: 1 ,
queryTimeType: 1 ,
operateDate: [ commonFun. getBeforeDate ( 6 ) , commonFun. getBeforeDate ( 0 ) ] ,
startTime: '' ,
endTime: '' ,
exceptionTag: '' ,
exFlags: [ ] ,
timeType: null ,
regionCount: true ,
networkCount: true ,
exCount: true ,
startRegionCode: [ ] ,
startRegionCodeName: [ ] ,
startNetworkCode: [ ] ,
startNetworkName: [ ]
} ,
paginationShow: true ,
chartModelShow: false ,
listAndChartShow: false ,
total: { } ,
networkKeyValues: [
{ name: 'startRegionCodeName' , code: 'startRegionCode' } ,
{ name: 'startNetworkName' , code: 'startNetworkCode' }
] ,
queryCyclicalType: 1 ,
isShowFirst: false ,
tableData: [ ] ,
rankNum: [ ] ,
rankType: 1 ,
rankPage: {
size: 10 ,
current: 1 ,
total: 0
} ,
collectColumnars: [ ] ,
collectBrokenLines: [ ] ,
xAxisDataCollect: [ ] ,
collectMax: null ,
collectMin: null ,
lineMinValue: null ,
lineMaxValue: null ,
charType: 1 ,
collectData: [ '' , this . $lang ( '总包号数量' ) , this . $lang ( '总交运重量' ) , this . $lang ( '总主单重量' ) ] ,
averageAgingColumnars: [ ] ,
averageAgingBrokenLines: [ ] ,
xAxisDataAverageAging: [ ] ,
agingMax: null ,
agingMin: null ,
agingLineMin: null ,
agingLineMax: null
}
} ,
computed: {
... mapGetters ( { token: 'token' , lang: 'lang' , user: 'user' } ) ,
listOpt ( ) {
const $this = this
return {
menu: false ,
header: true ,
showSummary: true ,
fixHeight: 50 ,
pagination: this . paginationShow,
column: [
{
prop: 'queryCyclical' ,
label: '时间维度' ,
search: true ,
hide: true ,
type: 'select' ,
dicData: DICT . airTimeDimension,
editable: false ,
searchClearable: false ,
searchDefault: 1 ,
hasAll: false ,
change ( val ) {
$this . $refs. params. searchForm. queryCyclical = val. value
}
} ,
{
prop: 'dayTime' ,
label: '日期' ,
hide: $this . searchForm. queryCyclical === 2
} ,
{
prop: 'dayTimeWeek' ,
label: '日期' ,
hide: $this . searchForm. queryCyclical === 1
} ,
{
prop: 'time' ,
label: '' ,
search: true ,
hide: true ,
searchslot: true ,
editable: false
} ,
{
label: '始发代理区' ,
prop: 'startRegionCodeName' ,
hide: ! $this . searchForm. regionCount,
search: true ,
remote: true ,
searchslot: true
} ,
{
label: '始发转运中心' ,
prop: 'startNetworkName' ,
search: true ,
hide: ! $this . searchForm. networkCount,
searchslot: true
} ,
{
prop: 'exceptionTag' ,
label: '异常标识' ,
search: true ,
hide: true ,
type: 'select' ,
dicData: DICT . exceptionTagList,
change ( val ) {
if ( val. value) {
$this . searchForm. exceptionTag = val. value
} else {
$this . searchForm. exceptionTag = ''
}
$this . $refs. params. searchForm. exFlags = [ ]
$this . searchForm. exFlags = [ ]
}
} ,
{
prop: 'exFlags' ,
label: '异常类型' ,
search: $this . searchForm. exceptionTag === 'Y' ,
searchslot: true ,
hide: true
} ,
{
prop: 'exFlags' ,
label: '异常类型' ,
hide: ! $this . searchForm. exCount,
type: 'select' ,
dicData: DICT . exceptionRegistrationType,
formatter : ( row, value, label, column ) => {
if ( row. exFlags) {
return row. exFlags
. map ( ( item ) => {
return $this . _dictFilter ( item, DICT . exceptionRegistrationType)
} )
. join ( ',' )
}
}
} ,
{
prop: 'timeType' ,
label: '时效类型' ,
search: true ,
hide: true ,
type: 'select' ,
dicData: DICT . airTimeTypeList,
change ( val ) {
$this . searchForm. timeType = val. value
$this . $refs. params. searchForm. timeType = val. value
}
} ,
{
label: '总主单号数量' ,
prop: 'mainShipmentNumber'
} ,
{
label: '总包号数量' ,
prop: 'pkgNumber'
} ,
{
label: '总主单发运重量' ,
prop: 'sentWeightNumber'
} ,
{
label: '总机场交运重量' ,
prop: 'airportSentWeightNumber'
} ,
{
label: '平均时效(分钟)' ,
prop: 'averageTimeLimit' ,
hide: ! $this . searchForm. timeType
}
]
}
} ,
rankOptions ( ) {
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
}
} ,
grid: {
top: 5 ,
left: 0 ,
bottom: 0 ,
backgroundColor: 'transparent'
} ,
xAxis: {
show: false ,
splitNumber: 15 ,
interval: 25
} ,
yAxis: {
type: 'category' ,
show: false
} ,
series: [
{
type: 'bar' ,
data: this . rankNum,
showBackground: true ,
backgroundStyle: {
color: '#ccc'
} ,
label: {
show: true ,
position: 'right'
} ,
itemStyle: {
barBorderRadius: 30
} ,
barWidth: 12
}
] ,
direction: 'horizontal'
}
} ,
collectOptions ( ) {
const $this = this
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
} ,
formatter : function ( params ) {
let value1 = ''
let value2 = ''
let axisValue = ''
params. map ( ( item ) => {
if ( item. componentSubType === 'bar' ) {
axisValue = item. axisValue
value1 = item. value. toLocaleString ( )
}
if ( item. componentSubType === 'line' ) {
value2 = item. value
}
} )
return axisValue + '<br>' + $this . collectData[ $this . charType] + ' : ' + value1 + '<br>' + $this . $lang ( '环比' ) + ' : ' + value2 + '%'
}
} ,
legend: {
data: [ $this . collectData[ $this . charType] , this . $lang ( '环比' ) ]
} ,
xAxis: [
{
type: 'category' ,
data: this . xAxisDataCollect
}
] ,
yAxis: [
{
type: 'value' ,
min: 0 ,
max: this . collectMax
} ,
{
type: 'value' ,
min: this . lineMinValue,
max: this . lineMaxValue,
axisLabel: {
formatter: '{value} %'
}
}
] ,
series: [
{
name: $this . collectData[ $this . charType] ,
type: 'bar' ,
data: this . collectColumnars,
label: {
show: true ,
position: 'top' ,
fontSize: 15
}
} ,
{
name: $this . $lang ( '环比' ) ,
type: 'line' ,
yAxisIndex: 1 ,
data: this . collectBrokenLines
}
]
}
} ,
averageAgingOption ( ) {
const $this = this
return {
tooltip: {
trigger: 'axis' ,
axisPointer: {
type: 'shadow'
} ,
formatter : function ( params ) {
let value1 = ''
let value2 = ''
let axisValue = ''
params. map ( ( item ) => {
if ( item. componentSubType === 'bar' ) {
axisValue = item. axisValue
value1 = item. value. toLocaleString ( )
}
if ( item. componentSubType === 'line' ) {
value2 = item. value
}
} )
return axisValue + '<br>' + $this . $lang ( '平均时效' ) + ' : ' + value1 + $this . $lang ( '(分钟)' ) + ' <br>' + $this . $lang ( '环比' ) + ' : ' + value2 + '%'
}
} ,
legend: {
data: [ this . $lang ( '平均时效' ) , this . $lang ( '环比' ) ]
} ,
xAxis: [
{
type: 'category' ,
data: this . xAxisDataAverageAging
}
] ,
yAxis: [
{
type: 'value' ,
min: this . agingMin,
max: this . agingMax
} ,
{
type: 'value' ,
min: this . agingLineMin,
max: this . agingLineMax,
axisLabel: {
formatter: '{value} %'
}
}
] ,
series: [
{
name: $this . $lang ( '平均时效' ) ,
type: 'bar' ,
data: this . averageAgingColumnars,
label: {
show: true ,
position: 'top' ,
fontSize: 15
}
} ,
{
name: $this . $lang ( '环比' ) ,
type: 'line' ,
yAxisIndex: 1 ,
data: this . averageAgingBrokenLines
}
]
}
} ,
isShowAverageAgingChart ( ) {
return ! ! this . searchForm. timeType
} ,
rankHeight ( ) {
this . $nextTick ( ( ) => {
this . $refs[ 'RankChart' ] . resize ( )
} )
return this . rankNum && this . rankNum. length > 0 ? 38 * this . rankNum. length + 'px' : '0px'
}
} ,
created ( ) {
} ,
mounted ( ) {
this . init ( )
window. addEventListener ( 'resize' , debounce ( this . resizeChart, 100 ) ) ;
} ,
methods: {
async init ( ) {
console. log ( 'init' , this . user)
let obj = { }
const { networkCode, networkName, institutionalLevelId } = this . user
if ( institutionalLevelId === 22 ) {
obj = { startNetworkCode: [ ] , startNetworkName: [ ] , startRegionCode: [ ] , startRegionCodeName: [ ] }
} else {
if ( institutionalLevelId === 334 ) {
obj = { startNetworkCode: [ ] , startNetworkName: [ ] , startRegionCode: [ networkCode] , startRegionCodeName: [ networkName] }
} else {
const { agentNetwork, centNetwork } = await this . _getAgentInfoByNetworkCode ( networkCode)
if ( agentNetwork || centNetwork) {
obj = { startNetworkCode: centNetwork ? [ centNetwork. code] : [ ] , startNetworkName: centNetwork ? [ centNetwork. name] : [ ] ,
startRegionCode: agentNetwork ? [ agentNetwork. code] : [ ] , startRegionCodeName: agentNetwork ? [ agentNetwork. name] : [ ] }
}
}
}
Object. assign ( this . searchForm, obj)
this . searchFun ( )
} ,
setSearchParams ( params ) {
const obj = { }
const { queryTimeType, operateDate, regionCount, networkCount, exCount, exFlags, exceptionTag } = this . searchForm
const { queryCyclical } = this . $refs. params. searchForm
const startTime = operateDate[ 0 ] + START
const endTime = operateDate[ 1 ] + END
Object. assign ( this . $refs. params. searchForm, { queryTimeType, startTime, endTime, operateDate, regionCount, networkCount, exCount, exFlags, exceptionTag, queryCyclical } )
const nParams = { }
this . networkKeyValues. forEach ( ( item ) => {
const { name, code } = item
const valCode = this . searchForm[ code]
const valName = this . searchForm[ name]
nParams[ code] = valCode || ''
nParams[ name] = valName || ''
obj[ code] = undefined
if ( valCode || ( Array. isArray ( valCode) && valCode. length > 0 ) ) {
obj[ code] = valCode
}
} )
Object. assign ( obj, { queryTimeType, startTime, endTime, operateDate, regionCount, networkCount, exCount, exFlags, exceptionTag, ... nParams } )
return obj
} ,
resetList ( ) {
const searchForm = {
queryCyclical: 1 ,
queryTimeType: 1 ,
operateDate: [ commonFun. getBeforeDate ( 6 ) , commonFun. getBeforeDate ( 0 ) ] ,
startTime: '' ,
endTime: '' ,
exceptionTag: '' ,
exFlags: [ ] ,
timeType: null ,
regionCount: true ,
networkCount: true ,
exCount: true ,
startRegionCode: [ ] ,
startRegionCodeName: [ ] ,
startNetworkCode: [ ] ,
startNetworkName: [ ]
}
Object. assign ( this . searchForm, searchForm)
this . init ( )
} ,
async searchFun ( params, current ) {
console. log ( 'searchFun' )
this . loading = true
if ( typeof this . searchFunBefore === 'function' ) {
const state = this . searchFunBefore ( )
if ( ! state) {
this . loading = false
return
}
}
if ( ! params && this . $refs. hasOwnProperty ( 'params' ) ) {
params = this . rangHandle ( this . $refs. params. searchForm)
}
if ( current) {
this . page. current = current
}
const param = JSON . parse ( JSON . stringify ( this . searchFunParamsHandle ( params) ) )
if ( param === false ) {
this . loading = false
return
}
const timeState = setTimeout ( ( ) => {
if ( this . loading) this . loading = false
} , TIMEOUT_TIMES )
setTimeout ( ( ) => {
this . getSummaryData ( param)
} , 30 )
setTimeout ( ( ) => {
this . getRankData ( param)
} , 30 )
setTimeout ( ( ) => {
this . getCollectData ( param)
} , 30 )
setTimeout ( ( ) => {
param. timeType && this . getAverageAging ( param)
} , 30 )
try {
console. log ( 'util/mixin.searchFun::params' , param)
const res = await this . COM_HTTP . reqList ( param)
clearTimeout ( timeState)
this . loading = false
this . pageLoading = false
if ( res. code === RESPONSE_CODE . SUCCESS ) {
if ( this . usePagination) {
this . tableList = res. data. records ? ( this . formatList ? this . formatList ( res. data) : res. data. records) : [ ]
this . page. total = res. data. total || 0
this . page. current = res. data. current || 1
} else {
this . tableList = this . formatList ? this . formatList ( res. data) : res. data || [ ]
}
this . searchAfterFun ( )
} else {
this . $message. error ( res. msg)
this . tableList = [ ]
}
} catch ( error) {
console. error ( 'searchFun::error' , error)
clearTimeout ( timeState)
this . loading = false
this . pageLoading = false
}
} ,
searchAfterFun ( ) {
console. log ( 'searchAfterFun' , this . $refs. params. searchForm. queryCyclical)
this . searchForm. queryCyclical = this . $refs. params. searchForm. queryCyclical
} ,
summaryMethod ( { columns, data } ) {
const sums = [ ]
const arr = [ 'startRegionCodeName' , 'startNetworkName' , 'exFlags' , 'dayTime' , 'dayTimeWeek' ]
columns. forEach ( ( column, index ) => {
if ( index === 0 ) {
sums[ index] = this . $lang ( '合计' )
return
}
if ( arr. includes ( column. property) ) {
sums[ index] = '--'
} else {
sums[ index] = this . total && this . total[ column[ 'property' ] ]
}
} )
return sums
} ,
cellClassName ( { row, column, rowIndex, columnIndex } ) {
if ( column. property === 'mainShipmentNumber' ) {
return 'cell-blue-gao view-link'
}
} ,
cellClick ( row, column, cell, event ) {
if ( column. property === 'mainShipmentNumber' ) {
const { queryTimeType, queryCyclical } = this . $refs. params. searchForm
const { startNetworkCode: startNetworkCodeSearch, startNetworkName: startNetworkNameSearch, startRegionCode: startRegionCodeSearch, startRegionCodeName: startRegionCodeNameSearch, exFlags: exFlagsSearch, exceptionTag: exceptionTagSearch } = this . searchForm
const { startNetworkCode, startNetworkName, startRegionCode, startRegionCodeName, exFlags, dayTime, dayTimeWeek } = row
const operateDate = queryCyclical === 1 ? [ dayTime, dayTime] : [ dayTimeWeek. slice ( 0 , 10 ) , dayTimeWeek. slice ( - 10 ) ]
const params = { queryTimeType, operateDate }
if ( startRegionCode && startRegionCodeName) {
Object. assign ( params, { startRegionCode: [ startRegionCode] , startRegionCodeName: [ startRegionCodeName] } )
} else {
Object. assign ( params, { startRegionCode: startRegionCodeSearch || [ ] , startRegionCodeName: startRegionCodeNameSearch || [ ] } )
}
if ( startNetworkCode && startNetworkName) {
Object. assign ( params, { startNetworkCode: [ startNetworkCode] , startNetworkName: [ startNetworkName] } )
} else {
Object. assign ( params, { startNetworkCode: startNetworkCodeSearch || [ ] , startNetworkName: startNetworkNameSearch || [ ] } )
}
if ( this . searchForm. exCount) {
Object. assign ( params, { exceptionTag: ( exFlags ? 'Y' : 'N' ) , exFlags: exFlags || exFlagsSearch || [ ] } )
} else {
Object. assign ( params, { exceptionTag: exceptionTagSearch || '' , exFlags: exFlags || exFlagsSearch || [ ] } )
}
this . $emit ( 'toMainBillAll' , params)
}
} ,
listModel ( ) {
document. querySelector ( '.flight-transit-timeAbnormal-all .el-table' ) . style. display = 'block'
this . paginationShow = true
this . chartModelShow = false
this . listAndChartShow = false
this . searchForm. regionCount = true
this . searchForm. networkCount = true
this . searchForm. exCount = true
} ,
chartModel ( ) {
document. querySelector ( '.flight-transit-timeAbnormal-all .el-table' ) . style. display = 'none'
this . paginationShow = false
this . chartModelShow = true
this . listAndChartShow = true
console. log ( this . collectData[ this . charType] )
} ,
_dictFilter ( v, dict ) {
return ( dict. find ( ( item ) => item. value + '' === v + '' ) || { } ) . label
} ,
async getSummaryData ( params ) {
console. log ( 'getSummaryData' , params)
try {
const { code, data, msg } = await this . COM_HTTP . reqSummary ( params)
if ( code === RESPONSE_CODE . SUCCESS ) {
if ( data) {
Object. entries ( data) . forEach ( ( [ key, value] ) => {
data[ key] = value ? Number ( value) . toLocaleString ( ) : value
} )
this . total = data || { }
} else {
this . total = { }
}
} else {
this . $message. error ( this . $lang ( msg) )
}
} catch ( e) {
console. log ( e)
}
} ,
async getRankData ( params ) {
console. log ( 'getRankData11111' , this . $refs. params. searchForm)
try {
const param = params
? { ... params, ... this . rankPage, ... { rankType: this . rankType } }
: { ... this . $refs. params. searchForm, ... this . rankPage, ... { rankType: this . rankType } }
delete param. regionCount
delete param. networkCount
delete param. exCount
console. log ( 'getRankData222' , param)
const { code, data, msg } = await this . COM_HTTP . reqRankChart ( param)
if ( code === RESPONSE_CODE . SUCCESS ) {
this . rankNum = [ ]
this . tableData = data. records || [ ]
this . rankPage. total = data. total || 0
this . rankPage. current = data. current || 1
this . tableData &&
this . tableData. length > 0 &&
this . tableData. map ( ( item ) => {
this . rankNum. unshift ( item. mainShipmentNumber)
} )
console. log ( this . rankNum)
} else {
this . $message. error ( this . $lang ( msg) )
}
} catch ( e) {
console. log ( e)
}
} ,
resizeChart ( ) {
this . $refs[ 'RankChart' ] . resize ( )
} ,
async getCollectData ( params ) {
try {
const param = params ? { ... params, ... { charType: this . charType } } : { ... this . $refs. params. searchForm, ... { charType: this . charType } }
delete param. regionCount
delete param. networkCount
delete param. exCount
const { code, data, msg } = await this . COM_HTTP . reqCollectChart ( param)
if ( code === RESPONSE_CODE . SUCCESS ) {
this . xAxisDataCollect = [ ]
this . collectColumnars = [ ]
this . collectBrokenLines = [ ]
if ( data) {
data. columnars &&
data. columnars. forEach ( ( v ) => {
this . collectColumnars. push ( v. countNumber)
this . xAxisDataCollect. push ( v. dayTime)
} )
data. brokenLines &&
data. brokenLines. forEach ( ( v ) => {
this . collectBrokenLines. push ( v. ratio)
} )
this . collectMax = data. maxValue
this . collectMin = data. minValue
this . lineMinValue = data. lineMinValue
this . lineMaxValue = data. lineMaxValue
}
} else {
this . $message. error ( this . $lang ( msg) )
}
} catch ( e) {
console. log ( e)
}
} ,
async getAverageAging ( params ) {
try {
const param = { ... params }
delete param. regionCount
delete param. networkCount
delete param. exCount
const { code, data, msg } = await this . COM_HTTP . reqTimeChart ( param)
if ( code === RESPONSE_CODE . SUCCESS ) {
this . xAxisDataAverageAging = [ ]
this . averageAgingColumnars = [ ]
this . averageAgingBrokenLines = [ ]
if ( data) {
data. columnars &&
data. columnars. forEach ( ( v ) => {
this . averageAgingColumnars. push ( v. countNumber)
this . xAxisDataAverageAging. push ( v. dayTime)
} )
data. brokenLines &&
data. brokenLines. forEach ( ( v ) => {
this . averageAgingBrokenLines. push ( v. ratio)
} )
this . agingMax = data. maxValue
this . agingMin = data. minValue
this . agingLineMin = data. lineMinValue
this . agingLineMax = data. lineMaxValue
}
} else {
this . $message. error ( this . $lang ( msg) )
}
} catch ( e) {
console. log ( e)
}
} ,
sizeChangeRank ( val ) {
this . rankPage. current = 1
this . rankPage. size = val
this . getRankData ( )
} ,
currentChangeRank ( val ) {
this . rankPage. current = val
this . getRankData ( )
} ,
rankChange ( val ) {
this . rankType = val
this . getRankData ( )
} ,
collectChange ( val ) {
this . charType = val
this . getCollectData ( )
}
} ,
beforeDestroy ( ) {
window. removeEventListener ( 'resize' , this . resizeChart) ;
}
}
< / script>
< style lang= "scss" >
. flight- transit- timeAbnormal- all {
width: 100 % ;
height: 100 % ;
padding- left: 0 px;
padding- top: 0 px;
. chartBox {
width: 99 % ;
margin: 0 auto;
padding- top: 20 px;
. collect_data {
display: flex;
align- items: center;
justify- items: center;
font- weight: 600 ;
color: #e60012;
width: 100 % ;
border: 1 px solid #ccc;
height: 160 px;
. collect_data_item {
flex: 1 ;
height: 160 px;
line- height: 70 px;
text- align: center;
border- right: 1 px solid #ccc;
& : nth- last- child ( 1 ) {
border- right: none;
}
. collect_data_text {
font- size: 20 px;
}
. collect_data_num {
font- size: 45 px;
}
}
}
. middle {
width: 100 % ;
margin- top: 20 px;
display: flex;
. rank {
width: 35 % ;
border: 1 px solid #ccc;
position: relative;
. rank_title {
display: flex;
justify- content: space- between;
align- items: center;
border- bottom: 1 px solid #ccc;
padding: 10 px;
. rank_title_right {
. el- button {
margin- left: 0 ! important;
}
}
}
. rank_table {
width: 100 % ;
max- height: 420 px;
position: relative;
. el- table__header {
th {
background- color: #fff;
}
}
td,
th. is- leaf {
border- bottom: none ! important;
}
. rank_chart {
width: 40 % ;
min- width: 150 px;
position: absolute;
top: 33 px;
left: 240 px;
}
}
. rank_pages {
height: 30 px;
display: flex;
justify- content: center;
margin- top: 10 px;
position: absolute;
bottom: 10 px;
left: 38 % ;
}
}
. collect {
width: 65 % ;
height: 525 px;
margin- left: 15 px;
border: 1 px solid #ccc;
. collect_btn {
display: flex;
justify- content: flex- end;
align- items: center;
border- bottom: 1 px solid #ccc;
padding: 10 px;
. el- button {
margin- left: 0 ! important;
}
}
. collect_chart {
width: 100 % ;
margin: 0 auto;
margin- top: 30 px;
}
}
}
. average_aging {
border: 1 px solid #ccc;
margin- top: 20 px;
. average_aging_title {
border- bottom: 1 px solid #ccc;
padding: 10 px;
}
. average_aging_chart {
width: 90 % ;
height: 500 px;
margin: 0 auto;
margin- top: 30 px;
}
}
}
. cell- pointer {
cursor: pointer;
}
. avue- crud__search{
. el- form- item: first- of - type{
width: 110 px! important;
}
}
}
. cell- blue- gao {
cursor: pointer;
. cell span {
@include text- color ( 'brand' ) ;
}
}
. btnBgc {
background- color: #e60012 ! important;
color: #fff ! important;
}
. el- pager li. active {
color: #e60012 ! important;
}
. el- pager li: hover {
color: #e60012 ! important;
}
. top {
border- radius: 24 px;
padding: 1 px 4 px;
margin- right: 3 px;
display: inline- block;
width: 26 px;
font- size: 11 px;
text- align: center;
}
. ibank- total- right{
margin- bottom: 8 px;
line- height: 32 px;
}
< / style>