适配微服务

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

View File

@@ -2,7 +2,7 @@ import {commonUrl, getRequest, getRequestWithNoToken, postRequestWithNoToken} fr
// 通过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) => {
return postRequest("/common/common/file/rename", params);
return postRequest("/common/file/rename", 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) => {
@@ -405,12 +405,12 @@ export const resetPassword = (params) => {
// 初始化商品索引
export const createIndex = () => {
return getRequest(`/elasticsearch`);
return getRequest(`/other/elasticsearch`);
};
// 初始化商品索引
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) => {
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) => {
return getRequest(`/receipt`, params)
return getRequest(`/trade/receipt`, params)
}
//平台退款
export const refundPrice = (afterSaleSn, params) => {

View File

@@ -15,7 +15,7 @@ export const editSmsMessageTemplate = (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 => {
return getRequest("/noticeMessage", params);
return getRequest("/setting/noticeMessage", params);
};
//删除站内信
export const deleteMessage = (id) => {
@@ -65,11 +65,11 @@ export const deleteMessage = (id) => {
};
// 开启站内信模板
export const openNoticeMessage = (id) => {
return putRequest(`/noticeMessage/${id}/open`);
return putRequest(`/setting/noticeMessage/${id}/open`);
};
// 修改站内信状态
export const updateMessageStatus = (id,status) => {
return putRequest(`/noticeMessage/${id}/${status}`);
return putRequest(`/setting/noticeMessage/${id}/${status}`);
};
//获取短信模板
export const getSmsTemplatePage = (params) => {
@@ -194,5 +194,5 @@ export const verificationPage = (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) => {
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("系统异常");
}
break;
case 20004:
case 401:
// 未登录 清除已登录状态
Cookies.set("userInfoManager", "");
@@ -93,7 +94,7 @@ service.interceptors.response.use(
// 这种情况一般调到登录页
} else if (error.response.status === 404) {
// 避免刷新token报错
} else if (error.response.status === 403) {
} else if (error.response.status === 403 || error.response.data.code === 20004) {
isRefreshToken++;
if (isRefreshToken === 1) {
const getTokenRes = await refreshToken();

View File

@@ -1,8 +1,13 @@
<template>
<div class="wrapper">
<Card class="category">
<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
: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>
</Card>
<Card class="content">
@@ -24,16 +29,19 @@
<span slot="open"></span>
<span slot="close"></span>
</i-switch>
<Button type="info" placement="right" @click="Template(item)" size="small">编辑</Button>
<Button type="success" placement="right" @click="decorate(item)" size="small">装修</Button>
<Button type="info" placement="right" @click="Template(item)" size="small"
>编辑</Button
>
<Button type="success" placement="right" @click="decorate(item)" size="small"
>装修</Button
>
<Poptip confirm title="删除此模板?" @on-ok="delTemplate(item.id)">
<Button type="error" size="small">删除</Button>
</Poptip>
</div>
</div>
<div class="no-more" v-if="list.length ==0">暂无更多模板</div>
<div class="no-more" v-if="list.length == 0">暂无更多模板</div>
</div>
</Card>
<Modal
v-model="showModal"
@@ -61,13 +69,15 @@ export default {
name: "floorList",
data() {
return {
showModal: false, // 添加modal的显示
showModal: false, // 添加modal的显示
selectedIndex: 0, // 首页还是专题选择的index
formData: { // 新建模态框的数据
formData: {
// 新建模态框的数据
status: false, // 模板是否开启
name: "", // 模板名称
},
columns: [ // 列表展示的column
columns: [
// 列表展示的column
{
title: "页面名称",
key: "name",
@@ -82,11 +92,12 @@ export default {
],
loading: false, // 加载状态
pageTypes: [ // 那种类别的模板
pageTypes: [
// 那种类别的模板
{
type: "INDEX",
title: "首页",
}
},
// {
// type: "SPECIAL",
// title: "专题",
@@ -134,14 +145,17 @@ export default {
Template(item) {
// 编辑表单
item.status = item.pageShow
item.status = item.pageShow;
this.formData = item;
this.showModal = true;
},
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() {
@@ -155,13 +169,13 @@ export default {
API_floor.getHomeList(params).then((res) => {
if (res.success) {
this.list = res.result.records;
this.list.forEach(e => {
if (e.pageShow === 'OPEN') {
e.pageShow = true
this.list.forEach((e) => {
if (e.pageShow === "OPEN") {
e.pageShow = true;
} else {
e.pageShow = false
e.pageShow = false;
}
})
});
}
});
},
@@ -184,7 +198,7 @@ export default {
}
});
},
}
},
};
</script>
@@ -197,7 +211,7 @@ export default {
background: #ededed;
}
.item-title {
background: #d7e7f5!important;
background: #d7e7f5 !important;
height: 54px;
}
.no-more {
@@ -239,12 +253,12 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
div:nth-child(2){
div:nth-child(2) {
margin-right: 80px;
}
}
}
.item:nth-of-type(2n+1) {
.item:nth-of-type(2n + 1) {
background: #f5f7fa;
}
</style>

View File

@@ -2,17 +2,27 @@
<div class="decorate">
<div class="decorate-title">
{{ res.name }}
<Button style="margin-left: 20px" size="small" ghost v-if="
res.type == 'tpl_ad_list' ||
res.type == 'tpl_activity_list' ||
res.drawer
" type="primary" @click="selectStyle()">选择风格</Button>
<Button
style="margin-left: 20px"
size="small"
ghost
v-if="res.type == 'tpl_ad_list' || res.type == 'tpl_activity_list' || res.drawer"
type="primary"
@click="selectStyle()"
>选择风格</Button
>
</div>
<!-- 右侧显示抽屉 -->
<Drawer title="选择风格" :closable="false" width="400" v-model="styleFlag">
<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 />
<span>{{ item.name }}</span>
</div>
@@ -20,18 +30,29 @@
</Drawer>
<!-- 卡片集合 -->
<div class="decorate-list" v-if="
(res.type != 'tpl_ad_list' && res.type != 'tpl_activity_list') ||
res.drawer
">
<div
class="decorate-list"
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-title">
<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 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-title">标题{{ title_index + 1 }}</div>
<div>
@@ -46,19 +67,28 @@
</div>
<div class="decorate-view">
<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">
{{bindGoods.title}},
<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"
>
{{ bindGoods.title }},
</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 class="decorate-view" v-if="!res.notImg">
@@ -72,7 +102,13 @@
</div>
</div>
<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>
<!-- 填写标题 -->
@@ -90,50 +126,54 @@
已选链接:
<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.___promotion =='SECKILL'">
秒杀
</span>
<span v-if="item.url.___promotion =='FULL_DISCOUNT'">
满减
</span>
<span v-if="item.url.___promotion =='PINTUAN'">
拼团
</span>
{{item.url.title || item.url.goodsName}}
<span v-if="item.url.___promotion == 'SECKILL'"> 秒杀 </span>
<span v-if="item.url.___promotion == 'FULL_DISCOUNT'"> 满减 </span>
<span v-if="item.url.___promotion == 'PINTUAN'"> 拼团 </span>
{{ item.url.title || item.url.goodsName }}
</span>
<!-- 当选择完活动之后的其他回调 -->
<span v-if="item.url.___type == 'pages'"> {{item.url.title}}</span>
<span v-if="item.url.___type == 'pages'"> {{ item.url.title }}</span>
</span>
</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>
<Button v-if="
res.type != 'tpl_ad_list' &&
res.type != 'tpl_activity_list' &&
!res.notAdd
" type="primary" @click="addDecorate()" ghost>添加</Button>
<Button
v-if="res.type != 'tpl_ad_list' && res.type != 'tpl_activity_list' && !res.notAdd"
type="primary"
@click="addDecorate()"
ghost
>添加</Button
>
<liliDialog ref="liliDialog" @selectedLink="selectedLink" @selectedGoodsData="selectedGoodsData"></liliDialog>
<liliDialog
ref="liliDialog"
@selectedLink="selectedLink"
@selectedGoodsData="selectedGoodsData"
></liliDialog>
<Modal width="1200px" v-model="picModelFlag">
<ossManage @callback="callbackSelected" ref="ossManage" />
@@ -179,18 +219,17 @@ export default {
},
// 回调的商品信息
selectedGoodsData(val) {
if (!val) return false;
let data = val.map((item) => {
delete item.selected;
delete item.intro
delete item.mobileIntro
delete item.intro;
delete item.mobileIntro;
return {
img: item.thumbnail,
title: item.goodsName,
type: this.selectedGoods.title,
___index:this.selectedGoods.___index,
...item
___index: this.selectedGoods.___index,
...item,
};
});
this.res.options.list[0].listWay.push(...data);
@@ -236,7 +275,7 @@ export default {
title: "标题",
link: "",
url: "",
size: this.res.options.list[0].size,
size: this.res.options.list[0]?.size,
};
this.res.options.list.push(way);
},

View File

@@ -3,7 +3,13 @@
<div class="model-title">
<div>店铺装修</div>
<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 }}
</Button>
</div>
@@ -18,7 +24,13 @@
</Poptip> -->
<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 class="model-item">
模板名称 <Input style="width: 200px" v-model="submitWay.name" />
@@ -65,7 +77,7 @@ export default {
// selected: false,
// },
],
submitWay: {
// 表单信息
pageShow: this.$route.query.type || false,
@@ -99,7 +111,7 @@ export default {
return false;
}
this.submitWay.pageShow
this.submitWay?.pageShow === true
? (this.submitWay.pageShow = "OPEN")
: (this.submitWay.pageShow = "CLOSE");

View File

@@ -2,7 +2,13 @@
<div class="search">
<Card>
<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">
<Input
type="text"
@@ -22,7 +28,12 @@
/>
</Form-item>
<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="PASS">通过售后</Option>
<Option value="REFUSE">拒绝售后</Option>
@@ -63,12 +74,23 @@
/>
</Form-item>
<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_GOODS">退货</Option>
</Select>
</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>
</Row>
<Table
@@ -80,25 +102,36 @@
class="mt_10"
>
<!-- 商品栏目格式化 -->
<template slot="goodsSlot" slot-scope="{row}">
<div style="margin-top: 5px;height: 80px; display: flex;">
<template slot="goodsSlot" slot-scope="{ row }">
<div style="margin-top: 5px; height: 80px; display: flex">
<div style="">
<img :src="row.goodsImage" style="height: 60px;margin-top: 3px">
<img :src="row.goodsImage" style="height: 60px; margin-top: 3px" />
</div>
<div style="margin-left: 13px;">
<div style="margin-left: 13px">
<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>
<Poptip trigger="hover" title="扫码在手机中查看" transfer>
<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>
<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>
</div>
</div>
</template>
</Table>
<Row type="flex" justify="end" class="mt_10">
@@ -120,220 +153,220 @@
</template>
<script>
import * as API_Order from "@/api/order";
import vueQr from 'vue-qr'
export default {
name: "orderList",
components: {
"vue-qr":vueQr
},
data() {
return {
loading: true, // 表单加载状态
searchForm: {
// 搜索框初始化对象
pageNumber: 1, // 当前页数
pageSize: 10, // 页面大小
sort: "createTime", // 默认排序字段
order: "desc", // 默认排序方式
startDate: "", // 起始时间
endDate: "", // 终止时间
orderSn: "",
memberName: "",
serviceStatus: "",
storeName:"",
sn: "",
import * as API_Order from "@/api/order";
import vueQr from "vue-qr";
export default {
components: {
"vue-qr": vueQr,
},
name: "after-sale-order",
data() {
return {
loading: true, // 表单加载状态
searchForm: {
// 搜索框初始化对象
pageNumber: 1, // 当前页数
pageSize: 10, // 页面大小
sort: "createTime", // 默认排序字段
order: "desc", // 默认排序方式
startDate: "", // 起始时间
endDate: "", // 终止时间
orderSn: "",
memberName: "",
serviceStatus: "",
storeName: "",
sn: "",
},
selectDate: null, // 选择时间段
form: {
// 添加或编辑表单对象初始化数据
sn: "",
storeName: "",
startTime: "",
endTime: "",
billPrice: "",
},
columns: [
{
title: "售后服务单号",
key: "sn",
minWidth: 140,
tooltip: true,
},
selectDate: null, // 选择时间段
form: {
// 添加或编辑表单对象初始化数据
sn: "",
storeName: "",
startTime: "",
endTime: "",
billPrice: "",
{
title: "订单编号",
key: "orderSn",
minWidth: 120,
tooltip: true,
},
columns: [
{
title: "售后服务单号",
key: "sn",
minWidth: 140,
tooltip: true
},
{
title: "订单编号",
key: "orderSn",
minWidth: 120,
tooltip: true
},
{
title: "商品",
key: "goodsName",
minWidth: 300,
tooltip: true,
slot: "goodsSlot",
},
{
title: "会员名称",
key: "memberName",
width: 140,
},
{
title: "商家名称",
key: "storeName",
minWidth: 100,
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: "商品",
key: "goodsName",
minWidth: 300,
tooltip: true,
slot: "goodsSlot",
},
{
title: "会员名称",
key: "memberName",
width: 140,
},
{
title: "商家名称",
key: "storeName",
minWidth: 100,
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: "serviceStatus",
width: 200,
render: (h, params) => {
if (params.row.serviceStatus == "APPLY") {
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', [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: "售后类型",
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: "操作",
key: "action",
fixed: "right",
align: "center",
width: 100,
render: (h, params) => {
{
title: "售后状态",
key: "serviceStatus",
width: 150,
render: (h, params) => {
if (params.row.serviceStatus == "APPLY") {
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", [
h(
"Button",
{
props: {
type: "info",
size: "small",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
this.detail(params.row);
},
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: "申请时间",
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: {
// 初始化数据
init() {
this.getDataList();
},
// 分页 改变页
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
},
// 分页 改变页数
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getDataList();
},
// 搜索
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
// 开始结束时间分别赋值
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
// 获取列表数据
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;
// 分页 改变页码
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
},
// 分页 改变页
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getDataList();
},
// 搜索
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
// 开始结束时间分别赋值
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
// 获取列表数据
getDataList() {
this.loading = true;
API_Order.getAfterSaleOrderPage(this.searchForm).then((res) => {
this.loading = false;
},
// 跳转订单详情
detail(v) {
let sn = v.sn;
this.$router.push({
name: "after-order-detail",
query: {sn: sn},
});
},
if (res.success) {
this.data = res.result.records;
this.total = res.result.total;
}
});
this.total = this.data.length;
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>

View File

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

View File

@@ -4,9 +4,22 @@
<Card style="height: 60px">
<div style="">
<Button v-if="allowOperation.editPrice" @click="modifyPrice">调整价格</Button>
<Button v-if="allowOperation.editConsignee" @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
v-if="allowOperation.editConsignee"
@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>
</div>
</Card>
@@ -45,21 +58,30 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票抬头</div>
<div class="div-item-right">{{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : '暂无'
<div class="div-item-right">
{{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : "暂无"
}}
</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-right">{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : '暂无' }}</div>
<div class="div-item-right">
{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : "暂无" }}
</div>
</div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票内容</div>
<div class="div-item-right">{{
orderInfo.receipt.receiptContent ? orderInfo.receipt.receiptContent : '暂无'
<div class="div-item-right">
{{
orderInfo.receipt.receiptContent
? orderInfo.receipt.receiptContent
: "暂无"
}}
</div>
</div>
@@ -67,13 +89,19 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票金额</div>
<div class="div-item-right">
{{ orderInfo.receipt.receiptPrice ? orderInfo.receipt.receiptPrice : '暂无' | unitPrice('¥') }}
{{
orderInfo.receipt.receiptPrice
? orderInfo.receipt.receiptPrice
: "暂无" | unitPrice("¥")
}}
</div>
</div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<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 style="width: 36%; float: left">
@@ -105,21 +133,30 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票抬头</div>
<div class="div-item-right">{{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : '暂无'
<div class="div-item-right">
{{
orderInfo.receipt.receiptTitle ? orderInfo.receipt.receiptTitle : "暂无"
}}
</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-right">{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : '暂无' }}</div>
<div class="div-item-right">
{{ orderInfo.receipt.taxpayerId ? orderInfo.receipt.taxpayerId : "暂无" }}
</div>
</div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票内容</div>
<div class="div-item-right">{{
orderInfo.receipt.receiptContent ? orderInfo.receipt.receiptContent : '暂无'
<div class="div-item-right">
{{
orderInfo.receipt.receiptContent
? orderInfo.receipt.receiptContent
: "暂无"
}}
</div>
</div>
@@ -127,13 +164,19 @@
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<div class="div-item-left">发票金额</div>
<div class="div-item-right">
{{ orderInfo.receipt.receiptPrice ? orderInfo.receipt.receiptPrice : '暂无' | unitPrice('¥') }}
{{
orderInfo.receipt.receiptPrice
? orderInfo.receipt.receiptPrice
: "暂无" | unitPrice("¥")
}}
</div>
</div>
<div class="div-item" v-if="orderInfo.order.needReceipt == true">
<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 class="div-item">
@@ -145,29 +188,55 @@
</div>
</Card>
<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="">
<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 style="margin-left: 13px">
<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>
<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 }}
</span>
</span>
<Poptip trigger="hover" style="display: block;" title="扫码在手机中查看" transfer>
<Poptip
trigger="hover"
style="display: block"
title="扫码在手机中查看"
transfer
>
<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>
<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>
</div>
</div>
@@ -177,32 +246,56 @@
<ul>
<li>
<span class="label">商品总额</span>
<span class="txt">{{ orderInfo.order.priceDetailDTO.goodsPrice | unitPrice('¥') }}</span>
<span class="txt">{{
orderInfo.order.priceDetailDTO.goodsPrice | unitPrice("¥")
}}</span>
</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="txt"> {{ orderInfo.order.priceDetailDTO.discountPrice | unitPrice('¥') }} </span>
<span class="txt">
{{ orderInfo.order.priceDetailDTO.discountPrice | unitPrice("¥") }}
</span>
</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="txt"> {{ orderInfo.order.priceDetailDTO.couponPrice | unitPrice('¥') }} </span>
<span class="txt">
{{ orderInfo.order.priceDetailDTO.couponPrice | unitPrice("¥") }}
</span>
</li>
<li>
<span class="label">运费:</span>
<span class="txt">{{ orderInfo.order.freightPrice | unitPrice('¥') }}</span>
<span class="txt">{{
orderInfo.order.freightPrice | unitPrice("¥")
}}</span>
</li>
<li v-if="orderInfo.order.priceDetailDTO.updatePrice">
<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 v-if="orderInfo.order.priceDetailDTO.payPoint != 0">
<span class="label">使用积分:</span>
<span class="txt flowPrice">{{ orderInfo.order.priceDetailDTO.payPoint }}</span>
<span class="txt flowPrice">{{
orderInfo.order.priceDetailDTO.payPoint
}}</span>
</li>
<li>
<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>
</ul>
</div>
@@ -215,10 +308,20 @@
<span>修改金额</span>
</p>
<div>
<Form ref="modifyPriceForm" :model="modifyPriceForm" label-position="left" :label-width="70"
:rules="modifyPriceValidate">
<Form
ref="modifyPriceForm"
:model="modifyPriceForm"
label-position="left"
:label-width="70"
:rules="modifyPriceValidate"
>
<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>
</FormItem>
</Form>
@@ -235,11 +338,20 @@
<span>订单取消</span>
</p>
<div>
<Form ref="orderCancelForm" :model="orderCancelForm" label-position="left" :label-width="100"
:rules="orderCancelValidate">
<Form
ref="orderCancelForm"
:model="orderCancelForm"
label-position="left"
:label-width="100"
:rules="orderCancelValidate"
>
<FormItem label="取消原因" prop="reason">
<Input v-model="orderCancelForm.reason" type="textarea" :autosize="{ minRows: 2, maxRows: 5 }"
placeholder="请输入取消原因"></Input>
<Input
v-model="orderCancelForm.reason"
type="textarea"
:autosize="{ minRows: 2, maxRows: 5 }"
placeholder="请输入取消原因"
></Input>
</FormItem>
</Form>
</div>
@@ -255,22 +367,55 @@
<span>修改收件信息</span>
</p>
<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">
<Input v-model="addressForm.consigneeName" size="large" maxlength="20"></Input>
<Input
v-model="addressForm.consigneeName"
size="large"
maxlength="20"
></Input>
</FormItem>
<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 label="地址信息" prop="consigneeAddressPath">
<Input v-model="addr" 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">修改
<Input
v-model="addr"
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>
<region style="width: 400px" @selected="selectedRegion" v-if="showRegion == true" />
<region
style="width: 400px"
@selected="selectedRegion"
v-if="showRegion == true"
/>
</FormItem>
<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>
</Form>
</div>
@@ -285,8 +430,14 @@
<span>订单日志</span>
</p>
<div class="order-log-div">
<Table :loading="loading" border :columns="orderLogColumns" :data="orderInfo.orderLogs" ref="table"
sortable="custom"></Table>
<Table
:loading="loading"
border
:columns="orderLogColumns"
:data="orderInfo.orderLogs"
ref="table"
sortable="custom"
></Table>
</div>
<div slot="footer" style="text-align: right">
@@ -359,9 +510,7 @@ export default {
//验证取消订单原因
orderCancelValidate: {
reason: [
{ required: true, message: "取消原因不能为空", trigger: "blur" },
],
reason: [{ required: true, message: "取消原因不能为空", trigger: "blur" }],
},
addressModal: false, //弹出修改收件信息框
//收件地址表单
@@ -373,12 +522,8 @@ export default {
consigneeAddressIdPath: "",
},
orderDeliverFormValidate: {
logisticsNo: [
{ required: true, message: "发货单号不能为空", trigger: "change" },
],
logisticsId: [
{ required: true, message: "请选择物流公司", trigger: "blur" },
],
logisticsNo: [{ required: true, message: "发货单号不能为空", trigger: "change" }],
logisticsId: [{ required: true, message: "请选择物流公司", trigger: "blur" }],
},
addressRule: {
consigneeName: [
@@ -442,10 +587,7 @@ export default {
if (!params.row.goodsPrice) {
return h("div", this.$options.filters.unitPrice(0, "¥"));
}
return h(
"div",
this.$options.filters.unitPrice(params.row.goodsPrice, "¥")
);
return h("div", this.$options.filters.unitPrice(params.row.goodsPrice, "¥"));
},
},
@@ -459,10 +601,7 @@ export default {
key: "flowPrice",
minWidth: 100,
render: (h, params) => {
return h(
"div",
this.$options.filters.unitPrice(params.row.flowPrice, "¥")
);
return h("div", this.$options.filters.unitPrice(params.row.flowPrice, "¥"));
},
},
],
@@ -542,15 +681,13 @@ export default {
modifyPriceSubmit() {
this.$refs.modifyPriceForm.validate((valid) => {
if (valid) {
API_Order.updateOrderPrice(this.sn, this.modifyPriceForm).then(
(res) => {
if (res.success) {
this.$Message.success("修改订单金额成功");
this.modal = false;
this.getDataList();
}
API_Order.updateOrderPrice(this.sn, this.modifyPriceForm).then((res) => {
if (res.success) {
this.$Message.success("修改订单金额成功");
this.modal = false;
this.getDataList();
}
);
});
}
});
},
@@ -594,10 +731,8 @@ export default {
this.addressForm.consigneeName = this.orderInfo.order.consigneeName;
this.addressForm.consigneeMobile = this.orderInfo.order.consigneeMobile;
this.addressForm.consigneeDetail = this.orderInfo.order.consigneeDetail;
this.addressForm.consigneeAddressPath =
this.orderInfo.order.consigneeAddressPath;
this.addressForm.consigneeAddressIdPath =
this.orderInfo.order.consigneeAddressIdPath;
this.addressForm.consigneeAddressPath = this.orderInfo.order.consigneeAddressPath;
this.addressForm.consigneeAddressIdPath = this.orderInfo.order.consigneeAddressIdPath;
},
//修改收货地址
editAddressSubmit() {
@@ -609,15 +744,13 @@ export default {
this.addressForm.consigneeAddressIdPath = this.regionId;
this.$refs.addressForm.validate((valid) => {
if (valid) {
API_Order.editOrderConsignee(this.sn, this.addressForm).then(
(res) => {
if (res.success) {
this.$Message.success("收货地址修改成功");
this.addressModal = false;
this.getDataList();
}
API_Order.editOrderConsignee(this.sn, this.addressForm).then((res) => {
if (res.success) {
this.$Message.success("收货地址修改成功");
this.addressModal = false;
this.getDataList();
}
);
});
}
});
},
@@ -657,7 +790,6 @@ export default {
margin-bottom: 2vh;
}
.select-clear {
margin-left: 10px;
}

View File

@@ -121,8 +121,7 @@ export default {
// 表单验证规则
formValidate: {
articleCategoryName:[
regular.REQUIRED,
regular.VARCHAR20,
regular.REQUIRED
],
sort:[
regular.REQUIRED,

View File

@@ -1,8 +1,13 @@
<template>
<div class="search">
<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">
<Input
type="text"
@@ -32,46 +37,47 @@
style="width: 200px"
></DatePicker>
</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>
<Row class="operation padding-row">
<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 v-show="openTip">
<Alert show-icon>
<span>展示详细内容</span>
<Icon type="ios-bulb-outline" slot="icon"></Icon>
<i-switch
size="large"
v-model="showDev"
>
<i-switch size="large" v-model="showDev">
<span slot="open">开发</span>
<span slot="close">普通</span>
</i-switch>
</Alert>
</Row>
<Table
v-if="showDev"
:loading="loading"
border
:columns="columns_dev"
:data="data"
ref="table"
sortable="custom"
>
</Table>
<Table
v-else
:loading="loading"
border
:columns="columns"
:data="data"
ref="table"
sortable="custom"
>
</Table>
<Table
v-if="showDev"
:loading="loading"
border
:columns="columns_dev"
:data="data"
ref="table"
sortable="custom"
>
</Table>
<Table
v-else
:loading="loading"
border
:columns="columns"
:data="data"
ref="table"
sortable="custom"
>
</Table>
<Row type="flex" justify="end" class="mt_10">
<Page
@@ -80,10 +86,9 @@
:page-size="searchForm.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10,20,50]"
:page-size-opts="[10, 20, 50]"
size="small"
show-totalzx
show-elevator
show-sizer
></Page>
@@ -93,226 +98,228 @@
</template>
<script>
import {getLogListData} from "@/api/index";
import { getLogListData } from "@/api/index";
export default {
name: "log-manage",
data() {
return {
openTip: false, // 开启提示
loading: true, // 加载状态
selectDate: null, // 选择时间段
showDev: false,//展示进阶日志
searchForm: { // 请求参数
type: 1,
key: '',
operatorName: '',
pageNumber: 1,
pageSize: 10,
startDate: "",
endDate: "",
sort: "createTime",
order: "desc"
export default {
name: "log-manage",
data() {
return {
openTip: false, // 开启提示
loading: true, // 加载状态
selectDate: null, // 选择时间段
showDev: false, //展示进阶日志
searchForm: {
// 请求参数
type: 1,
key: "",
operatorName: "",
pageNumber: 1,
pageSize: 10,
startDate: "",
endDate: "",
sort: "createTime",
order: "desc",
},
columns: [
// 表头
{
title: "操作名称",
key: "name",
width: 150,
fixed: "left",
ellipsis: false,
tooltip: true,
},
columns: [ // 表头
{
title: "操作名称",
key: "name",
width: 150,
fixed: "left",
ellipsis: false,
tooltip: true
},
{
title: "日志内容",
key: "customerLog",
minWidth: 200,
fixed: "left",
ellipsis: false,
tooltip: true
},
{
title: "操作用户",
minWidth: 115,
key: "username",
width: 120,
tooltip: true
},
{
title: "操作时间",
key: "createTime",
align: "center",
width: 170
}
],
columns_dev: [
{
title: "操作名称",
key: "name",
minWidth: 100,
fixed: "left",
ellipsis: false,
tooltip: true
},
{
title: "日志内容",
key: "customerLog",
minWidth: 120,
fixed: "left",
ellipsis: false,
tooltip: true,
},
{
title: "操作用户",
key: "username",
width: 115,
},
{
title: "IP",
key: "ip",
width: 150
},
{
title: "IP信息",
key: "ipInfo",
width: 150,
ellipsis: false,
tooltip: true,
},
{
title: "请求路径",
width: 150,
ellipsis: false,
tooltip: true,
key: "requestUrl"
},
{
title: "请求类型",
key: "requestType",
width: 130,
align: "center",
filters: [
{
label: "GET",
value: "GET"
},
{
label: "POST",
value: "POST"
},
{
label: "PUT",
value: "PUT"
},
{
label: "DELETE",
value: "DELETE"
}
],
filterMultiple: false,
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: "日志内容",
key: "customerLog",
minWidth: 200,
fixed: "left",
ellipsis: false,
tooltip: true,
},
{
title: "操作用户",
minWidth: 115,
key: "username",
width: 120,
tooltip: true,
},
{
title: "操作时间",
key: "createTime",
align: "center",
width: 170,
},
],
columns_dev: [
{
title: "操作名称",
key: "name",
minWidth: 100,
fixed: "left",
ellipsis: false,
tooltip: true,
},
{
title: "日志内容",
key: "customerLog",
minWidth: 120,
fixed: "left",
ellipsis: false,
tooltip: true,
},
{
title: "操作用户",
key: "username",
width: 115,
},
{
title: "IP",
key: "ip",
width: 150,
},
{
title: "IP信息",
key: "ipInfo",
width: 150,
ellipsis: false,
tooltip: true,
},
{
title: "请求路径",
width: 150,
ellipsis: false,
tooltip: true,
key: "requestUrl",
},
{
title: "请求类型",
key: "requestType",
width: 130,
align: "center",
filters: [
{
label: "GET",
value: "GET",
},
{
label: "POST",
value: "POST",
},
{
label: "PUT",
value: "PUT",
},
{
label: "DELETE",
value: "DELETE",
},
],
filterMultiple: false,
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,
key: "requestParam",
ellipsis: false,
tooltip: true
},
{
title: "耗时-毫秒",
key: "costTime",
width: 140,
align: "center",
filters: [
{
label: "≤300毫秒",
value: 0
},
{
label: "300毫秒<x<1000毫秒",
value: 0.3
},
{
label: ">1000毫秒",
value: 1
}
],
filterMultiple: false,
filterMethod(value, row) {
if (value == 0) {
return row.costTime <= 300;
} else if (value == 0.3) {
return row.costTime > 300 && row.costTime < 1000;
} else {
return row.costTime > 1000;
}
},
{
title: "请求参数",
minWidth: 100,
key: "requestParam",
ellipsis: false,
tooltip: true,
},
{
title: "耗时-毫秒",
key: "costTime",
width: 140,
align: "center",
filters: [
{
label: "≤300毫秒",
value: 0,
},
{
label: "300毫秒<x<1000毫秒",
value: 0.3,
},
{
label: ">1000毫秒",
value: 1,
},
],
filterMultiple: false,
filterMethod(value, row) {
if (value == 0) {
return row.costTime <= 300;
} else if (value == 0.3) {
return row.costTime > 300 && row.costTime < 1000;
} else {
return row.costTime > 1000;
}
},
{
title: "操作时间",
key: "createTime",
align: "center",
width: 170,
sortType: "desc"
}
],
data: [], // 日志数据
total: 0 // 数据总数
};
},
{
title: "操作时间",
key: "createTime",
align: "center",
width: 170,
sortType: "desc",
},
],
data: [], // 日志数据
total: 0, // 数据总数
};
},
methods: {
// 初始化数据
init() {
this.getLogList();
},
methods: {
// 初始化数据
init() {
this.getLogList();
},
// 分页 修改页
changePage(v) {
this.searchForm.pageNumber = v;
this.getLogList();
},
// 分页 修改页数
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getLogList();
},
// 起止时间从新赋值
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;
}
});
// 分页 修改页码
changePage(v) {
this.searchForm.pageNumber = v;
this.getLogList();
},
// 分页 修改页
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getLogList();
},
// 起止时间从新赋值
selectDateRange(v) {
if (v) {
this.searchForm.startDate = v[0];
this.searchForm.endDate = v[1];
}
},
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>