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
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>
|
|
|