Browse Source

出入库管理-入库以及档案详情

master
z_yu 3 years ago
parent
commit
bc191b6eb5
  1. 11
      src/api/archivesManage/outInStorage.js
  2. 36
      src/views/archivesManage/outInStorage/inStorage/index.vue
  3. 284
      src/views/archivesManage/outInStorage/inStorage/module/inDialog.vue
  4. 42
      src/views/archivesManage/outInStorage/module/detailDialog.vue
  5. 1
      src/views/components/DeviceTree.vue

11
src/api/archivesManage/outInStorage.js

@ -85,6 +85,14 @@ export function exportStorageLogList(params) {
})
}
// 出入库记录 导出
export function initStorageDetailes(params) {
return request({
url: 'api/storage/initStorageDetailes' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default {
initCaseByArchives,
isOccupy,
@ -95,5 +103,6 @@ export default {
collectConfirm,
initStorageLogDetailes,
initStorageLogList,
grantConfirm
grantConfirm,
initStorageDetailes
}

36
src/views/archivesManage/outInStorage/inStorage/index.vue

@ -97,7 +97,7 @@ import pagination from '@crud/Pagination'
import detailDialog from '../module/detailDialog.vue'
import inDialog from './module/inDialog.vue'
import handDialog from './module/handDialog.vue'
import { initCaseByArchives, readyCollectConfirm, collectConfirm, initStorageLogDetailes, initStorageLogList } from '@/api/archivesManage/outInStorage'
import { initCaseByArchives, readyCollectConfirm, collectConfirm, initStorageDetailes } from '@/api/archivesManage/outInStorage'
// import { getDetail } from '../module/outIn'
export default {
name: 'InStorage',
@ -148,23 +148,31 @@ export default {
this.$refs.table.toggleRowSelection(row) //
},
//
async handleDbClick(row) {
handleDbClick(row) {
console.log(1)
this.$refs.detailDom.rowData = row
let logId = null
// logId
await initStorageLogList().then(res => {
const arr = res.content.filter(item => item.caseId === row.id)
const logIdArr = arr.map(item => { return item.id })
logId = Math.max(...logIdArr)
})
const params = {
'logId': logId
caseId: row.id
}
//
initStorageLogDetailes(params).then(res => {
this.$refs.detailDom.tableData = res
initStorageDetailes(params).then(res => {
this.$refs.detailDom.tableData = res.archivesSummaries
this.$refs.detailDom.detailVisible = true
})
this.$refs.detailDom.detailVisible = true
// let logId = null
// logId
// initStorageLogList().then(res => {
// const arr = res.content.filter(item => item.caseId === row.id)
// const logIdArr = arr.map(item => { return item.id })
// logId = Math.max(...logIdArr)
// })
// const params = {
// 'logId': logId
// }
//
// initStorageLogDetailes(params).then(res => {
// this.$refs.detailDom.tableData = res
// })
// this.$refs.detailDom.detailVisible = true
},
selectionChangeHandler(val) {
this.selections = val

284
src/views/archivesManage/outInStorage/inStorage/module/inDialog.vue

@ -1,7 +1,7 @@
<template>
<div>
<!-- 入库状态下 -->
<el-dialog title="入库" class="in-dialog" :visible.sync="dialogVisible" :close-on-click-modal="false" @close="handleClose">
<el-dialog title="入库" class="in-dialog" :visible.sync="dialogVisible" :close-on-click-modal="false" @close="handleClose" @open="open">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
@ -13,7 +13,7 @@
<div class="content-left">
<!-- <el-tree ref="archivesTree" v-loading="crud.loading" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick" /> -->
<!--树状结构-->
<device-tree @nodeClick="handleNodeClick" />
<device-tree ref="deviceTree" @nodeClick="handleNodeClick" />
</div>
<!-- 右侧 -->
<div class="content-right">
@ -29,25 +29,25 @@
</div>
<div class="frame-item item-line">
<span></span>
<el-select v-model="numArr[index].colNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="childData[index].colNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in columnOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="frame-item item-line">
<span></span>
<el-select v-model="numArr[index].sectionNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="childData[index].sectionNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in partOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="frame-item item-line">
<span></span>
<el-select v-model="numArr[index].levelNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="childData[index].levelNum" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in rowOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="frame-item item-line">
<span>方向</span>
<el-select v-model="numArr[index].direction" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-select v-model="childData[index].direction" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in directionOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
@ -60,7 +60,7 @@
<div>
<p v-show="btnChecked[index]===2" class="success-msg">
<i class="iconfont icon-tishichenggong" />
<span class="success-text">位置已核对成功,层位名称{{ fieldNum }}{{ numArr[index].colNum }}{{ numArr[index].sectionNum }}{{ numArr[index].levelNum }}{{ (numArr[index].direction==='1'? '左边':'')||(numArr[index].direction==='2'?'右边':'') }}</span>
<span class="success-text">位置已核对成功,层位名称{{ fieldNum }}{{ childData[index].colNum }}{{ childData[index].sectionNum }}{{ childData[index].levelNum }}{{ (childData[index].direction==='1'? '左边':'')||(childData[index].direction==='2'?'右边':'') }}</span>
</p>
<p v-show="btnChecked[index]===3" class="fail-msg">
<i class="iconfont icon-tishijinggao" />
@ -68,12 +68,14 @@
</p>
</div>
</li>
<li style="text-align:center;padding:20px 0"><el-button type="primary" :loading="crud.downloadLoading" :disabled="!(btnChecked.every(item=>item===2))" class="btn-save" @click="handleSave">保存</el-button></li>
<li style="text-align:center;padding:20px 0">
<el-button type="primary" :loading="crud.downloadLoading" :disabled="!(btnChecked.every(item=>item===2))" class="btn-save" @click="handleSave">保存</el-button>
</li>
<!-- <li style="text-align:center;padding:20px 0"><el-button type="primary" class="btn-save" @click="handleSave">保存</el-button></li> -->
</ul>
<!-- 回转柜 -->
<ul v-if="cnName==='回转柜'">
<li v-for="(eItem,index) in childData" :key="eItem.id" class="box">
<li v-for="(eItem, index) in childData" :key="eItem.id" class="box">
<p class="case-name">盒名称{{ eItem.caseName }}</p>
<div class="frame-content head-container">
<div class="frame-item">
@ -82,14 +84,14 @@
</div>
<div class="frame-item item-line">
<span></span>
<el-select v-model="numArr[index].cabLevel" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="childData[index].cabLevel" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in rowOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="frame-item item-line">
<span></span>
<el-select v-model="numArr[index].cabCol" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in numOptions" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="childData[index].cabCol" class="filter-item" style="width: 86px;" @change="selectChange(index)">
<el-option v-for="item in columnOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="state-btn" style="padding-right:32px;margin-bottom:14px">
@ -101,7 +103,7 @@
<div>
<p v-show="btnChecked[index]===2" class="success-msg">
<i class="iconfont icon-tishichenggong" />
<span class="success-text">位置已核对成功,层位名称{{ fieldNum }}{{ numArr[index].cabLevel }}{{ numArr[index].cabCol }}</span>
<span class="success-text">位置已核对成功,层位名称{{ fieldNum }}{{ childData[index].cabLevel }}{{ childData[index].cabCol }}</span>
</p>
<p v-show="btnChecked[index]===3" class="fail-msg">
<i class="iconfont icon-tishijinggao" />
@ -109,9 +111,10 @@
</p>
</div>
</li>
<li style="text-align:center;padding:20px 0"><el-button type="primary" :disabled="!(btnChecked.every(item=>item===2))" class="btn-save" @click="handleSave">保存</el-button></li>
<li style="text-align:center;padding:20px 0">
<el-button type="primary" :disabled="!(btnChecked.every(item=>item===2))" class="btn-save" @click="handleSave">保存</el-button>
</li>
</ul>
</div>
</div>
</div>
@ -131,6 +134,7 @@
<script>
import DeviceTree from '@/views/components/DeviceTree'
import { isOccupy, collect } from '@/api/archivesManage/outInStorage'
import { getDesecabinetById, getRotarycabinetById } from '@/api/storeManage/deviceManage/device'
import { crud } from '@crud/crud'
// import qs from 'qs'
@ -141,21 +145,20 @@ export default {
return {
dialogVisible: false,
singleVisible: false,
childData: [],
cnName: '',
childData: [], //
fieldNum: 1, //
btnChecked: [], //
numArr: [], //
numOptions: [
{ value: '1', label: '1' },
{ value: '2', label: '2' }
],
columnOptions: [], // -,-
partOptions: [], // -
rowOptions: [], // -,-
directionOptions: [
{ value: '1', label: '左边' },
{ value: '2', label: '右边' }
],
isOccupy: [],
deviceType: null // 1 2
deviceType: null, // 1 2
cnName: '', //
deviceId: '' // id
}
},
computed: {
@ -164,23 +167,58 @@ export default {
methods: {
//
handleNodeClick(data) {
this.deviceId = data.id
this.cnName = data.deviceTypeId.name
console.log(data)
//
this.btnChecked = this.childArr(1)
this.isOccupy = this.childArr('')
this.isOccupy = this.childArr({})
const params = { deviceInfoId: data.id }
//
for (let index = 0; index < this.childData.length; index++) {
this.childData[index].colNum = ''
this.childData[index].sectionNum = ''
this.childData[index].levelNum = ''
this.childData[index].direction = ''
this.childData[index].cabLevel = ''
this.childData[index].cabCol = ''
}
//
if (data.cnName === '密集架') {
const obj = { colNum: '', sectionNum: '', levelNum: '', direction: '' }
this.numArr = this.childArr(obj)
if (data.deviceTypeId.name === '密集架') {
this.deviceType = 1
} else if (data.cnName === '回转柜') {
const obj = { cabCol: '', cabLevel: '' }
this.numArr = this.childArr(obj)
getDesecabinetById(params).then(res => {
this.fieldNum = res.areaNo
this.columnOptions.splice(0, this.columnOptions.length)
for (let i = res.firstColumnNo; i < res.firstColumnNo + res.sumColumnNo; i++) {
this.columnOptions.push({ value: i, label: i })
}
this.partOptions.splice(0, this.partOptions.length)
for (let i = 1; i <= res.partNo; i++) {
this.partOptions.push({ value: i, label: i })
}
this.rowOptions.splice(0, this.rowOptions.length)
for (let i = 1; i <= res.rowNo; i++) {
this.rowOptions.push({ value: i, label: i })
}
})
} else if (data.deviceTypeId.name === '回转柜') {
// const obj = { cabCol: '', cabLevel: '' }
this.deviceType = 2
// id
getRotarycabinetById(params).then(res => {
this.fieldNum = res.cupboardNo
this.rowOptions.splice(0, this.rowOptions.length)
for (let i = 1; i <= res.rowNo; i++) {
this.rowOptions.push({ value: i, label: i })
}
this.columnOptions.splice(0, this.columnOptions.length)
for (let i = 1; i <= res.columnRowNo; i++) {
this.columnOptions.push({ value: i, label: i })
}
})
}
},
//
// -----
childArr(str) {
const arr = []
for (let i = 0; i < this.childData.length; i++) {
@ -193,23 +231,33 @@ export default {
},
//
async selectChange(index) {
const obj = this.numArr[index]
let bool = 0
for (const key in obj) { //
if (!obj[key]) {
bool++
}
}
if (bool === 0) {
const params = {
// deviceId: 'FA0B05E2728EA8129A9F15', //
// position: '1-1-3-4-1',
deviceId: '3734A977C269ABEF6E284C', //
position: '1-5-6-2-1',
deviceType: this.deviceType
const obj = this.childData[index]
// let bool = 0
// for (const key in obj) { //
// if (!obj[key]) {
// bool++
// }
// }
// if ((obj.colNum && obj.sectionNum && obj.levelNum && obj.direction) || (obj.cabLevel && obj.cabCol)) {
// bool++
// }
if ((obj.colNum && obj.sectionNum && obj.levelNum && obj.direction) || (obj.cabLevel && obj.cabCol)) {
let params
//
if (this.deviceType === 1) {
params = {
deviceId: this.deviceId, //
position: this.fieldNum + '-' + obj.colNum + '-' + obj.sectionNum + '-' + obj.levelNum + '-' + obj.direction,
deviceType: this.deviceType
}
} else {
params = {
deviceId: this.deviceId, //
position: this.fieldNum + '-' + obj.cabLevel + '-' + obj.cabCol,
deviceType: this.deviceType
}
}
const res = await isOccupy(params).then(res => {
console.log(res, 'isOccupy--res')
return res
})
//
@ -220,13 +268,11 @@ export default {
this.btnChecked[index] = 3
}
}
console.log(this.btnChecked, this.isOccupy, 'check')
this.$forceUpdate()
},
//
handleSave() {
// const caseId = this.childData.map(item => item.id)
// console.log(caseId, '---caseId')
this.crud.downloadLoading = true
const params = []
this.isOccupy.forEach((item, i) => {
@ -238,7 +284,6 @@ export default {
obj.shelfId = item.id
params.push(obj)
})
console.log(params, '-----------')
collect(params).then(data => {
console.log(data, 'data')
if (data) {
@ -247,152 +292,157 @@ export default {
this.crud.refresh()
this.cnName = null
}
this.crud.downloadLoading = false
})
this.crud.downloadLoading = false
},
handleClose() {
this.cnName = null
},
open() {
if (this.$refs.deviceTree) {
this.$refs.deviceTree.getDeviceTree()
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .in-dialog .el-dialog{
::v-deep .in-dialog .el-dialog {
width: 725px;
.setting-dialog{
.setting-dialog {
height: 552px;
overflow: hidden;
}
.el-dialog__body{
.el-dialog__body {
padding: 0;
}
}
::v-deep .in-dialog .el-dialog .el-dialog__header .el-dialog__close::before{
position: absolute;
right: -50px;
bottom: -10px;
::v-deep .in-dialog .el-dialog .el-dialog__header .el-dialog__close::before {
position: absolute;
right: -50px;
bottom: -10px;
}
.header{
.header {
height: 60px;
line-height: 60px;
color: #339CFF;
color: #339cff;
font-size: 16px;
padding-left: 65px;
border-bottom: 1px solid #339CFF;
border-bottom: 1px solid #339cff;
}
.head-container{
.head-container {
padding: 0 20px;
}
.box{
.box {
padding-bottom: 15px;
border-bottom: #113D72 1px dashed;
border-bottom: #113d72 1px dashed;
}
.content{
color: #339CFF;
.content {
color: #339cff;
height: 492px;
display: flex;
.content-left{
.content-left {
background-color: #021941;
width: 200px;
// height: 100%;
}
.content-right{
.content-right {
flex: 1;
padding:0 15px ;
padding: 0 15px;
margin-bottom: 15px;
overflow-y: scroll;
.case-name{
.case-name {
color: #fff;
font-size: 16px;
padding: 14px 30px;
}
}
}
.frame-content{
.frame-content {
display: flex;
flex-wrap: wrap;
.frame-item{
display: flex;
width: 148px;
margin-bottom: 14px;
position: relative;
span{
width: 33px;
height: 36px;
line-height: 36px;
text-align: right;
padding-right: 5px;
}
.el-input{
width: 86px;
height: 36px !important;
.frame-item {
display: flex;
width: 148px;
margin-bottom: 14px;
position: relative;
span {
width: 33px;
height: 36px;
line-height: 36px;
text-align: right;
padding-right: 5px;
}
.el-input {
width: 86px;
height: 36px !important;
}
}
}
.item-line::before{
content: '';
.item-line::before {
content: "";
display: block;
height: 1px;
width: 20px;
background-color:#339CFF;
background-color: #339cff;
position: absolute;
top: 50%;
left: -20px;
}
}
.show{
background-color: #339CFF;
padding: 0;
width: 36px;
height: 36px;
line-height: 36px;
text-align: center;
}
::v-deep .icon-style:before{
.show {
background-color: #339cff;
padding: 0;
width: 36px;
height: 36px;
line-height: 36px;
text-align: center;
}
::v-deep .icon-style:before {
font-size: 24px;
color: #fff;
}
.state-btn{
.state-btn {
display: flex;
justify-content: right;
padding-right:30px;
padding-right: 30px;
width: 100%;
}
::v-deep .head-container .filter-item .el-input__inner{
::v-deep .head-container .filter-item .el-input__inner {
height: 36px;
}
.success-msg,.fail-msg{
.success-msg,
.fail-msg {
display: flex;
align-items: center;
padding-left: 25px;
.iconfont{
.iconfont {
font-size: 14px;
margin-right: 5px;
}
}
.success-msg{
color: #1AAF91;
.success-msg {
color: #1aaf91;
}
.fail-msg{
color: #EF3147 ;
.fail-msg {
color: #ef3147;
}
::v-deep .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner {
background-color: #021330;
border-color: #17426b;
}
.btn-save{
.btn-save {
width: 90px;
height: 36px;
font-size: 16px;
background-color: #339CFF;
background-color: #339cff;
}
.btn-save.is-disabled{
.btn-save.is-disabled {
background-color: #031435;
}
::v-deep .suc-dialog .el-dialog .setting-dialog{
::v-deep .suc-dialog .el-dialog .setting-dialog {
color: #fff;
font-size: 16px;
}

42
src/views/archivesManage/outInStorage/module/detailDialog.vue

@ -18,7 +18,14 @@
<el-table :data="tableData" style="margin-top:15px;height:321px">
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="child" align="center" label="子条数目" width="100" />
<el-table-column prop="categoryType" align="center" label="门类级别" width="140" />
<el-table-column prop="categoryType" align="center" label="门类级别" width="140">
<template slot-scope="scope">
<!-- 未入 / 待入 -->
<span v-if="scope.row.categoryType==='5'" class="clear" style="width:56px">文件级</span>
<span v-if="scope.row.categoryType==='4'" class="clear" style="width:56px">卷内级</span>
<span v-if="scope.row.categoryType==='3'" class="clear" style="width:56px">案卷级</span>
</template>
</el-table-column>
<el-table-column prop="categoryName" align="center" label="门类名称" width="130" />
<el-table-column prop="fondsNo" align="center" label="全宗号" width="80" />
<el-table-column prop="archiveNo" align="center" label="档号" width="140" />
@ -52,47 +59,46 @@ export default {
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
::v-deep .el-dialog{
@import "~@/assets/styles/lend-manage.scss";
::v-deep .el-dialog {
width: 950px;
height: 520px;
}
::v-deep .el-dialog .el-dialog__header .el-dialog__close::before{
position: absolute;
right: -162px;
bottom: -10px;
::v-deep .el-dialog .el-dialog__header .el-dialog__close::before {
position: absolute;
right: -162px;
bottom: -10px;
}
p{
p {
display: flex;
height: 40px;
align-items: center;
.color-blue{
color: #3A99FD;
.color-blue {
color: #3a99fd;
width: 70px;
height: 19px;
text-align: right;
}
.color-white{
.color-white {
color: white;
padding: 0 0 0 20px;
}
}
.dpflex{
.dpflex {
display: flex;
.left{
.left {
flex: 1;
}
.center{
flex:1;
.center {
flex: 1;
}
.right{
.right {
flex: 1;
.cell-lend{
.cell-lend {
margin-left: 20px;
width: 76px;
}
}
}
</style>

1
src/views/components/DeviceTree.vue

@ -29,6 +29,7 @@ export default {
menu().then((data) => {
let storeroom = {}
let devices = []
this.deviceTree.splice(0, this.deviceTree.length)
for (let i = 0; i < data.length; i++) {
if (!storeroom.id) {
storeroom = data[i].storeroomId

Loading…
Cancel
Save