Browse Source

公文管理

master
xuhuajiao 3 weeks ago
parent
commit
e99e98bdab
  1. 3
      .env.development
  2. 30
      src/api/system/documentArchives.js
  3. 55
      src/assets/test.md
  4. 21
      src/views/archivesMIOD/miodLibrary/index.vue
  5. 261
      src/views/archivesMIOD/miodLibrary/module/detail.vue
  6. 98
      src/views/archivesMIOD/miodRecord/index.vue
  7. 14
      src/views/archivesMIOD/miodSearch/module/resultList.vue
  8. 11
      src/views/archivesMIOD/miodStatistics/miodTable.vue
  9. 3
      src/views/archivesStatistics/customDefinedStatistics/index.vue
  10. 64
      src/views/home.vue
  11. 7
      src/views/system/borrowerManage/index.vue

3
.env.development

@ -3,7 +3,8 @@ ENV = 'development'
# 接口地址
# 许镇-本地服地址
VUE_APP_BASE_API = 'http://192.168.99.72:13000'
# VUE_APP_BASE_API = 'http://192.168.99.72:13000'
VUE_APP_BASE_API = 'http://192.168.99.67:13000'
VUE_APP_AIDEEPSEEK_API = 'http://192.168.99.86:12123'
VUE_APP_PROCESSMODEL_API = 'http://192.168.99.72:11200'
VUE_APP_SDEVID = "D002"

30
src/api/system/documentArchives.js

@ -194,6 +194,15 @@ export function FetchDocumentByDocDepartment(params) {
})
}
// 首页 - 公文传阅
export function FetchHomeBorrowLog(params) {
return request({
url: 'api/overview/getHomeBorrowLog',
method: 'get',
params
})
}
// 档案检索
export function FetchDocumentArchivesSearch(params) {
return request({
@ -277,6 +286,22 @@ export function FetchUnbindReadNo(data) {
})
}
// 导出借阅者信息
export function FetchDownloadBorrower(params) {
return request({
url: 'api/documentArchives/downloadBorrower' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 根据公文获取公文借阅信息
export function FetchArchivesDetailsBorrowLog(params) {
return request({
url: 'api/documentArchives/archivesDetailsBorrowLog' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default {
FetchInitDocumentParam,
updateDocumentParam,
@ -299,6 +324,7 @@ export default {
FetchUnbindTag,
FetchInitStatisBase,
FetchDocumentByDocDepartment,
FetchHomeBorrowLog,
FetchDocumentArchivesSearch,
FetchSearchHistory,
FetchSeniorSearch,
@ -308,5 +334,7 @@ export default {
FetchReadGW,
FetchReadPatron,
FetchBindReadNo,
FetchUnbindReadNo
FetchUnbindReadNo,
FetchDownloadBorrower,
FetchArchivesDetailsBorrowLog
}

55
src/assets/test.md

@ -1,55 +0,0 @@
## 项目背景
> 描述项目或产品的现状,让项目成员了解当前存在的问题与痛点。
>
+ 痛点1...
+ 痛点2...
+ 痛点3...
## 项目目标
> 描述本项目期望达成的目标,目标需满足Smart原则:
>
> 1. 具体的(Specific)
> 2. 可以衡量的(Measurable)
> 3. 可以达到的(Attainable)
> 4. 要与其他目标具有一定的相关性(Relevant)
> 5. 有明确的截止期限(Time-bound)
>
[此处为语雀卡片,点击链接查看](https://www.yuque.com/docs/205890729#ewusl)
## 关键事项
> 为达成上述目标,需要完成哪些关键事项。
>
+ 关键事项1...
+ 关键事项2...
+ 关键事项3...
## 里程碑
> 整个项目中,关键节点的里程碑计划。
>
![画板](https://cdn.nlark.com/yuque/0/2022/jpeg/956523/1657187439577-9e5f23b1-b37f-41ff-989b-646e87f85d6d.jpeg)
## 人员安排
> 输入项目的所有干系人,包括内部和外部干系人。
>
| **人员** | **岗位** |
| --- | --- |
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 项目经理 |
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 技术负责人 |
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 产品负责人 |
## 风险提示
> 对公司战略、项目结题、法务风险问题进行提示,并说明应对措施。
>
[此处为语雀卡片,点击链接查看](https://www.yuque.com/docs/205890729#MBwu4)

21
src/views/archivesMIOD/miodLibrary/index.vue

@ -73,8 +73,8 @@
v-if="field.fieldName === 'read_type'"
:class="{
'row-state row-packing': scope.row.read_type === '未传阅',
'row-state row-warehousing state-active': scope.row.read_type === '传阅中',
'row-state row-binding state-active': scope.row.read_type === '已完成',
'row-state row-binding state-active': scope.row.read_type === '传阅中',
'row-state row-physical state-active': scope.row.read_type === '已传阅',
}"
>
{{ scope.row[field.fieldName] }}
@ -86,7 +86,7 @@
<!--分页组件-->
<pagination v-if="crud.data.length !== 0" />
</div>
<detail ref="archivesInfo" :selected-document="selectedDocument" />
<detail ref="archivesInfo" :selected-document="selectedDocument" :parent-info="parentInfo" :page-type="pageType" />
<!--新增 / 编辑 表单组件-->
<el-dialog class="preview-dialog" :modal-append-to-body="false" :close-on-click-modal="false" append-to-body :before-close="closeDialog" :visible="formVisible" :title="formTitle">
@ -111,8 +111,7 @@
<div slot="footer" class="dialog-footer" style="margin-top: 20px !important;">
<el-button type="text" @click="closeDialog">取消</el-button>
<el-button :loading="archivesBtnLoading" type="primary" @click="handlerArchivesSubmit">保存</el-button>
<!-- @click="handlerArchivesSubmit" -->
<el-button :loading="bindSaveLoading" type="primary">保存并绑定标签</el-button>
<!-- <el-button :loading="bindSaveLoading" type="primary">保存并绑定标签</el-button> -->
</div>
</div>
</el-dialog>
@ -223,8 +222,9 @@ export default {
pdfSources: [],
printSelections: [],
archivesType: null,
search: ''
search: '',
parentInfo: null,
pageType: null
}
},
computed: {
@ -407,10 +407,13 @@ export default {
//
tableDoubleClick(row) {
console.log('tableDoubleClick', row)
this.parentInfo = row
this.$nextTick(() => {
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.parentInfo = row
this.$refs.archivesInfo.getDetial(row)
// this.$refs.archivesInfo.parentInfo = row
this.$refs.archivesInfo.getDetial()
})
},
//
toDelete(datas) {

261
src/views/archivesMIOD/miodLibrary/module/detail.vue

@ -19,7 +19,7 @@
</span>
</div>
<!-- 基本信息 -->
<div v-if="archivesTabIndex===0" class="base-info item-content">
<div v-if="archivesTabIndex===0" class="base-info-new item-content">
<el-row>
<el-col v-for="(item,index) in archivesDetailsData" :key="index" :span="item.isLine ? 24 : 12" class="base-info-item">
<span>{{ item.fieldCnName }}</span>
@ -32,7 +32,7 @@
</div>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 20px; margin-bottom: 10px; padding: 0 20px 0 10px;">
<h4 style="font-size: 16px; color: #1c1c1c;">文件列表</h4>
<el-button v-if="archivesFiledata.length !== 0" size="mini" style="padding: 7px 7px 7px 10px; " @click="handleAddDocDetails">
<el-button v-if="archivesFiledata.length !== 0 && !isMidoRecord" size="mini" style="padding: 7px 7px 7px 10px; " @click="handleAddDocDetails">
<i class="iconfont icon-tianjiawenjian" />
</el-button>
</div>
@ -50,23 +50,38 @@
</template>
</el-table-column>
<el-table-column prop="pass_location" label="传阅所在位置" min-width="180" />
<el-table-column prop="tid" label="电子标签" min-width="160" />
<el-table-column v-if="isMidoRecord" prop="read_type" label="传阅状态" min-width="80" align="center">
<template slot-scope="scope">
<div>
<span v-if="scope.row.read_type==='传阅中'" class="row-state end-state">{{ scope.row.read_type }}</span>
<span v-if="scope.row.read_type==='空闲中'" class="row-state defalut-state">{{ scope.row.read_type }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="tid" label="电子标签绑定" min-width="120" align="center">
<template slot-scope="scope">
<span v-if="scope.row.tid && (scope.row.tid!==null || scope.row.tid !=='')" class="row-state end-state">已绑定</span>
<span v-else class="row-state defalut-state">未绑定</span>
</template>
</el-table-column>
<el-table-column v-if="!isMidoRecord" prop="update_time" label="操作" min-width="160">
<!-- @click="handlePartParking(scope.row,scope.$index)" -->
<template slot-scope="scope">
<!-- 绑定标签 -->
<el-button
:loading="bindLoading"
:loading="bindLoading[scope.row.id]"
style="padding: 4px 4px 4px 6px !important; color: #0348f3 !important; background-color: #dcedfd !important; border: 1px solid #9bd1ff !important;"
@click="bindingTag(scope.row)"
><i class="iconfont icon-bendiguajie" /></el-button>
<!-- 解绑标签 -->
<el-button
:loading="unbindBtnLoading"
:loading="unbindBtnLoading[scope.row.id]"
style="padding: 4px 4px 4px 6px !important; color: #ff8329 !important; background-color: #fff3e5 !important; border: 1px solid #febd98 !important;"
@click="handleUnbind(scope.row)"
><i class="iconfont icon-jiebang" /></el-button>
<!-- 删除文件 -->
<el-button
v-if="scope.row.details_type !== 1"
:loading="deleteBtnLoading"
:loading="deleteBtnLoading[scope.row.id]"
style="padding: 4px 6px 4px 6px !important; color: #ed4a41!important; background-color: #fcece9 !important; border: 1px solid #fbc0b5 !important;"
@click="toDelete(scope.row)"
><i class="iconfont icon-shanchu" /></el-button>
@ -78,25 +93,48 @@
<!-- 传阅记录 -->
<div v-if="archivesTabIndex===1" class="item-content">
<el-table
:data="tableData"
:data="borrowTableData"
style="min-width: 100%;"
height="calc(100vh - 280px)"
>
<el-table-column prop="file_name" label="公文登记号" show-overflow-tooltip min-width="140" />
<el-table-column prop="file_type" label="文件类型" min-width="85" />
<el-table-column prop="file_size" label="传阅者" min-width="85" />
<el-table-column prop="file_size" label="类型" min-width="85" />
<el-table-column prop="update_time" label="开始时间" width="180">
<el-table-column prop="reg_no" label="公文登记号" show-overflow-tooltip min-width="140" />
<el-table-column prop="details_type" label="类型" min-width="85">
<template slot-scope="scope">
<el-tag v-if="scope.row.details_type === 1">原件</el-tag>
<el-tag v-else>复印件</el-tag>
</template>
</el-table-column>
<el-table-column prop="borrow_name" label="传阅者" min-width="85" />
<el-table-column prop="borrow_type" label="类型">
<template slot-scope="scope">
<div>{{ scope.row.update_time | parseTime }}</div>
<div>
<span v-if="scope.row.borrow_type === 1">部门</span>
<span v-if="scope.row.borrow_type === 2">个人</span>
</div>
</template>
</el-table-column>
<el-table-column prop="update_time" label="结束时间" width="180">
<el-table-column prop="start_time" label="开始时间" width="180">
<template slot-scope="scope">
<div>{{ scope.row.update_time | parseTime }}</div>
<div>{{ scope.row.start_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="latest_time" label="结束时间" width="180">
<template slot-scope="scope">
<div>{{ scope.row.latest_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
v-if="borrowTableData.length !== 0"
:current-page="pageBorrow.page+1"
:total="pageBorrow.total"
:page-size="pageBorrow.size"
:pager-count="5"
layout="total, prev, pager, next, sizes"
@size-change="handleBorrowSizeChange"
@current-change="handleBorrowCurrentPage"
/>
</div>
<!-- 操作记录 -->
<div v-if="archivesTabIndex==2" class="item-content">
@ -128,19 +166,15 @@
/>
</div>
</div>
<!-- :binding-id="crud.selections[0] && crud.selections[0].id" @refresh="crud.refresh" -->
<!-- <binding-tag-dlg ref="bindingTag" :selected-document="selectedDocument" :binding-id="selections[0] && selections[0].id" :binding-type="1" binding-txt="公文" /> -->
</div>
</el-dialog>
</template>
<script>
// import { crud } from '@crud/crud'
// , FetchUnbindTag
import { FetchArchivesDetails, FetchInitDocumentDetailsList, FetchAddDocumentDetails, FetchDeleteDocumentDetails, FetchInitDistributorByDocumentId, FetchInitOperate, FetchReadGW, FetchBingdingLabel, FetchUnbindTag } from '@/api/system/documentArchives'
import { FetchArchivesDetails, FetchInitDocumentDetailsList, FetchAddDocumentDetails, FetchDeleteDocumentDetails, FetchInitDistributorByDocumentId, FetchInitOperate, FetchReadGW, FetchBingdingLabel, FetchUnbindTag, FetchArchivesDetailsBorrowLog } from '@/api/system/documentArchives'
import { mapGetters } from 'vuex'
// import BindingTagDlg from '@/views/components/BindingTagDlg'
export default {
name: 'PrearchiveLibraryDetail',
filters: {
@ -162,6 +196,16 @@ export default {
isMidoRecord: {
type: Boolean,
default: false
},
parentInfo: {
type: Object,
default: function() {
return {}
}
},
pageType: {
type: String,
default: null
}
},
data() {
@ -171,12 +215,10 @@ export default {
archivesDetailsData: [],
archivesFiledata: [],
selections: [],
tableData: [],
parentInfo: null,
borrowTableData: [],
handleTableData: [],
currentArchives: null,
currentArchivesId: null,
pageType: null,
archivesFiledataLoading: false,
borrowerList: [],
page: {
@ -184,6 +226,11 @@ export default {
size: 10,
total: 0
},
pageBorrow: {
page: 0,
size: 10,
total: 0
},
operateTypeMap: {
1: '归档',
2: '退回',
@ -205,21 +252,20 @@ export default {
18: '附件删除',
19: '实体档案归还'
},
bindLoading: false,
unbindBtnLoading: false,
deleteBtnLoading: false
bindLoading: {},
unbindBtnLoading: {},
deleteBtnLoading: {}
}
},
computed: {
...mapGetters([
'baseApi'
]),
//
readStatus() {
const readTypeItem = this.archivesDetailsData.find(
item => item.fieldName === 'read_type'
)
return readTypeItem ? readTypeItem.context : '未传阅'
return readTypeItem?.context ?? '未传阅'
}
},
created() {
@ -232,29 +278,38 @@ export default {
case '未传阅':
return 'defalut-state'
case '传阅中':
return 'soon-state'
case '已传阅':
return 'end-state'
case '已传阅':
return 'ing-state'
default:
return 'defalut-state'
}
},
changeActiveTab(index) {
this.archivesTabIndex = index
if (index === 2) {
if (index === 0) {
this.getDetial()
} else if (index === 1) {
this.pageBorrow.size = 10
this.pageBorrow.page = 0
this.getArchivesDetailsBorrowLog()
} else if (index === 2) {
this.page.size = 10
this.page.page = 0
this.getInitOperate()
}
},
getOperateTypeText(type) {
return this.operateTypeMap[type] || '-'
},
getDetial(row, pageType) {
this.pageType = pageType
this.currentArchives = row
this.currentArchivesId = row.id
getDetial() {
console.log('this.parentInfo', this.parentInfo)
// this.pageType = pageType
// this.currentArchives = this.parentInfo
// this.currentArchivesId = this.parentInfo.id
let documentId
if (pageType && pageType === 'search') {
documentId = row.document_id
if (this.pageType && (this.pageType === 'search' || this.pageType === 'miodRecord')) {
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -263,16 +318,29 @@ export default {
const commonParams = {
documentId,
archivesId: row.id
archivesId: this.pageType && this.pageType === 'miodRecord'
? this.parentInfo.details_type === 1
? this.parentInfo.archives_id
: this.parentInfo.parents_id
: this.parentInfo.id
}
const distributorParams = {
...commonParams,
readType: 0
}
Promise.all([
//
FetchArchivesDetails(commonParams).then(data => {
console.log('archivesDetailsData', data)
if (data.code !== 500) {
this.archivesDetailsData = data
} else {
this.archivesDetailsData = []
}
}),
//
FetchInitDistributorByDocumentId(commonParams).then(data => {
FetchInitDistributorByDocumentId(distributorParams).then(data => {
this.borrowerList = data
})
]).catch(error => {
@ -286,8 +354,8 @@ export default {
this.archivesFiledataLoading = true
let documentId
if (this.pageType && this.pageType === 'search') {
documentId = this.currentArchives.document_id
if (this.pageType && (this.pageType === 'search' || this.pageType === 'miodRecord')) {
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -296,7 +364,11 @@ export default {
const params = {
documentId,
archivesId: this.currentArchivesId
archivesId: this.pageType && this.pageType === 'miodRecord'
? this.parentInfo.details_type === 1
? this.parentInfo.archives_id
: this.parentInfo.parents_id
: this.parentInfo.id
}
FetchInitDocumentDetailsList(params).then(data => {
@ -327,7 +399,7 @@ export default {
handleAddDocDetails() {
let documentId
if (this.pageType && this.pageType === 'search') {
documentId = this.currentArchives.document_id
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -335,7 +407,7 @@ export default {
}
const params = {
documentId: documentId,
archivesId: this.currentArchivesId,
archivesId: this.parentInfo.id,
regNo: this.archivesFiledata[0].reg_no
}
FetchAddDocumentDetails(params).then(data => {
@ -348,11 +420,39 @@ export default {
this.$message({ message: error, type: 'error', offset: 8 })
})
},
//
getArchivesDetailsBorrowLog() {
let documentId
if (this.pageType && (this.pageType === 'search' || this.pageType === 'miodRecord')) {
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
: this.selectedDocument.documentId
}
const params = {
documentId: documentId,
archivesId: this.pageType && this.pageType === 'miodRecord'
? this.parentInfo.details_type === 1
? this.parentInfo.archives_id
: this.parentInfo.parents_id
: this.parentInfo.id,
page: this.pageBorrow.page,
size: this.pageBorrow.size
}
FetchArchivesDetailsBorrowLog(params).then(data => {
console.log('data', data)
this.borrowTableData = data.content
this.pageBorrow.total = data.totalElements
}).catch(error => {
this.$message({ message: error, type: 'error', offset: 8 })
})
},
//
getInitOperate() {
let documentId
if (this.pageType && this.pageType === 'search') {
documentId = this.currentArchives.document_id
if (this.pageType && (this.pageType === 'search' || this.pageType === 'miodRecord')) {
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -360,7 +460,11 @@ export default {
}
const params = {
documentId: documentId,
archivesId: this.currentArchivesId,
archivesId: this.pageType && this.pageType === 'miodRecord'
? this.parentInfo.details_type === 1
? this.parentInfo.archives_id
: this.parentInfo.parents_id
: this.parentInfo.id,
page: this.page.page,
size: this.page.size
}
@ -372,8 +476,9 @@ export default {
this.$message({ message: error, type: 'error', offset: 8 })
})
},
//
bindingTag(row) {
this.bindLoading = true
this.$set(this.bindLoading, row.id, true)
console.log('bindingTag', row)
if (row.tid && (row.tid !== '' || row.tid !== null)) {
this.$confirm('当前所选已绑定标签' + '<span>你是否还要继续?</span>', '提示', {
@ -384,7 +489,7 @@ export default {
}).then(() => {
this.handlBind(row, 'hasLabel')
}).catch(() => {
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
})
} else {
this.handlBind(row)
@ -399,7 +504,7 @@ export default {
FetchReadGW(param).then((res) => {
if (!res) {
this.$message({ message: '绑定失败', type: 'error', offset: 8 })
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
} else {
const result = JSON.parse(res)
console.log('result', result)
@ -432,25 +537,26 @@ export default {
this.$message({ message: '绑定成功', type: 'success', offset: 8 })
}
this.getInitDocumentDetailsList()
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
}).catch(error => {
console.error(error)
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
})
} else if (result.code === '-1') {
this.$message({ message: result.message, type: 'error', offset: 8 })
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
} else if (result.code === '-1000') {
//
this.$message({ message: result.message, type: 'error', offset: 8 })
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
}
}
}).catch(error => {
console.error(error)
this.bindLoading = false
this.$set(this.bindLoading, row.id, false)
})
},
//
handleUnbind(data) {
console.log('data', data)
this.$confirm('此操作将解除所选电子标签的绑定关系' + '<span>你是否还要继续?</span>', '提示', {
@ -459,10 +565,10 @@ export default {
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.unbindBtnLoading = true
this.$set(this.unbindBtnLoading, data.id, true)
let documentId
if (this.pageType && this.pageType === 'search') {
documentId = this.currentArchives.document_id
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -481,7 +587,7 @@ export default {
console.log('unbindData', unbindData)
FetchUnbindTag(unbindData).then((res) => {
if (res) {
this.unbindBtnLoading = false
this.$set(this.unbindBtnLoading, data.id, false)
this.$message({ message: '解除绑定成功', type: 'success', offset: 8 })
this.getInitDocumentDetailsList()
} else {
@ -489,12 +595,13 @@ export default {
}
})
}).catch(() => {
this.unbindBtnLoading = false
this.$set(this.unbindBtnLoading, data.id, false)
})
},
//
toDelete(datas) {
console.log('datas', datas)
this.deleteBtnLoading = true
this.$set(this.deleteBtnLoading, datas.id, true)
this.$confirm('此操作将删除当前所选公文文件' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
@ -503,7 +610,7 @@ export default {
}).then(() => {
let documentId
if (this.pageType && this.pageType === 'search') {
documentId = this.currentArchives.document_id
documentId = this.parentInfo.document_id
} else {
documentId = this.selectedDocument.isType === 2
? this.selectedDocument.id
@ -513,23 +620,27 @@ export default {
documentId: documentId,
archivesId: datas.id, // this.currentArchivesId,
regNo: datas.reg_no,
isDestroy: true
isDestroy: true,
tid: datas.tid ? datas.tid : null // id
}
console.log('ids', params)
FetchDeleteDocumentDetails(params).then((res) => {
console.log('res', res)
if (res === '删除成功' && res.code !== 500) {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
} else {
this.$message({ message: res.message, type: 'error', offset: 8 })
}
this.getInitDocumentDetailsList()
this.deleteBtnLoading = false
this.$set(this.deleteBtnLoading, datas.id, false)
}).catch(err => {
this.deleteBtnLoading = false
this.$set(this.deleteBtnLoading, datas.id, false)
console.log(err)
})
}).catch(() => {
this.deleteBtnLoading = false
this.$set(this.deleteBtnLoading, datas.id, false)
})
},
// dialog - close
handleClose(done) {
this.archivesInfoVisible = false
done()
@ -537,9 +648,20 @@ export default {
handleSizeChange(size) {
this.page.size = size
this.page.page = 0
this.getInitOperate()
},
handleCurrentPage(val) {
this.page.page = val - 1
this.getInitOperate()
},
handleBorrowSizeChange(size) {
this.pageBorrow.size = size
this.pageBorrow.page = 0
this.getArchivesDetailsBorrowLog()
},
handleBorrowCurrentPage(val) {
this.pageBorrow.page = val - 1
this.getArchivesDetailsBorrowLog()
}
}
}
@ -549,8 +671,7 @@ export default {
.item-content {
height: calc(100vh - 240px);
}
.base-info{
.base-info-new{
.el-row{
padding: 20px 0 0 0;
background-color: #F6F8FC;
@ -574,7 +695,7 @@ export default {
}
}
.base-info .base-info-item span.el-tag{
.base-info-item span.el-tag{
width: auto;
color: #fff;
}

98
src/views/archivesMIOD/miodRecord/index.vue

@ -23,11 +23,11 @@
</el-select>
</el-input>
<div style="display: flex; justify-content: flex-start; align-items: center;">
<p style="margin-right: 10px; font-size: 14px;">开始时间</p>
<p style="margin-right: 10px; font-size: 14px;">借阅时间</p>
<date-range-picker v-model="blurryTimeStart" class="date-item" />
</div>
<div style="display: flex; justify-content: flex-start; align-items: center;">
<p style="margin-right: 10px; font-size: 14px;">结束时间</p>
<p style="margin-right: 10px; font-size: 14px;">归还时间</p>
<date-range-picker v-model="blurryTimeEnd" class="date-item" />
</div>
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button>
@ -40,6 +40,7 @@
<el-table
ref="table"
v-loading="crud.loading"
class="archives-table"
:data="crud.data"
style="width: 100%;"
height="calc(100vh - 231px);"
@ -47,39 +48,52 @@
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="nickName" label="公文登记号" width="120" />
<el-table-column prop="nickName" label="公文题名" />
<el-table-column prop="nickName" label="文件类型" />
<el-table-column prop="name" label="借阅者" />
<el-table-column prop="type" label="借阅者类型" />
<el-table-column prop="giveStartTime" label="传阅开始时间" width="200">
<el-table-column prop="reg_no" label="公文登记号" width="120" />
<el-table-column prop="maintitle" label="公文题名" />
<el-table-column prop="details_type" label="文件类型">
<template slot-scope="scope">
<div>{{ scope.row.giveStartTime | parseTime }}</div>
<el-tag v-if="scope.row.details_type === 1">原件</el-tag>
<el-tag v-else>复印件</el-tag>
</template>
</el-table-column>
<el-table-column prop="giveEndTime" label="最迟归还时间" width="200">
<el-table-column prop="borrow_name" label="借阅者" />
<el-table-column prop="borrow_type" label="借阅者类型">
<template slot-scope="scope">
<div>{{ scope.row.giveEndTime | parseTime }}</div>
<div>
<span v-if="scope.row.borrow_type === 1">部门</span>
<span v-if="scope.row.borrow_type === 2">个人</span>
</div>
</template>
</el-table-column>
<el-table-column prop="start_time" label="传阅开始时间" width="200">
<template slot-scope="scope">
<div>{{ scope.row.start_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="giveEndTime" label="实际归还时间" width="200">
<el-table-column prop="latest_time" label="最迟归还时间" width="200">
<template slot-scope="scope">
<div>{{ scope.row.giveEndTime | parseTime }}</div>
<div>{{ scope.row.latest_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column prop="borrowType" label="状态" align="center" width="110">
<el-table-column prop="actual_return_time" label="实际归还时间" width="200">
<template slot-scope="scope">
<div v-if="scope.row.actual_return_time && (scope.row.actual_return_time!=='' || scope.row.actual_return_time!== null)">{{ scope.row.actual_return_time | parseTime }}</div>
<div v-else>-</div>
</template>
</el-table-column>
<el-table-column prop="actual_return_time" label="状态" align="center" width="110">
<template slot-scope="scope">
<div>
<span v-if="scope.row.borrowType==='即将到期'" class="row-state soon-state">{{ scope.row.borrowType }}</span>
<span v-if="scope.row.borrowType==='传阅中'" class="row-state ing-state">{{ scope.row.borrowType }}</span>
<span v-if="scope.row.borrowType==='已归还'" class="row-state cancel-state">{{ scope.row.borrowType }}</span>
<!-- <span v-if="scope.row.borrow_type==='即将到期'" class="row-state soon-state">即将到期</span> -->
<span v-if="scope.row.actual_return_time && (scope.row.actual_return_time!=='' || scope.row.actual_return_time!== null)" class="row-state row-physical state-active">已归还</span>
<span v-else class="row-state row-binding state-active">传阅中</span>
</div>
</template>
</el-table-column>
</el-table>
<pagination v-if="crud.data.length !== 0" />
</div>
<MidoArchivesInfo ref="midoInfoRefs" is-mido-record="true" />
<MidoArchivesInfo ref="archivesInfo" :is-mido-record="true" :parent-info="parentInfo" :page-type="pageType" />
</div>
</template>
@ -97,7 +111,7 @@ export default {
mixins: [presenter(), crud()],
cruds() {
return CRUD({
url: 'api/depts/initDeptsList',
url: 'api/documentArchives/initBorrowLog',
title: '传阅记录',
optShow: {
add: false,
@ -113,9 +127,9 @@ export default {
return {
typeValue: null,
options: [
{ value: '0', label: '全部' },
{ value: '1', label: '传阅中' },
{ value: '2', label: '已归还' }
{ value: null, label: '全部' },
{ value: 1, label: '传阅中' },
{ value: 2, label: '已归还' }
],
inputSelect: '',
blurryTimeStart: null,
@ -123,7 +137,9 @@ export default {
lendDetail: false,
rowCurrent: null,
detailArcData: [],
categoryId: null
categoryId: null,
parentInfo: null,
pageType: 'miodRecord'
}
},
watch: {
@ -142,7 +158,9 @@ export default {
'value',
'value'
)
this.crud.query[this.typeInputkey] = e
this.crud.query.readType = this.typeInputkey
this.crud.query.search = e
// this.crud.query[this.typeInputkey] = e
},
clearInputValue(val) {
this.inputSelect = val
@ -168,18 +186,18 @@ export default {
},
[CRUD.HOOK.beforeRefresh]() {
if (this.blurryTimeStart) {
this.crud.query.startTime = this.blurryTime[0]
this.crud.query.endTime = this.blurryTime[1]
this.crud.query.borrowStartTime = this.blurryTimeStart[0]
this.crud.query.borrowEndTime = this.blurryTimeStart[1]
} else {
this.crud.query.startTime = null
this.crud.query.endTime = null
this.crud.query.borrowStartTime = null
this.crud.query.borrowEndTime = null
}
if (this.blurryTimeEnd) {
this.crud.query.startTime = this.blurryTime[0]
this.crud.query.endTime = this.blurryTime[1]
this.crud.query.lastStartTime = this.blurryTimeEnd[0]
this.crud.query.lastEndTime = this.blurryTimeEnd[1]
} else {
this.crud.query.startTime = null
this.crud.query.endTime = null
this.crud.query.lastStartTime = null
this.crud.query.lastEndTime = null
}
},
[CRUD.HOOK.afterRefresh](crud) {
@ -187,10 +205,14 @@ export default {
resetQuery() {
this.clearInputValue()
this.inputSelect = this.options[0].value
this.crud.query.readType = null
this.crud.query.search = null
this.blurryTimeStart = []
this.blurryTimeEnd = []
this.crud.query.startTime = null
this.crud.query.endTime = null
this.crud.query.borrowStartTime = null
this.crud.query.borrowEndTime = null
this.crud.query.lastStartTime = null
this.crud.query.lastEndTime = null
this.crud.toQuery()
},
getBusinessFlowDetails(row) {
@ -215,9 +237,13 @@ export default {
})
},
tableDoubleClick(row) {
// this.getBusinessFlowDetails(row)
this.$refs.midoInfoRefs.archivesInfoVisible = true
console.log('row', row)
this.parentInfo = row
this.$nextTick(() => {
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.getDetial()
})
},
handleCloseDialog(done) {
}

14
src/views/archivesMIOD/miodSearch/module/resultList.vue

@ -74,8 +74,8 @@
<span v-if="item.folderLocation && item.folderLocation !== '' && item.folderLocation !== null">入库</span>
<span v-if="item.isBorrow && item.isBorrow">借阅</span> -->
<span v-if="item.read_type && item.read_type === '未传阅'" style="color: #a6adb6;border: 1px solid #e6e8ed;background-color: #f3f5f9;">{{ item.read_type }}</span>
<span v-if="item.read_type && item.read_type === '传阅中'" style="color: #FF8329;border: 1px solid #FEBD98;background-color: #FFF3E5;">{{ item.read_type }}</span>
<span v-if="item.read_type && item.read_type === '已完成'" style="color: #2ECAAC;border: 1px solid #B1EBDF;background-color: #E8F8F5;">{{ item.read_type }}</span>
<span v-if="item.read_type && item.read_type === '传阅中'" style="color: #2ECAAC;border: 1px solid #B1EBDF;background-color: #E8F8F5;">{{ item.read_type }}</span>
<span v-if="item.read_type && item.read_type === '已传阅'" style="color: #0348F3; background-color: #EEF5FE; border: 1px solid #0348F3;">{{ item.read_type }}</span>
<!-- <span v-if="item.processStatus > 1" style="color: #ff8329;border-color: #febd98;background-color: #fff3e5;">审批锁定</span>
<span v-else style="color: #a6adb6;border: 1px solid #e6e8ed;background-color: #f3f5f9;">空闲</span> -->
</div>
@ -102,7 +102,7 @@
</div>
</div>
<!-- 档案详情 -->
<detail ref="archivesInfo" />
<detail ref="archivesInfo" :parent-info="parentInfo" :page-type="pageType" />
<!-- <LendForm ref="lendFormRef" /> -->
</div>
</template>
@ -177,7 +177,9 @@ export default {
classifyLoading: false,
resultLoading: false,
condition: '',
isSearching: false
isSearching: false,
parentInfo: null,
pageType: 'search'
}
},
computed: {
@ -418,11 +420,11 @@ export default {
},
handleDetail(row) {
console.log('this.$refs.archivesInfo', this.$refs.archivesInfo)
this.parentInfo = row
this.$nextTick(() => {
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.parentInfo = row
this.$refs.archivesInfo.getDetial(row, 'search')
this.$refs.archivesInfo.getDetial()
})
},
initiateLending(item) {

11
src/views/archivesMIOD/miodStatistics/miodTable.vue

@ -359,7 +359,7 @@ export default {
.table-content {
box-sizing: border-box;
display: inline-block;
border: 1px solid #dfe6ec;
// border: 1px solid #dfe6ec;
border-bottom: none;
border-right: none;
font-size: 14px;
@ -369,8 +369,8 @@ export default {
padding: 5px 10px;
font-weight: bold;
color: #0c0e1e;
border-bottom: 1px solid #dfe6ec;
border-right: 1px solid #dfe6ec;
// border-bottom: 1px solid #dfe6ec;
// border-right: 1px solid #dfe6ec;
}
}
// ::v-deep .el-table{
@ -386,11 +386,16 @@ export default {
// }
::v-deep .el-table__header-wrapper {
background-color: transparent !important;
border-top: 1px solid #dfe6ec;
border-left: 1px solid #dfe6ec;
}
::v-deep .el-table::before, .el-table--group::after,
::v-deep .el-table--border::after{
background-color: transparent !important;
}
::v-deep .el-table__body-wrapper {
border-left: 1px solid #dfe6ec !important;
}
// ::v-deep .el-table .el-table__body-wrapper td.el-table__cell,
// ::v-deep .el-table .el-table__fixed-right td.el-table__cell {
// padding: 0 !important;

3
src/views/archivesStatistics/customDefinedStatistics/index.vue

@ -57,14 +57,13 @@ import 'katex/dist/katex.min.css'
// import MarkdownItTasklists from 'markdown-it-task-lists'
// import MarkdownItTOC from 'markdown-it-toc-done-right'
// import 'highlight.js/styles/default.css'
import markdownText2 from '@/assets/test.md'
export default {
name: 'CustomDefinedStatistics',
components: { },
data() {
return {
markdownText2: markdownText2,
markdownText2: '',
//
markDownText: `## 项目背景
> 描述项目或产品的现状让项目成员了解当前存在的问题与痛点

64
src/views/home.vue

@ -16,14 +16,26 @@
<span :class="{'home-tab-active': flowableTabIndex == 1}" @click="toMoreProcess">更多流程</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="createTime" label="申请时间" width="180">
<el-table v-if="miodTableData.length !== 0" height="calc(100%)" :data="miodTableData" stripe style="width: 100%" :show-header="false">
<el-table-column prop="title" label="标题" width="450" show-overflow-tooltip>
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<span>[{{ scope.row.reg_no }}] - {{ scope.row.borrow_name }} - {{ scope.row.maintitle }}</span>
</template>
</el-table-column>
<el-table-column prop="latest_time" label="申请时间" width="180">
<template slot-scope="scope">
<div>{{ scope.row.latest_time }}</div>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="100" align="right">
<template slot-scope="scope">
<div>
<span v-if="scope.row.status==='逾期'" class="row-state cancel-state">{{ scope.row.status }}</span>
<span v-if="scope.row.status==='即将到期'" class="row-state soon-state">{{ scope.row.status }}</span>
<span v-if="scope.row.status==='传阅中'" class="row-state end-state">{{ scope.row.status }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="applicant" label="状态" width="100" />
</el-table>
<div v-else class="empty-main" style="height: 100%;">
<svg-icon icon-class="empty" class-name="empty-img" />
@ -104,8 +116,7 @@ import PanelGroup from './dashboard/PanelGroup'
import catePie from '@/views/components/echarts/catePie.vue'
import typePie from '@/views/components/echarts/typePie.vue'
import serverProgress from '@/views/components/echarts/serverProgress.vue'
import { FetchInitStatisBase, FetchDocumentTypeByTime, FetchDocumentByDocDepartment } from '@/api/system/documentArchives'
import { FetchMainData } from '@/api/archivesManage/library'
import { FetchInitStatisBase, FetchDocumentTypeByTime, FetchDocumentByDocDepartment, FetchHomeBorrowLog } from '@/api/system/documentArchives'
import { FetchSystemInfo } from '@/api/home/cpu/index'
import { mapGetters } from 'vuex'
@ -127,7 +138,7 @@ export default {
circulated: 0
},
archivesTotalNum: 0,
flowableData: [],
miodTableData: [],
flowableTabIndex: 0,
lendData: {
archivesTotalNum: null,
@ -157,11 +168,10 @@ export default {
},
created() {
this.getTopData()
this.getHomeBorrowLog()
this.getSystemInfo()
this.getDocumentTypeByTime()
this.getDocumentByDocDepartment()
// this.handleMainData()
// this.get()
},
mounted() {
// const _this = this
@ -179,7 +189,6 @@ export default {
// addArcivesNum: [],
// addArcivesNumFile: []
// }
// _this.handleMainData()
// }, this.refreshtime)
//
@ -193,8 +202,16 @@ export default {
// }, 3000)
},
methods: {
getHomeBorrowLog() {
FetchHomeBorrowLog().then(res => {
console.log('FetchHomeBorrowLog', res)
this.miodTableData = res
})
},
getSystemInfo() {
FetchSystemInfo().then(res => {
console.log('res', res)
if (res && Object.keys(res).length) {
// cpu cpuTotal-cpuFree/cpuTotal
this.systemData.cpuPercentage = Math.round((res.cpuTotal - res.cpuFree) / res.cpuTotal * 100)
@ -209,6 +226,13 @@ export default {
sysFilesTotal += parseFloat(item.total)
})
this.systemData.sysFilesPercentage = Math.round((sysFilesTotalUsed / sysFilesTotal) * 100)
} else {
this.systemData = {
cpuPercentage: 0,
memPercentage: 0,
sysFilesPercentage: 0
}
}
})
},
toMoreProcess() {
@ -287,26 +311,8 @@ export default {
value: item.count
}))
})
},
handleMainData() {
const fondsAffiliation = []
fondsAffiliation.push(this.user.fonds.id.toString())
const params = {
fondsAffiliations: fondsAffiliation
}
FetchMainData(params).then(data => {
this.flowableData = data.flows
// '', '', '', '', '', '', ''
// "archivesTotalNum archivesTagNum installNum storageNum borrowNum openNum entityNum approveNum
//
this.lendData.archivesTotalNum = data.archivesTotalNum
this.lendData.otherData = [
data.archivesTagNum, data.installNum, data.storageNum, data.borrowNum, data.openNum, data.entityNum, data.approveNum
]
})
}
}
}
</script>

7
src/views/system/borrowerManage/index.vue

@ -4,7 +4,7 @@
<div class="head-container">
<div class="head-search">
<!-- 搜索 -->
<el-input v-model="query.ruleName" clearable size="small" placeholder="输入借阅者名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-input v-model="query.search" clearable size="small" placeholder="输入借阅者名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation />
</div>
<div style="display: flex; justify-content: space-between;">
@ -269,9 +269,10 @@ export default {
ids.push(val.id)
})
const params = {
'fieldMates': ids
'ids': ids
}
exportFile(this.baseApi + '/api/fieldMate/download?' + qs.stringify(params, { indices: false }))
console.log('params', params)
exportFile(this.baseApi + '/api/documentArchives/downloadBorrower?' + qs.stringify(params, { indices: false }))
}).catch(() => {
})
},

Loading…
Cancel
Save