mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
194 lines
5.6 KiB
Vue
194 lines
5.6 KiB
Vue
<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> |