Browse Source

1.备品备件采购功能:更新一个批次生成一个采购订单号,增加请购原因栏位

2.备品备件采购记录功能:改成主子表样式,增加导出功能
java8
赵宏斌 7 months ago
parent
commit
59703b984e
  1. 3
      src/api/partspare/purchaseOrder.js
  2. 17
      src/views/modules/partspare/inventoryStockPurchasing.vue
  3. 422
      src/views/modules/partspare/purchaseOrder.vue

3
src/api/partspare/purchaseOrder.js

@ -4,6 +4,9 @@ export const saveBatchPurchaseOrder = (data) =>createAPI(`purchase/order/batch/s
export const queryPurchaseOrder = (data) =>createAPI(`purchase/order/${data.no}/${data.size}`, 'post', data)
export const queryPurchaseOrderHead = (data) =>createAPI(`purchase/order/head/`, 'post', data)
export const queryPurchaseOrder2 = (data) =>createAPI(`purchase/order/linequery/`, 'post', data)
export const cancelPurchaseOrder = (data) =>createAPI(`purchase/order/cancel`, 'post', data)
export const closePurchaseOrder = (data) =>createAPI(`purchase/order/close`, 'post', data)

17
src/views/modules/partspare/inventoryStockPurchasing.vue

@ -2,7 +2,7 @@
import {getWareHouseList} from "../../../api/partspare/wareHouseEntity";
import {getAllBuList} from "../../../api/factory/site";
import {getInventoryStockList} from "../../../api/partspare/inventorystock";
import {saveBatchPurchaseOrder} from "../../../api/partspare/purchaseOrder";
import {saveBatchPurchaseOrder, saveBatchPurchaseOrderHead} from "../../../api/partspare/purchaseOrder";
import {Decimal} from "decimal.js";
export default {
@ -434,6 +434,7 @@ export default {
},
handleSelectionChange(val) {
let qty = 0;
let rs = '库存不足'
this.selectionDataList = val.map(item => {
if (new Decimal(item.minStock).toNumber() > new Decimal(item.qtyOnHand).toNumber()){
qty = new Decimal(item.minStock).sub(new Decimal(item.qtyOnHand)).toNumber()
@ -441,6 +442,7 @@ export default {
return {
...item,
purchaseQty: qty,
purchasereason:rs
}
});
},
@ -459,6 +461,7 @@ export default {
inventoryStockId: item.id,
id:null,
qty: item.purchaseQty,
purchasereason: item.purchasereason,
}
})
this.purchaseLoading = true
@ -683,6 +686,18 @@ export default {
<el-input-number style="width: 100%;" :min="0" :controls="false" :step="0" v-model="selectionDataList[$index].purchaseQty"></el-input-number>
</template>
</el-table-column>
<el-table-column label="请购原因" align="center" min-width="100">
<template slot-scope="{row,$index}">
<el-select v-model="selectionDataList[$index].purchasereason" style="width: 100%">
<el-option label="库存不足" value="库存不足"></el-option>
<el-option label="备件故障" value="备件故障"></el-option>
<el-option label="备件到寿命维保" value="备件到寿命维保"></el-option>
<el-option label="改造" value="改造"></el-option>
<el-option label="生产需求" value="生产需求"></el-option>
<el-option label="其他" value="其他"></el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</div>
<el-footer style="text-align: center;line-height: 1;height: 30px;margin-top: 10px">

422
src/views/modules/partspare/purchaseOrder.vue

@ -1,6 +1,12 @@
<script>
import {getAllBuList} from "../../../api/factory/site";
import {cancelPurchaseOrder, closePurchaseOrder, queryPurchaseOrder} from "../../../api/partspare/purchaseOrder";
import {
cancelPurchaseOrder,
closePurchaseOrder,
queryPurchaseOrder, queryPurchaseOrder2,
queryPurchaseOrderHead
} from "../../../api/partspare/purchaseOrder";
import ExportUtil from "@/utils/export";
export default {
name: "purchaseOrder",
@ -17,22 +23,30 @@ export default {
endDate: null,
no: 1,
size: 50,
purchaseOrderNo:'',
isExport:'',
exportBy:'',
exportTime:null
},
activeName:'detail',
userBuList: [],
dataList: [],
dataListHead:[],
queryLoading: false,
total:0,
totalHead:0,
queryLineRow:{},
columns:[
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1BuDesc',
serialNumber: '200101107Table1headNum',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'buDesc',
columnProp: 'headNum',
headerAlign: 'center',
align: 'center',
columnLabel: 'BU',
columnLabel: '序号',
columnHidden: false,
columnImage: false,
columnSortable: false,
@ -40,23 +54,24 @@ export default {
status: true,
fixed: '',
columnWidth: 80
},{
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1PurchaseOrderNo',
serialNumber: '200101107Table1BuDesc',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'purchaseOrderNo',
columnProp: 'buDesc',
headerAlign: 'center',
align: 'LEFT',
columnLabel: '采购订单号',
align: 'center',
columnLabel: 'BU',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
columnWidth: 80
},
{
userId: this.$store.state.user.name,
@ -94,6 +109,24 @@ export default {
fixed: '',
columnWidth: 160
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1Qty',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'purchasereason',
headerAlign: 'center',
align: 'center',
columnLabel: '加购原因',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
@ -166,28 +199,84 @@ export default {
fixed: '',
columnWidth: 80
},
// {
// userId: this.$store.state.user.name,
// functionId: 200101107,
// serialNumber: '200101107Table1CreateTime',
// tableId: '200101107Table1',
// tableName: '',
// columnProp: 'createTime',
// headerAlign: 'center',
// align: 'center',
// columnLabel: '',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 140
// },
// {
// userId: this.$store.state.user.name,
// functionId: 200101107,
// serialNumber: '200101107Table1CreateBy',
// tableId: '200101107Table1',
// tableName: '',
// columnProp: 'createBy',
// headerAlign: 'center',
// align: 'left',
// columnLabel: '',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 80
// },
],
columns_head:[
{
userId: this.$store.state.user.name,
functionId: 200101106,
serialNumber: '200101106Table1BuDesc',
tableId: '200101106Table1',
tableName: '备品备件采购表',
columnProp: 'buDesc',
headerAlign: 'center',
align: 'center',
columnLabel: 'BU',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1CreateTime',
serialNumber: '200101107Table1purchaseOrderNo',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'createTime',
columnProp: 'purchaseOrderNo',
headerAlign: 'center',
align: 'center',
columnLabel: '下单时间',
columnLabel: '采购订单号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 140
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1CreateBy',
serialNumber: '200101107Table1createBy',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'createBy',
@ -202,7 +291,79 @@ export default {
fixed: '',
columnWidth: 80
},
],
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1createTime',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'createTime',
headerAlign: 'center',
align: 'center',
columnLabel: '下单时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1isExport',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'isExport',
headerAlign: 'center',
align: 'center',
columnLabel: '是否导出(Y/N)',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1exportBy',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'exportBy',
headerAlign: 'center',
align: 'left',
columnLabel: '导出人',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
{
userId: this.$store.state.user.name,
functionId: 200101107,
serialNumber: '200101107Table1exportTime',
tableId: '200101107Table1',
tableName: '备品备件采购表',
columnProp: 'exportTime',
headerAlign: 'center',
align: 'center',
columnLabel: '导出时间',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 80
},
]
}
},
methods:{
@ -216,12 +377,26 @@ export default {
}
})
},
changeData(row){
this.queryLoading = true
this.queryLineRow = JSON.parse(JSON.stringify(row));
queryPurchaseOrder2(this.queryLineRow).then((data)=>{
this.dataList = data.data.rows
this.total = data.data.total
this.queryLoading = false
}).catch((error)=>{
this.$message.error(error)
this.queryLoading = false
})
},
handleQuery(){
//
this.dataList = []
this.queryLoading = true
queryPurchaseOrder(this.queryParams).then(({data})=>{
queryPurchaseOrderHead(this.queryParams).then(({data})=>{
if (data && data.code === 0) {
this.dataList = data.rows
this.total = data.total
this.dataListHead = data.rows
this.totalHead = data.total
}else {
this.$message.warning(data.msg)
}
@ -230,6 +405,19 @@ export default {
this.$message.error(error)
this.queryLoading = false
})
// queryPurchaseOrder(this.queryParams).then(({data})=>{
// if (data && data.code === 0) {
// this.dataList = data.rows
// this.total = data.total
// }else {
// this.$message.warning(data.msg)
// }
// this.queryLoading = false
// }).catch((error)=>{
// this.$message.error(error)
// this.queryLoading = false
// })
},
handleQueryBySize(val){
this.queryParams.size = val;
@ -249,6 +437,7 @@ export default {
if (data && data.code === 0) {
this.$message.success(data.msg)
this.handleQuery()
this.changeData(this.queryLineRow)
}else {
this.$message.warning(data.msg)
}
@ -274,7 +463,18 @@ export default {
this.$message.error(error)
})
})
}
},
async exportExcel() {
if(this.queryLineRow.id==null||this.queryLineRow.id==''){
this.$message.warning("请先选中您要导出的采购订单")
return
}
ExportUtil.export(
"/purchase/order/downloadPo",
this.queryLineRow, this.queryLineRow.purchaseOrderNo+"采购单.xlsx"
);
this.handleQuery()
},
},
watch:{
queryLoading(newVal,oldVal){
@ -310,17 +510,26 @@ export default {
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="备品备件编码">
<el-input v-model="queryParams.partNo" clearable></el-input>
<el-form-item label="采购订单号">
<el-input v-model="queryParams.purchaseOrderNo" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="是否导出(Y/N)">
<!-- <el-input v-model="queryParams.isExport" clearable></el-input>-->
<el-select v-model="queryParams.isExport" style="width: 100%"placeholder="请选择" clearable>
<el-option label="Y" value="Y"></el-option>
<el-option label="N" value="N"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="备品备件名称">
<el-input v-model="queryParams.partDescription" clearable></el-input>
<el-form-item label="导出人">
<el-input v-model="queryParams.exportBy" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="span*2">
<el-form-item label="下单日期">
<el-form-item label="导出日期">
<el-date-picker
style="width: 47.5%"
v-model="queryParams.startDate"
@ -340,28 +549,80 @@ export default {
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="span">
<el-form-item label="状态">
<el-select v-model="queryParams.status" placeholder="请选择" clearable style="width: 100%">
<el-option label="已取消" value="已取消"> </el-option>
<el-option label="已关闭" value="已关闭"> </el-option>
<el-option label="进行中" value="进行中"> </el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="span">-->
<!-- <el-form-item label="备品备件编码">-->
<!-- <el-input v-model="queryParams.partNo" clearable></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="span">-->
<!-- <el-form-item label="备品备件名称">-->
<!-- <el-input v-model="queryParams.partDescription" clearable></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="span*2">-->
<!-- <el-form-item label="下单日期">-->
<!-- <el-date-picker-->
<!-- style="width: 47.5%"-->
<!-- v-model="queryParams.startDate"-->
<!-- type="date"-->
<!-- format="yyyy-MM-dd"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="选择日期">-->
<!-- </el-date-picker>-->
<!-- <span style="text-align: center">-</span>-->
<!-- <el-date-picker-->
<!-- style="width: 47.5%"-->
<!-- v-model="queryParams.endDate"-->
<!-- type="date"-->
<!-- format="yyyy-MM-dd"-->
<!-- value-format="yyyy-MM-dd 23:59:59"-->
<!-- placeholder="选择日期">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="span">-->
<!-- <el-form-item label="状态">-->
<!-- <el-select v-model="queryParams.status" placeholder="请选择" clearable style="width: 100%">-->
<!-- <el-option label="已取消" value="已取消"> </el-option>-->
<!-- <el-option label="已关闭" value="已关闭"> </el-option>-->
<!-- <el-option label="进行中" value="进行中"> </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="span">
<el-form-item label=" ">
<el-button type="primary" @click="handleQuery">查询</el-button>
</el-form-item>
<!-- <download-excel class="el-button el-button&#45;&#45;primary el-button&#45;&#45;medium"
type="xls">
{{ '导出' }}
</download-excel>-->
<!-- <download-excel-->
<!-- :fields="fields()"-->
<!-- :data="exportData"-->
<!-- type="xls"-->
<!-- :name="exportName"-->
<!-- :header="exportHeader"-->
<!-- :footer="exportFooter"-->
<!-- :fetch="createExportData"-->
<!-- :before-generate="startDownload"-->
<!-- :before-finish="finishDownload"-->
<!-- worksheet="导出信息"-->
<!-- class="el-button el-button&#45;&#45;primary el-button&#45;&#45;medium">-->
<!-- {{ '导出' }}-->
<!-- </download-excel>-->
</el-col>
</el-row>
</el-form>
<div style="height: calc(100% - 120px)">
<el-table :data="dataList" border
<!-- 主表信息-->
<div style="height: 40%">
<el-table :data="dataListHead" border
highlight-current-row
height="100%" ref="table"
v-loading="queryLoading">
v-loading="queryLoading"
@row-click="changeData">
<el-table-column
v-for="(item,index) in columns" :key="index"
v-for="(item,index) in columns_head" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
@ -375,24 +636,91 @@ export default {
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleCancel(scope.row)">取消</a>
<!-- <a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleClose(scope.row)">关闭</a>-->
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" width="100">-->
<!-- <a @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</a>-->
<!-- </el-table-column>-->
</el-table>
</div>
<!-- 分页信息-->
<el-pagination
style="margin-top: 5px"
@size-change="handleQueryBySize"
@current-change="handleQueryByPage"
:current-page="queryParams.page"
:current-page="queryParams.no"
:page-sizes="[50, 100, 500, 1000]"
:page-size="queryParams.limit"
:total="total"
:page-size="queryParams.size"
:total="totalHead"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 子表明细-->
<el-tabs style="font-size: 12px;min-height: 200px" class="customer-tab" v-model="activeName" type="border-card">
<el-tab-pane label="明细" name="detail">
<el-button @click="exportExcel()" type="primary" style="margin-left: 2px;margin-top: 0px">{{'导出'}}</el-button>
<el-table
:data="dataList" border
v-loading="queryLoading"
style="width: 100%;">
<el-table-column
v-for="(item,index) in columns" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
:min-width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<template v-if="item.columnProp === 'ttlAmount' || item.columnProp === 'sumPrice'">
<span>{{!!scope.row[item.columnProp]?scope.row[item.columnProp].toFixed(2):''}}</span>
</template>
<template v-else>
<span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
</template>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleCancel(scope.row)">取消</a>
<!-- <a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleClose(scope.row)">关闭</a>-->
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<!-- <div style="height: 50%" class="customer-tab">明细-->
<!-- <el-table :data="dataList" border-->
<!-- height="100%" ref="table"-->
<!-- v-loading="queryLoading">-->
<!-- <el-table-column-->
<!-- v-for="(item,index) in columns" :key="index"-->
<!-- :sortable="item.columnSortable"-->
<!-- :prop="item.columnProp"-->
<!-- :header-align="item.headerAlign"-->
<!-- :show-overflow-tooltip="item.showOverflowTooltip"-->
<!-- :align="item.align"-->
<!-- :fixed="item.fixed===''?false:item.fixed"-->
<!-- :min-width="item.columnWidth"-->
<!-- :label="item.columnLabel">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>-->
<!-- <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center" width="100">-->
<!-- <template slot-scope="scope">-->
<!-- <a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleCancel(scope.row)">取消</a>-->
<!--&lt;!&ndash; <a v-if="scope.row.status === '进行中' && scope.row.quantityOfArrival === 0" @click="handleClose(scope.row)">关闭</a>&ndash;&gt;-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- </div>-->
</div>
</template>

Loading…
Cancel
Save