<template>
|
<el-container>
|
<el-header>交通统计报表审核系统 - 审核结果</el-header>
|
<el-container>
|
<el-aside width="200px">
|
<el-menu router default-active="/audit">
|
<el-menu-item index="/dashboard">工作台</el-menu-item>
|
<el-menu-item index="/import">数据导入</el-menu-item>
|
<el-menu-item index="/data">数据查看</el-menu-item>
|
<el-menu-item index="/explain">企业解释</el-menu-item>
|
<el-menu-item index="/audit">审核结果</el-menu-item>
|
<el-menu-item index="/report">报表生成</el-menu-item>
|
<el-menu-item index="/rules">规则管理</el-menu-item>
|
<el-menu-item index="/users">用户管理</el-menu-item>
|
</el-menu>
|
</el-aside>
|
<el-main>
|
<h3>审核结果</h3>
|
<el-form :inline="true">
|
<el-form-item label="报表期">
|
<el-date-picker v-model="period" type="month" placeholder="选择月份" value-format="yyyy-MM"></el-date-picker>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="executeAudit" :loading="loading">执行审核</el-button>
|
<el-button @click="queryResults">查询结果</el-button>
|
</el-form-item>
|
</el-form>
|
<el-form :inline="true" style="margin-top:12px">
|
<el-form-item label="企业名称">
|
<el-input v-model="enterpriseFilter" placeholder="输入企业名称关键字" clearable style="width:220px"></el-input>
|
</el-form-item>
|
<el-form-item label="审核规则">
|
<el-select v-model="ruleFilter" placeholder="全部规则" clearable style="width:200px">
|
<el-option v-for="rn in ruleOptions" :key="rn" :label="rn" :value="rn"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item>
|
<el-button size="small" @click="clearFilters">清空过滤</el-button>
|
</el-form-item>
|
<el-form-item>
|
<span style="color:#909399;font-size:12px">共 {{ results.length }} 条,当前显示 {{ filteredResults.length }} 条</span>
|
</el-form-item>
|
</el-form>
|
<div class="table-area">
|
<el-table :data="filteredResults" border v-loading="loading" height="100%">
|
<el-table-column prop="enterpriseName" label="企业名称" min-width="200" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="ruleName" label="审核规则" min-width="140"></el-table-column>
|
<el-table-column prop="actualValue" label="实际值" min-width="180" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="thresholdValue" label="阈值/对比" min-width="120"></el-table-column>
|
<el-table-column prop="deviation" label="偏差说明" min-width="140" show-overflow-tooltip></el-table-column>
|
<el-table-column label="等级" width="80">
|
<template slot-scope="scope">
|
<el-tag :type="scope.row.alertLevel === 'RED' ? 'danger' : 'warning'">{{ scope.row.alertLevel }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="status" label="状态" width="100">
|
<template slot-scope="scope">
|
<el-tag :type="statusType(scope.row.status)">{{ scope.row.status }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column label="操作" width="160">
|
<template slot-scope="scope">
|
<el-button v-if="scope.row.status === 'PENDING'" size="mini" type="success" @click="review(scope.row, 'CONFIRMED')">确认</el-button>
|
<el-button v-if="scope.row.status === 'PENDING'" size="mini" type="info" @click="review(scope.row, 'IGNORED')">忽略</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</el-main>
|
</el-container>
|
</el-container>
|
</template>
|
<script>
|
import api from '@/api'
|
export default {
|
name: 'AuditResult',
|
data() {
|
return {
|
period: '', loading: false, results: [], enterpriseFilter: '', ruleFilter: ''
|
}
|
},
|
computed: {
|
ruleOptions() {
|
const names = []
|
this.results.forEach(r => { if (r.ruleName && names.indexOf(r.ruleName) < 0) names.push(r.ruleName) })
|
return names
|
},
|
filteredResults() {
|
const kw = (this.enterpriseFilter || '').trim()
|
const rule = this.ruleFilter
|
if (!kw && !rule) return this.results
|
return this.results.filter(r => {
|
if (kw && !(r.enterpriseName || '').includes(kw)) return false
|
if (rule && r.ruleName !== rule) return false
|
return true
|
})
|
}
|
},
|
methods: {
|
executeAudit() {
|
if (!this.period) { this.$message.warning('请选择报表期'); return }
|
this.loading = true
|
const fd = new FormData()
|
fd.append('period', this.period)
|
api.post('/audit/execute', fd)
|
.then(res => {
|
const count = (res.data || []).length
|
this.$message.success('审核完成,共 ' + count + ' 条问题')
|
return api.get('/audit/results', { params: { period: this.period } })
|
})
|
.then(res => { this.results = res.data || [] })
|
.catch(() => { this.$message.error('审核执行失败') })
|
.finally(() => { this.loading = false })
|
},
|
queryResults() {
|
if (!this.period) { this.$message.warning('请选择报表期'); return }
|
this.loading = true
|
api.get('/audit/results', { params: { period: this.period } })
|
.then(res => { this.results = res.data || [] })
|
.catch(() => { this.$message.error('查询失败') })
|
.finally(() => { this.loading = false })
|
},
|
review(row, status) {
|
const fd = new FormData()
|
fd.append('id', row.id)
|
fd.append('status', status)
|
api.post('/audit/review', fd)
|
.then(() => { row.status = status; this.$message.success('已处理') })
|
.catch(() => { this.$message.error('操作失败') })
|
},
|
clearFilters() { this.enterpriseFilter = ''; this.ruleFilter = '' },
|
statusType(status) {
|
if (status === 'CONFIRMED') return 'success'
|
if (status === 'IGNORED') return 'info'
|
return 'warning'
|
}
|
}
|
}
|
</script>
|
<style scoped>
|
.el-header { background: #409EFF; color: white; line-height: 60px; font-size: 18px; }
|
</style>
|