适配微服务

master
paulGao 2022-02-10 18:57:36 +08:00
parent 9765310136
commit 3a3e14e0a7
35 changed files with 1438 additions and 995 deletions

View File

@ -4,7 +4,7 @@ var BASE = {
*/ */
API_DEV: { API_DEV: {
seller: "http://127.0.0.1:8888", seller: "http://127.0.0.1:8888",
manager: "http://127.0.0.1:8888" manager: "http://127.0.0.1:8888",
buyer: "http://127.0.0.1:8888", buyer: "http://127.0.0.1:8888",
common: "http://127.0.0.1:8888", common: "http://127.0.0.1:8888",
}, },

View File

@ -28,7 +28,7 @@ export function pageData (params) {
*/ */
export function handleRefreshToken (token) { export function handleRefreshToken (token) {
return request({ return request({
url: `/buyer/passport/members/refresh/${token}`, url: `/buyer/passport/member/refresh/${token}`,
method: Method.GET, method: Method.GET,
needToken: false needToken: false
}) })

View File

@ -6,7 +6,7 @@ import request, {Method, buyerUrl} from '@/plugins/request.js';
*/ */
export function regist (params) { export function regist (params) {
return request({ return request({
url: '/buyer/passport/members/register', url: '/buyer/passport/member/register',
method: Method.POST, method: Method.POST,
needToken: false, needToken: false,
data: params data: params
@ -18,7 +18,7 @@ export function regist (params) {
*/ */
export function login (params) { export function login (params) {
return request({ return request({
url: '/buyer/passport/members/userLogin', url: '/buyer/passport/member/userLogin',
method: Method.POST, method: Method.POST,
needToken: false, needToken: false,
data: params, data: params,
@ -31,7 +31,7 @@ export function login (params) {
*/ */
export function smsLogin (params) { export function smsLogin (params) {
return request({ return request({
url: '/buyer/passport/members/smsLogin', url: '/buyer/passport/member/smsLogin',
method: Method.POST, method: Method.POST,
needToken: false, needToken: false,
data: params, data: params,
@ -44,7 +44,7 @@ export function smsLogin (params) {
*/ */
export function getMemberMsg (params) { export function getMemberMsg (params) {
return request({ return request({
url: '/buyer/passport/members', url: '/buyer/passport/member',
method: Method.GET, method: Method.GET,
needToken: true, needToken: true,
params params
@ -74,7 +74,7 @@ export function loginCallback (uuid) {
*/ */
export function validateCode (params) { export function validateCode (params) {
return request({ return request({
url: `/buyer/passport/members/resetByMobile`, url: `/buyer/passport/member/resetByMobile`,
method: Method.POST, method: Method.POST,
needToken: false, needToken: false,
params params
@ -86,7 +86,7 @@ export function validateCode (params) {
*/ */
export function resetPassword (params) { export function resetPassword (params) {
return request({ return request({
url: `/buyer/passport/members/resetPassword`, url: `/buyer/passport/member/resetPassword`,
method: Method.POST, method: Method.POST,
needToken: false, needToken: false,
params params

View File

@ -68,14 +68,31 @@
已有<span>{{ item.content.commentNum || 0 }}</span 已有<span>{{ item.content.commentNum || 0 }}</span
>人评价 >人评价
</div> </div>
<div class="goods-show-seller" > <div class="goods-show-seller">
<Tag class="goods-show-buyer" v-if="item.content.selfOperated" size="default" color="error"> <Tag
class="goods-show-buyer"
v-if="item.content.selfOperated"
size="default"
color="error"
>自营
</Tag> </Tag>
<div class="goods-show-right" > <div class="goods-show-right">
<div class="goods-show-middle" v-if="goodsListType.content.goodsType == 'VIRTUAL_GOODS'"></div> <div
<div class="goods-show-middle" v-else-if="goodsListType.content.goodsType == 'PHYSICAL_GOODS'">实物</div> class="goods-show-middle"
v-if="goodsListType.content.goodsType == 'VIRTUAL_GOODS'"
>
虚拟
</div>
<div
class="goods-show-middle"
v-else-if="goodsListType.content.goodsType == 'PHYSICAL_GOODS'"
>
实物
</div>
</div> </div>
<span class="text-bottom" style="color:#e4393c;">{{ item.content.storeName }}</span> <span class="text-bottom" style="color: #e4393c">{{
item.content.storeName
}}</span>
</div> </div>
</div> </div>
</div> </div>
@ -98,134 +115,141 @@
</template> </template>
<script> <script>
import GoodsClassNav from '@/components/nav/GoodsClassNav'; import GoodsClassNav from "@/components/nav/GoodsClassNav";
import * as apiGoods from '@/api/goods'; import * as apiGoods from "@/api/goods";
export default { export default {
name: 'GoodsList', name: "GoodsList",
beforeRouteEnter (to, from, next) { beforeRouteEnter(to, from, next) {
window.scrollTo(0, 0); window.scrollTo(0, 0);
next(); next();
}, },
data () { data() {
return { return {
sortIndex: 0, // sortIndex: 0, //
sortPriceIndex: false, // sortPriceIndex: false, //
goodsTool: [ // goodsTool: [
{ title: '综合', en: '' }, //
{ title: '销量', en: 'buyCount' }, { title: "综合", en: "" },
{ title: '评论数', en: 'commentNum' }, { title: "销量", en: "buyCount" },
{ title: '新品', en: 'releaseTime' } { title: "评论数", en: "commentNum" },
{ title: "新品", en: "releaseTime" },
], ],
goodsList: [], // goodsList: [], //
loading: false, // loading: false, //
goodsListType:"", goodsListType: "",
total: 0, // total: 0, //
params: { // params: {
//
pageNumber: 0, pageNumber: 0,
pageSize: 20, pageSize: 20,
categoryId: '' categoryId: "",
} },
}; };
}, },
watch: { watch: {
$route () { $route() {
const keyword = this.$route.query.keyword const keyword = this.$route.query.keyword;
this.handleSearch(keyword) this.handleSearch(keyword);
} },
}, },
methods: { methods: {
// //
handleSearch (key) { handleSearch(key) {
this.params.keyword = key this.params.keyword = key;
this.params.pageNumber = 0 this.params.pageNumber = 0;
this.getGoodsList() this.getGoodsList();
}, },
orderBy (data, index) { orderBy(data, index) {
// //
this.sortIndex = index; this.sortIndex = index;
this.params.sort = data; this.params.sort = data;
this.params.order = 'desc'; this.params.order = "desc";
if (data === 'price') { if (data === "price") {
if (!this.sortPriceIndex) { if (!this.sortPriceIndex) {
this.sortPriceIndex = 'asc'; this.sortPriceIndex = "asc";
} else { } else {
this.sortPriceIndex === 'desc' ? (this.sortPriceIndex = 'asc') : (this.sortPriceIndex = 'desc'); this.sortPriceIndex === "desc"
? (this.sortPriceIndex = "asc")
: (this.sortPriceIndex = "desc");
} }
this.params.order = this.sortPriceIndex this.params.order = this.sortPriceIndex;
} else { } else {
this.sortPriceIndex = false this.sortPriceIndex = false;
} }
this.getGoodsList(); this.getGoodsList();
}, },
goGoodsDetail (skuId, goodsId) { goGoodsDetail(skuId, goodsId) {
// //
let routeUrl = this.$router.resolve({ let routeUrl = this.$router.resolve({
path: '/goodsDetail', path: "/goodsDetail",
query: { skuId, goodsId } query: { skuId, goodsId },
}); });
window.open(routeUrl.href, '_blank'); window.open(routeUrl.href, "_blank");
}, },
// //
changePageNum (val) { changePageNum(val) {
this.params.pageNumber = val; this.params.pageNumber = val;
this.getGoodsList(); this.getGoodsList();
}, },
// //
changePageSize (val) { changePageSize(val) {
this.params.pageNumber = 1; this.params.pageNumber = 1;
this.params.pageSize = val; this.params.pageSize = val;
this.getGoodsList(); this.getGoodsList();
}, },
// //
getGoodsList () { getGoodsList() {
this.loading = true; this.loading = true;
apiGoods.goodsList(this.params) apiGoods
.goodsList(this.params)
.then((res) => { .then((res) => {
this.loading = false; this.loading = false;
if (res.success) { if (res.success) {
this.goodsList = res.result.content; this.goodsList = res.result.content;
this.total = res.result.totalElements; this.total = res.result.totalElements;
for(var i = 0;i<this.goodsList.length; i++){ for (var i = 0; i < this.goodsList.length; i++) {
this.goodsListType = this.goodsList[i]; this.goodsListType = this.goodsList[i];
} }
} }
}).catch(() => { })
.catch(() => {
this.loading = false; this.loading = false;
}); });
}, },
getParams (val) { getParams(val) {
// //
Object.assign(this.params, val) Object.assign(this.params, val);
this.getGoodsList() this.getGoodsList();
} },
}, },
created () { created() {
if (this.$route.query.categoryId) { if (this.$route.query.categoryId) {
let cateId = this.$route.query.categoryId.split(',') let cateId = this.$route.query.categoryId.split(",");
Object.assign(this.params, this.$route.query) Object.assign(this.params, this.$route.query);
this.params.categoryId = cateId[cateId.length - 1] this.params.categoryId = cateId[cateId.length - 1];
} else { } else {
Object.assign(this.params, this.$route.query) Object.assign(this.params, this.$route.query);
} }
this.getGoodsList() this.getGoodsList();
}, },
components: { components: {
GoodsClassNav GoodsClassNav,
} },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../assets/styles/goodsList.scss'; @import "../assets/styles/goodsList.scss";
.goods-show-info>.goods-show-seller>.goods-show-buyer{ .goods-show-info > .goods-show-seller > .goods-show-buyer {
height:16px;width:30px; height: 16px;
white-space: nowrap; width: 30px;
line-height:17px; white-space: nowrap;
text-align: center; line-height: 17px;
padding:0 3px; text-align: center;
background-color:#E23A3A; padding: 0 3px;
} background-color: #e23a3a;
.goods-show-seller{ }
.goods-show-seller {
// padding:3px 0; // padding:3px 0;
vertical-align: middle; vertical-align: middle;
} }
@ -235,8 +259,8 @@ export default {
min-width: 1000px; min-width: 1000px;
position: relative; position: relative;
} }
.price-sort:hover{ .price-sort:hover {
color:#E23A3A; color: #e23a3a;
} }
.goods-box { .goods-box {
display: flex; display: flex;
@ -246,26 +270,26 @@ export default {
width: 200px; width: 200px;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.goods-show-right{ .goods-show-right {
width:35px; width: 35px;
height:17px; height: 17px;
// vertical-align:middle; // vertical-align:middle;
overflow: hidden; overflow: hidden;
margin-top:1.5px; margin-top: 1.5px;
margin-right: 5px; margin-right: 5px;
line-height: 16px; line-height: 16px;
background:white; background: white;
border-radius:4px; border-radius: 4px;
margin-bottom:5px; margin-bottom: 5px;
float:left; float: left;
text-align:center; text-align: center;
border:1px solid rgba(112, 123, 187, 0.8); border: 1px solid rgba(112, 123, 187, 0.8);
color:rgba(112, 123, 187, 0.8); color: rgba(112, 123, 187, 0.8);
} }
.goods-show-middle:hover{ .goods-show-middle:hover {
color:rgba(2, 15, 88, 0.6); color: rgba(2, 15, 88, 0.6);
border:0.2px solid rgba(0, 13, 87, 0.6); border: 0.2px solid rgba(0, 13, 87, 0.6);
border-radius:4px; border-radius: 4px;
line-height: 18px; line-height: 18px;
} }
.item-as-title { .item-as-title {

View File

@ -48,7 +48,7 @@ export default {
nickName: [{required: true, message: '用户昵称不能为空'}, { max: 16, message: '用户昵称不能超过15个字符' }] nickName: [{required: true, message: '用户昵称不能为空'}, { max: 16, message: '用户昵称不能超过15个字符' }]
}, },
formItem: {}, // formItem: {}, //
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {} // token accessToken: {} // token
} }
}, },

View File

@ -81,7 +81,7 @@ export default {
descriptionScore: 5 descriptionScore: 5
}, // }, //
visible: false, // visible: false, //
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {}, // token accessToken: {}, // token
previewImage: '', // previewImage: '', //
loading: false // loading: false //

View File

@ -117,7 +117,7 @@ export default {
num: 1 num: 1
}, },
uploadList: [], // uploadList: [], //
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {}, // token accessToken: {}, // token
visible: false, // visible: false, //
previewImage: '', // url previewImage: '', // url

View File

@ -68,7 +68,7 @@ export default {
content: '' content: ''
}, // }, //
visible: false, // visible: false, //
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {}, // token accessToken: {}, // token
previewImage: '', // previewImage: '', //
loading: false, // loading: false, //

View File

@ -205,7 +205,7 @@ export default {
}, },
data () { data () {
return { return {
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {}, // token accessToken: {}, // token
visible: false, // visible: false, //
loading: false, // loading: false, //

View File

@ -129,7 +129,7 @@ export default {
return { return {
loading: false, // loading: false, //
uploadLoading: false, // uploadLoading: false, //
action: commonUrl + '/common/upload/file', // action: commonUrl + '/common/common/upload/file', //
accessToken: {}, // token accessToken: {}, // token
previewPicture: '', // previewPicture: '', //
address: '', // address: '', //

View File

@ -141,7 +141,7 @@ service.interceptors.response.use(
const errorResponse = error.response || {}; const errorResponse = error.response || {};
const errorData = errorResponse.data || {}; const errorData = errorResponse.data || {};
if (errorResponse.status === 403) { if (errorResponse.status === 403 || error.response.data.code === 20004) {
isRefreshToken++; isRefreshToken++;
if (isRefreshToken === 1) { if (isRefreshToken === 1) {

View File

@ -2,7 +2,7 @@ import {commonUrl, getRequest, getRequestWithNoToken, postRequestWithNoToken} fr
// 通过id获取子地区 // 通过id获取子地区
export const getChildRegion = (id) => { export const getChildRegion = (id) => {
return getRequest(`${commonUrl}/common/region/item/${id}`); return getRequest(`${commonUrl}/common/common/region/item/${id}`);
}; };
// 点地图获取地址信息 // 点地图获取地址信息

View File

@ -311,11 +311,11 @@ export const getFileListData = (params) => {
// 重命名文件 // 重命名文件
export const renameFile = (params) => { export const renameFile = (params) => {
return postRequest("/common/common/file/rename", params); return postRequest("/common/file/rename", params);
}; };
// 删除文件 // 删除文件
export const deleteFile = (ids, params) => { export const deleteFile = (ids, params) => {
return deleteRequest(`/common/common/file/delete/${ids}`, params); return deleteRequest(`/common/file/delete/${ids}`, params);
}; };
// 下载文件 // 下载文件
export const aliDownloadFile = (fKey, params) => { export const aliDownloadFile = (fKey, params) => {
@ -405,12 +405,12 @@ export const resetPassword = (params) => {
// 初始化商品索引 // 初始化商品索引
export const createIndex = () => { export const createIndex = () => {
return getRequest(`/elasticsearch`); return getRequest(`/other/elasticsearch`);
}; };
// 初始化商品索引 // 初始化商品索引
export const getProgress = () => { export const getProgress = () => {
return getRequest(`/elasticsearch/progress`); return getRequest(`/other/elasticsearch/progress`);
}; };
// 分页查询自定义分词 // 分页查询自定义分词

View File

@ -134,7 +134,7 @@ export const editMemberAddress = (params) => {
} }
//查询会员预存款 //查询会员预存款
export const getMemberWallet = (params) => { export const getMemberWallet = (params) => {
return getRequest(`/members/wallet`, params) return getRequest(`/wallet/wallet`, params)
} }

View File

@ -132,7 +132,7 @@ export const getTraces = (sn, params) => {
} }
//获取发票列表 //获取发票列表
export const getReceiptPage = (params) => { export const getReceiptPage = (params) => {
return getRequest(`/receipt`, params) return getRequest(`/trade/receipt`, params)
} }
//平台退款 //平台退款
export const refundPrice = (afterSaleSn, params) => { export const refundPrice = (afterSaleSn, params) => {

View File

@ -15,7 +15,7 @@ export const editSmsMessageTemplate = (id, params) => {
} }
//修改站内信模板 //修改站内信模板
export const editNoticeMessage = (id, params) => { export const editNoticeMessage = (id, params) => {
return putRequest(`/noticeMessage/${id}`, params) return putRequest(`/setting/noticeMessage/${id}`, params)
} }
//微信消息同步 //微信消息同步
@ -57,7 +57,7 @@ export const delWechatMPMessageTemplate = (id, params) => {
// 查询站内信模板信息 // 查询站内信模板信息
export const getNoticeMessageData = params => { export const getNoticeMessageData = params => {
return getRequest("/noticeMessage", params); return getRequest("/setting/noticeMessage", params);
}; };
//删除站内信 //删除站内信
export const deleteMessage = (id) => { export const deleteMessage = (id) => {
@ -65,11 +65,11 @@ export const deleteMessage = (id) => {
}; };
// 开启站内信模板 // 开启站内信模板
export const openNoticeMessage = (id) => { export const openNoticeMessage = (id) => {
return putRequest(`/noticeMessage/${id}/open`); return putRequest(`/setting/noticeMessage/${id}/open`);
}; };
// 修改站内信状态 // 修改站内信状态
export const updateMessageStatus = (id,status) => { export const updateMessageStatus = (id,status) => {
return putRequest(`/noticeMessage/${id}/${status}`); return putRequest(`/setting/noticeMessage/${id}/${status}`);
}; };
//获取短信模板 //获取短信模板
export const getSmsTemplatePage = (params) => { export const getSmsTemplatePage = (params) => {
@ -194,5 +194,5 @@ export const verificationPage = (params) => {
//获取通知类站内信 //获取通知类站内信
export const getNoticeMessageDetail = (id, params) => { export const getNoticeMessageDetail = (id, params) => {
return getRequest(`/noticeMessage/${id}`, params) return getRequest(`/setting/noticeMessage/${id}`, params)
} }

View File

@ -58,7 +58,7 @@ export const getBuyBillDetail = (id) => {
// 获取商家结算单流水分页 // 获取商家结算单流水分页
export const getStoreFlow = (id,params) => { export const getStoreFlow = (id,params) => {
return getRequest(`/store/bill/${id}/getStoreFlow`,params) return getRequest(`/order/bill/${id}/getStoreFlow`,params)
} }
// 审核结算单 // 审核结算单

View File

@ -60,6 +60,7 @@ service.interceptors.response.use(
Message.error("系统异常"); Message.error("系统异常");
} }
break; break;
case 20004:
case 401: case 401:
// 未登录 清除已登录状态 // 未登录 清除已登录状态
Cookies.set("userInfoManager", ""); Cookies.set("userInfoManager", "");
@ -93,7 +94,7 @@ service.interceptors.response.use(
// 这种情况一般调到登录页 // 这种情况一般调到登录页
} else if (error.response.status === 404) { } else if (error.response.status === 404) {
// 避免刷新token报错 // 避免刷新token报错
} else if (error.response.status === 403) { } else if (error.response.status === 403 || error.response.data.code === 20004) {
isRefreshToken++; isRefreshToken++;
if (isRefreshToken === 1) { if (isRefreshToken === 1) {
const getTokenRes = await refreshToken(); const getTokenRes = await refreshToken();

View File

@ -1,8 +1,13 @@
<template> <template>
<div class="wrapper"> <div class="wrapper">
<Card class="category"> <Card class="category">
<div :class="{active:i == selectedIndex}" class="category-item" v-for="(typeItem,i) in pageTypes" :key="typeItem.type"> <div
<div @click="clickType(typeItem.type,i)">{{typeItem.title}}</div> :class="{ active: i == selectedIndex }"
class="category-item"
v-for="(typeItem, i) in pageTypes"
:key="typeItem.type"
>
<div @click="clickType(typeItem.type, i)">{{ typeItem.title }}</div>
</div> </div>
</Card> </Card>
<Card class="content"> <Card class="content">
@ -24,16 +29,19 @@
<span slot="open"></span> <span slot="open"></span>
<span slot="close"></span> <span slot="close"></span>
</i-switch> </i-switch>
<Button type="info" placement="right" @click="Template(item)" size="small">编辑</Button> <Button type="info" placement="right" @click="Template(item)" size="small"
<Button type="success" placement="right" @click="decorate(item)" size="small">装修</Button> >编辑</Button
>
<Button type="success" placement="right" @click="decorate(item)" size="small"
>装修</Button
>
<Poptip confirm title="删除此模板?" @on-ok="delTemplate(item.id)"> <Poptip confirm title="删除此模板?" @on-ok="delTemplate(item.id)">
<Button type="error" size="small">删除</Button> <Button type="error" size="small">删除</Button>
</Poptip> </Poptip>
</div> </div>
</div> </div>
<div class="no-more" v-if="list.length ==0"></div> <div class="no-more" v-if="list.length == 0"></div>
</div> </div>
</Card> </Card>
<Modal <Modal
v-model="showModal" v-model="showModal"
@ -61,13 +69,15 @@ export default {
name: "floorList", name: "floorList",
data() { data() {
return { return {
showModal: false, // modal showModal: false, // modal
selectedIndex: 0, // index selectedIndex: 0, // index
formData: { // formData: {
//
status: false, // status: false, //
name: "", // name: "", //
}, },
columns: [ // column columns: [
// column
{ {
title: "页面名称", title: "页面名称",
key: "name", key: "name",
@ -82,11 +92,12 @@ export default {
], ],
loading: false, // loading: false, //
pageTypes: [ // pageTypes: [
//
{ {
type: "INDEX", type: "INDEX",
title: "首页", title: "首页",
} },
// { // {
// type: "SPECIAL", // type: "SPECIAL",
// title: "", // title: "",
@ -134,14 +145,17 @@ export default {
Template(item) { Template(item) {
// //
item.status = item.pageShow item.status = item.pageShow;
this.formData = item; this.formData = item;
this.showModal = true; this.showModal = true;
}, },
decorate(val) { decorate(val) {
// //
this.$router.push({ name: "renovation", query: { id: val.id,pageShow:val.pageShow } }); this.$router.push({
name: "renovation",
query: { id: val.id, pageShow: val.pageShow },
});
}, },
getTemplateList() { getTemplateList() {
@ -155,13 +169,13 @@ export default {
API_floor.getHomeList(params).then((res) => { API_floor.getHomeList(params).then((res) => {
if (res.success) { if (res.success) {
this.list = res.result.records; this.list = res.result.records;
this.list.forEach(e => { this.list.forEach((e) => {
if (e.pageShow === 'OPEN') { if (e.pageShow === "OPEN") {
e.pageShow = true e.pageShow = true;
} else { } else {
e.pageShow = false e.pageShow = false;
} }
}) });
} }
}); });
}, },
@ -184,7 +198,7 @@ export default {
} }
}); });
}, },
} },
}; };
</script> </script>
@ -197,7 +211,7 @@ export default {
background: #ededed; background: #ededed;
} }
.item-title { .item-title {
background: #d7e7f5!important; background: #d7e7f5 !important;
height: 54px; height: 54px;
} }
.no-more { .no-more {
@ -239,12 +253,12 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
div:nth-child(2){ div:nth-child(2) {
margin-right: 80px; margin-right: 80px;
} }
} }
} }
.item:nth-of-type(2n+1) { .item:nth-of-type(2n + 1) {
background: #f5f7fa; background: #f5f7fa;
} }
</style> </style>

View File

@ -2,17 +2,27 @@
<div class="decorate"> <div class="decorate">
<div class="decorate-title"> <div class="decorate-title">
{{ res.name }} {{ res.name }}
<Button style="margin-left: 20px" size="small" ghost v-if=" <Button
res.type == 'tpl_ad_list' || style="margin-left: 20px"
res.type == 'tpl_activity_list' || size="small"
res.drawer ghost
" type="primary" @click="selectStyle()">选择风格</Button> v-if="res.type == 'tpl_ad_list' || res.type == 'tpl_activity_list' || res.drawer"
type="primary"
@click="selectStyle()"
>选择风格</Button
>
</div> </div>
<!-- 右侧显示抽屉 --> <!-- 右侧显示抽屉 -->
<Drawer title="选择风格" :closable="false" width="400" v-model="styleFlag"> <Drawer title="选择风格" :closable="false" width="400" v-model="styleFlag">
<div class="drawer"> <div class="drawer">
<div class="drawer-item" @click="clickDrawer(item, index)" v-for="(item, index) in modelData" :key="index" v-if="item.drawer"> <div
class="drawer-item"
@click="clickDrawer(item, index)"
v-for="(item, index) in modelData"
:key="index"
v-if="item.drawer"
>
<img src alt /> <img src alt />
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</div> </div>
@ -20,18 +30,29 @@
</Drawer> </Drawer>
<!-- 卡片集合 --> <!-- 卡片集合 -->
<div class="decorate-list" v-if=" <div
(res.type != 'tpl_ad_list' && res.type != 'tpl_activity_list') || class="decorate-list"
res.drawer v-if="(res.type != 'tpl_ad_list' && res.type != 'tpl_activity_list') || res.drawer"
"> >
<div class="decorate-item" v-for="(item, index) in res.options.list" :key="index"> <div class="decorate-item" v-for="(item, index) in res.options.list" :key="index">
<div class="decorate-item-title"> <div class="decorate-item-title">
<div>卡片</div> <div>卡片</div>
<Icon @click="closeDecorate(index)" v-if="res.close" size="20" color="#e1251b" type="md-close-circle" /> <Icon
@click="closeDecorate(index)"
v-if="res.close"
size="20"
color="#e1251b"
type="md-close-circle"
/>
</div> </div>
<div class="decorate-item-box"> <div class="decorate-item-box">
<div class="decorate-border" v-if="item.titleWay" v-for="(title_item, title_index) in item.titleWay" :key="title_index"> <div
class="decorate-border"
v-if="item.titleWay"
v-for="(title_item, title_index) in item.titleWay"
:key="title_index"
>
<div class="decorate-view"> <div class="decorate-view">
<div class="decorate-view-title">标题{{ title_index + 1 }}</div> <div class="decorate-view-title">标题{{ title_index + 1 }}</div>
<div> <div>
@ -46,19 +67,28 @@
</div> </div>
<div class="decorate-view"> <div class="decorate-view">
<div class="decorate-view-title">绑定商品</div> <div class="decorate-view-title">绑定商品</div>
<div class="decorate-view-link" v-if="res.options.list[0].listWay.length != 0"> <div
class="decorate-view-link"
v-if="res.options.list[0].listWay.length != 0"
>
<!-- 绑定商品选择器回调已选择的商品 --> <!-- 绑定商品选择器回调已选择的商品 -->
<div v-if="title_item.___index == bindGoods.___index || title_item.title == bindGoods.type" v-for="(bindGoods,bindGoodsIndex) in res.options.list[0].listWay" :key="bindGoodsIndex"> <div
{{bindGoods.title}}, v-if="
title_item.___index == bindGoods.___index ||
title_item.title == bindGoods.type
"
v-for="(bindGoods, bindGoodsIndex) in res.options.list[0].listWay"
:key="bindGoodsIndex"
>
{{ bindGoods.title }},
</div> </div>
</div> </div>
<div> <div>
<Button @click="bindGoodsId(title_item)" size="small" ghost type="primary">选择商品</Button> <Button @click="bindGoodsId(title_item)" size="small" ghost type="primary"
>选择商品</Button
>
</div> </div>
</div> </div>
</div> </div>
<!-- 选择照片 --> <!-- 选择照片 -->
<div class="decorate-view" v-if="!res.notImg"> <div class="decorate-view" v-if="!res.notImg">
@ -72,7 +102,13 @@
</div> </div>
</div> </div>
<div class="selectBtn"> <div class="selectBtn">
<Button size="small" @click="handleClickFile(item, index)" ghost type="primary">选择照片</Button> <Button
size="small"
@click="handleClickFile(item, index)"
ghost
type="primary"
>选择照片</Button
>
</div> </div>
</div> </div>
<!-- 填写标题 --> <!-- 填写标题 -->
@ -90,50 +126,54 @@
已选链接 已选链接
<span> <span>
{{ ways.find((e)=>{return item.url.___type == e.name}).title }} {{
ways.find((e) => {
return item.url.___type == e.name;
}).title
}}
- -
<!-- 当选择完链接之后的商品名称 --> <!-- 当选择完链接之后的商品名称 -->
<span v-if="item.url.___type == 'goods'"> {{item.url.goodsName}}</span> <span v-if="item.url.___type == 'goods'"> {{ item.url.goodsName }}</span>
<!-- 当选择完链接之后的分类回调 --> <!-- 当选择完链接之后的分类回调 -->
<span v-if="item.url.___type == 'category'"> {{item.url.name}}</span> <span v-if="item.url.___type == 'category'"> {{ item.url.name }}</span>
<!-- 当选择完链接之后的店铺回调 --> <!-- 当选择完链接之后的店铺回调 -->
<span v-if="item.url.___type == 'shops'"> {{item.url.memberName}}</span> <span v-if="item.url.___type == 'shops'"> {{ item.url.memberName }}</span>
<!-- 当选择完链接之后的其他回调 --> <!-- 当选择完链接之后的其他回调 -->
<span v-if="item.url.___type == 'other'"> {{item.url.title}}</span> <span v-if="item.url.___type == 'other'"> {{ item.url.title }}</span>
<!-- 当选择完活动之后的其他回调 --> <!-- 当选择完活动之后的其他回调 -->
<span v-if="item.url.___type == 'marketing'"> <span v-if="item.url.___type == 'marketing'">
<span v-if="item.url.___promotion =='SECKILL'"> <span v-if="item.url.___promotion == 'SECKILL'"> </span>
秒杀 <span v-if="item.url.___promotion == 'FULL_DISCOUNT'"> </span>
</span> <span v-if="item.url.___promotion == 'PINTUAN'"> </span>
<span v-if="item.url.___promotion =='FULL_DISCOUNT'"> {{ item.url.title || item.url.goodsName }}
满减
</span>
<span v-if="item.url.___promotion =='PINTUAN'">
拼团
</span>
{{item.url.title || item.url.goodsName}}
</span> </span>
<!-- 当选择完活动之后的其他回调 --> <!-- 当选择完活动之后的其他回调 -->
<span v-if="item.url.___type == 'pages'"> {{item.url.title}}</span> <span v-if="item.url.___type == 'pages'"> {{ item.url.title }}</span>
</span> </span>
</div> </div>
<div> <div>
<Button ghost size="small" type="primary" @click="clickLink(item,index)"></Button> <Button ghost size="small" type="primary" @click="clickLink(item, index)"
>选择链接</Button
>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<Button v-if=" <Button
res.type != 'tpl_ad_list' && v-if="res.type != 'tpl_ad_list' && res.type != 'tpl_activity_list' && !res.notAdd"
res.type != 'tpl_activity_list' && type="primary"
!res.notAdd @click="addDecorate()"
" type="primary" @click="addDecorate()" ghost>添加</Button> ghost
>添加</Button
>
<liliDialog ref="liliDialog" @selectedLink="selectedLink" @selectedGoodsData="selectedGoodsData"></liliDialog> <liliDialog
ref="liliDialog"
@selectedLink="selectedLink"
@selectedGoodsData="selectedGoodsData"
></liliDialog>
<Modal width="1200px" v-model="picModelFlag"> <Modal width="1200px" v-model="picModelFlag">
<ossManage @callback="callbackSelected" ref="ossManage" /> <ossManage @callback="callbackSelected" ref="ossManage" />
@ -179,18 +219,17 @@ export default {
}, },
// //
selectedGoodsData(val) { selectedGoodsData(val) {
if (!val) return false; if (!val) return false;
let data = val.map((item) => { let data = val.map((item) => {
delete item.selected; delete item.selected;
delete item.intro delete item.intro;
delete item.mobileIntro delete item.mobileIntro;
return { return {
img: item.thumbnail, img: item.thumbnail,
title: item.goodsName, title: item.goodsName,
type: this.selectedGoods.title, type: this.selectedGoods.title,
___index:this.selectedGoods.___index, ___index: this.selectedGoods.___index,
...item ...item,
}; };
}); });
this.res.options.list[0].listWay.push(...data); this.res.options.list[0].listWay.push(...data);
@ -236,7 +275,7 @@ export default {
title: "标题", title: "标题",
link: "", link: "",
url: "", url: "",
size: this.res.options.list[0].size, size: this.res.options.list[0]?.size,
}; };
this.res.options.list.push(way); this.res.options.list.push(way);
}, },

View File

@ -3,7 +3,13 @@
<div class="model-title"> <div class="model-title">
<div>店铺装修</div> <div>店铺装修</div>
<div class="btns"> <div class="btns">
<Button @click="clickBtn(item)" size="small" v-for="(item, index) in way" :key="index" :type="item.selected ? 'primary' : ''"> <Button
@click="clickBtn(item)"
size="small"
v-for="(item, index) in way"
:key="index"
:type="item.selected ? 'primary' : ''"
>
{{ item.title }} {{ item.title }}
</Button> </Button>
</div> </div>
@ -18,7 +24,13 @@
</Poptip> --> </Poptip> -->
<Button size="default" type="primary" @click="handleSpinShow"></Button> <Button size="default" type="primary" @click="handleSpinShow"></Button>
<Modal title="保存中" v-model="saveDialog" :closable="true" :mask-closable="false" :footer-hide="true"> <Modal
title="保存中"
v-model="saveDialog"
:closable="true"
:mask-closable="false"
:footer-hide="true"
>
<div v-if="progress"> <div v-if="progress">
<div class="model-item"> <div class="model-item">
模板名称 <Input style="width: 200px" v-model="submitWay.name" /> 模板名称 <Input style="width: 200px" v-model="submitWay.name" />
@ -65,7 +77,7 @@ export default {
// selected: false, // selected: false,
// }, // },
], ],
submitWay: { submitWay: {
// //
pageShow: this.$route.query.type || false, pageShow: this.$route.query.type || false,
@ -99,7 +111,7 @@ export default {
return false; return false;
} }
this.submitWay.pageShow this.submitWay?.pageShow === true
? (this.submitWay.pageShow = "OPEN") ? (this.submitWay.pageShow = "OPEN")
: (this.submitWay.pageShow = "CLOSE"); : (this.submitWay.pageShow = "CLOSE");

View File

@ -2,7 +2,13 @@
<div class="search"> <div class="search">
<Card> <Card>
<Row @keydown.enter.native="handleSearch"> <Row @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70" class="search-form"> <Form
ref="searchForm"
:model="searchForm"
inline
:label-width="70"
class="search-form"
>
<Form-item label="订单编号" prop="orderSn"> <Form-item label="订单编号" prop="orderSn">
<Input <Input
type="text" type="text"
@ -22,7 +28,12 @@
/> />
</Form-item> </Form-item>
<Form-item label="售后状态"> <Form-item label="售后状态">
<Select v-model="searchForm.serviceStatus" placeholder="全部" clearable style="width: 200px"> <Select
v-model="searchForm.serviceStatus"
placeholder="全部"
clearable
style="width: 200px"
>
<Option value="APPLY">申请售后</Option> <Option value="APPLY">申请售后</Option>
<Option value="PASS">通过售后</Option> <Option value="PASS">通过售后</Option>
<Option value="REFUSE">拒绝售后</Option> <Option value="REFUSE">拒绝售后</Option>
@ -63,12 +74,23 @@
/> />
</Form-item> </Form-item>
<Form-item label="售后类型"> <Form-item label="售后类型">
<Select v-model="searchForm.serviceType" placeholder="全部" clearable style="width: 200px"> <Select
v-model="searchForm.serviceType"
placeholder="全部"
clearable
style="width: 200px"
>
<Option value="RETURN_MONEY">退款</Option> <Option value="RETURN_MONEY">退款</Option>
<Option value="RETURN_GOODS">退货</Option> <Option value="RETURN_GOODS">退货</Option>
</Select> </Select>
</Form-item> </Form-item>
<Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn">搜索</Button> <Button
@click="handleSearch"
type="primary"
icon="ios-search"
class="search-btn"
>搜索</Button
>
</Form> </Form>
</Row> </Row>
<Table <Table
@ -80,25 +102,36 @@
class="mt_10" class="mt_10"
> >
<!-- 商品栏目格式化 --> <!-- 商品栏目格式化 -->
<template slot="goodsSlot" slot-scope="{row}"> <template slot="goodsSlot" slot-scope="{ row }">
<div style="margin-top: 5px;height: 80px; display: flex;"> <div style="margin-top: 5px; height: 80px; display: flex">
<div style=""> <div style="">
<img :src="row.goodsImage" style="height: 60px;margin-top: 3px"> <img :src="row.goodsImage" style="height: 60px; margin-top: 3px" />
</div> </div>
<div style="margin-left: 13px;"> <div style="margin-left: 13px">
<div class="div-zoom"> <div class="div-zoom">
<a @click="linkTo(row.goodsId,row.skuId)">{{row.goodsName}}</a> <a @click="linkTo(row.goodsId, row.skuId)">{{ row.goodsName }}</a>
</div> </div>
<Poptip trigger="hover" title="扫码在手机中查看" transfer> <Poptip trigger="hover" title="扫码在手机中查看" transfer>
<div slot="content"> <div slot="content">
<vue-qr :text="wapLinkTo(row.goodsId,row.skuId)" :margin="0" colorDark="#000" colorLight="#fff" :size="150"></vue-qr> <vue-qr
:text="wapLinkTo(row.goodsId, row.skuId)"
:margin="0"
colorDark="#000"
colorLight="#fff"
:size="150"
></vue-qr>
</div> </div>
<img src="../../../assets/qrcode.svg" class="hover-pointer" width="20" height="20" alt=""> <img
src="../../../assets/qrcode.svg"
class="hover-pointer"
width="20"
height="20"
alt=""
/>
</Poptip> </Poptip>
</div> </div>
</div> </div>
</template> </template>
</Table> </Table>
<Row type="flex" justify="end" class="mt_10"> <Row type="flex" justify="end" class="mt_10">
@ -120,220 +153,220 @@
</template> </template>
<script> <script>
import * as API_Order from "@/api/order"; import * as API_Order from "@/api/order";
import vueQr from 'vue-qr' import vueQr from "vue-qr";
export default { export default {
name: "orderList", components: {
components: { "vue-qr": vueQr,
"vue-qr":vueQr },
}, name: "after-sale-order",
data() { data() {
return { return {
loading: true, // loading: true, //
searchForm: { searchForm: {
// //
pageNumber: 1, // pageNumber: 1, //
pageSize: 10, // pageSize: 10, //
sort: "createTime", // sort: "createTime", //
order: "desc", // order: "desc", //
startDate: "", // startDate: "", //
endDate: "", // endDate: "", //
orderSn: "", orderSn: "",
memberName: "", memberName: "",
serviceStatus: "", serviceStatus: "",
storeName:"", storeName: "",
sn: "", sn: "",
},
selectDate: null, //
form: {
//
sn: "",
storeName: "",
startTime: "",
endTime: "",
billPrice: "",
},
columns: [
{
title: "售后服务单号",
key: "sn",
minWidth: 140,
tooltip: true,
}, },
selectDate: null, // {
form: { title: "订单编号",
// key: "orderSn",
sn: "", minWidth: 120,
storeName: "", tooltip: true,
startTime: "",
endTime: "",
billPrice: "",
}, },
columns: [ {
{ title: "商品",
title: "售后服务单号", key: "goodsName",
key: "sn", minWidth: 300,
minWidth: 140, tooltip: true,
tooltip: true slot: "goodsSlot",
}, },
{ {
title: "订单编号", title: "会员名称",
key: "orderSn", key: "memberName",
minWidth: 120, width: 140,
tooltip: true },
}, {
{ title: "商家名称",
title: "商品", key: "storeName",
key: "goodsName", minWidth: 100,
minWidth: 300, tooltip: true,
tooltip: true, },
slot: "goodsSlot", {
}, title: "售后金额",
{ key: "applyRefundPrice",
title: "会员名称", width: 110,
key: "memberName", render: (h, params) => {
width: 140, if (params.row.applyRefundPrice == null) {
}, return h("div", this.$options.filters.unitPrice(0, "¥"));
{ } else {
title: "商家名称", return h(
key: "storeName", "div",
minWidth: 100, this.$options.filters.unitPrice(params.row.applyRefundPrice, "¥")
tooltip: true );
},
{
title: "售后金额",
key: "applyRefundPrice",
width: 110,
render: (h, params) => {
if(params.row.applyRefundPrice == null){
return h(
"div",
this.$options.filters.unitPrice(0, "¥")
);
}else{
return h(
"div",
this.$options.filters.unitPrice(params.row.applyRefundPrice, "¥")
);
}
},
},
{
title: "售后类型",
key: "serviceType",
width: 100,
render: (h, params) => {
if (params.row.serviceType == "RETURN_MONEY") {
return h('div', [h('tag', {props: {color: "blue"}}, '退款'),]);
} else if (params.row.serviceType == "RETURN_GOODS") {
return h('div', [h('tag', {props: {color: "volcano"}}, '退货'),]);
} else if (params.row.serviceType == "EXCHANGE_GOODS") {
return h('div', [h('tag', {props: {color: "green"}}, '换货'),]);
}
} }
}, },
},
{ {
title: "售后状态", title: "售后类型",
key: "serviceStatus", key: "serviceType",
width: 200, width: 100,
render: (h, params) => { render: (h, params) => {
if (params.row.serviceStatus == "APPLY") { if (params.row.serviceType == "RETURN_MONEY") {
return h('div', [h('tag', {props: {color: "blue"}}, '申请中'),]); return h("div", [h("tag", { props: { color: "blue" } }, "退款")]);
} else if (params.row.serviceStatus == "PASS") { } else if (params.row.serviceType == "RETURN_GOODS") {
return h('div', [h('tag', {props: {color: "cyan"}}, '通过售后'),]); return h("div", [h("tag", { props: { color: "volcano" } }, "退货")]);
} else if (params.row.serviceStatus == "REFUSE") { } else if (params.row.serviceType == "EXCHANGE_GOODS") {
return h('div', [h('tag', {props: {color: "volcano"}}, '拒绝售后'),]); return h("div", [h("tag", { props: { color: "green" } }, "换货")]);
} else if (params.row.serviceStatus == "BUYER_RETURN") {
return h('div', [h('tag', {props: {color: "orange"}}, '买家退货,待卖家收货'),]);
} else if (params.row.serviceStatus == "SELLER_CONFIRM") {
return h('div', [h('tag', {props: {color: "gold"}}, '卖家确认收货'),]);
} else if (params.row.serviceStatus == "SELLER_TERMINATION") {
return h('div', [h('tag', {props: {color: "lime"}}, '卖家终止售后'),]);
} else if (params.row.serviceStatus == "BUYER_CANCEL") {
return h('div', [h('tag', {props: {color: "purple"}}, '买家取消售后'),]);
} else if (params.row.serviceStatus == "COMPLETE") {
return h('div', [h('tag', {props: {color: "green"}}, '完成售后'),]);
}else if (params.row.serviceStatus == "WAIT_REFUND") {
return h('div', [h('tag', {props: {color: "geekblue"}}, '待平台退款'),]);
}
} }
}, },
},
{ {
title: "操作", title: "售后状态",
key: "action", key: "serviceStatus",
fixed: "right", width: 150,
align: "center", render: (h, params) => {
width: 100, if (params.row.serviceStatus == "APPLY") {
render: (h, params) => { return h("div", [h("tag", { props: { color: "blue" } }, "申请中")]);
} else if (params.row.serviceStatus == "PASS") {
return h("div", [h("tag", { props: { color: "cyan" } }, "通过售后")]);
} else if (params.row.serviceStatus == "REFUSE") {
return h("div", [h("tag", { props: { color: "volcano" } }, "拒绝售后")]);
} else if (params.row.serviceStatus == "BUYER_RETURN") {
return h("div", [ return h("div", [
h( h("tag", { props: { color: "orange" } }, "买家退货,待卖家收货"),
"Button", ]);
{ } else if (params.row.serviceStatus == "SELLER_CONFIRM") {
props: { return h("div", [h("tag", { props: { color: "gold" } }, "卖家确认收货")]);
type: "info", } else if (params.row.serviceStatus == "SELLER_TERMINATION") {
size: "small", return h("div", [h("tag", { props: { color: "lime" } }, "卖家终止售后")]);
}, } else if (params.row.serviceStatus == "BUYER_CANCEL") {
style: { return h("div", [h("tag", { props: { color: "purple" } }, "买家取消售后")]);
marginRight: "5px", } else if (params.row.serviceStatus == "COMPLETE") {
}, return h("div", [h("tag", { props: { color: "green" } }, "完成售后")]);
on: { } else if (params.row.serviceStatus == "WAIT_REFUND") {
click: () => { return h("div", [h("tag", { props: { color: "geekblue" } }, "待平台退款")]);
this.detail(params.row); }
}, },
},
{
title: "申请时间",
key: "createTime",
width: 180,
},
{
title: "操作",
key: "action",
fixed: "right",
align: "center",
width: 100,
render: (h, params) => {
return h("div", [
h(
"Button",
{
props: {
type: "info",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
this.detail(params.row);
}, },
}, },
"查看" },
), "查看"
]); ),
}, ]);
}, },
], },
data: [], // ],
total: 0, // data: [], //
}; total: 0, //
};
},
methods: {
//
init() {
this.getDataList();
}, },
methods: { //
// changePage(v) {
init() { this.searchForm.pageNumber = v;
this.getDataList(); this.getDataList();
}, },
// //
changePage(v) { changePageSize(v) {
this.searchForm.pageNumber = v; this.searchForm.pageNumber = 1;
this.getDataList(); this.searchForm.pageSize = v;
}, this.getDataList();
// },
changePageSize(v) { //
this.searchForm.pageNumber = 1; handleSearch() {
this.searchForm.pageSize = v; this.searchForm.pageNumber = 1;
this.getDataList(); this.searchForm.pageSize = 10;
}, this.getDataList();
// },
handleSearch() { //
this.searchForm.pageNumber = 1; selectDateRange(v) {
this.searchForm.pageSize = 10; if (v) {
this.getDataList(); this.searchForm.startDate = v[0];
}, this.searchForm.endDate = v[1];
// }
selectDateRange(v) { },
if (v) { //
this.searchForm.startDate = v[0]; getDataList() {
this.searchForm.endDate = v[1]; this.loading = true;
} API_Order.getAfterSaleOrderPage(this.searchForm).then((res) => {
},
//
getDataList() {
this.loading = true;
API_Order.getAfterSaleOrderPage(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.records;
this.total = res.result.total;
}
});
this.total = this.data.length;
this.loading = false; this.loading = false;
}, if (res.success) {
// this.data = res.result.records;
detail(v) { this.total = res.result.total;
let sn = v.sn; }
this.$router.push({ });
name: "after-order-detail", this.total = this.data.length;
query: {sn: sn}, this.loading = false;
});
},
}, },
mounted() { //
this.init(); detail(v) {
let sn = v.sn;
this.$router.push({
name: "after-order-detail",
query: { sn: sn },
});
}, },
}; },
mounted() {
this.init();
},
};
</script> </script>

View File

@ -7,56 +7,54 @@
<h3>退货申请</h3> <h3>退货申请</h3>
<dl> <dl>
<dt>退货状态</dt> <dt>退货状态</dt>
<dd>{{afterSaleInfo.serviceName}}</dd> <dd>{{ afterSaleInfo.serviceName }}</dd>
</dl> </dl>
<dl> <dl>
<dt>退货退款编号</dt> <dt>退货退款编号</dt>
<dd>{{afterSaleInfo.sn}}</dd> <dd>{{ afterSaleInfo.sn }}</dd>
</dl> </dl>
<dl> <dl>
<dt>退货退款原因</dt> <dt>退货退款原因</dt>
<dd>{{afterSaleInfo.reason}}</dd> <dd>{{ afterSaleInfo.reason }}</dd>
</dl> </dl>
<dl> <dl>
<dt>申请退款金额</dt> <dt>申请退款金额</dt>
<dd>{{afterSaleInfo.applyRefundPrice | unitPrice}}</dd> <dd>{{ afterSaleInfo.applyRefundPrice | unitPrice }}</dd>
</dl> </dl>
<dl v-if="afterSaleInfo.actualRefundPrice"> <dl v-if="afterSaleInfo.actualRefundPrice">
<dt>实际退款金额</dt> <dt>实际退款金额</dt>
<dd>{{afterSaleInfo.actualRefundPrice | unitPrice}}</dd> <dd>{{ afterSaleInfo.actualRefundPrice | unitPrice }}</dd>
</dl> </dl>
<dl v-if="afterSaleInfo.refundPoint"> <dl v-if="afterSaleInfo.refundPoint">
<dt>退还积分</dt> <dt>退还积分</dt>
<dd>{{afterSaleInfo.refundPoint}}</dd> <dd>{{ afterSaleInfo.refundPoint }}</dd>
</dl> </dl>
<dl> <dl>
<dt>退货数量</dt> <dt>退货数量</dt>
<dd>{{afterSaleInfo.num}}</dd> <dd>{{ afterSaleInfo.num }}</dd>
</dl> </dl>
<dl> <dl>
<dt>问题描述</dt> <dt>问题描述</dt>
<dd>{{afterSaleInfo.problemDesc}}</dd> <dd>{{ afterSaleInfo.problemDesc }}</dd>
</dl> </dl>
<dl> <dl>
<dt>凭证</dt> <dt>凭证</dt>
<dd v-if="afterSaleImage == ''"> <dd v-if="afterSaleImage == ''"></dd>
暂无凭证
</dd>
<dd v-else> <dd v-else>
<div class="div-img" v-for="(item, index) in afterSaleImage" :key="index"> <div class="div-img" v-for="(item, index) in afterSaleImage" :key="index">
<img class="complain-img" :src=item> <img class="complain-img" :src="item" />
</div> </div>
</dd> </dd>
</dl> </dl>
</div> </div>
<div class="div-form-default" v-if="afterSaleInfo.serviceStatus=='APPLY'"> <div class="div-form-default" v-if="afterSaleInfo.serviceStatus == 'APPLY'">
<h3>处理意见</h3> <h3>处理意见</h3>
<dl> <dl>
<dt>商家</dt> <dt>商家</dt>
<dd> <dd>
<div class="div-content"> <div class="div-content">
{{afterSaleInfo.storeName}} {{ afterSaleInfo.storeName }}
</div> </div>
</dd> </dd>
</dl> </dl>
@ -64,7 +62,11 @@
<dt>是否同意</dt> <dt>是否同意</dt>
<dd> <dd>
<div class="div-content"> <div class="div-content">
<RadioGroup type="button" button-style="solid" v-model="params.serviceStatus"> <RadioGroup
type="button"
button-style="solid"
v-model="params.serviceStatus"
>
<Radio label="PASS"> <Radio label="PASS">
<span>同意</span> <span>同意</span>
</Radio> </Radio>
@ -77,37 +79,49 @@
</dl> </dl>
<dl> <dl>
<dt>申请退款金额</dt> <dt>申请退款金额</dt>
<dd>{{ afterSaleInfo.applyRefundPrice | unitPrice('¥') }}</dd> <dd>{{ afterSaleInfo.applyRefundPrice | unitPrice("¥") }}</dd>
</dl> </dl>
<dl> <dl>
<dt>实际退款金额</dt> <dt>实际退款金额</dt>
<dd> <dd>
<Input v-model="params.actualRefundPrice" style="width:260px" /> <Input v-model="params.actualRefundPrice" style="width: 260px" />
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>备注信息</dt> <dt>备注信息</dt>
<dd> <dd>
<Input v-model="params.remark" type="textarea" maxlength="200" :rows="4" clearable style="width:260px" /> <Input
v-model="params.remark"
type="textarea"
maxlength="200"
:rows="4"
clearable
style="width: 260px"
/>
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dd> <dd>
<div style="text-align: right;width: 45%;margin-top: 10px"> <div style="text-align: right; width: 45%; margin-top: 10px">
<Button type="primary" :loading="submitLoading" @click="handleSubmit" style="margin-left: 5px"> <Button
type="primary"
:loading="submitLoading"
@click="handleSubmit"
style="margin-left: 5px"
>
确定 确定
</Button> </Button>
</div> </div>
</dd> </dd>
</dl> </dl>
</div> </div>
<div class="div-form-default" v-if="afterSaleInfo.serviceStatus !='APPLY'"> <div class="div-form-default" v-if="afterSaleInfo.serviceStatus != 'APPLY'">
<h3>商家处理</h3> <h3>商家处理</h3>
<dl> <dl>
<dt>商家</dt> <dt>商家</dt>
<dd> <dd>
<div class="div-content"> <div class="div-content">
{{afterSaleInfo.storeName}} {{ afterSaleInfo.storeName }}
</div> </div>
</dd> </dd>
</dl> </dl>
@ -128,139 +142,176 @@
<dl> <dl>
<dt>备注信息</dt> <dt>备注信息</dt>
<dd> <dd>
{{afterSaleInfo.auditRemark || '暂无备注信息'}} {{ afterSaleInfo.auditRemark || "暂无备注信息" }}
</dd> </dd>
</dl> </dl>
</div> </div>
</div> </div>
<div class="div-flow-center"> <div class="div-flow-center"></div>
</div>
<div class="div-flow-right"> <div class="div-flow-right">
<div class="div-form-default"> <div class="div-form-default">
<h3>相关商品交易信息</h3> <h3>相关商品交易信息</h3>
<dl> <dl>
<dt> <dt>
<img :src="afterSaleInfo.goodsImage" height="60px"> <img :src="afterSaleInfo.goodsImage" height="60px" />
</dt> </dt>
<dd> <dd>
<div class="div-zoom"> <div class="div-zoom">
<a @click="linkTo(afterSaleInfo.goodsId,afterSaleInfo.skuId)">{{afterSaleInfo.goodsName}}</a> <a @click="linkTo(afterSaleInfo.goodsId, afterSaleInfo.skuId)">{{
afterSaleInfo.goodsName
}}</a>
<Poptip trigger="hover" title="扫码在手机中查看" transfer> <Poptip trigger="hover" title="扫码在手机中查看" transfer>
<div slot="content"> <div slot="content">
<vue-qr :text="wapLinkTo(afterSaleInfo.goodsId,afterSaleInfo.skuId)" :margin="0" colorDark="#000" colorLight="#fff" :size="150"></vue-qr> <vue-qr
:text="wapLinkTo(afterSaleInfo.goodsId, afterSaleInfo.skuId)"
:margin="0"
colorDark="#000"
colorLight="#fff"
:size="150"
></vue-qr>
</div> </div>
<img src="../../../assets/qrcode.svg" style="vertical-align:middle" class="hover-pointer ml_10" width="20" height="20" alt=""> <img
src="../../../assets/qrcode.svg"
style="vertical-align: middle"
class="hover-pointer ml_10"
width="20"
height="20"
alt=""
/>
</Poptip> </Poptip>
</div> </div>
<div style="color:#999;font-size:10px">数量x{{afterSaleInfo.num}}</div> <div style="color: #999; font-size: 10px">
数量x{{ afterSaleInfo.num }}
</div>
</dd> </dd>
</dl> </dl>
</div> </div>
<div class="div-form-default"> <div class="div-form-default">
<h3>订单相关信息</h3> <h3>订单相关信息</h3>
<dl> <dl>
<dt> <dt>订单编号</dt>
订单编号
</dt>
<dd> <dd>
{{afterSaleInfo.orderSn}} {{ afterSaleInfo.orderSn }}
</dd> </dd>
</dl> </dl>
<dl v-if="afterSaleInfo.bankDepositName"> <dl v-if="afterSaleInfo.bankDepositName">
<dt>银行开户行</dt> <dt>银行开户行</dt>
<dd> <dd>
{{afterSaleInfo.bankDepositName}} {{ afterSaleInfo.bankDepositName }}
</dd> </dd>
</dl> </dl>
<dl v-if="afterSaleInfo.bankAccountName"> <dl v-if="afterSaleInfo.bankAccountName">
<dt>银行开户名</dt> <dt>银行开户名</dt>
<dd> <dd>
{{afterSaleInfo.bankAccountName}} {{ afterSaleInfo.bankAccountName }}
</dd> </dd>
</dl> </dl>
<dl v-if="afterSaleInfo.bankAccountNumber"> <dl v-if="afterSaleInfo.bankAccountNumber">
<dt>银行卡号</dt> <dt>银行卡号</dt>
<dd> <dd>
{{afterSaleInfo.bankAccountNumber}} {{ afterSaleInfo.bankAccountNumber }}
</dd> </dd>
</dl> </dl>
</div> </div>
<div class="div-form-default" v-if="afterSaleInfo.afterSaleAllowOperationVO && afterSaleInfo.afterSaleAllowOperationVO.refund"> <div
class="div-form-default"
v-if="
afterSaleInfo.afterSaleAllowOperationVO &&
afterSaleInfo.afterSaleAllowOperationVO.refund
"
>
<h3>平台退款</h3> <h3>平台退款</h3>
<dl> <dl>
<dt>银行开户行</dt> <dt>银行开户行</dt>
<dd> <dd>
{{afterSaleInfo.bankDepositName}} {{ afterSaleInfo.bankDepositName }}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>银行开户名</dt> <dt>银行开户名</dt>
<dd> <dd>
{{afterSaleInfo.bankAccountName}} {{ afterSaleInfo.bankAccountName }}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>银行卡号</dt> <dt>银行卡号</dt>
<dd> <dd>
{{afterSaleInfo.bankAccountNumber}} {{ afterSaleInfo.bankAccountNumber }}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>备注信息</dt> <dt>备注信息</dt>
<dd> <dd>
<Input v-model="refundPriceForm.remark" type="textarea" maxlength="200" :rows="4" clearable style="width:260px" /> <Input
v-model="refundPriceForm.remark"
type="textarea"
maxlength="200"
:rows="4"
clearable
style="width: 260px"
/>
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>操作</dt> <dt>操作</dt>
<dd> <dd>
<Button type="primary" :loading="submitLoading" @click="refundPriceSubmit" style="margin-left: 5px"> <Button
type="primary"
:loading="submitLoading"
@click="refundPriceSubmit"
style="margin-left: 5px"
>
退款 退款
</Button> </Button>
</dd> </dd>
</dl> </dl>
</div> </div>
<div class="div-form-default" v-if="afterSaleInfo.showDelivery && afterSaleInfo.serviceType ==='RETURN_GOODS'"> <div
class="div-form-default"
v-if="
afterSaleInfo.showDelivery && afterSaleInfo.serviceType === 'RETURN_GOODS'
"
>
<h3>物流信息</h3> <h3>物流信息</h3>
<dl> <dl>
<dt>收货商家</dt> <dt>收货商家</dt>
<dd>{{afterSaleInfo.storeName}}</dd> <dd>{{ afterSaleInfo.storeName }}</dd>
</dl> </dl>
<dl> <dl>
<dt>收货商家手机</dt> <dt>收货商家手机</dt>
<dd>{{storeMsg.salesConsigneeMobile}}</dd> <dd>{{ storeMsg.salesConsigneeMobile }}</dd>
</dl> </dl>
<dl> <dl>
<dt>收货地址</dt> <dt>收货地址</dt>
<dd>{{storeMsg.salesConsigneeAddressPath}} {{storeMsg.salesConsigneeDetail}}</dd> <dd>
{{ storeMsg.salesConsigneeAddressPath }}
{{ storeMsg.salesConsigneeDetail }}
</dd>
</dl> </dl>
<dl> <dl>
<dt>物流公司</dt> <dt>物流公司</dt>
<dd>{{afterSaleInfo.mlogisticsName}}</dd> <dd>{{ afterSaleInfo.mlogisticsName }}</dd>
</dl> </dl>
<dl> <dl>
<dt> <dt>物流单号</dt>
物流单号
</dt>
<dd> <dd>
{{afterSaleInfo.mlogisticsNo}} {{ afterSaleInfo.mlogisticsNo }}
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>操作</dt> <dt>操作</dt>
<dd> <dd>
<Button type="info" :loading="submitLoading" @click="logisticsSeller()" style="margin-left: 5px"> <Button
type="info"
:loading="submitLoading"
@click="logisticsSeller()"
style="margin-left: 5px"
>
查询物流 查询物流
</Button> </Button>
</dd> </dd>
</dl> </dl>
</div> </div>
</div> </div>
</div> </div>
</Card> </Card>
@ -273,33 +324,32 @@
<dl> <dl>
<dt>售后单号</dt> <dt>售后单号</dt>
<dd> <dd>
<div class="text-box">{{sn}}</div> <div class="text-box">{{ sn }}</div>
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>物流公司</dt> <dt>物流公司</dt>
<dd> <dd>
<div class="text-box">{{afterSaleInfo.mlogisticsName}}</div> <div class="text-box">{{ afterSaleInfo.mlogisticsName }}</div>
</dd> </dd>
</dl> </dl>
<dl> <dl>
<dt>快递单号</dt> <dt>快递单号</dt>
<dd> <dd>
<div class="text-box">{{afterSaleInfo.mlogisticsNo}}</div> <div class="text-box">{{ afterSaleInfo.mlogisticsNo }}</div>
</dd> </dd>
</dl> </dl>
<div class="div-express-log"> <div class="div-express-log">
<ul class="express-log"> <ul class="express-log">
<template v-if="Object.keys(logisticsInfo).length"> <template v-if="Object.keys(logisticsInfo).length">
<li v-for="(item,index) in logisticsInfo.traces" :key="index"> <li v-for="(item, index) in logisticsInfo.traces" :key="index">
<span class="time">{{item.AcceptTime}}</span> <span class="time">{{ item.AcceptTime }}</span>
<span class="detail">{{item.AcceptStation}}</span> <span class="detail">{{ item.AcceptStation }}</span>
</li> </li>
</template> </template>
<template v-else> <template v-else>
<li style="text-align:center;">暂无物流信息</li> <li style="text-align: center">暂无物流信息</li>
</template> </template>
</ul> </ul>
</div> </div>
</div> </div>
@ -312,14 +362,17 @@
<script> <script>
import * as API_Order from "@/api/order"; import * as API_Order from "@/api/order";
import vueQr from "vue-qr";
export default { export default {
components: {
"vue-qr": vueQr,
},
name: "orderDetail", name: "orderDetail",
data() { data() {
return { return {
sn: "", // sn: "", //
logisticsModal: false, // logisticsModal: false, //
logisticsInfo: {}, // logisticsInfo: {}, //
afterSaleInfo: {}, // afterSaleInfo: {}, //
afterSaleImage: [], // afterSaleImage: [], //
@ -334,44 +387,45 @@ export default {
refundPriceForm: { refundPriceForm: {
remark: "", remark: "",
}, },
afterSaleStatusList: [ // afterSaleStatusList: [
//
{ {
name: '申请中', name: "申请中",
status: 'APPLY' status: "APPLY",
}, },
{ {
name: '通过', name: "通过",
status: 'PASS' status: "PASS",
}, },
{ {
name: '拒绝', name: "拒绝",
status: 'REFUSE' status: "REFUSE",
}, },
{ {
name: '买家退货,待卖家收货', name: "买家退货,待卖家收货",
status: 'BUYER_RETURN' status: "BUYER_RETURN",
}, },
{ {
name: '卖家确认收货', name: "卖家确认收货",
status: 'SELLER_CONFIRM' status: "SELLER_CONFIRM",
}, },
{ {
name: '卖家终止售后', name: "卖家终止售后",
status: 'SELLER_TERMINATION' status: "SELLER_TERMINATION",
}, },
{ {
name: '买家取消售后', name: "买家取消售后",
status: 'BUYER_CANCEL' status: "BUYER_CANCEL",
}, },
{ {
name: '完成售后', name: "完成售后",
status: 'COMPLETE' status: "COMPLETE",
}, },
{ {
name: '等待平台退款', name: "等待平台退款",
status: 'WAIT_REFUND' status: "WAIT_REFUND",
} },
] ],
}; };
}, },
methods: { methods: {
@ -382,13 +436,19 @@ export default {
this.loading = false; this.loading = false;
if (res.success) { if (res.success) {
this.afterSaleInfo = res.result; this.afterSaleInfo = res.result;
this.afterSaleInfo.showDelivery = this.showDelivery(this.afterSaleInfo.serviceStatus) this.afterSaleInfo.showDelivery = this.showDelivery(
this.afterSaleInfo.serviceName = this.filterOrderStatus(this.afterSaleInfo.serviceStatus) this.afterSaleInfo.serviceStatus
);
this.afterSaleInfo.serviceName = this.filterOrderStatus(
this.afterSaleInfo.serviceStatus
);
this.afterSaleImage = (res.result.afterSaleImage || "").split(","); this.afterSaleImage = (res.result.afterSaleImage || "").split(",");
//退 //退
if (this.afterSaleInfo.mconsigneeAddressPath) if (this.afterSaleInfo.mconsigneeAddressPath)
this.afterSaleInfo.mconsigneeAddressPath = this.afterSaleInfo.mconsigneeAddressPath = this.afterSaleInfo.mconsigneeAddressPath.replaceAll(
this.afterSaleInfo.mconsigneeAddressPath.replaceAll(",", " "); ",",
" "
);
this.$set( this.$set(
this.params, this.params,
@ -397,15 +457,17 @@ export default {
); );
// //
if (this.afterSaleInfo.showDelivery) { if (this.afterSaleInfo.showDelivery) {
API_Order.storeAddress(this.sn).then(resu => { API_Order.storeAddress(this.sn).then((resu) => {
if(resu.success) { if (resu.success) {
const obj = resu.result const obj = resu.result;
obj.salesConsigneeAddressPath = obj.salesConsigneeAddressPath.replaceAll(',', '') obj.salesConsigneeAddressPath = obj.salesConsigneeAddressPath.replaceAll(
",",
""
);
this.storeMsg = obj; this.storeMsg = obj;
} }
}) });
} }
} }
}); });
}, },
@ -462,21 +524,24 @@ export default {
} }
}); });
}, },
filterOrderStatus (status) { // filterOrderStatus(status) {
const ob = this.afterSaleStatusList.filter(e => { return e.status === status }); //
return ob[0].name const ob = this.afterSaleStatusList.filter((e) => {
return e.status === status;
});
return ob[0].name;
}, },
// //
showDelivery (status) { showDelivery(status) {
let flag = false; let flag = false;
this.afterSaleStatusList.forEach((e,index) => { this.afterSaleStatusList.forEach((e, index) => {
// 退 // 退
if(e.status === status && index>=3 && index !==6) { if (e.status === status && index >= 3 && index !== 6) {
flag = true flag = true;
} }
}) });
return flag return flag;
} },
}, },
mounted() { mounted() {
this.sn = this.$route.query.sn; this.sn = this.$route.query.sn;
@ -484,7 +549,7 @@ export default {
}, },
}; };
</script> </script>
<style lang="scss" > <style lang="scss">
.ivu-col { .ivu-col {
width: 100% !important; width: 100% !important;
} }

View File

@ -4,9 +4,22 @@
<Card style="height: 60px"> <Card style="height: 60px">
<div style=""> <div style="">
<Button v-if="allowOperation.editPrice" @click="modifyPrice"></Button> <Button v-if="allowOperation.editPrice" @click="modifyPrice"></Button>
<Button v-if="allowOperation.editConsignee" @click="editAddress" type="primary" ghost>修改收货地址</Button> <Button
<Button v-if="allowOperation.cancel" @click="orderCancel" type="warning" ghost>订单取消</Button> v-if="allowOperation.editConsignee"
<Button v-if="orderInfo.order.orderStatus === 'UNPAID'" @click="confirmPrice" type="primary"></Button> @click="editAddress"
type="primary"
ghost
>修改收货地址</Button
>
<Button v-if="allowOperation.cancel" @click="orderCancel" type="warning" ghost
>订单取消</Button
>
<Button
v-if="orderInfo.order.orderStatus === 'UNPAID'"
@click="confirmPrice"
type="primary"
>收款</Button
>
<Button @click="orderLog" type="info" ghost>订单日志</Button> <Button @click="orderLog" type="info" ghost>订单日志</Button>
</div> </div>
</Card> </Card>
@ -45,21 +58,30 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票抬头</div> <div class="div-item-left">发票抬头</div>
<div class="div-item-right">{{ <div class="div-item-right">
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : '暂无' {{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : "暂无"
}} }}
</div> </div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true && orderInfo.receipt.taxpayerId"> <div
class="div-item"
v-if="orderInfo.order.needReceipt == true && orderInfo.receipt.taxpayerId"
>
<div class="div-item-left">发票税号</div> <div class="div-item-left">发票税号</div>
<div class="div-item-right">{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : '暂无' }}</div> <div class="div-item-right">
{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : "暂无" }}
</div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票内容</div> <div class="div-item-left">发票内容</div>
<div class="div-item-right">{{ <div class="div-item-right">
orderInfo.receipt.receiptContent ? orderInfo.receipt.receiptContent : '暂无' {{
orderInfo.receipt.receiptContent
? orderInfo.receipt.receiptContent
: "暂无"
}} }}
</div> </div>
</div> </div>
@ -67,13 +89,19 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票金额</div> <div class="div-item-left">发票金额</div>
<div class="div-item-right"> <div class="div-item-right">
{{ orderInfo.receipt.receiptPrice ? orderInfo.receipt.receiptPrice : '暂无' | unitPrice('¥') }} {{
orderInfo.receipt.receiptPrice
? orderInfo.receipt.receiptPrice
: "暂无" | unitPrice("¥")
}}
</div> </div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">是否开票</div> <div class="div-item-left">是否开票</div>
<div class="div-item-right">{{ orderInfo.receipt.receiptStatus == 0 ? '未开' : '已开' }}</div> <div class="div-item-right">
{{ orderInfo.receipt.receiptStatus == 0 ? "未开" : "已开" }}
</div>
</div> </div>
</div> </div>
<div style="width: 36%; float: left"> <div style="width: 36%; float: left">
@ -105,21 +133,30 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票抬头</div> <div class="div-item-left">发票抬头</div>
<div class="div-item-right">{{ <div class="div-item-right">
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : '暂无' {{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : "暂无"
}} }}
</div> </div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true && orderInfo.receipt.taxpayerId"> <div
class="div-item"
v-if="orderInfo.order.needReceipt == true && orderInfo.receipt.taxpayerId"
>
<div class="div-item-left">发票税号</div> <div class="div-item-left">发票税号</div>
<div class="div-item-right">{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : '暂无' }}</div> <div class="div-item-right">
{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : "暂无" }}
</div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票内容</div> <div class="div-item-left">发票内容</div>
<div class="div-item-right">{{ <div class="div-item-right">
orderInfo.receipt.receiptContent ? orderInfo.receipt.receiptContent : '暂无' {{
orderInfo.receipt.receiptContent
? orderInfo.receipt.receiptContent
: "暂无"
}} }}
</div> </div>
</div> </div>
@ -127,13 +164,19 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票金额</div> <div class="div-item-left">发票金额</div>
<div class="div-item-right"> <div class="div-item-right">
{{ orderInfo.receipt.receiptPrice ? orderInfo.receipt.receiptPrice : '暂无' | unitPrice('¥') }} {{
orderInfo.receipt.receiptPrice
? orderInfo.receipt.receiptPrice
: "暂无" | unitPrice("¥")
}}
</div> </div>
</div> </div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true"> <div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">是否开票</div> <div class="div-item-left">是否开票</div>
<div class="div-item-right">{{ orderInfo.receipt.receiptStatus == 0 ? '未开' : '已开' }}</div> <div class="div-item-right">
{{ orderInfo.receipt.receiptStatus == 0 ? "未开" : "已开" }}
</div>
</div> </div>
<div class="div-item"> <div class="div-item">
@ -145,29 +188,55 @@
</div> </div>
</Card> </Card>
<Card class="mt_10"> <Card class="mt_10">
<Table :loading="loading" border :columns="columns" :data="data" ref="table" sortable="custom"> <Table
:loading="loading"
border
:columns="columns"
:data="data"
ref="table"
sortable="custom"
>
<!-- 商品栏目格式化 --> <!-- 商品栏目格式化 -->
<template slot="goodsSlot" slot-scope="{row}"> <template slot="goodsSlot" slot-scope="{ row }">
<div style="margin-top: 5px; height: 80px; display: flex"> <div style="margin-top: 5px; height: 80px; display: flex">
<div style=""> <div style="">
<img :src="row.image" style="height: 60px; margin-top: 1px; width: 60px" /> <img
:src="row.image"
style="height: 60px; margin-top: 1px; width: 60px"
/>
</div> </div>
<div style="margin-left: 13px"> <div style="margin-left: 13px">
<div class="div-zoom"> <div class="div-zoom">
<a @click="linkTo(row.goodsId,row.skuId)">{{ row.goodsName }}</a> <a @click="linkTo(row.goodsId, row.skuId)">{{ row.goodsName }}</a>
</div> </div>
<span v-for="(item, key) in JSON.parse(row.specs)" :key="key"> <span v-for="(item, key) in JSON.parse(row.specs)" :key="key">
<span v-show="key!='images'" style="font-size: 12px;color: #999999;"> <span v-show="key != 'images'" style="font-size: 12px; color: #999999">
{{ key }} : {{ item }} {{ key }} : {{ item }}
</span> </span>
</span> </span>
<Poptip trigger="hover" style="display: block;" title="扫码在手机中查看" transfer> <Poptip
trigger="hover"
style="display: block"
title="扫码在手机中查看"
transfer
>
<div slot="content"> <div slot="content">
<vue-qr :text="wapLinkTo(row.goodsId,row.skuId)" :margin="0" colorDark="#000" colorLight="#fff" <vue-qr
:size="150"></vue-qr> :text="wapLinkTo(row.goodsId, row.skuId)"
:margin="0"
colorDark="#000"
colorLight="#fff"
:size="150"
></vue-qr>
</div> </div>
<img src="../../../assets/qrcode.svg" class="hover-pointer" width="20" height="20" alt=""> <img
src="../../../assets/qrcode.svg"
class="hover-pointer"
width="20"
height="20"
alt=""
/>
</Poptip> </Poptip>
</div> </div>
</div> </div>
@ -177,32 +246,56 @@
<ul> <ul>
<li> <li>
<span class="label">商品总额</span> <span class="label">商品总额</span>
<span class="txt">{{ orderInfo.order.priceDetailDTO.goodsPrice | unitPrice('¥') }}</span> <span class="txt">{{
orderInfo.order.priceDetailDTO.goodsPrice | unitPrice("¥")
}}</span>
</li> </li>
<li v-if="orderInfo.order.priceDetailDTO.discountPrice && orderInfo.order.priceDetailDTO.discountPrice > 0"> <li
v-if="
orderInfo.order.priceDetailDTO.discountPrice &&
orderInfo.order.priceDetailDTO.discountPrice > 0
"
>
<span class="label">优惠金额</span> <span class="label">优惠金额</span>
<span class="txt"> {{ orderInfo.order.priceDetailDTO.discountPrice | unitPrice('¥') }} </span> <span class="txt">
{{ orderInfo.order.priceDetailDTO.discountPrice | unitPrice("¥") }}
</span>
</li> </li>
<li v-if="orderInfo.order.priceDetailDTO.couponPrice && orderInfo.order.priceDetailDTO.couponPrice > 0"> <li
v-if="
orderInfo.order.priceDetailDTO.couponPrice &&
orderInfo.order.priceDetailDTO.couponPrice > 0
"
>
<span class="label">优惠券金额</span> <span class="label">优惠券金额</span>
<span class="txt"> {{ orderInfo.order.priceDetailDTO.couponPrice | unitPrice('¥') }} </span> <span class="txt">
{{ orderInfo.order.priceDetailDTO.couponPrice | unitPrice("¥") }}
</span>
</li> </li>
<li> <li>
<span class="label">运费</span> <span class="label">运费</span>
<span class="txt">{{ orderInfo.order.freightPrice | unitPrice('¥') }}</span> <span class="txt">{{
orderInfo.order.freightPrice | unitPrice("¥")
}}</span>
</li> </li>
<li v-if="orderInfo.order.priceDetailDTO.updatePrice"> <li v-if="orderInfo.order.priceDetailDTO.updatePrice">
<span class="label">修改金额</span> <span class="label">修改金额</span>
<span class="txt theme_color">¥{{ orderInfo.order.priceDetailDTO.updatePrice | unitPrice }}</span> <span class="txt theme_color"
>¥{{ orderInfo.order.priceDetailDTO.updatePrice | unitPrice }}</span
>
</li> </li>
<li v-if="orderInfo.order.priceDetailDTO.payPoint != 0"> <li v-if="orderInfo.order.priceDetailDTO.payPoint != 0">
<span class="label">使用积分</span> <span class="label">使用积分</span>
<span class="txt flowPrice">{{ orderInfo.order.priceDetailDTO.payPoint }}</span> <span class="txt flowPrice">{{
orderInfo.order.priceDetailDTO.payPoint
}}</span>
</li> </li>
<li> <li>
<span class="label">应付金额</span> <span class="label">应付金额</span>
<span class="txt flowPrice">¥{{ orderInfo.order.priceDetailDTO.flowPrice | unitPrice }}</span> <span class="txt flowPrice"
>¥{{ orderInfo.order.priceDetailDTO.flowPrice | unitPrice }}</span
>
</li> </li>
</ul> </ul>
</div> </div>
@ -215,10 +308,20 @@
<span>修改金额</span> <span>修改金额</span>
</p> </p>
<div> <div>
<Form ref="modifyPriceForm" :model="modifyPriceForm" label-position="left" :label-width="70" <Form
:rules="modifyPriceValidate"> ref="modifyPriceForm"
:model="modifyPriceForm"
label-position="left"
:label-width="70"
:rules="modifyPriceValidate"
>
<FormItem label="订单金额" prop="price"> <FormItem label="订单金额" prop="price">
<InputNumber style="width:100px;" v-model="modifyPriceForm.price" :min="0" :max="999999"></InputNumber> <InputNumber
style="width: 100px"
v-model="modifyPriceForm.price"
:min="0"
:max="999999"
></InputNumber>
<span class="ml_10"></span> <span class="ml_10"></span>
</FormItem> </FormItem>
</Form> </Form>
@ -235,11 +338,20 @@
<span>订单取消</span> <span>订单取消</span>
</p> </p>
<div> <div>
<Form ref="orderCancelForm" :model="orderCancelForm" label-position="left" :label-width="100" <Form
:rules="orderCancelValidate"> ref="orderCancelForm"
:model="orderCancelForm"
label-position="left"
:label-width="100"
:rules="orderCancelValidate"
>
<FormItem label="取消原因" prop="reason"> <FormItem label="取消原因" prop="reason">
<Input v-model="orderCancelForm.reason" type="textarea" :autosize="{ minRows: 2, maxRows: 5 }" <Input
placeholder="请输入取消原因"></Input> v-model="orderCancelForm.reason"
type="textarea"
:autosize="{ minRows: 2, maxRows: 5 }"
placeholder="请输入取消原因"
></Input>
</FormItem> </FormItem>
</Form> </Form>
</div> </div>
@ -255,22 +367,55 @@
<span>修改收件信息</span> <span>修改收件信息</span>
</p> </p>
<div> <div>
<Form ref="addressForm" :model="addressForm" label-position="left" :label-width="100" :rules="addressRule"> <Form
ref="addressForm"
:model="addressForm"
label-position="left"
:label-width="100"
:rules="addressRule"
>
<FormItem label="收件人" prop="consigneeName"> <FormItem label="收件人" prop="consigneeName">
<Input v-model="addressForm.consigneeName" size="large" maxlength="20"></Input> <Input
v-model="addressForm.consigneeName"
size="large"
maxlength="20"
></Input>
</FormItem> </FormItem>
<FormItem label="联系方式" prop="consigneeMobile"> <FormItem label="联系方式" prop="consigneeMobile">
<Input v-model="addressForm.consigneeMobile" size="large" maxlength="11"></Input> <Input
v-model="addressForm.consigneeMobile"
size="large"
maxlength="11"
></Input>
</FormItem> </FormItem>
<FormItem label="地址信息" prop="consigneeAddressPath"> <FormItem label="地址信息" prop="consigneeAddressPath">
<Input v-model="addr" disabled style="width: 305px" v-if="showRegion == false" /> <Input
<Button v-if="showRegion == false" @click="regionClick" :loading="submitLoading" type="primary" v-model="addr"
icon="ios-create-outline" style="margin-left: 8px">修改 disabled
style="width: 305px"
v-if="showRegion == false"
/>
<Button
v-if="showRegion == false"
@click="regionClick"
:loading="submitLoading"
type="primary"
icon="ios-create-outline"
style="margin-left: 8px"
>修改
</Button> </Button>
<region style="width: 400px" @selected="selectedRegion" v-if="showRegion == true" /> <region
style="width: 400px"
@selected="selectedRegion"
v-if="showRegion == true"
/>
</FormItem> </FormItem>
<FormItem label="详细地址" prop="consigneeDetail"> <FormItem label="详细地址" prop="consigneeDetail">
<Input v-model="addressForm.consigneeDetail" size="large" maxlength="50"></Input> <Input
v-model="addressForm.consigneeDetail"
size="large"
maxlength="50"
></Input>
</FormItem> </FormItem>
</Form> </Form>
</div> </div>
@ -285,8 +430,14 @@
<span>订单日志</span> <span>订单日志</span>
</p> </p>
<div class="order-log-div"> <div class="order-log-div">
<Table :loading="loading" border :columns="orderLogColumns" :data="orderInfo.orderLogs" ref="table" <Table
sortable="custom"></Table> :loading="loading"
border
:columns="orderLogColumns"
:data="orderInfo.orderLogs"
ref="table"
sortable="custom"
></Table>
</div> </div>
<div slot="footer" style="text-align: right"> <div slot="footer" style="text-align: right">
@ -359,9 +510,7 @@ export default {
// //
orderCancelValidate: { orderCancelValidate: {
reason: [ reason: [{ required: true, message: "取消原因不能为空", trigger: "blur" }],
{ required: true, message: "取消原因不能为空", trigger: "blur" },
],
}, },
addressModal: false, // addressModal: false, //
// //
@ -373,12 +522,8 @@ export default {
consigneeAddressIdPath: "", consigneeAddressIdPath: "",
}, },
orderDeliverFormValidate: { orderDeliverFormValidate: {
logisticsNo: [ logisticsNo: [{ required: true, message: "发货单号不能为空", trigger: "change" }],
{ required: true, message: "发货单号不能为空", trigger: "change" }, logisticsId: [{ required: true, message: "请选择物流公司", trigger: "blur" }],
],
logisticsId: [
{ required: true, message: "请选择物流公司", trigger: "blur" },
],
}, },
addressRule: { addressRule: {
consigneeName: [ consigneeName: [
@ -442,10 +587,7 @@ export default {
if (!params.row.goodsPrice) { if (!params.row.goodsPrice) {
return h("div", this.$options.filters.unitPrice(0, "¥")); return h("div", this.$options.filters.unitPrice(0, "¥"));
} }
return h( return h("div", this.$options.filters.unitPrice(params.row.goodsPrice, "¥"));
"div",
this.$options.filters.unitPrice(params.row.goodsPrice, "¥")
);
}, },
}, },
@ -459,10 +601,7 @@ export default {
key: "flowPrice", key: "flowPrice",
minWidth: 100, minWidth: 100,
render: (h, params) => { render: (h, params) => {
return h( return h("div", this.$options.filters.unitPrice(params.row.flowPrice, "¥"));
"div",
this.$options.filters.unitPrice(params.row.flowPrice, "¥")
);
}, },
}, },
], ],
@ -542,15 +681,13 @@ export default {
modifyPriceSubmit() { modifyPriceSubmit() {
this.$refs.modifyPriceForm.validate((valid) => { this.$refs.modifyPriceForm.validate((valid) => {
if (valid) { if (valid) {
API_Order.updateOrderPrice(this.sn, this.modifyPriceForm).then( API_Order.updateOrderPrice(this.sn, this.modifyPriceForm).then((res) => {
(res) => { if (res.success) {
if (res.success) { this.$Message.success("修改订单金额成功");
this.$Message.success("修改订单金额成功"); this.modal = false;
this.modal = false; this.getDataList();
this.getDataList();
}
} }
); });
} }
}); });
}, },
@ -594,10 +731,8 @@ export default {
this.addressForm.consigneeName = this.orderInfo.order.consigneeName; this.addressForm.consigneeName = this.orderInfo.order.consigneeName;
this.addressForm.consigneeMobile = this.orderInfo.order.consigneeMobile; this.addressForm.consigneeMobile = this.orderInfo.order.consigneeMobile;
this.addressForm.consigneeDetail = this.orderInfo.order.consigneeDetail; this.addressForm.consigneeDetail = this.orderInfo.order.consigneeDetail;
this.addressForm.consigneeAddressPath = this.addressForm.consigneeAddressPath = this.orderInfo.order.consigneeAddressPath;
this.orderInfo.order.consigneeAddressPath; this.addressForm.consigneeAddressIdPath = this.orderInfo.order.consigneeAddressIdPath;
this.addressForm.consigneeAddressIdPath =
this.orderInfo.order.consigneeAddressIdPath;
}, },
// //
editAddressSubmit() { editAddressSubmit() {
@ -609,15 +744,13 @@ export default {
this.addressForm.consigneeAddressIdPath = this.regionId; this.addressForm.consigneeAddressIdPath = this.regionId;
this.$refs.addressForm.validate((valid) => { this.$refs.addressForm.validate((valid) => {
if (valid) { if (valid) {
API_Order.editOrderConsignee(this.sn, this.addressForm).then( API_Order.editOrderConsignee(this.sn, this.addressForm).then((res) => {
(res) => { if (res.success) {
if (res.success) { this.$Message.success("收货地址修改成功");
this.$Message.success("收货地址修改成功"); this.addressModal = false;
this.addressModal = false; this.getDataList();
this.getDataList();
}
} }
); });
} }
}); });
}, },
@ -657,7 +790,6 @@ export default {
margin-bottom: 2vh; margin-bottom: 2vh;
} }
.select-clear { .select-clear {
margin-left: 10px; margin-left: 10px;
} }

View File

@ -121,8 +121,7 @@ export default {
// //
formValidate: { formValidate: {
articleCategoryName:[ articleCategoryName:[
regular.REQUIRED, regular.REQUIRED
regular.VARCHAR20,
], ],
sort:[ sort:[
regular.REQUIRED, regular.REQUIRED,

View File

@ -1,8 +1,13 @@
<template> <template>
<div class="search"> <div class="search">
<Card> <Card>
<Form ref="searchForm" :model="searchForm" inline :label-width="70" class="search-form"> <Form
ref="searchForm"
:model="searchForm"
inline
:label-width="70"
class="search-form"
>
<Form-item label="搜索日志" prop="searchKey"> <Form-item label="搜索日志" prop="searchKey">
<Input <Input
type="text" type="text"
@ -32,46 +37,47 @@
style="width: 200px" style="width: 200px"
></DatePicker> ></DatePicker>
</Form-item> </Form-item>
<Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn">搜索</Button> <Button @click="handleSearch" type="primary" icon="ios-search" class="search-btn"
>搜索</Button
>
</Form> </Form>
<Row class="operation padding-row"> <Row class="operation padding-row">
<Button @click="getLogList" icon="md-refresh">刷新</Button> <Button @click="getLogList" icon="md-refresh">刷新</Button>
<Button type="dashed" @click="openTip=!openTip">{{openTip ? "" : ""}}</Button> <Button type="dashed" @click="openTip = !openTip">{{
openTip ? "关闭提示" : "开启提示"
}}</Button>
</Row> </Row>
<Row v-show="openTip"> <Row v-show="openTip">
<Alert show-icon> <Alert show-icon>
<span>展示详细内容</span> <span>展示详细内容</span>
<Icon type="ios-bulb-outline" slot="icon"></Icon> <Icon type="ios-bulb-outline" slot="icon"></Icon>
<i-switch <i-switch size="large" v-model="showDev">
size="large"
v-model="showDev"
>
<span slot="open">开发</span> <span slot="open">开发</span>
<span slot="close">普通</span> <span slot="close">普通</span>
</i-switch> </i-switch>
</Alert> </Alert>
</Row> </Row>
<Table <Table
v-if="showDev" v-if="showDev"
:loading="loading" :loading="loading"
border border
:columns="columns_dev" :columns="columns_dev"
:data="data" :data="data"
ref="table" ref="table"
sortable="custom" sortable="custom"
> >
</Table> </Table>
<Table <Table
v-else v-else
:loading="loading" :loading="loading"
border border
:columns="columns" :columns="columns"
:data="data" :data="data"
ref="table" ref="table"
sortable="custom" sortable="custom"
> >
</Table> </Table>
<Row type="flex" justify="end" class="mt_10"> <Row type="flex" justify="end" class="mt_10">
<Page <Page
@ -80,10 +86,9 @@
:page-size="searchForm.pageSize" :page-size="searchForm.pageSize"
@on-change="changePage" @on-change="changePage"
@on-page-size-change="changePageSize" @on-page-size-change="changePageSize"
:page-size-opts="[10,20,50]" :page-size-opts="[10, 20, 50]"
size="small" size="small"
show-totalzx show-totalzx
show-elevator show-elevator
show-sizer show-sizer
></Page> ></Page>
@ -93,226 +98,228 @@
</template> </template>
<script> <script>
import {getLogListData} from "@/api/index"; import { getLogListData } from "@/api/index";
export default { export default {
name: "log-manage", name: "log-manage",
data() { data() {
return { return {
openTip: false, // openTip: false, //
loading: true, // loading: true, //
selectDate: null, // selectDate: null, //
showDev: false,// showDev: false, //
searchForm: { // searchForm: {
type: 1, //
key: '', type: 1,
operatorName: '', key: "",
pageNumber: 1, operatorName: "",
pageSize: 10, pageNumber: 1,
startDate: "", pageSize: 10,
endDate: "", startDate: "",
sort: "createTime", endDate: "",
order: "desc" sort: "createTime",
order: "desc",
},
columns: [
//
{
title: "操作名称",
key: "name",
width: 150,
fixed: "left",
ellipsis: false,
tooltip: true,
}, },
columns: [ // {
{ title: "日志内容",
title: "操作名称", key: "customerLog",
key: "name", minWidth: 200,
width: 150, fixed: "left",
fixed: "left", ellipsis: false,
ellipsis: false, tooltip: true,
tooltip: true },
}, {
{ title: "操作用户",
title: "日志内容", minWidth: 115,
key: "customerLog", key: "username",
minWidth: 200, width: 120,
fixed: "left", tooltip: true,
ellipsis: false, },
tooltip: true {
}, title: "操作时间",
{ key: "createTime",
title: "操作用户", align: "center",
minWidth: 115, width: 170,
key: "username", },
width: 120, ],
tooltip: true columns_dev: [
}, {
{ title: "操作名称",
title: "操作时间", key: "name",
key: "createTime", minWidth: 100,
align: "center", fixed: "left",
width: 170 ellipsis: false,
} tooltip: true,
], },
columns_dev: [ {
{ title: "日志内容",
title: "操作名称", key: "customerLog",
key: "name", minWidth: 120,
minWidth: 100, fixed: "left",
fixed: "left", ellipsis: false,
ellipsis: false, tooltip: true,
tooltip: true },
}, {
{ title: "操作用户",
title: "日志内容", key: "username",
key: "customerLog", width: 115,
minWidth: 120, },
fixed: "left", {
ellipsis: false, title: "IP",
tooltip: true, key: "ip",
}, width: 150,
{ },
title: "操作用户", {
key: "username", title: "IP信息",
width: 115, key: "ipInfo",
}, width: 150,
{ ellipsis: false,
title: "IP", tooltip: true,
key: "ip", },
width: 150 {
}, title: "请求路径",
{ width: 150,
title: "IP信息", ellipsis: false,
key: "ipInfo", tooltip: true,
width: 150, key: "requestUrl",
ellipsis: false, },
tooltip: true, {
}, title: "请求类型",
{ key: "requestType",
title: "请求路径", width: 130,
width: 150, align: "center",
ellipsis: false, filters: [
tooltip: true, {
key: "requestUrl" label: "GET",
}, value: "GET",
{ },
title: "请求类型", {
key: "requestType", label: "POST",
width: 130, value: "POST",
align: "center", },
filters: [ {
{ label: "PUT",
label: "GET", value: "PUT",
value: "GET" },
}, {
{ label: "DELETE",
label: "POST", value: "DELETE",
value: "POST" },
}, ],
{ filterMultiple: false,
label: "PUT", filterMethod(value, row) {
value: "PUT" if (value == "GET") {
}, return row.requestType == "GET";
{ } else if (value == "POST") {
label: "DELETE", return row.requestType == "POST";
value: "DELETE" } else if (value == "PUT") {
} return row.requestType == "PUT";
], } else if (value == "DELETE") {
filterMultiple: false, return row.requestType == "DELETE";
filterMethod(value, row) {
if (value == "GET") {
return row.requestType == "GET";
} else if (value == "POST") {
return row.requestType == "POST";
} else if (value == "PUT") {
return row.requestType == "PUT";
} else if (value == "DELETE") {
return row.requestType == "DELETE";
}
} }
}, },
{ },
title: "请求参数", {
minWidth: 100, title: "请求参数",
key: "requestParam", minWidth: 100,
ellipsis: false, key: "requestParam",
tooltip: true ellipsis: false,
}, tooltip: true,
{ },
title: "耗时-毫秒", {
key: "costTime", title: "耗时-毫秒",
width: 140, key: "costTime",
align: "center", width: 140,
filters: [ align: "center",
{ filters: [
label: "≤300毫秒", {
value: 0 label: "≤300毫秒",
}, value: 0,
{ },
label: "300毫秒<x<1000毫秒", {
value: 0.3 label: "300毫秒<x<1000毫秒",
}, value: 0.3,
{ },
label: ">1000毫秒", {
value: 1 label: ">1000毫秒",
} value: 1,
], },
filterMultiple: false, ],
filterMethod(value, row) { filterMultiple: false,
if (value == 0) { filterMethod(value, row) {
return row.costTime <= 300; if (value == 0) {
} else if (value == 0.3) { return row.costTime <= 300;
return row.costTime > 300 && row.costTime < 1000; } else if (value == 0.3) {
} else { return row.costTime > 300 && row.costTime < 1000;
return row.costTime > 1000; } else {
} return row.costTime > 1000;
} }
}, },
{ },
title: "操作时间", {
key: "createTime", title: "操作时间",
align: "center", key: "createTime",
width: 170, align: "center",
sortType: "desc" width: 170,
} sortType: "desc",
], },
data: [], // ],
total: 0 // data: [], //
}; total: 0, //
};
},
methods: {
//
init() {
this.getLogList();
}, },
methods: { //
// changePage(v) {
init() { this.searchForm.pageNumber = v;
this.getLogList(); this.getLogList();
}, },
// //
changePage(v) { changePageSize(v) {
this.searchForm.pageNumber = v; this.searchForm.pageNumber = 1;
this.getLogList(); this.searchForm.pageSize = v;
}, this.getLogList();
// },
changePageSize(v) { //
this.searchForm.pageNumber = 1; selectDateRange(v) {
this.searchForm.pageSize = v; if (v) {
this.getLogList(); this.searchForm.startDate = v[0];
}, this.searchForm.endDate = v[1];
//
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
//
handleSearch() {
this.searchForm.pageNumber = 1;
this.getLogList();
},
//
getLogList() {
this.loading = true;
getLogListData(this.searchForm).then(res => {
this.loading = false;
if (res.success) {
this.data = res.result.records;
this.total = res.result.total;
}
});
} }
}, },
mounted() { //
this.init(); handleSearch() {
} this.searchForm.pageNumber = 1;
}; this.getLogList();
},
//
getLogList() {
this.loading = true;
getLogListData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.records;
this.total = res.result.total;
}
});
},
},
mounted() {
this.init();
},
};
</script> </script>

View File

@ -35,12 +35,12 @@ export const delCategdelShopGoodsLabel = id => {
// 根据goodsId分页获取商品列表 // 根据goodsId分页获取商品列表
export const getQueryGoodsIdGoodsList = goodsId => { export const getQueryGoodsIdGoodsList = goodsId => {
return getRequest(`/goods/sku/${goodsId}/list`); return getRequest(`/goods/goods/sku/${goodsId}/list`);
}; };
// 获取商品分页列表 // 获取商品分页列表
export const getGoodsSkuListDataSeller = params => { export const getGoodsSkuListDataSeller = params => {
return getRequest("/goods/sku/list", params); return getRequest("/goods/goods/sku/list", params);
}; };
// 获取商品品牌分页列表 // 获取商品品牌分页列表
@ -139,7 +139,7 @@ export const getGoodsCategory = parent_id => {
// 获取商品sku分页列表 // 获取商品sku分页列表
export const getGoodsSkuData = params => { export const getGoodsSkuData = params => {
return getRequest("/goods/sku/list", params); return getRequest("/goods/goods/sku/list", params);
}; };
// 获取商品分页列表 // 获取商品分页列表

View File

@ -11,7 +11,7 @@ import {
//获取所有city //获取所有city
export const getAllCity = (params) => { export const getAllCity = (params) => {
return getRequest(commonUrl+'/common/region/allCity', params) return getRequest(commonUrl+'/common/common/region/allCity', params)
} }
// 登陆 // 登陆
@ -171,47 +171,47 @@ export const getLogListData = params => {
}; };
// 分页获取消息数据 // 分页获取消息数据
export const getMessageData = params => { export const getMessageData = params => {
return getRequest("/message/getByCondition", params); return getRequest("/message/storeMessage/getByCondition", params);
}; };
// 获取单个消息详情 // 获取单个消息详情
export const getMessageDataById = (id, params) => { export const getMessageDataById = (id, params) => {
return getRequest(`/message/get/${id}`, params); return getRequest(`/message/storeMessage/get/${id}`, params);
}; };
// 添加消息 // 添加消息
export const addMessage = params => { export const addMessage = params => {
return postRequest("/message/add", params); return postRequest("/message/storeMessage/add", params);
}; };
// 编辑消息 // 编辑消息
export const editMessage = params => { export const editMessage = params => {
return postRequest("/message/edit", params); return postRequest("/message/storeMessage/edit", params);
}; };
// 回收站还原消息 // 回收站还原消息
export const reductionMessage = (ids, params) => { export const reductionMessage = (ids, params) => {
return putRequest(`/message/${ids}/reduction`, params); return putRequest(`/message/storeMessage/${ids}/reduction`, params);
}; };
// 彻底删除消息 // 彻底删除消息
export const clearMessage = (ids, params) => { export const clearMessage = (ids, params) => {
return deleteRequest(`/message/${ids}`, params); return deleteRequest(`/message/storeMessage/${ids}`, params);
}; };
// 已读消息放入回收站 // 已读消息放入回收站
export const deleteMessage = (ids, params) => { export const deleteMessage = (ids, params) => {
return deleteRequest(`/message/${ids}/delete`, params); return deleteRequest(`/message/storeMessage/${ids}/delete`, params);
}; };
// 分页获取消息推送数据 // 分页获取消息推送数据
export const getMessageSendData = params => { export const getMessageSendData = params => {
return getRequest("/message", params); return getRequest("/message/storeMessage", params);
}; };
// 进入消息中心首次加载全部数据 // 进入消息中心首次加载全部数据
export const getAllMessage = params => { export const getAllMessage = params => {
return getRequest("/message/all", params); return getRequest("/message/storeMessage/all", params);
}; };
// 已读消息 // 已读消息
export const read = (id) => { export const read = (id) => {
return putRequest(`/message/${id}/read`); return putRequest(`/message/storeMessage/${id}/read`);
}; };
// 删除发送消息 // 删除发送消息
export const deleteMessageSend = (ids, params) => { export const deleteMessageSend = (ids, params) => {
return deleteRequest(`/messageSend/delByIds/${ids}`, params); return deleteRequest(`/message/storeMessageSend/delByIds/${ids}`, params);
}; };
// 分页获取文件数据 // 分页获取文件数据

View File

@ -125,10 +125,10 @@ export const getAfterSaleTraces = (sn, params) => {
}; };
//获取发票列表 //获取发票列表
export const getReceiptPage = params => { export const getReceiptPage = params => {
return getRequest(`/receipt`, params); return getRequest(`/trade/receipt`, params);
}; };
//获取发票列表 //获取发票列表
export const invoicing = id => { export const invoicing = id => {
return postRequest(`receipt/${id}/invoicing`); return postRequest(`/trade/receipt/${id}/invoicing`);
}; };

View File

@ -80,15 +80,15 @@ export const updateArticleCategory = (params, id) => {
} }
//文章添加 //文章添加
export const saveArticle = (params) => { export const saveArticle = (params) => {
return postRequest('/article', params) return postRequest('/other/article', params)
} }
//文章修改 //文章修改
export const updateArticle = (params) => { export const updateArticle = (params) => {
return putRequest(`/article/update/${params.id}`, params) return putRequest(`/other/article/update/${params.id}`, params)
} }
//查看文章 //查看文章
export const seeArticle = (id) => { export const seeArticle = (id) => {
return getRequest(`/article/${id}`) return getRequest(`/other/article/${id}`)
} }
//获取文章列表数据 //获取文章列表数据
export const getArticle = (params) => { export const getArticle = (params) => {
@ -100,7 +100,7 @@ export const getArticle = (params) => {
//删除文章数据 //删除文章数据
export const delArticle = (ids) => { export const delArticle = (ids) => {
return deleteRequest(`/article/delByIds/${ids}`) return deleteRequest(`/other/article/delByIds/${ids}`)
} }

View File

@ -19,7 +19,7 @@ export const getBillPage = (params) => {
// 获取商家结算单流水分页 // 获取商家结算单流水分页
export const getSellerFlow = (id, params) => { export const getSellerFlow = (id, params) => {
return getRequest(`/member/bill/${id}/getStoreFlow`, params) return getRequest(`/order/bill/${id}/getStoreFlow`, params)
} }
// 商家核对结算单 // 商家核对结算单
@ -29,7 +29,7 @@ export const reconciliation = (id, params) => {
// 获取商家分销订单流水分页 // 获取商家分销订单流水分页
export const getDistributionFlow = (id, params) => { export const getDistributionFlow = (id, params) => {
return getRequest(`/member/bill/${id}/getDistributionFlow`, params) return getRequest(`/order/bill/${id}/getDistributionFlow`, params)
} }
// 获取商家结算单详细 // 获取商家结算单详细

View File

@ -311,7 +311,7 @@ export const result = [{
type: 0, type: 0,
title: "分销商品", title: "分销商品",
path: "distributionGoods", path: "distributionGoods",
component: "distribution/distribution/goods", component: "distribution/distributionGoods",
children: null children: null
}, },
{ {
@ -320,7 +320,7 @@ export const result = [{
type: 0, type: 0,
title: "分销订单", title: "分销订单",
path: "distributionOrder", path: "distributionOrder",
component: "distribution/distribution/order", component: "distribution/distributionOrder",
children: null children: null
} }
] ]

View File

@ -3,9 +3,14 @@
<!-- 选择商品类型 --> <!-- 选择商品类型 -->
<Modal v-model="selectGoodsType" width="550" :closable="false"> <Modal v-model="selectGoodsType" width="550" :closable="false">
<div class="goods-type-list" v-if="!showGoodsTemplates"> <div class="goods-type-list" v-if="!showGoodsTemplates">
<div class="goods-type-item" :class="{'active-goods-type':item.check}" @click="handleClickGoodsType(item)" <div
v-for="(item,index) in goodsTypeWay" :key="index"> class="goods-type-item"
<img :src="item.img"/> :class="{ 'active-goods-type': item.check }"
@click="handleClickGoodsType(item)"
v-for="(item, index) in goodsTypeWay"
:key="index"
>
<img :src="item.img" />
<div> <div>
<h2>{{ item.title }}</h2> <h2>{{ item.title }}</h2>
<p>{{ item.desc }}</p> <p>{{ item.desc }}</p>
@ -14,12 +19,16 @@
</div> </div>
<div v-else class="goods-type-list"> <div v-else class="goods-type-list">
<h2 @click="showGoodsTemplates = !showGoodsTemplates">返回</h2> <h2 @click="showGoodsTemplates = !showGoodsTemplates">返回</h2>
<div class="goods-type-item template-item" @click="handleClickGoodsTemplate(item)" <div
v-for="(item,tempIndex) in goodsTemplates" :key="tempIndex"> class="goods-type-item template-item"
@click="handleClickGoodsTemplate(item)"
v-for="(item, tempIndex) in goodsTemplates"
:key="tempIndex"
>
<img :src="item.thumbnail" /> <img :src="item.thumbnail" />
<div> <div>
<h2>{{ item.goodsName }}</h2> <h2>{{ item.goodsName }}</h2>
<p>{{ item.sellingPoint || '' }}</p> <p>{{ item.sellingPoint || "" }}</p>
</div> </div>
</div> </div>
</div> </div>
@ -28,22 +37,34 @@
<div class="content-goods-publish"> <div class="content-goods-publish">
<div class="goods-category"> <div class="goods-category">
<ul v-if="categoryListLevel1.length > 0"> <ul v-if="categoryListLevel1.length > 0">
<li v-for="(item, index) in categoryListLevel1" :class="{ activeClass: category[0].name === item.name }" <li
@click="handleSelectCategory(item, index, 1)" :key="index"> 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>{{ item.name }}</span>
<span>&gt;</span> <span>&gt;</span>
</li> </li>
</ul> </ul>
<ul v-if="categoryListLevel2.length > 0"> <ul v-if="categoryListLevel2.length > 0">
<li v-for="(item, index) in categoryListLevel2" :class="{ activeClass: category[1].name === item.name }" <li
@click="handleSelectCategory(item, index, 2)" :key="index"> 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>{{ item.name }}</span>
<span>&gt;</span> <span>&gt;</span>
</li> </li>
</ul> </ul>
<ul v-if="categoryListLevel3.length > 0"> <ul v-if="categoryListLevel3.length > 0">
<li v-for="(item, index) in categoryListLevel3" :class="{ activeClass: category[2].name === item.name }" <li
@click="handleSelectCategory(item, index, 3)" :key="index"> v-for="(item, index) in categoryListLevel3"
:class="{ activeClass: category[2].name === item.name }"
@click="handleSelectCategory(item, index, 3)"
:key="index"
>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</li> </li>
</ul> </ul>
@ -55,7 +76,7 @@
<span v-show="category[2].name">> {{ category[2].name }}</span> <span v-show="category[2].name">> {{ category[2].name }}</span>
</p> </p>
<template v-if="selectedTemplate.goodsName"> <template v-if="selectedTemplate.goodsName">
<Divider>已选商品模版:{{selectedTemplate.goodsName}}</Divider> <Divider>已选商品模版:{{ selectedTemplate.goodsName }}</Divider>
</template> </template>
</div> </div>
<!-- 底部按钮 --> <!-- 底部按钮 -->
@ -100,19 +121,19 @@ export default {
], ],
// //
category: [ category: [
{name: '', id: ''}, { name: "", id: "" },
{name: '', id: ''}, { name: "", id: "" },
{name: '', id: ''} { name: "", id: "" },
], ],
// //
goodsType: '', goodsType: "",
/** 1级分类列表*/ /** 1级分类列表*/
categoryListLevel1: [], categoryListLevel1: [],
/** 2级分类列表*/ /** 2级分类列表*/
categoryListLevel2: [], categoryListLevel2: [],
/** 3级分类列表*/ /** 3级分类列表*/
categoryListLevel3: [], categoryListLevel3: [],
} };
}, },
methods: { methods: {
// //
@ -123,26 +144,25 @@ export default {
val.check = !val.check; val.check = !val.check;
if (!val.type) { if (!val.type) {
this.GET_GoodsTemplate() this.GET_GoodsTemplate();
this.showGoodsTemplates = true; this.showGoodsTemplates = true;
} else { } else {
this.goodsType = val.type; this.goodsType = val.type;
this.selectedTemplate = {} this.selectedTemplate = {};
} }
}, },
// //
handleClickGoodsTemplate(val) { handleClickGoodsTemplate(val) {
console.log(val);
this.selectedTemplate = val; this.selectedTemplate = val;
this.selectGoodsType = false; this.selectGoodsType = false;
this.$emit('change', {tempId: val.id}) this.$emit("change", { tempId: val.id });
}, },
// //
GET_GoodsTemplate() { GET_GoodsTemplate() {
let searchParams = { let searchParams = {
saveType: "TEMPLATE", saveType: "TEMPLATE",
sort: "create_time", sort: "create_time",
order: "desc" order: "desc",
}; };
API_GOODS.getDraftGoodsListData(searchParams).then((res) => { API_GOODS.getDraftGoodsListData(searchParams).then((res) => {
if (res.success) { if (res.success) {
@ -153,10 +173,9 @@ export default {
/** 选择商城商品分类 */ /** 选择商城商品分类 */
handleSelectCategory(row, index, level) { handleSelectCategory(row, index, level) {
if (level === 1) { if (level === 1) {
this.category.forEach(cate => { this.category.forEach((cate) => {
cate.name = '', (cate.name = ""), (cate.id = "");
cate.id = '' });
})
this.category[0].name = row.name; this.category[0].name = row.name;
this.category[0].id = row.id; this.category[0].id = row.id;
this.categoryListLevel2 = this.categoryListLevel1[index].children; this.categoryListLevel2 = this.categoryListLevel1[index].children;
@ -164,12 +183,12 @@ export default {
} else if (level === 2) { } else if (level === 2) {
this.category[1].name = row.name; this.category[1].name = row.name;
this.category[1].id = row.id; this.category[1].id = row.id;
this.category[2].name = ''; this.category[2].name = "";
this.category[2].id = ''; this.category[2].id = "";
this.categoryListLevel3 = this.categoryListLevel2[index].children; this.categoryListLevel3 = this.categoryListLevel2[index].children;
} else { } else {
this.category[2].name = row.name this.category[2].name = row.name;
this.category[2].id = row.id this.category[2].id = row.id;
} }
}, },
/** 查询下一级 商城商品分类*/ /** 查询下一级 商城商品分类*/
@ -185,8 +204,8 @@ export default {
next() { next() {
window.scrollTo(0, 0); window.scrollTo(0, 0);
if (!this.goodsType && !this.selectedTemplate.goodsName) { if (!this.goodsType && !this.selectedTemplate.goodsName) {
this.$Message.error('请选择商品类型') this.$Message.error("请选择商品类型");
return return;
} }
if (!this.category[0].name) { if (!this.category[0].name) {
this.$Message.error("请选择商品分类"); this.$Message.error("请选择商品分类");
@ -196,19 +215,18 @@ export default {
return; return;
} else if (this.category[2].name) { } else if (this.category[2].name) {
if (this.selectedTemplate.id) { if (this.selectedTemplate.id) {
this.$emit('change',{tempId: this.selectedTemplate.id}) this.$emit("change", { tempId: this.selectedTemplate.id });
} else { } else {
this.$emit('change',{category: this.category,goodsType:this.goodsType}) this.$emit("change", { category: this.category, goodsType: this.goodsType });
} }
} }
}, },
}, },
mounted () { mounted() {
this.GET_NextLevelCategory() this.GET_NextLevelCategory();
},
} };
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "./addGoods.scss"; @import "./addGoods.scss";
</style> </style>

View File

@ -1279,6 +1279,9 @@ export default {
delete sku.specValueId; delete sku.specValueId;
return sku; return sku;
}); });
if (this.firstData.tempId) {
delete submit.id;
}
if (submit.goodsGalleryFiles.length > 0) { if (submit.goodsGalleryFiles.length > 0) {
submit.goodsGalleryList = submit.goodsGalleryFiles.map((i) => i.url); submit.goodsGalleryList = submit.goodsGalleryFiles.map((i) => i.url);

View File

@ -1,9 +1,8 @@
<template> <template>
<div> <div>
<Card style="position:relative;"> <Card style="position: relative">
<Spin size="large" fix v-if="spinShow"></Spin> <Spin size="large" fix v-if="spinShow"></Spin>
<Alert type="warning"> <Alert type="warning">
<template slot="desc"> <template slot="desc">
为了方便在创建直播间时从选择商品请尽量提前提审直播商品 为了方便在创建直播间时从选择商品请尽量提前提审直播商品
</template> </template>
@ -11,116 +10,229 @@
<Form :model="liveForm" ref="liveForm" :rules="liveRulesForm" :label-width="120"> <Form :model="liveForm" ref="liveForm" :rules="liveRulesForm" :label-width="120">
<FormItem label="直播标题" prop="name"> <FormItem label="直播标题" prop="name">
<Input :disabled="liveStatus!='NEW'" v-model="liveForm.name" style="width:460px"></Input> <Input
<div class="tips">直播间名字最短3个汉字最长17个汉字1个汉字相当于2个字符</div> :disabled="liveStatus != 'NEW'"
v-model="liveForm.name"
style="width: 460px"
></Input>
<div class="tips">
直播间名字最短3个汉字最长17个汉字1个汉字相当于2个字符
</div>
</FormItem> </FormItem>
<FormItem label="主播昵称" prop="anchorName"> <FormItem label="主播昵称" prop="anchorName">
<Input :disabled="liveStatus!='NEW'" v-model="liveForm.anchorName" style="width:360px"></Input> <Input
<div class="tips">主播昵称最短2个汉字最长15个汉字1个汉字相当于2个字符</div> :disabled="liveStatus != 'NEW'"
v-model="liveForm.anchorName"
style="width: 360px"
></Input>
<div class="tips">
主播昵称最短2个汉字最长15个汉字1个汉字相当于2个字符
</div>
</FormItem> </FormItem>
<FormItem label="直播时间" prop="startTime"> <FormItem label="直播时间" prop="startTime">
<DatePicker
<DatePicker :disabled="liveStatus!='NEW'" format="yyyy-MM-dd HH:mm" type="datetimerange" v-model="times" @on-change="handleChangeTime" :options="optionsTime" placeholder="直播计划开始时间-直播计划结束时间" :disabled="liveStatus != 'NEW'"
style="width: 300px"> format="yyyy-MM-dd HH:mm"
type="datetimerange"
v-model="times"
@on-change="handleChangeTime"
:options="optionsTime"
placeholder="直播计划开始时间-直播计划结束时间"
style="width: 300px"
>
</DatePicker> </DatePicker>
<div class="tips">直播开播时间需要在当前时间的10分钟后并且,开始时间不能在6个月后,直播计划结束时间开播时间和结束时间间隔不得短于30分钟不得超过24小时</div> <div class="tips">
直播开播时间需要在当前时间的10分钟后并且,开始时间不能在6个月后,直播计划结束时间开播时间和结束时间间隔不得短于30分钟不得超过24小时
</div>
</FormItem> </FormItem>
<FormItem label="主播微信号" prop="anchorWechat"> <FormItem label="主播微信号" prop="anchorWechat">
<Input :disabled="liveStatus!='NEW'" v-model="liveForm.anchorWechat" style="width:360px" placeholder="主播微信号"></Input> <Input
<div class="tips">主播微信号如果未实名认证需要先前往小程序直播小程序进行<a target="_black" href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh">实名验证</a></div> :disabled="liveStatus != 'NEW'"
v-model="liveForm.anchorWechat"
style="width: 360px"
placeholder="主播微信号"
></Input>
<div class="tips">
主播微信号如果未实名认证需要先前往小程序直播小程序进行<a
target="_black"
href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh"
>实名验证</a
>
</div>
</FormItem> </FormItem>
<!-- 分享卡片 --> <!-- 分享卡片 -->
<FormItem label="分享卡片封面" prop="feedsImg"> <FormItem label="分享卡片封面" prop="feedsImg">
<div class="upload-list" v-if="liveForm.feedsImg"> <div class="upload-list" v-if="liveForm.feedsImg">
<template> <template>
<img :src="liveForm.feedsImg"> <img :src="liveForm.feedsImg" />
<div class="upload-list-cover"> <div class="upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(liveForm.feedsImg)"></Icon> <Icon
<Icon type="ios-trash-outline" @click.native="handleRemove('feedsImg')"></Icon> type="ios-eye-outline"
@click.native="handleView(liveForm.feedsImg)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove('feedsImg')"
></Icon>
</div> </div>
</template> </template>
</div> </div>
<Upload v-if="liveForm.feedsImg.length ==0" ref="upload" :show-upload-list="false" :on-success="handleFeedsImgSuccess" :format="['jpg','jpeg','png']" :on-format-error="handleFormatError" <Upload
:max-size="1024" :on-exceeded-size="handleMaxSize" type="drag" :action="action" :headers="accessToken" style="display: inline-block;width:58px;"> v-if="liveForm.feedsImg.length == 0"
<div style="width: 58px;height:58px;line-height: 58px;"> ref="upload"
:show-upload-list="false"
:on-success="handleFeedsImgSuccess"
:format="['jpg', 'jpeg', 'png']"
:on-format-error="handleFormatError"
:max-size="1024"
:on-exceeded-size="handleMaxSize"
type="drag"
:action="action"
:headers="accessToken"
style="display: inline-block; width: 58px"
>
<div style="width: 58px; height: 58px; line-height: 58px">
<Icon type="ios-camera" size="20"></Icon> <Icon type="ios-camera" size="20"></Icon>
</div> </div>
</Upload> </Upload>
<div class="tips"> <div class="tips">直播间分享图图片规则建议像素800*640大小不超过1M</div>
直播间分享图图片规则建议像素800*640大小不超过1M
</div>
</FormItem> </FormItem>
<!-- 直播间背景墙 --> <!-- 直播间背景墙 -->
<FormItem label="直播间背景墙" prop="coverImg"> <FormItem label="直播间背景墙" prop="coverImg">
<div class="upload-list" v-if="liveForm.coverImg"> <div class="upload-list" v-if="liveForm.coverImg">
<template> <template>
<img :src="liveForm.coverImg"> <img :src="liveForm.coverImg" />
<div class="upload-list-cover"> <div class="upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(liveForm.coverImg)"></Icon> <Icon
<Icon type="ios-trash-outline" @click.native="handleRemove('coverImg')"></Icon> type="ios-eye-outline"
@click.native="handleView(liveForm.coverImg)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove('coverImg')"
></Icon>
</div> </div>
</template> </template>
</div> </div>
<Upload v-if="liveForm.coverImg.length ==0" ref="upload" :show-upload-list="false" :on-success="handleCoverImgSuccess" :format="['jpg','jpeg','png']" :on-format-error="handleFormatError" <Upload
:max-size="1024" :on-exceeded-size="handleMaxSize" type="drag" :action="action" :headers="accessToken" style="display: inline-block;width:58px;"> v-if="liveForm.coverImg.length == 0"
<div style="width: 58px;height:58px;line-height: 58px;"> ref="upload"
:show-upload-list="false"
:on-success="handleCoverImgSuccess"
:format="['jpg', 'jpeg', 'png']"
:on-format-error="handleFormatError"
:max-size="1024"
:on-exceeded-size="handleMaxSize"
type="drag"
:action="action"
:headers="accessToken"
style="display: inline-block; width: 58px"
>
<div style="width: 58px; height: 58px; line-height: 58px">
<Icon type="ios-camera" size="20"></Icon> <Icon type="ios-camera" size="20"></Icon>
</div> </div>
</Upload> </Upload>
<div class="tips"> 直播间背景图图片规则建议像素1080*1920大小不超过1M</div> <div class="tips">直播间背景图图片规则建议像素1080*1920大小不超过1M</div>
</FormItem> </FormItem>
<!-- 直播间背景墙 --> <!-- 直播间背景墙 -->
<FormItem label="直播间分享图" prop="shareImg"> <FormItem label="直播间分享图" prop="shareImg">
<div class="upload-list" v-if="liveForm.shareImg"> <div class="upload-list" v-if="liveForm.shareImg">
<template> <template>
<img :src="liveForm.shareImg"> <img :src="liveForm.shareImg" />
<div class="upload-list-cover"> <div class="upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(liveForm.shareImg)"></Icon> <Icon
<Icon type="ios-trash-outline" @click.native="handleRemove('shareImg')"></Icon> type="ios-eye-outline"
@click.native="handleView(liveForm.shareImg)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove('shareImg')"
></Icon>
</div> </div>
</template> </template>
</div> </div>
<Upload v-if="liveForm.shareImg.length ==0" ref="upload" :show-upload-list="false" :on-success="handleShareImgSuccess" :format="['jpg','jpeg','png']" :on-format-error="handleFormatError" <Upload
:max-size="1024" :on-exceeded-size="handleMaxSize" type="drag" :action="action" :headers="accessToken" style="display: inline-block;width:58px;"> v-if="liveForm.shareImg.length == 0"
<div style="width: 58px;height:58px;line-height: 58px;"> ref="upload"
:show-upload-list="false"
:on-success="handleShareImgSuccess"
:format="['jpg', 'jpeg', 'png']"
:on-format-error="handleFormatError"
:max-size="1024"
:on-exceeded-size="handleMaxSize"
type="drag"
:action="action"
:headers="accessToken"
style="display: inline-block; width: 58px"
>
<div style="width: 58px; height: 58px; line-height: 58px">
<Icon type="ios-camera" size="20"></Icon> <Icon type="ios-camera" size="20"></Icon>
</div> </div>
</Upload> </Upload>
<div class="tips"> 直播间分享图图片规则建议像素800*640大小不超过1M</div> <div class="tips">直播间分享图图片规则建议像素800*640大小不超过1M</div>
</FormItem> </FormItem>
<FormItem label="商品" v-if="$route.query.id"> <FormItem label="商品" v-if="$route.query.id">
<Button type="primary" ghost @click="liveGoodsVisible=true" :disabled="liveStatus!='NEW'" icon="md-add">添加商品</Button> <Button
type="primary"
ghost
@click="liveGoodsVisible = true"
:disabled="liveStatus != 'NEW'"
icon="md-add"
>添加商品</Button
>
<Table class="goods-table" :columns="liveColumns" :data="liveData"> <Table class="goods-table" :columns="liveColumns" :data="liveData">
<template slot-scope="{ row,index }" slot="goodsName"> <template slot-scope="{ row, index }" slot="goodsName">
<div class="flex-goods"> <div class="flex-goods">
<Badge v-if="index == 0 || index ==1" color="volcano"></Badge> <Badge v-if="index == 0 || index == 1" color="volcano"></Badge>
<img class="thumbnail" :src="row.thumbnail || row.goodsImage"> <img class="thumbnail" :src="row.thumbnail || row.goodsImage" />
{{ row.goodsName || row.name }} {{ row.goodsName || row.name }}
</div> </div>
</template> </template>
<template slot-scope="{ row }" class="price" slot="price"> <template slot-scope="{ row }" class="price" slot="price">
<div> <div>
<div v-if="row.priceType == 1">{{row.price | unitPrice('')}}</div> <div v-if="row.priceType == 1">{{ row.price | unitPrice("") }}</div>
<div v-if="row.priceType == 2">{{row.price | unitPrice('')}}{{row.price2 | unitPrice('')}}</div> <div v-if="row.priceType == 2">
<div v-if="row.priceType == 3">{{row.price | unitPrice('¥')}}<span class="original-price">{{row.price2 | unitPrice('')}}</span></div> {{ row.price | unitPrice("¥") }}{{ row.price2 | unitPrice("¥") }}
</div>
<div v-if="row.priceType == 3">
{{ row.price | unitPrice("¥")
}}<span class="original-price">{{ row.price2 | unitPrice("¥") }}</span>
</div>
</div> </div>
</template> </template>
<template slot-scope="{ row }" slot="quantity"> <template slot-scope="{ row }" slot="quantity">
<div>{{row.quantity}}</div> <div>{{ row.quantity }}</div>
</template> </template>
<template slot-scope="{ row,index }" slot="action"> <template slot-scope="{ row, index }" slot="action">
<div class="action"> <div class="action">
<Button size="small" type="primary" :disabled="liveStatus!='NEW'" @click="deleteGoods(row,index)"></Button> <Button
<Button size="small" ghost type="primary" :disabled="liveStatus!='NEW'" @click="onMove(row.id,1)"></Button> size="small"
<Button size="small" ghost type="primary" :disabled="liveStatus!='NEW'" @click="onMove(row.id,0)"></Button> type="primary"
:disabled="liveStatus != 'NEW'"
@click="deleteGoods(row, index)"
>删除</Button
>
<Button
size="small"
ghost
type="primary"
:disabled="liveStatus != 'NEW'"
@click="onMove(row.id, 1)"
>上移</Button
>
<Button
size="small"
ghost
type="primary"
:disabled="liveStatus != 'NEW'"
@click="onMove(row.id, 0)"
>下移</Button
>
</div> </div>
</template> </template>
</Table> </Table>
@ -130,13 +242,15 @@
</FormItem> </FormItem>
<FormItem> <FormItem>
<Button type="primary" v-if="liveStatus=='NEW'" @click="createLives()"></Button> <Button type="primary" v-if="liveStatus == 'NEW'" @click="createLives()"
>保存</Button
>
</FormItem> </FormItem>
</Form> </Form>
</Card> </Card>
<!-- 浏览图片 --> <!-- 浏览图片 -->
<Modal title="查看图片" v-model="imageVisible"> <Modal title="查看图片" v-model="imageVisible">
<img :src="imageSrc" v-if="imageVisible" style="width: 100%"> <img :src="imageSrc" v-if="imageVisible" style="width: 100%" />
</Modal> </Modal>
<Modal width="800" v-model="liveGoodsVisible" footer-hide> <Modal width="800" v-model="liveGoodsVisible" footer-hide>
@ -184,24 +298,16 @@ export default {
{ required: true, message: "请输入主播昵称", trigger: "blur" }, { required: true, message: "请输入主播昵称", trigger: "blur" },
{ max: 15, min: 2, message: "主播昵称最短2个汉字最长15个汉字" }, { max: 15, min: 2, message: "主播昵称最短2个汉字最长15个汉字" },
], ],
anchorWechat: [ anchorWechat: [{ required: true, message: "请输入主播微信号", trigger: "blur" }],
{ required: true, message: "请输入主播微信号", trigger: "blur" },
],
startTime: [ startTime: [
{ {
required: true, required: true,
message: "请正确输入开始时间以及结束时间", message: "请正确输入开始时间以及结束时间",
}, },
], ],
feedsImg: [ feedsImg: [{ required: true, message: "分享卡片封面不能为空", trigger: "blur" }],
{ required: true, message: "分享卡片封面不能为空", trigger: "blur" }, coverImg: [{ required: true, message: "直播间背景墙不能为空", trigger: "blur" }],
], shareImg: [{ required: true, message: "直播间分享图不能为空", trigger: "blur" }],
coverImg: [
{ required: true, message: "直播间背景墙不能为空", trigger: "blur" },
],
shareImg: [
{ required: true, message: "直播间分享图不能为空", trigger: "blur" },
],
}, },
liveForm: { liveForm: {
name: "", // name: "", //
@ -438,16 +544,8 @@ export default {
this.times[1] = daterange[1]; this.times[1] = daterange[1];
// this.times = daterange; // this.times = daterange;
this.$set( this.$set(this.liveForm, "startTime", new Date(daterange[0]).getTime() / 1000);
this.liveForm, this.$set(this.liveForm, "endTime", new Date(daterange[1]).getTime() / 1000);
"startTime",
new Date(daterange[0]).getTime() / 1000
);
this.$set(
this.liveForm,
"endTime",
new Date(daterange[1]).getTime() / 1000
);
} }
}, },
@ -493,9 +591,7 @@ export default {
// //
if (this.$route.query.id) { if (this.$route.query.id) {
this.spinShow = true; this.spinShow = true;
this.liveForm.commodityList = JSON.stringify( this.liveForm.commodityList = JSON.stringify(this.liveForm.commodityList);
this.liveForm.commodityList
);
delete this.liveForm.updateTime; delete this.liveForm.updateTime;
// //
editLive(this.liveForm).then((res) => { editLive(this.liveForm).then((res) => {