中航光电热表web
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.
 
 
 
 

543 lines
21 KiB

<template>
<basic-container>
<avue-crud ref="materalCrud" :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page"
@row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
@row-save="rowSave" @row-update="rowUpdate" :before-open="beforeOpen"
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad"
:permission="permissionList" @sort-change="sortChange">
<!-- <template #goodsCode="{ row }">{{ row.coGoods.goodsCode }}</template>
<template #goodsName="{ row }">{{ row.coGoods.goodsName }}</template>
<template #bsBasicClass="{ row }">{{ row.bsBasicClass.name }}</template>
<template #turnover="{ row }">{{ row.turnover.userName }}</template>
<template #mtltmrk="{ row }">{{ row.coGoods.mtltmrk }}</template>
<template #specifications="{ row }">{{ row.coGoods.specifications }}</template> -->
<template #menu-left>
<el-button type="danger" @click="handleDelete" v-if="permission.materialPreserve_del">删除</el-button>
<el-button type="primary" @click="handlePaint" v-if="permission.materialPreserve_paintLoss">缺漆信息</el-button>
</template>
<template #menu-right>
<el-button type="danger" @click="handleSearch(1)" v-if="permission.materialPreserve_needGoods" plain>需报料</el-button>
<el-button type="warning" @click="handleSearch(2)" v-if="permission.materialPreserve_needTail" plain>需跟踪</el-button>
<el-button type="primary" @click="handleSearch(3)" v-if="permission.materialPreserve_awaitMaterial" plain>待领料</el-button>
<el-button type="success" @click="handleSearch(4)" v-if="permission.materialPreserve_normal" plain>正常</el-button>
<el-button type="info" @click="handleSearch(5)" v-if="permission.materialPreserve_notUsed" plain>长期未使用</el-button>
</template>
</avue-crud>
<paint-loss-dialog v-if="isOpen" :openShow="isOpen" title="缺漆信息" :data="laInData" @closeDialog="closeDialog"></paint-loss-dialog>
</basic-container>
</template>
<script>
import {getMaterialStatusList,addMaterialStatus,editMaterialStatus,delMaterialStatus} from "@/api/storeManagement/materialPreserve"
import paintLossDialog from './components/paintLossDialog.vue'
import { mapGetters } from 'vuex';
export default {
components: {
paintLossDialog
},
data() {
return {
selectionList: [],
loading: false,
data: [],
form: {},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
isOpen:false,
query:{},
laInData:[],
option: {
tip: false,
align: 'center',
// size: 'medium',
height: 'auto',
labelWidth: 150,
simplePage: true,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
selection: true,
viewBtn: false,
editBtn: true,
addBtn: true,
delBtn: false,
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
menuWidth: 70,
dialogWidth: 1200,
dialogClickModal: false,
searchEnter: true,
excelBtn: false,
filterBtn: true,
searchShowBtn: false,
excelBtn: true,
index: false,
showOverflowTooltip: true,
searchLabelPosition: 'left',
searchLabelWidth: 'auto',
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: 'right',
column: [
{
label: '物料编码',
prop: 'goodsCode',
type: 'select',
addDisplay: false,
editDisplay: false,
span: 8,
sortable: 'custom',
hide:true,
width: 200,
search: true,
//
rules: [
{
required: true,
message: '请输入物料编码',
trigger: 'click',
},
],
dicUrl:"/api/blade-wms/stGoods/list",
remote: true,
props:{
label: 'goodsCode',
value: 'goodsCode',
res: 'data.records',
},
},
{
label: '物料编码',
prop: 'goodsId',
type: 'select',
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 200,
search: false,
rules: [
{
required: true,
message: '请输入物料编码',
trigger: 'click',
},
],
dicUrl:"/api/blade-wms/stGoods/list?current=1&size=9999&goodsCode={{key}}",
remote: true,
props:{
label: 'goodsCode',
value: 'id',
res: 'data.records',
},
onChange:(value =>{
let tmp = value.dic.find(item => item.id == value.value)
this.form.goodsName = tmp.goodsName
})
},
{
label: '物料名称',
prop: 'goodsName',
addDisabled: true,
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 200,
search: true,
rules: [
{
required: true,
message: '请输入物料名称',
trigger: 'click',
},
],
},
{
label: '型号/牌号',
prop: 'materialModel',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 200,
search: false,
rules: [
{
required: true,
message: '请输入型号/牌号',
trigger: 'click',
},
],
},
{
label: '物料规格',
prop: 'specifications',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 200,
search: false,
rules: [
{
required: true,
message: '请输入物料规格',
trigger: 'click',
},
],
},
{
label: '季度月使用量均值',
prop: 'useAverage',
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 200,
search: false,
},
{
label: '一级库存',
prop: 'firstStore',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 200,
search: false,
rules: [
{
required: true,
message: '请输入一级库存',
trigger: 'click',
},
],
},
{
label: '二级库存',
prop: 'lastStore',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 200,
search: false,
rules: [
{
required: true,
message: '请输入二级库存',
trigger: 'click',
},
],
},
{
label: '计划数量',
prop: 'planQty',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 120,
search: false,
rules: [
{
required: true,
message: '请输入计划数量',
trigger: 'click',
},
],
},
{
label: '是否油漆',
prop: 'paint',
type: 'select',
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 120,
search: false,
rules: [
{
required: true,
message: '请输入是否油漆',
trigger: 'click',
},
],
dicData: [
{ label: '是', value: 1 },
{ label: '否', value: 0 },
]
},
{
label: '周转工',
prop: 'turnover',
type: 'select',
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 200,
search: true,
searchLabelWidth: 60,
remote: true,
props: {
label: 'codeRealName',
value: 'id',
res: 'data.records',
},
dicUrl:'/api/blade-system/user/page?current=1&size=9999&realName={{key}}'
},
{
label: '配送标记',
prop: 'delivery',
type: "select",
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 120,
search: true,
rules: [
{
required: true,
message: '请输入配送标记',
trigger: 'click',
},
],
dicData: [
{ label: '是', value: 1 },
{ label: '否', value: 0 },
]
},
{
label: '是否特殊',
prop: 'special',
type: 'select',
addDisplay: true,
editDisplay: true,
sortable: 'custom',
span: 8,
width: 120,
search: true,
rules: [
{
required: true,
message: '请输入是否特殊',
trigger: 'click',
},
],
dicData: [
{ label: '是', value: true },
{ label: '否', value: false },
]
},
{
label: '状态',
prop: 'goodsStatus',
type: 'select',
addDisplay: false,
editDisplay: false,
sortable: 'custom',
span: 8,
width: 200,
search: true,
rules: [
{
required: true,
message: '请输入状态',
trigger: 'click',
},
],
dicData: [
{
value: 1,
label: '需报料'
}, {
value: 2,
label: '需跟踪'
}, {
value: 3,
label: '待领料'
}, {
value: 4,
label: '正常'
}, {
value: 5,
label: '长期未使用'
}
]
},
]
}
}
},
computed: {
...mapGetters(['permission']),
permissionList() {
return {
addBtn: this.validData(this.permission.materialPreserve_add, false),
editBtn: this.validData(this.permission.materialPreserve_edit, false),
};
},
},
mounted() {
},
methods: {
// 排序
sortChange({ prop, order }) {
this.query.descs = undefined;
this.query.ascs = undefined;
let orderByFieldKey = order === 'descending' ? 'descs' : 'ascs';
this.query[orderByFieldKey] = !prop
? undefined
: prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
// 重新加载数据
this.onLoad(this.page, this.query);
},
searchChange(params, done){
this.query = params
this.page.currentPage = 1;
this.onLoad()
done()
},
searchReset(){
this.query = {}
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage
},
sizeChange(pageSize){
this.page.pageSize = pageSize
},
refreshChange() {
this.onLoad();
},
selectionChange(val) {
this.selectionList = val
},
handleSearch(val){
this.query.goodsStatus = val
this.onLoad()
},
closeDialog(){
this.isOpen = false
},
beforeOpen(done, type) {
if (['edit', 'view'].includes(type)) {
console.log('form---------------------',this.form)
this.form.turnover = this.form.turnover && this.form.turnover + ''
this.form.goodsId = this.form.goodsId && this.form.goodsId + ''
done();
}else{
done();
}
},
handlePaint(){
this.laInData = []
const tableData = this.data
console.log('tableData------------------',tableData)
tableData.forEach(item => {
if (item.goodsStatus === 1 && item.paint) {
this.laInData.push(item);
}
});
console.log('laInData------------------',this.laInData)
if (this.laInData.length > 0) {
this.isOpen = true;
} else {
this.$message.info('暂无缺漆信息数据');
}
},
handleDelete() {
if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据')
} else {
this.$confirm('确定删除选中数据?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
delMaterialStatus({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
}
},
rowSave(row, done, loading){
let params = {
goodsId:row.goodsId,
useAverage:row.useAverage,
delivery:row.delivery == 1 ? true : false,
paint:row.paint == 1 ? true : false,
special:row.special,
turnover:row.turnover,
}
addMaterialStatus(params).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.onLoad()
done()
}
})
},
rowUpdate(row, index, done, loading){
row.delivery = row.delivery == 1 ? true : false
row.paint = row.paint == 1 ? true : false
editMaterialStatus(row).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.onLoad()
done()
}
})
},
onLoad() {
getMaterialStatusList({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
res.data.data.records.map(item =>{
item.paint = item.paint != '' && item.paint ? 1 : 0
item.delivery = item.delivery != '' && item.delivery ? 1 : 0
})
this.data = res.data.data.records
console.log('data-------------',this.data)
this.page.total = res.data.data.total;
})
}
}
}
</script>
<style></style>