Browse Source

新增“开架”/档案录入/门禁样式/3D楼层切换

master
xuhuajiao 2 years ago
parent
commit
33e4a75d9a
  1. 302
      src/api/archivesManage/archivesList.js
  2. BIN
      src/assets/images/dot1.png
  3. BIN
      src/assets/images/dot2.png
  4. BIN
      src/assets/images/step01.png
  5. BIN
      src/assets/images/step01_1.png
  6. BIN
      src/assets/images/step02.png
  7. BIN
      src/assets/images/step02_2.png
  8. BIN
      src/assets/images/step03.png
  9. BIN
      src/assets/images/step03_3.png
  10. 2
      src/views/archivesManage/archivesList/index.vue
  11. 571
      src/views/archivesManage/archivesList/module/archivesInfo/index.vue
  12. 58
      src/views/archivesManage/archivesSearch/index.vue
  13. 444
      src/views/archivesManage/fileImport/dataImport/index.vue
  14. 29
      src/views/archivesManage/fileImport/dataImport/table.json
  15. 23
      src/views/archivesManage/fileImport/importLog/index.vue
  16. 58
      src/views/archivesManage/fileImport/index.vue
  17. 382
      src/views/archivesManage/lendManage/components/lendArchivesList.vue
  18. 10
      src/views/components/SecurityDoor.vue
  19. 30
      src/views/storeManage/warehouse3D/index.vue

302
src/api/archivesManage/archivesList.js

@ -1,147 +1,155 @@
import request from '@/utils/request'
import qs from 'qs'
// import { form } from '../../components/Crud/crud'
// 档案列表获取显示列
export function FetchTableDisplayFields(params) {
return request({
url: 'api/archives/initArchivesViewTable' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案预编辑
export function FetchFormDisplayFields(params) {
return request({
url: 'api/archives/doedit' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export function add(form) {
return edit(form)
}
// 档案编辑
export function edit(parameter) {
return request({
url: 'api/archives/edit',
method: 'post',
data: parameter
})
}
// 档案删除
export function del(parameter) {
return request({
url: 'api/archives/delete',
method: 'post',
data: parameter
})
}
// 档案回收站删除
export function FetchCompletelyDelete(parameter) {
return request({
url: 'api/archives/completelyDelete',
method: 'post',
data: parameter
})
}
// 档案列表
export function FetchInitArchivesView(params) {
return request({
url: 'api/archives/initArchivesView' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案判断值是否重复
export function FetchDoeditIsRepeat(parameter) {
return request({
url: 'api/archives/doeditIsRepeat',
method: 'get',
params: parameter
})
}
// 档案详情
export function FetchArchivesDetails(params) {
return request({
url: 'api/archives/archivesDetails' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案元数据
export function FetchArchivesMetadata(params) {
return request({
url: 'api/archives/archivesMetadata' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 初始化档案附件列表
export function FetchInitArchiveFilesView(params) {
return request({
url: 'api/archives/initArchiveFilesView' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 上传档案附件
export function FetchUploadFile(parameter) {
return request({
url: 'api/archives/uploadFile',
method: 'post',
data: parameter
})
}
// 编辑附件
export function FetchEditFile(parameter) {
return request({
url: 'api/archives/editFile',
method: 'post',
data: parameter
})
}
// 删除附件
export function FetchDeleteFile(parameter) {
return request({
url: 'api/archives/deleteFile',
method: 'post',
data: parameter
})
}
// 附件排序
export function FetchFileSort(parameter) {
return request({
url: 'api/archives/fileSort',
method: 'post',
data: parameter
})
}
// 档案还原
export function FetchReduction(parameter) {
return request({
url: 'api/archives/reduction',
method: 'post',
data: parameter
})
}
// 模糊查询
export function queryVagueArchives(params) {
return request({
url: 'api/archives/queryVagueArchives' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { add, edit, del, FetchInitArchivesView, FetchTableDisplayFields, FetchFormDisplayFields, FetchDoeditIsRepeat, queryVagueArchives }
import request from '@/utils/request'
import qs from 'qs'
// import { form } from '../../components/Crud/crud'
// 档案列表获取显示列
export function FetchTableDisplayFields(params) {
return request({
url: 'api/archives/initArchivesViewTable' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案预编辑
export function FetchFormDisplayFields(params) {
return request({
url: 'api/archives/doedit' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export function add(form) {
return edit(form)
}
// 档案编辑
export function edit(parameter) {
return request({
url: 'api/archives/edit',
method: 'post',
data: parameter
})
}
// 档案删除
export function del(parameter) {
return request({
url: 'api/archives/delete',
method: 'post',
data: parameter
})
}
// 档案回收站删除
export function FetchCompletelyDelete(parameter) {
return request({
url: 'api/archives/completelyDelete',
method: 'post',
data: parameter
})
}
// 档案列表
export function FetchInitArchivesView(params) {
return request({
url: 'api/archives/initArchivesView' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案判断值是否重复
export function FetchDoeditIsRepeat(parameter) {
return request({
url: 'api/archives/doeditIsRepeat',
method: 'get',
params: parameter
})
}
// 档案详情
export function FetchArchivesDetails(params) {
return request({
url: 'api/archives/archivesDetails' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 档案元数据
export function FetchArchivesMetadata(params) {
return request({
url: 'api/archives/archivesMetadata' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 初始化档案附件列表
export function FetchInitArchiveFilesView(params) {
return request({
url: 'api/archives/initArchiveFilesView' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 上传档案附件
export function FetchUploadFile(parameter) {
return request({
url: 'api/archives/uploadFile',
method: 'post',
data: parameter
})
}
// 编辑附件
export function FetchEditFile(parameter) {
return request({
url: 'api/archives/editFile',
method: 'post',
data: parameter
})
}
// 删除附件
export function FetchDeleteFile(parameter) {
return request({
url: 'api/archives/deleteFile',
method: 'post',
data: parameter
})
}
// 附件排序
export function FetchFileSort(parameter) {
return request({
url: 'api/archives/fileSort',
method: 'post',
data: parameter
})
}
// 档案还原
export function FetchReduction(parameter) {
return request({
url: 'api/archives/reduction',
method: 'post',
data: parameter
})
}
// 模糊查询
export function queryVagueArchives(params) {
return request({
url: 'api/archives/queryVagueArchives' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
// 模糊查询 - 2023-06-19
export function querySeniorArchives(params) {
return request({
url: 'api/archives/querySeniorArchives' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { add, edit, del, FetchInitArchivesView, FetchTableDisplayFields, FetchFormDisplayFields, FetchDoeditIsRepeat, queryVagueArchives, querySeniorArchives }

BIN
src/assets/images/dot1.png

After

Width: 981  |  Height: 128  |  Size: 16 KiB

BIN
src/assets/images/dot2.png

After

Width: 981  |  Height: 128  |  Size: 4.6 KiB

BIN
src/assets/images/step01.png

After

Width: 128  |  Height: 128  |  Size: 3.0 KiB

BIN
src/assets/images/step01_1.png

After

Width: 128  |  Height: 128  |  Size: 1.6 KiB

BIN
src/assets/images/step02.png

After

Width: 128  |  Height: 128  |  Size: 4.0 KiB

BIN
src/assets/images/step02_2.png

After

Width: 128  |  Height: 128  |  Size: 2.7 KiB

BIN
src/assets/images/step03.png

After

Width: 128  |  Height: 128  |  Size: 5.0 KiB

BIN
src/assets/images/step03_3.png

After

Width: 128  |  Height: 128  |  Size: 2.8 KiB

2
src/views/archivesManage/archivesList/index.vue

@ -234,7 +234,7 @@ export default {
getDicts().then(data => {
if (data) {
this.intellClassifyTree = data.filter(item => {
return item.dicCode === 'Search_MJ' || item.dicCode === 'Search_BGQX' || item.dicCode === 'Search_JGWT' || item.dicCode === 'Search_BM'
return item.dicCode === 'Search_MJ' || item.dicCode === 'Search_BGQX' || item.dicCode === 'WZ' || item.dicCode === 'ZT' || item.dicCode === 'QZH'
})
}
})

571
src/views/archivesManage/archivesList/module/archivesInfo/index.vue

@ -1,254 +1,317 @@
<template>
<el-dialog class="upload-dialog" :title="detailTitle" :close-on-click-modal="false" :visible.sync="archivesInfoVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="archives-info-wrap">
<!-- tab -->
<ul class="archives-tab">
<li :class="{'active': archivesTabIndex == 0}" @click="changeActiveTab(0)">基本信息</li>
<li v-if="isHasFile" :class="{'active': archivesTabIndex == 1}" @click="changeActiveTab(1)">附件</li>
<li :class="{'active': archivesTabIndex == 2}" @click="changeActiveTab(2)">元数据</li>
</ul>
<!-- 基本信息 -->
<div v-if="archivesTabIndex==0" class="base-info item-content">
<el-row>
<el-col v-for="(item,index) in archivesDetailsData" v-show="index<archivesDetailsData.length-5" :key="index" :span="item.isLine ? 24 : 12" class="base-info-item">
<span>{{ item.fieldCnName }}</span>
<p :style="{ width: ( item.editLength ? item.editLength+'px' : '' ), flex: ( !item.editLength ? 1 : '' )}">{{ item.context }}</p>
</el-col>
</el-row>
<el-row v-if="isDetailsInfo">
<el-col v-for="(item,index) in archivesDetailsData.slice(archivesDetailsData.length-5,archivesDetailsData.length)" :key="'last'+index" :span=" 12" class="base-info-item">
<span>{{ item.fieldCnName }}</span>
<div v-if="item.fieldName === 'folder_location' && item.context" :style="{ width: item.editLength+'px', marginTop:'-6px'}">
<div v-if="item.context.indexOf(',')">
<el-tag
v-for="(val,key) in item.context.split(',')"
:key="key"
:type="val"
effect="dark"
>
{{ val }}
</el-tag>
</div>
<div v-else-if="!item.context.indexOf(',')">
<el-tag effect="dark">{{ item.context }}</el-tag>
</div>
</div>
<div v-else :style="{ width: item.editLength+'px'}" :class="[ (item.fieldName === 'borrow_type') ? 'row-state row-lending' : '' ]">
{{ item.context }}
</div>
</el-col>
</el-row>
</div>
<!-- 附件 -->
<UploadFile v-if="archivesTabIndex==1" ref="uploadFile" class="item-content" :is-upload-detail="false" :category-id="categoryId" :arc-id="arcId" />
<!-- 元数据 -->
<div v-if="archivesTabIndex==2" class="item-content">
<pre v-highlightjs="xml_show">
<code class="highlight_s">
{[xml_show]}
</code>
</pre>
</div>
</div>
</div>
</el-dialog>
</template>
<script>
// import vkbeautify from 'vkbeautify'
import { form } from '@crud/crud'
import { FetchArchivesDetails, FetchArchivesMetadata } from '@/api/archivesManage/archivesList'
import UploadFile from '../uploadFile/index'
export default {
name: 'ArchivesInfo',
components: { UploadFile },
mixins: [
form({})
],
inject: ['recycleMain'],
props: {
categoryId: {
type: String,
default: function() {
return ''
}
},
arcId: {
type: String,
default: function() {
return ''
}
}
},
data() {
return {
detailTitle: '',
isHasFile: false, // /
isDetailsInfo: false, // 5
isTidOrBorrow: true, // tid/
archivesInfoVisible: false,
archivesTabIndex: 0,
archivesDetailsData: [],
archivesDetailsMetadata: [],
xml_show: null
}
},
mounted() {
},
methods: {
getDetial(rowId) {
const params = {
categoryId: this.categoryId,
archivesId: rowId
}
FetchArchivesDetails(params).then(data => {
this.archivesDetailsData = data
// /
this.archivesDetailsData.forEach(item => {
if (item.fieldName === 'borrow_type') {
if (item.context === 1) {
item.context = '待登记'
} else if (item.context === 2) {
item.context = '待借阅'
} else if (item.context === 3) {
item.context = '待归还'
} else if (item.context === 4 || item.context === '' || item.context === null) {
item.context = '-'
} else if (item.context === -1) {
item.context = '在库'
}
}
})
// - tid/''
if (!this.isTidOrBorrow) {
const indexBorrow = this.archivesDetailsData.findIndex(item => item.fieldName === 'borrow_type')
const indexTid = this.archivesDetailsData.findIndex(item => item.fieldName === 'tid')
this.archivesDetailsData.splice(indexBorrow, 1)
this.archivesDetailsData.splice(indexTid, 1)
}
})
FetchArchivesMetadata(params).then(data => {
this.archivesDetailsMetadata = data
})
},
setXml() {
const xmlstr = this.archivesDetailsMetadata
// console.log('xmlstr:', xmlstr)
// console.log('xmljson:', this.$x2js.xml2js(xmlstr))
// console.log('jsonxml:', this.$x2js.js2xml(this.$x2js.xml2js(xmlstr)))
// this.xml_show = vkbeautify.xml(xmlstr)
this.xml_show = this.showXml(xmlstr)
},
changeActiveTab(index) {
this.archivesTabIndex = index
if (this.archivesTabIndex === 2) {
this.setXml()
}
this.$nextTick(() => {
if (this.$refs.uploadFile) {
this.$refs.uploadFile.tableData = []
this.$refs.uploadFile.getFileList()
}
})
},
// -
handleClose(done) {
this.archivesInfoVisible = false
done()
},
// xml
showXml(str) {
var that = this
var text = str
//
text =
'\n' +
text
.replace(/(<\w+)(\s.*?>)/g, function($0, name, props) {
return name + ' ' + props.replace(/\s+(\w+=)/g, ' $1')
})
.replace(/>\s*?</g, '>\n<')
//
text = text
.replace(/\n/g, '\r')
.replace(/<!--(.+?)-->/g, function($0, text) {
var ret = '<!--' + escape(text) + '-->'
return ret
})
.replace(/\r/g, '\n')
//
var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/gm
var nodeStack = []
var output = text.replace(rgx, function(
$0,
all,
name,
isBegin,
isCloseFull1,
isCloseFull2,
isFull1,
isFull2
) {
var isClosed =
isCloseFull1 === '/' ||
isCloseFull2 === '/' ||
isFull1 === '/' ||
isFull2 === '/'
var prefix = ''
if (isBegin === '!') {
prefix = that.getPrefix(nodeStack.length)
} else {
if (isBegin !== '/') {
prefix = that.getPrefix(nodeStack.length)
if (!isClosed) {
nodeStack.push(name)
}
} else {
nodeStack.pop()
prefix = that.getPrefix(nodeStack.length)
}
}
var ret = '\n' + prefix + all
return ret
})
var outputText = output.substring(1)
//
outputText = outputText
.replace(/\n/g, '\r')
.replace(/(\s*)<!--(.+?)-->/g, function($0, prefix, text) {
if (prefix.charAt(0) === '\r') prefix = prefix.substring(1)
text = unescape(text).replace(/\r/g, '\n')
var ret =
'\n' + prefix + '<!--' + text.replace(/^\s*/gm, prefix) + '-->'
return ret
})
outputText = outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n')
return outputText
},
getPrefix(prefixIndex) {
var span = ' '
var output = []
for (var i = 0; i < prefixIndex; ++i) {
output.push(span)
}
return output.join('')
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/archives-manage.scss";
.base-info .base-info-item span.el-tag{
width: auto;
color: #fff;
}
::v-deep .el-dialog .el-dialog__header .el-dialog__headerbtn {
top: 12px;
right: -320px;
}
</style>
<template>
<el-dialog class="upload-dialog" :title="detailTitle" :close-on-click-modal="false" :visible.sync="archivesInfoVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="archives-info-wrap">
<!-- tab -->
<ul class="archives-tab">
<li :class="{'active': archivesTabIndex == 0}" @click="changeActiveTab(0)">基本信息</li>
<li v-if="isHasFile" :class="{'active': archivesTabIndex == 1}" @click="changeActiveTab(1)">附件</li>
<li :class="{'active': archivesTabIndex == 2}" @click="changeActiveTab(2)">元数据</li>
</ul>
<el-button v-if="isShowOpen" style="position: absolute; right: 30px; top: 0; z-index: 9999;" @click="openCol">开架</el-button>
<!-- 基本信息 -->
<div v-if="archivesTabIndex==0" class="base-info item-content">
<el-row>
<el-col v-for="(item,index) in archivesDetailsData" v-show="index<archivesDetailsData.length-5" :key="index" :span="item.isLine ? 24 : 12" class="base-info-item">
<span>{{ item.fieldCnName }}</span>
<p :style="{ width: ( item.editLength ? item.editLength+'px' : '' ), flex: ( !item.editLength ? 1 : '' )}">{{ item.context }}</p>
</el-col>
</el-row>
<el-row v-if="isDetailsInfo">
<el-col v-for="(item,index) in archivesDetailsData.slice(archivesDetailsData.length-5,archivesDetailsData.length)" :key="'last'+index" :span=" 12" class="base-info-item">
<span>{{ item.fieldCnName }}</span>
<div v-if="item.fieldName === 'folder_location' && item.context" :style="{ width: item.editLength+'px', marginTop:'-6px'}">
<div v-if="item.context.indexOf(',')">
<el-tag
v-for="(val,key) in item.context.split(',')"
:key="key"
:type="val"
effect="dark"
>
{{ val }}
</el-tag>
</div>
<div v-else-if="!item.context.indexOf(',')">
<el-tag effect="dark">{{ item.context }}</el-tag>
</div>
</div>
<div v-else :style="{ width: item.editLength+'px'}" :class="[ (item.fieldName === 'borrow_type') ? 'row-state row-lending' : '' ]">
{{ item.context }}
</div>
</el-col>
</el-row>
</div>
<!-- 附件 -->
<UploadFile v-if="archivesTabIndex==1" ref="uploadFile" class="item-content" :is-upload-detail="false" :category-id="categoryId" :arc-id="arcId" />
<!-- 元数据 -->
<div v-if="archivesTabIndex==2" class="item-content">
<pre v-highlightjs="xml_show">
<code class="highlight_s">
{[xml_show]}
</code>
</pre>
</div>
</div>
</div>
</el-dialog>
</template>
<script>
// import vkbeautify from 'vkbeautify'
import { form } from '@crud/crud'
import { FetchArchivesDetails, FetchArchivesMetadata } from '@/api/archivesManage/archivesList'
import UploadFile from '../uploadFile/index'
import CallExternal from '@/api/storeManage/deviceManage/device'
export default {
name: 'ArchivesInfo',
components: { UploadFile },
mixins: [
form({})
],
inject: ['recycleMain'],
props: {
categoryId: {
type: String,
default: function() {
return ''
}
},
arcId: {
type: String,
default: function() {
return ''
}
}
},
data() {
return {
detailTitle: '',
isHasFile: false, // /
isDetailsInfo: false, // 5
isTidOrBorrow: true, // tid/
archivesInfoVisible: false,
archivesTabIndex: 0,
archivesDetailsData: [],
archivesDetailsMetadata: [],
xml_show: null,
isShowOpen: false,
openLocation: null,
deviceData: null
}
},
mounted() {
this.getDeviceListAll()
},
methods: {
getDetial(rowId) {
const params = {
categoryId: this.categoryId,
archivesId: rowId
}
FetchArchivesDetails(params).then(data => {
this.archivesDetailsData = data
// /
this.archivesDetailsData.forEach(item => {
if (item.fieldName === 'borrow_type') {
if (item.context === 1) {
item.context = '待登记'
} else if (item.context === 2) {
item.context = '待借阅'
} else if (item.context === 3) {
item.context = '待归还'
} else if (item.context === 4 || item.context === '' || item.context === null) {
item.context = '-'
} else if (item.context === -1) {
item.context = '在库'
}
}
//
if (item.fieldName === 'folder_location') {
if (item.context !== null) {
this.openLocation = item.context
this.isShowOpen = true
} else {
this.openLocation = null
this.isShowOpen = false
}
}
})
// - tid/''
if (!this.isTidOrBorrow) {
const indexBorrow = this.archivesDetailsData.findIndex(item => item.fieldName === 'borrow_type')
const indexTid = this.archivesDetailsData.findIndex(item => item.fieldName === 'tid')
this.archivesDetailsData.splice(indexBorrow, 1)
this.archivesDetailsData.splice(indexTid, 1)
}
})
FetchArchivesMetadata(params).then(data => {
this.archivesDetailsMetadata = data
})
},
//
getDeviceListAll() {
const params = {
page: 0,
size: 10,
sort: 'sequence,asc',
storeroomId: 'D6490DA3D4261E8C26D0E3'
}
CallExternal.getDeviceList(params).then(data => {
data.content.map(item => {
if (item.deviceTypeId.name === '密集架') { //
this.deviceData = item
}
})
})
},
//
openCol() {
const location = this.openLocation.split(' ')[2]
const pattern = /(\d+)区(\d+)列(\d+)节/
const matches = location.match(pattern)
let areaNumber
let colNumber
if (matches !== null) {
areaNumber = matches[1]
colNumber = matches[2]
}
const params = {
deviceId: this.deviceData.id,
quNo: areaNumber,
colNo: colNumber,
leNo: '',
divNo: '',
zyNo: ''
}
CallExternal.FetchCallExternalOpenCol(params).then(res => {
if (res.success && res.success === '0') {
this.$message.success('开架执行成功')
} else {
this.$message.error(res.msg)
}
}).catch((error) => {
console.log(error)
this.$message.error('连接失败')
})
},
setXml() {
const xmlstr = this.archivesDetailsMetadata
// console.log('xmlstr:', xmlstr)
// console.log('xmljson:', this.$x2js.xml2js(xmlstr))
// console.log('jsonxml:', this.$x2js.js2xml(this.$x2js.xml2js(xmlstr)))
// this.xml_show = vkbeautify.xml(xmlstr)
this.xml_show = this.showXml(xmlstr)
},
changeActiveTab(index) {
this.archivesTabIndex = index
if (this.archivesTabIndex === 2) {
this.setXml()
}
this.$nextTick(() => {
if (this.$refs.uploadFile) {
this.$refs.uploadFile.tableData = []
this.$refs.uploadFile.getFileList()
}
})
},
// -
handleClose(done) {
this.archivesInfoVisible = false
done()
},
// xml
showXml(str) {
var that = this
var text = str
//
text =
'\n' +
text
.replace(/(<\w+)(\s.*?>)/g, function($0, name, props) {
return name + ' ' + props.replace(/\s+(\w+=)/g, ' $1')
})
.replace(/>\s*?</g, '>\n<')
//
text = text
.replace(/\n/g, '\r')
.replace(/<!--(.+?)-->/g, function($0, text) {
var ret = '<!--' + escape(text) + '-->'
return ret
})
.replace(/\r/g, '\n')
//
var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/gm
var nodeStack = []
var output = text.replace(rgx, function(
$0,
all,
name,
isBegin,
isCloseFull1,
isCloseFull2,
isFull1,
isFull2
) {
var isClosed =
isCloseFull1 === '/' ||
isCloseFull2 === '/' ||
isFull1 === '/' ||
isFull2 === '/'
var prefix = ''
if (isBegin === '!') {
prefix = that.getPrefix(nodeStack.length)
} else {
if (isBegin !== '/') {
prefix = that.getPrefix(nodeStack.length)
if (!isClosed) {
nodeStack.push(name)
}
} else {
nodeStack.pop()
prefix = that.getPrefix(nodeStack.length)
}
}
var ret = '\n' + prefix + all
return ret
})
var outputText = output.substring(1)
//
outputText = outputText
.replace(/\n/g, '\r')
.replace(/(\s*)<!--(.+?)-->/g, function($0, prefix, text) {
if (prefix.charAt(0) === '\r') prefix = prefix.substring(1)
text = unescape(text).replace(/\r/g, '\n')
var ret =
'\n' + prefix + '<!--' + text.replace(/^\s*/gm, prefix) + '-->'
return ret
})
outputText = outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n')
return outputText
},
getPrefix(prefixIndex) {
var span = ' '
var output = []
for (var i = 0; i < prefixIndex; ++i) {
output.push(span)
}
return output.join('')
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/archives-manage.scss";
.base-info .base-info-item span.el-tag{
width: auto;
color: #fff;
}
::v-deep .el-dialog .el-dialog__header .el-dialog__headerbtn {
top: 12px;
right: -320px;
}
</style>

58
src/views/archivesManage/archivesSearch/index.vue

@ -4,7 +4,13 @@
<h2 v-if="this.$route.path.indexOf('dashboard') === -1">模糊检索</h2>
<div class="search-input">
<el-input v-model="keywords" placeholder="请输入内容" class="input-with-select" style="width:50%;" @keyup.enter.native="dimSearch">
<el-select slot="prepend" v-model="select" placeholder="请选择">
<el-select
slot="prepend"
v-model="select"
multiple
collapse-tags
placeholder="请选择"
>
<el-option
v-for="item in options"
:key="item.value"
@ -15,6 +21,9 @@
<el-button slot="append" icon="el-icon-search" @click="handleSearch" />
</el-input>
</div>
<div v-if=" this.$route.path.indexOf('dashboard') === -1 && select.length" style="width:50%; margin:10px auto; font-size: 12px; color: #fff; text-align: left;">
<p style="margin-left: 20px;">检索条件 <span v-for="(option, index) in select" :key="index">{{ getSelectLabel(option) }}{{ index !== select.length - 1 ? ', ' : '' }}</span></p>
</div>
</div>
<div v-if="this.$route.path.indexOf('dashboard') === -1" class="search-result">
<div v-show="isShow" class="search-title">
@ -73,7 +82,7 @@
<script>
import detailDialog from './module/detailDialog.vue'
import { queryVagueArchives, FetchArchivesDetails, FetchArchivesMetadata } from '@/api/archivesManage/archivesList'
import { querySeniorArchives, FetchArchivesDetails, FetchArchivesMetadata } from '@/api/archivesManage/archivesList'
export default {
name: 'ArchivesSearch',
@ -83,15 +92,18 @@ export default {
loading: false,
tableData: [],
keywords: '',
select: 'maintitle',
select: ['maintitle'],
options: [
{ value: 'maintitle', label: '题名' },
{ value: 'archive_no', label: '档号' },
{ value: 'responsibleby', label: '责任者' },
{ value: 'doc_no', label: '发文字号' },
{ value: 'record_type', label: '文种' },
{ value: 'fonds_no', label: '全宗号' },
{ value: 'archive_year', label: '年度' },
{ value: 'security_class', label: '密级' },
{ value: 'case_name', label: '盒名称' },
{ value: 'retention', label: '保管期限' },
{ value: 'department', label: '部门名称' }
{ value: 'case_name', label: '名称' }
],
page: {
total: 0,
@ -107,17 +119,22 @@ export default {
size: null
},
homeSearchWords: '',
homeSearchSelect: ''
homeSearchSelect: []
}
},
mounted() {
if (localStorage.getItem('homeSearchWords') !== null) {
this.keywords = localStorage.getItem('homeSearchWords')
this.select = localStorage.getItem('homeSearchSelect')
const homeSearchSelect = localStorage.getItem('homeSearchSelect')
const homeSearchSelectArray = JSON.parse(homeSearchSelect)
this.select = homeSearchSelectArray
this.dimSearch()
}
},
methods: {
getSelectLabel(option) {
return this.options.find((c) => c.value === option)?.label
},
//
handleDbClick(row) {
const params = {
@ -144,7 +161,7 @@ export default {
if (this.$route.path.indexOf('dashboard') !== -1) {
this.$router.push('/archivesManage/archivesSearch')
localStorage.setItem('homeSearchWords', this.keywords)
localStorage.setItem('homeSearchSelect', this.select)
localStorage.setItem('homeSearchSelect', JSON.stringify(this.select))
} else {
this.dimSearch()
}
@ -163,7 +180,7 @@ export default {
localStorage.removeItem('homeSearchWords')
localStorage.removeItem('homeSearchSelect')
} else {
this.params.criteria = this.select
this.params.criteria = this.select.join(',')
this.params.query = this.keywords.replace(/\s+/ig, ' ')
this.params.page = this.page.page - 1
this.params.size = this.page.size
@ -173,7 +190,7 @@ export default {
},
//
doQuery(params) {
queryVagueArchives(params).then(res => {
querySeniorArchives(params).then(res => {
this.tableData = res.content
this.page.total = res.totalElements
this.resNum = res.totalElements
@ -209,7 +226,7 @@ export default {
width: 100%;
}
.head-container{
padding: 100px 0 30px 0;
padding: 80px 0 30px 0;
text-align: center;
h2{
color: #fff;
@ -280,4 +297,23 @@ export default {
::v-deep ::-webkit-scrollbar-corner{
background: transparent;
}
::v-deep .el-select__tags{
max-width: 100% !important;
}
::v-deep .el-tag.el-tag--info{
font-size: 14px;
color: #fff;
background-color: transparent !important;
border: none !important;
margin: 0 auto !important;
.el-tag__close{
color: #fff;
display: none;
}
&:nth-child(2){
display: none;
margin: 6px 0 4px -4px !important;
}
}
</style>

444
src/views/archivesManage/fileImport/dataImport/index.vue

@ -0,0 +1,444 @@
<template>
<div class="import-container">
<ul class="import-header">
<li><i class="step-img01" /><span>上传数据包</span></li>
<li :class="['dot-img', {'dot-img-active':isShow02 || isShow03}]" />
<li><i :class="['step-img02', {'step-img02-active':isShow02 || isShow03}]" /><span>读取数据</span></li>
<li :class="['dot-img', {'dot-img-active':isShow03}]" />
<li><i :class="['step-img03', {'step-img03-active':isShow03}]" /><span>导入数据</span></li>
</ul>
<!-- <div class="import-title step01">上传数据包</div> -->
<div v-if="isShow01" class="step-content step-upload">
<el-upload
ref="upload"
:limit="1"
:on-exceed="handleExceed"
:before-upload="beforeUpload"
:before-remove="beforeRemove"
:auto-upload="false"
:on-success="handleSuccess"
:on-error="handleError"
:on-remove="handleRemove"
accept=".zip"
:action="fileUploadApi + '?name=' + name"
>
<div class="upload-zip"><i class="el-icon-upload2" />选择文件</div>
<div slot="tip" class="el-upload__tip">上传限制文件类型zip</div>
</el-upload>
</div>
<div v-if="isShow01" class="step-bottom-btn">
<el-button type="primary" @click="handleStep01">下一步</el-button>
</div>
<!-- <div class="import-title step02">读取数据</div> -->
<div v-if="isShow02" class="step-content">
<div class="import-data-number">案卷<span>5000</span> / 卷内<span>10000</span> / 资料<span>8000</span> </div>
<ul class="import-tab">
<li :class="{'active': archivesTabIndex == 0}" @click="changeActiveTab(0)">案卷</li>
<li :class="{'active': archivesTabIndex == 1}" @click="changeActiveTab(1)">文件</li>
<li :class="{'active': archivesTabIndex == 2}" @click="changeActiveTab(2)">资料</li>
</ul>
<el-table
ref="table"
:data="tableData"
style="width: 100%"
height="calc(100vh - 504px)"
@row-click="clickRowHandler"
@selection-change="selectionChangeHandler"
>
<el-table-column prop="security_class" label="密级" align="center" width="80px" />
<el-table-column prop="medium_type" label="载体类型" align="center" width="100px" />
<el-table-column prop="micro_number" label="缩微号" align="center" width="80px" />
<el-table-column prop="archive_no" label="档号" align="center" width="200px" />
<el-table-column prop="page_qty" label="文件件数" align="center" width="100px" />
<el-table-column prop="maintitle" label="案卷题名" align="center" show-overflow-tooltip width="240px" />
<el-table-column prop="begin_date" label="起始时间" align="center" width="140px" />
<el-table-column prop="end_date" label="终止时间" align="center" width="140px" />
<el-table-column prop="archive_ctg_no" label="分类号" align="center" width="140px" />
<el-table-column prop="subject_term" label="主题词" align="center" width="140px" />
<el-table-column prop="remarks" label="附注" align="center" width="120px" />
<el-table-column prop="retention" label="保管期限" align="center" width="120px" />
<el-table-column prop="archive_year" label="年度" align="center" width="100px" />
<el-table-column prop="fonds_no" label="全宗" align="center" width="100px" />
<el-table-column prop="piece_no" label="卷号" align="center" width="100px" />
</el-table>
<!--分页组件-->
<el-pagination
:current-page="page.page"
:total="page.total"
:page-size="page.size"
:pager-count="5"
layout="total, prev, pager, next, sizes"
@size-change="handleSizeChange"
@current-change="handleCurrentPage"
/>
</div>
<div v-if="isShow02" class="step-bottom-btn">
<el-button @click="handleReturn02">上一步</el-button>
<el-button type="primary" @click="handleStep02">下一步</el-button>
</div>
<!-- <div class="import-title step03">导入数据</div> -->
<div v-if="isShow03" class="step-content step-content03">
<el-form ref="form" :model="form" label-width="160px">
<el-row>
<el-form-item label="案卷及文件数据">
<el-checkbox v-model="form.file">导入</el-checkbox>
</el-form-item>
<el-form-item label="遇到重复数据导入方式">
<el-radio-group v-model="form.fileType">
<el-radio label="跳过" />
<el-radio label="覆盖" />
</el-radio-group>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="资料数据">
<el-checkbox v-model="form.data">导入</el-checkbox>
</el-form-item>
<el-form-item label="遇到重复数据导入方式">
<el-radio-group v-model="form.dataType">
<el-radio label="跳过" />
<el-radio label="覆盖" />
</el-radio-group>
</el-form-item>
</el-row>
<el-form-item>
<el-button type="primary" class="submit-btn" @click="submitForm('form')">导入</el-button>
<el-button @click="handleReturn03">取消</el-button>
</el-form-item>
</el-form>
</div>
<el-dialog title="确认删除" :visible.sync="deleteVisible">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<p><span style="color:#fff;">此操作将清空所选数据</span></p>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleDelConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import tableJson from './table.json'
export default {
name: 'DataImport',
components: { },
data() {
return {
name: '',
archivesTabIndex: 0,
deleteVisible: false,
tableData: [],
page: {
page: 1,
size: 10,
total: 0
},
form: {
file: true,
data: true,
fileType: '跳过',
dataType: '跳过'
},
isShow01: true,
isShow02: false,
isShow03: false
}
},
computed: {
...mapGetters([
'baseApi',
'fileUploadApi'
])
},
created() {
this.tableData = tableJson
},
methods: {
handleStep01() {
this.isShow01 = false
this.isShow02 = true
},
handleReturn02() {
this.isShow01 = true
this.isShow02 = false
this.isShow03 = false
},
handleStep02() {
this.isShow01 = false
this.isShow02 = false
this.isShow03 = true
},
handleReturn03() {
this.isShow01 = false
this.isShow02 = true
this.isShow03 = false
},
changeActiveTab(index) {
this.archivesTabIndex = index
},
handleSizeChange(size) {
this.page.size = size
this.page.page = 1
},
handleCurrentPage(val) {
this.page.page = val
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!')
} else {
console.log('error submit!!')
return false
}
})
},
//
upload() {
},
beforeUpload(file) {
},
handleRemove(file, fileList) {
console.log(file, fileList)
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
},
beforeRemove(file, fileList) {
return this.$confirm('此操作将清空所选数据, 是否继续?', '提示')
},
handleSuccess(response, file, fileList) {
// this.crud.notify('', CRUD.NOTIFICATION_TYPE.SUCCESS)
// this.$refs.upload.clearFiles()
// this.crud.status.add = CRUD.STATUS.NORMAL
// this.crud.resetForm()
// this.crud.toQuery()
},
//
handleError(e, file, fileList) {
const msg = JSON.parse(e.message)
this.$message({
message: msg.message,
type: 'error',
duration: 2500
})
this.loading = false
},
// table
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
// table
selectionChangeHandler(val) {
this.selections = val
}
}
}
</script>
<style lang="scss" scoped>
.import-container{
padding: 30px;
height: calc(100vh - 234px);
}
.import-header{
display: flex;
justify-content: center;
align-items: center;
li{
display: flex;
flex-direction: column;
text-align: center;
align-items: center;
width: 140px;
font-size: 14px;
color: #fff;
i{
width: 45px;
height: 45px;
margin-bottom: 20px;
&.step-img01{
background: url('~@/assets/images/step01.png') no-repeat;
background-size: contain;
}
&.step-img02{
background: url('~@/assets/images/step02_2.png') no-repeat;
background-size: contain;
&.step-img02-active{
background: url('~@/assets/images/step02.png') no-repeat;
background-size: contain;
}
}
&.step-img03{
background: url('~@/assets/images/step03_3.png') no-repeat;
background-size: contain;
&.step-img03-active{
background: url('~@/assets/images/step03.png') no-repeat;
background-size: contain;
}
}
}
&.dot-img{
width: 55px;
height: 30px;
background: url('~@/assets/images/dot1.png') no-repeat;
background-size: contain;
&.dot-img-active{
background: url('~@/assets/images/dot2.png') no-repeat;
background-size: contain;
}
}
}
}
.step-content{
position: relative;
}
.step-content03{
margin-top: 50px;
}
.step-upload{
width: 40%;
padding: 30px 0;
margin: 40px auto;
background-color: #02255f;
border-radius: 3px;
div:first-child{
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
}
}
.import-title{
font-size: 14px;
color: #fff;
padding-left: 50px;
margin-bottom: 6px;
height: 50px;
line-height: 50px;
&.step01{
background: url('~@/assets/images/step01.png') no-repeat;
background-size: 30px 30px;
}
&.step02{
background: url('~@/assets/images/step02.png') no-repeat;
background-size: 30px 30px;
}
&.step03{
background: url('~@/assets/images/step03.png') no-repeat;
background-size: 30px 30px;
}
}
.upload-zip{
// margin-left: 50px;
flex-direction: row !important;
width: 100px;
padding: 6px 10px;
margin-bottom: 10px;
font-size: 14px;
color: #fff;
border: 1px solid #339cff;
background-color: transparent;
border-radius: 3px;
& i{
margin-right: 4px;
}
}
::v-deep .el-upload{
display: block;
}
::v-deep .el-upload-list{
margin-top: 20px;
.el-upload-list__item{
font-size: 16px;
line-height: 30px;
&:hover{
background-color: transparent;
}
&:first-child{
margin-top: 0;
}
}
.el-upload-list__item-name [class^=el-icon]{
color: #fff;
}
.el-upload-list__item-name{
color: #fff;
}
.el-icon-close{
display: block;
color: #fff;
top: 8px;
}
}
.step-bottom-btn{
text-align: center;
.el-button.el-button--primary{
color: #fff;
background-color: #1890ff;
border-color: #1890ff;
}
}
.import-data-number{
position: absolute;
right: 10px;
top: 20px;
font-size: 12px;
color: #fff;
& span{
font-weight: bold;
color: rgb(246,81,99);
}
}
.import-tab{
display: flex;
justify-content: flex-start;
margin-bottom: 10px;
li{
padding: 10px 20px 14px 20px;
color: #339CFF;
cursor: pointer;
&.active{
position: relative;
color: #fff;
&::after{
content: "";
position: absolute;
left: 0;
bottom: -1px;
width: 100%;
height: 3px;
border-radius: 3px;
background-color: #fff;
}
}
}
}
::v-deep .el-form{
.el-row{
display: flex;
justify-content: flex-start;
}
.el-form-item{
margin-right: 50px;
.el-form-item__label,
.el-checkbox__label,
.el-radio__label{
color: #fff;
}
}
}
.submit-btn{
background-color: #3a99fd;
border-color: #3a99fd;
margin-top: 20px;
}
</style>

29
src/views/archivesManage/fileImport/dataImport/table.json

@ -0,0 +1,29 @@
[
{
"security_class": "机密",
"medium_type": "纸张",
"micro_number":"-",
"subject_term": "主题词123",
"remarks": "附注123",
"case_no": "A8806117A7B9058F1AA90A",
"responsibleby": "许由",
"begin_date": "2016-09-21",
"end_date": "2016-09-21",
"children_num": 1,
"tid": "",
"organization_matter": "",
"maintitle": "行政事务文件级文书档案2021002",
"archive_ctg_no": "行政事务",
"archive_year": 2021,
"page_qty": 50,
"archive_no": "AA001-D-WS.W-2023-0011",
"fonds_no": "档案室",
"created_date": "2021-10-10 ",
"id": "2102D839B14ABAC03F8FEB",
"is_storage": 2,
"department": "办公室",
"retention": "定期10年",
"piece_no": "001",
"is_borrow": ""
}
]

23
src/views/archivesManage/fileImport/importLog/index.vue

@ -0,0 +1,23 @@
<template>
<div>
导入日志
</div>
</template>
<script>
export default {
name: 'ImportLog',
components: { },
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
</style>

58
src/views/archivesManage/fileImport/index.vue

@ -0,0 +1,58 @@
<template>
<div class="app-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>
<component :is="comName" :ref="comName" />
</div>
</div>
</template>
<script>
import dataImport from './dataImport/index.vue'
import importLog from './importLog/index.vue'
export default {
name: 'FileImport',
components: { dataImport, importLog },
data() {
return {
activeIndex: 0
}
},
computed: {
comName: function() {
if (this.activeIndex === 0) {
return 'dataImport'
} else if (this.activeIndex === 1) {
return 'importLog'
}
return 'dataImport'
}
},
created() {
},
methods: {
changeActiveTab(data) {
this.activeIndex = data
}
}
}
</script>
<style lang="scss" scoped>
.tab-content{
position: relative;
margin-top: 61px;
border: 1px solid #113d72;
}
.tab-content .tab-nav{
margin-bottom: 0;
}
</style>

382
src/views/archivesManage/lendManage/components/lendArchivesList.vue

@ -1,164 +1,218 @@
<template>
<div class="lendComfirm-arcList">
<el-button class="exception-btn" size="mini" :disabled="!selections.length" @click="handleBorrowException"><svg-icon icon-class="exception" class-name="lend-handle" />异常处理</el-button>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table
ref="table"
v-loading="tableLoading"
:data="tableData"
style="min-width: 100%"
@selection-change="selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="categoryName" align="center" label="门类名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="archiveNo" align="center" label="档号" min-width="160" show-overflow-tooltip />
<el-table-column prop="maintitle" align="center" label="题名" min-width="180" show-overflow-tooltip />
<el-table-column prop="caseName" align="center" label="盒名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="folderLocationDetails" align="center" label="存放位置" min-width="300">
<template slot-scope="scope">
<div v-if="scope.row.folderLocationDetails.includes(',')">
<el-tag
v-for="(item,index) in scope.row.folderLocationDetails.split(',')"
:key="index"
:type="item"
effect="dark"
>
{{ item }}
</el-tag>
</div>
<div v-else>
<el-tag effect="dark">{{ scope.row.folderLocationDetails }}</el-tag>
</div>
</template>
</el-table-column>
<el-table-column prop="borrowType" align="center" label="借阅状态" min-width="100">
<template slot-scope="scope">
<!-- 待借阅 -->
<span :class="borrowStyle(scope.row.borrowType)" style="width:76px">{{ scope.row.borrowType | borrowStatus }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" label="操作时间" min-width="120">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
</div>
<!-- 异常处理 -->
<el-dialog title="异常处理" :visible.sync="exceptionVisible" :close-on-click-modal="false" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定当前档案存在异常情况</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleExceptionConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { FetchInitArchivesByOrderNo, FetchBorrowException } from '@/api/archivesManage/lendManage'
import { lendingCrud } from '../mixins/lending'
export default {
name: 'LendArchivesList',
mixins: [lendingCrud],
props: {
archivesOrderNum: {
type: String,
default: function() {
return ''
}
}
},
data() {
return {
selections: [],
tableData: [],
tableLoading: false,
exceptionVisible: false
}
},
watch: {
archivesOrderNum: function(newValue, oldValue) {
if (newValue) {
this.getArchivesTable()
}
}
},
created() {
},
mounted() {
this.getArchivesTable()
},
methods: {
//
handleBorrowException() {
const index = this.selections.findIndex(item => item.borrowType === -1)
if (index === -1) {
this.exceptionVisible = true
} else {
this.$message.error('当前档案为异常状态,请勿重复操作!')
return
}
},
//
handleExceptionConfirm() {
const params = this.selections.map(item => item.id)
FetchBorrowException(params).then(data => {
if (data === this.selections.length) {
this.$message.success('已成功加入异常!')
this.exceptionVisible = false
this.getArchivesTable()
}
})
},
// list
getArchivesTable() {
this.tableLoading = true
const params = {
'orderNo': this.archivesOrderNum
}
FetchInitArchivesByOrderNo(params).then(data => {
if (data) {
this.tableData = data
this.tableLoading = false
}
})
},
selectionChangeHandler(val) {
this.selections = val
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
handleClose(done) {
this.exceptionVisible = false
done()
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
.lendComfirm-arcList{
.exception-btn{
margin: 20px 0;
.lend-handle{
margin-right: 6px;
}
}
.container-wrap{
min-height: auto;
}
}
</style>
<template>
<div class="lendComfirm-arcList">
<el-button class="exception-btn" size="mini" :disabled="!selections.length" @click="handleBorrowException"><svg-icon icon-class="exception" class-name="lend-handle" />异常处理</el-button>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table
ref="table"
v-loading="tableLoading"
:data="tableData"
style="min-width: 100%"
@selection-change="selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="categoryName" align="center" label="门类名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="archiveNo" align="center" label="档号" min-width="160" show-overflow-tooltip />
<el-table-column prop="maintitle" align="center" label="题名" min-width="180" show-overflow-tooltip />
<el-table-column prop="caseName" align="center" label="盒名称" min-width="100" show-overflow-tooltip />
<el-table-column prop="folderLocationDetails" align="center" label="存放位置" min-width="300">
<template slot-scope="scope">
<div v-if="scope.row.folderLocationDetails.includes(',')">
<el-tag
v-for="(item,index) in scope.row.folderLocationDetails.split(',')"
:key="index"
:type="item"
effect="dark"
>
{{ item }}
</el-tag>
</div>
<div v-else>
<el-tag effect="dark">{{ scope.row.folderLocationDetails }}</el-tag>
</div>
</template>
</el-table-column>
<el-table-column prop="borrowType" align="center" label="借阅状态" min-width="100">
<template slot-scope="scope">
<!-- 待借阅 -->
<span :class="borrowStyle(scope.row.borrowType)" style="width:76px">{{ scope.row.borrowType | borrowStatus }}</span>
</template>
</el-table-column>
<el-table-column prop="borrowType" align="center" label="开架操作" min-width="80">
<template slot-scope="scope">
<el-button v-if="scope.row.folderLocationDetails" size="mini" type="primary" @click="openCol(scope.row.folderLocationDetails)">开架</el-button>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" label="操作时间" min-width="130">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
</div>
<!-- 异常处理 -->
<el-dialog title="异常处理" :visible.sync="exceptionVisible" :close-on-click-modal="false" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定当前档案存在异常情况</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleExceptionConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import { FetchInitArchivesByOrderNo, FetchBorrowException } from '@/api/archivesManage/lendManage'
import { lendingCrud } from '../mixins/lending'
import CallExternal from '@/api/storeManage/deviceManage/device'
export default {
name: 'LendArchivesList',
mixins: [lendingCrud],
props: {
archivesOrderNum: {
type: String,
default: function() {
return ''
}
}
},
data() {
return {
selections: [],
tableData: [],
tableLoading: false,
exceptionVisible: false,
deviceData: null
}
},
watch: {
archivesOrderNum: function(newValue, oldValue) {
if (newValue) {
this.getArchivesTable()
}
}
},
created() {
},
mounted() {
this.getArchivesTable()
},
methods: {
//
handleBorrowException() {
const index = this.selections.findIndex(item => item.borrowType === -1)
if (index === -1) {
this.exceptionVisible = true
} else {
this.$message.error('当前档案为异常状态,请勿重复操作!')
return
}
},
//
handleExceptionConfirm() {
const params = this.selections.map(item => item.id)
FetchBorrowException(params).then(data => {
if (data === this.selections.length) {
this.$message.success('已成功加入异常!')
this.exceptionVisible = false
this.getArchivesTable()
}
})
},
// list
getArchivesTable() {
this.tableLoading = true
const params = {
'orderNo': this.archivesOrderNum
}
FetchInitArchivesByOrderNo(params).then(data => {
if (data) {
this.tableData = data
this.tableLoading = false
this.getDeviceListAll()
}
})
},
selectionChangeHandler(val) {
this.selections = val
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
handleClose(done) {
this.exceptionVisible = false
done()
},
//
getDeviceListAll() {
const params = {
page: 0,
size: 10,
sort: 'sequence,asc',
storeroomId: 'D6490DA3D4261E8C26D0E3'
}
CallExternal.getDeviceList(params).then(data => {
data.content.map(item => {
if (item.deviceTypeId.name === '密集架') { //
this.deviceData = item
}
})
})
},
//
openCol(data) {
const location = data.split(' ')[2]
const pattern = /(\d+)区(\d+)列(\d+)节/
const matches = location.match(pattern)
let areaNumber
let colNumber
if (matches !== null) {
areaNumber = matches[1]
colNumber = matches[2]
}
const params = {
deviceId: this.deviceData.id,
quNo: areaNumber,
colNo: colNumber,
leNo: '',
divNo: '',
zyNo: ''
}
CallExternal.FetchCallExternalOpenCol(params).then(res => {
if (res.success && res.success === '0') {
this.$message.success('开架执行成功')
} else {
this.$message.error(res.msg)
}
}).catch((error) => {
console.log(error)
this.$message.error('连接失败')
})
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
.lendComfirm-arcList{
.exception-btn{
margin: 20px 0;
.lend-handle{
margin-right: 6px;
}
}
.container-wrap{
min-height: auto;
}
}
</style>

10
src/views/components/SecurityDoor.vue

@ -8,17 +8,17 @@
</p>
</h3>
<el-table ref="table" style="min-width: 100%;" :height="height" :data="tableData" class="warehose-el-table" stripe>
<el-table-column prop="createTime" label="时间" align="center" min-width="60">
<el-table-column prop="createTime" label="时间" align="center" width="100">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="库房" align="center" min-width="30">
<template>
档案库
<el-table-column label="位置" align="center" width="120">
<template slot-scope="scope">
<div>{{ scope.row.deviceName }}</div>
</template>
</el-table-column>
<el-table-column prop="alarmMsg" label="警情" align="center" :show-overflow-tooltip="true" min-width="85" />
<el-table-column prop="alarmMsg" label="警情" align="center" />
</el-table>
</div>
</template>

30
src/views/storeManage/warehouse3D/index.vue

@ -1,6 +1,10 @@
<template>
<div class="warehouse-main">
<div class="warehouse-tab">
<div class="floor-switch">
<span>7</span>
<span class="active-floor">5</span>
</div>
<ul class="warehouse-nav">
<li :class="{ 'active-nav': activeIndex == 0 }" @click="changeActiveTab(0)">
<span />
@ -227,4 +231,30 @@ export default {
}
}
}
.floor-switch{
position: absolute;
left: 30px;
bottom: 140px;
display: flex;
flex-direction: column;
z-index: 99999;
span{
display: block;
padding: 0 15px;
margin-bottom: 10px;
height: 34px;
line-height: 32px;
font-size: 18px;
color: #339cff;
border: 1px solid #339cff;
border-radius: 4px;
cursor: pointer;
&.active-floor,
&:hover{
color: #fff;
background-color: #113d72;
}
}
}
</style>
Loading…
Cancel
Save