提交 51b5c2e1 authored 作者: 王鹏飞's avatar 王鹏飞

update

上级 d7f11e78
import httpRequest from '@/utils/axios' import httpRequest from '@/utils/axios'
/**
* 获取订单搜索列表
*/
export function getOrderSearchList(data) {
return httpRequest.post('/api/shop/order/range/search', data)
}
/** /**
* 获取订单列表 * 获取订单列表
*/ */
......
...@@ -6,24 +6,29 @@ ...@@ -6,24 +6,29 @@
<el-form :inline="true" :model="params" ref="filterForm"> <el-form :inline="true" :model="params" ref="filterForm">
<template v-for="item in filters"> <template v-for="item in filters">
<el-form-item :prop="item.prop" :key="item.prop"> <el-form-item :prop="item.prop" :key="item.prop">
<!-- input --> <template v-if="item.slots">
<el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" /> <slot :name="item.slots" v-bind="{ params }"></slot>
<!-- select --> </template>
<el-select <template v-else>
v-model="params[item.prop]" <!-- input -->
clearable <el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" />
v-bind="item" <!-- select -->
v-if="item.type === 'select'" <el-select
@change="search" v-model="params[item.prop]"
> clearable
<template v-for="option in item.options"> v-bind="item"
<el-option v-if="item.type === 'select'"
:label="option[item.labelKey] || option.label" @change="search"
:value="option[item.valueKey] || option.value" >
:key="option.value" <template v-for="(option, index) in item.options">
></el-option> <el-option
</template> :label="option[item.labelKey] || option.label"
</el-select> :value="option[item.valueKey] || option.value"
:key="index"
></el-option>
</template>
</el-select>
</template>
</el-form-item> </el-form-item>
</template> </template>
<el-form-item> <el-form-item>
...@@ -108,7 +113,7 @@ export default { ...@@ -108,7 +113,7 @@ export default {
} }
}, },
methods: { methods: {
fetchList() { fetchList(isReset) {
/** /**
* @param function httpRequest api接口 * @param function httpRequest api接口
* @param function beforeRequest 接口请求之前 * @param function beforeRequest 接口请求之前
...@@ -127,13 +132,13 @@ export default { ...@@ -127,13 +132,13 @@ export default {
} }
// 接口请求之前 // 接口请求之前
if (beforeRequest) { if (beforeRequest) {
params = beforeRequest(params) params = beforeRequest(params, isReset)
}
for (const key in params) {
if (params[key] === '' || params[key] === undefined || params[key] === undefined) {
delete params[key]
}
} }
// for (const key in params) {
// if (params[key] === '' || params[key] === undefined || params[key] === undefined) {
// delete params[key]
// }
// }
this.loading = true this.loading = true
httpRequest(params) httpRequest(params)
.then(res => { .then(res => {
...@@ -161,7 +166,7 @@ export default { ...@@ -161,7 +166,7 @@ export default {
// 初始化页码 // 初始化页码
this.page.currentPage = 1 this.page.currentPage = 1
// 刷新列表 // 刷新列表
this.fetchList() this.fetchList(true)
}, },
// 刷新 // 刷新
refetch(isForce) { refetch(isForce) {
......
<template> <template>
<div class="goods-message"> <div class="goods-message">
<message-item v-for="(item, index) in list" :data="item" :key="index" @remove="handleRemove(index)"></message-item> <message-item v-for="(item, index) in list" :data="item" :key="index" @remove="handleRemove(index)"></message-item>
<el-button type="text" @click="handleAdd"> <el-button type="text" @click="handleAdd" v-if="list.length < 10">
<i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;添加字段 <i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;添加字段
</el-button> </el-button>
</div> </div>
......
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
<app-card title="其他信息"> <app-card title="其他信息">
<el-form-item label="留言" prop="messageList"> <el-form-item label="留言" prop="messageList">
<message v-model="ruleForm.messageList"></message> <message v-model="ruleForm.messageList"></message>
<div class="form-tips">购买商品时让买家输入留言,最多可设置 10 条留言</div>
</el-form-item> </el-form-item>
<el-form-item label="开售方式" prop="sales_type"> <el-form-item label="开售方式" prop="sales_type">
<el-radio-group v-model="ruleForm.sales_type"> <el-radio-group v-model="ruleForm.sales_type">
...@@ -98,8 +99,12 @@ ...@@ -98,8 +99,12 @@
v-if="buyButtonTextRadio === '2'" v-if="buyButtonTextRadio === '2'"
size="mini" size="mini"
class="buy-button-input" class="buy-button-input"
maxlength="10"
/> />
</el-radio-group> </el-radio-group>
<div class="form-tips">
默认名称为立即购买,可自定义名称,中文最大6个字内,英文10个字内,如:马上抢购,设置仅对当前商品有效。
</div>
</el-form-item> </el-form-item>
<el-form-item label="售后服务" prop="after_sales_mode"> <el-form-item label="售后服务" prop="after_sales_mode">
<el-radio-group v-model="ruleForm.after_sales_mode"> <el-radio-group v-model="ruleForm.after_sales_mode">
...@@ -145,6 +150,29 @@ export default { ...@@ -145,6 +150,29 @@ export default {
components: { AppCard, AppUpload, AppUploadVideo, Sku, SkuView, Message, Editor }, components: { AppCard, AppUpload, AppUploadVideo, Sku, SkuView, Message, Editor },
props: { isEdit: { type: Boolean, default: false } }, props: { isEdit: { type: Boolean, default: false } },
data() { data() {
// 中文
function regChinese(value) {
return /^[\u4e00-\u9fa5]+$/.test(String(value))
}
// 英文
function regEnglish(value) {
return /^[a-z\s]*$/i.test(String(value))
}
function chineseEnglishValid(rule, value, callback) {
if (regChinese(value) || regEnglish(value)) {
callback()
} else {
callback(new Error('仅支持中文或英文'))
}
}
function goodsBuyBtnValid(rule, value, callback) {
const length = value.length
if (!((regChinese(value) && length > 6) || (regEnglish(value) && length > 10))) {
callback()
} else {
callback(new Error('最多可输入6个中文字或10个英文字'))
}
}
return { return {
loading: false, // 加载中 loading: false, // 加载中
stepActive: 1, stepActive: 1,
...@@ -172,7 +200,11 @@ export default { ...@@ -172,7 +200,11 @@ export default {
buyButtonTextRadio: '1', buyButtonTextRadio: '1',
rules: { rules: {
spu_name: [{ required: true, message: '商品名称不可为空', trigger: 'blur' }], spu_name: [{ required: true, message: '商品名称不可为空', trigger: 'blur' }],
chart_oss: [{ required: true, message: '最少需要添加一张商品图', trigger: 'blur' }] chart_oss: [{ required: true, message: '最少需要添加一张商品图', trigger: 'blur' }],
buy_button_text: [
{ validator: chineseEnglishValid, trigger: 'blur' },
{ validator: goodsBuyBtnValid, trigger: 'blur' }
]
} }
} }
}, },
...@@ -304,6 +336,7 @@ export default { ...@@ -304,6 +336,7 @@ export default {
}, },
// 确定修改商品 // 确定修改商品
handleEdit(params, callback) { handleEdit(params, callback) {
params.spu_id = this.pid
updateGoods(params).then(response => { updateGoods(params).then(response => {
// 成功回调 // 成功回调
callback ? callback(response) : this.handleSuccess(response) callback ? callback(response) : this.handleSuccess(response)
......
...@@ -9,6 +9,17 @@ ...@@ -9,6 +9,17 @@
<el-button type="primary">发布商品</el-button> <el-button type="primary">发布商品</el-button>
</router-link> </router-link>
</template> </template>
<template v-slot:filter-price="{ params }">
<div class="filter-price">
<el-input v-model="params.price_min" placeholder="价格" clearable>
<template slot="append"></template>
</el-input>
-
<el-input v-model="params.price_max" placeholder="价格" clearable>
<template slot="append"></template>
</el-input>
</div>
</template>
<template v-slot:table-goods="{ row }"> <template v-slot:table-goods="{ row }">
<div class="table-goods"> <div class="table-goods">
<el-image :src="imageUrl(row.chart_oss)" fit="cover" class="table-goods-pic"> <el-image :src="imageUrl(row.chart_oss)" fit="cover" class="table-goods-pic">
...@@ -69,7 +80,7 @@ export default { ...@@ -69,7 +80,7 @@ export default {
return { return {
remote: { remote: {
httpRequest: getGoodsList, httpRequest: getGoodsList,
params: { shop_id: this.shopId, spu_id: '', spu_name: '', group_id: '' }, params: { shop_id: this.shopId, spu_id: '', spu_name: '', group_id: '', price_min: '', price_max: '' },
beforeRequest: this.beforeRequest beforeRequest: this.beforeRequest
}, },
filters: [ filters: [
...@@ -85,7 +96,8 @@ export default { ...@@ -85,7 +96,8 @@ export default {
labelKey: 'group_name', labelKey: 'group_name',
valueKey: 'group_id', valueKey: 'group_id',
placeholder: '商品分组' placeholder: '商品分组'
} },
{ prop: 'price_zone', slots: 'filter-price' }
], ],
columns: [ columns: [
{ type: 'selection' }, { type: 'selection' },
...@@ -119,8 +131,14 @@ export default { ...@@ -119,8 +131,14 @@ export default {
return '' return ''
} }
}, },
beforeRequest(params) { beforeRequest(params, isReset) {
// 重置
if (isReset) {
params.price_min = ''
params.price_max = ''
}
params.status = this.activeName === '0' ? '' : this.activeName params.status = this.activeName === '0' ? '' : this.activeName
params.price_zone = `${params.price_min || ''},${params.price_max || ''}`
return params return params
}, },
handleClick() { handleClick() {
...@@ -171,6 +189,11 @@ export default { ...@@ -171,6 +189,11 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.filter-price {
.el-input {
width: 140px;
}
}
.table-goods { .table-goods {
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<!--列表--> <!--列表-->
<table-list v-bind="tableOptions" ref="list"> <table-list v-bind="tableOptions" ref="list">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick"> <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> <el-tab-pane :label="item.label" :name="item.value" v-for="item in orderStatus" :key="item.value"></el-tab-pane>
</el-tabs> </el-tabs>
<template #header-aside> <template #header-aside>
<router-link to="/order/add"> <router-link to="/order/add">
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</template> </template>
<template v-slot:table-price="{ row }"> <template v-slot:table-price="{ row }">
<p>{{ row.product_price }}</p> <p>{{ row.product_price }}</p>
<p>1</p> <p>{{ row.buy_count }}</p>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<el-button type="text" @click="handleView(row)">查看</el-button> <el-button type="text" @click="handleView(row)">查看</el-button>
...@@ -36,21 +36,21 @@ ...@@ -36,21 +36,21 @@
import TableList from '@/components/base/tableList' import TableList from '@/components/base/tableList'
import AppCard from '@/components/base/card' import AppCard from '@/components/base/card'
// 接口 // 接口
import { getOrderList } from '@/api/order' import { getOrderSearchList } from '@/api/order'
export default { export default {
components: { AppCard, TableList }, components: { AppCard, TableList },
data() { data() {
return { return {
activeName: '0', activeName: '0',
tabList: [ orderStatus: [
{ label: '全部', name: '0' }, { label: '全部', value: '' },
{ label: '待付款', name: '1' }, { label: '待付款', value: '1' },
{ label: '待发货', name: '2' }, { label: '待发货', value: '2' },
{ label: '已发货', name: '3' }, { label: '已发货', value: '3' },
{ label: '已完成', name: '4' }, { label: '已完成', value: '4' },
{ label: '已关闭', name: '5' }, { label: '已关闭', value: '5' },
{ label: '售后中', name: '6' } { label: '售后中', value: '6' }
] ]
} }
}, },
...@@ -59,29 +59,53 @@ export default { ...@@ -59,29 +59,53 @@ export default {
tableOptions() { tableOptions() {
return { return {
remote: { remote: {
httpRequest: getOrderList, httpRequest: getOrderSearchList,
params: { shop_id: this.$store.state.shopId, spu_id: '', order_status: '' }, params: {
shop_id: this.$store.state.shopId,
search_field: '',
search_value: '',
order_status: '',
payment_method: ''
},
beforeRequest: this.beforeRequest beforeRequest: this.beforeRequest
}, },
filters: [ filters: [
{ {
type: 'input', type: 'select',
prop: 'spu_id', prop: 'search_field',
placeholder: '请输入商品编号' options: [
{ label: '商品名称', value: 'spu_name' },
{ label: '订单编号', value: 'order_id' },
{ label: '收货人姓名', value: 'shipping_user' },
{ label: '买家手机号', value: 'customer_phone' },
{ label: '收货人手机号', value: 'shipping_phone' },
{ label: '买家手机号后四位', value: 'customer_phone_4' },
{ label: '收货人手机号后四位', value: 'shipping_phone_4' }
]
}, },
{ type: 'input', prop: 'search_value' },
// {
// type: 'select',
// prop: 'order_status',
// placeholder: '订单状态',
// options: this.orderStatus,
// style: 'width:120px'
// },
{ {
type: 'select', type: 'select',
prop: 'order_status', prop: 'payment_method',
placeholder: '付款方式',
options: [ options: [
{ label: '全部', name: '' }, { label: '全部', value: '' },
{ label: '待付款', name: '1' }, { label: '现金', value: '1' },
{ label: '待发货', name: '2' }, { label: '余额', value: '2' },
{ label: '已发货', name: '3' }, { label: '网银', value: '3' },
{ label: '已完成', name: '4' }, { label: '支付宝', value: '4' },
{ label: '已关闭', name: '5' }, { label: '微信', value: '5' },
{ label: '售后中', name: '6' } { label: '微信JSAPI', value: '7' },
{ label: '微信H5', value: '8' }
], ],
valueKey: 'name' style: 'width:120px'
} }
], ],
columns: [ columns: [
...@@ -92,7 +116,7 @@ export default { ...@@ -92,7 +116,7 @@ export default {
{ label: '买家 / 收货人', prop: 'shipping_user', align: 'center' }, { label: '买家 / 收货人', prop: 'shipping_user', align: 'center' },
{ label: '实收金额(元)', prop: 'payment_money', align: 'center' }, { label: '实收金额(元)', prop: 'payment_money', align: 'center' },
{ {
label: '支付方式', label: '付款方式',
prop: 'payment_method', prop: 'payment_method',
align: 'center', align: 'center',
computed({ row }) { computed({ row }) {
...@@ -133,7 +157,7 @@ export default { ...@@ -133,7 +157,7 @@ export default {
} }
}, },
beforeRequest(params) { beforeRequest(params) {
// params.order_status = this.activeName === '0' ? '' : this.activeName params.order_status = this.activeName === '0' ? '' : this.activeName
return params return params
}, },
handleClick() { handleClick() {
......
...@@ -6,15 +6,15 @@ ...@@ -6,15 +6,15 @@
</el-form-item> </el-form-item>
<el-form-item label="详细地址" prop="shop_address"> <el-form-item label="详细地址" prop="shop_address">
<el-input v-model="ruleForm.shop_address"> <el-input v-model="ruleForm.shop_address">
<template #append> <!-- <template #append>
<el-button @click="mapSearch">搜索地图</el-button> <el-button @click="mapSearch">搜索地图</el-button>
</template> </template> -->
</el-input> </el-input>
</el-form-item> </el-form-item>
<div class="map"> <!-- <div class="map">
<div id="map-container"></div> <div id="map-container"></div>
<div id="map-panel"></div> <div id="map-panel"></div>
</div> </div> -->
<el-form-item> <el-form-item>
<el-button type="primary" @click="onSubmit">保存</el-button> <el-button type="primary" @click="onSubmit">保存</el-button>
</el-form-item> </el-form-item>
...@@ -91,7 +91,7 @@ export default { ...@@ -91,7 +91,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.initMap() // this.initMap()
}, },
destroyed() { destroyed() {
this.map && this.map.destroy() this.map && this.map.destroy()
......
...@@ -44,10 +44,14 @@ const store = new Vuex.Store({ ...@@ -44,10 +44,14 @@ const store = new Vuex.Store({
}, },
// 获取商品分组列表 // 获取商品分组列表
getGroups({ commit, state }) { getGroups({ commit, state }) {
getGroupList({ shop_id: state.shopId }).then(response => { getGroupList({ shop_id: state.shopId })
const { data = [] } = response .then(response => {
commit('setGroups', data) const { data = [] } = response
}) commit('setGroups', data)
})
.catch(() => {
commit('setGroups', [])
})
}, },
// 设置店铺id // 设置店铺id
setShopId({ commit }, shopId) { setShopId({ commit }, shopId) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论