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.
 
 
 
 
 

218 lines
8.0 KiB

<template>
<div class="statistics-container">
<div class="filter-table-view">
<el-form :inline="true" ref="filterForm">
<el-form-item label="提交时间" prop="endDateTime">
<el-date-picker
v-model="queryConditions.beginDateTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="开始时间">
</el-date-picker>
<span> 至 </span>
<el-date-picker
v-model="queryConditions.endDateTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="'23:59:59'"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryProjectResult">查询</el-button>
</el-form-item>
</el-form>
</div>
<div class="result-table-view">
<el-table
stripe
:data="projectResultList">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column v-for="col in fixedCustomColumns" :key="`t${col}`"
:label="fixedDefaultLabelFormColumn[col]">
<template slot-scope="scope">
{{ scope.row[col] }}
</template>
</el-table-column>
<el-table-column v-for="col in otherCustomColumns" :key="col"
:label="projectItemColumns[col]">
<template slot-scope="scope">
{{ scope.row['processData'][col] }}
</template>
</el-table-column>
<el-table-column
width="50"
fixed="right"
:render-header="renderHeader">
</el-table-column>
</el-table>
<div style="display: flex;justify-content: center;margin-top: 10px">
<el-pagination
v-if="total>10"
background
:page-size.sync="queryConditions.size"
:current-page.sync="queryConditions.current"
layout="total, prev, pager, next"
:total="total"
@current-change="queryProjectResult"
/>
</div>
</div>
<div>
<el-dialog center title="自定义显示列" :visible.sync="customColumnDialogVisible">
<el-row>
<el-col :span="3">
<span>显示列:</span>
</el-col>
</el-row>
<el-divider></el-divider>
<el-checkbox-group v-model="checkFixedCustomColumns">
<el-row>
<el-col :span="4" v-for="(val, key, index) in fixedDefaultLabelFormColumn" :key="key">
<el-checkbox :label="key">{{ val }}</el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
<el-divider></el-divider>
<el-checkbox-group v-model="checkOtherCustomColumns">
<el-row>
<el-col :span="8" v-for="(val, key, index) in projectItemColumns" :key="key">
<el-checkbox :label="key">{{ val }}</el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
<span slot="footer" class="dialog-footer">
<el-button @click="customColumnDialogVisible = false"> </el-button>
<el-button type="primary" @click="saveStatisticsCheckedColumns"> </el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
import _ from 'lodash'
import {getCheckedColumn, saveCheckedColumn} from '@/utils/db'
const fixedDefaultFormColumn = ['serialNumber', 'submitAddress', 'createTime']
const fixedDefaultLabelFormColumn = {serialNumber: '提交序号', submitAddress: '提交地址', createTime: '提交时间'}
export default {
name: 'projectStatistics',
components: {},
props: {
projectKey: ''
},
mounted() {
this.queryConditions.projectKey = this.projectKey
this.queryProjectResult()
this.queryProjectItems()
},
data() {
return {
customColumnDialogVisible: false,
//固定自定义列 如序号等
fixedCustomColumns: fixedDefaultFormColumn,
//选中的
checkFixedCustomColumns: fixedDefaultFormColumn,
fixedDefaultLabelFormColumn: fixedDefaultLabelFormColumn,
//自定义表单属性
checkOtherCustomColumns: [],
otherCustomColumns: [],
projectResultList: [],
projectItemList: [],
projectItemColumns: {},
total: 0,
//查询条件
queryConditions: {
current: 1,
size: 10,
projectKey: '',
beginDateTime: '',
endDateTime: ''
}
}
}, methods: {
renderHeader(h) {
return (
<i class="el-icon-setting" style="color:currentColor" onClick={() => this.customColumnDialogVisible = true}></i>
)
},
queryProjectResult() {
this.$api.get(`/user/project/result/page`, {params: this.queryConditions}).then(res => {
let {records, total, size} = res.data
this.projectResultList = records
this.total = total
this.queryConditions.size = size
})
},
saveStatisticsCheckedColumns() {
this.customColumnDialogVisible = false
this.fixedCustomColumns = this.checkFixedCustomColumns
this.otherCustomColumns = this.checkOtherCustomColumns
saveCheckedColumn(this.projectKey, {
fixedCustomColumns: this.fixedCustomColumns,
otherCustomColumns: this.otherCustomColumns
})
},
getDbCheckedColumns() {
let checkedColumn = getCheckedColumn(this.projectKey)
if (!checkedColumn) {
return
}
let {fixedCustomColumns, otherCustomColumns} = checkedColumn
if (fixedCustomColumns) {
this.fixedCustomColumns = fixedCustomColumns
this.checkFixedCustomColumns = fixedCustomColumns
}
if (otherCustomColumns) {
this.otherCustomColumns = otherCustomColumns
this.checkOtherCustomColumns = otherCustomColumns
}
},
queryProjectItems() {
this.$api.get(`/user/project/item/list`, {params: {key: this.projectKey}}).then(res => {
if (res.data) {
res.data.map((item) => {
_.set(this.projectItemColumns, `field${item.formItemId}`, item.label)
})
}
this.projectItemList = res.data
this.getDbCheckedColumns()
})
}
}
}
</script>
<style scoped>
.statistics-container {
width: 100%;
height: 100%;
padding: 0px;
min-height: 85vh;
background-color: #F7F7F7;
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
}
.result-table-view {
width: 80%;
margin: 6px auto;
}
.filter-table-view {
width: 80%;
margin: 0px auto;
}
/deep/ .el-icon-setting {
font-size: 24px;
line-height: 25px;
color: white;
}
</style>