You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
5.2 KiB
222 lines
5.2 KiB
<template>
|
|
<div
|
|
v-loading="loading"
|
|
class="main-container">
|
|
<filtrate-handle-view
|
|
title="审批分析"
|
|
class="filtrate-bar"
|
|
module-type="oa"
|
|
@load="loading=true"
|
|
@change="getDataList">
|
|
<el-button
|
|
class="export-button"
|
|
type="primary"
|
|
@click.native="exportExcel">导出</el-button>
|
|
</filtrate-handle-view>
|
|
<div class="content">
|
|
<div class="table-content">
|
|
<el-table
|
|
v-if="showTable"
|
|
:data="list"
|
|
:height="tableHeight"
|
|
:cell-style="cellStyle"
|
|
stripe
|
|
border
|
|
show-overflow-tooltip
|
|
highlight-current-row
|
|
@row-click="handleRowClick"
|
|
@sort-change="({ prop, order }) => mixinSortFn(list, prop, order)">
|
|
<el-table-column
|
|
v-for="(item, index) in fieldList"
|
|
:key="index"
|
|
:fixed="index==0"
|
|
:formatter="fieldFormatter"
|
|
:prop="item.field"
|
|
:min-width="item.width"
|
|
:label="item.name"
|
|
sortable="custom"
|
|
align="center"
|
|
header-align="center"/>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 列表详情 -->
|
|
<examine-list
|
|
v-if="showList"
|
|
:type="showType"
|
|
:name="showTypeName"
|
|
:request="indexRequest"
|
|
:params="indexParams"
|
|
@hide="showList = false"/>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import SortMixin from '../mixins/Sort'
|
|
import {
|
|
biExamineStatisticsAPI,
|
|
biExamineExcelExportAPI,
|
|
biExamineIndexAPI
|
|
} from '@/api/bi/oa'
|
|
import ExamineList from './components/ExamineList'
|
|
import FiltrateHandleView from '../components/FiltrateHandleView'
|
|
import { downloadExcelWithResData } from '@/utils'
|
|
|
|
export default {
|
|
/** 审批统计表 */
|
|
name: 'ExamineStatistics',
|
|
|
|
components: {
|
|
FiltrateHandleView,
|
|
ExamineList
|
|
},
|
|
mixins: [SortMixin],
|
|
data() {
|
|
return {
|
|
loading: false,
|
|
tableHeight: document.documentElement.clientHeight - 190,
|
|
postParams: {},
|
|
list: [],
|
|
fieldList: [],
|
|
|
|
// 列表详情
|
|
typeList: [],
|
|
indexParams: {},
|
|
showType: '', // 标示类型
|
|
showTypeName: '', // 类型名称
|
|
showList: false
|
|
}
|
|
},
|
|
|
|
computed: {
|
|
// 列表详情请求
|
|
indexRequest() {
|
|
return biExamineIndexAPI
|
|
}
|
|
},
|
|
|
|
mounted() {
|
|
/** 控制table的高度 */
|
|
window.onresize = () => {
|
|
this.tableHeight = document.documentElement.clientHeight - 190
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
/**
|
|
* 列表数据
|
|
*/
|
|
getDataList(params) {
|
|
this.postParams = params
|
|
this.loading = true
|
|
biExamineStatisticsAPI(params)
|
|
.then(res => {
|
|
this.typeList = res.data.category_list || []
|
|
this.fieldList = this.getFieldList(res.data.category_list || [])
|
|
this.list = res.data.userList || []
|
|
this.loading = false
|
|
})
|
|
.catch(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 表头
|
|
*/
|
|
getFieldList(list) {
|
|
return [
|
|
{
|
|
name: '员工',
|
|
width: 100,
|
|
field: 'realname'
|
|
}
|
|
].concat(
|
|
list.map(item => {
|
|
var width = 0
|
|
if (item.title && item.title.length <= 6) {
|
|
width = item.title.length * 15 + 45
|
|
} else {
|
|
width = 140
|
|
}
|
|
return {
|
|
name: item.title,
|
|
width: width,
|
|
field: `count_${item.category_id}`
|
|
}
|
|
})
|
|
)
|
|
},
|
|
|
|
/**
|
|
* 格式化字段
|
|
*/
|
|
fieldFormatter(row, column) {
|
|
return row[column.property] === '' || row[column.property] === null ? '--' : row[column.property]
|
|
},
|
|
|
|
/**
|
|
* 通过回调控制style
|
|
*/
|
|
cellStyle({ row, column, rowIndex, columnIndex }) {
|
|
if (column.property !== 'realname' && parseInt(row[column.property])) {
|
|
return { color: '#2362FB', cursor: 'pointer' }
|
|
} else {
|
|
return ''
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 列表的点击
|
|
*/
|
|
handleRowClick(row, column, event) {
|
|
if (column.property !== 'realname' && parseInt(row[column.property])) {
|
|
const propertys = column.property.split('_')
|
|
const category_id = propertys.length > 1 ? propertys[1] : ''
|
|
|
|
|
|
const params = {
|
|
user_id: row.id,
|
|
category_id: category_id
|
|
}
|
|
|
|
if (this.postParams.type) {
|
|
params.type = this.postParams.type
|
|
} else {
|
|
params.start_time = this.postParams.start_time
|
|
params.end_time = this.postParams.end_time
|
|
}
|
|
|
|
const typeObj = this.typeList.find(item => {
|
|
return item.category_id == category_id
|
|
})
|
|
this.showType = typeObj.type
|
|
this.showTypeName = typeObj.title
|
|
this.indexParams = params
|
|
this.showList = true
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 导出
|
|
*/
|
|
exportExcel() {
|
|
this.loading = true
|
|
biExamineExcelExportAPI(this.postParams)
|
|
.then(res => {
|
|
this.loading = false
|
|
downloadExcelWithResData(res)
|
|
})
|
|
.catch(() => {
|
|
this.loading = false
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
|
@import '../styles/detail.scss';
|
|
</style>
|