dev
wxy 2024-05-08 10:22:44 +08:00
parent 9ef0774e57
commit fc9d4f1acf
3 changed files with 460 additions and 10 deletions

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询商品SKU列表
export function listSku(query) {
return request({
url: '/product/sku/list',
method: 'get',
params: query
})
}
// 查询商品SKU详细
export function getSku(id) {
return request({
url: '/product/sku/' + id,
method: 'get'
})
}
// 新增商品SKU
export function addSku(data) {
return request({
url: '/product/sku',
method: 'post',
data: data
})
}
// 修改商品SKU
export function updateSku(data) {
return request({
url: '/product/sku',
method: 'put',
data: data
})
}
// 删除商品SKU
export function delSku(id) {
return request({
url: '/product/sku/' + id,
method: 'delete'
})
}

View File

@ -116,13 +116,14 @@
<!-- 添加或修改商品信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
<el-card>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-steps :active="active" finish-status="success">
<el-step title="添加商品信息"> </el-step>
<el-step title="添加规格信息"></el-step>
<el-step title="添加描述信息"></el-step>
</el-steps>
<div v-show="active==0">
<div v-show="active == 0">
<el-row>
<el-col :span="12">
<div class="grid-content bg-purple">
@ -155,12 +156,24 @@
<image-upload v-model="form.carouselImages" placeholder="请输入内容" :limit="1" :is-show-tip="false"/>
</el-form-item>
</div>
<div v-show="active==1">
<div v-show="active == 1">
<el-form-item label="规格信息" prop="ruleId">
<el-select v-model="form.ruleId" placeholder="请选择规格" clearable>
<el-option v-for="item in rule" :label="item.ruleName" :value="item.id" :key="item.id"></el-option>
<el-select v-model="form.rule" placeholder="请选择规格" v-on:change="changeRuleInfoListByRuleId" clearable>
<el-option v-for="item in ruleList" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<template>
<el-table
:data="tableColumnHeaderTemplate"
style="width: 100%">
<el-table-column v-for="column in tableColumnHeaderTemplate" :key="column.prop"
:prop="column.prop"
:label="column.label">
</el-table-column>
</el-table>
</template>
</div>
<div v-show="active==2">
@ -175,6 +188,7 @@
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-card>
</el-dialog>
</div>
</template>
@ -185,16 +199,18 @@ import ImageUpload from "@/components/ImageUpload"
import { listBrand } from "@/api/product/brand"
import { listRule } from "@/api/product/rule"
import log from "@/views/monitor/job/log.vue";
export default {
components:{ImageUpload},
name: "Info",
data() {
return {
tableColumnHeaderTemplate:[],
active: 0,
rule: [],
brandList:[],
ruleList:[],
tableData:[],
//
loading: true,
//
@ -239,16 +255,46 @@ export default {
created() {
this.getList();
this.initBrandListInfo();
this.initRuleListInfo();
},
methods: {
/**查询商品规格**/
getRule() {
listRule(this.name).then(
response => {
this.rule = response.data
changeRuleInfoListByRuleId(object){
this.tableColumnHeaderTemplate = [];
let ruleInfo = null
this.ruleList.forEach(item => {
if(object == item.id){
ruleInfo = item;
}
})
if(null == ruleInfo){
return;
}
let ruleAttrJson=JSON.parse(ruleInfo.ruleAttr)
ruleAttrJson.forEach(ruleAttr => {
this.tableColumnHeaderTemplate.push({'prop':'xxx','label':ruleAttr.ruleType})
})
this.tableColumnHeaderTemplate.push(
{prop:'stock',label:'商品库存'},
{prop:'price',label:'商品价格'},
{prop:'purchasePrice',label:'商品进价'},
{prop:'sellingPrice',label:'商品售价'},
{prop:'image',label:'商品图片'},
{prop:'number',label:'编号'},
{prop:'weight',label:'重量'},
{prop:'volume',label:'体积'},
)
},
/**查询商品规格**/
initRuleListInfo() {
let params = {
status: 0
};
listRule(params).then(res =>{
if(200 == res.code){
this.ruleList = res.data.list;
}
});
},
/**查询品牌表**/
initBrandListInfo() {
let params = {

View File

@ -0,0 +1,360 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="商品库存" prop="stock">
<el-input
v-model="queryParams.stock"
placeholder="请输入商品库存"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品价格" prop="price">
<el-input
v-model="queryParams.price"
placeholder="请输入商品价格"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品进价" prop="purchasePrice">
<el-input
v-model="queryParams.purchasePrice"
placeholder="请输入商品进价"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="商品售价" prop="sellingPrice">
<el-input
v-model="queryParams.sellingPrice"
placeholder="请输入商品售价"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['product:sku:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['product:sku:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['product:sku:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['product:sku:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="skuList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="商品信息" align="center" prop="productId" />
<el-table-column label="商品规格" align="center" prop="sku" />
<el-table-column label="商品库存" align="center" prop="stock" />
<el-table-column label="商品价格" align="center" prop="price" />
<el-table-column label="商品进价" align="center" prop="purchasePrice" />
<el-table-column label="商品售价" align="center" prop="sellingPrice" />
<el-table-column label="规格图片" align="center" prop="image" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.image" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="编号" align="center" prop="number" />
<el-table-column label="重量" align="center" prop="weight" />
<el-table-column label="体积" align="center" prop="volume" />
<el-table-column label="乐观锁" align="center" prop="revision" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['product:sku:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['product:sku:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改商品SKU对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="商品信息" prop="productId">
<el-input v-model="form.productId" placeholder="请输入商品信息" />
</el-form-item>
<el-form-item label="商品规格" prop="sku">
<el-input v-model="form.sku" placeholder="请输入商品规格" />
</el-form-item>
<el-form-item label="商品库存" prop="stock">
<el-input v-model="form.stock" placeholder="请输入商品库存" />
</el-form-item>
<el-form-item label="商品价格" prop="price">
<el-input v-model="form.price" placeholder="请输入商品价格" />
</el-form-item>
<el-form-item label="商品进价" prop="purchasePrice">
<el-input v-model="form.purchasePrice" placeholder="请输入商品进价" />
</el-form-item>
<el-form-item label="商品售价" prop="sellingPrice">
<el-input v-model="form.sellingPrice" placeholder="请输入商品售价" />
</el-form-item>
<el-form-item label="规格图片" prop="image">
<image-upload v-model="form.image"/>
</el-form-item>
<el-form-item label="编号" prop="number">
<el-input v-model="form.number" placeholder="请输入编号" />
</el-form-item>
<el-form-item label="重量" prop="weight">
<el-input v-model="form.weight" placeholder="请输入重量" />
</el-form-item>
<el-form-item label="体积" prop="volume">
<el-input v-model="form.volume" placeholder="请输入体积" />
</el-form-item>
<el-form-item label="乐观锁" prop="revision">
<el-input v-model="form.revision" placeholder="请输入乐观锁" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSku, getSku, delSku, addSku, updateSku } from "@/api/product/sku";
export default {
name: "Sku",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// SKU
skuList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
stock: null,
price: null,
purchasePrice: null,
sellingPrice: null,
},
//
form: {},
//
rules: {
productId: [
{ required: true, message: "商品信息不能为空", trigger: "blur" }
],
sku: [
{ required: true, message: "商品规格不能为空", trigger: "blur" }
],
stock: [
{ required: true, message: "商品库存不能为空", trigger: "blur" }
],
price: [
{ required: true, message: "商品价格不能为空", trigger: "blur" }
],
purchasePrice: [
{ required: true, message: "商品进价不能为空", trigger: "blur" }
],
sellingPrice: [
{ required: true, message: "商品售价不能为空", trigger: "blur" }
],
image: [
{ required: true, message: "规格图片不能为空", trigger: "blur" }
],
number: [
{ required: true, message: "编号不能为空", trigger: "blur" }
],
createBy: [
{ required: true, message: "创建人不能为空", trigger: "blur" }
],
createTime: [
{ required: true, message: "创建时间不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询商品SKU列表 */
getList() {
this.loading = true;
listSku(this.queryParams).then(response => {
this.skuList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productId: null,
sku: null,
stock: null,
price: null,
purchasePrice: null,
sellingPrice: null,
image: null,
number: null,
weight: null,
volume: null,
revision: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加商品SKU";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getSku(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改商品SKU";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateSku(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addSku(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除商品SKU编号为"' + ids + '"的数据项?').then(function() {
return delSku(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('product/sku/export', {
...this.queryParams
}, `sku_${new Date().getTime()}.xlsx`)
}
}
};
</script>