You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
571 lines
20 KiB
571 lines
20 KiB
<template>
|
|
<div>
|
|
<el-dialog ref="dialogTable" title="新增盘点单" :visible="crud.status.cu > 0" append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU">
|
|
<span class="dialog-right-top" />
|
|
<span class="dialog-left-bottom" />
|
|
<div class="setting-dialog">
|
|
<el-form ref="form" :model="form" size="small" inline label-width="80px" :rules="rules">
|
|
<el-form-item label="选择区域" prop="selectAreaValue" style="margin-right: 10px;">
|
|
<treeselect
|
|
v-model="form.selectAreaValue"
|
|
:options="selectAreaOptions"
|
|
multiple
|
|
placeholder="请选择(单选)"
|
|
style="width: 184px;"
|
|
:limit="1"
|
|
:limit-text="count => `+${count}`"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="选择门类" prop="categoryValue" style="margin-right: 10px;">
|
|
<treeselect
|
|
ref="treeselect"
|
|
v-model="form.categoryValue"
|
|
flat
|
|
:multiple="false"
|
|
placeholder="请选择(单选)"
|
|
:options="category"
|
|
style="width: 184px;"
|
|
:normalizer="normalizer"
|
|
:default-expand-level="2"
|
|
@select="node=>treeSelectInput(node)"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="选择年度" prop="archiveYears" style="margin-right: 0;">
|
|
<el-select
|
|
v-model="form.archiveYears"
|
|
style="width: 184px;"
|
|
multiple
|
|
filterable
|
|
clearable
|
|
placeholder="请选择(可多选)"
|
|
:collapse-tags="showTags"
|
|
@change="changeSelect"
|
|
@remove-tag="removeTag"
|
|
>
|
|
<el-option v-if="yearsOptions.length !== 0" label="全选" value="全选" @click.native="selectAll" />
|
|
<el-option
|
|
v-for="item in yearsOptions"
|
|
:key="item.value"
|
|
:label="item.label"
|
|
:value="item.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="盘点方式" prop="arrangeType">
|
|
<el-select
|
|
v-model="form.arrangeType"
|
|
style="width: 184px;"
|
|
clearable
|
|
placeholder="请选择(单选)"
|
|
>
|
|
<el-option
|
|
v-for="item in checkOptions"
|
|
:key="item.value"
|
|
:label="item.label"
|
|
:value="item.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-button class="check-confirm-btn" type="primary" size="mini" @click="handleBuild"><i class="iconfont icon-shengchengpandiandan" />生成盘点单</el-button>
|
|
</el-form>
|
|
<el-table v-if="isCaseOrFile === 2" v-loading="loading" :data="tableData" height="400px" :cell-class-name="cell">
|
|
<el-table-column type="index" align="center" label="序号" width="80" />
|
|
<el-table-column align="center" label="状态" width="100">
|
|
<template>
|
|
<!-- 未盘点 -->
|
|
<span class="clear">未盘点</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="child" align="center" label="子条数目" width="100" />
|
|
<el-table-column prop="categoryType" align="center" label="门类级别" 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" align="center" show-overflow-tooltip label="门类名称" width="120" />
|
|
<el-table-column prop="fondsNo" align="center" label="全宗号" width="180" show-overflow-tooltip />
|
|
<el-table-column prop="archiveNo" align="center" label="档号" width="180" show-overflow-tooltip />
|
|
<el-table-column prop="archiveYear" align="center" label="归档年度" width="100" />
|
|
<el-table-column prop="maintitle" show-overflow-tooltip label="题名" align="center" width="180" />
|
|
<el-table-column prop="securityClass" label="保密程度" align="center" width="85" />
|
|
<el-table-column prop="department" label="部门" align="center" width="120" />
|
|
<el-table-column prop="caseName" label="盒名称" show-overflow-tooltip align="center" width="120" />
|
|
<el-table-column prop="folderLocationDetails" show-overflow-tooltip label="所在位置" align="center" 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" label="创建时间" align="center" width="150">
|
|
<template slot-scope="scope">
|
|
<div>{{ scope.row.create_time | parseTime }}</div>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<el-table
|
|
v-if="isCaseOrFile === 1"
|
|
ref="table"
|
|
v-loading="loading"
|
|
:cell-class-name="cell"
|
|
:data="tableData"
|
|
height="400px"
|
|
style="width: 100%;"
|
|
@row-dblclick="handleCaseDbClick"
|
|
>
|
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
|
<el-table-column align="center" label="状态" width="100">
|
|
<template>
|
|
<!-- 未盘点 -->
|
|
<span class="clear">未盘点</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="190" />
|
|
<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 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>
|
|
|
|
<el-pagination v-if="tableData.length !== 0" :page-size.sync="page.size" :total="page.total" :current-page.sync="page.page" style="margin-top: 8px;" layout="total, prev, pager, next, sizes" @size-change="sizeChangeHandler($event)" @current-change="pageChangeHandler" />
|
|
<div v-if="tableData.length !== 0" slot="footer" class="dialog-footer">
|
|
<el-button :disabled="!(tableData.length)" @click="handleSave">保存</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
<!-- 档案盒详情 -->
|
|
<detailDialog ref="detailDom" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Treeselect from '@riophae/vue-treeselect'
|
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
import { menu } from '@/api/storeManage/levelManage/level'
|
|
import { FetchCategoryMenu } from '@/api/system/category/category'
|
|
import { previewArrange, addArrange } from '@/api/archivesManage/archivesCheck'
|
|
import { FetchInitContorlView } from '@/api/archivesManage/library'
|
|
import { findInCase } from '@/api/archivesManage/caseManage'
|
|
import { crud, form } from '@crud/crud'
|
|
import detailDialog from '../../caseManage/caseList/module/detailDialog'
|
|
const defaultForm = {
|
|
selectAreaValue: [],
|
|
categoryValue: null,
|
|
archiveYears: [],
|
|
arrangeType: null
|
|
}
|
|
export default {
|
|
name: 'AddCheck',
|
|
components: { Treeselect, detailDialog },
|
|
mixins: [
|
|
crud(),
|
|
form(function() {
|
|
return Object.assign({ }, defaultForm)
|
|
})
|
|
],
|
|
data() {
|
|
return {
|
|
loading: false,
|
|
menusIds: [],
|
|
tableData: [],
|
|
isCaseOrFile: 0,
|
|
addFormVisible: false,
|
|
selectAreaOptions: [],
|
|
nodeKey: 'id',
|
|
defaultCheckedKeys: [],
|
|
oldCategory: [],
|
|
allCategory: [],
|
|
category: [],
|
|
showTags: true,
|
|
yearsOptions: [],
|
|
checkOptions: [
|
|
{
|
|
label: '按盒盘点(H)',
|
|
value: 1
|
|
},
|
|
{
|
|
label: '按件盘点(J)',
|
|
value: 2
|
|
}
|
|
],
|
|
page: {
|
|
total: 0,
|
|
size: 10,
|
|
page: 1
|
|
},
|
|
params: {
|
|
page: null,
|
|
size: null,
|
|
deviceIds: null,
|
|
categoryIds: null
|
|
},
|
|
rules: {
|
|
selectAreaValue: [{ required: true, trigger: 'change', message: '请选择区域' }],
|
|
categoryValue: [{ required: true, trigger: 'change', message: '请选择门类' }],
|
|
archiveYears: [{ required: true, trigger: 'change', message: '请选择年度' }],
|
|
arrangeType: [{ required: true, trigger: 'change', message: '请选择盘点方式' }]
|
|
}
|
|
}
|
|
},
|
|
created() {
|
|
this.getTreeMenu()
|
|
this.getCategoryDataTree()
|
|
},
|
|
methods: {
|
|
getTreeMenu() {
|
|
menu().then(data => {
|
|
const deviceTree = []
|
|
let storeroom = {}
|
|
let devices = []
|
|
data.forEach((item, i) => {
|
|
if (!storeroom.id) {
|
|
item.storeroomId.label = item.storeroomId.name
|
|
storeroom = item.storeroomId
|
|
item.label = item.deviceName
|
|
devices.push(item)
|
|
} else if (storeroom.id !== item.storeroomId.id) {
|
|
item.storeroomId.label = item.storeroomId.name
|
|
storeroom.children = devices
|
|
deviceTree.push(storeroom)
|
|
devices = []
|
|
item.label = item.deviceName
|
|
devices.push(item)
|
|
storeroom = item.storeroomId
|
|
} else {
|
|
item.storeroomId.label = item.storeroomId.name
|
|
item.label = item.deviceName
|
|
devices.push(item)
|
|
}
|
|
if (i === data.length - 1) {
|
|
item.storeroomId.label = item.storeroomId.name
|
|
storeroom.children = devices
|
|
deviceTree.push(storeroom)
|
|
}
|
|
this.selectAreaOptions = deviceTree
|
|
})
|
|
})
|
|
},
|
|
filterData(data) {
|
|
return data.filter(node => {
|
|
if (node.children && node.children.length > 0) {
|
|
node.children = this.filterData(node.children) // 递归处理子节点
|
|
}
|
|
return node.isType !== 3 // 过滤掉isType为3的节点
|
|
})
|
|
},
|
|
getCategoryDataTree() {
|
|
FetchCategoryMenu().then(res => {
|
|
this.category = this.filterData(res)
|
|
})
|
|
},
|
|
treeSelectInput(value) {
|
|
console.log(value)
|
|
this.form.categoryValue = value.id
|
|
if (this.form.categoryValue) {
|
|
let categoryLevel = null
|
|
if (value.arrangeType === 1) {
|
|
categoryLevel = 3
|
|
} else if (value.arrangeType === 2) {
|
|
categoryLevel = 2
|
|
} else {
|
|
categoryLevel = 1
|
|
}
|
|
this.getYear(categoryLevel)
|
|
} else {
|
|
this.yearsOptions = []
|
|
this.form.archiveYears = []
|
|
}
|
|
},
|
|
getYear(categoryLevel) {
|
|
const params = {
|
|
'categoryId': this.form.categoryValue,
|
|
'categoryLevel': categoryLevel,
|
|
'ignore': false,
|
|
'isdel': false,
|
|
'page': 0,
|
|
'size': 10
|
|
}
|
|
FetchInitContorlView(params).then(data => {
|
|
if (data) {
|
|
this.yearsOptions = data.yearGroup.map(item => {
|
|
const json = {}
|
|
json.value = item
|
|
json.label = item
|
|
return json
|
|
})
|
|
}
|
|
})
|
|
},
|
|
selectAll() {
|
|
if (this.form.archiveYears.length < this.yearsOptions.length) {
|
|
this.form.archiveYears = []
|
|
this.yearsOptions.map((item) => {
|
|
this.form.archiveYears.push(item.value)
|
|
})
|
|
this.form.archiveYears.unshift('全选')
|
|
} else {
|
|
this.form.archiveYears = []
|
|
}
|
|
},
|
|
changeSelect(val) {
|
|
if (!val.includes('全选') && val.length === this.yearsOptions.length) {
|
|
this.form.archiveYears.unshift('全选')
|
|
} else if (val.includes('全选') && (val.length - 1) < this.yearsOptions.length) {
|
|
this.form.archiveYears = this.form.archiveYears.filter((item) => {
|
|
return item !== '全选'
|
|
})
|
|
}
|
|
},
|
|
removeTag(val) {
|
|
if (val === '全选') {
|
|
this.form.archiveYears = []
|
|
}
|
|
},
|
|
// 生成盘点单
|
|
handleBuild() {
|
|
this.$refs['form'].validate(valid => {
|
|
if (!valid) {
|
|
return
|
|
}
|
|
this.loading = true
|
|
const paramsNo = this.getParams()
|
|
this.params.deviceIds = paramsNo.deviceIds
|
|
this.params.categoryIds = paramsNo.categoryIds
|
|
this.params.arrangeType = paramsNo.arrangeType
|
|
this.params.archiveYears = paramsNo.archiveYears
|
|
this.params.page = this.page.page - 1
|
|
this.params.size = this.page.size
|
|
this.doPreArrange(this.params)
|
|
})
|
|
},
|
|
handleSave() {
|
|
const params = this.getParams()
|
|
// 新增盘点
|
|
addArrange(params).then(res => {
|
|
// this.tableData = res.detaills
|
|
if (res) {
|
|
this.crud.refresh()
|
|
this.$message({
|
|
message: '新增成功',
|
|
type: 'success'
|
|
})
|
|
this.addFormVisible = false
|
|
this.crud.refresh()
|
|
} else {
|
|
this.$message.error('新增失败')
|
|
}
|
|
})
|
|
},
|
|
getParams() {
|
|
const room = this.selectAreaOptions.map(item => { return item.id }) // 所有区域id
|
|
if (this.form.selectAreaValue.length > 0 && this.form.categoryValue.length > 0) {
|
|
let deviceIds = this.form.selectAreaValue.filter(item => !room.includes(item)) // 选中的设备id
|
|
const devIds = JSON.parse(JSON.stringify(deviceIds))
|
|
let region = []
|
|
this.selectAreaOptions.forEach(item => {
|
|
if (this.form.selectAreaValue.includes(item.id)) {
|
|
region.push(item.name)
|
|
const arr = item.children.map(val => { return val.id }) // 区域内所有设备
|
|
deviceIds = deviceIds.concat(arr)
|
|
}
|
|
if (devIds.length > 0) {
|
|
item.children.forEach(val => {
|
|
if (devIds.includes(val.id) && !region.includes(item.name)) {
|
|
region.push(item.name) // 含设备的区域
|
|
}
|
|
})
|
|
}
|
|
})
|
|
region = region.join(',') // 区域str
|
|
// const categoryIds = this.form.categoryValue.filter(item => item !== 0)
|
|
|
|
if (this.form.arrangeType === 1) {
|
|
this.isCaseOrFile = 1
|
|
} else {
|
|
this.isCaseOrFile = 2
|
|
}
|
|
|
|
let archiveYearsValue
|
|
if (this.form.archiveYears.includes('全选')) {
|
|
archiveYearsValue = null
|
|
} else {
|
|
archiveYearsValue = this.form.archiveYears.join(',')
|
|
}
|
|
|
|
const categoryIds = []
|
|
categoryIds.push(this.form.categoryValue)
|
|
const params = {
|
|
'categoryIds': categoryIds,
|
|
'deviceIds': deviceIds,
|
|
'region': region,
|
|
'arrangeType': this.form.arrangeType,
|
|
'archiveYears': archiveYearsValue
|
|
}
|
|
return params
|
|
}
|
|
},
|
|
// 预盘点
|
|
doPreArrange(params) {
|
|
previewArrange(params).then(res => {
|
|
this.tableData = res.content
|
|
this.page.total = res.totalElements
|
|
this.loading = false
|
|
})
|
|
},
|
|
// 每页条数改变
|
|
sizeChangeHandler(e) {
|
|
this.loading = true
|
|
this.page.size = e
|
|
this.page.page = 1
|
|
this.params.size = e
|
|
this.params.page = 0
|
|
this.doPreArrange(this.params)
|
|
this.loading = false
|
|
},
|
|
// 当前页改变
|
|
pageChangeHandler(e) {
|
|
this.loading = true
|
|
this.page.page = e
|
|
this.params.page = e - 1
|
|
this.doPreArrange(this.params)
|
|
this.loading = false
|
|
},
|
|
// 单元格样式
|
|
cell({ row, columnIndex }) {
|
|
if (columnIndex === 1) {
|
|
return 'fail-clear'
|
|
}
|
|
},
|
|
handleCaseDbClick(row) {
|
|
this.$refs.detailDom.caseTabIndex = 0
|
|
this.$refs.detailDom.rowData = row
|
|
const params = {
|
|
caseId: row.id
|
|
}
|
|
findInCase(params).then(res => {
|
|
console.log(res)
|
|
if (res) {
|
|
this.$refs.detailDom.tableData = res.archives_o
|
|
this.$refs.detailDom.queryFields = res.field_o
|
|
this.$refs.detailDom.queryCnFields = res.cnField_o
|
|
this.$refs.detailDom.collectLevel = parseInt(res.archives_o[0].categoryLevel)
|
|
} else {
|
|
this.$refs.detailDom.tableData = []
|
|
}
|
|
})
|
|
this.$refs.detailDom.detailVisible = true
|
|
},
|
|
handleClose() {
|
|
this.getTreeMenu()
|
|
this.getCategoryDataTree()
|
|
this.tableData = []
|
|
this.isCaseOrFile = 0
|
|
this.$refs['form'].resetFields()
|
|
},
|
|
normalizer(node) {
|
|
if (node.children && !node.children.length) {
|
|
delete node.children
|
|
}
|
|
return {
|
|
id: node.id,
|
|
label: node.cnName,
|
|
children: node.children,
|
|
isDisabled: node.isType !== 2
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
::v-deep .el-dialog{
|
|
width: 864px;
|
|
.el-dialog__body .el-form-item .el-form-item__content{
|
|
width: 184px !important;
|
|
}
|
|
.el-form{
|
|
position: relative;
|
|
}
|
|
.check-confirm-btn{
|
|
position: absolute;
|
|
right: 5px;
|
|
bottom: 20px;
|
|
}
|
|
}
|
|
// @import '~@/assets/styles/lend-manage.scss';
|
|
|
|
// .el-form{
|
|
// display: flex;
|
|
// flex-wrap: wrap;
|
|
// padding-left: 12px;
|
|
// }
|
|
// ::v-deep .el-dialog{
|
|
// width: 1000px;
|
|
// // height: 520px;
|
|
// }
|
|
// ::v-deep .el-dialog .el-dialog__header .el-dialog__close::before{
|
|
// position: absolute;
|
|
// right: -190px;
|
|
// bottom: -12px;
|
|
// }
|
|
// ::v-deep .el-dialog__body{
|
|
// padding: 30px 0;
|
|
// }
|
|
// ::v-deep .el-dialog .dialog-footer{
|
|
// margin: 0 auto !important;
|
|
// }
|
|
// ::v-deep .el-tag.el-tag--info{
|
|
// height: 24px !important;
|
|
// line-height: 24px !important;
|
|
// }
|
|
// ::v-deep .el-input__inner{
|
|
// height: 30px !important;
|
|
// }
|
|
// //滚动条
|
|
// ::v-deep ::-webkit-scrollbar-corner{
|
|
// background: transparent;
|
|
// }
|
|
// // 树形选择器
|
|
// ::v-deep .vue-treeselect__placeholder, .vue-treeselect__single-value{
|
|
// line-height: 30px;
|
|
// }
|
|
// ::v-deep .vue-treeselect--has-value .vue-treeselect__multi-value{
|
|
// margin-bottom: 0;
|
|
// }
|
|
// ::v-deep .vue-treeselect__multi-value-item-container{
|
|
// padding-top: 2px;
|
|
// line-height: 20px;
|
|
// }
|
|
|
|
// ::v-deep .el-dialog .el-form .vue-treeselect__control{
|
|
// height: 30px !important;
|
|
// line-height: 18px;
|
|
// }
|
|
// ::v-deep .vue-treeselect__limit-tip{
|
|
// background: #13439E;
|
|
// border-radius: 3px;
|
|
// margin: 2px;
|
|
// padding: 0 3px;
|
|
// .vue-treeselect__limit-tip-text{
|
|
// padding: 2px 2px;
|
|
// color: #fff;
|
|
// }
|
|
// }
|
|
</style>
|