|
@@ -23,7 +23,7 @@
|
|
<a-input id="chooseShelf-code" ref="searchProductCode" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
|
|
<a-input id="chooseShelf-code" ref="searchProductCode" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
|
|
</a-form-model-item>
|
|
</a-form-model-item>
|
|
</a-col>
|
|
</a-col>
|
|
- <a-col :md="8" :sm="24">
|
|
|
|
|
|
+ <a-col :md="6" :sm="24">
|
|
<a-form-model-item label="产品名称">
|
|
<a-form-model-item label="产品名称">
|
|
<a-input id="chooseShelf-name" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
|
|
<a-input id="chooseShelf-name" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
|
|
</a-form-model-item>
|
|
</a-form-model-item>
|
|
@@ -43,11 +43,11 @@
|
|
<div>
|
|
<div>
|
|
<div class="table-operator">
|
|
<div class="table-operator">
|
|
<div>
|
|
<div>
|
|
- <a-button type="primary" class="button-error" @click="handleSave">创建补货单</a-button>
|
|
|
|
- <span v-if="selectTotal">已选{{ selectTotal }}款产品,共15件</span>
|
|
|
|
|
|
+ <a-button type="primary" @click="handleSave">创建补货单</a-button>
|
|
|
|
+ <span style="margin-left:20px;">已选{{ totalCategory }}款产品,共{{ totalQty }}件</span>
|
|
</div>
|
|
</div>
|
|
<div style="margin-left:20px;">
|
|
<div style="margin-left:20px;">
|
|
- <a-checkbox>
|
|
|
|
|
|
+ <a-checkbox @change="changeShowChecked">
|
|
仅显示已选产品
|
|
仅显示已选产品
|
|
</a-checkbox>
|
|
</a-checkbox>
|
|
</div>
|
|
</div>
|
|
@@ -63,9 +63,17 @@
|
|
:columns="columns"
|
|
:columns="columns"
|
|
:data="loadData"
|
|
:data="loadData"
|
|
:scroll="{ y: 450 }"
|
|
:scroll="{ y: 450 }"
|
|
- :defaultLoadData="false"
|
|
|
|
:showPagination="false"
|
|
:showPagination="false"
|
|
bordered>
|
|
bordered>
|
|
|
|
+ <template slot="action" slot-scope="text, record">
|
|
|
|
+ <a-input-number
|
|
|
|
+ size="small"
|
|
|
|
+ v-model="record.replenishQty"
|
|
|
|
+ :precision="0"
|
|
|
|
+ :min="1"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ style="width: 100%" />
|
|
|
|
+ </template>
|
|
</s-table>
|
|
</s-table>
|
|
</div>
|
|
</div>
|
|
</a-spin>
|
|
</a-spin>
|
|
@@ -75,9 +83,10 @@
|
|
<script>
|
|
<script>
|
|
import { commonMixin } from '@/utils/mixin'
|
|
import { commonMixin } from '@/utils/mixin'
|
|
import { STable, VSelect } from '@/components'
|
|
import { STable, VSelect } from '@/components'
|
|
-import { shelfReplenishList, shelfTaskInsertBill } from '@/api/shelfReplenish'
|
|
|
|
|
|
+import { queryProductListForReplenish } from '@/api/shelf'
|
|
|
|
+import { saveMainAndDetail } from '@/api/shelfReplenish'
|
|
export default {
|
|
export default {
|
|
- name: 'ConfirmModal',
|
|
|
|
|
|
+ name: 'CreatReplenishmentOrder',
|
|
components: { STable, VSelect },
|
|
components: { STable, VSelect },
|
|
mixins: [commonMixin],
|
|
mixins: [commonMixin],
|
|
props: {
|
|
props: {
|
|
@@ -94,25 +103,35 @@ export default {
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
modalTit () {
|
|
modalTit () {
|
|
- const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
|
|
|
|
|
|
+ const hjName = this.nowData ? this.nowData.shelfName : ''
|
|
return '待补货产品 —— ' + hjName
|
|
return '待补货产品 —— ' + hjName
|
|
},
|
|
},
|
|
columns () {
|
|
columns () {
|
|
const arr = [
|
|
const arr = [
|
|
{ title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
|
|
{ title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
|
|
- { title: '库存批次', dataIndex: 'stockBatchNo', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
|
- { title: '入库类型', dataIndex: 'putBizTypeDictValue', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
|
- { title: '仓库', dataIndex: 'warehouseName', width: '15%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
|
|
|
|
- { title: '仓位', dataIndex: 'warehouseLocationName', width: '15%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
|
|
|
|
- // { title: '成本价', dataIndex: 'putCost', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
- { title: '本次出库数量', dataIndex: 'outQty', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
|
|
|
|
- // { title: '成本小计', dataIndex: 'totalCost', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
|
|
|
|
|
|
+ { title: '货位号', dataIndex: 'shelfPlaceCode', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
|
+ { title: '产品编码', dataIndex: 'productCode', width: '12%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
|
+ { title: '产品名称', dataIndex: 'productName', width: '18%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
|
|
|
|
+ { title: '最大库容', dataIndex: 'maxQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '货架库存', dataIndex: 'qty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '补货在途', dataIndex: 'replenishBillQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '调回在途', dataIndex: 'recallBillQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '待补货数量', dataIndex: 'replenishBillWaitQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '门店库存数量', dataIndex: 'qplsStockQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
|
|
|
|
+ { title: '单位', dataIndex: 'productUnit', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
|
|
|
|
+ { title: '本次补货数量', scopedSlots: { customRender: 'action' }, width: '10%', align: 'center' }
|
|
]
|
|
]
|
|
- if (this.$hasPermissions('M_ShowAllCost')) {
|
|
|
|
- arr.splice(5, 0, { title: '成本价', dataIndex: 'putCost', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
|
|
|
|
- arr.splice(7, 0, { title: '成本小计', dataIndex: 'totalCost', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
|
|
|
|
- }
|
|
|
|
return arr
|
|
return arr
|
|
|
|
+ },
|
|
|
|
+ totalCategory () {
|
|
|
|
+ return this.rowSelectionInfo && this.rowSelectionInfo.selectedRows.length
|
|
|
|
+ },
|
|
|
|
+ totalQty () {
|
|
|
|
+ let ret = 0
|
|
|
|
+ this.rowSelectionInfo && this.rowSelectionInfo.selectedRows.map(item => {
|
|
|
|
+ ret = ret + item.replenishQty
|
|
|
|
+ })
|
|
|
|
+ return ret
|
|
}
|
|
}
|
|
},
|
|
},
|
|
data () {
|
|
data () {
|
|
@@ -120,51 +139,96 @@ export default {
|
|
spinning: false,
|
|
spinning: false,
|
|
isShow: this.openModal, // 是否打开弹框
|
|
isShow: this.openModal, // 是否打开弹框
|
|
options: [
|
|
options: [
|
|
- { label: '库存充足', value: '1' },
|
|
|
|
- { label: '部分缺货', value: '2' },
|
|
|
|
- { label: '全部缺货', value: '3' }
|
|
|
|
|
|
+ { label: '库存充足', value: 'stockEnough' },
|
|
|
|
+ { label: '部分缺货', value: 'portionStockout' },
|
|
|
|
+ { label: '全部缺货', value: 'allStockout' }
|
|
],
|
|
],
|
|
queryParam: {
|
|
queryParam: {
|
|
productCode: '', // 产品编码
|
|
productCode: '', // 产品编码
|
|
- productName: '' // 产品名称
|
|
|
|
|
|
+ productName: '', // 产品名称
|
|
|
|
+ stockStateList: []
|
|
},
|
|
},
|
|
// 加载数据方法 必须为 Promise 对象
|
|
// 加载数据方法 必须为 Promise 对象
|
|
loadData: parameter => {
|
|
loadData: parameter => {
|
|
this.spinning = true
|
|
this.spinning = true
|
|
- return shelfReplenishList(Object.assign(parameter, this.queryParam)).then(res => {
|
|
|
|
|
|
+ this.disabled = true
|
|
|
|
+ this.queryParam.shelfSn = this.nowData.shelfSn
|
|
|
|
+ return queryProductListForReplenish(this.queryParam).then(res => {
|
|
let data
|
|
let data
|
|
if (res.status == 200) {
|
|
if (res.status == 200) {
|
|
- data = res.data.list
|
|
|
|
- const no = 0
|
|
|
|
|
|
+ data = res.data
|
|
|
|
+ if (this.showChecked) {
|
|
|
|
+ data = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
|
|
|
|
+ }
|
|
for (var i = 0; i < data.length; i++) {
|
|
for (var i = 0; i < data.length; i++) {
|
|
- data[i].no = no + i + 1
|
|
|
|
|
|
+ data[i].no = i + 1
|
|
|
|
+ data[i].replenishQty = data[i].replenishBillWaitQty || 1
|
|
}
|
|
}
|
|
|
|
+ this.disabled = false
|
|
}
|
|
}
|
|
this.spinning = false
|
|
this.spinning = false
|
|
return data
|
|
return data
|
|
})
|
|
})
|
|
},
|
|
},
|
|
- rowSelectionInfo: null
|
|
|
|
|
|
+ rowSelectionInfo: null,
|
|
|
|
+ showChecked: false
|
|
}
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
onStockChange (val) {
|
|
onStockChange (val) {
|
|
- console.log(val)
|
|
|
|
|
|
+ this.queryParam.stockStateList = val
|
|
|
|
+ },
|
|
|
|
+ // 显示已选产品
|
|
|
|
+ changeShowChecked (e) {
|
|
|
|
+ this.showChecked = e.target.checked
|
|
|
|
+ this.$refs.table.refresh(true)
|
|
},
|
|
},
|
|
// 表格选中项
|
|
// 表格选中项
|
|
rowSelectionFun (obj) {
|
|
rowSelectionFun (obj) {
|
|
this.rowSelectionInfo = obj || null
|
|
this.rowSelectionInfo = obj || null
|
|
},
|
|
},
|
|
|
|
+ // 重置
|
|
|
|
+ resetSearchForm () {
|
|
|
|
+ this.queryParam = {
|
|
|
|
+ productCode: '', // 产品编码
|
|
|
|
+ productName: '', // 产品名称
|
|
|
|
+ stockStateList: []
|
|
|
|
+ }
|
|
|
|
+ this.showChecked = false
|
|
|
|
+ this.$refs.table.clearSelected()
|
|
|
|
+ this.$refs.table.refresh(true)
|
|
|
|
+ },
|
|
// 确认补货
|
|
// 确认补货
|
|
handleSave () {
|
|
handleSave () {
|
|
- this.spinning = true
|
|
|
|
- shelfTaskInsertBill(this.targetKeys).then(res => {
|
|
|
|
- if (res.status == 200) {
|
|
|
|
- this.$message.success(res.message)
|
|
|
|
- this.$emit('ok')
|
|
|
|
- }
|
|
|
|
- this.spinning = false
|
|
|
|
- })
|
|
|
|
|
|
+ if (this.totalCategory) {
|
|
|
|
+ const data = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
|
|
|
|
+ const dataList = []
|
|
|
|
+ data.map(item => {
|
|
|
|
+ dataList.push({
|
|
|
|
+ shelfPlaceSn: item.shelfPlaceSn,
|
|
|
|
+ shelfPlaceCode: item.shelfPlaceCode,
|
|
|
|
+ productSn: item.productSn,
|
|
|
|
+ productCode: item.productCode,
|
|
|
|
+ qty: item.replenishQty
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ // 开始提交
|
|
|
|
+ this.spinning = true
|
|
|
|
+ saveMainAndDetail({
|
|
|
|
+ shelfSn: this.nowData.shelfSn,
|
|
|
|
+ dealerSn: this.nowData.dealerSn,
|
|
|
|
+ detailList: dataList
|
|
|
|
+ }).then(res => {
|
|
|
|
+ if (res.status == 200) {
|
|
|
|
+ this.$message.success(res.message)
|
|
|
|
+ this.$emit('ok')
|
|
|
|
+ this.$emit('close')
|
|
|
|
+ }
|
|
|
|
+ this.spinning = false
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ this.$message.info('请选择产品')
|
|
|
|
+ }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
watch: {
|
|
watch: {
|
|
@@ -176,6 +240,10 @@ export default {
|
|
isShow (newValue, oldValue) {
|
|
isShow (newValue, oldValue) {
|
|
if (!newValue) {
|
|
if (!newValue) {
|
|
this.$emit('close')
|
|
this.$emit('close')
|
|
|
|
+ } else {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ this.resetSearchForm()
|
|
|
|
+ })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|