10 changed files with 732 additions and 625 deletions
-
42src/api/statistics/statistics.js
-
1src/views/archiveUtilize/archiveSearch/index.vue
-
33src/views/archiveUtilize/archiveSearch/module/resultList.vue
-
302src/views/archivesStatistics/annualReportStatistics/index.vue
-
2src/views/archivesStatistics/borrowingStatistics/index.vue
-
394src/views/archivesStatistics/dataStatistics/index.vue
-
169src/views/archivesStatistics/roomCollectionStatistics/index.vue
-
156src/views/archivesStatistics/usageCountStatistics/index.vue
-
156src/views/archivesStatistics/utilizeRegistrationStatistics/index.vue
-
102src/views/components/category/PreviewForm.vue
@ -0,0 +1,42 @@ |
|||
import request from '@/utils/request' |
|||
import qs from 'qs' |
|||
|
|||
// 总量统计
|
|||
// fondsIds=1&fondsIds=2&fondsIds=3&fondsIds=4&years=2024&years=2025&years=2026
|
|||
export function FetchTotalStatistics(params) { |
|||
return request({ |
|||
url: 'api/control/getTotalStatistics' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 管理库档案年度
|
|||
export function FetchArchivedAllYear(params) { |
|||
return request({ |
|||
url: 'api/control/getArchivedAllYear' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 室藏统计
|
|||
export function FetchRoomCollectionStatistics(params) { |
|||
return request({ |
|||
url: 'api/control/getRoomCollectionStatistics' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 删除AI辅助著录
|
|||
// export function FetchDelAssistEnter(data) {
|
|||
// return request({
|
|||
// url: 'api/ai/delAssistEnter',
|
|||
// method: 'post',
|
|||
// data
|
|||
// })
|
|||
// }
|
|||
|
|||
export default { |
|||
FetchTotalStatistics, |
|||
FetchArchivedAllYear, |
|||
FetchRoomCollectionStatistics |
|||
} |
|||
@ -1,302 +0,0 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="container-main"> |
|||
<div class="elect-cont-left"> |
|||
<div class="head-container"> |
|||
<el-select v-model="form.fondsId" placeholder="请选择" style="width: 225px;" @change="changeFondsValue($event)"> |
|||
<el-option |
|||
v-for="(item,index) in fondsOptions" |
|||
:key="index" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
</div> |
|||
<div class="container-left"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<ul class="left-annual-type"> |
|||
<li class="active">本单位填报(6)</li> |
|||
<li>下级上报(0)</li> |
|||
<li>汇总上报(0)</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="elect-cont-right"> |
|||
<div class="head-container" style="position: relative;"> |
|||
<crudOperation :permission="permission"> |
|||
<template v-slot:middle> |
|||
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)"> |
|||
<i class="iconfont icon-shanchu" /> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</crudOperation> |
|||
<div class="double-click-btn" style="top: 3px;"><i class="iconfont icon-zhuyi-lan" /><span>双击列表数据查看年报详情</span></div> |
|||
</div> |
|||
<div class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="loading" |
|||
class="archives-table" |
|||
:data="tableData" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
@row-click="clickRowHandler" |
|||
@row-dblclick="handleDbClick" |
|||
> |
|||
<el-table-column type="selection" align="center" width="55" /> |
|||
<el-table-column label="年度" prop="year" /> |
|||
<el-table-column label="统计模板" prop="template" min-width="150px" /> |
|||
<el-table-column label="填报单位" prop="unit" /> |
|||
<el-table-column label="创建人" prop="creator" /> |
|||
<el-table-column prop="create_time" label="创建日期"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.create_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="备注" prop="remark" /> |
|||
<el-table-column label="状态" prop="status" align="center"> |
|||
<template slot-scope="scope"> |
|||
<!-- <div>{{ scope.row.status === 0 ? '录入中' : '已汇总' }}</div> --> |
|||
<span v-if="scope.row.status === 0" class="row-state row-physical state-active">录入中</span> |
|||
<span v-else class="row-state row-binding state-active">已汇总</span> |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column label="操作" align="center" prop="deptsStatus" /> --> |
|||
</el-table> |
|||
<!--分页组件--> |
|||
<!-- <pagination v-if="crud.data.length!==0" /> --> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<el-dialog append-to-body :close-on-click-modal="false" :before-close="handleCloseDialog" :visible.sync="detailVisible" title="详情"> |
|||
<div class="setting-dialog"> |
|||
<ul class="annual-dialog-detail"> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">年度:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.year }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">年报模板:</div> |
|||
<div class="detail-item-right">2019</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">填报单位:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.unit }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">报表模板:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.template }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">填报人:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.creator }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">上报至:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.upToUint }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">上报日期:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.upToDate | parseTime }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">备注:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.remark }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">附件列表:</div> |
|||
<div class="detail-item-right" /> |
|||
</li> |
|||
</ul> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<!-- <router-link to="/local-html">跳转到本地HTML文件</router-link> --> |
|||
<el-button type="primary" @click="goToHtml">报表详情</el-button> |
|||
<!-- <el-button type="text" @click="detailVisible=false">确定</el-button> --> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import crudDept from '@/api/system/dept' |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
|
|||
const defaultForm = { id: null, fondsId: null } |
|||
const data = [ |
|||
{ |
|||
'year': 2024, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2023, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '武汉飞天智能', |
|||
'upToDate': '1706078799000' |
|||
}, |
|||
{ |
|||
'year': 2022, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2021, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2020, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2019, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
} |
|||
] |
|||
|
|||
export default { |
|||
name: 'AnnualReportStatistics', |
|||
components: { crudOperation }, |
|||
cruds() { |
|||
return CRUD({ title: '年报统计', idField: 'deptsId', url: 'api/depts/initDeptsList', crudMethod: { ...crudDept }, optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
reset: false, |
|||
download: false, |
|||
group: false |
|||
}, |
|||
queryOnPresenterCreated: false |
|||
}) |
|||
}, |
|||
mixins: [presenter(), header(), form(defaultForm), crud()], |
|||
data() { |
|||
return { |
|||
permission: {}, |
|||
fondsOptions: [], |
|||
form: { |
|||
'fondsId': null |
|||
}, |
|||
loading: false, |
|||
tableData: data, |
|||
detailVisible: false, |
|||
detailContent: {} |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
}, |
|||
methods: { |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
if (this.fondsOptions.length > 0) { |
|||
this.form.fondsId = this.fondsOptions[0].id |
|||
} |
|||
}) |
|||
}, |
|||
changeFondsValue(value) { |
|||
const obj = this.fondsOptions.find(function(item) { |
|||
return item.id === value |
|||
}) |
|||
console.log('obj', obj) |
|||
}, |
|||
clickRowHandler(row) { |
|||
this.$refs.table.clearSelection() |
|||
this.$refs.table.toggleRowSelection(row) |
|||
}, |
|||
handleDbClick(row) { |
|||
this.detailVisible = true |
|||
this.detailContent = row |
|||
}, |
|||
handleCloseDialog() { |
|||
this.detailVisible = false |
|||
}, |
|||
goToHtml() { |
|||
// 这里的 'test.html' 是你放在 public 目录下的 HTML 文件名称 |
|||
// window.location.href = 'report/annual.htm' |
|||
window.open('report/annual.htm', '_blank') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.left-annual-type{ |
|||
// padding: 20px 0; |
|||
line-height: 36px; |
|||
font-size: 14px; |
|||
color: #0c0e1e; |
|||
li{ |
|||
padding: 0 10px; |
|||
&:hover, |
|||
&.active{ |
|||
background-color: #e8f2ff; |
|||
color: #0348f3; |
|||
cursor: default; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.annual-dialog-detail{ |
|||
.detail-item{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
line-height: 38px; |
|||
font-size: 16px; |
|||
.detail-item-left{ |
|||
width: 120px; |
|||
text-align: right; |
|||
} |
|||
.detail-item-right{ |
|||
color: #0c0e1e; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,287 +1,157 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div v-for="(company, companyIndex) in allData" :key="'company-' + companyIndex" class="company-section"> |
|||
<h3 class="table-header">{{ company.name }}</h3> |
|||
<div class="grid-table"> |
|||
<div class="grid-header"> |
|||
<div class="grid-header-tr"> |
|||
<div class="header-row colspan2 rowspan2 th-style">档案门类</div> |
|||
</div> |
|||
<div class="grid-header-tr"> |
|||
<div class="header-row th-style">收集整编</div> |
|||
<div class="row-cell"> |
|||
<div class="colspan th-style">回收站</div> |
|||
<div class="colspan6 th-style">收集库</div> |
|||
</div> |
|||
</div> |
|||
<div class="grid-header-tr"> |
|||
<div class="header-row th-style">档案管理</div> |
|||
<div class="row-cell"> |
|||
<div class="colspan th-style">销毁库</div> |
|||
<div class="colspan6 th-style">管理库</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div v-for="(row, rowIndex) in company.tableData" :key="'row-' + rowIndex" class="grid-content"> |
|||
<div class="colspan2 rowspan3"> {{ row.category }} </div> |
|||
<div> |
|||
<div class="colspan rowspan2"> {{ row.recycle }} </div> |
|||
<div class="grid-item placeholder-line" /> |
|||
</div> |
|||
<div> |
|||
<div class="grid-item"> |
|||
<div class="colspan">未归档</div> |
|||
<div class="colspan">{{ row.unfiled }}</div> |
|||
<div class="colspan">归档中</div> |
|||
<div class="colspan">{{ row.collectArchiving }}</div> |
|||
</div> |
|||
<div class="grid-item"> |
|||
<div class="colspan">未装盒</div> |
|||
<div class="colspan">{{ row.collectPacked }}</div> |
|||
<div class="colspan">已装盒</div> |
|||
<div class="colspan">{{ row.collectPacked }}</div> |
|||
</div> |
|||
<div class="grid-item placeholder-line " /> |
|||
</div> |
|||
<div> |
|||
<div class="grid-item"> |
|||
<div class="colspan rowspan2">全部</div> |
|||
<div class="colspan rowspan2">{{ row.collectAll }}</div> |
|||
</div> |
|||
<div class="grid-item placeholder-line placeholder-line-right" /> |
|||
</div> |
|||
<div class="colspan rowspan3"> {{ row.destroy }} </div> |
|||
<div> |
|||
<div class="grid-item"> |
|||
<div class="colspan">未装盒</div> |
|||
<div class="colspan">{{ row.manageUnpacked }}</div> |
|||
<div class="colspan">已装盒</div> |
|||
<div class="colspan">{{ row.managePacked }}</div> |
|||
</div> |
|||
<div class="grid-item"> |
|||
<div class="colspan">未入库</div> |
|||
<div class="colspan">{{ row.manageUnstored }}</div> |
|||
<div class="colspan">已入库</div> |
|||
<div class="colspan">{{ row.manageStored }}</div> |
|||
</div> |
|||
<div class="grid-item"> |
|||
<div class="colspan">空闲中</div> |
|||
<div class="colspan">{{ row.manageIdle }}</div> |
|||
<div class="colspan">审批中</div> |
|||
<div class="colspan">{{ row.manageApproving }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="grid-item"> |
|||
<div class="colspan rowspan3">全部</div> |
|||
<div class="colspan rowspan3">{{ row.collectAll }}</div> |
|||
</div> |
|||
</div> |
|||
<div class="app-container row-container"> |
|||
<div class="connection-header"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="fondsIds" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择所属全宗" |
|||
style="width: 320px;" |
|||
> |
|||
<el-option |
|||
v-for="item in fondsOptions" |
|||
:key="item.id" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-select |
|||
v-model="years" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择年份" |
|||
style="width: 150px;" |
|||
> |
|||
<el-option |
|||
v-for="item in yearsOptions" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="getTotalStatistics">查询</el-button> |
|||
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery">重置</el-button> |
|||
</div> |
|||
</div> |
|||
|
|||
<el-table class="archives-table" :data="allData" :summary-method="getSummaries" show-summary border style="width: 100%;"> |
|||
<el-table-column type="index" label="序号" width="60" align="center" /> |
|||
<el-table-column prop="categoryName" label="档案门类(国标分类)" align="center" /> |
|||
<el-table-column prop="archivesCount" label="案卷数(卷)" align="center" /> |
|||
<el-table-column prop="singleCount" label="卷内件数(件)" align="center" /> |
|||
<el-table-column prop="fileCount" label="电子原文数量(份)" align="center" /> |
|||
<el-table-column prop="fileSize" label="电子档案存储容量(GB)" align="center" /> |
|||
</el-table> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
const allData = [ |
|||
{ |
|||
name: '武汉飞天智能', |
|||
tableData: [ |
|||
{ |
|||
category: '文书档案(文件)', |
|||
recycle: 4, |
|||
unfiled: 0, |
|||
collectArchiving: 0, |
|||
collectPacked: 1, |
|||
collectAll: 5, |
|||
destroy: 4, |
|||
manageUnpacked: 4, |
|||
managePacked: 1, |
|||
manageUnstored: 4, |
|||
manageStored: 1, |
|||
manageIdle: 5, |
|||
manageApproving: 0, |
|||
manageAll: 5 |
|||
}, |
|||
{ |
|||
category: '文书档案(案卷)', |
|||
recycle: 4, |
|||
unfiled: 0, |
|||
collectArchiving: 0, |
|||
collectPacked: 1, |
|||
collectAll: 5, |
|||
destroy: 4, |
|||
manageUnpacked: 4, |
|||
managePacked: 1, |
|||
manageUnstored: 4, |
|||
manageStored: 1, |
|||
manageIdle: 5, |
|||
manageApproving: 0, |
|||
manageAll: 5 |
|||
}, |
|||
{ |
|||
category: '互联网项目', |
|||
recycle: 4, |
|||
unfiled: 0, |
|||
collectArchiving: 0, |
|||
collectPacked: 1, |
|||
collectAll: 5, |
|||
destroy: 4, |
|||
manageUnpacked: 4, |
|||
managePacked: 1, |
|||
manageUnstored: 4, |
|||
manageStored: 1, |
|||
manageIdle: 5, |
|||
manageApproving: 0, |
|||
manageAll: 5 |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
name: '闵行客(武汉)科技', |
|||
tableData: [ |
|||
{ |
|||
category: '文书档案(文件)', |
|||
recycle: 4, |
|||
unfiled: 0, |
|||
collectArchiving: 0, |
|||
collectPacked: 1, |
|||
collectAll: 5, |
|||
destroy: 4, |
|||
manageUnpacked: 4, |
|||
managePacked: 1, |
|||
manageUnstored: 4, |
|||
manageStored: 1, |
|||
manageIdle: 5, |
|||
manageApproving: 0, |
|||
manageAll: 5 |
|||
}, |
|||
{ |
|||
category: '文书档案(案卷)', |
|||
recycle: 4, |
|||
unfiled: 0, |
|||
collectArchiving: 0, |
|||
collectPacked: 1, |
|||
collectAll: 5, |
|||
destroy: 4, |
|||
manageUnpacked: 4, |
|||
managePacked: 1, |
|||
manageUnstored: 4, |
|||
manageStored: 1, |
|||
manageIdle: 5, |
|||
manageApproving: 0, |
|||
manageAll: 5 |
|||
} |
|||
] |
|||
} |
|||
] |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import { FetchTotalStatistics, FetchArchivedAllYear } from '@/api/statistics/statistics' |
|||
|
|||
export default { |
|||
name: 'DataStatistics', |
|||
data() { |
|||
return { |
|||
allData: allData |
|||
allData: [], |
|||
fondsOptions: [], |
|||
fondsIds: [], |
|||
yearsOptions: [], |
|||
years: [] |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
this.getArchivedAllYearDatas() |
|||
this.getTotalStatistics() |
|||
}, |
|||
methods: { |
|||
getSummaries(param) { |
|||
const { columns, data } = param |
|||
const sums = [] |
|||
console.log('columns', columns) |
|||
console.log('data', data) |
|||
columns.forEach((column, index) => { |
|||
if (index === 1) { |
|||
sums[index] = '合计(全库总量)' |
|||
return |
|||
} |
|||
const values = data.map(item => Number(item[column.property])) |
|||
console.log(values) |
|||
if (!values.every(value => isNaN(value))) { |
|||
if (column.property === 'fileSize') { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0).toFixed(3) |
|||
} else { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0) |
|||
} |
|||
} else { |
|||
sums[index] = '-' |
|||
} |
|||
}) |
|||
return sums |
|||
}, |
|||
resetQuery() { |
|||
this.fondsIds = [] |
|||
this.years = [] |
|||
this.getTotalStatistics() |
|||
}, |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
// 默认全选所有档案库 |
|||
// this.fondsIds = res.map(item => item.id) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
getArchivedAllYearDatas() { |
|||
FetchArchivedAllYear().then(res => { |
|||
this.yearsOptions = res.map(item => ({ |
|||
id: item, |
|||
name: item |
|||
})) |
|||
// 默认全选所有年份 |
|||
// this.years = res.map(item => item) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
checkAndQuery() { |
|||
// 当两个数据都加载完成后才执行查询 |
|||
if (this.fondsOptions.length > 0 && this.yearsOptions.length > 0) { |
|||
this.getTotalStatistics() |
|||
} |
|||
}, |
|||
getTotalStatistics() { |
|||
FetchTotalStatistics({ |
|||
fondsIds: this.fondsIds, |
|||
years: this.years |
|||
}).then(res => { |
|||
this.allData = res |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
$base-line-height: 30px; |
|||
$border-color: #ddd; |
|||
$bg-color: #e8f2ff; |
|||
|
|||
.grid-table{ |
|||
border-left: 1px solid $border-color; |
|||
} |
|||
|
|||
.app-container { |
|||
height: calc(100vh - 140px); |
|||
line-height: $base-line-height; |
|||
} |
|||
|
|||
.company-section { |
|||
margin-bottom: 20px; |
|||
} |
|||
|
|||
.table-header{ |
|||
height: 40px; |
|||
line-height: 40px; |
|||
text-align: center; |
|||
border: 1px solid $border-color; |
|||
border-bottom: none; |
|||
width: calc(100vw - 297px); |
|||
color: #000; |
|||
background-color: $bg-color; |
|||
} |
|||
|
|||
.grid-header{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
|
|||
.grid-header-tr{ |
|||
border-top: 1px solid $border-color; |
|||
text-align: center; |
|||
.head-search{ |
|||
.el-select, |
|||
.el-button{ |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
|
|||
.header-row{ |
|||
@extend .cell-base; |
|||
::v-deep .el-table__footer{ |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
|
|||
.cell-base { |
|||
border-right: 1px solid $border-color; |
|||
border-bottom: 1px solid $border-color; |
|||
text-align: center; |
|||
} |
|||
|
|||
.colspan{ |
|||
@extend .cell-base; |
|||
width: calc((100vw - 298px) / 16); |
|||
} |
|||
|
|||
.colspan2{ |
|||
@extend .colspan; |
|||
width: calc((100vw - 298px) / 16 * 2); |
|||
} |
|||
|
|||
.colspan6{ |
|||
@extend .colspan; |
|||
width: calc((100vw - 298px) / 16 * 6); |
|||
} |
|||
.th-style{ |
|||
// background-color: $bg-color; |
|||
color: #000; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.placeholder-line{ |
|||
height: $base-line-height + 1; |
|||
border-bottom: 1px solid $border-color; |
|||
} |
|||
.placeholder-line-right{ |
|||
border-right: 1px solid $border-color; |
|||
} |
|||
|
|||
.rowspan2{ |
|||
height: $base-line-height * 2 + 2; |
|||
line-height: $base-line-height * 2 + 2; |
|||
} |
|||
|
|||
.rowspan3{ |
|||
height: $base-line-height * 3 + 3; |
|||
line-height: $base-line-height * 3 + 3; |
|||
} |
|||
|
|||
.row-cell{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
div{ |
|||
border-right:1px solid $border-color; |
|||
::v-deep .el-table__empty-block{ |
|||
border-bottom: 1px solid #e4e7ed; |
|||
} |
|||
} |
|||
|
|||
.grid-content, .grid-item{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,169 @@ |
|||
<template> |
|||
<div class="app-container row-container"> |
|||
<div class="connection-header"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="fondsIds" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择所属全宗" |
|||
style="width: 320px;" |
|||
> |
|||
<el-option |
|||
v-for="item in fondsOptions" |
|||
:key="item.id" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-select |
|||
v-model="years" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择年份" |
|||
style="width: 150px;" |
|||
> |
|||
<el-option |
|||
v-for="item in yearsOptions" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="getRoomCollectionStatistics">查询</el-button> |
|||
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery">重置</el-button> |
|||
</div> |
|||
</div> |
|||
|
|||
<el-table class="archives-table" :data="displayData" :summary-method="getSummaries" show-summary border style="width: 100%;"> |
|||
<el-table-column type="index" label="序号" width="60" align="center" /> |
|||
<el-table-column prop="categoryName" label="档案门类" align="center" /> |
|||
<el-table-column prop="year" label="统计年度" align="center" /> |
|||
<el-table-column prop="permanentCount" label="永久保管(Y)数量" align="center" /> |
|||
<el-table-column prop="thirtyYearCount" label="定期30年(D30)数量" align="center" /> |
|||
<el-table-column prop="tenYearCount" label="定期10年(D10)数量" align="center" /> |
|||
<el-table-column prop="totalCount" label="该类型该年度总量" align="center" /> |
|||
</el-table> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import { FetchRoomCollectionStatistics, FetchArchivedAllYear } from '@/api/statistics/statistics' |
|||
|
|||
export default { |
|||
name: 'RoomCollectionStatistics', |
|||
data() { |
|||
return { |
|||
allData: [], |
|||
fondsOptions: [], |
|||
fondsIds: [], |
|||
yearsOptions: [], |
|||
years: [] |
|||
} |
|||
}, |
|||
computed: { |
|||
displayData() { |
|||
// 将嵌套数据转换为扁平化格式 |
|||
const result = [] |
|||
this.allData.forEach(category => { |
|||
category.statistics.forEach(stat => { |
|||
result.push({ |
|||
categoryName: category.categoryName, |
|||
year: stat.year + '年度', |
|||
permanentCount: stat.permanentCount, |
|||
thirtyYearCount: stat.thirtyYearCount, |
|||
tenYearCount: stat.tenYearCount, |
|||
totalCount: stat.totalCount |
|||
}) |
|||
}) |
|||
}) |
|||
return result |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
this.getArchivedAllYearDatas() |
|||
this.getRoomCollectionStatistics() |
|||
}, |
|||
methods: { |
|||
getSummaries(param) { |
|||
const { columns, data } = param |
|||
const sums = [] |
|||
columns.forEach((column, index) => { |
|||
if (index === 0) { |
|||
sums[index] = '-' |
|||
} else if (index === 1) { |
|||
sums[index] = '该年度全类型合计' |
|||
} else if (index === 2) { |
|||
sums[index] = '-' |
|||
} else { |
|||
const values = data.map(item => Number(item[column.property])) |
|||
if (!values.every(value => isNaN(value))) { |
|||
sums[index] = values.reduce((prev, curr) => prev + curr, 0) |
|||
} else { |
|||
sums[index] = '-' |
|||
} |
|||
} |
|||
}) |
|||
return sums |
|||
}, |
|||
resetQuery() { |
|||
this.fondsIds = [] |
|||
this.years = [] |
|||
this.getRoomCollectionStatistics() |
|||
}, |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
// 默认全选所有档案库 |
|||
// this.fondsIds = res.map(item => item.id) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
getArchivedAllYearDatas() { |
|||
FetchArchivedAllYear().then(res => { |
|||
this.yearsOptions = res.map(item => ({ |
|||
id: item, |
|||
name: item |
|||
})) |
|||
// 默认全选所有年份 |
|||
// this.years = res.map(item => item) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
checkAndQuery() { |
|||
// 当两个数据都加载完成后才执行查询 |
|||
if (this.fondsOptions.length > 0 && this.yearsOptions.length > 0) { |
|||
this.getRoomCollectionStatistics() |
|||
} |
|||
}, |
|||
getRoomCollectionStatistics() { |
|||
FetchRoomCollectionStatistics({ |
|||
fondsIds: this.fondsIds, |
|||
years: this.years |
|||
}).then(res => { |
|||
this.allData = res |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.app-container { |
|||
height: calc(100vh - 140px); |
|||
.head-search{ |
|||
.el-select, |
|||
.el-button{ |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
::v-deep .el-table__footer{ |
|||
font-size: 14px; |
|||
} |
|||
::v-deep .el-table__empty-block{ |
|||
border-bottom: 1px solid #e4e7ed; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,156 @@ |
|||
<template> |
|||
<div class="app-container row-container"> |
|||
<div class="connection-header"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="fondsIds" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择所属全宗" |
|||
style="width: 320px;" |
|||
> |
|||
<el-option |
|||
v-for="item in fondsOptions" |
|||
:key="item.id" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-select |
|||
v-model="years" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择年份" |
|||
style="width: 150px;" |
|||
> |
|||
<el-option |
|||
v-for="item in yearsOptions" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="getTotalStatistics">查询</el-button> |
|||
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery">重置</el-button> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="table-container"> |
|||
<el-table class="archives-table" :data="allData" :summary-method="getSummaries" show-summary border style="width: 100%;"> |
|||
<el-table-column type="index" label="序号" width="60" align="center" /> |
|||
<el-table-column prop="categoryName" label="档案门类(国标分类)" align="center" /> |
|||
<el-table-column prop="archivesCount" label="案卷数(卷)" align="center" /> |
|||
<el-table-column prop="singleCount" label="卷内件数(件)" align="center" /> |
|||
<el-table-column prop="fileCount" label="电子原文数量(份)" align="center" /> |
|||
<el-table-column prop="fileSize" label="电子档案存储容量(GB)" align="center" /> |
|||
</el-table> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import { FetchTotalStatistics, FetchArchivedAllYear } from '@/api/statistics/statistics' |
|||
|
|||
export default { |
|||
name: 'UsageCountStatistics', |
|||
data() { |
|||
return { |
|||
allData: [], |
|||
fondsOptions: [], |
|||
fondsIds: [], |
|||
yearsOptions: [], |
|||
years: [] |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
this.getArchivedAllYearDatas() |
|||
this.getTotalStatistics() |
|||
}, |
|||
methods: { |
|||
getSummaries(param) { |
|||
const { columns, data } = param |
|||
const sums = [] |
|||
console.log('columns', columns) |
|||
console.log('data', data) |
|||
columns.forEach((column, index) => { |
|||
if (index === 1) { |
|||
sums[index] = '合计(全库总量)' |
|||
return |
|||
} |
|||
const values = data.map(item => Number(item[column.property])) |
|||
console.log(values) |
|||
if (!values.every(value => isNaN(value))) { |
|||
if (column.property === 'fileSize') { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0).toFixed(3) |
|||
} else { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0) |
|||
} |
|||
} else { |
|||
sums[index] = '-' |
|||
} |
|||
}) |
|||
return sums |
|||
}, |
|||
resetQuery() { |
|||
this.fondsIds = [] |
|||
this.years = [] |
|||
this.getTotalStatistics() |
|||
}, |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
// 默认全选所有档案库 |
|||
// this.fondsIds = res.map(item => item.id) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
getArchivedAllYearDatas() { |
|||
FetchArchivedAllYear().then(res => { |
|||
this.yearsOptions = res.map(item => ({ |
|||
id: item, |
|||
name: item |
|||
})) |
|||
// 默认全选所有年份 |
|||
// this.years = res.map(item => item) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
checkAndQuery() { |
|||
// 当两个数据都加载完成后才执行查询 |
|||
if (this.fondsOptions.length > 0 && this.yearsOptions.length > 0) { |
|||
this.getTotalStatistics() |
|||
} |
|||
}, |
|||
getTotalStatistics() { |
|||
FetchTotalStatistics({ |
|||
fondsIds: this.fondsIds, |
|||
years: this.years |
|||
}).then(res => { |
|||
this.allData = res |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.app-container { |
|||
height: calc(100vh - 140px); |
|||
.head-search{ |
|||
.el-select, |
|||
.el-button{ |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
::v-deep .el-table__footer{ |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,156 @@ |
|||
<template> |
|||
<div class="app-container row-container"> |
|||
<div class="connection-header"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="fondsIds" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择所属全宗" |
|||
style="width: 320px;" |
|||
> |
|||
<el-option |
|||
v-for="item in fondsOptions" |
|||
:key="item.id" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-select |
|||
v-model="years" |
|||
multiple |
|||
collapse-tags |
|||
placeholder="请选择年份" |
|||
style="width: 150px;" |
|||
> |
|||
<el-option |
|||
v-for="item in yearsOptions" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="getTotalStatistics">查询</el-button> |
|||
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery">重置</el-button> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="table-container"> |
|||
<el-table class="archives-table" :data="allData" :summary-method="getSummaries" show-summary border style="width: 100%;"> |
|||
<el-table-column type="index" label="序号" width="60" align="center" /> |
|||
<el-table-column prop="categoryName" label="档案门类(国标分类)" align="center" /> |
|||
<el-table-column prop="archivesCount" label="案卷数(卷)" align="center" /> |
|||
<el-table-column prop="singleCount" label="卷内件数(件)" align="center" /> |
|||
<el-table-column prop="fileCount" label="电子原文数量(份)" align="center" /> |
|||
<el-table-column prop="fileSize" label="电子档案存储容量(GB)" align="center" /> |
|||
</el-table> |
|||
</div> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import { FetchTotalStatistics, FetchArchivedAllYear } from '@/api/statistics/statistics' |
|||
|
|||
export default { |
|||
name: 'UtilizeRegistrationStatistics', |
|||
data() { |
|||
return { |
|||
allData: [], |
|||
fondsOptions: [], |
|||
fondsIds: [], |
|||
yearsOptions: [], |
|||
years: [] |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
this.getArchivedAllYearDatas() |
|||
this.getTotalStatistics() |
|||
}, |
|||
methods: { |
|||
getSummaries(param) { |
|||
const { columns, data } = param |
|||
const sums = [] |
|||
console.log('columns', columns) |
|||
console.log('data', data) |
|||
columns.forEach((column, index) => { |
|||
if (index === 1) { |
|||
sums[index] = '合计(全库总量)' |
|||
return |
|||
} |
|||
const values = data.map(item => Number(item[column.property])) |
|||
console.log(values) |
|||
if (!values.every(value => isNaN(value))) { |
|||
if (column.property === 'fileSize') { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0).toFixed(3) |
|||
} else { |
|||
sums[index] = values.reduce((prev, curr) => { |
|||
return prev + curr |
|||
}, 0) |
|||
} |
|||
} else { |
|||
sums[index] = '-' |
|||
} |
|||
}) |
|||
return sums |
|||
}, |
|||
resetQuery() { |
|||
this.fondsIds = [] |
|||
this.years = [] |
|||
this.getTotalStatistics() |
|||
}, |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
// 默认全选所有档案库 |
|||
// this.fondsIds = res.map(item => item.id) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
getArchivedAllYearDatas() { |
|||
FetchArchivedAllYear().then(res => { |
|||
this.yearsOptions = res.map(item => ({ |
|||
id: item, |
|||
name: item |
|||
})) |
|||
// 默认全选所有年份 |
|||
// this.years = res.map(item => item) |
|||
// this.checkAndQuery() |
|||
}) |
|||
}, |
|||
checkAndQuery() { |
|||
// 当两个数据都加载完成后才执行查询 |
|||
if (this.fondsOptions.length > 0 && this.yearsOptions.length > 0) { |
|||
this.getTotalStatistics() |
|||
} |
|||
}, |
|||
getTotalStatistics() { |
|||
FetchTotalStatistics({ |
|||
fondsIds: this.fondsIds, |
|||
years: this.years |
|||
}).then(res => { |
|||
this.allData = res |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.app-container { |
|||
height: calc(100vh - 140px); |
|||
.head-search{ |
|||
.el-select, |
|||
.el-button{ |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
::v-deep .el-table__footer{ |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue