484 lines
16 KiB
Vue
484 lines
16 KiB
Vue
<template>
|
|
<view class="pos-order-list" ref="container">
|
|
<!-- #ifdef MP || APP-PLUS -->
|
|
<NavBar titleText="订单管理" bagColor="#f5f5f5" :iconColor="iconColor" :textColor="iconColor" :isScrolling="isScrolling"
|
|
showBack></NavBar>
|
|
<!-- #endif -->
|
|
<view class="searchCon acea-row">
|
|
<view class="search acea-row row-middle">
|
|
<text class="iconfont icon-ic_search"></text>
|
|
<input class="inputs" placeholder='请输入订单号' placeholder-style="font-size:28rpx" placeholder-class='placeholder'
|
|
confirm-type='search' name="search" v-model="searchListData.orderNo" @confirm="searchSubmit"></input>
|
|
</view>
|
|
<view class="btn" @click="filterShow = true">
|
|
<text class="iconfont icon-ic_sort"></text>
|
|
</view>
|
|
</view>
|
|
<view :style="{ height: navHeight + 'px' }" v-if="isFixed"></view>
|
|
<!-- #ifdef MP -->
|
|
<view class="nav acea-row row-around row-middle" :style="{
|
|
top:getHeight.barTop+getHeight.barHeight+'px'
|
|
}" id="nav">
|
|
<!-- #endif -->
|
|
<!-- #ifndef MP -->
|
|
<view class="nav acea-row row-around row-middle" id="nav">
|
|
<!-- #endif -->
|
|
<scroll-view scroll-x="true" class="scroll_view">
|
|
<view class="item" :class="state == 'all' ? 'on' : ''" @click="changeStatus('all')">
|
|
全部({{headerArr['all']!=undefined?headerArr['all']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'all'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'notShipped' ? 'on' : ''" @click="changeStatus('notShipped')">
|
|
待发货({{headerArr['notShipped']!=undefined?headerArr['notShipped']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'notShipped'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'spike' ? 'on' : ''" @click="changeStatus('spike')">
|
|
待收货({{headerArr['spike']!=undefined?headerArr['spike']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'spike'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'awaitVerification' ? 'on' : ''"
|
|
@click="changeStatus('awaitVerification')">
|
|
待使用({{headerArr['verification']!=undefined?headerArr['verification']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'awaitVerification'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'receiving' ? 'on' : ''" @click="changeStatus('receiving')">
|
|
已收货({{headerArr['receiving']!=undefined?headerArr['receiving']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'receiving'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'complete' ? 'on' : ''" @click="changeStatus('complete')">
|
|
已完成({{headerArr['complete']!=undefined?headerArr['complete']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'complete'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'refunded' ? 'on' : ''" @click="changeStatus('refunded')">
|
|
已退款({{headerArr['refunded']!=undefined?headerArr['refunded']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'refunded'"></image>
|
|
</view>
|
|
<view class="item" :class="state == 'deleted' ? 'on' : ''" @click="changeStatus('deleted')">
|
|
已删除({{headerArr['deleted']!=undefined?headerArr['deleted']:0}})
|
|
<image src="../static/adorn.png" v-if="state == 'deleted'"></image>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
<view class="list" v-if="list.length">
|
|
<view class="item" v-for="(item, index) in list" :key="index">
|
|
<view class="order-num acea-row row-between-wrapper" @click="toDetail(item)">
|
|
<view>
|
|
<view class="title">
|
|
<view class="type">{{orderType[item.type]}}</view>{{ item.orderNo }}
|
|
</view>
|
|
</view>
|
|
<view class="state" v-if="item.refundStatus==3">
|
|
已退款
|
|
</view>
|
|
<view class="state"
|
|
v-else-if="item.groupBuyRecordStatus===99||item.groupBuyRecordStatus===10|| item.status == 9">
|
|
<!-- 次卡商品部分核销 -->
|
|
<view v-if="item.status == 3 && item.infoResponseList[0].productType == ProductTypeEnum.PunchCard &&
|
|
item.infoResponseList[0].verifyRemainingTimes != item.infoResponseList[0].verifyTotalTimes">
|
|
部分使用
|
|
</view>
|
|
<view v-else>{{orderStatus[item.status]}}</view>
|
|
</view>
|
|
<view class="state" v-else>
|
|
{{item.groupBuyRecordStatus==0?'拼团中':'拼团失败'}}
|
|
</view>
|
|
</view>
|
|
<view class="pos-order-goods">
|
|
<view class="goods acea-row" @click="toDetail(item)">
|
|
<scroll-view class="picTxt scroll-view" scroll-x="true" v-if="item.infoResponseList.length > 1">
|
|
<view class="pictrue" v-for="(val, key) in item.infoResponseList" :key="key">
|
|
<image :src="val.image" />
|
|
</view>
|
|
</scroll-view>
|
|
<view class="picTxt" v-else>
|
|
<view class="acea-row" v-for="(val, key) in item.infoResponseList" :key="key">
|
|
<view class="pictrue">
|
|
<image :src="val.image" />
|
|
</view>
|
|
<view class="text info-text">
|
|
<view class="info line2">
|
|
{{ val.productName }}
|
|
</view>
|
|
<!-- 次卡商品展示核销次数 -->
|
|
<view v-if="val.productType == 8" class="attr flex">
|
|
<view>服务:</view>
|
|
<view :class="{'color-2A7EFB': val.verifyRemainingTimes != val.verifyTotalTimes}">
|
|
{{val.verifyTotalTimes - val.verifyRemainingTimes}}
|
|
</view>
|
|
<view>/</view>
|
|
<view>
|
|
{{val.verifyTotalTimes}}
|
|
</view>
|
|
</view>
|
|
<!-- 非次卡展示规格 -->
|
|
<view v-else class="attr">
|
|
{{ val.sku }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="money">
|
|
<baseMoney :money="item.payPrice" symbolSize="20" integerSize="32" decimalSize="20">
|
|
</baseMoney>
|
|
<view class="num">共{{ item.totalNum }}件</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="operation acea-row row-between-wrapper">
|
|
<view class="more">
|
|
</view>
|
|
<view class="acea-row row-middle">
|
|
<view class="bnt" v-if="item.groupBuyRecordStatus==10||item.groupBuyRecordStatus==99"
|
|
@click="modify(item, 1)">订单备注</view>
|
|
<view class="bnt primary"
|
|
v-if="[1,2].includes(item.status)&&item.refundStatus!=3&&(item.groupBuyRecordStatus==10||item.groupBuyRecordStatus==99)"
|
|
@click="goDelivery(item)">立即发货
|
|
</view>
|
|
<view class="bnt primary" v-if="item.status == 3 && item.refundStatus != 3 && item.shippingType != 5"
|
|
@click="goVerify(item)">
|
|
立即核销
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<emptyPage v-else title="暂无订单~" :imgSrc="urlDomain+'crmebimage/presets/noShopper.png'"></emptyPage>
|
|
<Loading :loaded="loaded" :loading="loading"></Loading>
|
|
<PriceChange :change="change" :orderInfo="orderInfo" :isRefund="isRefund" v-on:statusChange="statusChange($event)"
|
|
v-on:closechange="changeclose($event)" v-on:savePrice="savePrice" :status="status"></PriceChange>
|
|
<view class="mask" v-if="filterShow" @click="filterShow=!filterShow"></view>
|
|
<!-- #ifdef H5 -->
|
|
<view class="filter-popup" :class="{ on: filterShow }">
|
|
<!-- #endif -->
|
|
<!-- #ifndef H5 -->
|
|
<view class="filter-popup" :class="{ on: filterShow }" :style="{top:getHeight.barTop+getHeight.barHeight+'px'}">
|
|
<!-- #endif -->
|
|
<view class="search-box">
|
|
<view class="search acea-row row-middle">
|
|
<text class="iconfont icon-ic_search"></text>
|
|
<input class="input" placeholder='请输入要查询的订单' placeholder-style="font-size:28rpx"
|
|
placeholder-class='placeholder' confirm-type='search' name="search" v-model="searchListData.orderNo"
|
|
@confirm="searchSubmit"></input>
|
|
</view>
|
|
</view>
|
|
<view class="content">
|
|
<view class="item">
|
|
<view class="title">按下单时间</view>
|
|
<view class="acea-row list">
|
|
<view class="cell" v-for="(item, index) in dateList" :key="index"
|
|
:class="{ on: item.val == dateSelected }" @click="dateChange(item.val)">{{ item.label }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="item">
|
|
<view class="title">按订单类型</view>
|
|
<view class="acea-row list">
|
|
<view class="cell" v-for="(item, index) in payList" :key="index"
|
|
:class="{ on: item.val === searchListData.type }" @click="payChange(item.val)">
|
|
{{ item.label }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="bottom">
|
|
<view class="no_view" @click="resetBtn">重置</view>
|
|
<view class="yes_view" @click="submitBtn">确定</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view v-if="confirmShow" class="mask"></view>
|
|
<view v-if="confirmShow" class="confirm-popup">
|
|
<view class="title">确认付款</view>
|
|
<view class="info">确认该订单用户已付款</view>
|
|
<view class="acea-row btn-box">
|
|
<view class="btn" @click="confirmShow = false">取消</view>
|
|
<view class="btn primary" @click="offlinePay">确认</view>
|
|
</view>
|
|
</view>
|
|
<view class="footerH"></view>
|
|
<footerPage></footerPage>
|
|
<verificationPopup ref="verificationPopup" :verificationOrderData="verificationOrderData"></verificationPopup>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
// import UniDatetime from '../components/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue'
|
|
import Loading from '../components/Loading/index'
|
|
import PriceChange from '../components/PriceChange/index.vue'
|
|
import footerPage from '../components/footerPage/index.vue'
|
|
import countDown from '@/components/countDown/index.vue'
|
|
import emptyPage from '@/components/emptyPage.vue'
|
|
import baseMoney from '../components/BaseMoney.vue'
|
|
import verificationPopup from '../components/verificationPopup/index.vue'
|
|
// #ifdef MP || APP-PLUS
|
|
import NavBar from '../components/NavBar.vue';
|
|
// #endif
|
|
import {
|
|
isMoney
|
|
} from '@/utils/validate.js';
|
|
import {
|
|
ProductTypeEnum,
|
|
} from "@/enums/productEnums";
|
|
import {
|
|
HTTP_REQUEST_URL
|
|
} from '@/config/app';
|
|
import {
|
|
employeeOrderList,
|
|
employeeOrderMark,
|
|
orderStatusNum
|
|
} from '@/api/work.js';
|
|
export default {
|
|
name: "AdminOrderList",
|
|
components: {
|
|
Loading,
|
|
PriceChange,
|
|
footerPage,
|
|
countDown,
|
|
emptyPage,
|
|
baseMoney,
|
|
verificationPopup,
|
|
// #ifdef MP || APP-PLUS
|
|
NavBar,
|
|
// #endif
|
|
},
|
|
data() {
|
|
return {
|
|
urlDomain: this.$Cache.get("imgHost"),
|
|
datetimerange: [],
|
|
orderType: ['普通', '秒杀', '拼团'],
|
|
orderStatus: ['待支付', '待发货', '部分发货', '待使用', '待收货', '已收货', '已完成', '已取消'],
|
|
getHeight: this.$util.getWXStatusHeight(),
|
|
iconColor: '#333333',
|
|
isScrolling: false,
|
|
top: 0,
|
|
navHeight: 0,
|
|
isFixed: false,
|
|
filterShow: false,
|
|
current: "",
|
|
change: false,
|
|
types: 0,
|
|
list: [],
|
|
loaded: false,
|
|
loading: false,
|
|
orderInfo: {},
|
|
status: "",
|
|
state: 'all',
|
|
isRefund: 0, //1是仅退款;0是退货退款
|
|
imgHost: HTTP_REQUEST_URL,
|
|
dateSelected: '1',
|
|
dateList: [{
|
|
label: '全部',
|
|
val: '1',
|
|
},
|
|
{
|
|
label: '近1个月',
|
|
val: '2',
|
|
},
|
|
{
|
|
label: '近3个月',
|
|
val: '3',
|
|
},
|
|
{
|
|
label: '近6个月',
|
|
val: '4',
|
|
},
|
|
],
|
|
payList: [{
|
|
label: '全部订单',
|
|
val: '',
|
|
},
|
|
{
|
|
label: '普通订单',
|
|
val: 0,
|
|
},
|
|
{
|
|
label: '秒杀订单',
|
|
val: 1,
|
|
},
|
|
{
|
|
label: '拼团订单',
|
|
val: 2,
|
|
}
|
|
],
|
|
confirmOrder: {},
|
|
confirmShow: false,
|
|
searchListData: {
|
|
dateLimit: '',
|
|
limit: 10,
|
|
merId: '',
|
|
orderNo: '',
|
|
page: 1,
|
|
status: 'all',
|
|
type: '',
|
|
},
|
|
headerArr: {},
|
|
totalPage: '',
|
|
ProductTypeEnum,
|
|
verificationOrderData: {}, // 核销订单数据
|
|
};
|
|
},
|
|
onLoad(options) {
|
|
this.state = options.type ? options.type : 'all';
|
|
this.searchListData.status = options.type ? options.type : 'all';
|
|
},
|
|
// created() {
|
|
// this.getInitList()
|
|
// this.statusHeader()
|
|
// },
|
|
onShow() {
|
|
this.searchListData.page = 1
|
|
this.getInitList()
|
|
this.statusHeader()
|
|
},
|
|
methods: {
|
|
//订单表头数量
|
|
statusHeader() {
|
|
orderStatusNum(this.searchListData).then(res => {
|
|
this.headerArr = res.data
|
|
})
|
|
},
|
|
// 订单搜索
|
|
searchSubmit() {
|
|
this.searchListData.page = 1
|
|
this.getInitList()
|
|
this.statusHeader()
|
|
},
|
|
//订单列表
|
|
getInitList(type) {
|
|
employeeOrderList(this.searchListData).then(res => {
|
|
//下拉触底
|
|
if (type == 'bottom') {
|
|
this.list = this.list.concat(res.data.list)
|
|
} else {
|
|
this.list = res.data.list
|
|
}
|
|
this.totalPage = res.data.totalPage
|
|
}).catch(err => {
|
|
this.$util.Tips({
|
|
title: err
|
|
})
|
|
})
|
|
},
|
|
toDetail(item) {
|
|
if (item.groupBuyRecordStatus === 0) {
|
|
return this.$util.Tips({
|
|
title: '拼团中无法查看详情'
|
|
})
|
|
} else {
|
|
uni.navigateTo({
|
|
url: `/pages/admin/order/detail?orderNo=${item.orderNo}`
|
|
})
|
|
}
|
|
},
|
|
//发送货
|
|
goDelivery(item) {
|
|
if (item.refundStatus == 1) return this.$util.Tips({
|
|
title: '请处理售后,再操作',
|
|
});
|
|
uni.navigateTo({
|
|
url: `/pages/admin/order/send?orderNo=${item.orderNo}`
|
|
})
|
|
},
|
|
// 立即核销
|
|
goVerify(item) {
|
|
uni.navigateTo({
|
|
url: `/pages/admin/cancel/list?verifyCode=${item.verifyCode}&backPage=list`
|
|
})
|
|
this.verificationOrderData = item
|
|
// if (item.secondType == this.ProductTypeEnum.PunchCard) {
|
|
// this.$refs.verificationPopup.punchCardPopupHandle(true)
|
|
// } else {
|
|
// this.$refs.verificationPopup.normalPopupHandle(true)
|
|
// }
|
|
},
|
|
// 商品操作
|
|
modify: function(item, status, type) {
|
|
this.change = true;
|
|
this.status = status.toString();
|
|
this.orderInfo = item;
|
|
if (status == 2) {
|
|
this.isRefund = type
|
|
}
|
|
},
|
|
changeclose: function(msg) {
|
|
this.change = msg;
|
|
},
|
|
async savePrice(opt) {
|
|
if (!opt.remark) {
|
|
return this.$util.Tips({
|
|
title: '请输入备注'
|
|
})
|
|
} else {
|
|
this.toMark(this.orderInfo.orderNo, opt.remark)
|
|
}
|
|
},
|
|
//备注
|
|
toMark(orderNo, remark) {
|
|
employeeOrderMark({
|
|
orderNo,
|
|
remark
|
|
}).then(res => {
|
|
res.code == 200 && (this.change = false);
|
|
return this.$util.Tips({
|
|
title: '备注成功'
|
|
})
|
|
})
|
|
},
|
|
// 导航切换
|
|
changeStatus(val) {
|
|
if (this.state != val) {
|
|
this.state = val;
|
|
// this.where.status = val == -1 ? '' : val;
|
|
this.searchListData.status = val
|
|
this.searchListData.page = 1
|
|
this.searchListData = {
|
|
...this.searchListData
|
|
}
|
|
this.getInitList()
|
|
}
|
|
},
|
|
dateChange(value) {
|
|
if (value == 1) {
|
|
this.searchListData.dateLimit = ''
|
|
this.dateSelected = value;
|
|
return
|
|
} else if (value == 2) {
|
|
this.searchListData.dateLimit = 'lately30'
|
|
} else if (value == 3) {
|
|
this.searchListData.dateLimit = 'lately90'
|
|
} else if (value == 4) {
|
|
this.searchListData.dateLimit = 'lately180'
|
|
}
|
|
this.dateSelected = value;
|
|
},
|
|
payChange(val) {
|
|
this.searchListData.type = val;
|
|
},
|
|
// 点击确认按钮
|
|
submitBtn() {
|
|
this.filterShow = false;
|
|
this.searchListData.page = 1
|
|
this.getInitList()
|
|
this.statusHeader()
|
|
},
|
|
//点击重置按钮
|
|
resetBtn() {
|
|
this.searchListData.orderNo = ''
|
|
this.searchListData.dateLimit = ''
|
|
this.searchListData.type = '';
|
|
this.dateSelected = '1'
|
|
}
|
|
},
|
|
onReachBottom() {
|
|
this.searchListData.page += 1
|
|
this.totalPage >= this.searchListData.page && this.getInitList('bottom')
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import '../style/admin_order.scss';
|
|
|
|
.color-2A7EFB {
|
|
color: #2A7EFB;
|
|
}
|
|
</style> |