【前端】智能库房综合管理系统前端项目
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.
 
 
 
 
 

330 lines
11 KiB

<template>
<div class="app-container">
<div class="head-container" style="padding:0 0 20px 0">
<div>
<el-button size="mini" class="iconfont icon-xinzengpandian-fanbai" @click="handleAdd">新增</el-button>
<el-button
icon="el-icon-delete"
size="mini"
style="margin:0 0 0 10px"
:disabled="!(selections.length) "
@click="handleDel"
>删除</el-button>
<el-button size="mini" icon="el-icon-tickets" :disabled="!(selections.length===1 && selections[0].checkState === 1) " @click="handleCalc">结算</el-button>
<el-button :loading="btnLoading" size="mini" :disabled="!(selections.length ===1)" icon="el-icon-download" @click="handleExport">导出</el-button>
<el-select v-model="stateVal" class="filter-item" style="width: 90px;height:30px;margin:0 10px 0 10px" @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="keyWord"
size="small"
clearable
placeholder="请输入关键词"
style="width: 300px;margin-right:10px"
class="input-prepend filter-item"
@keyup.enter.native="crud.toQuery"
>
<el-select slot="prepend" v-model="cateSearch" style="width: 100px;">
<el-option
v-for="item in cateSearchOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-input>
<rrOperation />
</div>
<div>
<el-button size="mini" icon="el-icon-brush" @click="handleClear">清空缓存</el-button>
</div>
<!-- <crudOperation :permission="permission" /> -->
</div>
<div class="container-wrap" style="min-height: calc(100vh - 242px)">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table
ref="table"
:data="crud.data"
:cell-class-name="cell"
style="min-width: 100%"
height="calc(100vh - 315px)"
@selection-change="selectionChangeHandler"
@row-click="clickRowHandler"
@row-dblclick="handleDbClick"
>
<el-table-column type="selection" width="55" />
<el-table-column type="index" align="center" label="序号" width="55" />
<el-table-column prop="id" align="center" label="盘点单号" min-width="100" />
<el-table-column prop="region" align="center" label="包含位置" min-width="140" />
<el-table-column prop="checkState" align="center" label="盘点状态" min-width="60">
<template slot-scope="scope">
<!-- 已执行 / 待执行/执行中 -->
<span class="clear">{{ scope.row.checkState | checkState }}</span>
</template>
</el-table-column>
<el-table-column prop="correct" align="center" label="在库档案" min-width="60" />
<el-table-column prop="checked" align="center" label="已盘档案" min-width="60" />
<el-table-column prop="abnormal" align="center" label="异常档案" min-width="60" />
<el-table-column prop="noCheck" align="center" label="未盘档案" min-width="60" />
<el-table-column prop="borrowed" align="center" label="已借档案" min-width="60" />
<el-table-column prop="dislocation" align="center" label="错位档案" min-width="60" />
<el-table-column prop="others" align="center" label="多余档案" min-width="60" />
<el-table-column prop="create_time" align="center" label="创建时间" min-width="100">
<template slot-scope="scope">
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
<!-- 删除模态框 -->
<el-dialog title="确认删除" :visible.sync="deleteVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span style="font-size:16px">确定删除当前盘点任务?</span></p>
<p class="delt-tip"><span>提示:确定删除后,该数据将无法找回!</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleDelConfirm">确定</el-button>
</div>
</div>
</el-dialog>
<!-- 新增模态框 -->
<addCheck ref="addCheckDom" />
<!-- 盘点详情 -->
<checkDetail ref="checkDetailDom" />
<!-- 结算 -->
<CalcSteps ref="calcDom" />
</div>
</template>
<script>
import rrOperation from '@crud/RR.operation'
import CRUD, { presenter } from '@crud/crud'
import pagination from '@crud/Pagination'
import addCheck from './module/addCheck.vue'
import checkDetail from './module/checkDetail.vue'
import { getArrange, getArrangeDetailes, checkDel, settlement, arrangeClean } from '@/api/archivesManage/archivesCheck'
import { exportFile } from '@/utils/index'
import qs from 'qs'
import { mapGetters } from 'vuex'
import CalcSteps from './module/calcSteps.vue'
export default {
name: 'ArchivesCheck',
components: { pagination, rrOperation, addCheck, checkDetail, CalcSteps },
filters: {
checkState(val) {
switch (val) {
case 0:
return '待执行'
case 1:
return '执行中'
case 2:
return '已执行'
}
}
},
mixins: [presenter()],
cruds() {
return CRUD({
url: 'api/arrange/initArrangeList',
// url: 'api/case/initCaseList',
// crudMethod: caseCrudMethod,
title: '档案盒',
optShow: {
add: false,
edit: false,
del: false,
download: false,
group: false
}
})
},
// dicts: ['job_status'],
data() {
return {
btnLoading: false,
// tableData: [],
selections: [],
keyWord: '',
stateVal: -1,
stateOptions: [
{ value: -1, label: '全部' },
{ value: 0, label: '待执行' },
{ value: 1, label: '执行中' },
{ value: 2, label: '已执行' }
],
cateSearch: 'region',
cateSearchOptions: [
{ value: 'region', label: '区域' },
{ value: 'id', label: '盘点单号' }
],
deleteVisible: false
}
},
computed: {
...mapGetters([
'baseApi'
])
},
methods: {
// 获取数据前的处理
[CRUD.HOOK.beforeRefresh]() {
this.crud.downloadLoading = true
this.crud.query.checkState = null
this.crud.query.id = null
this.crud.query.region = null
if (this.stateVal > -1) {
this.crud.query.checkState = this.stateVal
}
// todo
if (this.cateSearch === 'region') {
this.crud.query.region = this.keyWord
} else {
this.crud.query.id = this.keyWord
console.log(this.crud.query.id)
// this.crud.data = this.crud.data.filter(item => item.id.includes(this.keyWord))
console.log(this.crud.data)
}
this.crud.downloadLoading = false
},
// 删除
handleDel() {
const bool = this.selections.every(item => item.checkState === 0)
if (bool) {
this.deleteVisible = true
} else {
this.$message({
message: '只能删除待执行的档案',
type: 'warning'
})
}
},
handleDelConfirm() {
const ids = this.selections.map(item => { return item.id })
checkDel(ids).then(res => {
if (res) {
this.crud.refresh()
this.$message({
message: '删除成功',
type: 'success'
})
this.deleteVisible = false
} else {
this.$message.error('删除失败')
}
})
},
// 结算
handleCalc() {
const calcDom = this.$refs.calcDom
calcDom.calcVisible = true
calcDom.stepActive = 2
const params = {
'orderId': this.selections[0].id
}
settlement(params).then(res => {
if (res) {
calcDom.stepActive = 3
calcDom.res = 1
calcDom.source = this.source
// calcDom.calcVisible = false
this.crud.refresh()
} else {
calcDom.stepActive = 3
calcDom.res = 0
}
})
},
// 清空缓存
handleClear() {
arrangeClean().then(res => {
// this.crud.refresh()
this.$message({
message: '清空成功',
type: 'success'
})
})
},
// 新增盘点
handleAdd() {
this.$refs.addCheckDom.addFormVisible = true
},
handleClose() {
this.deleteVisible = false
},
cell({ row, columnIndex }) {
if (row.checkState === 2 && columnIndex === 4) {
return 'have-clear'
} else if (row.checkState === 0 && columnIndex === 4) {
return 'fail-clear'
} else if (row.checkState === 1 && columnIndex === 4) {
return 'no-clear'
}
},
selectionChangeHandler(val) {
this.selections = val
},
clickRowHandler(row) {
this.$refs.table.toggleRowSelection(row)
},
// 双击详情
handleDbClick(row) {
const checkDetailDom = this.$refs.checkDetailDom
const params = {
orderNo: row.id
}
getArrange(params).then(res => {
checkDetailDom.rowData.push(res)
})
getArrangeDetailes(params).then(res => {
checkDetailDom.tableData = res.content
})
checkDetailDom.detailVisible = true
},
// 导出
handleExport() {
this.btnLoading = true
const id = this.selections[0].id
const params = {
'orderNo': id
}
exportFile(this.baseApi + '/api/arrange/exportArrange?' + qs.stringify(params, { indices: false }))
this.btnLoading = false
}
}
}
</script>
<style lang="scss" scoped>
@import '~@/assets/styles/lend-manage.scss';
@import "~@/assets/styles/archives-manage.scss";
.head-container {
color: #fff;
display: flex;
justify-content: space-between;
}
::v-deep .el-dialog__footer {
background-color: #031435;
}
.el-dialog .dialog-footer {
padding: 0;
margin: 0;
}
.svg-style{
margin-right: 5px;
}
::v-deep .input-prepend .el-input__inner{
padding-left: 94px;
}
</style>