提交 1eb24e70 authored 作者: 王鹏飞's avatar 王鹏飞

update

上级 d287bf9d
......@@ -12,13 +12,18 @@ export function getGoodsList(data) {
export function addGoods(data) {
return httpRequest.post('/api/shop/commodity/spu/add', data)
}
/**
* 更新商品
*/
export function updateGoods(data) {
return httpRequest.post('/api/shop/commodity/spu/modify', data)
}
/**
* 删除商品
*/
export function deleteGoods(data) {
return httpRequest.post('/api/shop/commodity/spu/delete', data)
}
/**
* 获取商品分组
......@@ -51,6 +56,19 @@ export function deleteGroup(data) {
export function getSkuNameList(data) {
return httpRequest.post('/api/shop/spec/search', data)
}
/**
* 创建商品规格
*/
export function addSku(data) {
return httpRequest.post('/api/shop/spec/add', data)
}
/**
* 删除商品规格
*/
export function deleteSku(data) {
return httpRequest.post('/api/shop/spec/delete', data)
}
/**
* 获取商品规格值
*/
......@@ -58,14 +76,14 @@ export function getSkuValueList(data) {
return httpRequest.post('/api/shop/spec/value/search', data)
}
/**
* 创建商品规格
* 创建商品规格
*/
export function addSku(data) {
return httpRequest.post('/api/shop/spec/add', data)
export function addSkuValue(data) {
return httpRequest.post('/api/shop/spec/value/add', data)
}
/**
* 创建商品规格
* 删除商品规格值
*/
export function addSkuValue(data) {
return httpRequest.post('/api/shop/spec/value/add', data)
export function deleteSkuValue(data) {
return httpRequest.post('/api/shop/spec/value/delete', data)
}
import httpRequest from '@/utils/axios'
/**
* 获取商品列表
* 获取订单列表
*/
export function getGoodsList(data) {
return httpRequest.post('/api/shop/commodity/spu/search', data)
export function getOrderList(data) {
return httpRequest.post('/api/shop/order/search', data)
}
/**
* 创建商品
* 创建订单
*/
export function addGoods(data) {
return httpRequest.post('/api/shop/commodity/spu/add', data)
}
/**
* 更新商品
*/
export function updateGoods(data) {
return httpRequest.post('/api/shop/commodity/spu/modify', data)
export function addOrder(data) {
return httpRequest.post('/api/shop/order/add', data)
}
......@@ -13,7 +13,12 @@ export function getShopList(data) {
export function addShop(data) {
return httpRequest.post('/api/shop/shop/add', data)
}
/**
* 更新店铺
*/
export function updateShop(data) {
return httpRequest.post('/api/shop/shop/modify', data)
}
/**
* 删除店铺
*/
......
......@@ -140,6 +140,10 @@ export default {
this.page.total = parseInt(pageInfo.total_number || '')
this.dataList = callback ? callback(data) : data
})
.catch(() => {
this.page.total = 0
this.dataList = []
})
.finally(() => {
this.loading = false
})
......
<template>
<div class="upload-wrapper">
<div class="app-upload">
<el-upload
class="avatar-uploader"
action="https://webapp-pub.oss-cn-beijing.aliyuncs.com"
type="drag"
:before-upload="beforeUpload"
:on-success="handleSuccess"
:on-preview="handlePreview"
:data="data"
:file-list="fileList"
v-bind="$attrs"
v-on="$listeners"
>
<div v-if="value" class="avatar"><img :src="value" /></div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
<slot>
<i class="el-icon-plus"></i>
</slot>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="previewFile.url" />
</el-dialog>
</div>
</template>
<script>
......@@ -21,12 +26,34 @@ import md5 from 'blueimp-md5'
export default {
name: 'AppUpload',
props: {
value: { type: String },
value: { type: [String, Array] },
prefix: { type: String, default: 'upload/shop-admin/' }
},
data() {
return {
data: {}
data: {}, // 请求参数
fileList: [], // 文件列表
dialogVisible: false,
previewFile: {}
}
},
watch: {
value: {
immediate: true,
handler(value) {
if (!value) {
return
}
let fileList = []
if (Array.isArray(value)) {
fileList = value.map(item => {
return { name: item.name || item, url: item.url || item }
})
} else {
fileList.push({ name: '附件', url: value })
}
this.fileList = [...fileList]
}
}
},
methods: {
......@@ -38,7 +65,7 @@ export default {
.then(response => {
const { accessid, policy, signature, host } = response
this.data = { key, OSSAccessKeyId: accessid, policy, signature, success_action_status: '200' }
file.src = `${host}/${key}`
file.url = `${host}/${key}`
resolve(true)
})
.catch(err => {
......@@ -48,45 +75,47 @@ export default {
})
},
handleSuccess(response, file) {
this.$emit('input', file.raw.src)
if (Array.isArray(this.value)) {
this.fileList.push({ name: file.name, url: file.raw.url })
this.$emit('input', this.fileList)
} else {
this.fileList = [file.raw.url]
this.$emit('input', file.raw.url)
}
},
// 删除
handleRemove(index) {
this.fileList.splice(index, 1)
this.$emit('input', Array.isArray(this.value) ? this.fileList : '')
},
// 预览
handlePreview(file) {
this.previewFile = file
this.dialogVisible = true
}
}
}
</script>
<style>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
.el-upload-list--picture-card .el-upload-list__item-thumbnail {
object-fit: cover;
}
.el-upload-list__item {
transition: none !important;
}
/* .el-upload--text {
background-color: #fbfdff;
border: 1px dashed #c0ccda;
border-radius: 6px;
box-sizing: border-box;
width: 148px;
height: 148px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #20a0ff;
line-height: 146px;
vertical-align: top;
}
.avatar-uploader-icon {
.el-upload--text i {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
.avatar img {
max-width: 100%;
max-height: 100%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
} */
</style>
<template>
<div class="goods-message">
<message-item v-for="(item, index) in list" :data="item" :key="index" @remove="handleRemove(index)"></message-item>
<el-button type="text" @click="handleAdd">
<i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;添加字段
</el-button>
</div>
</template>
<script>
import MessageItem from './messageItem'
export default {
props: { data: { type: Array, default: () => [] } },
components: { MessageItem },
data() {
return {
list: [{ filed: '手机号', type: 'text', required: true }]
}
},
methods: {
handleAdd() {
this.list.push({ filed: '留言' + (this.list.length + 1), type: 'text', required: false })
},
handleRemove(index) {
this.list.splice(index, 1)
}
}
}
</script>
<style>
</style>
<template>
<div class="goods-message-item">
<el-input v-model="data.filed" style="width: 200px" />
<el-select v-model="data.type" style="width: 120px; margin: 0 20px">
<el-option v-for="item in list" :label="item.name" :value="item.type" :key="item.type"></el-option>
</el-select>
<el-checkbox v-model="data.multiple" v-if="data.type === 'text'">多行</el-checkbox>
<el-checkbox v-model="data.datetime" v-if="data.type === 'time'">含日期</el-checkbox>
<el-checkbox v-model="data.required">必填</el-checkbox>
<el-button type="text" style="margin-left: 20px" @click="$emit('remove')">删除</el-button>
</div>
</template>
<script>
export default {
props: { data: { type: Object, default: () => [] } },
data() {
return {
list: [
{ type: 'text', name: '文本格式' },
{ type: 'number', name: '数字格式' },
{ type: 'email', name: '邮件' },
{ type: 'date', name: '日期' },
{ type: 'time', name: '时间' },
{ type: 'id', name: '身份证号' },
{ type: 'image', name: '图片' },
{ type: 'phone', name: '手机号' }
]
}
},
methods: {
handleAdd() {}
}
}
</script>
<style lang="scss">
.goods-message-item {
display: flex;
align-items: center;
}
.goods-message-item + .goods-message-item {
margin-top: 10px;
}
</style>
......@@ -27,25 +27,7 @@ export default {
},
data() {
return {
skuNameList: [
{
spec_id: '1',
spec_name: '颜色',
spec_values: [
{ spec_value_id: '1', spec_value: '红' },
{ spec_value_id: '2', spec_value: '黄' },
{ spec_value_id: '3', spec_value: '蓝' }
]
},
{
spec_id: '2',
spec_name: '大小',
spec_values: [
{ spec_value_id: '1', spec_value: 'L' },
{ spec_value_id: '2', spec_value: 'M' }
]
}
] // 规格名称列表
skuNameList: [] // 规格名称列表
}
},
computed: {
......
......@@ -40,8 +40,8 @@
<span>批量设置:</span>
<div class="batch-buttons" v-if="!showBatchInput">
<el-button type="text" @click="batchUpdate('price')">价格</el-button>
<el-button type="text" @click="batchUpdate('stock')">库存</el-button>
<el-button type="text" @click="batchUpdate('mark_price')">划线价</el-button>
<el-button type="text" @click="batchUpdate('stock')">库存</el-button>
<el-button type="text" @click="batchUpdate('prime_price')">成本价</el-button>
</div>
<div class="batch-input" v-else>
......@@ -93,7 +93,6 @@ export default {
skuValueList: {
handler: function (newValue) {
newValue.forEach((item, index) => {
console.log(item)
// 规格
const values = item.reduce(
(result, item) => {
......
......@@ -50,7 +50,7 @@ export default {
children: [
{ name: '店铺信息', path: '/setting/info' },
{ name: '联系我们', path: '/setting/contact' },
{ name: '通用设置', path: '/setting/base' },
{ name: '通用设置', path: '/setting/general' },
{ name: '商品设置', path: '/setting/goods' }
]
}
......
......@@ -39,7 +39,7 @@
</template>
<script>
import { addSkuValue } from '@/api/goods'
import { addSkuValue, deleteSku, deleteSkuValue } from '@/api/goods'
export default {
props: {
......@@ -82,9 +82,21 @@ export default {
})
},
// 删除规格
removeSku(item) {},
removeSku(data) {
deleteSku({ shop_id: this.shopId, spec_id: data.spec_id }).then(response => {
this.$message({ type: 'success', message: '删除成功' })
this.$emit('update')
})
},
// 删除规格值
removeSkuValue(item) {}
removeSkuValue(data) {
deleteSkuValue({ shop_id: this.shopId, spec_id: this.data.spec_id, spec_value_id: data.spec_value_id }).then(
response => {
this.$message({ type: 'success', message: '删除成功' })
this.$emit('update')
}
)
}
}
}
</script>
......
......@@ -3,7 +3,7 @@
<el-form :model="ruleForm" :rules="rules" label-position="top" ref="ruleForm" @submit.native.prevent>
<app-card title="商品类型">
<el-radio-group v-model="ruleForm.category_id">
<el-radio :label="item.id" border v-for="item in goodsType" :key="item.id">{{ item.name }}</el-radio>
<el-radio :label="item.id" border v-for="item in categoryList" :key="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</app-card>
......@@ -26,11 +26,13 @@
<p class="form-tips">在商品详情页标题下面展示卖点信息,建议60字以内</p>
</el-form-item>
<el-form-item label="商品图片" prop="chart_oss">
<app-upload v-model="ruleForm.chart_oss"></app-upload>
<app-upload v-model="ruleForm.chart_oss" multiple list-type="picture-card" accept="image/*"></app-upload>
<p class="form-tips">建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张</p>
</el-form-item>
<el-form-item label="主图视频" prop="main_chart_oss">
<app-upload v-model="ruleForm.main_chart_oss"></app-upload>
<app-upload v-model="ruleForm.main_chart_oss" accept="video/*">
<el-button size="small" type="primary">点击上传</el-button>
</app-upload>
<p class="form-tips">
添加主图视频可提升成交转化,有利于获取更多新流量;建议视频突出商品核心卖点,时长 9-30 秒,宽高比 16:9
</p>
......@@ -55,20 +57,35 @@
</el-form-item>
</app-card>
<app-card title="其他信息">
<el-form-item label="留言" prop="sales_type">
<message></message>
</el-form-item>
<el-form-item label="开售方式" prop="sales_type">
<el-radio-group v-model="ruleForm.sales_type">
<el-radio label="1">立即开售</el-radio>
<el-radio label="2">定时开售</el-radio>
<el-radio label="3">放入仓库</el-radio>
<el-radio label="2">定时开售</el-radio>
<el-date-picker
v-model="ruleForm.sales_time"
type="datetime"
size="mini"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择开售时间"
v-if="ruleForm.sales_type === '2'"
/>
</el-radio-group>
<el-input v-model="ruleForm.sales_time" v-if="ruleForm.sales_type === '2'" />
</el-form-item>
<el-form-item label="立即购买按钮" prop="buy_button_text">
<el-radio-group v-model="ruleForm.buy_button_text">
<el-form-item label="购买按钮" prop="buy_button_text">
<el-radio-group v-model="buyButtonTextRadio" @change="onBuyButtonTextRadioChange">
<el-radio label="1">默认名称</el-radio>
<el-radio label="2">自定义名称</el-radio>
<el-input
v-model="ruleForm.buy_button_text"
v-if="buyButtonTextRadio === '2'"
size="mini"
class="buy-button-input"
/>
</el-radio-group>
<el-input v-model="ruleForm.buy_button_text" />
</el-form-item>
<el-form-item label="售后服务" prop="after_sales_mode">
<el-radio-group v-model="ruleForm.after_sales_mode">
......@@ -80,7 +97,7 @@
<div class="form-footer">
<div class="inner">
<el-button type="primary" @click="onSubmit">保存并查看</el-button>
<el-button @click="onCancel">下一步</el-button>
<el-button @click="onSubmit">下一步</el-button>
</div>
</div>
</el-form>
......@@ -91,49 +108,42 @@
// 组件
import AppCard from '@/components/base/card'
import AppUpload from '@/components/base/upload'
import sku from '@/components/goods/sku'
import skuView from '@/components/goods/skuView'
import Sku from '@/components/goods/sku'
import SkuView from '@/components/goods/skuView'
import Message from '@/components/goods/message'
// 接口
import { addGoods, updateGoods, getGoodsList } from '@/api/goods'
export default {
components: { AppCard, AppUpload, sku, skuView },
components: { AppCard, AppUpload, Sku, SkuView, Message },
props: { isEdit: { type: Boolean, default: false } },
data() {
return {
pid: '', // ID
loading: false, // 加载中
isEdit: false, // 是否修改
goodsType: [{ id: '1', name: '虚拟商品' }], // 商品类型
goodsGroup: [], // 商品分组
goodsGroupValue: [], // 商品分组value
disabledInput: false,
categoryList: [{ id: '1', name: '虚拟商品' }], // 商品类型
ruleForm: {
category_id: '1',
spu_name: '标题',
describe: '分享描述',
charact: '商品卖点',
chart_oss: 'https://webapp-pub.ezijing.com/upload/shop-admin/aafa464602ae315e56534e81b687522b.jpg',
main_chart_oss: 'https://webapp-pub.ezijing.com/upload/shop-admin/95500a48092218bb7805eb31701ce209.jpg',
group_id: '6800703015822032896',
startTime: null,
sales_type: '1',
buy_button_text: '1',
goodStockList: [], // 规格明细
spu_context: '',
skuKeyValueList: [],
stock_sub_method: '2',
after_sales_mode: '2',
category_id: '1', // 商品类型
spu_name: '', // 商品标题
describe: '', // 分享描述
charact: '', // 商品卖点
chart_oss: [],
main_chart_oss: '',
group_id: '', // 商品分组
sales_type: '1', // 开售方式 1、立即开售 2、定时开售 3、放入仓库
buy_button_text: '立即购买', // 购买按钮文字
spu_context: '', // 商品详情
stock_sub_method: '', // 库存扣减方式
after_sales_mode: '2', // 售后服务方式 1、支持买家申请退款 2、不支持买家申请退款
app_button_text: '',
sales_time: '',
buy_limit: '1'
sales_time: '', // 开售时间
buy_limit: '', // 限购
goodStockList: [], // 规格明细
skuKeyValueList: []
},
buyButtonTextRadio: '1',
rules: {
spu_name: [{ required: true, message: '商品名称不可为空', trigger: 'blur' }]
// goodPhotoList: [{ required: true, message: '最少需要添加一张商品图', trigger: 'blur' }],
// sellPrice: [{ required: true, message: '请输入价格', trigger: 'blur' }],
// balanceCount: [{ required: true, message: '请输入库存', trigger: 'blur' }],
// startTime: [{ required: true, message: '请选择售卖开始时间', trigger: 'blur' }],
// endTime: [{ required: true, message: '请选择售卖结束时间', trigger: 'blur' }]
spu_name: [{ required: true, message: '商品名称不可为空', trigger: 'blur' }],
chart_oss: [{ required: true, message: '最少需要添加一张商品图', trigger: 'blur' }]
}
}
},
......@@ -143,103 +153,54 @@ export default {
},
groupList() {
return this.$store.state.groups
}
},
watch: {
// 商品分组value
goodsGroupValue(ids) {
if (this.goodsGroup && this.goodsGroup.length) {
this.ruleForm.goodGroupToList = ids.map(id => {
return this.goodsGroup.find(item => item.id === id)
})
}
},
// 商品规格
'ruleForm.skuKeyValueList': function (value) {
if (value && value.length) {
this.disabledInput = true
} else {
this.disabledInput = false
}
pid() {
return this.$route.params.id || this.$route.query.id
}
},
methods: {
// 初始化
init() {
this.pid = this.$route.params.id
this.isEdit = !!this.pid
// 获取商品分组
this.$store.dispatch('getGroups')
if (this.isEdit) {
// 修改渲染
// 商品渲染
if (this.pid) {
this.editRender()
} else {
const query = this.$route.query
if (query.params) {
try {
const params = JSON.parse(decodeURIComponent(query.params))
Object.assign(this.ruleForm, params)
if (params.goodTypeId === '21') {
this.isTicket = true
}
} catch (error) {
console.log(error)
}
}
this.loading = false
}
// 获取商品分组
this.$store.dispatch('getGroups')
},
// 修改渲染
editRender(data) {
// 请求接口
getGoodsList({ id: this.pid }).then(response => {
const data = response.data
editRender() {
this.loading = true
getGoodsList({ shop_id: this.shopId, spu_id: this.pid }).then(response => {
const [data] = response.data
Object.assign(this.ruleForm, data)
// 商品分组
this.goodsGroupValue = data.goodGroupToList.map(item => item.id)
// 隐藏加载动画
// 图片
try {
this.ruleForm.chart_oss = JSON.parse(data.chart_oss)
} catch (error) {}
// 购买按钮
this.buyButtonTextRadio = data.buy_button_text === '立即购买' ? '1' : '2'
this.loading = false
})
},
// 确定
onSubmit() {
let isPass = true
// 基本信息表单校验
this.$refs.ruleForm.validate(valid => {
if (!valid) {
isPass = false
return false
}
})
// 规格明细校验
// if (
// isPass &&
// this.ruleForm.skuKeyValueList &&
// this.ruleForm.skuKeyValueList.length &&
// this.ruleForm.goodStockList &&
// this.ruleForm.goodStockList.length
// ) {
// this.$lodash.forEach(this.ruleForm.goodStockList, item => {
// if (isNaN(parseFloat(item.sellPrice)) || isNaN(parseFloat(item.balanceCount))) {
// this.$message({ message: '请完善规格明细表单', type: 'error' })
// isPass = false
// return false
// }
// })
// if (!isPass) {
// return false
// }
// }
const params = Object.assign({ shop_id: this.shopId }, this.ruleForm)
params.spec = JSON.stringify(params.goodStockList)
if (isPass) {
this.$refs.ruleForm.validate().then(valid => {
// 规格明细校验
// if (this.ruleForm.goodStockList && this.ruleForm.goodStockList.length) {
// this.$lodash.forEach(this.ruleForm.goodStockList, item => {
// if (isNaN(parseFloat(item.sellPrice)) || isNaN(parseFloat(item.balanceCount))) {
// this.$message({ message: '请完善规格明细表单', type: 'error' })
// return false
// }
// })
// }
const params = Object.assign({ shop_id: this.shopId }, this.ruleForm)
params.chart_oss = JSON.stringify(params.chart_oss)
params.spec = JSON.stringify(params.goodStockList)
this.isEdit ? this.onEdit(params) : this.onAdd(params)
} else {
this.$message({ message: '请完善表单信息', type: 'error' })
}
})
},
// 取消
onCancel() {
......@@ -275,12 +236,10 @@ export default {
this.onSuccess(response.data)
})
},
imageListUploaded(file) {
this.ruleForm.goodPhotoList.push(file)
},
imageListRemove(url) {
const index = this.ruleForm.goodPhotoList.findIndex(item => item.imageUrl === url)
this.ruleForm.goodPhotoList.splice(index, 1)
onBuyButtonTextRadioChange(value) {
if (value === '1') {
this.ruleForm.buy_button_text = '立即购买'
}
}
},
beforeMount() {
......@@ -311,4 +270,9 @@ export default {
align-items: center;
}
}
.buy-button-input {
display: inline-block;
width: 220px;
}
</style>
<template>
<app-card>
<!--列表-->
<table-list v-bind="tableOptions" ref="list">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane :label="item.label" :name="item.name" v-for="item in tabList" :key="item.name"></el-tab-pane>
......@@ -12,6 +11,9 @@
</template>
<template v-slot:table-x="{ row }">
<el-button type="text" @click="handleUpdate(row)">编辑</el-button>
<!-- <el-popconfirm confirm-button-text="确认" title="确定要删除该商品吗?" @confirm="handleRemove(row)">
<el-button type="text" slot="reference">删除</el-button>
</el-popconfirm> -->
<el-button type="text" @click="handlePromote(row)">推广</el-button>
<el-button type="text" @click="handleCopy(row)">复制</el-button>
</template>
......@@ -24,18 +26,18 @@
import TableList from '@/components/base/tableList'
import AppCard from '@/components/base/card'
// 接口
import { getGoodsList } from '@/api/goods'
import { getGoodsList, deleteGoods } from '@/api/goods'
export default {
components: { AppCard, TableList },
data() {
return {
activeName: '1',
activeName: '0',
tabList: [
{ label: '全部', name: '1' },
{ label: '全部', name: '0' },
{ label: '销售中', name: '2' },
{ label: '已售罄', name: '3' },
{ label: '仓库中', name: '4' }
{ label: '仓库中', name: '1' }
]
}
},
......@@ -51,7 +53,8 @@ export default {
return {
remote: {
httpRequest: getGoodsList,
params: { shop_id: this.shopId, spu_id: '', spu_name: '', group_id: '' }
params: { shop_id: this.shopId, spu_id: '', spu_name: '', group_id: '' },
beforeRequest: this.beforeRequest
},
filters: [
{
......@@ -88,15 +91,29 @@ export default {
}
},
methods: {
beforeRequest(params) {
params.status = this.activeName === '0' ? '' : this.activeName
return params
},
handleClick() {
this.$refs.list.refetch(true)
},
// 编辑
handleUpdate() {},
handleUpdate(data) {
this.$router.push({ name: 'goodsEdit', params: { id: data.spu_id } })
},
// 删除
handleRemove(row) {
deleteGoods({ shop_id: this.shopId, spu_id: row.spu_id }).then(res => {
this.$refs.list.refetch()
})
},
// 推广
handlePromote() {},
handlePromote(data) {},
// 复制
handleCopy() {}
handleCopy(data) {
this.$router.push({ name: 'goodsAdd', query: { id: data.spu_id } })
}
},
beforeMount() {
// 获取商品分组
......
......@@ -10,6 +10,10 @@
<el-button type="primary">新增订单</el-button>
</router-link>
</template>
<template v-slot:table-price="{ row }">
<p>{{ row.product_price }}</p>
<p>{{ row.buy_count }}</p>
</template>
<template v-slot:table-x="{ row }">
<el-button type="text" @click="handleUpdate(row)">编辑</el-button>
<el-button type="text" @click="handlePromote(row)">推广</el-button>
......@@ -24,15 +28,15 @@
import TableList from '@/components/base/tableList'
import AppCard from '@/components/base/card'
// 接口
import { getGoodsList } from '@/api/goods'
import { getOrderList } from '@/api/order'
export default {
components: { AppCard, TableList },
data() {
return {
activeName: '1',
activeName: '0',
tabList: [
{ label: '全部', name: '1' },
{ label: '全部', name: '0' },
{ label: '代付款', name: '2' },
{ label: '待发货', name: '3' },
{ label: '已发货', name: '4' },
......@@ -47,8 +51,9 @@ export default {
tableOptions() {
return {
remote: {
httpRequest: getGoodsList,
params: { shop_id: this.$store.state.shopId }
httpRequest: getOrderList,
params: { shop_id: this.$store.state.shopId },
beforeRequest: this.beforeRequest
},
filters: [
{
......@@ -68,19 +73,23 @@ export default {
}
],
columns: [
{ label: '商品', prop: 'name' },
{ label: '单价(元)/数量', prop: 'sellPrice' },
{ label: '商品', prop: 'shop_name' },
{ label: '单价(元)/数量', prop: 'product_price', slots: 'table-price' },
{ label: '售后', prop: 'sellPrice' },
{ label: '买家 / 收货人', prop: 'balanceCount' },
{ label: '买家 / 收货人', prop: 'shipping_user' },
{ label: '配送方式', prop: 'sellCount' },
{ label: '实收金额(元)', prop: 'createTime' },
{ label: '订单状态', prop: 'createTime' },
{ label: '实收金额(元)', prop: 'payment_money' },
{ label: '订单状态', prop: 'order_status' },
{ label: '操作', slots: 'table-x' }
]
}
}
},
methods: {
beforeRequest(params) {
params.status = this.activeName === '0' ? '' : this.activeName
return params
},
handleClick() {
this.$refs.list.refetch(true)
},
......
<template>
<app-card>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" style="width: 400px">
<el-form-item label="客户电话" prop="tel">
<el-input v-model="ruleForm.tel"></el-input>
<el-form-item label="客户电话" prop="shop_tel">
<el-input v-model="ruleForm.shop_tel"></el-input>
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input v-model="ruleForm.address">
<el-form-item label="详细地址" prop="shop_address">
<el-input v-model="ruleForm.shop_address">
<template #append>
<el-button>搜索地图</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button>
</el-form-item>
</el-form>
</app-card>
</template>
<script>
import AppCard from '@/components/base/card'
import { updateShop } from '@/api/shop'
export default {
components: { AppCard },
data() {
return {
ruleForm: { tel: '', address: '' },
ruleForm: { shop_tel: '', shop_address: '' },
rules: {
tel: [{ required: true, message: '必填', trigger: 'blur' }],
address: [{ required: true, message: '必填', trigger: 'blur' }]
shop_tel: [{ required: true, message: '必填', trigger: 'blur' }],
shop_address: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
computed: {
shop() {
return this.$store.state.shop
}
},
watch: {
shop: {
immediate: true,
handler(data) {
this.ruleForm = Object.assign({}, data)
}
}
},
methods: {}
methods: {
onSubmit() {
this.$refs.ruleForm.validate().then(this.updateShop)
},
updateShop() {
updateShop(this.ruleForm).then(resp => {
this.$message({ type: 'success', message: '修改成功' })
this.dialogVisible = false
this.$store.dispatch('getShop')
})
}
}
}
</script>
......
<template>
<app-card>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
<el-form-item label="店铺有效期" prop="shop_name">
<el-date-picker
v-model="ruleForm.end_time"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择店铺有效期"
>
</el-date-picker>
</el-form-item>
</el-form>
</app-card>
</template>
<script>
import AppCard from '@/components/base/card'
import { updateShop } from '@/api/shop'
export default {
components: { AppCard },
data() {
return {
ruleForm: {
end_time: ''
},
rules: {
end_time: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
computed: {
shop() {
return this.$store.state.shop
}
},
watch: {
shop: {
immediate: true,
handler(data) {
this.ruleForm = Object.assign({}, data)
}
}
},
methods: {
onSubmit() {
this.$refs.ruleForm.validate().then(this.updateShop)
},
updateShop() {
updateShop(this.ruleForm).then(resp => {
this.$message({ type: 'success', message: '修改成功' })
this.$store.dispatch('getShop')
})
}
}
}
</script>
<style>
</style>
......@@ -12,7 +12,7 @@
<label class="label">创建时间:</label><span class="content">{{ shop.create_time }}</span>
</div>
<div class="item">
<label class="label">联系电话:</label><span class="content">{{ shop.tel }}</span>
<label class="label">联系电话:</label><span class="content">{{ shop.shop_tel }}</span>
</div>
</div>
</div>
......@@ -23,7 +23,7 @@
<el-input v-model="ruleForm.shop_name" placeholder="请输入店铺、品牌、机构的全称"></el-input>
</el-form-item>
<el-form-item label="店铺头像" prop="shop_logo">
<app-upload v-model="ruleForm.shop_logo"></app-upload>
<app-upload v-model="ruleForm.shop_logo" accept="image/*" :show-file-list="false"></app-upload>
</el-form-item>
<el-form-item label="店铺有效期" prop="end_time">
<el-date-picker
......@@ -52,7 +52,7 @@
<script>
import AppCard from '@/components/base/card'
import AppUpload from '@/components/base/upload'
import { updateShop } from '@/api/shop'
export default {
components: { AppCard, AppUpload },
data() {
......@@ -80,7 +80,13 @@ export default {
onSubmit() {
this.$refs.ruleForm.validate().then(this.updateShop)
},
updateShop() {}
updateShop() {
updateShop(this.ruleForm).then(resp => {
this.$message({ type: 'success', message: '修改成功' })
this.dialogVisible = false
this.$store.dispatch('getShop')
})
}
}
}
</script>
......
......@@ -38,13 +38,16 @@ export default [
meta: { title: '商品列表' }
},
{
name: 'goodsAdd',
path: 'add',
component: () => import(/* webpackChunkName: "goods" */ '@/pages/goods/goods/edit'),
meta: { title: '发布商品' }
},
{
name: 'goodsEdit',
path: 'edit/:id',
component: () => import(/* webpackChunkName: "goods" */ '@/pages/goods/goods/edit'),
props: { isEdit: true },
meta: { title: '编辑商品' }
},
{
......@@ -84,6 +87,11 @@ export default [
component: () => import(/* webpackChunkName: "setting" */ '@/pages/setting/info'),
meta: { title: '店铺信息' }
},
{
path: 'general',
component: () => import(/* webpackChunkName: "setting" */ '@/pages/setting/general'),
meta: { title: '通用设置' }
},
{
path: 'contact',
component: () => import(/* webpackChunkName: "setting" */ '@/pages/setting/contact'),
......
......@@ -35,7 +35,9 @@ httpRequest.interceptors.response.use(
function(response) {
const { data } = response
if (data.code) {
Message.error(data.msg || data.message)
if (![1010].includes(data.code)) {
Message.error(data.msg || data.message)
}
return Promise.reject(data)
}
return data
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论