Browse Source

档案编研/首页

master
xuhuajiao 1 year ago
parent
commit
07441ba5b1
  1. 58
      src/api/archiveUtilize/archiveEditing.js
  2. 11
      src/api/archivesManage/library.js
  3. BIN
      src/assets/images/home-icon1.png
  4. BIN
      src/assets/images/home-icon2.png
  5. BIN
      src/assets/images/home-icon3.png
  6. BIN
      src/assets/images/home-icon4.png
  7. 52
      src/assets/styles/yxk-admin.scss
  8. 14
      src/utils/upload.js
  9. 4
      src/views/archiveUtilize/archiveEditing/form.vue
  10. 50
      src/views/archiveUtilize/archiveEditing/index.vue
  11. 30
      src/views/archiveUtilize/archiveEditing/module/detail.vue
  12. 209
      src/views/archiveUtilize/archiveEditing/module/material.vue
  13. 175
      src/views/archiveUtilize/archiveEditing/module/materialSelected.vue
  14. 48
      src/views/archiveUtilize/archiveEditing/module/onlineAdd.vue
  15. 280
      src/views/archiveUtilize/archiveEditing/module/onlineEditing.vue
  16. 4
      src/views/archiveUtilize/archiveSearch/module/resultList.vue
  17. 54
      src/views/components/echarts/lendAcross.vue
  18. 242
      src/views/dashboard/PanelGroup.vue
  19. 316
      src/views/home copy.vue
  20. 507
      src/views/home.vue
  21. 1
      src/views/system/archiveStatistics/mixins/statistics.js

58
src/api/archiveUtilize/archiveEditing.js

@ -14,10 +14,10 @@ export function edit(parameter) {
})
}
// 删除档案盒
// 删除编研
export function del(data) {
return request({
url: 'api/archivesDeposit/del',
url: 'api/archivesUtilize/deleteResearch',
method: 'post',
data: data
})
@ -40,6 +40,15 @@ export function FetchAddResearchSource(data) {
})
}
// 档案编研素材删除
export function FetchDeleteResearchSource(data) {
return request({
url: 'api/archivesUtilize/deleteResearchSource',
method: 'post',
data: data
})
}
// 档案编研素材收集列表
export function FetchInitResearchSourceList(params) {
return request({
@ -48,4 +57,47 @@ export function FetchInitResearchSourceList(params) {
})
}
export default { add, edit, del, FetchInitResearchDetails, FetchAddResearchSource, FetchInitResearchSourceList }
// 编辑档案编研在线编研
export function FetchEditResearchOnline(data) {
return request({
url: 'api/archivesUtilize/editResearchOnline',
method: 'post',
data: data
})
}
// 档案编研在线编研详情
export function FetchInitResearchOnlineDetails(params) {
return request({
url: 'api/archivesUtilize/initResearchOnlineDetails' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 删除在线编研
export function FetchDeleteResearchOnline(data) {
return request({
url: 'api/archivesUtilize/deleteResearchOnline',
method: 'post',
data: data
})
}
// 更改在线编研状态
export function FetchChangeResearchOnlineState(data) {
return request({
url: 'api/archivesUtilize/changeResearchOnlineState',
method: 'post',
data: data
})
}
// 初始化在线编研附件
export function FetchInitResearchOnlineFileList(params) {
return request({
url: 'api/archivesUtilize/initResearchOnlineFileList' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { add, edit, del, FetchInitResearchDetails, FetchAddResearchSource, FetchDeleteResearchSource, FetchInitResearchSourceList, FetchEditResearchOnline, FetchInitResearchOnlineDetails, FetchDeleteResearchOnline, FetchChangeResearchOnlineState, FetchInitResearchOnlineFileList }

11
src/api/archivesManage/library.js

@ -41,10 +41,19 @@ export function FetchBusinessFlowDetails(params) {
})
}
// 获取主页基础数据
export function FetchMainData(params) {
return request({
url: 'api/control/getMainData' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default {
FetchInitContorlView,
FetchPrintData,
FetchIntoFlowBusiness,
FetchBusinessFlowHistory,
FetchBusinessFlowDetails
FetchBusinessFlowDetails,
FetchMainData
}

BIN
src/assets/images/home-icon1.png

After

Width: 82  |  Height: 79  |  Size: 4.3 KiB

BIN
src/assets/images/home-icon2.png

After

Width: 82  |  Height: 79  |  Size: 3.6 KiB

BIN
src/assets/images/home-icon3.png

After

Width: 82  |  Height: 79  |  Size: 4.0 KiB

BIN
src/assets/images/home-icon4.png

After

Width: 82  |  Height: 79  |  Size: 5.7 KiB

52
src/assets/styles/yxk-admin.scss

@ -1221,32 +1221,32 @@ input[type ='number'] {
.warehouse-svg {
margin: 0 10px 1px 0;
}
.title-arrow {
position: relative;
display: inline-block;
&::before {
content: '';
width: 36px;
height: 12px;
position: absolute;
right: -60px;
top: 50%;
transform: translateY(-50%);
background: url('~@/assets/images/warehouse_arrow_left.png') no-repeat;
}
&::after {
content: '';
width: 36px;
height: 12px;
position: absolute;
left: -60px;
top: 50%;
transform: translateY(-50%);
background: url('~@/assets/images/warehouse_arrow_right.png') no-repeat;
}
}
// .title-arrow {
// position: relative;
// display: inline-block;
// &::before {
// content: '';
// width: 36px;
// height: 12px;
// position: absolute;
// right: -60px;
// top: 50%;
// transform: translateY(-50%);
// background: url('~@/assets/images/warehouse_arrow_left.png') no-repeat;
// }
// &::after {
// content: '';
// width: 36px;
// height: 12px;
// position: absolute;
// left: -60px;
// top: 50%;
// transform: translateY(-50%);
// background: url('~@/assets/images/warehouse_arrow_right.png') no-repeat;
// }
// }
.el-switch .el-switch__core{
@include switch-disabled;
}

14
src/utils/upload.js

@ -84,3 +84,17 @@ export function batchMountUpload(api, file, params) {
}
return axios.post(api, data, config)
}
// 在线编研附件
export function onlineUpload(api, file, params) {
var data = new FormData()
data.append('file', file)
data.append('researchId', params.researchId)
data.append('researchOnlineId', params.researchOnlineId)
const config = {
headers: {
'Authorization': getToken()
}
}
return axios.post(api, data, config)
}

4
src/views/archiveUtilize/archiveEditing/form.vue

@ -189,6 +189,8 @@ export default {
this.userMainSelected.forEach(item => {
this.$refs.userTable.toggleRowSelection(item)
})
} else {
this.$refs.userTable.clearSelection()
}
} else {
if (this.userOtherSelected.length !== 0) {
@ -196,6 +198,8 @@ export default {
this.userOtherSelected.forEach(item => {
this.$refs.userTable.toggleRowSelection(item)
})
} else {
this.$refs.userTable.clearSelection()
}
}
})

50
src/views/archiveUtilize/archiveEditing/index.vue

@ -15,7 +15,7 @@
<date-range-picker v-model="blurryTime" class="date-item" />
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button>
<el-checkbox v-model="participants" style="line-height: 32px; padding-left: 10px;">我参与得编研</el-checkbox>
<el-checkbox v-model="participants" style="line-height: 32px; padding-left: 10px;" @change="changeMy">我参与得编研</el-checkbox>
</div>
<crudOperation :permission="permission">
<template v-slot:left>
@ -65,7 +65,7 @@
</el-table>
<pagination v-if="crud.data.length !== 0" />
<eForm ref="eform" @refresh="initData" />
<EditingDetail ref="editingDetail" />
<EditingDetail ref="editingDetail" :current-research="currentResearch" />
</div>
</template>
@ -112,13 +112,9 @@ export default {
del: ['admin', 'archiveEditing:del']
},
keyWord: null,
options: [
{ value: 'username', label: '利用人' },
{ value: 'account', label: '利用事由' }
],
optionVal: '',
blurryTime: null,
participants: false
participants: false,
currentResearch: null
}
},
computed: {
@ -195,16 +191,50 @@ export default {
this.$refs.eform.formType = type
this.$refs.eform.formVisible = true
},
toDelete(data) {
this.$confirm('此操作将删除当前所选编研主题' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = data.map(item => item.id)
const params = {
'ids': ids,
'operator': this.user.username
}
crudEditing.del(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.initData()
}).catch(err => {
console.log(err)
})
}).catch(() => {
})
},
clickRowHandler(row) {
// this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
tableDoubleClick(row) {
// this.$refs.editingDetail.currentRow = row
this.currentResearch = row
this.$refs.editingDetail.archivesTabIndex = 0
this.$refs.editingDetail.getDetail(row)
this.$refs.editingDetail.editingDetailVisible = true
},
handleCloseDialog(done) {
},
changeMy(val) {
if (val) {
this.crud.query.participants = this.user.username
} else {
this.crud.query.participants = ''
}
this.crud.toQuery()
}
}
}

30
src/views/archiveUtilize/archiveEditing/module/detail.vue

@ -10,7 +10,7 @@
<li :class="{'active-tab-nav': archivesTabIndex == 1}" @click="changeActiveTab(1)">素材收集</li>
<li :class="{'active-tab-nav': archivesTabIndex == 2}" @click="changeActiveTab(2)">在线编研</li>
</ul>
<div v-if="archivesTabIndex !== 0" class="double-click-btn"><i class="iconfont icon-zhuyi-lan" /><span>双击列表数据查看详情</span></div>
<div v-if="archivesTabIndex === 2" class="double-click-btn"><i class="iconfont icon-zhuyi-lan" /><span>双击列表数据查看详情</span></div>
<!-- 基本信息 -->
<div v-if="archivesTabIndex === 0" class="base-info item-content">
<el-row>
@ -56,12 +56,12 @@
</div>
<!-- 素材收集 -->
<div v-if="archivesTabIndex===1" class="item-content">
<Material />
<Material :current-research="currentResearch" />
</div>
<!-- 在线编研 -->
<div v-if="archivesTabIndex===2">
<OnlineEditing />
<OnlineEditing :current-research="currentResearch" />
</div>
</div>
</div>
@ -73,24 +73,18 @@
<script>
import { FetchInitResearchDetails } from '@/api/archiveUtilize/archiveEditing'
import Material from './material.vue'
import Material from './material'
import OnlineEditing from './onlineEditing'
export default {
name: 'ArchiveEditingDetail',
components: { Material, OnlineEditing },
props: {
// selectedCategory: {
// type: Object,
// default: function() {
// return {}
// }
// },
// arcId: {
// type: String,
// default: function() {
// return ''
// }
// }
currentResearch: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
@ -110,7 +104,6 @@ export default {
'researchId': row.id
}
FetchInitResearchDetails(params).then((res) => {
console.log(res)
this.currentRow = res
}).catch(err => {
console.log(err)
@ -118,6 +111,9 @@ export default {
},
changeActiveTab(index) {
this.archivesTabIndex = index
if (this.archivesTabIndex === 0) {
this.getDetail(this.currentResearch)
}
},
// -
handleClose(done) {

209
src/views/archiveUtilize/archiveEditing/module/material.vue

@ -5,17 +5,17 @@
<i class="iconfont icon-xinzeng" />
新增
</el-button>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" @click="toDelete(crud.selections)">
<el-button slot="reference" size="mini" :disabled="crud.selections.length === 0" :loading="crud.delAllLoading" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
<el-button :loading="crud.downloadLoading" size="mini" @click="doExport(crud.selections)">
<el-button :loading="crud.downloadLoading" :disabled="crud.selections.length === 0" size="mini" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</el-button>
</div>
<el-table
ref="table"
ref="materialTable"
:data="crud.data"
:row-key="rowKey"
style="width: 100%;"
@ -26,85 +26,18 @@
<el-table-column type="selection" :reserve-selection="true" width="55" align="center" />
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column prop="username" label="档号" align="center" />
<el-table-column prop="description" label="题名" />
<el-table-column prop="browser" label="操作人" align="center" />
<el-table-column prop="createTime" label="加入时间" width="200">
<el-table-column prop="archiveNo" label="档号" align="center" />
<el-table-column prop="maintitle" label="题名" />
<el-table-column prop="create_by" label="操作人" align="center" />
<el-table-column prop="create_time" label="加入时间" width="200">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<pagination v-if="crud.data.length !== 0" />
<el-dialog title="利用详情" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="lendDetail" :before-close="handleCloseDialog">
<div class="setting-dialog">
<el-form ref="form" :model="form" inline label-width="100px">
<el-form-item label="利用人" prop="user">
<el-input v-model="form.user" style="width: 280px;" disabled />
</el-form-item>
<el-form-item label="利用流程" prop="process">
<el-input v-model="form.process" style="width: 280px;" disabled />
</el-form-item>
<el-form-item label="开始时间" prop="startDate">
<el-input v-model="form.startDate" style="width: 280px;" disabled />
</el-form-item>
<el-form-item label="结束时间" prop="endDate">
<el-input v-model="form.endDate" style="width: 280px;" disabled />
</el-form-item>
<el-row>
<el-form-item label="利用事由" prop="remark">
<el-input v-model="form.remark" type="textarea" :rows="4" style="width: 703px;" disabled />
</el-form-item>
</el-row>
<el-row>
<el-form-item label="状态" prop="status">
<span class="row-state soon-state">即将到期</span>
<span class="row-state end-state">利用中</span>
<span class="row-state cancel-state">已过期</span>
</el-form-item>
</el-row>
</el-form>
<el-table
ref="table"
row-key="id"
:data="detailArcData"
style="width: 100%;"
height="calc(100vh - 560px)"
>
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="title" label="档案文件">
<template>
<div class="title-style"><span>文件</span>档号题名</div>
</template>
</el-table-column>
<el-table-column prop="description" label="利用方式" width="340">
<template>
<el-checkbox-group v-model="checkList" class="checkbox-style">
<el-checkbox label="电子查看" disabled />
<el-checkbox label="下载" disabled />
<el-checkbox label="打印" disabled />
<el-checkbox label="实体借阅" disabled />
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column prop="createTime" label="实体借阅状态" align="center" width="110">
<template>
<div>
<span class="row-state soon-state">即将到期</span>
<!-- <span class="row-state end-state">利用中</span>
<span class="row-state cancel-state">已过期</span> -->
</div>
</template>
</el-table-column>
</el-table>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleCloseDialog">关闭</el-button>
</div>
</el-dialog>
<MaterialSelected ref="collectMoveFileRef" />
<MaterialSelected ref="materialSelectedRef" :current-research="currentResearch" @refresh="initData" />
<ArchivesInfo ref="archivesInfo" :selected-category="selectedCategory" :arc-id="arcId" />
</div>
@ -115,6 +48,10 @@ import CRUD, { presenter, crud } from '@crud/crud'
import pagination from '@crud/Pagination'
import MaterialSelected from './materialSelected'
import ArchivesInfo from '@/views/components/archivesDetail/archivesInfo/index'
import { FetchDeleteResearchSource } from '@/api/archiveUtilize/archiveEditing'
import qs from 'qs'
import { exportFile } from '@/utils/index'
import { mapGetters } from 'vuex'
export default {
name: 'Material',
@ -135,42 +72,25 @@ export default {
})
},
props: {
activeIndex: {
type: Number,
default: 0
currentResearch: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
selections: [],
keyWord: null,
options: [
{ value: 'username', label: '利用人' },
{ value: 'account', label: '利用事由' }
],
optionVal: '',
startTime: null,
endTime: null,
lendDetail: false,
form: {
user: '张三',
process: '档案借阅流程-张三-2023-01-01',
startDate: '2016-09-21 08:50:08',
endDate: '2016-10-21 08:50:08',
remark: '利用事由'
},
detailArcData: [],
checkList: ['电子查看', '实体借阅'],
selectedCategory: null,
arcId: null
}
},
watch: {
activeIndex: function(newValue, oldValue) {
console.log('newValue', newValue)
this.crud.query.isType = newValue
this.crud.toQuery()
}
computed: {
...mapGetters([
'baseApi',
'user'
])
},
mounted() {
},
@ -179,26 +99,43 @@ export default {
return row.id
},
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.isType = this.activeIndex
this.crud.query.researchId = this.currentResearch.id
},
resetQuery() {
initData() {
this.crud.refresh()
this.crud.selections = []
this.$refs.materialTable.clearSelection()
},
toAdd() {
this.$refs.collectMoveFileRef.collectMoveFileVisible = true
this.$refs.materialSelectedRef.materialFileVisible = true
},
toDelete(data) {
if (data.length === 0) {
this.$message({ message: '您还未勾选需要操作的条目,请先确认!', offset: 8 })
return false
}
console.log(data)
this.$confirm('此操作将删除当前所选素材' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = data.map(item => item.id)
const params = {
'ids': ids,
'operator': this.user.username,
'researchId': this.currentResearch.id
}
FetchDeleteResearchSource(params).then((res) => {
if (res.code !== 500) {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.initData()
}).catch(err => {
console.log(err)
})
}).catch(() => {
})
},
@ -214,52 +151,28 @@ export default {
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const archivesIds = []
this.selections.forEach(val => {
archivesIds.push(val.id)
})
console.log(data)
const sourceIds = data.map(item => item.id)
console.log(sourceIds)
const params = {
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel,
'archivesIds': archivesIds
'researchId': this.currentResearch.id,
'sourceIds': sourceIds
}
console.log(params)
// exportFile(this.baseApi + '/api/collect/exportDate?' + qs.stringify(params, { indices: false }))
exportFile(this.baseApi + '/api/archivesUtilize/exportResearchSource?' + qs.stringify(params, { indices: false }))
}).catch(() => {
})
},
tableDoubleClick(row) {
// this.lendDetail = true
row.id = '6E3ACDCF8DA4870B712663'
this.arcId = row.id
this.$nextTick(() => {
// if (this.selectedCategory.arrangeType !== 1) {
// if (this.activeIndex === 1) {
// this.$refs.archivesInfo.detailTitle = ''
// this.$refs.archivesInfo.isHasFile = true
// this.$refs.archivesInfo.getDetial(3, row.id)
// } else {
// this.$refs.archivesInfo.detailTitle = ''
// this.$refs.archivesInfo.getDetial(2, row.id)
// }
// } else {
// this.$refs.archivesInfo.isHasFile = true
// this.$refs.archivesInfo.detailTitle = ''
// this.$refs.archivesInfo.getDetial(3, row.id)
// }
this.$refs.archivesInfo.isHasFile = false
this.$refs.archivesInfo.detailTitle = '案卷详情'
this.$refs.archivesInfo.getDetial(2, '6E3ACDCF8DA4870B712663')
this.$refs.archivesInfo.isFourTest = true
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
})
},
handleCloseDialog(done) {
// this.lendDetail = false
//
// done()
// this.selectedCategory =
// this.arcId = row.archivesId
// this.$nextTick(() => {
// this.$refs.archivesInfo.isHasFile = false
// this.$refs.archivesInfo.detailTitle = ''
// this.$refs.archivesInfo.getDetial(2, this.arcId)
// this.$refs.archivesInfo.isFourTest = true
// this.$refs.archivesInfo.archivesInfoVisible = true
// this.$refs.archivesInfo.archivesTabIndex = 0
// })
}
}
}

175
src/views/archiveUtilize/archiveEditing/module/materialSelected.vue

@ -1,18 +1,18 @@
<template>
<!-- 素材选择 -->
<el-dialog class="collectMoveFile-dialog" title="素材选择" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="collectMoveFileVisible" :before-close="handleCloseDialog" @open="open">
<el-dialog class="collectMoveFile-dialog" title="素材选择" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="materialFileVisible" :before-close="handleCloseDialog" @open="open">
<div class="collectMove-main">
<div class="collectMove-left">
<CategoryTree ref="categoryTree" @nodeClick="handleNodeClick" />
</div>
<div class="collectMove-right">
<div class="collectMove-header">
<div v-if="currentCategory && currentCategory.arrangeType===3" class="detail-tab tab-content">
<!-- <div v-if="currentCategory && currentCategory.arrangeType===3" class="detail-tab tab-content">
<ul class="tab-nav">
<li :class="{'active-tab-nav': tabIndex == 0}" @click="changeActiveTab(0)">项目列表</li>
<li :class="{'active-tab-nav': tabIndex == 1}" @click="changeActiveTab(1)">案卷列表</li>
</ul>
</div>
</div> -->
<div class="head-search">
<el-input v-model="query.search" clearable size="small" placeholder="输入题名或档号搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="getViewTableList" @clear="getViewTableList" />
<el-button class="filter-item filter-search" style="margin: 0 10px;" size="mini" type="success" icon="el-icon-search" @click="getViewTableList">搜索</el-button>
@ -66,19 +66,29 @@
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="handleCloseDialog">取消</el-button>
<!-- collectLevel===2 -->
<el-button type="primary" :disabled="currentCategory&&currentCategory.arrangeType===3&&moveSelections.length===0" @click.native="handleComfireCollectMoveFile">确定</el-button>
<el-button type="primary" :disabled="materialSelections.length === 0" @click.native="handleComfireMaterial">确定</el-button>
</div>
</el-dialog>
</template>
<script>
import CategoryTree from '@/views/components/categoryTree'
import { FetchInitCategoryViewTable, FetchInitCategoryView } from '@/api/collect/collect'
import { FetchInitCategoryViewTable } from '@/api/collect/collect'
import { FetchInitContorlView } from '@/api/archivesManage/library'
import { FetchAddResearchSource } from '@/api/archiveUtilize/archiveEditing'
import { mapGetters } from 'vuex'
export default {
name: 'CollectMoveFile',
name: 'MaterialSelected',
components: { CategoryTree },
props: {},
props: {
currentResearch: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
query: {
@ -86,23 +96,28 @@ export default {
},
currentCategory: null,
currentLevel: null,
collectMoveFileVisible: false,
materialFileVisible: false,
toCategoryLevel: null,
loading: false,
arrySort: [],
tableData: [],
tableDisplayFields: [],
moveSelections: [],
materialSelections: [],
page: {
page: 1,
size: 10,
total: 0
},
moveFile: true,
isReserve: false,
tabIndex: 0
isReserve: false
// tabIndex: 0
}
},
computed: {
...mapGetters([
'user'
])
},
mounted() {
},
methods: {
@ -137,11 +152,12 @@ export default {
} else if (this.currentCategory.arrangeType === 2) {
this.currentLevel = 2
} else {
if (this.tabIndex === 1) {
this.currentLevel = 2
} else {
this.currentLevel = 1
}
this.currentLevel = 2
// if (this.tabIndex === 1) {
// this.currentLevel = 2
// } else {
// this.currentLevel = 1
// }
}
FetchInitCategoryViewTable({ categoryId: this.currentCategory.id, categoryLevel: this.currentLevel }).then((res) => {
if (res) {
@ -171,7 +187,7 @@ export default {
'page': this.page.page - 1,
'size': this.page.size
}
FetchInitCategoryView(params).then((res) => {
FetchInitContorlView(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.tableData = res.list.content
@ -180,99 +196,44 @@ export default {
this.loading = false
})
},
changeActiveTab(data) {
this.tabIndex = data
this.getViewTable()
this.moveSelections = []
},
// changeActiveTab(data) {
// this.tabIndex = data
// this.getViewTable()
// this.materialSelections = []
// },
clickRowHandler(row) {
this.moveSelections = []
this.materialSelections = []
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
// this.moveSelections.push(row)
},
selectionChangeHandler(selection, row) {
this.moveSelections = selection
this.materialSelections = selection
},
handleComfireCollectMoveFile() {
// if (this.moveSelections.length > 1) {
// this.$message({ message: '', offset: 8 })
// return false
// }
// if (this.currentCategory.arrangeType === 1) {
// this.toCategoryLevel = 3
// } else if (this.currentCategory.arrangeType === 2) {
// this.toCategoryLevel = 2
// } else {
// if (this.collectLevel === 3) {
// if (this.moveSelections.length === 0) {
// this.toCategoryLevel = 3
// } else {
// if (this.tabIndex === 1) {
// this.toCategoryLevel = 2
// } else {
// this.toCategoryLevel = 3
// }
// }
// } else {
// if (this.tabIndex === 1) {
// this.toCategoryLevel = 2
// } else {
// this.toCategoryLevel = 1
// }
// }
// }
// if (this.collectLevel === 2) {
// if (this.toCategoryLevel === 3) {
// this.$message({ message: '', offset: 8 })
// return false
// }
// }
// if (this.selectedCategory.id === this.currentCategory.id) {
// this.$message({ message: '!', offset: 8 })
// return false
// }
// const archivesIds = this.selections.map(item => item.id)
// // const toArchivesIds = this.moveSelections.map(item => item.id)
// let toArchivesId
// if (this.moveSelections.length === 0) {
// toArchivesId = null
// } else {
// if (this.collectLevel === 3) {
// console.log('this.tabIndex66', this.tabIndex)
// if (this.tabIndex === 1) {
// toArchivesId = this.moveSelections[0].id
// } else {
// if (this.selectedCategory.arrangeType === 1) {
// toArchivesId = this.moveSelections[0].id
// } else {
// toArchivesId = null
// }
// }
// } else {
// toArchivesId = this.moveSelections[0].id
// }
// }
// const params = {
// 'reserve': this.isReserve, // true false
// 'categoryId': this.selectedCategory.id, // id
// 'categoryLevel': this.collectLevel, //
// 'archivesIds': archivesIds, // id
// 'toCategoryId': this.currentCategory.id, // id
// 'toCategoryLevel': this.toCategoryLevel, //
// 'toArchivesId': toArchivesId // id ()
// }
// console.log(params)
// FetchMove(params).then((res) => {
// console.log(res)
// if (res.code !== 500) {
// this.$message({ message: '', type:'success', offset: 8 })
// this.$emit('close-dialog')
// } else {
// this.$message({ message: '', type:'error', offset: 8 })
// }
// this.handleCloseDialog()
// })
handleComfireMaterial() {
const arrDetail = this.materialSelections.map(item => {
const json = {}
json.archiveNo = item.archive_no
json.archivesId = item.id
json.maintitle = item.maintitle
return json
})
const params = {
'details': arrDetail,
'operator': this.user.username,
'researchId': this.currentResearch.id
}
FetchAddResearchSource(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.$message({ message: res, type: 'success', offset: 8 })
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.handleCloseDialog()
this.$emit('refresh')
}).catch(err => {
console.log(err)
})
},
handleSizeChange(size) {
this.page.size = size
@ -289,8 +250,8 @@ export default {
this.tableDisplayFields = []
this.tableData = []
this.$refs.table.clearSelection()
this.moveSelections = []
this.collectMoveFileVisible = false
this.materialSelections = []
this.materialFileVisible = false
this.isReserve = false
//
// done()

48
src/views/archiveUtilize/archiveEditing/module/onlineAdd.vue

@ -27,27 +27,38 @@
<script>
import editor from '@/components/quillEditor/index'
import { FetchEditResearchOnline } from '@/api/archiveUtilize/archiveEditing'
import { mapGetters } from 'vuex'
export default {
name: 'OnlineAdd',
components: { editor },
props: {
activeIndex: {
type: Number,
default: 0
currentResearch: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
form: {
title: null
id: null,
title: null,
status: 0
},
isAddOrEdit: 1,
onlineTitle: '',
onlineAddVisible: false,
editorRef: 'test',
editorContent: ''
}
},
watch: {
computed: {
...mapGetters([
'baseApi',
'user'
])
},
mounted() {
},
@ -55,7 +66,27 @@ export default {
submit() {
this.$refs['form'].validate((valid) => {
if (valid) {
console.log('success')
const params = {
'context': this.editorContent,
'id': this.isAddOrEdit === 1 ? null : this.form.id,
'operator': this.user.username,
'researchId': this.currentResearch.id,
'status': this.form.status, // 0 稿 1
'title': this.form.title
}
console.log(params)
FetchEditResearchOnline(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.$message({ message: this.isAddOrEdit === 1 ? '新增成功' : '编辑成功', type: 'success', offset: 8 })
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.handleCloseDialog()
this.$emit('refresh')
}).catch(err => {
console.log(err)
})
} else {
return false
}
@ -63,8 +94,9 @@ export default {
},
handleCloseDialog(done) {
this.onlineAddVisible = false
//
// done()
this.$refs['form'].clearValidate()
this.$refs['form'].resetFields()
this.editorContent = ''
}
}
}

280
src/views/archiveUtilize/archiveEditing/module/onlineEditing.vue

@ -2,11 +2,11 @@
<div>
<div class="head-container">
<div>
<el-button size="mini" @click="toAdd">
<el-button size="mini" @click="toAdd(1,null)">
<i class="iconfont icon-xinzeng" />
新增
</el-button>
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="toEdit(crud.selections[0])">
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="toAdd(2,crud.selections[0])">
<i class="iconfont icon-bianji" />
编辑
</el-button>
@ -20,15 +20,15 @@
</el-button>
</div>
<div class="online-right-handle">
<el-button size="mini" @click="handleUpload"><i class="iconfont icon-shangchuan2" />附件上传</el-button>
<el-button size="mini" :disabled="crud.selections.length === 0" @click="toPublish(crud.selections)"><i class="iconfont icon-fabu" />发布</el-button>
<el-button size="mini"><i class="iconfont icon-huifu" />取消发布</el-button>
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="uploadVisible=true"><i class="iconfont icon-shangchuan2" />附件上传</el-button>
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="toPublish(1,crud.selections[0])"><i class="iconfont icon-fabu" />发布</el-button>
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="toPublish(0,crud.selections[0])"><i class="iconfont icon-huifu" />取消发布</el-button>
</div>
</div>
<el-table
ref="table"
ref="onlineTable"
:data="crud.data"
row-key="id"
:row-key="rowKey"
style="width: 100%;"
height="calc(100vh - 485px)"
@cell-dblclick="tableDoubleClick"
@ -36,14 +36,18 @@
>
<el-table-column type="selection" :reserve-selection="true" width="55" align="center" />
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column prop="username" label="文档名称" align="center" />
<el-table-column prop="browser" label="创建人" align="center" />
<el-table-column prop="createTime" label="加入时间" width="200">
<el-table-column prop="title" label="文档名称" align="center" />
<el-table-column prop="create_by" label="创建人" align="center" />
<el-table-column prop="create_time" label="加入时间" width="200">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" align="center">
<template slot-scope="scope">
<div>{{ scope.row.status === 0 ? '草稿' : '发布' }}</div>
</template>
</el-table-column>
<el-table-column prop="username" label="状态" align="center" />
</el-table>
<pagination v-if="crud.data.length !== 0" />
@ -51,13 +55,13 @@
<div class="setting-dialog">
<div class="upload-container">
<i v-if="fileList.length === 0" class="iconfont icon-tianjiawenjian upload-icon" />
<div v-for="item in fileList" :key="item.name" class="file-list">
<div v-for="(item,index) in fileList" :key="index" class="file-list">
<i class="iconfont icon-xiaowenjian" />
{{ item.name }}
<i class="el-icon-close" @click="deleteFile(item)" />
</div>
<div class="upload-input">
<input ref="fileInput" :key="key" type="file" :accept="'.zip'" @change="handleFileChange">
<input ref="fileInput" type="file" :accept="'.zip'" @change="handleFileChange">
<div class="upload-zip"><i class="iconfont icon-shangchuan2" />点击上传</div>
</div>
<div class="el-upload__tip">上传限制文件类型zip</div>
@ -78,7 +82,10 @@
<li :class="{'active-tab-nav': onlineTabIndex == 0}" @click="changeOnlineTab(0)">文档正文</li>
<li :class="{'active-tab-nav': onlineTabIndex == 1}" @click="changeOnlineTab(1)">文档附件</li>
</ul>
<div v-if="onlineTabIndex===0">文档正文</div>
<div v-if="onlineTabIndex===0" style="width: 100%; height: 500px; overflow: hidden; overflow-y: scroll;">
<!-- <p>文档名称{{ onlineContent && onlineContent.title }}</p> -->
<div class="context-wrapper" v-html="onlineContent && onlineContent.context" />
</div>
<el-table
v-if="onlineTabIndex===1"
ref="table"
@ -88,29 +95,43 @@
height="calc(100vh - 560px)"
>
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="title" label="附件名称">
<template>
<div class="title-style"><span>文件</span>档号题名</div>
<el-table-column prop="fileName" label="附件名称" />
<el-table-column prop="fileType" label="格式" align="center" min-width="60">
<template slot-scope="scope">
<div v-if="scope.row.fileType === 'zip' || scope.row.file_type === 'rar'">
<i class="fileIcon icon-zip" />
</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column prop="fileSize" label="大小">
<template slot-scope="scope">
{{ getFileSize(scope.row.fileSize) }}
</template>
</el-table-column>
<el-table-column prop="create_by" label="操作者" />
<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 prop="title" label="格式" />
<el-table-column prop="title" label="大小" />
<el-table-column prop="title" label="操作者" />
<el-table-column prop="title" label="加入时间" />
</el-table>
</div>
</div>
</el-dialog>
<OnlineAdd ref="onlineAdd" />
<OnlineAdd ref="onlineAdd" :current-research="currentResearch" @refresh="initData" />
</div>
</template>
<script>
import CRUD, { presenter, crud } from '@crud/crud'
import pagination from '@crud/Pagination'
import OnlineAdd from './onlineAdd'
import { upload } from '@/utils/upload'
import { FetchInitResearchOnlineDetails, FetchDeleteResearchOnline, FetchChangeResearchOnlineState, FetchInitResearchOnlineFileList } from '@/api/archiveUtilize/archiveEditing'
import qs from 'qs'
import { exportFile } from '@/utils/index'
import { onlineUpload } from '@/utils/upload'
import { mapGetters } from 'vuex'
export default {
@ -132,70 +153,81 @@ export default {
})
},
props: {
activeIndex: {
type: Number,
default: 0
currentResearch: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
selections: [],
keyWord: null,
options: [
{ value: 'username', label: '利用人' },
{ value: 'account', label: '利用事由' }
],
optionVal: '',
startTime: null,
endTime: null,
lendDetail: false,
form: {
user: '张三',
process: '档案借阅流程-张三-2023-01-01',
startDate: '2016-09-21 08:50:08',
endDate: '2016-10-21 08:50:08',
remark: '利用事由'
},
detailArcData: [],
checkList: ['电子查看', '实体借阅'],
onlineEditDetail: false,
onlineTabIndex: 0,
onlineContent: null,
uploadVisible: false,
fileList: []
fileList: [],
detailArcData: [],
currentResearchOnline: null
}
},
computed: {
...mapGetters([
'baseApi'
'baseApi',
'user'
])
},
watch: {
activeIndex: function(newValue, oldValue) {
console.log('newValue', newValue)
this.crud.query.isType = newValue
this.crud.toQuery()
}
},
mounted() {
},
methods: {
initData() {
this.crud.refresh()
this.crud.selections = []
this.$refs.onlineTable.clearSelection()
},
rowKey(row) {
return row.id
},
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.isType = this.activeIndex
this.crud.query.researchId = this.currentResearch.id
},
getFileSize(fileSize) {
const fileSizeInKB = (fileSize / 1024).toFixed(2) + 'kB'
const fileSizeInB = fileSize + 'B'
return (fileSize / 1024) <= 0.01 ? fileSizeInB : fileSizeInKB
},
changeOnlineTab(data) {
this.onlineTabIndex = data
if (this.onlineTabIndex === 1) {
const paramsFile = {
'researchOnlineId': this.currentResearchOnline.id,
'page': 0,
'size': 10
}
FetchInitResearchOnlineFileList(paramsFile).then((res) => {
console.log(res)
this.detailArcData = res.content
}).catch(err => {
console.log(err)
})
}
},
toAdd() {
this.$refs.onlineAdd.onlineTitle = '新增在线编研'
this.$refs.onlineAdd.onlineAddVisible = true
},
toEdit() {
this.$refs.onlineAdd.onlineTitle = '编辑在线编研'
toAdd(type, data) {
if (type === 1) {
this.$refs.onlineAdd.onlineTitle = '新增在线编研'
} else {
this.$refs.onlineAdd.onlineTitle = '编辑在线编研'
console.log(data)
this.$refs.onlineAdd.form = {
id: data.id,
title: data.title,
status: data.status
}
this.$refs.onlineAdd.editorContent = data.context
}
this.$refs.onlineAdd.isAddOrEdit = type
this.$refs.onlineAdd.onlineAddVisible = true
},
tableDoubleClick() {
this.onlineEditDetail = true
},
toDelete(data) {
if (data.length === 0) {
this.$message({ message: '您还未勾选需要操作的条目,请先确认!', offset: 8 })
@ -207,16 +239,23 @@ export default {
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const archivesIds = []
this.selections.forEach(val => {
archivesIds.push(val.id)
})
const ids = data.map(item => item.id)
const params = {
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel,
'archivesIds': archivesIds
'ids': ids,
'operator': this.user.username,
'researchId': this.currentResearch.id
}
console.log(params)
FetchDeleteResearchOnline(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
} else {
this.$message({ message: '删除失败', type: 'error', offset: 8 })
}
this.initData()
}).catch(err => {
console.log(err)
})
}).catch(() => {
})
},
@ -232,53 +271,63 @@ export default {
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const archivesIds = []
this.selections.forEach(val => {
archivesIds.push(val.id)
})
const onlineIds = data.map(item => item.id)
const params = {
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel,
'archivesIds': archivesIds
'researchId': this.currentResearch.id,
'onlineIds': onlineIds
}
console.log(params)
// exportFile(this.baseApi + '/api/collect/exportDate?' + qs.stringify(params, { indices: false }))
exportFile(this.baseApi + '/api/archivesUtilize/exportResearchOnline?' + qs.stringify(params, { indices: false }))
}).catch(() => {
})
},
toPublish(data) {
tableDoubleClick(row) {
this.onlineTabIndex = 0
this.currentResearchOnline = row
this.onlineEditDetail = true
const params = {
'researchOnlineId': row.id
}
FetchInitResearchOnlineDetails(params).then((res) => {
console.log(res)
this.onlineContent = res
}).catch(err => {
console.log(err)
})
},
toPublish(type, data) {
if (data.length === 0) {
this.$message({ message: '您还未勾选需要操作的条目,请先确认!', offset: 8 })
return false
}
this.$confirm('此操作将发布当前所选文档' + '<span>你是否还要继续?</span>', '提示', {
this.$confirm('此操作将' + (type === 0 ? '取消发布' : '发布') + '当前所选文档' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const archivesIds = []
this.selections.forEach(val => {
archivesIds.push(val.id)
})
const params = {
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel,
'archivesIds': archivesIds
'id': data.id,
'status': type === 0 ? 0 : 1,
'operator': this.user.username,
'researchId': this.currentResearch.id
}
console.log(params)
FetchChangeResearchOnlineState(params).then((res) => {
console.log(res)
if (res.code !== 500) {
this.$message({ message: '操作成功', type: 'success', offset: 8 })
} else {
this.$message({ message: '操作失败', type: 'error', offset: 8 })
}
this.initData()
}).catch(err => {
console.log(err)
})
}).catch(() => {
})
},
handleUpload() {
if (this.crud.selections.length !== 1) {
this.$message({ message: '只可勾选唯一目标条目,请先确认!', offset: 8 })
return false
}
this.uploadVisible = true
},
handleFileChange(e) {
const files = e.target.files
console.log(files)
this.file = files[0]
this.key++
const maxMessage = '上传文件大小不能超过 10MB,可使用大文件上传!'
@ -296,33 +345,34 @@ export default {
return false
}
}
for (let i = 0; i < files.length; i++) {
if (this.uploadType === 2) {
this.fileList = []
this.fileList.push(files[i])
} else {
this.fileList.push(files[i])
}
}
this.fileList = []
this.fileList.push(this.file)
},
handleUploadConfirm() {
if (this.fileList.length === 0) {
this.$message({ message: '请先选择相关文件!', offset: 8 })
return false
}
const params = {
'researchId': this.currentResearch.id,
'researchOnlineId': this.crud.selections[0].id
}
console.log(params)
console.log(this.fileList)
//
upload(this.baseApi + '/api/collect/catalogUpload',
this.fileList[0]
onlineUpload(this.baseApi + '/api/archivesUtilize/uploadFile',
this.fileList[0], params
).then(res => {
if (res.data.code === 200) {
// 200
// this.$message.success('' + res.data.data + '')
this.$message({ message: '操作成功', type: 'success', offset: 8 })
// this.$emit('close-dialog')
this.uploadVisible = false
} else {
this.$message({ message: '操作失败', type: 'error', offset: 8 })
}
this.fileList = []
this.uploadVisible = false
this.initData()
})
},
handleCloseDialog(done) {
@ -349,4 +399,10 @@ export default {
::v-deep .el-pagination{
margin: 24px 0 10px 0 !important
}
.context-wrapper{
::v-deep img{
width: 100%;
}
}
</style>

4
src/views/archiveUtilize/archiveSearch/module/resultList.vue

@ -79,7 +79,7 @@
<div class="result-right">
<div class="right-header">
<div class="head-search">
<el-select
<!-- <el-select
v-model="status"
multiple
collapse-tags
@ -91,7 +91,7 @@
:label="item.label"
:value="item.value"
/>
</el-select>
</el-select> -->
<div class="search-input">
<el-input v-model="keyword" placeholder="请输入检索关键字" class="input-with-select">
<el-button slot="append" icon="el-icon-search">搜索</el-button>

54
src/views/components/echarts/lendAcross.vue

@ -82,7 +82,6 @@ export default {
type: 'shadow'
}
},
// legend: {}, //
grid: { //
left: '10%',
right: '16%',
@ -101,67 +100,28 @@ export default {
axisLabel: {//
show: true,
textStyle: {
color: '#fff',
color: '#A6ADB6',
fontSize: '14'
}
},
axisLine: {// 线
show: false
lineStyle: {
color: '#C9CDD4'
}
},
axisTick: {
show: false
},
data: ['异常档案', '逾期档案', '待借档案', '已借档案', '在库档案']
data: ['标签', '装盒', '入库', '借阅', '开放', '实体', '审批']
},
series: [
{
name: '数量',
type: 'bar',
barWidth: 15, //
barGap: 25,
showBackground: true,
backgroundStyle: {
color: '#02255F',
barBorderRadius: [0, 10, 10, 0] //
},
type: 'bar',
itemStyle: {
normal: {
label: {
show: true, //
distance: 20, //
position: 'right', // topright
textStyle: { //
color: '#fff',
fontSize: 14
}
},
//
barBorderRadius: [0, 10, 10, 0],
//
// color: function(params) {
// const colorList = ['#0FBED9', '#F65163', '#FF8447', '#76AF50', '#8378E8']
// return colorList[params.dataIndex]
// }
color: function(params) {
var colorList = [
['#FF77AA', '#E6236D'],
['#FF7A7D', '#FF3438'],
['#FBCE9B', '#FF801E'],
['#84DFC0', '#0D9D81'],
['#5FA2E2', '#1C54EE']
]
var colorItem = colorList[params.dataIndex]
return new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
offset: 0,
color: colorItem[0]
},
{
offset: 1,
color: colorItem[1]
}
], false)
}
}
color: '#0348F3'
},
data: this.elendData //
}

242
src/views/dashboard/PanelGroup.vue

@ -1,70 +1,54 @@
<template>
<el-row :gutter="20" class="panel-group" type="flex" justify="space-between">
<el-col class="card-panel-col">
<div class="card-panel danganzongliang" @click="handleSetLineChartData('newVisitis')">
<div class="card-panel danganzongliang">
<div class="card-panel-icon-wrapper icon-people">
<svg-icon icon-class="danganzongliang" class-name="card-panel-icon" />
<img src="@/assets/images/home-icon1.png" alt="">
</div>
<div class="card-panel-description">
档案盒
<div class="card-panel-text">
<count-to :start-val="0" :end-val="archivesNum" :duration="3200" class="card-panel-num" />
<count-to :start-val="0" :end-val="topObjectNum && topObjectNum.caseNum" :duration="3200" class="card-panel-num" />
</div>
档案总量
</div>
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel danganhezongliang" @click="handleSetLineChartData('messages')">
<div class="card-panel danganhezongliang">
<div class="card-panel-icon-wrapper icon-message">
<svg-icon icon-class="danganhezongliang" class-name="card-panel-icon" />
<img src="@/assets/images/home-icon2.png" alt="">
</div>
<div class="card-panel-description">
案卷条目
<div class="card-panel-text">
<count-to :start-val="0" :end-val="caseNum" :duration="3200" class="card-panel-num" />
<count-to :start-val="0" :end-val="topObjectNum && topObjectNum.archivesNum" :duration="3200" class="card-panel-num" />
</div>
档案盒总量
</div>
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel quanbushebei" @click="handleSetLineChartData('purchases')">
<div class="card-panel quanbushebei">
<div class="card-panel-icon-wrapper icon-money">
<svg-icon icon-class="quanbushebei" class-name="card-panel-icon" />
<img src="@/assets/images/home-icon3.png" alt="">
</div>
<div class="card-panel-description">
文件条目
<div class="card-panel-text">
<count-to v-if="getDeviceFlag" :start-val="0" :end-val="totalDeviceNum" :duration="3200" class="card-panel-num" />
<div v-if="!getDeviceFlag" class="card-panel-text"><span class="card-panel-num">获取中...</span></div>
<count-to :start-val="0" :end-val="topObjectNum && topObjectNum.documentNum" :duration="3200" class="card-panel-num" />
</div>
全部设备
</div>
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel zaixianshebei" @click="handleSetLineChartData('shoppings')">
<div class="card-panel zaixianshebei">
<div class="card-panel-icon-wrapper icon-shopping">
<svg-icon icon-class="zaixianshebei" class-name="card-panel-icon" />
<img src="@/assets/images/home-icon4.png" alt="">
</div>
<div class="card-panel-description">
电子文件
<div class="card-panel-text">
<count-to v-if="getDeviceFlag" :start-val="0" :end-val="onlineDeviceNum" :duration="3200" class="card-panel-num" />
<div v-if="!getDeviceFlag" class="card-panel-text"><span class="card-panel-num">获取中...</span></div>
<count-to :start-val="0" :end-val="topObjectNum && topObjectNum.fileNum" :duration="3200" class="card-panel-num" />
</div>
在线设备
</div>
</div>
</el-col>
<el-col class="card-panel-col">
<div class="card-panel lixianshebei" @click="handleSetLineChartData('shoppings')">
<div class="card-panel-icon-wrapper icon-shopping">
<svg-icon icon-class="lixianshebei" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
<count-to v-if="getDeviceFlag" :start-val="0" :end-val="offlineDeviceNum" :duration="3200" class="card-panel-num" />
<div v-if="!getDeviceFlag" class="card-panel-text"><span class="card-panel-num">获取中...</span></div>
</div>
离线设备
</div>
</div>
</el-col>
@ -73,58 +57,31 @@
<script>
import CountTo from 'vue-count-to'
import { FetchGetArchivesNum, FetchGetCaseNum } from '@/api/archivesManage/statistics'
import { getDeviceList } from '@/api/storeManage/deviceManage/device'
import { getOnlineDevice } from '@/api/home/device'
export default {
components: {
CountTo
},
props: {
topObjectNum: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
archivesNum: 0,
caseNum: 0,
getDeviceFlag: false,
totalDeviceNum: 0,
onlineDeviceNum: 0,
offlineDeviceNum: 0
anjuanNum: 0,
fileNum: 0,
documentNum: 0,
archivesNum: 0
}
},
mounted() {
this.handleArchivesNum()
this.handleCaseNum()
this.handleTotalDeviceNum()
},
methods: {
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)
},
//
handleArchivesNum() {
FetchGetArchivesNum().then(data => {
this.archivesNum = data
})
},
//
handleCaseNum() {
FetchGetCaseNum().then(data => {
this.caseNum = data
})
},
// ,线,线
handleTotalDeviceNum() {
Promise.all([getDeviceList({ page: 0, size: 10 }), getOnlineDevice()])
.then((result) => {
this.getDeviceFlag = true
this.totalDeviceNum = result[0].totalElements
this.onlineDeviceNum = result[1]
this.offlineDeviceNum = this.totalDeviceNum - this.onlineDeviceNum
})
.catch((reason) => {
console.log('promise reject failed reason', reason)
})
}
}
}
</script>
@ -136,152 +93,41 @@ export default {
}
.card-panel {
height: 100px;
// height: 108px;
// cursor: pointer;
font-size: 15px;
display: flex;
justify-content: center;
align-items: center;
height: 148px;
font-size: 14px;
position: relative;
overflow: hidden;
opacity: 0.86;
// box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
// border-color: rgba(0, 0, 0, .05);
&.danganzongliang {
color: #21aae1;
background: linear-gradient(
180deg,
rgba(51, 159, 210, 0.5) 0%,
rgba(56, 158, 225, 0) 100%
);
border-top: 2px #21aae1 solid;
& span.card-panel-num {
background: linear-gradient(180deg, #ffffff 0%, #21aae1 100%);
}
}
&.danganhezongliang {
color: #793cba;
background: linear-gradient(
180deg,
rgba(121, 60, 186, 0.5) 0%,
rgba(121, 60, 186, 0) 100%
);
border-top: 2px #793cba solid;
& span.card-panel-num {
background: linear-gradient(180deg, #ffffff 0%, #793cba 100%);
}
}
&.quanbushebei {
color: #008e81;
background: linear-gradient(
180deg,
rgba(0, 142, 129, 0.5) 0%,
rgba(0, 142, 129, 0) 100%
);
border-top: 2px #008e81 solid;
background-color: #fff;
border-radius: 5px;
.card-panel-description{
color: #545B65;
& span.card-panel-num {
background: linear-gradient(180deg, #ffffff 0%, #008e81 100%);
font-size: 36px;
background-color: #0C0E1E;
}
}
&.zaixianshebei {
color: #c4c859;
background: linear-gradient(
180deg,
rgba(196, 200, 89, 0.5) 0%,
rgba(196, 200, 89, 0) 100%
);
border-top: 2px #c4c859 solid;
& span.card-panel-num {
background: linear-gradient(180deg, #ffffff 0%, #bfc458 100%);
}
}
&.lixianshebei {
color: #f65164;
background: linear-gradient(
180deg,
rgba(246, 81, 100, 0.5) 0%,
rgba(247, 80, 100, 0) 100%
);
border-top: 2px #f65164 solid;
& span.card-panel-num {
background: linear-gradient(180deg, #ffffff 0%, #f55164 100%);
}
}
// &:hover {
// .card-panel-icon-wrapper {
// color: #fff;
// }
// .icon-people {
// background: #40c9c6;
// }
// .icon-message {
// background: #36a3f7;
// }
// .icon-money {
// background: #f4516c;
// }
// .icon-shopping {
// background: #34bfa3
// }
// }
// .icon-danganzongliang {
// color: #21AAE1;
// }
// .icon-danganhezongliang {
// color: #793CBA;
// }
// .icon-quanbushebei {
// color: #008E81;
// }
// .icon-zaixianshebei {
// color: #C4C859
// }
// .icon-lixianshebei {
// color: #F65164
// }
.card-panel-icon-wrapper {
float: left;
margin: 0 10px 0 12px;
padding: 20px;
width: 82px;
margin: 0 30px 0 50px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.card-panel-icon {
float: left;
font-size: 60px;
}
.card-panel-description {
// float: right;
// font-weight: bold;
margin: 19px;
margin-left: 0px;
flex: 1;
.card-panel-text {
line-height: 30px;
color: rgba(0, 0, 0, 0.45);
font-size: 28px;
margin-bottom: 11px;
color: #0C0E1E;
margin-top: 10px;
& span {
// background: linear-gradient(180deg, #FFFFFF 0%, #21AAE1 100%);
-webkit-background-clip: text;
color: transparent;
font-weight: bold;
}
}
// .card-panel-num {
// font-size: 20px;
// }
}
}
}

316
src/views/home copy.vue

@ -0,0 +1,316 @@
<template>
<div class="dashboard-container">
<div class="dashboard-editor-container">
<panel-group />
<el-row :gutter="20" style="margin-bottom:20px;height: 152px;">
<el-col :xs="24" :sm="24" :lg="16">
<div class="container-left search-area">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!-- <SearchAcrives /> -->
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<div class="container-left" style="height: 100%;margin: 0">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class=" table-title">
<p class="title-arrow">
<svg-icon icon-class="a-3Dkufang" class-name="warehouse-svg" />3D库房
</p>
</h3>
<div class="warehouse-tab">
<ul class="warehouse-nav">
<li @click="changeActiveTab(0)">
<span />
<p>全景图</p>
</li>
<li @click="changeActiveTab(1)">
<span />
<p>档案库</p>
</li>
<li @click="changeActiveTab(2)">
<span />
<p>整理室</p>
</li>
<li @click="changeActiveTab(3)">
<span />
<p>阅览室</p>
</li>
</ul>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-bottom:20px;height: calc(50vh - 251px);">
<el-col :xs="24" :sm="24" :lg="8">
<!-- 待办事项 -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">
<svg-icon icon-class="tongzhigonggao" class-name="warehouse-svg" />待办事项
</p>
</h3>
<div style="height: calc(100% - 40px);overflow-y: auto;overflow-x: hidden;">
<ul v-if="waitBorrowerData.length !== 0" class="todo-list">
<li v-for="(item,index) in waitBorrowerData" :key="index">
<el-tooltip class="item" effect="dark" :content="item.title" :enterable="false" placement="top">
<p>{{ item.title }}</p>
</el-tooltip>
<span>{{ item.update_time | parseTime }}</span>
</li>
</ul>
<div v-else class="empty-main" style="height: 100%;">
<svg-icon icon-class="empty" class-name="empty-img" />
<p>暂无数据</p>
</div>
</div>
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 门禁记录 -->
<security-door :height="'calc(100% - 40px)'" />
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 报警记录 -->
<warehouse-warning :height="'calc(100% - 40px)'" />
</el-col>
</el-row>
<el-row :gutter="20" style="height: calc(50vh - 251px);">
<el-col :xs="24" :sm="24" :lg="8">
<!-- 档案借阅 -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案借阅</p>
</h3>
<div class="chart-wrapper">
<lend-across :lend-data="lendData" />
</div>
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 档案类别 -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案类别</p>
</h3>
<div class="chart-wrapper">
<cate-pie :cate-data="cateData" />
</div>
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 档案类型 -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案类型</p>
</h3>
<div v-if="typeData.length !== 0" class="chart-wrapper">
<type-pie :type-data="typeData" />
</div>
<div v-else class="empty-main">
<svg-icon icon-class="empty" class-name="empty-img" />
<p>暂无数据</p>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import PanelGroup from './dashboard/PanelGroup'
import lendAcross from '@/views/components/echarts/lendAcross.vue'
import catePie from '@/views/components/echarts/catePie.vue'
import typePie from '@/views/components/echarts/typePie.vue'
import WarehouseWarning from '@/views/components/WarehouseWarning'
import SecurityDoor from '@/views/components/SecurityDoor'
// import SearchAcrives from '@/views/archivesManage/archivesSearch/index'
import { statisticsCrud } from '@/views/system/archiveStatistics/mixins/statistics'
import { FetchWaitBorrower } from '@/api/archivesManage/lendManage'
export default {
name: 'Dashboard',
components: {
WarehouseWarning,
SecurityDoor,
PanelGroup,
lendAcross,
catePie,
typePie
// SearchAcrives
},
mixins: [statisticsCrud],
data() {
return {
waitBorrowerData: []
}
},
created() {
this.getWaitBorrower()
},
methods: {
getWaitBorrower() {
FetchWaitBorrower().then(data => {
if (data) {
this.waitBorrowerData = data
}
})
},
changeActiveTab(id) {
this.$router.push({
name: 'warehouse3D',
params: {
roomId: id
}
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.dashboard-editor-container {
padding: 20px;
position: relative;
.chart-wrapper {
height: calc(100% - 40px);
}
}
@media (max-width: 1024px) {
.chart-wrapper {
padding: 8px;
}
}
.warehouse-tab {
.warehouse-nav {
display: flex;
justify-content: space-around;
position: absolute;
bottom: 15px;
z-index: 11;
width: 100%;
padding: 0;
li {
display: flex;
flex-direction: column;
align-items: center;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
height: 90px;
text-align: right;
font-size: 14px;
position: relative;
&:hover {
cursor: pointer;
}
span {
width: 72px;
height: 52px;
margin-bottom: 7px;
}
p {
text-align: left;
}
&:first-child span {
background: url("~@/assets/images/tab_fullview_logo.png") no-repeat;
}
&:nth-child(2) span {
background: url("~@/assets/images/tab_archives_logo.png") no-repeat;
}
&:nth-child(3) span {
background: url("~@/assets/images/tab_collate_logo.png") no-repeat;
}
&:nth-child(4) span {
background: url("~@/assets/images/tab_read_logo.png") no-repeat;
}
}
}
}
.el-col {
height: 100%;
}
.container-left,
.container-right,
.container-wrap,
.el-card,
.header-container-wrap {
min-height: 100%;
}
.warehose-el-table ::v-deep .el-table__header-wrapper {
box-shadow: inset 0px 0px 6px 1px #339cff;
background: none !important;
}
.container-wrap {
min-height: auto;
height: 100%;
}
.todo-list {
padding: 0 20px;
& li {
height: 42px;
line-height: 42px;
margin-bottom: 10px;
font-size: 13px;
color: #ffffff;
background: #02255f;
box-shadow: inset 0px 0px 6px 1px #339cff;
border-radius: 26px;
opacity: 1;
cursor: pointer;
& p {
display: inline-block;
width: calc(100% - 140px);
padding-left: 10px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
word-break: break-all;
}
& span {
float: right;
padding-right: 10px;
}
}
}
::v-deep
.el-table--striped
.el-table__body
tr.el-table__row--striped
td.el-table__cell {
background: #02255f;
}
.search-area {
width: 100%;
height: 100%;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
}
::v-deep .search-main{
padding: 0 62px;
.head-container{
padding: 0;
width: 100% !important;
.search-input {
width: 100% !important;
}
.input-with-select{
width: 100% !important;
}
}
}
</style>

507
src/views/home.vue

@ -1,91 +1,132 @@
<template>
<div class="dashboard-container">
<div class="dashboard-editor-container">
<panel-group />
<el-row :gutter="20" style="margin-bottom:20px;height: 152px;">
<el-col :xs="24" :sm="24" :lg="16">
<div class="container-left search-area">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!-- <SearchAcrives /> -->
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<div class="container-left" style="height: 100%;margin: 0">
<panel-group :top-object-num="topObjectNum" />
<el-row :gutter="20" style="margin-bottom:20px;height: calc(50vh - 174px);">
<el-col :xs="24" :sm="24" :lg="12">
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class=" table-title">
<p class="title-arrow">
<svg-icon icon-class="a-3Dkufang" class-name="warehouse-svg" />3D库房
</p>
<h3 class="home-item-title">
流程中心
</h3>
<div class="warehouse-tab">
<ul class="warehouse-nav">
<li @click="changeActiveTab(0)">
<span />
<p>全景图</p>
</li>
<li @click="changeActiveTab(1)">
<span />
<p>档案库</p>
</li>
<li @click="changeActiveTab(2)">
<span />
<p>整理室</p>
</li>
<li @click="changeActiveTab(3)">
<span />
<p>阅览室</p>
</li>
</ul>
<div class="home-flowable" style="height: calc(100% - 54px); overflow-x: hidden;">
<div class="home-tab">
<span :class="{'home-tab-active': flowableTabIndex == 0}">待处理({{ flowableData.length !==0? flowableData.length: 0 }})</span>
<span :class="{'home-tab-active': flowableTabIndex == 1}">更多流程</span>
</div>
<div class="home-flowable-list" style="height: calc(100% - 45px); overflow-y: auto; overflow-x: hidden;">
<el-table v-if="flowableData.length !== 0" height="calc(100%)" :data="flowableData" stripe style="width: 100%">
<el-table-column prop="title" label="标题" />
<el-table-column prop="applicant" label="申请人" width="100" />
<el-table-column prop="createTime" label="申请时间" width="180">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<div v-else class="empty-main" style="height: 100%;">
<svg-icon icon-class="empty" class-name="empty-img" />
<p>暂无数据</p>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-bottom:20px;height: calc(50vh - 251px);">
<el-col :xs="24" :sm="24" :lg="8">
<!-- 待办事项 -->
<el-col :xs="24" :sm="24" :lg="12">
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">
<svg-icon icon-class="tongzhigonggao" class-name="warehouse-svg" />待办事项
</p>
<h3 class="home-item-title">
服务器监控
</h3>
<div style="height: calc(100% - 40px);overflow-y: auto;overflow-x: hidden;">
<ul v-if="waitBorrowerData.length !== 0" class="todo-list">
<li v-for="(item,index) in waitBorrowerData" :key="index">
<el-tooltip class="item" effect="dark" :content="item.title" :enterable="false" placement="top">
<p>{{ item.title }}</p>
</el-tooltip>
<span>{{ item.update_time | parseTime }}</span>
</li>
</ul>
<div v-else class="empty-main" style="height: 100%;">
<svg-icon icon-class="empty" class-name="empty-img" />
<p>暂无数据</p>
<div class="chart-wrapper" style="display: flex; justify-content: space-between; align-items: center; overflow: hidden; margin-top: -20px;">
<div class="progress-class">
<el-progress class="differ" type="circle" stroke-linecap="butt" :percentage="21" :stroke-width="30" :width="200" :format="formatterSame" />
<svg width="100%" height="100%">
<defs>
<linearGradient id="red" x1="1" y1="0" x2="0.3" y2="1">
<stop
offset="0%"
style="stop-color: #14C9C9"
stop-opacity="1"
/>
<stop
offset="100%"
style="stop-color: #82DAAC"
stop-opacity="1"
/>
</linearGradient>
</defs>
</svg>
</div>
<div class="progress-right" style="display: flex; flex-wrap: wrap; align-items: center; flex: 1; height: 100%;">
<div class="progress-right-item">
<div class="progress-right-txt right-txt1">
<p>内存占比</p>
<span>65<i>%</i></span>
</div>
<div class="progress-class2">
<el-progress :show-text="false" type="circle" stroke-linecap="butt" :percentage="65" :stroke-width="20" :width="100" :format="formatterSame" />
<svg width="100%" height="100%">
<defs>
<linearGradient id="yellow" x1="1" y1="0" x2="0.3" y2="1">
<stop
offset="0%"
style="stop-color: #FF973E"
stop-opacity="1"
/>
<stop
offset="100%"
style="stop-color: #F7BA1E"
stop-opacity="1"
/>
</linearGradient>
</defs>
</svg>
</div>
</div>
<div class="progress-right-item">
<div class="progress-right-txt right-txt2">
<p>磁盘占比</p>
<span>38<i>%</i></span>
</div>
<div class="progress-class3">
<el-progress :show-text="false" type="circle" stroke-linecap="butt" :percentage="38" :stroke-width="20" :width="100" :format="formatterSame" />
<svg width="100%" height="100%">
<defs>
<linearGradient id="green" x1="1" y1="0" x2="0.3" y2="1">
<stop
offset="0%"
style="stop-color: #14C9C9"
stop-opacity="1"
/>
<stop
offset="100%"
style="stop-color: #82DAAC"
stop-opacity="1"
/>
</linearGradient>
</defs>
</svg>
</div>
</div>
</div>
</div>
</div>
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 门禁记录 -->
<security-door :height="'calc(100% - 40px)'" />
</el-col>
<el-col :xs="24" :sm="24" :lg="8">
<!-- 报警记录 -->
<warehouse-warning :height="'calc(100% - 40px)'" />
</el-col>
</el-row>
<el-row :gutter="20" style="height: calc(50vh - 251px);">
<el-row :gutter="20" style="height:calc(50vh - 174px);">
<el-col :xs="24" :sm="24" :lg="8">
<!-- 档案借阅 -->
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案借阅</p>
<h3 class="home-item-title">
档案统计
</h3>
<div class="chart-wrapper">
<lend-across :lend-data="lendData" />
@ -97,8 +138,8 @@
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案类别</p>
<h3 class="home-item-title">
档案类别
</h3>
<div class="chart-wrapper">
<cate-pie :cate-data="cateData" />
@ -110,8 +151,8 @@
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<h3 class="table-title">
<p class="title-arrow">档案类型</p>
<h3 class="home-item-title">
档案类型
</h3>
<div v-if="typeData.length !== 0" class="chart-wrapper">
<type-pie :type-data="typeData" />
@ -132,46 +173,73 @@ import PanelGroup from './dashboard/PanelGroup'
import lendAcross from '@/views/components/echarts/lendAcross.vue'
import catePie from '@/views/components/echarts/catePie.vue'
import typePie from '@/views/components/echarts/typePie.vue'
import WarehouseWarning from '@/views/components/WarehouseWarning'
import SecurityDoor from '@/views/components/SecurityDoor'
// import SearchAcrives from '@/views/archivesManage/archivesSearch/index'
import { statisticsCrud } from '@/views/system/archiveStatistics/mixins/statistics'
import { FetchWaitBorrower } from '@/api/archivesManage/lendManage'
import { FetchMainData } from '@/api/archivesManage/library'
import { mapGetters } from 'vuex'
export default {
name: 'Dashboard',
components: {
WarehouseWarning,
SecurityDoor,
PanelGroup,
lendAcross,
catePie,
typePie
// SearchAcrives
},
mixins: [statisticsCrud],
data() {
return {
waitBorrowerData: []
topObjectNum: {
archivesNum: 0,
caseNum: 0,
documentNum: 0,
fileNum: 0
},
archivesTotalNum: 0,
flowableData: [],
flowableTabIndex: 0,
lendData: [],
cateData: [],
typeData: []
}
},
computed: {
...mapGetters([
'user'
])
},
created() {
this.getWaitBorrower()
this.handleMainData()
},
methods: {
getWaitBorrower() {
FetchWaitBorrower().then(data => {
if (data) {
this.waitBorrowerData = data
}
})
formatterSame(percentage) {
return percentage
},
changeActiveTab(id) {
this.$router.push({
name: 'warehouse3D',
params: {
roomId: id
handleMainData() {
const fondsAffiliation = []
fondsAffiliation.push(this.user.fonds.id.toString())
const params = {
fondsAffiliations: fondsAffiliation
}
FetchMainData(params).then(data => {
this.topObjectNum = {
archivesNum: data.archivesNum,
caseNum: data.caseNum,
documentNum: data.documentNum,
fileNum: data.fileNum
}
this.flowableData = data.flows
this.archivesTotalNum = data.archivesTotalNum
// '', '', '', '', '', '', ''
// "archivesTotalNum": 3, //
// "archivesTagNum": 1, //
// "installNum": 0, //
// "storageNum": 0, //
// "borrowNum": 0, //
// "openNum": 0, //
// "entityNum": 3, //
// "approveNum": 2 //
this.lendData = [
data.archivesTagNum, data.installNum, data.storageNum, data.borrowNum, data.openNum, data.entityNum, data.approveNum
]
})
}
}
@ -184,7 +252,7 @@ export default {
position: relative;
.chart-wrapper {
height: calc(100% - 40px);
height: calc(100% - 55px);
}
}
@media (max-width: 1024px) {
@ -192,52 +260,6 @@ export default {
padding: 8px;
}
}
.warehouse-tab {
.warehouse-nav {
display: flex;
justify-content: space-around;
position: absolute;
bottom: 15px;
z-index: 11;
width: 100%;
padding: 0;
li {
display: flex;
flex-direction: column;
align-items: center;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
height: 90px;
text-align: right;
font-size: 14px;
position: relative;
&:hover {
cursor: pointer;
}
span {
width: 72px;
height: 52px;
margin-bottom: 7px;
}
p {
text-align: left;
}
&:first-child span {
background: url("~@/assets/images/tab_fullview_logo.png") no-repeat;
}
&:nth-child(2) span {
background: url("~@/assets/images/tab_archives_logo.png") no-repeat;
}
&:nth-child(3) span {
background: url("~@/assets/images/tab_collate_logo.png") no-repeat;
}
&:nth-child(4) span {
background: url("~@/assets/images/tab_read_logo.png") no-repeat;
}
}
}
}
.el-col {
height: 100%;
}
@ -248,68 +270,183 @@ export default {
.header-container-wrap {
min-height: 100%;
}
.warehose-el-table ::v-deep .el-table__header-wrapper {
box-shadow: inset 0px 0px 6px 1px #339cff;
background: none !important;
}
.container-wrap {
min-height: auto;
height: 100%;
}
.todo-list {
.home-item-title{
position: relative;
padding: 18px 0 18px 15px;
font-size: 16px;
color: #0C0E1E;
&::before{
position: absolute;
left: 0;
top: 50%;
content: "";
width: 3px;
height: 16px;
background-color: #0348F3;
transform: translateY(-50%);
}
}
.home-flowable{
padding: 0 20px;
& li {
height: 42px;
line-height: 42px;
margin-bottom: 10px;
font-size: 13px;
color: #ffffff;
background: #02255f;
box-shadow: inset 0px 0px 6px 1px #339cff;
border-radius: 26px;
opacity: 1;
}
.home-tab{
display: flex;
justify-content: flex-start;
span{
display: block;
margin-right: 30px;
padding-bottom: 3px;
border-bottom: 3px solid #fff;
cursor: pointer;
&.home-tab-active{
color: #0348F3;
border-bottom: 3px solid #0348F3;
}
}
}
::v-deep .home-flowable-list .el-table__body-wrapper::-webkit-scrollbar {
width: 5px !important;
height: 5px !important;
background-color: #DDE8FB !important;
}
& p {
::v-deep .home-flowable-list .el-table__body-wrapper::-webkit-scrollbar-thumb {
border-radius: 3px;
background-color: #4578F6 !important;
}
::v-deep .home-flowable-list .el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
background-color: #4578F6 !important;
}
::v-deep .home-flowable-list .el-table__body-wrapper::-webkit-scrollbar-corner {
background-color: #DDE8FB !important;
}
.progress-right-item{
width:100%;
height: calc(100% / 2);
display: flex;
justify-content: flex-start;
align-items: center;
}
.progress-right-txt{
position: relative;
color: #545B65;
font-size: 14px;
padding-left: 12px;
margin-right: 50px;
span{
display: block;
font-size: 20px;
color: #0C0E1E;
padding-top: 4px;
i{
display: inline-block;
width: calc(100% - 140px);
padding-left: 10px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
word-break: break-all;
font-size: 12px;
color: #A6ADB6;
}
}
&::before{
position: absolute;
left: 0;
top: 50%;
content: '';
width: 4px;
height: 50px;
background: linear-gradient(180deg, #FF9B3B 0%, #F7BA1E 100%);
border-radius: 100px;
transform: translateY(-50%);
}
&.right-txt1{
&::before{
background: linear-gradient(180deg, #FF9B3B 0%, #F7BA1E 100%);
}
& span {
float: right;
padding-right: 10px;
}
&.right-txt2{
&::before{
background: linear-gradient(180deg, #14C9C9 0%, #83DBAD 100%);
}
}
}
::v-deep
.el-table--striped
.el-table__body
tr.el-table__row--striped
td.el-table__cell {
background: #02255f;
.progress-class {
position: relative;
width: 200px;
height: 200px;
margin: 0 100px;
::v-deep svg > path:nth-child(2) {
stroke: url(#red);
}
::v-deep .el-progress-circle{
border-radius: 50%;
// box-shadow: 0 12px 12px #FEF1F3;
box-shadow: 0 6px 8px #D9F6F6;
}
}
.search-area {
width: 100%;
height: 100%;
margin: 0;
display: flex;
align-items: center;
justify-content: center;
.progress-class2{
position: relative;
width: 100px;
height: 100px;
::v-deep svg > path:nth-child(2) {
stroke: url(#yellow);
}
::v-deep .el-progress-circle{
border-radius: 50%;
box-shadow: 0 6px 8px #FFDEC1;
}
}
.progress-class3{
position: relative;
width: 100px;
height: 100px;
::v-deep svg > path:nth-child(2) {
stroke: url(#green);
}
::v-deep .el-progress-circle{
border-radius: 50%;
box-shadow: 0 6px 8px #D9F6F6;
}
}
::v-deep .el-progress__text{
white-space: pre;
}
::v-deep .el-progress-circle__track {
stroke: #F1F2F6;
}
::v-deep .search-main{
padding: 0 62px;
.head-container{
padding: 0;
width: 100% !important;
.search-input {
width: 100% !important;
.differ {
::v-deep .el-progress__text {
top: 55%;
font-size: 30px !important;
color: #0C0E1E;
&::before {
content: 'CPU占比';
width: 100%;
position: absolute;
top: -85%;
left: 50%;
font-weight: normal;
font-size: 14px;
color: #545B65;
transform: translateX(-50%);
}
.input-with-select{
width: 100% !important;
&::after {
content: '%';
width: 100%;
position: absolute;
bottom: 6px;
left: 30px;
font-weight: normal;
font-size: 12px;
color: #DEE0E4;
}
}
}

1
src/views/system/archiveStatistics/mixins/statistics.js

@ -15,6 +15,7 @@ export const statisticsCrud = {
}
},
lendData: [],
serviceData: [],
cateData: [],
typeData: [],
storageData: {

Loading…
Cancel
Save