xuhuajiao
1 year ago
28 changed files with 1324 additions and 97 deletions
-
100src/api/archivesKeeping/caseManage.js
-
4src/api/archivesManage/library.js
-
17src/assets/styles/archives-manage.scss
-
368src/views/archiveKeeping/caseManage/caseList/index.vue
-
107src/views/archiveKeeping/caseManage/caseList/module/detailDialog.vue
-
248src/views/archiveKeeping/caseManage/caseList/module/form.vue
-
54src/views/archiveKeeping/caseManage/caseList/module/openCaseDlg.vue
-
57src/views/archiveKeeping/caseManage/index.vue
-
197src/views/archiveKeeping/caseManage/module/caseLog.vue
-
1src/views/archiveUtilize/archiveEditing/module/materialSelected.vue
-
2src/views/archivesManage/managementLibrary/anjuan/tableList.vue
-
3src/views/archivesManage/managementLibrary/index.vue
-
2src/views/archivesManage/managementLibrary/juannei/index.vue
-
7src/views/archivesManage/managementLibrary/mixins/index.js
-
6src/views/archivesManage/managementLibrary/module/archivesInfo/index.vue
-
25src/views/archivesManage/managementLibrary/module/collectHeader.vue
-
160src/views/archivesManage/managementLibrary/module/packingBox/index.vue
-
2src/views/archivesManage/managementLibrary/project/index.vue
-
2src/views/collectReorganizi/collectionLibrary/anjuan/tableList.vue
-
2src/views/collectReorganizi/collectionLibrary/juannei/index.vue
-
1src/views/collectReorganizi/collectionLibrary/mixins/index.js
-
6src/views/collectReorganizi/collectionLibrary/module/archivesInfo/index.vue
-
1src/views/collectReorganizi/collectionLibrary/module/collectMoveFile/index.vue
-
1src/views/collectReorganizi/collectionLibrary/module/insertFile/index.vue
-
2src/views/collectReorganizi/collectionLibrary/project/index.vue
-
30src/views/components/archivesListModule/index.vue
-
6src/views/components/category/PreviewForm.vue
-
10src/views/prearchiveLibrary/module/moveFile.vue
@ -0,0 +1,100 @@ |
|||
import request from '@/utils/request' |
|||
import qs from 'qs' |
|||
|
|||
export function add(form) { |
|||
return edit(form) |
|||
} |
|||
|
|||
export function edit(parameter) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/editCase', |
|||
method: 'post', |
|||
data: parameter |
|||
}) |
|||
} |
|||
|
|||
// 删除档案盒
|
|||
export function del(data) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/del', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
|
|||
// 判断盒名称是否重复
|
|||
export function caseNameIsRepeat(parameter) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/caseNameIsRepeat', |
|||
method: 'get', |
|||
params: parameter |
|||
}) |
|||
} |
|||
// 判断条形码值是否重复
|
|||
export function barcodeIsRepeat(parameter) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/barcodeIsRepeat', |
|||
method: 'get', |
|||
params: parameter |
|||
}) |
|||
} |
|||
|
|||
// 档案盒列表
|
|||
export function FetchInitCaseList(parameter) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/initCaseList', |
|||
method: 'get', |
|||
params: parameter |
|||
}) |
|||
} |
|||
|
|||
// 档案盒装盒列表
|
|||
export function FetchInitCartoningList(parameter) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/initCartoningList', |
|||
method: 'get', |
|||
params: parameter |
|||
}) |
|||
} |
|||
|
|||
// 装盒
|
|||
export function FetchCartoning(data) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/cartoning', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
// 拆盒
|
|||
export function unpacking(data) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/unpacking', |
|||
method: 'post', |
|||
data: data |
|||
}) |
|||
} |
|||
// 盒详情
|
|||
export function findInCase(params) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/findInCase' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 获取新条码号
|
|||
export function getNewBarcode(params) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/getNewBarcode' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
// 获取新盒号
|
|||
export function getNewCaseCode(params) { |
|||
return request({ |
|||
url: 'api/archivesDeposit/getNewCaseCode' + '?' + qs.stringify(params, { indices: false }), |
|||
method: 'get' |
|||
}) |
|||
} |
|||
|
|||
export default { add, edit, del, unpacking, findInCase, getNewBarcode, getNewCaseCode } |
@ -0,0 +1,368 @@ |
|||
<template> |
|||
<div class="recordList-main"> |
|||
<div class="head-container"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="selectStatus" |
|||
style="margin-right: 10px; width: 110px;" |
|||
placeholder="请选择" |
|||
@change="crud.toQuery" |
|||
> |
|||
<el-option |
|||
v-for="item in stateOptions" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
<el-input |
|||
v-model="crud.query[inputSelect]" |
|||
size="small" |
|||
clearable |
|||
placeholder="请输入搜索关键字" |
|||
style="width: 300px;" |
|||
class="input-prepend filter-item" |
|||
@clear="crud.toQuery" |
|||
@keyup.enter.native="crud.toQuery" |
|||
> |
|||
<el-select slot="prepend" v-model="inputSelect" style="width: 92px"> |
|||
<el-option |
|||
v-for="item in options" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-input> |
|||
<rrOperation /> |
|||
</div> |
|||
<div class="handle-container"> |
|||
<crudOperation :permission="permission"> |
|||
<template v-slot:middle> |
|||
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="!crud.selections.length" @click="handleDel(crud.selections)"> |
|||
<i class="iconfont icon-shanchu" /> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</crudOperation> |
|||
<div> |
|||
<el-button size="mini" :disabled="crud.selections.length === 0" @click="openCase(crud.selections)"> |
|||
<i class="iconfont icon-chaihe" /> |
|||
拆盒 |
|||
</el-button> |
|||
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="bindingTag(crud.selections)"> |
|||
<i class="iconfont icon-bendiguajie" /> |
|||
绑定标签 |
|||
</el-button> |
|||
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="getPrintData"> |
|||
<i class="iconfont icon-dayin" /> |
|||
打印目录 |
|||
</el-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<el-table |
|||
ref="table" |
|||
:data="crud.data" |
|||
style="width: 100%;" |
|||
height="calc(100vh - 346px)" |
|||
@cell-dblclick="tableDoubleClick" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
> |
|||
<el-table-column type="selection" width="55" align="center" /> |
|||
<el-table-column type="index" label="序号" width="55" align="center" /> |
|||
<el-table-column prop="createTime" label="状态" align="center" width="110"> |
|||
<template slot-scope="scope"> |
|||
<span :class="getClassByStorageType(scope.row)">{{ scope.row.storageType | storageTypeStatus }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="depositNum" label="已装" align="center" min-width="56" /> |
|||
<el-table-column prop="caseName" label="盒名称" :show-overflow-tooltip="true" align="center" min-width="150" /> |
|||
<el-table-column prop="tid" label="TID" align="center" min-width="180" /> |
|||
<el-table-column prop="barcode" label="条形码" align="center" min-width="120" /> |
|||
<el-table-column label="存放位置" align="center" min-width="300"> |
|||
<template slot-scope="scope"> |
|||
<span v-if="!scope.row.folderLocationDetails">-</span> |
|||
<span v-else> |
|||
<el-tag effect="dark">{{ scope.row.folderLocationDetails }}</el-tag> |
|||
</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="update_time" width="175" label="操作时间" align="center"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.update_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-if="crud.data.length !== 0" /> |
|||
|
|||
<eForm /> |
|||
<binding-tag-dlg ref="bindingTag" :binding-id="crud.selections[0] && crud.selections[0].id" :binding-type="2" binding-txt="档案盒" @refresh="crud.refresh" /> |
|||
<open-case-dlg ref="openCase" @refresh="crud.refresh" /> |
|||
<detailDialog ref="detailDom" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import CRUD, { presenter, crud } from '@crud/crud' |
|||
import caseCurd from '@/api/archivesKeeping/caseManage' |
|||
import { getNewBarcode, getNewCaseCode } from '@/api/archivesKeeping/caseManage' |
|||
import { FetchFondsDetail } from '@/api/system/fonds' |
|||
import rrOperation from '@crud/RR.operation' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
import pagination from '@crud/Pagination' |
|||
|
|||
import BindingTagDlg from '@/views/components/BindingTagDlg' |
|||
import eForm from './module/form' |
|||
import openCaseDlg from './module/openCaseDlg' |
|||
import detailDialog from './module/detailDialog' |
|||
|
|||
import html2canvas from 'html2canvas' |
|||
import printJS from 'print-js' |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
export default { |
|||
name: 'RecordList', |
|||
filters: { |
|||
storageTypeStatus(val) { |
|||
switch (val) { |
|||
case 0: |
|||
return '未入' |
|||
case 1: |
|||
return '待入' |
|||
case 2: |
|||
return '已入' |
|||
case 3: |
|||
return '待出' |
|||
} |
|||
} |
|||
}, |
|||
components: { pagination, rrOperation, crudOperation, BindingTagDlg, eForm, openCaseDlg, detailDialog }, |
|||
mixins: [presenter(), crud()], |
|||
cruds() { |
|||
return CRUD({ |
|||
url: 'api/archivesDeposit/initCaseList', |
|||
crudMethod: { ...caseCurd }, |
|||
title: '档案盒', |
|||
optShow: { |
|||
add: true, |
|||
edit: true, |
|||
del: false, |
|||
download: false, |
|||
reset: false, |
|||
group: false |
|||
} |
|||
}) |
|||
}, |
|||
props: { |
|||
activeIndex: { |
|||
type: Number, |
|||
default: 0 |
|||
} |
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
permission: { |
|||
add: ['admin', 'caseManage:add'], |
|||
edit: ['admin', 'caseManage:edit'], |
|||
del: ['admin', 'caseManage:del'] |
|||
}, |
|||
selectStatus: null, |
|||
stateOptions: [ |
|||
{ |
|||
value: 1, |
|||
label: '空盒' |
|||
}, |
|||
{ |
|||
value: 2, |
|||
label: '未入库' |
|||
}, |
|||
{ |
|||
value: 3, |
|||
label: '待入库' |
|||
}, |
|||
{ |
|||
value: 4, |
|||
label: '已入库' |
|||
}, { |
|||
value: 5, |
|||
label: '待出库' |
|||
} |
|||
], |
|||
options: [ |
|||
{ value: 'caseCode', label: '盒号' }, |
|||
{ value: 'caseName', label: '盒名称' }, |
|||
{ value: 'tid', label: '电子标签' }, |
|||
{ value: 'barcode', label: '条码' } |
|||
], |
|||
inputSelect: 'caseCode' |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters([ |
|||
'user' |
|||
]) |
|||
}, |
|||
watch: { |
|||
activeIndex: function(newValue, oldValue) { |
|||
} |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
getClassByStorageType(row) { |
|||
if (row.storageType === 0) { // 未入 |
|||
return 'row-state cancel-state' |
|||
} else if (row.storageType === 1) { // 待入 |
|||
return 'row-state ing-state' |
|||
} else if (row.storageType === 2) { // 已入 |
|||
return 'row-state end-state' |
|||
} else if (row.storageType === 3) { // 待出 |
|||
return 'row-state ing-state' |
|||
} |
|||
}, |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
this.crud.query.storageType = this.selectStatus |
|||
}, |
|||
// 新增 - 判断当前节点类型 |
|||
[CRUD.HOOK.beforeToAdd](crud, form, btn) { |
|||
getNewBarcode().then(res => { |
|||
form.barcode = res |
|||
}) |
|||
getNewCaseCode().then(res => { |
|||
form.caseCode = res |
|||
}) |
|||
if (this.user.fonds.id) { |
|||
FetchFondsDetail({ id: this.user.fonds.id }).then((res) => { |
|||
form.caseFonds = res.fondsNo |
|||
}).catch(err => { |
|||
console.log(err) |
|||
}) |
|||
} |
|||
}, |
|||
[CRUD.HOOK.beforeToCU](crud, form, btn) { |
|||
console.log(form) |
|||
}, |
|||
// 提交前的验证 |
|||
[CRUD.HOOK.afterValidateCU](crud) { |
|||
console.log(crud.form) |
|||
return true |
|||
}, |
|||
resetQuery() { |
|||
}, |
|||
tableDoubleClick(row) { |
|||
}, |
|||
handleCloseDialog(done) { |
|||
}, |
|||
// 打印 |
|||
getPrintData() { |
|||
const params = { |
|||
caseId: this.crud.selections[0].id |
|||
} |
|||
this.crud.crudMethod.findInCase(params).then(res => { |
|||
if (res) { |
|||
this.printData = res.archives |
|||
} |
|||
this.isHidden = true |
|||
this.$nextTick(() => { |
|||
this.printFn() |
|||
this.isHidden = false |
|||
}) |
|||
}) |
|||
}, |
|||
printFn() { |
|||
const printContent = this.$refs.printId |
|||
// 获取dom 宽度 高度 |
|||
const width = printContent.clientWidth |
|||
const height = printContent.clientHeight |
|||
// 创建一个canvas节点 |
|||
const canvas = document.createElement('canvas') |
|||
|
|||
const scale = 4 // 定义任意放大倍数,支持小数;越大,图片清晰度越高,生成图片越慢。 |
|||
canvas.width = width * scale // 定义canvas 宽度 * 缩放 |
|||
canvas.height = height * scale // 定义canvas高度 *缩放 |
|||
canvas.style.width = width * scale + 'px' |
|||
canvas.style.height = height * scale + 'px' |
|||
canvas.getContext('2d').scale(scale, scale) // 获取context,设置scale |
|||
|
|||
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop // 获取滚动轴滚动的长度 |
|||
const scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft // 获取水平滚动轴的长度 |
|||
|
|||
html2canvas(printContent, { |
|||
canvas, |
|||
backgroundColor: null, |
|||
useCORS: true, |
|||
windowHeight: document.body.scrollHeight, |
|||
scrollX: -scrollLeft, // 解决水平偏移问题,防止打印的内容不全 |
|||
scrollY: -scrollTop |
|||
}).then((canvas) => { |
|||
const url = canvas.toDataURL('image/png') |
|||
printJS({ |
|||
printable: url, |
|||
type: 'image', |
|||
documentTitle: '', // 标题 |
|||
style: '@page{size:auto;margin: 0cm 1cm 0cm 1cm;}' // 去除页眉页脚 |
|||
}) |
|||
}).catch(err => { |
|||
console.error(err) |
|||
}) |
|||
}, |
|||
bindingTag(data) { |
|||
if (data[0].tid) { |
|||
this.$refs.bindingTag.isBinding = true |
|||
this.$refs.bindingTag.tidCode = data[0].tid |
|||
} |
|||
this.$refs.bindingTag.bindingVisible = true |
|||
}, |
|||
openCase(data) { |
|||
const isBool = data.every(item => item.storageType === 0) |
|||
if (isBool) { |
|||
const bool = data.some(item => item.depositNum === 0) |
|||
if (bool) { |
|||
this.$message({ |
|||
message: '存在空档案盒不可拆盒!', |
|||
type: 'warning' |
|||
}) |
|||
} else { |
|||
this.$refs.openCase.openCaseVisible = true |
|||
this.$refs.openCase.caseData = data |
|||
} |
|||
} else { |
|||
this.msgVisible = true |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.head-container{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.head-search{ |
|||
margin-bottom: 0 !important; |
|||
} |
|||
.handle-container{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.crud-opts{ |
|||
margin-right: 80px; |
|||
} |
|||
} |
|||
} |
|||
::v-deep .el-pagination{ |
|||
margin: 24px 0 10px 0 !important |
|||
} |
|||
|
|||
::v-deep .input-prepend .el-input__inner{ |
|||
padding-left: 100px; |
|||
} |
|||
.filter-rfid{ |
|||
border: 1px solid #0348F3 !important; |
|||
background-color: #fff !important; |
|||
color: #0348F3 !important; |
|||
} |
|||
</style> |
@ -0,0 +1,107 @@ |
|||
<template> |
|||
<div> |
|||
<el-dialog title="档案盒详情" :visible.sync="detailVisible"> |
|||
<span class="dialog-right-top" /> |
|||
<span class="dialog-left-bottom" /> |
|||
<div class="setting-dialog"> |
|||
<div style="padding:0 10px"> |
|||
<div class="dpflex"> |
|||
<p class="left"><span class="color-blue">盒名称:</span><span class="color-white">{{ rowData.caseName }}</span></p> |
|||
<p class="right"><span class="color-blue">盒条码:</span><span class="color-white">{{ rowData.barcode }}</span></p> |
|||
</div> |
|||
<div class="dpflex"> |
|||
<p class="left"><span class="color-blue">存放位置:</span> |
|||
<span class="color-white"> |
|||
<div v-if="!rowData.folderLocationDetails">-</div> |
|||
<div v-else> |
|||
<el-tag effect="dark">{{ rowData.folderLocationDetails }}</el-tag> |
|||
</div> |
|||
</span> |
|||
</p> |
|||
<p class="right"><span class="color-blue">TID:</span><span class="color-white">{{ rowData.tid }}</span></p> |
|||
</div> |
|||
<p class="left"><span class="color-blue">创建时间:</span><span class="color-white">{{ rowData.create_time | parseTime }}</span></p> |
|||
</div> |
|||
<el-table :data="tableData" style="margin-top:15px;" height="342px"> |
|||
<el-table-column type="index" label="序号" align="center" width="80" /> |
|||
<el-table-column prop="docNo" label="发文字号" show-overflow-tooltip width="140" align="center" /> |
|||
<el-table-column prop="child" label="子条数目" align="center" width="100" /> |
|||
<el-table-column prop="categoryType" label="门类级别" align="center" width="100"> |
|||
<template slot-scope="scope"> |
|||
<span v-if="scope.row.categoryType === 5" style="width:56px">文件级</span> |
|||
<span v-if="scope.row.categoryType === 4" style="width:56px">卷内级</span> |
|||
<span v-if="scope.row.categoryType === 3" style="width:56px">案卷级</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="categoryName" label="门类名称" align="center" width="140" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="fondsNo" label="全宗号" align="center" width="180" /> |
|||
<el-table-column prop="archiveNo" label="档号" align="center" width="220" /> |
|||
<el-table-column prop="archiveYear" label="归档年度" align="center" width="150" /> |
|||
<el-table-column prop="maintitle" :show-overflow-tooltip="true" align="center" label="题名" width="180" /> |
|||
<el-table-column prop="securityClass" label="保密程度" align="center" width="150" /> |
|||
<el-table-column prop="department" label="部门名称" align="center" width="150" /> |
|||
<el-table-column prop="caseName" label="盒名称" :show-overflow-tooltip="true" align="center" width="190" /> |
|||
<el-table-column prop="folderLocationDetails" align="center" label="所在位置" width="300"> |
|||
<template slot-scope="scope"> |
|||
<span v-if="!scope.row.folderLocationDetails">-</span> |
|||
<span v-else> |
|||
<el-tag effect="dark">{{ scope.row.folderLocationDetails }}</el-tag> |
|||
</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="create_time" align="center" label="创建时间" width="150"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.create_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
detailVisible: false, |
|||
rowData: {}, |
|||
tableData: [] |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep .el-dialog{ |
|||
width: 950px; |
|||
// height: 520px; |
|||
} |
|||
::v-deep .el-dialog__body{ |
|||
padding: 20px 0; |
|||
} |
|||
::v-deep .el-dialog .el-dialog__header .el-dialog__close::before{ |
|||
position: absolute; |
|||
right: -160px; |
|||
bottom: -10px; |
|||
} |
|||
p{ |
|||
margin-bottom: 24px; |
|||
} |
|||
.dpflex{ |
|||
display: flex; |
|||
.left{ |
|||
width: 400px; |
|||
} |
|||
} |
|||
.color-blue{ |
|||
width: 86px; |
|||
display: inline-block; |
|||
text-align: right; |
|||
color: #339CFF; |
|||
} |
|||
.color-white{ |
|||
display: inline-block; |
|||
color: #fff; |
|||
} |
|||
</style> |
@ -0,0 +1,248 @@ |
|||
<template> |
|||
<el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title"> |
|||
<span class="dialog-right-top" /> |
|||
<span class="dialog-left-bottom" /> |
|||
<div class="setting-dialog"> |
|||
<el-form ref="form" :model="form" inline :rules="rules" size="small" label-width="105px"> |
|||
<el-row> |
|||
<el-form-item label="盒号" prop="caseCode"> |
|||
<el-input v-model="form.caseCode" placeholder="请输入" disabled /> |
|||
</el-form-item> |
|||
</el-row> |
|||
<el-form-item label="盒名称" prop="caseName"> |
|||
<el-input v-model="form.caseName" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="规格" prop="caseSpecs"> |
|||
<el-select |
|||
v-model="form.caseSpecs" |
|||
placeholder="请选择" |
|||
style="width: 225px;" |
|||
> |
|||
<el-option |
|||
v-for="item in specsOptions" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="全宗" prop="caseFonds"> |
|||
<el-select v-model="form.caseFonds" placeholder="请选择" style="width: 225px;"> |
|||
<el-option |
|||
v-for="(item,index) in fondsOptions" |
|||
:key="index" |
|||
:label="item.fondsName" |
|||
:value="item.fondsNo" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="年度" prop="caseYear"> |
|||
<el-input v-model="form.caseYear" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="保管期限" prop="caseRetention"> |
|||
<el-select |
|||
v-model="form.caseRetention" |
|||
placeholder="请选择" |
|||
style="width: 225px;" |
|||
> |
|||
<el-option |
|||
v-for="item in retentionOptions" |
|||
:key="item.dictionaryName" |
|||
:label="item.dictionaryName" |
|||
:value="item.dictionaryName" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="密级" prop="caseClass"> |
|||
<el-select |
|||
v-model="form.caseClass" |
|||
placeholder="请选择" |
|||
style="width: 225px;" |
|||
> |
|||
<el-option |
|||
v-for="item in calssOptions" |
|||
:key="item.dictionaryName" |
|||
:label="item.dictionaryName" |
|||
:value="item.dictionaryName" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="开始件号" prop="startItemNo"> |
|||
<el-input v-model="form.startItemNo" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="结束件号" prop="endItemNo"> |
|||
<el-input v-model="form.endItemNo" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="装盒人" prop="packing"> |
|||
<el-input v-model="form.packing" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="装盒日期" prop="packDate"> |
|||
<el-date-picker |
|||
v-model="form.packDate" |
|||
type="date" |
|||
placeholder="选择日期" |
|||
style="width: 225px;" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="检查人" prop="check"> |
|||
<el-input v-model="form.check" placeholder="请输入" /> |
|||
</el-form-item> |
|||
<el-form-item label="检查日期" prop="checkDate"> |
|||
<el-date-picker |
|||
v-model="form.checkDate" |
|||
type="date" |
|||
placeholder="选择日期" |
|||
style="width: 225px;" |
|||
/> |
|||
</el-form-item> |
|||
<el-row> |
|||
<el-form-item label="电子标签" prop="tid"> |
|||
<el-input v-model="form.tid" style="width: 568px;" placeholder="请输入" disabled /> |
|||
</el-form-item> |
|||
</el-row> |
|||
<el-row> |
|||
<el-form-item label="条码" prop="barcode"> |
|||
<el-input v-model="form.barcode" style="width: 568px;" placeholder="请输入" disabled /> |
|||
</el-form-item> |
|||
</el-row> |
|||
<el-row> |
|||
<el-form-item label="备注" prop="caseNotes"> |
|||
<el-input v-model="form.caseNotes" type="textarea" :rows="2" style="width: 568px;" placeholder="请输入" /> |
|||
</el-form-item> |
|||
</el-row> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button class="auto-gx-btn"><i class="iconfont icon-zidonggengxin" />自动更新</el-button> |
|||
<el-button type="text" @click="crud.cancelCU">取消</el-button> |
|||
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU"> |
|||
保存 |
|||
</el-button> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import { form } from '@crud/crud' |
|||
import { caseNameIsRepeat, barcodeIsRepeat } from '@/api/archivesKeeping/caseManage' |
|||
import { FetchDictionaryTree } from '@/api/system/dict' |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
|
|||
const defaultForm = { |
|||
id: null, |
|||
caseCode: null, |
|||
caseName: null, |
|||
caseSpecs: null, |
|||
caseFonds: null, |
|||
caseYear: null, |
|||
caseRetention: null, |
|||
caseClass: null, |
|||
startItemNo: null, |
|||
endItemNo: null, |
|||
tid: null, |
|||
barcode: null, |
|||
caseNotes: null |
|||
} |
|||
export default { |
|||
mixins: [form(defaultForm)], |
|||
data() { |
|||
var checkCaseName = (rule, value, callback) => { |
|||
if (!value) { |
|||
callback(new Error('请输入盒名称')) |
|||
} else { |
|||
caseNameIsRepeat({ caseId: this.form.id, caseName: value }).then((res) => { |
|||
if (res) { |
|||
callback(new Error('盒名称重复')) |
|||
} else { |
|||
callback() |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
var checkBarcode = (rule, value, callback) => { |
|||
if (value) { |
|||
barcodeIsRepeat({ caseId: this.form.id, barcode: value }).then((res) => { |
|||
if (res) { |
|||
callback(new Error('条形码重复')) |
|||
} else { |
|||
callback() |
|||
} |
|||
}) |
|||
} else { |
|||
callback() |
|||
} |
|||
} |
|||
return { |
|||
specsOptions: [ |
|||
{ |
|||
label: '20mm', |
|||
value: 20 |
|||
}, |
|||
{ |
|||
label: '30mm', |
|||
value: 30 |
|||
}, |
|||
{ |
|||
label: '40mm', |
|||
value: 40 |
|||
}, |
|||
{ |
|||
label: '50mm', |
|||
value: 50 |
|||
} |
|||
], |
|||
fondsOptions: [], |
|||
retentionOptions: [], |
|||
calssOptions: [], |
|||
rules: { |
|||
caseCode: [{ required: true, message: '盒号不可为空', trigger: 'blur' }], |
|||
caseName: [{ validator: checkCaseName, trigger: 'blur' }], |
|||
barcode: [{ validator: checkBarcode, trigger: 'blur' }] |
|||
} |
|||
} |
|||
}, |
|||
|
|||
created() { |
|||
|
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
this.getDictsList() |
|||
}, |
|||
methods: { |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
}) |
|||
}, |
|||
getDictsList() { |
|||
FetchDictionaryTree().then((res) => { |
|||
const filterCodes = ['retention'] |
|||
const filteredItems = JSON.parse(JSON.stringify(res)).filter(item => filterCodes.includes(item.dictionaryCode)) |
|||
this.retentionOptions = filteredItems[0].childDictionarys |
|||
|
|||
const filterCodes2 = ['security_class'] |
|||
const filteredItems2 = JSON.parse(JSON.stringify(res)).filter(item => filterCodes2.includes(item.dictionaryCode)) |
|||
this.calssOptions = filteredItems2[0].childDictionarys |
|||
}).catch(err => { |
|||
console.log(err) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep .el-dialog .el-dialog__body .el-form-item:nth-child(odd){ |
|||
margin-right: 0 !important; |
|||
} |
|||
.auto-gx-btn{ |
|||
width: 104px; |
|||
line-height: 30px; |
|||
border: 1px solid #0348F3; |
|||
color: #0348F3; |
|||
} |
|||
::v-deep .dialog-footer{ |
|||
margin-top: 30px 22px 20px 0 !important; |
|||
} |
|||
</style> |
@ -0,0 +1,54 @@ |
|||
<template> |
|||
<el-dialog :close-on-click-modal="false" title="拆盒" :visible.sync="openCaseVisible"> |
|||
<span class="dialog-right-top" /> |
|||
<span class="dialog-left-bottom" /> |
|||
<div class="setting-dialog"> |
|||
<div class="dialog-delt"> |
|||
<p><span>确定拆除当前选择的所有档案盒吗?</span></p> |
|||
<p class="delt-tip"> |
|||
<svg-icon icon-class="tishijinggao" /> |
|||
<span>提示:1.确定拆盒后,当前盒号下绑定的所有档案数据将一并清除;</span> |
|||
<span>2.若案卷存在多个盒,选择其中一个分盒则自动拆掉该案卷的全部档案盒</span> |
|||
</p> |
|||
</div> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="primary" @click.native="handleConfirm">确定</el-button> |
|||
<!-- <el-button @click.native="handleCancel">取消</el-button> --> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import { unpacking } from '@/api/archivesManage/caseManage' |
|||
import { crud } from '@crud/crud' |
|||
|
|||
export default { |
|||
mixins: [crud()], |
|||
data() { |
|||
return { |
|||
caseData: [], |
|||
openCaseVisible: false |
|||
} |
|||
}, |
|||
methods: { |
|||
handleConfirm() { |
|||
// console.log(this.caseData) |
|||
const caseIds = this.caseData.map(item => item.id) |
|||
unpacking(JSON.stringify(caseIds)).then(res => { |
|||
this.$message.success('拆盒成功!') |
|||
this.caseData = [] |
|||
this.openCaseVisible = false |
|||
this.crud.refresh() |
|||
}) |
|||
}, |
|||
handleCancel() { |
|||
this.caseData = [] |
|||
this.openCaseVisible = false |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style rel="stylesheet/scss" lang="scss" scoped> |
|||
</style> |
@ -0,0 +1,57 @@ |
|||
<template> |
|||
<div class="app-container tab-container"> |
|||
<div class="tab-content"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<span class="right-bottom-line" /> |
|||
<ul class="tab-nav"> |
|||
<li :class="{ 'active-tab-nav': activeIndex == 0 }" @click="changeActiveTab(0)">档案盒列表<i /></li> |
|||
<li :class="{ 'active-tab-nav': activeIndex == 1 }" @click="changeActiveTab(1)">使用记录<i /></li> |
|||
<!-- 最右侧装饰img --> |
|||
<span class="tab-right-img" /> |
|||
</ul> |
|||
<!-- <RecordList :active-index="activeIndex" @handleTab="getRecordId" /> --> |
|||
<component :is="comName" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import caseList from './caseList/index' |
|||
import caseLog from './module/caseLog' |
|||
export default { |
|||
name: 'CaseManage', |
|||
components: { |
|||
caseList, |
|||
caseLog |
|||
}, |
|||
data() { |
|||
return { |
|||
activeIndex: 0, |
|||
currentRecordId: null |
|||
} |
|||
}, |
|||
computed: { |
|||
comName: function() { |
|||
if (this.activeIndex === 0) { |
|||
return 'caseList' |
|||
} else if (this.activeIndex === 1) { |
|||
return 'caseLog' |
|||
} |
|||
return 'caseList' |
|||
} |
|||
}, |
|||
methods: { |
|||
getRecordId(index, id) { |
|||
this.changeActiveTab(index) |
|||
this.currentRecordId = id |
|||
}, |
|||
changeActiveTab(data) { |
|||
this.activeIndex = data |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
</style> |
@ -0,0 +1,197 @@ |
|||
<template> |
|||
<div class="recordList-main"> |
|||
<div class="head-container"> |
|||
<div class="head-search"> |
|||
<el-select |
|||
v-model="selectStatus" |
|||
style="margin-right: 10px; width: 110px;" |
|||
placeholder="请选择" |
|||
@change="crud.toQuery" |
|||
> |
|||
<el-option |
|||
v-for="item in stateOptions" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
<el-input |
|||
v-model="crud.query[inputSelect]" |
|||
size="small" |
|||
clearable |
|||
placeholder="请输入搜索关键字" |
|||
style="width: 300px;" |
|||
class="input-prepend filter-item" |
|||
@clear="crud.toQuery" |
|||
@keyup.enter.native="crud.toQuery" |
|||
> |
|||
<el-select slot="prepend" v-model="inputSelect" style="width: 92px"> |
|||
<el-option |
|||
v-for="item in options" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value" |
|||
/> |
|||
</el-select> |
|||
</el-input> |
|||
<rrOperation /> |
|||
</div> |
|||
<div class="handle-container"> |
|||
<el-button slot="reference" size="mini" :disabled="!crud.selections.length"> |
|||
<i class="iconfont icon-daochu" /> |
|||
导出 |
|||
</el-button> |
|||
</div> |
|||
</div> |
|||
<el-table |
|||
ref="table" |
|||
:data="crud.data" |
|||
style="width: 100%;" |
|||
height="calc(100vh - 346px)" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
> |
|||
<el-table-column type="selection" width="55" align="center" /> |
|||
<el-table-column type="index" label="序号" width="55" align="center" /> |
|||
<el-table-column prop="operationType" label="类型" align="center" width="110"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.operationType === 1 ? '装盒' : '拆盒' }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="caseCode" label="盒号" align="center" min-width="120" /> |
|||
<el-table-column prop="caseName" label="盒名称" :show-overflow-tooltip="true" align="center" min-width="150" /> |
|||
<el-table-column prop="tid" label="电子标签" align="center" min-width="180" /> |
|||
<el-table-column prop="barcode" label="条形码" align="center" min-width="120" /> |
|||
<el-table-column prop="create_by" label="操作人" align="center" min-width="300" /> |
|||
<el-table-column prop="create_time" width="175" label="操作时间" align="center"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.create_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-if="crud.data.length !== 0" /> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import CRUD, { presenter, crud } from '@crud/crud' |
|||
import caseCurd from '@/api/archivesKeeping/caseManage' |
|||
import rrOperation from '@crud/RR.operation' |
|||
import pagination from '@crud/Pagination' |
|||
|
|||
export default { |
|||
name: 'RecordList', |
|||
filters: { |
|||
storageTypeStatus(val) { |
|||
switch (val) { |
|||
case 0: |
|||
return '未入' |
|||
case 1: |
|||
return '待入' |
|||
case 2: |
|||
return '已入' |
|||
case 3: |
|||
return '待出' |
|||
} |
|||
} |
|||
}, |
|||
components: { pagination, rrOperation }, |
|||
mixins: [presenter(), crud()], |
|||
cruds() { |
|||
return CRUD({ |
|||
url: 'api/archivesDeposit/initCaseLog', |
|||
crudMethod: { ...caseCurd }, |
|||
title: '档案盒记录', |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false, |
|||
reset: false, |
|||
group: false |
|||
} |
|||
}) |
|||
}, |
|||
props: { |
|||
activeIndex: { |
|||
type: Number, |
|||
default: 0 |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
selectStatus: 0, |
|||
stateOptions: [ |
|||
{ |
|||
value: 0, |
|||
label: '全部' |
|||
}, |
|||
{ |
|||
value: 1, |
|||
label: '装盒' |
|||
}, |
|||
{ |
|||
value: 2, |
|||
label: '拆盒' |
|||
} |
|||
], |
|||
options: [ |
|||
{ value: 'caseCode', label: '盒号' }, |
|||
{ value: 'caseName', label: '盒名称' }, |
|||
{ value: 'tid', label: '电子标签' }, |
|||
{ value: 'barcode', label: '条码' } |
|||
], |
|||
inputSelect: 'caseCode' |
|||
} |
|||
}, |
|||
computed: { |
|||
// ...mapGetters([ |
|||
// 'user' |
|||
// ]) |
|||
}, |
|||
watch: { |
|||
activeIndex: function(newValue, oldValue) { |
|||
} |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
this.crud.query.storageType = this.selectStatus |
|||
}, |
|||
resetQuery() { |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.head-container{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.head-search{ |
|||
margin-bottom: 0 !important; |
|||
} |
|||
.handle-container{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
.crud-opts{ |
|||
margin-right: 80px; |
|||
} |
|||
} |
|||
} |
|||
::v-deep .el-pagination{ |
|||
margin: 24px 0 10px 0 !important |
|||
} |
|||
|
|||
::v-deep .input-prepend .el-input__inner{ |
|||
padding-left: 100px; |
|||
} |
|||
.filter-rfid{ |
|||
border: 1px solid #0348F3 !important; |
|||
background-color: #fff !important; |
|||
color: #0348F3 !important; |
|||
} |
|||
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue