616 lines
16 KiB
Vue
Raw Normal View History

2022-08-02 10:16:07 +08:00
<template>
<div>
<el-card class="box-card">
2022-08-06 20:03:35 +08:00
<div class="goods" style="margin: 20px">
<div
class="add-item-info"
style="margin-bottom: 10px; margin-left: 52px"
>
2022-08-04 18:59:32 +08:00
<div>
2022-08-06 20:03:35 +08:00
<div style="font-size: 14px">商品列表</div>
2022-08-17 19:16:28 +08:00
<el-select
v-model="lid"
placeholder="选择商品"
@change="onchange"
filterable
>
2022-08-06 20:03:35 +08:00
<el-option
v-for="item in goodschoose"
:key="item.id"
:label="item.title"
:value="item.id"
>
2022-08-04 18:59:32 +08:00
</el-option>
</el-select>
</div>
2022-08-06 20:03:35 +08:00
<span style="font-size: 14px"
>商品图片
2022-08-16 19:57:31 +08:00
<el-upload
class="avatar-uploader"
action="#"
:limit="1"
:auto-upload="false"
:show-file-list="true"
list-type="picture-card"
:on-change="handleAvatarSuccess"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
2022-08-06 20:03:35 +08:00
</span>
2022-08-02 10:16:07 +08:00
</div>
2022-08-15 19:55:44 +08:00
2022-08-12 18:26:27 +08:00
<!-- 编辑按钮进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData != ''">
<div>
<el-form-item label="商品名称:">
<el-input
placeholder="商品名称"
v-model="goodsData.goods.title"
></el-input>
</el-form-item>
<el-form-item label="商品编码:">
<el-input
placeholder="商品编码"
v-model="goodsData.goods.goods_code"
></el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select
v-model="goodsData.goods.type_id"
placeholder="商品种类"
2022-08-17 19:16:28 +08:00
filterable
2022-08-12 18:26:27 +08:00
>
<el-option
v-for="item in cate"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select
v-model="goodsData.goods.brand_id"
placeholder="商品品牌"
2022-08-17 19:16:28 +08:00
filterable
2022-08-12 18:26:27 +08:00
>
<el-option
v-for="item in brand"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item label="商品规格:">
<el-input
placeholder="商品规格"
v-model="goodsData.title"
></el-input>
</el-form-item>
<el-form-item label="规格编码:">
<el-input v-model="goodsData.sku_code" placeholder="商品编码">
</el-input>
</el-form-item>
<el-form-item label="商品状态:">
2022-08-22 17:17:30 +08:00
<el-select v-model="goodsData.status">
2022-08-12 18:26:27 +08:00
<el-option
v-for="item in options"
:key="item.id"
:label="item.label"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
<el-input v-model="goodsData.num" placeholder="商品数量">
</el-input>
</el-form-item>
<el-form-item label="商品成本:">
<el-input v-model="goodsData.cost" placeholder="商品成本">
</el-input>
</el-form-item>
</div>
</div>
<div class="btn">
<el-form-item>
<el-button type="primary" @click="Edititem()">保存</el-button>
<el-button plain @click="cancel()">取消</el-button>
</el-form-item>
</div>
</el-form>
<!-- 新建商品进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData == ''">
2022-08-02 10:16:07 +08:00
<div>
<el-form-item label="商品名称:">
2022-08-15 19:55:44 +08:00
<el-input
placeholder="商品名称"
v-model="form.title"
:disabled="true"
v-if="isShow"
></el-input>
<el-input
placeholder="商品名称"
v-model="form.title"
v-else
></el-input>
2022-08-04 18:59:32 +08:00
</el-form-item>
<el-form-item label="商品编码:">
2022-08-06 20:03:35 +08:00
<el-input
placeholder="商品编码"
v-model="form.goods_code"
2022-08-15 19:55:44 +08:00
:disabled="true"
v-if="isShow"
></el-input>
<el-input
placeholder="商品编码"
v-model="form.goods_code"
v-else
2022-08-06 20:03:35 +08:00
></el-input>
2022-08-02 10:16:07 +08:00
</el-form-item>
<el-form-item label="商品种类:">
2022-08-17 19:16:28 +08:00
<!-- <el-select
2022-08-15 19:55:44 +08:00
v-model="form.type_id"
placeholder="商品种类"
v-if="isShow"
>
<el-option
v-for="item in cate"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
2022-08-17 19:16:28 +08:00
</el-select> -->
<el-select
v-model="form.type_id"
placeholder="商品种类"
filterable
>
2022-08-06 20:03:35 +08:00
<el-option
v-for="item in cate"
:key="item.id"
:label="item.name"
:value="item.id"
>
2022-08-02 10:16:07 +08:00
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
2022-08-17 19:16:28 +08:00
<!-- <el-select
2022-08-15 19:55:44 +08:00
v-model="form.brand_id"
2022-08-17 19:16:28 +08:00
placeholder="商品品牌1"
2022-08-15 19:55:44 +08:00
v-if="isShow"
>
<el-option
v-for="item in brand"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
2022-08-17 19:16:28 +08:00
</el-select> -->
<el-select
v-model="form.brand_id"
placeholder="商品品牌"
filterable
>
2022-08-06 20:03:35 +08:00
<el-option
v-for="item in brand"
:key="item.id"
:label="item.name"
:value="item.id"
>
2022-08-02 10:16:07 +08:00
</el-option>
</el-select>
</el-form-item>
</div>
2022-08-06 20:03:35 +08:00
<div v-for="(item, i) in skus" :key="i">
<span style="margin-right: -15px">{{ i + 1 }}.</span>
2022-08-02 10:16:07 +08:00
<el-form-item label="商品规格:">
2022-08-06 20:03:35 +08:00
<el-input
placeholder="商品规格"
v-model="skus[i].title"
></el-input>
2022-08-02 10:16:07 +08:00
</el-form-item>
2022-08-12 18:26:27 +08:00
<span class="addto" @click="handleAdd()">+</span>
2022-08-04 18:59:32 +08:00
<el-form-item label="规格编码:">
2022-08-06 20:03:35 +08:00
<el-input v-model="skus[i].sku_code" placeholder="商品编码">
2022-08-04 18:59:32 +08:00
</el-input>
2022-08-02 10:16:07 +08:00
</el-form-item>
<el-form-item label="商品状态:">
2022-08-22 17:17:30 +08:00
<el-select v-model="skus[i].reserve" placeholder="下架(默认)">
2022-08-06 20:03:35 +08:00
<el-option
v-for="item in options"
:key="item.id"
:label="item.label"
:value="item.id"
>
2022-08-04 18:59:32 +08:00
</el-option>
2022-08-02 10:16:07 +08:00
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
2022-08-06 20:03:35 +08:00
<el-input v-model="skus[i].num" placeholder="商品数量">
2022-08-04 18:59:32 +08:00
</el-input>
2022-08-02 10:16:07 +08:00
</el-form-item>
<el-form-item label="商品成本:">
2022-08-06 20:03:35 +08:00
<el-input v-model="skus[i].cost" placeholder="商品成本">
2022-08-04 18:59:32 +08:00
</el-input>
2022-08-02 10:16:07 +08:00
</el-form-item>
2022-08-06 20:03:35 +08:00
<el-button type="primary" @click="handleDelete(i)"
>删除</el-button
>
2022-08-02 10:16:07 +08:00
</div>
</div>
<div class="btn">
<el-form-item>
2022-08-06 20:03:35 +08:00
<el-button type="primary" @click="handleSave()">保存</el-button>
2022-08-12 18:26:27 +08:00
<el-button plain @click="cancel()">取消</el-button>
2022-08-02 10:16:07 +08:00
</el-form-item>
</div>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
2022-08-16 19:57:31 +08:00
// import UploadTem from "../../../components/upload/index.vue";
2022-08-04 18:59:32 +08:00
import {
addGoods,
checkGoods,
goodsList,
updateGoods,
2022-08-16 19:57:31 +08:00
imgUpload,
2022-08-06 20:03:35 +08:00
} from "../../../api/goods.js";
import { goods_types, Brand_goods_types } from "../../../api/rankingData.js";
2022-08-02 10:16:07 +08:00
export default {
2022-08-16 19:57:31 +08:00
// components: {
// UploadTem,
// },
2022-08-02 10:16:07 +08:00
data() {
return {
2022-08-16 19:57:31 +08:00
imgs: [],
2022-08-06 20:03:35 +08:00
gallery: "",
imageUrl: "",
lid: "", // 选择的商品列表id
gid: "", // 商品id
2022-08-04 18:59:32 +08:00
brand: [], // 品牌列表
cate: [], // 种类列表
goodschoose: [], // 商品列表
2022-08-12 18:26:27 +08:00
goodsID: "", //进入页面是否有商品id
goodsData: [], //编辑按钮进入获取的商品数据
2022-08-04 18:59:32 +08:00
// 规格列表
skus: [
2022-08-02 10:16:07 +08:00
{
2022-08-06 20:03:35 +08:00
title: "",
sku_code: "",
2022-08-12 18:26:27 +08:00
status: "0",
2022-08-17 15:40:04 +08:00
num: "0",
cost: "0",
2022-08-22 17:17:30 +08:00
reserve: "0",
2022-08-02 10:16:07 +08:00
},
2022-08-04 18:59:32 +08:00
],
// 增加商品表单
2022-08-02 10:16:07 +08:00
form: {
2022-08-06 20:03:35 +08:00
goods_id: "",
title: "",
2022-08-16 19:57:31 +08:00
img_url: "",
2022-08-06 20:03:35 +08:00
type_id: "",
brand_id: "",
goods_code: "",
2022-08-02 10:16:07 +08:00
},
2022-08-04 18:59:32 +08:00
// 商品状态
2022-08-02 10:16:07 +08:00
options: [
2022-08-12 18:26:27 +08:00
{
id: "0",
label: "下架",
},
2022-08-02 10:16:07 +08:00
{
2022-08-06 20:03:35 +08:00
id: "1",
label: "在售",
2022-08-02 10:16:07 +08:00
},
{
2022-08-06 20:03:35 +08:00
id: "2",
label: "预警",
2022-08-02 10:16:07 +08:00
},
],
2022-08-04 18:59:32 +08:00
file: [],
2022-08-15 19:55:44 +08:00
isShow: false,
2022-08-16 19:57:31 +08:00
URL: "",
2022-08-06 20:03:35 +08:00
};
2022-08-02 10:16:07 +08:00
},
2022-08-04 18:59:32 +08:00
watch: {
lid: {
handler(newVal, oldVal) {
if (newVal) {
this.goodschoose.forEach((item) => {
if (item.id == newVal) {
2022-08-06 20:03:35 +08:00
this.form = { ...item };
2022-08-04 18:59:32 +08:00
}
2022-08-06 20:03:35 +08:00
});
2022-08-04 18:59:32 +08:00
}
},
deep: true, // 深度监听
immediate: true, // 第一次改变就执行
},
},
2022-08-15 19:55:44 +08:00
2022-08-02 10:16:07 +08:00
methods: {
2022-08-16 19:57:31 +08:00
//图片上传
handleAvatarSuccess(res, files) {
let formData = new FormData();
files.forEach((file) => {
formData.append("uploadFile", file.raw); //文件
});
let requestConfig = {
headers: {
"Content-Type": "multipart/form-data",
},
};
imgUpload(formData, requestConfig).then((res) => {
console.log(res);
this.form.img_url = res.data.resource;
2022-08-22 17:17:30 +08:00
this.goodsData.goods.img_url = res.data.resource;
2022-08-16 19:57:31 +08:00
});
},
2022-08-04 18:59:32 +08:00
// 查看一个商品
handleUpdate() {
2022-08-06 20:03:35 +08:00
this.gid = this.$route.query;
2022-08-04 18:59:32 +08:00
if (this.gid.id) {
checkGoods(this.gid.id).then((res) => {
2022-08-06 20:03:35 +08:00
console.log(res.data.data, "oooppuu");
const data = res.data.data;
const sku = this.skus[0];
const list = {};
2022-08-04 18:59:32 +08:00
Object.keys(data).map((key) => {
Object.keys(sku).map((i) => {
if (key == i) {
2022-08-06 20:03:35 +08:00
list[i] = data[key];
2022-08-04 18:59:32 +08:00
}
2022-08-06 20:03:35 +08:00
});
});
});
2022-08-04 18:59:32 +08:00
}
},
2022-08-12 18:26:27 +08:00
2022-08-04 18:59:32 +08:00
// 商品列表
handleList() {
goodsList().then((res) => {
2022-08-06 20:03:35 +08:00
this.goodschoose = res.data.data;
2022-08-15 19:55:44 +08:00
this.goodschoose = [
{
title: "",
id: "",
},
...this.goodschoose,
];
2022-08-06 20:03:35 +08:00
});
2022-08-04 18:59:32 +08:00
},
2022-08-12 18:26:27 +08:00
// 添加商品
2022-08-04 18:59:32 +08:00
handleSave() {
2022-08-06 20:03:35 +08:00
const goods = this.form;
2022-08-12 18:26:27 +08:00
const skus = this.skus;
2022-08-06 20:03:35 +08:00
const updata = {
...goods,
goods_id: this.lid,
skus: skus,
};
2022-08-15 19:55:44 +08:00
addGoods(updata).then((res) => {
if (res.statusText === "OK") {
this.$message({
message: "商品添加成功!",
type: "success",
});
this.updateForm();
this.$router.push("/GOODS_LIST");
}
});
2022-08-04 18:59:32 +08:00
},
2022-08-06 20:03:35 +08:00
2022-08-04 18:59:32 +08:00
// 修改成功后重置表单
updateForm() {
this.form = {
2022-08-06 20:03:35 +08:00
title: "",
img_url: "abc.jpg",
type_id: "",
brand_id: "",
goods_code: "",
};
2022-08-04 18:59:32 +08:00
this.skus = [
{
2022-08-06 20:03:35 +08:00
title: "",
sku_code: "",
status: "",
num: "",
cost: "",
2022-08-04 18:59:32 +08:00
},
2022-08-06 20:03:35 +08:00
];
2022-08-04 18:59:32 +08:00
},
2022-08-12 18:26:27 +08:00
2022-08-02 10:16:07 +08:00
// 增加一个商品规格
handleAdd() {
2022-08-04 18:59:32 +08:00
this.skus.push({
2022-08-06 20:03:35 +08:00
title: "",
sku_code: "",
2022-08-16 19:57:31 +08:00
status: "0",
2022-08-06 20:03:35 +08:00
num: "",
cost: "",
});
2022-08-12 18:26:27 +08:00
console.log(this.skus);
2022-08-02 10:16:07 +08:00
},
2022-08-12 18:26:27 +08:00
2022-08-02 10:16:07 +08:00
// 删除一个商品规格
handleDelete(index) {
2022-08-06 20:03:35 +08:00
this.skus.splice(index, 1);
2022-08-04 18:59:32 +08:00
},
2022-08-12 18:26:27 +08:00
2022-08-04 18:59:32 +08:00
hanleurlimg(val) {
2022-08-06 20:03:35 +08:00
console.log(val, "=+++++++++");
2022-08-04 18:59:32 +08:00
},
2022-08-12 18:26:27 +08:00
2022-08-04 18:59:32 +08:00
// 上传商品图片
successUpload(file, fileList) {
2022-08-06 20:03:35 +08:00
console.log(file, fileList, 5555);
2022-08-02 10:16:07 +08:00
},
2022-08-12 18:26:27 +08:00
2022-08-04 18:59:32 +08:00
errorUpload(file, fileList) {
2022-08-06 20:03:35 +08:00
console.log(file, fileList, 5555);
2022-08-04 18:59:32 +08:00
},
2022-08-12 18:26:27 +08:00
// 商品列表页进入带数据表单
getgoodsidData() {
let id = this.bigID;
2022-08-15 19:55:44 +08:00
checkGoods(id).then((res) => {
this.goodsData = res.data.data;
2022-08-22 17:17:30 +08:00
console.log(this.goodsData);
2022-08-15 19:55:44 +08:00
});
2022-08-12 18:26:27 +08:00
},
// 编辑确认请求
Edititem() {
let id = this.bigID;
2022-08-15 19:55:44 +08:00
// console.log("ID", id);
// console.log("goodsid", this.goodsData.goods_id);
2022-08-12 18:26:27 +08:00
let goods = {
title: this.goodsData.goods.title,
2022-08-22 17:17:30 +08:00
img_url: this.goodsData.goods.img_url,
// ? this.goodsData.goods.img_url
// : "",
2022-08-12 18:26:27 +08:00
type_id: this.goodsData.goods.type_id,
brand_id: this.goodsData.goods.brand_id,
goods_code: this.goodsData.goods.goods_code,
};
let sku = {
title: this.goodsData.title,
sku_code: this.goodsData.sku_code,
status: this.goodsData.status,
num: this.goodsData.num,
cost: this.goodsData.cost,
};
if (sku.status == "下架") {
sku.status = 0;
} else if (sku.status == "在售") {
sku.status = 1;
} else if (sku.status == "预警") {
sku.status = 2;
}
2022-08-15 19:55:44 +08:00
let updateData = {
2022-08-12 18:26:27 +08:00
goods_id: this.goodsData.goods_id,
goods,
sku,
};
2022-08-15 19:55:44 +08:00
updateGoods(id, updateData).then((res) => {
2022-08-17 15:40:04 +08:00
this.$router.push("/GOODS_LIST");
2022-08-15 19:55:44 +08:00
this.$message({
message: "商品编辑成功!",
type: "success",
2022-08-12 18:26:27 +08:00
});
2022-08-15 19:55:44 +08:00
});
2022-08-12 18:26:27 +08:00
},
// 取消按钮
cancel() {
this.$router.push("/GOODS_LIST");
},
2022-08-15 19:55:44 +08:00
onchange(value) {
console.log(value);
if (value !== "") {
this.isShow = true;
}
if (value === "") {
this.isShow = false;
this.form = {};
}
},
2022-08-12 18:26:27 +08:00
},
2022-08-16 19:57:31 +08:00
2022-08-12 18:26:27 +08:00
created() {
this.goodsID = sessionStorage.getItem("商品ID");
this.bigID = sessionStorage.getItem("ID");
2022-08-04 18:59:32 +08:00
},
2022-08-16 19:57:31 +08:00
2022-08-04 18:59:32 +08:00
mounted() {
2022-08-06 20:03:35 +08:00
this.gid = this.$route.query;
2022-08-04 18:59:32 +08:00
// 获取商品种类
goods_types().then((res) => {
2022-08-06 20:03:35 +08:00
this.cate = res.data.data;
});
2022-08-04 18:59:32 +08:00
// 获取商品品牌
Brand_goods_types().then((res) => {
2022-08-06 20:03:35 +08:00
this.brand = res.data.data;
});
this.handleList();
this.handleUpdate();
2022-08-22 17:17:30 +08:00
this.getgoodsidData();
2022-08-02 10:16:07 +08:00
},
2022-08-16 19:57:31 +08:00
2022-08-12 18:26:27 +08:00
beforeDestroy() {
sessionStorage.removeItem("商品ID"); //销毁内存中的商品ID
sessionStorage.removeItem("ID"); //销毁内存中的ID
},
2022-08-06 20:03:35 +08:00
};
2022-08-02 10:16:07 +08:00
</script>
<style scoped>
.el-upload--picture-card {
width: 50px;
height: 50px;
}
.el-form-item {
margin-left: 60px;
}
.addto {
display: inline-block;
2022-08-12 18:26:27 +08:00
width: 30px;
height: 30px;
2022-08-02 10:16:07 +08:00
background-color: blue;
color: #fff;
font-size: 25px;
text-align: center;
2022-08-12 18:26:27 +08:00
line-height: 30px;
border-radius: 5px;
margin-top: 4px;
2022-08-02 10:16:07 +08:00
}
2022-08-16 19:57:31 +08:00
/* 分割 */
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 148px;
height: 148px;
line-height: 148px;
2022-08-02 10:16:07 +08:00
text-align: center;
2022-08-16 19:57:31 +08:00
}
.avatar {
2022-08-17 15:40:04 +08:00
width: 148px;
height: 148px;
2022-08-16 19:57:31 +08:00
display: block;
}
2022-08-02 10:16:07 +08:00
</style>