1、采购管理拆分为商品采购和质检入库
This commit is contained in:
parent
fb52234ee5
commit
cb56e5a227
8
resources/frontend/src/api/supplyChain.js
vendored
8
resources/frontend/src/api/supplyChain.js
vendored
@ -39,6 +39,14 @@ export function getPurchaseLog(params) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function examinePurchase(data) {
|
||||||
|
return http({
|
||||||
|
url: "/api/purchase_record/purchase_batch_check",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function addPurchaseLog(data) {
|
export function addPurchaseLog(data) {
|
||||||
return http({
|
return http({
|
||||||
url: "/api/supplier/purchase_record",
|
url: "/api/supplier/purchase_record",
|
||||||
|
|||||||
198
resources/frontend/src/components/Goods/add.vue
Normal file
198
resources/frontend/src/components/Goods/add.vue
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog :visible.sync="show" title="新增商品" width="900px" @close="closeDialog" :close-on-click-modal="false">
|
||||||
|
<el-form label-width="120px" :inline="true">
|
||||||
|
<el-form-item label="商品品种/品类:">
|
||||||
|
<treeselect
|
||||||
|
:options="treeList"
|
||||||
|
style="width: 200px;"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
:show-count="true"
|
||||||
|
:normalizer="normalizer"
|
||||||
|
placeholder="请选择品种"
|
||||||
|
v-model="type_id">
|
||||||
|
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
||||||
|
</treeselect>
|
||||||
|
</el-form-item>
|
||||||
|
<div v-for="(item, i) in skus" :key="i" class="skuBox">
|
||||||
|
|
||||||
|
<div class="tit">规格{{ i + 1 }}</div>
|
||||||
|
|
||||||
|
<el-form-item label="规格名称:">
|
||||||
|
<el-input placeholder="规格名称" v-model="item.title"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="颜色/特性:">
|
||||||
|
<el-input placeholder="颜色/特性" v-model="item.attribute"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品状态:">
|
||||||
|
<el-select v-model="item.status" placeholder="下架(默认)" style="width: 200px;">
|
||||||
|
<el-option v-for="it in options" :key="it.id" :label="it.label" :value="it.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品成本:">
|
||||||
|
<el-input v-model="item.cost" placeholder="商品成本">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<el-form-item label="可售库存:">
|
||||||
|
<el-input v-model="item.sale_stock" placeholder="可售库存">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="最终编码:">
|
||||||
|
<el-input v-model="item.external_sku_id" placeholder="不输入自动生成"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="">
|
||||||
|
<el-button type="danger" @click="handleDelete(i)" size="mini" icon="el-icon-delete">删除</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="success" @click="toAddSku()" icon="el-icon-plus">增加规格</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="handleSave()" :loading="loading">保存</el-button>
|
||||||
|
<el-button plain @click="cancel()">取消</el-button>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { addGoods } from '@/api/goods.js'
|
||||||
|
import { goods_types } from '@/api/rankingData.js'
|
||||||
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { Treeselect },
|
||||||
|
props: {
|
||||||
|
show: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showDialog: false,
|
||||||
|
treeList: [],
|
||||||
|
skus: [],
|
||||||
|
type_id: null,
|
||||||
|
options: [
|
||||||
|
{ id: 0, label: "下架" },
|
||||||
|
{ id: 1, label: "在售" }
|
||||||
|
],
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getGoodsTypes() {
|
||||||
|
let params = {
|
||||||
|
parent_id: 0
|
||||||
|
}
|
||||||
|
goods_types(params).then((res) => {
|
||||||
|
this.treeList = JSON.parse(JSON.stringify(res.data.data).replace(/name/g, "label"))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 添加商品
|
||||||
|
handleSave() {
|
||||||
|
this.loading = true
|
||||||
|
let skus = this.skus
|
||||||
|
let params = {
|
||||||
|
type_id: this.type_id || '',
|
||||||
|
goods_id: '',
|
||||||
|
skus: skus
|
||||||
|
}
|
||||||
|
addGoods(params).then((res) => {
|
||||||
|
this.$message({ message: '商品添加成功!', type: 'success' })
|
||||||
|
this.loading = false
|
||||||
|
this.closeDialog()
|
||||||
|
this.$emit('complete')
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toAddSku() {
|
||||||
|
if(!this.type_id) {
|
||||||
|
this.$message({ message: "请选择商品品种/品类", type: "error" })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.handleAdd()
|
||||||
|
},
|
||||||
|
handleAdd() {
|
||||||
|
let sku = {
|
||||||
|
title: '',
|
||||||
|
external_sku_id: '',
|
||||||
|
status: 0,
|
||||||
|
num: 0,
|
||||||
|
cost: 0,
|
||||||
|
sale_stock: 9999,
|
||||||
|
reserve: 0,
|
||||||
|
attribute: ''
|
||||||
|
}
|
||||||
|
this.skus.push(sku)
|
||||||
|
},
|
||||||
|
handleDelete(index) {
|
||||||
|
this.skus.splice(index, 1)
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.closeDialog()
|
||||||
|
},
|
||||||
|
normalizer(node) {
|
||||||
|
if ((!node.children || (node.children && node.children.length == 0)) && node.level == 1) {
|
||||||
|
node.isDisabled = true
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
},
|
||||||
|
parseLabel(node) {
|
||||||
|
let text = ''
|
||||||
|
text += node.parentNode ? node.parentNode.label + ' / ' : ''
|
||||||
|
text += node.raw ? node.raw.label : ''
|
||||||
|
return text
|
||||||
|
},
|
||||||
|
closeDialog() {
|
||||||
|
this.showDialog = false
|
||||||
|
this.$emit('close')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
show: {
|
||||||
|
handler(newVal, oldVal) {
|
||||||
|
if (newVal) {
|
||||||
|
this.skus = []
|
||||||
|
this.showDialog = true
|
||||||
|
this.handleAdd()
|
||||||
|
this.getGoodsTypes()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true,
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.skuBox{
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 15px 0;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
.tit{
|
||||||
|
padding-left: 40px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
194
resources/frontend/src/components/Goods/edit.vue
Normal file
194
resources/frontend/src/components/Goods/edit.vue
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog :visible.sync="show" title="编辑商品" width="900px" @close="closeDialog" :close-on-click-modal="false">
|
||||||
|
<el-form label-width="120px" :inline="true">
|
||||||
|
<el-form-item label="商品品种/品类:">
|
||||||
|
<treeselect
|
||||||
|
:options="treeList"
|
||||||
|
style="width: 200px;"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
:show-count="true"
|
||||||
|
:normalizer="normalizer"
|
||||||
|
placeholder="请选择品种"
|
||||||
|
v-model="goodsInfo.goods.type_id">
|
||||||
|
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
||||||
|
</treeselect>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="规格名称:">
|
||||||
|
<el-input placeholder="规格名称" v-model="goodsInfo.title"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="最终编码:">
|
||||||
|
<el-input v-model="goodsInfo.external_sku_id" placeholder="不输入自动生成" disabled></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="颜色/特性:">
|
||||||
|
<el-input placeholder="颜色/特性" v-model="goodsInfo.attribute"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品状态:">
|
||||||
|
<el-select v-model="goodsInfo.status" placeholder="下架(默认)" style="width: 200px;">
|
||||||
|
<el-option v-for="it in options" :key="it.id" :label="it.label" :value="it.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品成本:">
|
||||||
|
<el-input v-model="goodsInfo.cost" placeholder="商品成本">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="在售库存:">
|
||||||
|
<el-input v-model="goodsInfo.sale_stock" placeholder="可售库存"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="handleSave()" :loading="loading">保存</el-button>
|
||||||
|
<el-button plain @click="cancel()">取消</el-button>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { updateGoods, checkGoods } from '@/api/goods.js'
|
||||||
|
import { goods_types } from '@/api/rankingData.js'
|
||||||
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { Treeselect },
|
||||||
|
props: {
|
||||||
|
show: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
id: {
|
||||||
|
type: Number,
|
||||||
|
default: () => {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
goods_id: 0,
|
||||||
|
showDialog: false,
|
||||||
|
treeList: [],
|
||||||
|
skus: [],
|
||||||
|
type_id: null,
|
||||||
|
options: [
|
||||||
|
{ id: '下架', label: '下架' },
|
||||||
|
{ id: '在售', label: '在售' }
|
||||||
|
],
|
||||||
|
loading: false,
|
||||||
|
goodsInfo: {
|
||||||
|
goods: {
|
||||||
|
type_id: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getGoodsTypes() {
|
||||||
|
let params = {
|
||||||
|
parent_id: 0
|
||||||
|
}
|
||||||
|
goods_types(params).then((res) => {
|
||||||
|
this.treeList = JSON.parse(JSON.stringify(res.data.data).replace(/name/g, "label"))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 添加商品
|
||||||
|
handleSave() {
|
||||||
|
this.loading = true
|
||||||
|
let goods = {
|
||||||
|
title: this.goodsInfo.goods.title,
|
||||||
|
img_url: this.goodsInfo.goods.img_url,
|
||||||
|
type_id: this.goodsInfo.goods.type_id || '',
|
||||||
|
brand_id: this.goodsInfo.goods.brand_id,
|
||||||
|
goods_code: this.goodsInfo.goods.goods_code
|
||||||
|
}
|
||||||
|
let sku = {
|
||||||
|
title: this.goodsInfo.title,
|
||||||
|
external_sku_id: this.goodsInfo.external_sku_id,
|
||||||
|
status: this.goodsInfo.status,
|
||||||
|
num: this.goodsInfo.num,
|
||||||
|
cost: this.goodsInfo.cost,
|
||||||
|
sale_stock: this.goodsInfo.sale_stock,
|
||||||
|
thumb_url: this.goodsInfo.thumb_url,
|
||||||
|
attribute: this.goodsInfo.attribute
|
||||||
|
}
|
||||||
|
if (sku.status == '下架') {
|
||||||
|
sku.status = 0
|
||||||
|
} else if (sku.status == '在售') {
|
||||||
|
sku.status = 1
|
||||||
|
}
|
||||||
|
let params = {
|
||||||
|
goods_id: this.goodsInfo.goods_id,
|
||||||
|
goods,
|
||||||
|
sku
|
||||||
|
}
|
||||||
|
updateGoods(this.goods_id, params).then((res) => {
|
||||||
|
this.$message({ type: 'success', message: '编辑成功' })
|
||||||
|
this.loading = false
|
||||||
|
this.closeDialog()
|
||||||
|
this.$emit('complete')
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getGoodsInfo() {
|
||||||
|
checkGoods(this.goods_id).then((res) => {
|
||||||
|
this.goodsInfo = res.data.data
|
||||||
|
this.goodsInfo.goods.type_id = this.goodsInfo.goods.type_id || null
|
||||||
|
})
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.closeDialog()
|
||||||
|
},
|
||||||
|
normalizer(node) {
|
||||||
|
if ((!node.children || (node.children && node.children.length == 0)) && node.level == 1) {
|
||||||
|
node.isDisabled = true
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
},
|
||||||
|
parseLabel(node) {
|
||||||
|
let text = ''
|
||||||
|
text += node.parentNode ? node.parentNode.label + ' / ' : ''
|
||||||
|
text += node.raw ? node.raw.label : ''
|
||||||
|
return text
|
||||||
|
},
|
||||||
|
closeDialog() {
|
||||||
|
this.showDialog = false
|
||||||
|
this.$emit('close')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
id(newVal, oldVal) {
|
||||||
|
this.goods_id = newVal
|
||||||
|
},
|
||||||
|
show(newVal, oldVal) {
|
||||||
|
if (newVal) {
|
||||||
|
this.showDialog = true
|
||||||
|
this.getGoodsInfo()
|
||||||
|
this.getGoodsTypes()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.skuBox{
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 15px 0;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
.tit{
|
||||||
|
padding-left: 40px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
11
resources/frontend/src/router/list.js
vendored
11
resources/frontend/src/router/list.js
vendored
@ -142,17 +142,22 @@ const list = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "PURCHASE_RECORD",
|
path: "PURCHASE_RECORD",
|
||||||
name: "入库采购",
|
name: "商品采购",
|
||||||
component: () => import("../views/supplyChain/procureLog.vue")
|
component: () => import("../views/supplyChain/procureLog.vue")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "PURCHASE_RECORD_CHECK",
|
||||||
|
name: "质检入库",
|
||||||
|
component: () => import("../views/supplyChain/procureCheck.vue")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "LOSS_RECORD",
|
path: "LOSS_RECORD",
|
||||||
name: "报损记录",
|
name: "仓库报损",
|
||||||
component: () => import("../views/supplyChain/lossRecord.vue")
|
component: () => import("../views/supplyChain/lossRecord.vue")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "DAILY_STOCK_RECORD",
|
path: "DAILY_STOCK_RECORD",
|
||||||
name: "每日盘点记录",
|
name: "库存盘点",
|
||||||
component: () => import("../views/supplyChain/dailyStock.vue")
|
component: () => import("../views/supplyChain/dailyStock.vue")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -76,6 +76,7 @@
|
|||||||
console.log(res.data.roles)
|
console.log(res.data.roles)
|
||||||
if(res.data.roles && res.data.roles[0]) {
|
if(res.data.roles && res.data.roles[0]) {
|
||||||
localStorage.setItem("roleName", res.data.roles[0].name)
|
localStorage.setItem("roleName", res.data.roles[0].name)
|
||||||
|
localStorage.setItem("userId", res.data.id)
|
||||||
this.$message({
|
this.$message({
|
||||||
message: "成功登录,欢迎来到后台管理系统",
|
message: "成功登录,欢迎来到后台管理系统",
|
||||||
type: "success"
|
type: "success"
|
||||||
|
|||||||
@ -40,6 +40,7 @@
|
|||||||
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
||||||
</treeselect>
|
</treeselect>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- <el-form-item label="商品品牌:">
|
<!-- <el-form-item label="商品品牌:">
|
||||||
<el-select v-model="form.brand_id" placeholder="商品品牌" filterable :disabled="disabled">
|
<el-select v-model="form.brand_id" placeholder="商品品牌" filterable :disabled="disabled">
|
||||||
<el-option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id">
|
<el-option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
@ -52,6 +53,9 @@
|
|||||||
<el-form-item label="规格名称:">
|
<el-form-item label="规格名称:">
|
||||||
<el-input placeholder="规格名称" v-model="item.title"></el-input>
|
<el-input placeholder="规格名称" v-model="item.title"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="颜色/特性:">
|
||||||
|
<el-input placeholder="颜色/特性" v-model="item.attribute"></el-input>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="商品状态:">
|
<el-form-item label="商品状态:">
|
||||||
<el-select v-model="item.status" placeholder="下架(默认)">
|
<el-select v-model="item.status" placeholder="下架(默认)">
|
||||||
<el-option v-for="it in options" :key="it.id" :label="it.label" :value="it.id">
|
<el-option v-for="it in options" :key="it.id" :label="it.label" :value="it.id">
|
||||||
@ -117,7 +121,7 @@
|
|||||||
img_url: "",
|
img_url: "",
|
||||||
type_id: null, // Treeselect组件要求空值为null
|
type_id: null, // Treeselect组件要求空值为null
|
||||||
brand_id: "",
|
brand_id: "",
|
||||||
goods_code: "",
|
goods_code: ""
|
||||||
},
|
},
|
||||||
// 商品状态
|
// 商品状态
|
||||||
options: [
|
options: [
|
||||||
@ -227,7 +231,8 @@
|
|||||||
num: 0,
|
num: 0,
|
||||||
cost: 0,
|
cost: 0,
|
||||||
sale_stock: 9999,
|
sale_stock: 9999,
|
||||||
reserve: 0
|
reserve: 0,
|
||||||
|
attribute: ''
|
||||||
};
|
};
|
||||||
this.skus.push(sku);
|
this.skus.push(sku);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -96,24 +96,24 @@
|
|||||||
<el-form-item label="商品编码" prop="external_sku_id">
|
<el-form-item label="商品编码" prop="external_sku_id">
|
||||||
<el-input v-model="dynamicValidateForm.external_sku_id"></el-input>
|
<el-input v-model="dynamicValidateForm.external_sku_id"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-for="(item, index) in dynamicValidateForm.combination_goods" :label="'子商品' + index"
|
<el-form-item v-for="(item, index) in dynamicValidateForm.combination_goods" :label="'花材' + (index + 1)"
|
||||||
:key="item.item_id" :prop="'combination_goods.' + index + '.item_id'" :rules="{
|
:key="item.item_id" :prop="'combination_goods.' + index + '.item_id'" :rules="{
|
||||||
required: true, message: '子商品不能为空', trigger: 'blur'
|
required: true, message: '子商品不能为空', trigger: 'blur'
|
||||||
}">
|
}">
|
||||||
<el-col :span="8">
|
<div style="display: flex;align-items: center;">
|
||||||
<el-select v-model="item.item_id" filterable remote reserve-keyword placeholder="请选择子商品"
|
<el-select v-model="item.item_id" filterable remote reserve-keyword placeholder="请选择子商品"
|
||||||
:remote-method="remoteMethod" :loading="remoteLoading">
|
:remote-method="remoteMethod" :loading="remoteLoading" style="width: 240px;">
|
||||||
<el-option v-for="sku in skus" :key="sku.id" :label="sku.title" :value="sku.id"></el-option>
|
<el-option v-for="sku in skus" :key="sku.id" :label="sku.title" :value="sku.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-col>
|
<el-input v-model="item.item_num" placeholder="数量" style="width: 120px;margin: 0 10px"></el-input>
|
||||||
<el-col :span="2">
|
<el-button type="danger" size="mini" @click.prevent="removeItem(index)">删除</el-button>
|
||||||
<el-input v-model="item.item_num" placeholder="数量"></el-input>
|
</div>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
<el-button type="danger" @click.prevent="removeItem(index)">删除</el-button>
|
<el-form-item label=" ">
|
||||||
|
<el-button @click="addItem" icon="el-icon-plus">添加花材</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="submitForm('dynamicValidateForm')">提交</el-button>
|
<el-button type="primary" @click="submitForm('dynamicValidateForm')">提交</el-button>
|
||||||
<el-button @click="addItem">添加子商品</el-button>
|
|
||||||
<el-button @click="resetForm('dynamicValidateForm')">重置</el-button>
|
<el-button @click="resetForm('dynamicValidateForm')">重置</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|||||||
@ -38,6 +38,7 @@
|
|||||||
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
<div slot="value-label" slot-scope="{ node }">{{ parseLabel(node) }}</div>
|
||||||
</treeselect>
|
</treeselect>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- <el-form-item label="商品品牌:">
|
<!-- <el-form-item label="商品品牌:">
|
||||||
<el-select v-model="goodsData.goods.brand_id" placeholder="商品品牌" filterable>
|
<el-select v-model="goodsData.goods.brand_id" placeholder="商品品牌" filterable>
|
||||||
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
|
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
|
||||||
@ -52,6 +53,9 @@
|
|||||||
<el-form-item label="最终编码:">
|
<el-form-item label="最终编码:">
|
||||||
<el-input v-model="goodsData.external_sku_id" placeholder="规格编码" disabled></el-input>
|
<el-input v-model="goodsData.external_sku_id" placeholder="规格编码" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="颜色/特性:">
|
||||||
|
<el-input placeholder="颜色/特性" v-model="goodsData.attribute"></el-input>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="商品状态:">
|
<el-form-item label="商品状态:">
|
||||||
<el-select v-model="goodsData.status">
|
<el-select v-model="goodsData.status">
|
||||||
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
|
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
|
||||||
@ -126,6 +130,7 @@ export default {
|
|||||||
sale_stock: '',
|
sale_stock: '',
|
||||||
external_sku_id: "",
|
external_sku_id: "",
|
||||||
thumb_url: [],
|
thumb_url: [],
|
||||||
|
attribute: '',
|
||||||
goods: {
|
goods: {
|
||||||
img_url: "",
|
img_url: "",
|
||||||
title: "",
|
title: "",
|
||||||
@ -243,7 +248,8 @@ export default {
|
|||||||
num: this.goodsData.num,
|
num: this.goodsData.num,
|
||||||
cost: this.goodsData.cost,
|
cost: this.goodsData.cost,
|
||||||
sale_stock: this.goodsData.sale_stock,
|
sale_stock: this.goodsData.sale_stock,
|
||||||
thumb_url: this.goodsData.thumb_url
|
thumb_url: this.goodsData.thumb_url,
|
||||||
|
attribute: this.goodsData.attribute
|
||||||
};
|
};
|
||||||
if (sku.status == "下架") {
|
if (sku.status == "下架") {
|
||||||
sku.status = 0;
|
sku.status = 0;
|
||||||
|
|||||||
@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<el-table v-loading="loading" ref="multipleTable" border :data="tableData" class="table" tooltip-effect="dark"
|
<el-table v-loading="loading" ref="multipleTable" border :data="tableData" class="table" tooltip-effect="dark"
|
||||||
style="width: 100%" @selection-change="handleSelectionChange" max-height="1500">
|
style="width: 100%" @selection-change="handleSelectionChange">
|
||||||
<!-- 多选框 -->
|
<!-- 多选框 -->
|
||||||
<el-table-column type="selection" align="center"></el-table-column>
|
<el-table-column type="selection" align="center"></el-table-column>
|
||||||
<el-table-column label="商品信息" width="300">
|
<el-table-column label="商品信息" width="300">
|
||||||
@ -94,19 +94,19 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="tit">{{ scope.row.name }}</div>
|
<div class="tit">{{ scope.row.name }}</div>
|
||||||
<p>{{ scope.row.external_sku_id }}</p>
|
<p>{{ scope.row.external_sku_id }}</p>
|
||||||
<p>{{ scope.row.goods && scope.row.goods.updated_at }}</p>
|
<p>{{ scope.row.updated_at }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="品类/品种" align="center">
|
<!-- <el-table-column label="品类/品种" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div v-if="scope.row.goods && scope.row.goods.type">
|
<div v-if="scope.row.goods && scope.row.goods.type">
|
||||||
<span>{{ scope.row.goods.type.parent_type ? scope.row.goods.type.parent_type.name : '-' }} / </span>
|
<span>{{ scope.row.goods.type.parent_type ? scope.row.goods.type.parent_type.name : '-' }} / </span>
|
||||||
<span>{{ scope.row.goods.type.name || '-' }}</span>
|
<span>{{ scope.row.goods.type.name || '-' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<!-- <el-table-column label="规格" prop="title"></el-table-column> -->
|
<!-- <el-table-column label="规格" prop="title"></el-table-column> -->
|
||||||
<!-- <el-table-column label="品牌">
|
<!-- <el-table-column label="品牌">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@ -126,9 +126,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
|
|
||||||
<el-table-column prop="cost" sortable label="成本" align="center">
|
<el-table-column prop="cost" label="成本" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div class="flex">
|
<div class="flex" style="justify-content: center;">
|
||||||
<div v-if="isShow">
|
<div v-if="isShow">
|
||||||
<el-input v-model="scope.row.cost"></el-input>
|
<el-input v-model="scope.row.cost"></el-input>
|
||||||
</div>
|
</div>
|
||||||
@ -227,7 +227,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
|
|
||||||
<el-table-column prop="stock" sortable label="当前实际库存" align="center"></el-table-column>
|
<el-table-column prop="yesterday_num" label="实际库存" align="center"></el-table-column>
|
||||||
<el-table-column prop="sale_stock" label="可售库存">
|
<el-table-column prop="sale_stock" label="可售库存">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div class="titBox" v-if="scope.row.edit">
|
<div class="titBox" v-if="scope.row.edit">
|
||||||
@ -237,14 +237,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-else>{{scope.row.sale_stock}}
|
<div v-else>{{scope.row.sale_stock}}
|
||||||
<span style="color: #409eff;margin-left: 5px;cursor: pointer;font-size: 15px;"
|
<span style="color: #409eff;margin-left: 5px;cursor: pointer;font-size: 15px;"
|
||||||
@click="showEdit(scope.row, scope.$index)">
|
@click="openSaleEdit(scope.row, scope.$index)">
|
||||||
<i class="el-icon-edit"></i>
|
<i class="el-icon-edit"></i>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="剩余库存" sortable align="center" prop="stock">
|
||||||
<el-table-column align="center">
|
<template slot-scope="scope">
|
||||||
|
<span :class="scope.row.stock * 1 < 0 ? 'red' : ''">{{ scope.row.stock }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- <el-table-column align="center">
|
||||||
<template slot="header" slot-scope="scope">
|
<template slot="header" slot-scope="scope">
|
||||||
<span>销存比例</span>
|
<span>销存比例</span>
|
||||||
<el-tooltip class="item" effect="dark" content="当前库存/当天7点盘点的库存" placement="top">
|
<el-tooltip class="item" effect="dark" content="当前库存/当天7点盘点的库存" placement="top">
|
||||||
@ -254,7 +258,7 @@
|
|||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span :class="scope.row.sale_ratio * 1 < 20 ? 'red' : ''">{{ scope.row.sale_ratio }}%</span>
|
<span :class="scope.row.sale_ratio * 1 < 20 ? 'red' : ''">{{ scope.row.sale_ratio }}%</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
|
|
||||||
<!-- <el-table-column prop="address" sortable label="盘点">
|
<!-- <el-table-column prop="address" sortable label="盘点">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@ -272,12 +276,10 @@
|
|||||||
<el-table-column prop="status" label="状态" align="center"></el-table-column>
|
<el-table-column prop="status" label="状态" align="center"></el-table-column>
|
||||||
<el-table-column label="操作" align="center" width="120" v-if="is_admin">
|
<el-table-column label="操作" align="center" width="120" v-if="is_admin">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div style="text-align: center;width: 100%;">
|
<!-- <el-button type="text" @click="ejectstock(scope.row)">库存</el-button> -->
|
||||||
<!-- <el-button type="text" @click="ejectstock(scope.row)">库存</el-button> -->
|
<el-button type="text" @click="handleEdit(scope.row.id)">编辑</el-button>
|
||||||
<el-button type="text" @click="handleEdit(scope.row.id)">编辑</el-button>
|
<!-- <el-button type="text" @click="goodslog(scope.row)">记录</el-button> -->
|
||||||
<!-- <el-button type="text" @click="goodslog(scope.row)">记录</el-button> -->
|
<!-- <el-button type="text" @click="deleteSku(scope.row)">删除</el-button> -->
|
||||||
<!-- <el-button type="text" @click="deleteSku(scope.row)">删除</el-button> -->
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@ -285,16 +287,21 @@
|
|||||||
|
|
||||||
<!-- 底部按钮 -->
|
<!-- 底部按钮 -->
|
||||||
<div class="footerBtn" v-show="isShow || stock">
|
<div class="footerBtn" v-show="isShow || stock">
|
||||||
<el-button type="primary" class="confirmbtn" @click="cancel()">取消</el-button>
|
<el-button type="primary" class="confirmbtn" @click="cancel()">取消</el-button>
|
||||||
<el-button type="primary" class="confirmbtn" @click="onSubmit()">保存</el-button>
|
<el-button type="primary" class="confirmbtn" @click="onSubmit()">保存</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 分页功能 -->
|
<!-- 分页功能 -->
|
||||||
<div class="page-pagination">
|
<div class="page-pagination">
|
||||||
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
<el-pagination
|
||||||
:current-page="current_page" :page-sizes="[10, 30, 50, 100, 200]" :page-size="per_page"
|
@size-change="handleSizeChange"
|
||||||
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
|
@current-change="handleCurrentChange"
|
||||||
</el-pagination>
|
:current-page="current_page"
|
||||||
|
:page-sizes="[10, 30, 50, 100, 200]"
|
||||||
|
:page-size="per_page"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="Paginationdata.total">
|
||||||
|
</el-pagination>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
@ -302,13 +309,12 @@
|
|||||||
<el-dialog title="库存修改" :visible.sync="ejectstock1" width="30%" :close-on-click-modal="false">
|
<el-dialog title="库存修改" :visible.sync="ejectstock1" width="30%" :close-on-click-modal="false">
|
||||||
<el-table :data="ommodityInventory" tooltip-effect="dark" style="width: 100%">
|
<el-table :data="ommodityInventory" tooltip-effect="dark" style="width: 100%">
|
||||||
<el-table-column prop="two_days_ago_num" label="2天前库存">
|
<el-table-column prop="two_days_ago_num" label="2天前库存">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div>
|
<div>
|
||||||
<el-input v-model="scope.row.two_days_ago_num" :disabled="true">
|
<el-input v-model="scope.row.two_days_ago_num" :disabled="true"></el-input>
|
||||||
</el-input>
|
<el-input v-model="scope.row.two_days_ago_num"></el-input>
|
||||||
<el-input v-model="scope.row.two_days_ago_num"></el-input>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
</template>
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="yesterday_num" label="1天前库存">
|
<el-table-column prop="yesterday_num" label="1天前库存">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@ -432,6 +438,12 @@
|
|||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 新增商品 -->
|
||||||
|
<add-goods :show="showAdd" @close="showAdd = false" @complete="refreshList"></add-goods>
|
||||||
|
|
||||||
|
<!-- 编辑商品 -->
|
||||||
|
<edit-goods :show="showEdit" :id="curId" @close="showEdit = false" @complete="refreshList"></edit-goods>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -442,9 +454,11 @@
|
|||||||
import { orderRest } from "@/api/shop"
|
import { orderRest } from "@/api/shop"
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
|
import addGoods from "@/components/Goods/add.vue"
|
||||||
|
import editGoods from "@/components/Goods/edit.vue"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { Treeselect },
|
components: { Treeselect, addGoods, editGoods },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
editPriceId: '', //参考售价的id
|
editPriceId: '', //参考售价的id
|
||||||
@ -540,7 +554,10 @@
|
|||||||
chooseList: [],
|
chooseList: [],
|
||||||
showUpdate: false,
|
showUpdate: false,
|
||||||
commitLoading: false,
|
commitLoading: false,
|
||||||
is_admin: localStorage.getItem('roleName') == '超级管理员' || localStorage.getItem('roleName') == '系统管理员'
|
is_admin: localStorage.getItem('roleName') == '超级管理员' || localStorage.getItem('roleName') == '系统管理员',
|
||||||
|
showAdd: false,
|
||||||
|
showEdit: false,
|
||||||
|
curId: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -553,7 +570,9 @@
|
|||||||
},
|
},
|
||||||
// 列表编辑
|
// 列表编辑
|
||||||
handleEdit(id) {
|
handleEdit(id) {
|
||||||
this.$router.push({ path: "EDIT_GOODS", query: { id: id } })
|
// this.$router.push({ path: "EDIT_GOODS", query: { id: id } })
|
||||||
|
this.curId = id
|
||||||
|
this.showEdit = true
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取商品列表
|
// 获取商品列表
|
||||||
@ -675,7 +694,11 @@
|
|||||||
},
|
},
|
||||||
// 新增商品跳转
|
// 新增商品跳转
|
||||||
addNewgoods() {
|
addNewgoods() {
|
||||||
this.$router.push("/ADDGOODS")
|
// this.$router.push("/ADDGOODS")
|
||||||
|
this.showAdd = true
|
||||||
|
},
|
||||||
|
refreshList() {
|
||||||
|
this.handleChoose(this.current_page)
|
||||||
},
|
},
|
||||||
|
|
||||||
//分页功能
|
//分页功能
|
||||||
@ -1088,7 +1111,7 @@
|
|||||||
this.commitLoading = false
|
this.commitLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
showEdit(row, index) {
|
openSaleEdit(row, index) {
|
||||||
this.$set(this.tableData[index], 'edit', true)
|
this.$set(this.tableData[index], 'edit', true)
|
||||||
this.$set(this.tableData[index], 'sale_stock_old', row.sale_stock)
|
this.$set(this.tableData[index], 'sale_stock_old', row.sale_stock)
|
||||||
},
|
},
|
||||||
|
|||||||
@ -66,7 +66,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加标签</div>
|
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加记录</div>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="commitSupplier" :loading="commitloading">确 定</el-button>
|
<el-button type="primary" @click="commitSupplier" :loading="commitloading">确 定</el-button>
|
||||||
|
|||||||
@ -78,10 +78,17 @@
|
|||||||
<el-input v-model="item.external_sku_id" clearable></el-input>
|
<el-input v-model="item.external_sku_id" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数量">
|
<el-form-item label="数量">
|
||||||
<el-input v-model="item.num" clearable></el-input>
|
<el-input v-model="item.num" clearable @input="changeInput(index, item)"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="成本">
|
<el-form-item label="成本">
|
||||||
<el-input v-model="item.cost" clearable></el-input>
|
<el-input v-model="item.cost" clearable @input="changeInput(index, item)">
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品总价">
|
||||||
|
<el-input v-model="item.total_price">
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="报损原因">
|
<el-form-item label="报损原因">
|
||||||
<el-input v-model="item.reason" clearable></el-input>
|
<el-input v-model="item.reason" clearable></el-input>
|
||||||
@ -91,7 +98,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加标签</div>
|
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加记录</div>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="commitBatchLoss" :loading="commitloading">确 定</el-button>
|
<el-button type="primary" @click="commitBatchLoss" :loading="commitloading">确 定</el-button>
|
||||||
@ -107,7 +114,14 @@
|
|||||||
<el-input v-model="curInfo.num" disabled></el-input>
|
<el-input v-model="curInfo.num" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="成本">
|
<el-form-item label="成本">
|
||||||
<el-input v-model="curInfo.cost" clearable></el-input>
|
<el-input v-model="curInfo.cost" clearable>
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品总价">
|
||||||
|
<el-input v-model="curInfo.total_price" disabled>
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="采购人">
|
<el-form-item label="采购人">
|
||||||
<el-select v-model="curInfo.buyer_id" clearable filterable ref="userRef">
|
<el-select v-model="curInfo.buyer_id" clearable filterable ref="userRef">
|
||||||
@ -213,6 +227,7 @@ export default {
|
|||||||
external_sku_id: '',
|
external_sku_id: '',
|
||||||
num: '',
|
num: '',
|
||||||
cost: '',
|
cost: '',
|
||||||
|
total_price: '',
|
||||||
reason: '',
|
reason: '',
|
||||||
phenomenon: ''
|
phenomenon: ''
|
||||||
}]
|
}]
|
||||||
@ -226,6 +241,7 @@ export default {
|
|||||||
external_sku_id: '',
|
external_sku_id: '',
|
||||||
num: '',
|
num: '',
|
||||||
cost: '',
|
cost: '',
|
||||||
|
total_price: '',
|
||||||
reason: '',
|
reason: '',
|
||||||
phenomenon: ''
|
phenomenon: ''
|
||||||
})
|
})
|
||||||
@ -325,6 +341,9 @@ export default {
|
|||||||
userList(params).then((res) => {
|
userList(params).then((res) => {
|
||||||
this.usersList = res.data.data
|
this.usersList = res.data.data
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
changeInput(index, row) {
|
||||||
|
this.$set(this.lossOrders[index], 'total_price', ((row.num * 1) * (row.cost * 1)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|||||||
224
resources/frontend/src/views/supplyChain/procureCheck.vue
Normal file
224
resources/frontend/src/views/supplyChain/procureCheck.vue
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
<template>
|
||||||
|
<div class="pageBox">
|
||||||
|
<div class="cardBox">
|
||||||
|
<div class="searchBox">
|
||||||
|
<div class="row">
|
||||||
|
<span>商品名称:</span>
|
||||||
|
<el-input v-model="filter.title" clearable></el-input>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span>商品编码:</span>
|
||||||
|
<el-input v-model="filter.external_sku_id" clearable></el-input>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span>创建时间:</span>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="addTime"
|
||||||
|
type="datetimerange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始时间"
|
||||||
|
end-placeholder="结束时间"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
style="width: 340px">
|
||||||
|
</el-date-picker>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span>审核状态:</span>
|
||||||
|
<el-select v-model="filter.status" placeholder="请选择" clearable>
|
||||||
|
<el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">筛选</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-card>
|
||||||
|
<el-table v-loading="loading" :data="procureList" style="width: 100%" border>
|
||||||
|
<el-table-column prop="goods_sku.id" label="商品id" width="80" align="center" />
|
||||||
|
<el-table-column prop="goods_sku.name" label="商品名称" />
|
||||||
|
<el-table-column prop="external_sku_id" label="商品编码" />
|
||||||
|
<el-table-column prop="num" label="采购数量" />
|
||||||
|
<el-table-column prop="cost" label="采购成本" />
|
||||||
|
<el-table-column prop="buyer_name" label="采购人名称" />
|
||||||
|
<!-- <el-table-column prop="status" label="状态" /> -->
|
||||||
|
<el-table-column prop="expire_time" label="保质期时间" />
|
||||||
|
<el-table-column prop="supplier_name" label="供应商">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.supplier_name">{{ scope.row.supplier_name }}({{scope.row.supplier_id}})</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.status == 0">待审核</span>
|
||||||
|
<span v-else-if="scope.row.status == 1" style="color: #6DD230;">审核通过</span>
|
||||||
|
<span v-else-if="scope.row.status == 2" style="color: #f00;">审核不通过</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="date" label="采购时间" align="center" />
|
||||||
|
<el-table-column label="操作" width="120" align="center">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button type="primary" v-if="scope.row.status != 1" plain @click="toExamine(scope.row)" icon="el-icon-s-check" size="mini">审核</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div class="page-pagination">
|
||||||
|
<el-pagination
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
:current-page="page"
|
||||||
|
:page-sizes="[15, 30, 50, 100]"
|
||||||
|
:page-size="pageSize"
|
||||||
|
layout="prev, pager, next, jumper, sizes, total"
|
||||||
|
:total="total">
|
||||||
|
</el-pagination>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-dialog title="审核" :visible.sync="dialogVisible" width="500px">
|
||||||
|
<el-form label-width="90px">
|
||||||
|
<el-form-item label="审核状态:">
|
||||||
|
<el-radio-group v-model="curInfo.status">
|
||||||
|
<el-radio :label="1">审核通过</el-radio>
|
||||||
|
<el-radio :label="2">审核不通过</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="commitCheck" :loading="commitloading">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getPurchaseLog, examinePurchase } from "@/api/supplyChain"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
page: 1,
|
||||||
|
pageSize: 15,
|
||||||
|
total: 0,
|
||||||
|
procureList: [],
|
||||||
|
filter: {
|
||||||
|
title: '',
|
||||||
|
external_sku_id: '',
|
||||||
|
status: ''
|
||||||
|
},
|
||||||
|
addTime: [],
|
||||||
|
curInfo: {},
|
||||||
|
commitloading: false,
|
||||||
|
dialogVisible: false,
|
||||||
|
statusList: [
|
||||||
|
{ id: 0, name: '待审核' },
|
||||||
|
{ id: 1, name: '审核通过' },
|
||||||
|
{ id: 2, name: '审核不通过' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetchList() {
|
||||||
|
this.loading = true
|
||||||
|
let params = {
|
||||||
|
page: this.page,
|
||||||
|
per_page: this.pageSize,
|
||||||
|
...this.filter,
|
||||||
|
start_time: this.addTime ? this.addTime[0] : '',
|
||||||
|
end_time: this.addTime ? this.addTime[1] : ''
|
||||||
|
}
|
||||||
|
getPurchaseLog(params).then((res) => {
|
||||||
|
this.procureList = res.data.data
|
||||||
|
this.total = res.data.meta.total
|
||||||
|
this.loading = false
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleSizeChange(val) {
|
||||||
|
this.page = 1
|
||||||
|
this.pageSize = val
|
||||||
|
this.fetchList()
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.page = val
|
||||||
|
this.fetchList()
|
||||||
|
},
|
||||||
|
handleSearch() {
|
||||||
|
this.page = 1
|
||||||
|
this.fetchList()
|
||||||
|
},
|
||||||
|
toExamine(row) {
|
||||||
|
this.curInfo = JSON.parse(JSON.stringify(row))
|
||||||
|
this.dialogVisible = true
|
||||||
|
},
|
||||||
|
commitCheck() {
|
||||||
|
if(!this.curInfo.status) {
|
||||||
|
this.$message({ type: "error", message: "请选择审核状态" })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.commitloading = true
|
||||||
|
let params = {
|
||||||
|
purchaseOrders: [{
|
||||||
|
id: this.curInfo.id,
|
||||||
|
status: this.curInfo.status
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
examinePurchase(params).then((res) => {
|
||||||
|
this.$message({ type: "success", message: "操作成功!" })
|
||||||
|
this.commitloading = false
|
||||||
|
this.dialogVisible = false
|
||||||
|
this.fetchList()
|
||||||
|
}).catch(() => {
|
||||||
|
this.commitloading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.fetchList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.searchBox{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
white-space: nowrap;
|
||||||
|
.row{
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-right: 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bgBox{
|
||||||
|
position: relative;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: #f5f2f2;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
padding: 15px 30px 15px 0;
|
||||||
|
.close{
|
||||||
|
color: #f00;
|
||||||
|
position: absolute;
|
||||||
|
right: 5px;
|
||||||
|
top: 5px;
|
||||||
|
font-size: 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #409eff;
|
||||||
|
cursor: pointer;
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -22,6 +22,13 @@
|
|||||||
style="width: 340px">
|
style="width: 340px">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span>审核状态:</span>
|
||||||
|
<el-select v-model="filter.status" placeholder="请选择" clearable>
|
||||||
|
<el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">筛选</el-button>
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">筛选</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -47,6 +54,13 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="date" label="采购时间" align="center" />
|
<el-table-column prop="date" label="采购时间" align="center" />
|
||||||
|
<el-table-column label="状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.status == 0">待审核</span>
|
||||||
|
<span v-else-if="scope.row.status == 1" style="color: #6DD230;">审核通过</span>
|
||||||
|
<span v-else-if="scope.row.status == 2" style="color: #f00;">审核不通过</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="120" align="center">
|
<el-table-column label="操作" width="120" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="primary" @click="handleEdit(scope.row)" icon="el-icon-edit" size="mini">编辑</el-button>
|
<el-button type="primary" @click="handleEdit(scope.row)" icon="el-icon-edit" size="mini">编辑</el-button>
|
||||||
@ -69,7 +83,7 @@
|
|||||||
<el-dialog title="新增" :visible.sync="dialogVisible" width="500px">
|
<el-dialog title="新增" :visible.sync="dialogVisible" width="500px">
|
||||||
<el-form label-width="90px">
|
<el-form label-width="90px">
|
||||||
<el-form-item label="采购人">
|
<el-form-item label="采购人">
|
||||||
<el-select v-model="curInfo.buyer_user_id" clearable filterable ref="userBatchRef">
|
<el-select v-model="curInfo.buyer_user_id" clearable filterable ref="userBatchRef" disabled>
|
||||||
<el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
|
<el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -84,14 +98,28 @@
|
|||||||
<div v-for="(item, index) in purchaseOrders" :key="index" class="bgBox">
|
<div v-for="(item, index) in purchaseOrders" :key="index" class="bgBox">
|
||||||
<div class="close" @click="delItem(index)"><i class="el-icon-delete-solid"></i></div>
|
<div class="close" @click="delItem(index)"><i class="el-icon-delete-solid"></i></div>
|
||||||
<el-form label-width="90px">
|
<el-form label-width="90px">
|
||||||
|
<el-form-item label="商品名称">
|
||||||
|
<el-select v-model="item.external_sku_id" filterable remote reserve-keyword placeholder="商品名称"
|
||||||
|
:remote-method="remoteMethod" :loading="searchLoading">
|
||||||
|
<el-option v-for="it in goodsList" :key="it.external_sku_id" :label="it.title" :value="it.external_sku_id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="商品编码">
|
<el-form-item label="商品编码">
|
||||||
<el-input v-model="item.external_sku_id" clearable></el-input>
|
<el-input v-model="item.external_sku_id" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数量">
|
<el-form-item label="数量">
|
||||||
<el-input v-model="item.num" clearable></el-input>
|
<el-input v-model="item.num" clearable @input="changeInput(index, item)"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="成本">
|
<el-form-item label="成本">
|
||||||
<el-input v-model="item.cost" clearable></el-input>
|
<el-input v-model="item.cost" clearable @input="changeInput(index, item)">
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品总价">
|
||||||
|
<el-input v-model="item.total_price">
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="采购日期">
|
<el-form-item label="采购日期">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
@ -102,9 +130,18 @@
|
|||||||
value-format="yyyy-MM-dd">
|
value-format="yyyy-MM-dd">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="到货时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="item.arrived_time"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="到货时间"
|
||||||
|
format="yyyy-MM-dd hh"
|
||||||
|
value-format="yyyy-MM-dd hh">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加标签</div>
|
<div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加采购商品</div>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="commitAddPurchase" :loading="commitloading">确 定</el-button>
|
<el-button type="primary" @click="commitAddPurchase" :loading="commitloading">确 定</el-button>
|
||||||
@ -122,8 +159,13 @@
|
|||||||
<el-form-item label="成本">
|
<el-form-item label="成本">
|
||||||
<el-input v-model="curInfo.cost" disabled></el-input>
|
<el-input v-model="curInfo.cost" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="商品总价">
|
||||||
|
<el-input v-model="curInfo.total_price" disabled>
|
||||||
|
<template slot="append">元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="采购人">
|
<el-form-item label="采购人">
|
||||||
<el-select v-model="curInfo.buyer_user_id" clearable filterable ref="userRef">
|
<el-select v-model="curInfo.buyer_user_id" clearable filterable ref="userRef" disabled>
|
||||||
<el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
|
<el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -143,6 +185,15 @@
|
|||||||
value-format="yyyy-MM-dd">
|
value-format="yyyy-MM-dd">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="到期时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="curInfo.arrived_time"
|
||||||
|
type="datetime"
|
||||||
|
placeholder="到期时间"
|
||||||
|
format="yyyy-MM-dd hh"
|
||||||
|
value-format="yyyy-MM-dd hh">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="editDialog = false">取 消</el-button>
|
<el-button @click="editDialog = false">取 消</el-button>
|
||||||
@ -172,6 +223,8 @@
|
|||||||
import { getPurchaseLog, updatePurchaseLog, getSupplier, batchAddPurchaseLog } from "@/api/supplyChain"
|
import { getPurchaseLog, updatePurchaseLog, getSupplier, batchAddPurchaseLog } from "@/api/supplyChain"
|
||||||
import axios from "axios"
|
import axios from "axios"
|
||||||
import { userList } from "@/api/user"
|
import { userList } from "@/api/user"
|
||||||
|
import { goodsSkusList } from "@/api/goods"
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
@ -183,7 +236,8 @@ export default {
|
|||||||
procureList: [],
|
procureList: [],
|
||||||
filter: {
|
filter: {
|
||||||
title: '',
|
title: '',
|
||||||
external_sku_id: ''
|
external_sku_id: '',
|
||||||
|
status: ''
|
||||||
},
|
},
|
||||||
addTime: [],
|
addTime: [],
|
||||||
commitloading: false,
|
commitloading: false,
|
||||||
@ -194,7 +248,14 @@ export default {
|
|||||||
usersList: [],
|
usersList: [],
|
||||||
supplierList: [],
|
supplierList: [],
|
||||||
purchaseOrders: [],
|
purchaseOrders: [],
|
||||||
editDialog: false
|
editDialog: false,
|
||||||
|
goodsList: [],
|
||||||
|
searchLoading: false,
|
||||||
|
statusList: [
|
||||||
|
{ id: 0, name: '待审核' },
|
||||||
|
{ id: 1, name: '审核通过' },
|
||||||
|
{ id: 2, name: '审核不通过' }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -231,14 +292,16 @@ export default {
|
|||||||
// 新增供应商
|
// 新增供应商
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
this.curInfo = {
|
this.curInfo = {
|
||||||
buyer_user_id: '',
|
buyer_user_id: localStorage.getItem("userId"),
|
||||||
supplier_id: ''
|
supplier_id: ''
|
||||||
}
|
}
|
||||||
this.purchaseOrders = [{
|
this.purchaseOrders = [{
|
||||||
external_sku_id: '',
|
external_sku_id: '',
|
||||||
num: '',
|
num: '',
|
||||||
cost: '',
|
cost: '',
|
||||||
date: ''
|
total_price: '',
|
||||||
|
date: dayjs().format('YYYY-MM-DD'),
|
||||||
|
arrived_time: ''
|
||||||
}]
|
}]
|
||||||
this.dialogVisible = true
|
this.dialogVisible = true
|
||||||
},
|
},
|
||||||
@ -250,7 +313,9 @@ export default {
|
|||||||
external_sku_id: '',
|
external_sku_id: '',
|
||||||
num: '',
|
num: '',
|
||||||
cost: '',
|
cost: '',
|
||||||
date: ''
|
total_price: '',
|
||||||
|
date: dayjs().format('YYYY-MM-DD'),
|
||||||
|
arrived_time: ''
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handleEdit(row) {
|
handleEdit(row) {
|
||||||
@ -367,6 +432,24 @@ export default {
|
|||||||
getSupplier(params).then((res) => {
|
getSupplier(params).then((res) => {
|
||||||
this.supplierList = res.data.data
|
this.supplierList = res.data.data
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
remoteMethod(query) {
|
||||||
|
if (query !== '') {
|
||||||
|
this.searchLoading = true
|
||||||
|
setTimeout(() => {
|
||||||
|
this.searchLoading = false
|
||||||
|
goodsSkusList(query).then((res) => {
|
||||||
|
this.goodsList = res.data.filter(item => {
|
||||||
|
return item.title.toLowerCase().indexOf(query.toLowerCase()) > -1
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}, 200)
|
||||||
|
} else {
|
||||||
|
this.goodsList = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
changeInput(index, row) {
|
||||||
|
this.$set(this.purchaseOrders[index], 'total_price', ((row.num * 1) * (row.cost * 1)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user