Merge branch 'ma'

master
mabo 2021-07-09 15:21:28 +08:00
commit 7331fcbb17
12 changed files with 1601 additions and 1818 deletions

View File

@ -90,7 +90,7 @@
<template v-if="detail.goodsParamsDTOList && detail.goodsParamsDTOList.length"> <template v-if="detail.goodsParamsDTOList && detail.goodsParamsDTOList.length">
<div class="goods-params" v-for="item in detail.goodsParamsDTOList" :key="item.groupId"> <div class="goods-params" v-for="item in detail.goodsParamsDTOList" :key="item.groupId">
<span class="ml_10">{{item.groupName}}</span> <span class="ml_10">{{item.groupName}}</span>
<table class="mb_10" cellpadding='0' border="1" cellspacing="0" > <table class="mb_10" cellpadding='0' cellspacing="0" >
<tr v-for="param in item.goodsParamsItemDTOList" :key="param.paramId"> <tr v-for="param in item.goodsParamsItemDTOList" :key="param.paramId">
<td style="text-align: center">{{param.paramName}}</td><td>{{param.paramValue}}</td> <td style="text-align: center">{{param.paramName}}</td><td>{{param.paramValue}}</td>
</tr> </tr>

View File

@ -17,14 +17,14 @@ export default {
* @description api请求基础路径 * @description api请求基础路径
*/ */
api_dev: { api_dev: {
common: "https://common-api.pickmall.cn", // common: "https://common-api.pickmall.cn",
buyer: "https://buyer-api.pickmall.cn", // buyer: "https://buyer-api.pickmall.cn",
seller: "https://store-api.pickmall.cn", // seller: "https://store-api.pickmall.cn",
manager: "https://admin-api.pickmall.cn" // manager: "https://admin-api.pickmall.cn"
// common: 'http://192.168.0.106:8890', common: 'http://192.168.0.103:8890',
// buyer: 'http://192.168.0.106:8888', buyer: 'http://192.168.0.103:8888',
// seller: 'http://192.168.0.106:8889', seller: 'http://192.168.0.103:8889',
// manager: 'http://192.168.0.106:8887' manager: 'http://192.168.0.103:8887'
}, },
api_prod: { api_prod: {
common: "https://common-api.pickmall.cn", common: "https://common-api.pickmall.cn",

View File

@ -1,43 +1,38 @@
<template> <template>
<div class="search"> <div class="search">
<Card> <Card>
<Form ref="searchForm" @keydown.enter.native="handleSearch" :model="searchForm" inline :label-width="70" class="search-form">
<Form-item label="订单号" prop="orderSn">
<Input type="text" v-model="searchForm.orderSn" placeholder="请输入订单号" clearable style="width: 160px" />
</Form-item>
<Form-item label="会员名称" prop="buyerName">
<Input type="text" v-model="searchForm.buyerName" placeholder="请输入会员名称" clearable style="width: 160px" />
</Form-item>
<Row @keydown.enter.native="handleSearch"> <Form-item label="订单类型" prop="orderType">
<Form ref="searchForm" :model="searchForm" inline :label-width="70" class="search-form"> <Select v-model="searchForm.orderType" placeholder="请选择" clearable style="width: 160px">
<Form-item label="订单号" prop="orderSn"> <Option value="NORMAL">普通订单</Option>
<Input type="text" v-model="searchForm.orderSn" placeholder="请输入订单号" clearable style="width: 160px" /> <Option value="PINTUAN">拼团订单</Option>
</Form-item> <Option value="GIFT">赠品订单</Option>
<Form-item label="会员名称" prop="buyerName"> <Option value="VIRTUAL">核验订单</Option>
<Input type="text" v-model="searchForm.buyerName" placeholder="请输入会员名称" clearable style="width: 160px" /> </Select>
</Form-item> </Form-item>
<Form-item label="订单状态" prop="orderStatus">
<Form-item label="订单类型" prop="orderType"> <Select v-model="searchForm.orderStatus" placeholder="请选择" clearable style="width: 160px">
<Select v-model="searchForm.orderType" placeholder="请选择" clearable style="width: 160px"> <Option value="UNPAID">未付款</Option>
<Option value="NORMAL">普通订单</Option> <Option value="PAID">已付款</Option>
<Option value="PINTUAN">拼团订单</Option> <Option value="UNDELIVERED">待发货</Option>
<Option value="GIFT">赠品订单</Option> <Option value="DELIVERED">已发货</Option>
<Option value="VIRTUAL">核验订单</Option> <Option value="COMPLETED">已完成</Option>
</Select> <Option value="TAKE">待核验</Option>
</Form-item> <Option value="CANCELLED">已取消</Option>
<Form-item label="订单状态" prop="orderStatus"> </Select>
<Select v-model="searchForm.orderStatus" placeholder="请选择" clearable style="width: 160px"> </Form-item>
<Option value="UNPAID">未付款</Option> <Form-item label="下单时间">
<Option value="PAID">已付款</Option> <DatePicker v-model="selectDate" type="datetimerange" format="yyyy-MM-dd" clearable @on-change="selectDateRange" placeholder="选择起始时间" style="width: 160px"></DatePicker>
<Option value="UNDELIVERED">待发货</Option> </Form-item>
<Option value="DELIVERED">已发货</Option> <Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn">搜索</Button>
<Option value="COMPLETED">已完成</Option> </Form>
<Option value="TAKE">待核验</Option>
<Option value="CANCELLED">已取消</Option>
</Select>
</Form-item>
<Form-item label="下单时间">
<DatePicker v-model="selectDate" type="datetimerange" format="yyyy-MM-dd" clearable @on-change="selectDateRange" placeholder="选择起始时间" style="width: 160px"></DatePicker>
</Form-item>
<Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn">搜索</Button>
</Form>
</Row>
<div> <div>
<download-excel class="export-excel-wrapper" :data="data" :fields="fields" name="商品订单.xls"> <download-excel class="export-excel-wrapper" :data="data" :fields="fields" name="商品订单.xls">
<Button type="info" class="export"> <Button type="info" class="export">

View File

@ -118,7 +118,7 @@ export default {
render: (h, params) => { render: (h, params) => {
return h( return h(
"div", "div",
params.row.receivedNum + "/" + params.row.publishNum params.row.receivedNum + "/" + (params.row.publishNum === 0 ? '不限制' : params.row.publishNum)
); );
}, },

View File

@ -12,13 +12,7 @@
<Input type='number' v-model="formValidate.autoReceive"> <Input type='number' v-model="formValidate.autoReceive">
<span slot="append"></span> <span slot="append"></span>
</Input> </Input>
<span class="desc">收货后订单完成</span>
</FormItem>
<FormItem label="订单自动完成" prop="autoComplete">
<Input type='number' v-model="formValidate.autoComplete">
<span slot="append"></span>
</Input>
</FormItem> </FormItem>
<FormItem label="自动评价" prop="autoEvaluation"> <FormItem label="自动评价" prop="autoEvaluation">
@ -27,11 +21,17 @@
</Input> </Input>
</FormItem> </FormItem>
<FormItem label="售后自动取消" prop="autoCancelAfterSale"> <FormItem label="已完成订单允许退单" prop="closeAfterSale">
<Input type='number' v-model="formValidate.autoCancelAfterSale"> <Input type='number' v-model="formValidate.closeAfterSale">
<span slot="append"></span> <span slot="append"></span>
</Input> </Input>
<span class="desc">如果天数为0,则不允许退单</span>
</FormItem>
<FormItem label="已完成订单允许投诉" prop="closeComplaint">
<Input type='number' v-model="formValidate.closeComplaint">
<span slot="append"></span>
</Input>
<span class="desc">如果天数为0,则不允许投诉</span>
</FormItem> </FormItem>
<div class="label-btns"> <div class="label-btns">
@ -50,10 +50,10 @@ export default {
ruleValidate: {}, // ruleValidate: {}, //
formValidate: { // formValidate: { //
autoCancel: "", autoCancel: "",
autoComplete: "",
autoEvaluation: "", autoEvaluation: "",
autoReceive: "", autoReceive: "",
autoCancelAfterSale: "", closeAfterSale: "",
closeComplaint:""
}, },
}; };
}, },
@ -121,4 +121,8 @@ export default {
/deep/ .ivu-input { /deep/ .ivu-input {
width: 100px !important; width: 100px !important;
} }
.desc {
font-size: 12px;
color: #999;
}
</style> </style>

View File

@ -0,0 +1,3 @@
import Vue from "vue";
export default new Vue;

View File

@ -280,34 +280,13 @@ div.base-info-item {
word-break: break-all; word-break: break-all;
} }
/deep/ .ivu-steps {
width: 100% !important;
display: flex;
}
.step-list { .step-list {
height: 60px; height: 60px;
padding: 10px 30px;
background-color: #fff;
margin-bottom: 20px; margin-bottom: 20px;
border-radius: 0.8em; border-radius: 0.8em;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
// box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
}
.step-view {
flex: 1;
height: 60px;
font-size: 19px;
text-align: center;
display: flex;
background-color: #fff;
justify-content: center;
align-items: center;
}
.step-view:nth-of-type(1) {
border-top-left-radius: 0.4em;
border-bottom-left-radius: 0.4em;
}
.step-view:nth-last-child(1) {
border-top-right-radius: 0.4em;
border-bottom-right-radius: 0.4em;
} }
.add-sku-btn { .add-sku-btn {

View File

@ -59,8 +59,6 @@
:data="data" :data="data"
ref="table" ref="table"
sortable="custom" sortable="custom"
@on-sort-change="changeSort"
@on-selection-change="changeSelect"
></Table> ></Table>
<Row type="flex" justify="end" class="page"> <Row type="flex" justify="end" class="page">
<Page <Page
@ -77,29 +75,6 @@
></Page> ></Page>
</Row> </Row>
</Card> </Card>
<Modal
:title="modalTitle"
v-model="modalVisible"
:mask-closable="false"
:width="500"
>
<Form
ref="underForm"
:model="underForm"
:label-width="100"
:rules="formValidate"
>
<FormItem label="下架原因" prop="reason">
<Input v-model="underForm.reason" clearable style="width: 100%" />
</FormItem>
</Form>
<div slot="footer">
<Button type="text" @click="modalVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="lower(form.id)"
>提交</Button
>
</div>
</Modal>
</div> </div>
</template> </template>
@ -110,11 +85,7 @@ export default {
components: {}, components: {},
data() { data() {
return { return {
id: "", //id
openSearch: true, //
loading: true, // loading: true, //
modalVisible: false, //
modalTitle: "", //
drop: false, drop: false,
dropDownContent: "展开", dropDownContent: "展开",
dropDownIcon: "ios-arrow-down", dropDownIcon: "ios-arrow-down",
@ -124,24 +95,8 @@ export default {
pageSize: 10, // pageSize: 10, //
sort: "create_time", // sort: "create_time", //
order: "desc", // order: "desc", //
saveType: "TEMPLATE"
}, },
underForm: { //
reason: "",
},
form: {
//
goodsName: "",
sn: "",
marketEnable: "",
price: "",
sellerName: "",
},
//
formValidate: {},
submitLoading: false, //
selectList: [], //
selectCount: 0, //
columns: [ // columns: [ //
{ {
title: "ID", title: "ID",
@ -202,7 +157,7 @@ export default {
"Button", "Button",
{ {
props: { props: {
type: "primary", type: "success",
size: "small", size: "small",
}, },
style: { style: {
@ -244,22 +199,14 @@ export default {
}, },
methods: { methods: {
init() { init() {
let here = this.$route.matched.find((v) => v.name === this.$route.name);
this.pageType = here.props.default ? here.props.default.type : "";
if (this.pageType === "TEMPLATE") {
this.searchForm.saveType = "TEMPLATE";
} else {
this.searchForm.saveType = "DRAFT";
}
this.getDataList(); this.getDataList();
}, },
//
editGoods(v) { editGoods(v) {
this.searchForm.saveType === "TEMPLATE" ? this.$router.push({ name: "goods-template-operation-edit", query: { draftId: v.id } })
this.$router.push({ name: "goods-template-operation-edit", query: { draftId: v.id } }):
this.$router.push({ name: "goods-draft-operation-edit", query: { draftId: v.id } });
}, },
removeDraft (id) { removeDraft (id) {
let showType = this.searchForm.saveType === "TEMPLATE" ? "模版" : "草稿"; let showType = "模版";
this.$Modal.confirm({ this.$Modal.confirm({
title: "确认审核", title: "确认审核",
content: "您确认要删除id为 " + id + " 的" + showType + "吗?", content: "您确认要删除id为 " + id + " 的" + showType + "吗?",
@ -278,7 +225,6 @@ export default {
changePage(v) { changePage(v) {
this.searchForm.pageNumber = v; this.searchForm.pageNumber = v;
this.getDataList(); this.getDataList();
this.clearSelectAll();
}, },
changePageSize(v) { changePageSize(v) {
this.searchForm.pageSize = v; this.searchForm.pageSize = v;
@ -296,21 +242,6 @@ export default {
// //
this.getDataList(); this.getDataList();
}, },
changeSort(e) {
this.searchForm.sort = e.key;
this.searchForm.order = e.order;
if (e.order === "normal") {
this.searchForm.order = "";
}
this.getDataList();
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
changeSelect(e) {
this.selectList = e;
this.selectCount = e.length;
},
dropDown() { dropDown() {
if (this.drop) { if (this.drop) {
this.dropDownContent = "展开"; this.dropDownContent = "展开";

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,216 @@
<template>
<div>
<!-- 选择商品类型 -->
<Modal v-model="selectGoodsType" width="550" :closable="false">
<div class="goods-type-list" v-if="!showGoodsTemplates">
<div class="goods-type-item" :class="{'active-goods-type':item.check}" @click="handleClickGoodsType(item)"
v-for="(item,index) in goodsTypeWay" :key="index">
<img :src="item.img"/>
<div>
<h2>{{ item.title }}</h2>
<p>{{ item.desc }}</p>
</div>
</div>
</div>
<div v-else class="goods-type-list">
<h2 @click="showGoodsTemplates = !showGoodsTemplates">返回</h2>
<div class="goods-type-item template-item" @click="handleClickGoodsTemplate(item)"
v-for="(item,tempIndex) in goodsTemplates" :key="tempIndex">
<img :src="item.thumbnail" />
<div>
<h2>{{ item.goodsName }}</h2>
<p>{{ item.sellingPoint || '' }}</p>
</div>
</div>
</div>
</Modal>
<!-- 商品分类 -->
<div class="content-goods-publish">
<div class="goods-category">
<ul v-if="categoryListLevel1.length > 0">
<li v-for="(item, index) in categoryListLevel1" :class="{ activeClass: category[0].name === item.name }"
@click="handleSelectCategory(item, index, 1)" :key="index">
<span>{{ item.name }}</span>
<span>&gt;</span>
</li>
</ul>
<ul v-if="categoryListLevel2.length > 0">
<li v-for="(item, index) in categoryListLevel2" :class="{ activeClass: category[1].name === item.name }"
@click="handleSelectCategory(item, index, 2)" :key="index">
<span>{{ item.name }}</span>
<span>&gt;</span>
</li>
</ul>
<ul v-if="categoryListLevel3.length > 0">
<li v-for="(item, index) in categoryListLevel3" :class="{ activeClass: category[2].name === item.name }"
@click="handleSelectCategory(item, index, 3)" :key="index">
<span>{{ item.name }}</span>
</li>
</ul>
</div>
<p class="current-goods-category">
您当前选择的商品类别是
<span>{{ category[0].name }}</span>
<span v-show="category[1].name">> {{ category[1].name }}</span>
<span v-show="category[2].name">> {{ category[2].name }}</span>
</p>
<template v-if="selectedTemplate.goodsName">
<Divider>已选商品模版:{{selectedTemplate.goodsName}}</Divider>
</template>
</div>
<!-- 底部按钮 -->
<div class="footer">
<ButtonGroup>
<Button type="primary" @click="selectGoodsType = true">商品类型</Button>
<Button type="primary" @click="next"></Button>
</ButtonGroup>
</div>
</div>
</template>
<script>
import * as API_GOODS from "@/api/goods";
export default {
data() {
return {
selectedTemplate: {}, //
selectGoodsType: false, // modal
goodsTemplates: [], //
showGoodsTemplates: false, //
goodsTypeWay: [
{
title: "实物商品",
img: require("@/assets/goodsType1.png"),
desc: "零售批发,物流配送",
type: "PHYSICAL_GOODS",
check: false,
},
{
title: "虚拟商品",
img: require("@/assets/goodsType2.png"),
desc: "虚拟核验,无需物流",
type: "VIRTUAL_GOODS",
check: false,
},
{
title: "商品模板导入",
img: require("@/assets/goodsTypeTpl.png"),
desc: "商品模板,一键导入",
check: false,
},
],
//
category: [
{name: '', id: ''},
{name: '', id: ''},
{name: '', id: ''}
],
//
goodsType: '',
/** 1级分类列表*/
categoryListLevel1: [],
/** 2级分类列表*/
categoryListLevel2: [],
/** 3级分类列表*/
categoryListLevel3: [],
}
},
methods: {
//
handleClickGoodsType(val) {
this.goodsTypeWay.map((item) => {
return (item.check = false);
});
val.check = !val.check;
if (!val.type) {
this.GET_GoodsTemplate()
this.showGoodsTemplates = true;
} else {
this.goodsType = val.type;
this.selectedTemplate = {}
}
},
//
handleClickGoodsTemplate(val) {
console.log(val);
this.selectedTemplate = val;
this.selectGoodsType = false;
this.$emit('change', {tempId: val.id})
},
//
GET_GoodsTemplate() {
let searchParams = {
saveType: "TEMPLATE",
sort: "create_time",
order: "desc"
};
API_GOODS.getDraftGoodsListData(searchParams).then((res) => {
if (res.success) {
this.goodsTemplates = res.result.records;
}
});
},
/** 选择商城商品分类 */
handleSelectCategory(row, index, level) {
if (level === 1) {
this.category.forEach(cate => {
cate.name = '',
cate.id = ''
})
this.category[0].name = row.name;
this.category[0].id = row.id;
this.categoryListLevel2 = this.categoryListLevel1[index].children;
this.categoryListLevel3 = [];
} else if (level === 2) {
this.category[1].name = row.name;
this.category[1].id = row.id;
this.category[2].name = '';
this.category[2].id = '';
this.categoryListLevel3 = this.categoryListLevel2[index].children;
} else {
this.category[2].name = row.name
this.category[2].id = row.id
}
},
/** 查询下一级 商城商品分类*/
GET_NextLevelCategory(row) {
const _id = row && row.id !== 0 ? row.id : 0;
API_GOODS.getGoodsCategoryAll().then((res) => {
if (res.success && res.result) {
this.categoryListLevel1 = res.result;
}
});
},
//
next() {
window.scrollTo(0, 0);
if (!this.goodsType && !this.selectedTemplate.goodsName) {
this.$Message.error('请选择商品类型')
return
}
if (!this.category[0].name) {
this.$Message.error("请选择商品分类");
return;
} else if (!this.category[2].name) {
this.$Message.error("必须选择到三级分类");
return;
} else if (this.category[2].name) {
if (this.selectedTemplate.id) {
this.$emit('change',{tempId: this.selectedTemplate.id})
} else {
this.$emit('change',{category: this.category,goodsType:this.goodsType})
}
}
},
},
mounted () {
this.GET_NextLevelCategory()
}
}
</script>
<style lang="scss" scoped>
@import "./addGoods.scss";
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
<template>
<div class="content-goods-publish">
<div class="success" style="text-align: left">
<h1>恭喜您商品发布成功!</h1>
<div class="goToGoodsList" @click="gotoGoodsList">
<a>去店铺查看商品列表>></a>
</div>
<div class="operation">
<h3>您还可以</h3>
<div>
1继续
<a @click="gotoBack"></a>
</div>
<div>
2进入卖家中心管理
<a @click="gotoGoodsList"></a>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
methods: {
//
gotoGoodsList() {
this.$router.push({name: "goods"});
},
gotoBack() {
this.$router.go();
},
}
}
</script>
<style lang="scss" scoped>
@import "./addGoods.scss";
</style>