|
@@ -5,13 +5,13 @@
|
|
|
</h2>
|
|
|
<div class="m-core">
|
|
|
<el-button class="btn-primary" @click="onShopOperation('create')" v-permission="'/shopOperation'">添加</el-button>
|
|
|
- <el-upload v-permission="'import/goods'" style="display: inline-block;" action="/api-web/import/goods"
|
|
|
+ <el-upload v-permission="'import/goods'" style="display: inline-block; margin: 0 10px;" action="/api-web/import/goods"
|
|
|
:show-file-list="false" :before-upload="beforeUpload" accept=".xlsx,.xls" :headers="headers" :on-error="handleError"
|
|
|
:on-success="handleSuccess">
|
|
|
<el-button class="btn-primary">商品导入</el-button>
|
|
|
</el-upload>
|
|
|
<el-button class="btn-primary" @click="onDownload" v-permission="'import/downloadTemplate'">下载模板</el-button>
|
|
|
- <el-button class="btn-primary">添加组合商品</el-button>
|
|
|
+ <el-button class="btn-primary" @click="routeShopStatus = true">添加组合商品</el-button>
|
|
|
<!-- 搜索类型 -->
|
|
|
<el-form :inline="true" class="searchForm" v-model.trim="searchForm">
|
|
|
<el-form-item>
|
|
@@ -35,8 +35,8 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-date-picker v-model.trim="orderDate" style="width:410px;" type="daterange" value-format="yyyy-MM-dd"
|
|
|
- @change="searchOrderDate" range-separator="至" :picker-options="{ firstDayOfWeek: 1 }"
|
|
|
- start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
|
|
+ @change="searchOrderDate" range-separator="至" :picker-options="{ firstDayOfWeek: 1 }" start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"></el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button type="danger" @click="getList">搜索</el-button>
|
|
@@ -81,15 +81,18 @@
|
|
|
<el-table-column align='center' prop="taxStockCount" label="税务库存">
|
|
|
</el-table-column>
|
|
|
<el-table-column align='center' prop="stockType" label="库存类型">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{ scope.row.stockType | stockTypeStatus }}
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
<el-table-column align='center' prop="marketPrice" label="商品价格(元)">
|
|
|
<template slot-scope="scope">
|
|
|
- {{scope.row.marketPrice|moneyFormat}}
|
|
|
+ {{scope.row.marketPrice|moneyFormat}}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column align='center' prop="groupPurchasePrice" label="商品团购价(元)">
|
|
|
<template slot-scope="scope">
|
|
|
- {{scope.row.groupPurchasePrice|moneyFormat}}
|
|
|
+ {{scope.row.groupPurchasePrice|moneyFormat}}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column align='center' cell-style="padding: 0" label="商品缩略图">
|
|
@@ -126,13 +129,89 @@
|
|
|
@pagination="getList" />
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
+ <el-dialog :title="isAdd?'添加组合商品':'查看组合商品'" destroy-on-close :visible.sync="routeShopStatus" @close="onFormClose('ruleForm')"
|
|
|
+ width="600px">
|
|
|
+ <el-form :model="form" :rules="rules" ref="ruleForm">
|
|
|
+ <el-form-item label="商品名称" prop="name" :label-width="formLabelWidth">
|
|
|
+ <el-input placeholder="请输入商品名称" type="text" :disabled="!isAdd" v-model.trim="form.name"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="货号" prop="sn" :label-width="formLabelWidth">
|
|
|
+ <el-input placeholder="请输入货号户" type="text" :disabled="!isAdd" v-model.trim="form.sn"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="品牌" prop="brand" :label-width="formLabelWidth">
|
|
|
+ <el-input v-model.trim="form.brand" placeholder="请输入品牌"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品类型" prop="type" :label-width="formLabelWidth">
|
|
|
+ <el-select v-model.trim="form.type" placeholder="请选择商品类型">
|
|
|
+ <el-option v-for="(item, index) in goodsType" :key="index" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品分类" prop="goodsCategoryId" :label-width="formLabelWidth">
|
|
|
+ <el-select v-model.trim="form.goodsCategoryId" placeholder="请选择商品分类" filterable>
|
|
|
+ <el-option v-for="item in categoryList" :key="item.value" :label="item.label" :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品型号" prop="specification" :label-width="formLabelWidth">
|
|
|
+ <el-input v-model.trim="form.specification" placeholder="请输入商品型号"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <div v-for="(goodsList, index) in form.goodsList" :key="index">
|
|
|
+ <el-form-item :label="'商品' + (index + 1)" :label-width="formLabelWidth" style="display: inline-block;" :prop="'goodsList.' + index + '.id'"
|
|
|
+ :rules="[{ required: true, message: '请选择商品', trigger: 'change' }]">
|
|
|
+ <el-select v-model.trim="goodsList.id" :disabled="!isAdd" placeholder="请选择商品">
|
|
|
+ <el-option v-for="(item,index) in goodsTree" :key="index" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-button icon="el-icon-minus" :disabled="!isAdd" v-if="form.goodsList.length > 1" @click.prevent="removeGoodsList(goodsList)"
|
|
|
+ circle></el-button>
|
|
|
+ <el-button icon="el-icon-plus" :disabled="!isAdd" @click.prevent="addGoodsList" circle style="margin-left: 5px;"></el-button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-form-item label="商品价格" prop="marketPrice" :label-width="formLabelWidth">
|
|
|
+ <el-input type="number" placeholder="请输入商品价格" @mousewheel.native.prevent v-model.trim="form.marketPrice"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品团购价" prop="groupPurchasePrice" :label-width="formLabelWidth">
|
|
|
+ <el-input type="number" placeholder="请输入商品团购价" @mousewheel.native.prevent v-model.trim="form.groupPurchasePrice"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否APP展示" prop="clientShow" :label-width="formLabelWidth">
|
|
|
+ <el-select v-model="form.clientShow" placeholder="请选择是否APP展示">
|
|
|
+ <el-option label="是" :value="1"></el-option>
|
|
|
+ <el-option label="否" :value="0"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否库存预警" prop="stockWarning" :label-width="formLabelWidth">
|
|
|
+ <el-select v-model="form.stockWarning" placeholder="请选择是否库存预警">
|
|
|
+ <el-option label="是" :value="1"></el-option>
|
|
|
+ <el-option label="否" :value="0"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品图片" prop="image" :label-width="formLabelWidth">
|
|
|
+ <upload v-model="form.image"></upload>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="商品描述" prop="brief" :label-width="formLabelWidth">
|
|
|
+ <el-input type="textarea" v-model.trim="form.brief"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="商品详情" prop="desc" :label-width="formLabelWidth">
|
|
|
+ <el-input type="textarea" v-model.trim="form.desc"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="routeShopStatus = false">取 消</el-button>
|
|
|
+ <el-button @click="onShopSubmit('ruleForm')" type="primary">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
import pagination from '@/components/Pagination/index'
|
|
|
+ import Upload from '@/components/Upload/index'
|
|
|
import {
|
|
|
categoryListTree,
|
|
|
goodsQuery,
|
|
|
+ goodsAdd,
|
|
|
goodsUpdate,
|
|
|
goodsDelete
|
|
|
} from '@/api/businessManager'
|
|
@@ -148,10 +227,31 @@
|
|
|
goodsType
|
|
|
} from '@/utils/searchArray'
|
|
|
import load from '@/utils/loading'
|
|
|
+ let validPrice = (rule, value, callback) => {
|
|
|
+ if (value == '' && typeof value == 'string' || value == null) {
|
|
|
+ callback(new Error('请输入金额'))
|
|
|
+ } else if (value < 0) {
|
|
|
+ callback(new Error('输入金额必须大于或等于0'))
|
|
|
+ } else if (value >= 100000) {
|
|
|
+ callback(new Error('输入金额必须小于100000'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let validStock = (rule, value, callback) => {
|
|
|
+ if (value == '' && typeof value == 'string' || value == null) {
|
|
|
+ callback(new Error('请输入库存'))
|
|
|
+ } else if (value < 0) {
|
|
|
+ callback(new Error('库存数量必须大于或等于0'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
export default {
|
|
|
components: {
|
|
|
pagination,
|
|
|
- Tooltip
|
|
|
+ Tooltip,
|
|
|
+ Upload
|
|
|
},
|
|
|
name: 'shopList',
|
|
|
data() {
|
|
@@ -181,6 +281,141 @@
|
|
|
total: 0, // 总条数
|
|
|
page_size: [10, 20, 40, 50] // 选择限制显示条数
|
|
|
},
|
|
|
+ formLabelWidth: "120px",
|
|
|
+ routeShopStatus: false,
|
|
|
+ isAdd: true,
|
|
|
+ form: {
|
|
|
+ sn: null,
|
|
|
+ brand: null,
|
|
|
+ supplyChannel: null,
|
|
|
+ name: null,
|
|
|
+ type: null,
|
|
|
+ goodsCategoryId: null,
|
|
|
+ specification: null,
|
|
|
+ stockCount: null,
|
|
|
+ taxStockCount: null,
|
|
|
+ stockType: null,
|
|
|
+ marketPrice: null,
|
|
|
+ groupPurchasePrice: null,
|
|
|
+ clientShow: null,
|
|
|
+ stockWarning: null,
|
|
|
+ image: null,
|
|
|
+ complementGoodsIdList: null,
|
|
|
+ goodsList: [{
|
|
|
+ id: null
|
|
|
+ }],
|
|
|
+ brief: null,
|
|
|
+ desc: null
|
|
|
+ },
|
|
|
+ goodsTree: [], // 选择商品列表
|
|
|
+ rules: {
|
|
|
+ sn: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入商品货号',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ brand: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入品牌',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ min: 2,
|
|
|
+ max: 30,
|
|
|
+ message: '长度在 2 到 30 个字符',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ supplyChannel: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入备查货号',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ name: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入商品名称',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ min: 2,
|
|
|
+ max: 30,
|
|
|
+ message: '长度在 2 到 30 个字符',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ type: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择商品分类',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ goodsCategoryId: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择商品类型',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ specification: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入商品型号',
|
|
|
+ trigger: 'blur'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ min: 2,
|
|
|
+ max: 30,
|
|
|
+ message: '长度在 2 到 30 个字符',
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ stockCount: [{
|
|
|
+ required: true,
|
|
|
+ validator: validStock,
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ taxStockCount: [{
|
|
|
+ required: true,
|
|
|
+ validator: validStock,
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ stockType: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择库存类型',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ marketPrice: [{
|
|
|
+ required: true,
|
|
|
+ validator: validPrice,
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ groupPurchasePrice: [{
|
|
|
+ required: true,
|
|
|
+ validator: validPrice,
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ clientShow: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择是否APP展示',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ stockWarning: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择是否库存预警',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ image: [{
|
|
|
+ required: true,
|
|
|
+ message: '请选择图片',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ brief: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入商品描述',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ desc: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入商品详情',
|
|
|
+ trigger: 'blur'
|
|
|
+ }]
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
@@ -203,13 +438,14 @@
|
|
|
JSON.parse(this.$route.query.pageInfo);
|
|
|
}
|
|
|
this.getList()
|
|
|
- this.getCatagory()
|
|
|
+ this.getCategory()
|
|
|
},
|
|
|
- getCatagory() {
|
|
|
- categoryListTree({
|
|
|
+ getCategory() {
|
|
|
+ let params = {
|
|
|
delFlag: 0,
|
|
|
rows: 9999
|
|
|
- }).then(res => {
|
|
|
+ }
|
|
|
+ categoryListTree(params).then(res => {
|
|
|
let result = res.data
|
|
|
if (res.code == 200) {
|
|
|
let tempArray = []
|
|
@@ -243,7 +479,7 @@
|
|
|
}).catch(() => {})
|
|
|
|
|
|
},
|
|
|
- searchOrderDate (value) {
|
|
|
+ searchOrderDate(value) {
|
|
|
if (value) {
|
|
|
this.searchForm.startTime = value[0];
|
|
|
this.searchForm.endTime = value[1];
|
|
@@ -274,15 +510,15 @@
|
|
|
})
|
|
|
},
|
|
|
onReset() { // 重置
|
|
|
- this.searchForm = {
|
|
|
- search: null,
|
|
|
- status: null,
|
|
|
- type: null,
|
|
|
- goodsCategoryId: null,
|
|
|
- startTime: null,
|
|
|
- endTime: null
|
|
|
- }
|
|
|
- this.getList()
|
|
|
+ this.searchForm = {
|
|
|
+ search: null,
|
|
|
+ status: null,
|
|
|
+ type: null,
|
|
|
+ goodsCategoryId: null,
|
|
|
+ startTime: null,
|
|
|
+ endTime: null
|
|
|
+ }
|
|
|
+ this.getList()
|
|
|
},
|
|
|
onShopOperation(type, row) { // 添加或修改
|
|
|
let params = {
|
|
@@ -335,7 +571,53 @@
|
|
|
},
|
|
|
fileName: '商品导入模板.xlsx'
|
|
|
})
|
|
|
- }
|
|
|
+ },
|
|
|
+ onFormClose(formName) {
|
|
|
+ // 关闭弹窗重置验证
|
|
|
+ this.$refs[formName].resetFields();
|
|
|
+ },
|
|
|
+ removeGoodsList(item) {
|
|
|
+ const index = this.form.goodsList.indexOf(item)
|
|
|
+ if (index !== -1) {
|
|
|
+ this.form.goodsList.splice(index, 1)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ addGoodsList() {
|
|
|
+ this.form.goodsList.push({
|
|
|
+ id: null,
|
|
|
+ number: null
|
|
|
+ })
|
|
|
+ },
|
|
|
+ onShopSubmit(formName) {
|
|
|
+ this.$refs[formName].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ console.log(this.form)
|
|
|
+ // if (this.pageType == 'create') {
|
|
|
+ // if (this.form.id) { // 判断有没有Id,如果有则删除
|
|
|
+ // delete this.form.id
|
|
|
+ // }
|
|
|
+ // this.form.status = 'YES' // 默认上架
|
|
|
+ // goodsAdd(this.form).then(res => {
|
|
|
+ // this.messageTips('添加', res)
|
|
|
+ // })
|
|
|
+ // } else if (this.pageType == 'update') {
|
|
|
+ // goodsUpdate(this.form).then(res => {
|
|
|
+ // this.messageTips('修改', res)
|
|
|
+ // })
|
|
|
+ // }
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ messageTips(title, res) {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.$message.success(title + '成功')
|
|
|
+ this.getList()
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.msg)
|
|
|
+ }
|
|
|
+ },
|
|
|
}
|
|
|
}
|
|
|
</script>
|