Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp
# Conflicts: # pages/goods/index.vue # pages/order/confirm.vue # pages/order/detail.vuepull/70/head
commit
1aa944e18c
|
@ -90,6 +90,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.7",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
"lodash-es": "^4.17.21",
|
||||||
"luch-request": "^3.0.8",
|
"luch-request": "^3.0.8",
|
||||||
"pinia": "^2.0.33",
|
"pinia": "^2.0.33",
|
||||||
"pinia-plugin-persist-uni": "^1.2.0",
|
"pinia-plugin-persist-uni": "^1.2.0",
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
<!-- 拼团订单的详情 -->
|
<!-- 拼团订单的详情 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="拼团详情" class="detail-wrap" :navbar="state.data && !state.loading ? 'inner': 'normal'" :onShareAppMessage="shareInfo">
|
<s-layout
|
||||||
|
title="拼团详情"
|
||||||
|
class="detail-wrap"
|
||||||
|
:navbar="state.data && !state.loading ? 'inner' : 'normal'"
|
||||||
|
:onShareAppMessage="shareInfo"
|
||||||
|
>
|
||||||
<view v-if="state.loading"></view>
|
<view v-if="state.loading"></view>
|
||||||
<view v-if="state.data && !state.loading">
|
<view v-if="state.data && !state.loading">
|
||||||
<!-- 团长信息 + 活动信息 -->
|
<!-- 团长信息 + 活动信息 -->
|
||||||
|
@ -22,7 +27,7 @@
|
||||||
priceColor="#E1212B"
|
priceColor="#E1212B"
|
||||||
@tap="
|
@tap="
|
||||||
sheep.$router.go('/pages/goods/groupon', {
|
sheep.$router.go('/pages/goods/groupon', {
|
||||||
id: state.data.headRecord.activityId
|
id: state.data.headRecord.activityId,
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
:style="[{ top: Number(statusBarHeight + 108) + 'rpx' }]"
|
:style="[{ top: Number(statusBarHeight + 108) + 'rpx' }]"
|
||||||
|
@ -71,7 +76,9 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="countdown-title ss-flex" v-else>
|
<view class="countdown-title ss-flex" v-else>
|
||||||
还差
|
还差
|
||||||
<view class="num">{{ state.data.headRecord.userSize - state.data.headRecord.userCount }}人</view>
|
<view class="num"
|
||||||
|
>{{ state.data.headRecord.userSize - state.data.headRecord.userCount }}人</view
|
||||||
|
>
|
||||||
拼团成功
|
拼团成功
|
||||||
<view class="ss-flex countdown-time">
|
<view class="ss-flex countdown-time">
|
||||||
<view class="countdown-h ss-flex ss-row-center">{{ endTime.h }}</view>
|
<view class="countdown-h ss-flex ss-row-center">{{ endTime.h }}</view>
|
||||||
|
@ -109,7 +116,11 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 还有几个坑位 -->
|
<!-- 还有几个坑位 -->
|
||||||
<view class="default-avatar ss-m-r-24 ss-m-b-20" v-for="item in state.remainNumber" :key="item">
|
<view
|
||||||
|
class="default-avatar ss-m-r-24 ss-m-b-20"
|
||||||
|
v-for="item in state.remainNumber"
|
||||||
|
:key="item"
|
||||||
|
>
|
||||||
<image
|
<image
|
||||||
:src="sheep.$url.static('/static/img/shop/avatar/unknown.png')"
|
:src="sheep.$url.static('/static/img/shop/avatar/unknown.png')"
|
||||||
class="avatar-img"
|
class="avatar-img"
|
||||||
|
@ -154,11 +165,7 @@
|
||||||
</view>
|
</view>
|
||||||
<view v-else class="ss-flex ss-row-center">
|
<view v-else class="ss-flex ss-row-center">
|
||||||
<view v-if="state.data.orderId">
|
<view v-if="state.data.orderId">
|
||||||
<button
|
<button class="ss-reset-button join-btn" :disabled="endTime.ms <= 0" @tap="onShare">
|
||||||
class="ss-reset-button join-btn"
|
|
||||||
:disabled="endTime.ms <= 0"
|
|
||||||
@tap="onShare"
|
|
||||||
>
|
|
||||||
邀请好友来拼团
|
邀请好友来拼团
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -198,8 +205,8 @@
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { useDurationTime } from '@/sheep/hooks/useGoods';
|
import { useDurationTime } from '@/sheep/hooks/useGoods';
|
||||||
import { showShareModal } from '@/sheep/hooks/useModal';
|
import { showShareModal } from '@/sheep/hooks/useModal';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import CombinationApi from "@/sheep/api/promotion/combination";
|
import CombinationApi from '@/sheep/api/promotion/combination';
|
||||||
|
|
||||||
const headerBg = sheep.$url.css('/static/img/shop/user/withdraw_bg.png');
|
const headerBg = sheep.$url.css('/static/img/shop/user/withdraw_bg.png');
|
||||||
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
||||||
|
@ -295,7 +302,9 @@
|
||||||
state.remainNumber = remainNumber > 0 ? remainNumber : 0;
|
state.remainNumber = remainNumber > 0 ? remainNumber : 0;
|
||||||
|
|
||||||
// 获取活动信息
|
// 获取活动信息
|
||||||
const { data: activity } = await CombinationApi.getCombinationActivity(data.headRecord.activityId);
|
const { data: activity } = await CombinationApi.getCombinationActivity(
|
||||||
|
data.headRecord.activityId,
|
||||||
|
);
|
||||||
state.activity = activity;
|
state.activity = activity;
|
||||||
} else {
|
} else {
|
||||||
state.data = null;
|
state.data = null;
|
||||||
|
@ -316,8 +325,7 @@
|
||||||
.recharge-box {
|
.recharge-box {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-bottom: 120rpx;
|
margin-bottom: 120rpx;
|
||||||
background: v-bind(headerBg) center/750rpx 100%
|
background: v-bind(headerBg) center/750rpx 100% no-repeat,
|
||||||
no-repeat,
|
|
||||||
linear-gradient(115deg, #f44739 0%, #ff6600 100%);
|
linear-gradient(115deg, #f44739 0%, #ff6600 100%);
|
||||||
border-radius: 0 0 5% 5%;
|
border-radius: 0 0 5% 5%;
|
||||||
height: 100rpx;
|
height: 100rpx;
|
||||||
|
|
|
@ -67,8 +67,8 @@
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import {formatOrderColor} from "@/sheep/hooks/useGoods";
|
import { formatOrderColor } from '@/sheep/hooks/useGoods';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
import CombinationApi from '@/sheep/api/promotion/combination';
|
import CombinationApi from '@/sheep/api/promotion/combination';
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.list = _.concat(state.pagination.list, data.list)
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.pagination.total = data.total;
|
state.pagination.total = data.total;
|
||||||
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import RewardActivityApi from '@/sheep/api/promotion/rewardActivity';
|
import RewardActivityApi from '@/sheep/api/promotion/rewardActivity';
|
||||||
import { formatRewardActivityRule } from '@/sheep/hooks/useGoods';
|
import { formatRewardActivityRule } from '@/sheep/hooks/useGoods';
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
|
@ -118,7 +118,7 @@
|
||||||
const { code, data } = await SpuApi.getSpuPage({
|
const { code, data } = await SpuApi.getSpuPage({
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
pageSize: state.pagination.pageSize,
|
pageSize: state.pagination.pageSize,
|
||||||
...params
|
...params,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, watch } from 'vue';
|
import { reactive, watch } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import GoodsItem from './goods.vue';
|
import GoodsItem from './goods.vue';
|
||||||
import OrderItem from './order.vue';
|
import OrderItem from './order.vue';
|
||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
|
|
|
@ -8,14 +8,26 @@
|
||||||
<text class="cicon-forward" />
|
<text class="cicon-forward" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<scroll-view scroll-y="true" @scrolltolower="loadmore" class="scroll-box log-scroll"
|
<scroll-view
|
||||||
scroll-with-animation="true">
|
scroll-y="true"
|
||||||
|
@scrolltolower="loadmore"
|
||||||
|
class="scroll-box log-scroll"
|
||||||
|
scroll-with-animation="true"
|
||||||
|
>
|
||||||
<view v-if="state.pagination.list">
|
<view v-if="state.pagination.list">
|
||||||
<view class="log-item-box ss-flex ss-row-between" v-for="item in state.pagination.list" :key="item.id">
|
<view
|
||||||
|
class="log-item-box ss-flex ss-row-between"
|
||||||
|
v-for="item in state.pagination.list"
|
||||||
|
:key="item.id"
|
||||||
|
>
|
||||||
<view class="log-item-wrap">
|
<view class="log-item-wrap">
|
||||||
<view class="log-item ss-flex ss-ellipsis-1 ss-col-center">
|
<view class="log-item ss-flex ss-ellipsis-1 ss-col-center">
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<image class="log-img" :src="sheep.$url.static('/static/img/shop/avatar/notice.png')" mode="aspectFill" />
|
<image
|
||||||
|
class="log-img"
|
||||||
|
:src="sheep.$url.static('/static/img/shop/avatar/notice.png')"
|
||||||
|
mode="aspectFill"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="log-text ss-ellipsis-1">
|
<view class="log-text ss-ellipsis-1">
|
||||||
{{ item.title }} {{ fen2yuan(item.price) }} 元
|
{{ item.title }} {{ fen2yuan(item.price) }} 元
|
||||||
|
@ -27,8 +39,12 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 加载更多 -->
|
<!-- 加载更多 -->
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" color="#333333"
|
<uni-load-more
|
||||||
@tap="loadmore" />
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
color="#333333"
|
||||||
|
@tap="loadmore"
|
||||||
|
/>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
@ -36,7 +52,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
import { fen2yuan } from '../../../sheep/hooks/useGoods';
|
import { fen2yuan } from '../../../sheep/hooks/useGoods';
|
||||||
|
@ -55,7 +71,7 @@
|
||||||
state.loadStatus = 'loading';
|
state.loadStatus = 'loading';
|
||||||
const { code, data } = await BrokerageApi.getBrokerageRecordPage({
|
const { code, data } = await BrokerageApi.getBrokerageRecordPage({
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
pageSize: state.pagination.pageSize
|
pageSize: state.pagination.pageSize,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -14,12 +14,18 @@
|
||||||
>
|
>
|
||||||
<template #rightBottom>
|
<template #rightBottom>
|
||||||
<view class="ss-flex ss-row-between">
|
<view class="ss-flex ss-row-between">
|
||||||
<view class="commission-num" v-if="item.brokerageMinPrice === undefined">预计佣金:计算中</view>
|
<view class="commission-num" v-if="item.brokerageMinPrice === undefined"
|
||||||
<view class="commission-num" v-else-if="item.brokerageMinPrice === item.brokerageMaxPrice">
|
>预计佣金:计算中</view
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
class="commission-num"
|
||||||
|
v-else-if="item.brokerageMinPrice === item.brokerageMaxPrice"
|
||||||
|
>
|
||||||
预计佣金:{{ fen2yuan(item.brokerageMinPrice) }}
|
预计佣金:{{ fen2yuan(item.brokerageMinPrice) }}
|
||||||
</view>
|
</view>
|
||||||
<view class="commission-num" v-else>
|
<view class="commission-num" v-else>
|
||||||
预计佣金:{{ fen2yuan(item.brokerageMinPrice) }} ~ {{ fen2yuan(item.brokerageMaxPrice) }}
|
预计佣金:{{ fen2yuan(item.brokerageMinPrice) }} ~
|
||||||
|
{{ fen2yuan(item.brokerageMaxPrice) }}
|
||||||
</view>
|
</view>
|
||||||
<button
|
<button
|
||||||
class="ss-reset-button share-btn ui-BG-Main-Gradient"
|
class="ss-reset-button share-btn ui-BG-Main-Gradient"
|
||||||
|
@ -53,7 +59,7 @@
|
||||||
import $share from '@/sheep/platform/share';
|
import $share from '@/sheep/platform/share';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { showShareModal } from '@/sheep/hooks/useModal';
|
import { showShareModal } from '@/sheep/hooks/useModal';
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
|
|
|
@ -41,10 +41,7 @@
|
||||||
<view class="no-box ss-flex ss-col-center ss-row-between">
|
<view class="no-box ss-flex ss-col-center ss-row-between">
|
||||||
<text class="order-code">订单编号:{{ item.bizId }}</text>
|
<text class="order-code">订单编号:{{ item.bizId }}</text>
|
||||||
<text class="order-state">
|
<text class="order-state">
|
||||||
{{
|
{{ item.status === 0 ? '待结算' : item.status === 1 ? '已结算' : '已取消' }}
|
||||||
item.status === 0 ? '待结算'
|
|
||||||
: item.status === 1 ? '已结算' : '已取消'
|
|
||||||
}}
|
|
||||||
( 佣金 {{ fen2yuan(item.price) }} 元 )
|
( 佣金 {{ fen2yuan(item.price) }} 元 )
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
|
@ -77,7 +74,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { onPageScroll } from '@dcloudio/uni-app';
|
import { onPageScroll } from '@dcloudio/uni-app';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
|
|
|
@ -235,7 +235,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { computed, reactive, ref } from 'vue';
|
import { computed, reactive, ref } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { onPageScroll } from '@dcloudio/uni-app';
|
import { onPageScroll } from '@dcloudio/uni-app';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,22 @@
|
||||||
<view class="card-box ui-BG-Main ui-Shadow-Main">
|
<view class="card-box ui-BG-Main ui-Shadow-Main">
|
||||||
<view class="card-head ss-flex ss-col-center">
|
<view class="card-head ss-flex ss-col-center">
|
||||||
<view class="card-title ss-m-r-10">当前佣金(元)</view>
|
<view class="card-title ss-m-r-10">当前佣金(元)</view>
|
||||||
<view @tap="state.showMoney = !state.showMoney" class="ss-eye-icon"
|
<view
|
||||||
:class="state.showMoney ? 'cicon-eye' : 'cicon-eye-off'" />
|
@tap="state.showMoney = !state.showMoney"
|
||||||
|
class="ss-eye-icon"
|
||||||
|
:class="state.showMoney ? 'cicon-eye' : 'cicon-eye-off'"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-flex ss-row-between ss-col-center ss-m-t-30">
|
<view class="ss-flex ss-row-between ss-col-center ss-m-t-30">
|
||||||
<view class="money-num">{{ state.showMoney ? fen2yuan(state.summary.withdrawPrice || 0) : '*****' }}</view>
|
<view class="money-num">{{
|
||||||
|
state.showMoney ? fen2yuan(state.summary.withdrawPrice || 0) : '*****'
|
||||||
|
}}</view>
|
||||||
<view class="ss-flex">
|
<view class="ss-flex">
|
||||||
<view class="ss-m-r-20">
|
<view class="ss-m-r-20">
|
||||||
<button class="ss-reset-button withdraw-btn" @tap="sheep.$router.go('/pages/commission/withdraw')">
|
<button
|
||||||
|
class="ss-reset-button withdraw-btn"
|
||||||
|
@tap="sheep.$router.go('/pages/commission/withdraw')"
|
||||||
|
>
|
||||||
提现
|
提现
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -43,7 +51,12 @@
|
||||||
<su-sticky>
|
<su-sticky>
|
||||||
<!-- 统计 -->
|
<!-- 统计 -->
|
||||||
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
||||||
<uni-datetime-picker v-model="state.date" type="daterange" @change="onChangeTime" :end="state.today">
|
<uni-datetime-picker
|
||||||
|
v-model="state.date"
|
||||||
|
type="daterange"
|
||||||
|
@change="onChangeTime"
|
||||||
|
:end="state.today"
|
||||||
|
>
|
||||||
<button class="ss-reset-button date-btn">
|
<button class="ss-reset-button date-btn">
|
||||||
<text>{{ dateFilterText }}</text>
|
<text>{{ dateFilterText }}</text>
|
||||||
<text class="cicon-drop-down ss-seldate-icon" />
|
<text class="cicon-drop-down ss-seldate-icon" />
|
||||||
|
@ -56,21 +69,44 @@
|
||||||
<!-- <view>总支出¥{{ (-state.pagination.expense).toFixed(2) }}</view> -->
|
<!-- <view>总支出¥{{ (-state.pagination.expense).toFixed(2) }}</view> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<su-tabs :list="tabMaps" @change="onChangeTab" :scrollable="false" :current="state.currentTab" />
|
<su-tabs
|
||||||
|
:list="tabMaps"
|
||||||
|
@change="onChangeTab"
|
||||||
|
:scrollable="false"
|
||||||
|
:current="state.currentTab"
|
||||||
|
/>
|
||||||
</su-sticky>
|
</su-sticky>
|
||||||
<s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" text="暂无数据"></s-empty>
|
<s-empty
|
||||||
|
v-if="state.pagination.total === 0"
|
||||||
|
icon="/static/data-empty.png"
|
||||||
|
text="暂无数据"
|
||||||
|
></s-empty>
|
||||||
|
|
||||||
<!-- 转余额弹框 -->
|
<!-- 转余额弹框 -->
|
||||||
<su-popup :show="state.showModal" type="bottom" round="20" @close="state.showModal = false" showClose>
|
<su-popup
|
||||||
|
:show="state.showModal"
|
||||||
|
type="bottom"
|
||||||
|
round="20"
|
||||||
|
@close="state.showModal = false"
|
||||||
|
showClose
|
||||||
|
>
|
||||||
<view class="ss-p-x-20 ss-p-y-30">
|
<view class="ss-p-x-20 ss-p-y-30">
|
||||||
<view class="model-title ss-m-b-30 ss-m-l-20">转余额</view>
|
<view class="model-title ss-m-b-30 ss-m-l-20">转余额</view>
|
||||||
<view class="model-subtitle ss-m-b-100 ss-m-l-20">将您的佣金转到余额中继续消费</view>
|
<view class="model-subtitle ss-m-b-100 ss-m-l-20">将您的佣金转到余额中继续消费</view>
|
||||||
<view class="input-box ss-flex ss-col-center border-bottom ss-m-b-70 ss-m-x-20">
|
<view class="input-box ss-flex ss-col-center border-bottom ss-m-b-70 ss-m-x-20">
|
||||||
<view class="unit">¥</view>
|
<view class="unit">¥</view>
|
||||||
<uni-easyinput :inputBorder="false" class="ss-flex-1 ss-p-l-10" v-model="state.price" type="number"
|
<uni-easyinput
|
||||||
placeholder="请输入金额" />
|
:inputBorder="false"
|
||||||
|
class="ss-flex-1 ss-p-l-10"
|
||||||
|
v-model="state.price"
|
||||||
|
type="number"
|
||||||
|
placeholder="请输入金额"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
<button class="ss-reset-button model-btn ui-BG-Main-Gradient ui-Shadow-Main" @tap="onConfirm">
|
<button
|
||||||
|
class="ss-reset-button model-btn ui-BG-Main-Gradient ui-Shadow-Main"
|
||||||
|
@tap="onConfirm"
|
||||||
|
>
|
||||||
确定
|
确定
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -78,7 +114,11 @@
|
||||||
|
|
||||||
<!-- 钱包记录 -->
|
<!-- 钱包记录 -->
|
||||||
<view v-if="state.pagination.total > 0">
|
<view v-if="state.pagination.total > 0">
|
||||||
<view class="wallet-list ss-flex border-bottom" v-for="item in state.pagination.list" :key="item.id">
|
<view
|
||||||
|
class="wallet-list ss-flex border-bottom"
|
||||||
|
v-for="item in state.pagination.list"
|
||||||
|
:key="item.id"
|
||||||
|
>
|
||||||
<view class="list-content">
|
<view class="list-content">
|
||||||
<view class="title-box ss-flex ss-row-between ss-m-b-20">
|
<view class="title-box ss-flex ss-row-between ss-m-b-20">
|
||||||
<text class="title ss-line-1">{{ item.title }}</text>
|
<text class="title ss-line-1">{{ item.title }}</text>
|
||||||
|
@ -87,15 +127,21 @@
|
||||||
<text v-else class="minus">{{ fen2yuan(item.price) }}</text>
|
<text v-else class="minus">{{ fen2yuan(item.price) }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<text class="time">{{ sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }}</text>
|
<text class="time">{{
|
||||||
|
sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss')
|
||||||
|
}}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- <u-gap></u-gap> -->
|
<!-- <u-gap></u-gap> -->
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}" />
|
}"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -104,7 +150,7 @@
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
@ -130,14 +176,15 @@
|
||||||
showModal: false,
|
showModal: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const tabMaps = [{
|
const tabMaps = [
|
||||||
|
{
|
||||||
name: '分佣',
|
name: '分佣',
|
||||||
value: '1', // BrokerageRecordBizTypeEnum.ORDER
|
value: '1', // BrokerageRecordBizTypeEnum.ORDER
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '提现',
|
name: '提现',
|
||||||
value: '2', // BrokerageRecordBizTypeEnum.WITHDRAW
|
value: '2', // BrokerageRecordBizTypeEnum.WITHDRAW
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const dateFilterText = computed(() => {
|
const dateFilterText = computed(() => {
|
||||||
|
@ -199,10 +246,10 @@
|
||||||
state.showModal = false;
|
state.showModal = false;
|
||||||
await getAgentInfo();
|
await getAgentInfo();
|
||||||
onChangeTab({
|
onChangeTab({
|
||||||
index: 1
|
index: 1,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +264,8 @@
|
||||||
onLoad(async (options) => {
|
onLoad(async (options) => {
|
||||||
state.today = dayjs().format('YYYY-MM-DD');
|
state.today = dayjs().format('YYYY-MM-DD');
|
||||||
state.date = [state.today, state.today];
|
state.date = [state.today, state.today];
|
||||||
if (options.type === 2) { // 切换到“提现” tab 下
|
if (options.type === 2) {
|
||||||
|
// 切换到“提现” tab 下
|
||||||
state.currentTab = 1;
|
state.currentTab = 1;
|
||||||
}
|
}
|
||||||
getLogList();
|
getLogList();
|
||||||
|
|
|
@ -16,13 +16,16 @@
|
||||||
<view class="title ss-m-t-50 ss-m-b-20 ss-m-x-20">{{ state.coupon.name }}</view>
|
<view class="title ss-m-t-50 ss-m-b-20 ss-m-x-20">{{ state.coupon.name }}</view>
|
||||||
<view class="subtitle ss-m-b-50">
|
<view class="subtitle ss-m-b-50">
|
||||||
满 {{ fen2yuan(state.coupon.usePrice) }} 元,
|
满 {{ fen2yuan(state.coupon.usePrice) }} 元,
|
||||||
{{ state.coupon.discountType === 1
|
{{
|
||||||
|
state.coupon.discountType === 1
|
||||||
? '减 ' + fen2yuan(state.coupon.discountPrice) + ' 元'
|
? '减 ' + fen2yuan(state.coupon.discountPrice) + ' 元'
|
||||||
: '打 ' + state.coupon.discountPercent / 10.0 + ' 折' }}
|
: '打 ' + state.coupon.discountPercent / 10.0 + ' 折'
|
||||||
|
}}
|
||||||
</view>
|
</view>
|
||||||
<button
|
<button
|
||||||
class="ss-reset-button ss-m-b-30"
|
class="ss-reset-button ss-m-b-30"
|
||||||
:class="state.coupon.canTake || state.coupon.status === 1
|
:class="
|
||||||
|
state.coupon.canTake || state.coupon.status === 1
|
||||||
? 'use-btn' // 优惠劵模版(可领取)、优惠劵(可使用)
|
? 'use-btn' // 优惠劵模版(可领取)、优惠劵(可使用)
|
||||||
: 'disable-btn'
|
: 'disable-btn'
|
||||||
"
|
"
|
||||||
|
@ -31,7 +34,13 @@
|
||||||
>
|
>
|
||||||
<text v-if="state.id > 0">{{ state.coupon.canTake ? '立即领取' : '已领取' }}</text>
|
<text v-if="state.id > 0">{{ state.coupon.canTake ? '立即领取' : '已领取' }}</text>
|
||||||
<text v-else>
|
<text v-else>
|
||||||
{{ state.coupon.status === 1 ? '立即使用' : state.coupon.status === 2 ? '已使用' : '已过期' }}
|
{{
|
||||||
|
state.coupon.status === 1
|
||||||
|
? '立即使用'
|
||||||
|
: state.coupon.status === 2
|
||||||
|
? '已使用'
|
||||||
|
: '已过期'
|
||||||
|
}}
|
||||||
</text>
|
</text>
|
||||||
</button>
|
</button>
|
||||||
<view class="time ss-m-y-30" v-if="state.coupon.validityType === 2">
|
<view class="time ss-m-y-30" v-if="state.coupon.validityType === 2">
|
||||||
|
@ -140,7 +149,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import CouponApi from '@/sheep/api/promotion/coupon';
|
import CouponApi from '@/sheep/api/promotion/coupon';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
|
@ -176,7 +185,7 @@
|
||||||
const { code, data } = await SpuApi.getSpuPage({
|
const { code, data } = await SpuApi.getSpuPage({
|
||||||
categoryId: state.categoryId,
|
categoryId: state.categoryId,
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
pageSize: state.pagination.pageSize
|
pageSize: state.pagination.pageSize,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -197,7 +206,9 @@
|
||||||
|
|
||||||
// 获得分类列表
|
// 获得分类列表
|
||||||
async function getCategoryList() {
|
async function getCategoryList() {
|
||||||
const { data, code } = await CategoryApi.getCategoryListByIds(state.coupon.productScopeValues.join(','));
|
const { data, code } = await CategoryApi.getCategoryListByIds(
|
||||||
|
state.coupon.productScopeValues.join(','),
|
||||||
|
);
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -225,7 +236,9 @@
|
||||||
|
|
||||||
// 加载优惠劵信息
|
// 加载优惠劵信息
|
||||||
async function getCouponContent() {
|
async function getCouponContent() {
|
||||||
const { code, data } = state.id > 0 ? await CouponApi.getCouponTemplate(state.id)
|
const { code, data } =
|
||||||
|
state.id > 0
|
||||||
|
? await CouponApi.getCouponTemplate(state.id)
|
||||||
: await CouponApi.getCoupon(state.couponId);
|
: await CouponApi.getCoupon(state.couponId);
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -56,9 +56,14 @@
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}" @tap="loadMore" />
|
}"
|
||||||
|
@tap="loadMore"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -66,7 +71,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
import CouponApi from '@/sheep/api/promotion/coupon';
|
import CouponApi from '@/sheep/api/promotion/coupon';
|
||||||
|
|
||||||
|
@ -78,7 +83,7 @@
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 5
|
pageSize: 5,
|
||||||
},
|
},
|
||||||
loadStatus: '',
|
loadStatus: '',
|
||||||
});
|
});
|
||||||
|
@ -106,7 +111,7 @@
|
||||||
function onTabsChange(e) {
|
function onTabsChange(e) {
|
||||||
state.currentTab = e.index;
|
state.currentTab = e.index;
|
||||||
state.type = e.value;
|
state.type = e.value;
|
||||||
resetPagination(state.pagination)
|
resetPagination(state.pagination);
|
||||||
if (state.currentTab === 0) {
|
if (state.currentTab === 0) {
|
||||||
getData();
|
getData();
|
||||||
} else {
|
} else {
|
||||||
|
@ -135,7 +140,7 @@
|
||||||
const { data, code } = await CouponApi.getCouponPage({
|
const { data, code } = await CouponApi.getCouponPage({
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
pageSize: state.pagination.pageSize,
|
pageSize: state.pagination.pageSize,
|
||||||
status: state.type
|
status: state.type,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
import CommentApi from '@/sheep/api/product/comment';
|
import CommentApi from '@/sheep/api/product/comment';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import commentItem from '../components/detail/comment-item.vue';
|
import commentItem from '../components/detail/comment-item.vue';
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
|
|
@ -7,7 +7,11 @@
|
||||||
<detailSkeleton v-if="state.skeletonLoading" />
|
<detailSkeleton v-if="state.skeletonLoading" />
|
||||||
<!-- 下架/售罄提醒 -->
|
<!-- 下架/售罄提醒 -->
|
||||||
<s-empty
|
<s-empty
|
||||||
v-else-if="state.goodsInfo === null || state.activity.status !== 0 || state.activity.endTime < new Date().getTime()"
|
v-else-if="
|
||||||
|
state.goodsInfo === null ||
|
||||||
|
state.activity.status !== 0 ||
|
||||||
|
state.activity.endTime < new Date().getTime()
|
||||||
|
"
|
||||||
text="活动不存在或已结束"
|
text="活动不存在或已结束"
|
||||||
icon="/static/soldout-empty.png"
|
icon="/static/soldout-empty.png"
|
||||||
showAction
|
showAction
|
||||||
|
@ -47,10 +51,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-flex ss-row-between">
|
<view class="ss-flex ss-row-between">
|
||||||
<view
|
<view class="origin-price ss-flex ss-col-center" v-if="state.goodsInfo.price">
|
||||||
class="origin-price ss-flex ss-col-center"
|
|
||||||
v-if="state.goodsInfo.price"
|
|
||||||
>
|
|
||||||
单买价:
|
单买价:
|
||||||
<view class="origin-price-text">
|
<view class="origin-price-text">
|
||||||
{{ fen2yuan(state.goodsInfo.price) }}
|
{{ fen2yuan(state.goodsInfo.price) }}
|
||||||
|
@ -123,7 +124,9 @@
|
||||||
"
|
"
|
||||||
:disabled="state.goodsInfo.stock === 0 || state.activity.status !== 0"
|
:disabled="state.goodsInfo.stock === 0 || state.activity.status !== 0"
|
||||||
>
|
>
|
||||||
<view class="btn-price">{{ fen2yuan(state.activity.price || state.goodsInfo.price) }}</view>
|
<view class="btn-price">{{
|
||||||
|
fen2yuan(state.activity.price || state.goodsInfo.price)
|
||||||
|
}}</view>
|
||||||
<view v-if="state.activity.startTime > new Date().getTime()">未开始</view>
|
<view v-if="state.activity.startTime > new Date().getTime()">未开始</view>
|
||||||
<view v-else-if="state.activity.endTime <= new Date().getTime()">已结束</view>
|
<view v-else-if="state.activity.endTime <= new Date().getTime()">已结束</view>
|
||||||
<view v-else>
|
<view v-else>
|
||||||
|
@ -141,7 +144,7 @@
|
||||||
import { reactive, computed } from 'vue';
|
import { reactive, computed } from 'vue';
|
||||||
import { onLoad, onPageScroll } from '@dcloudio/uni-app';
|
import { onLoad, onPageScroll } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import detailNavbar from './components/detail/detail-navbar.vue';
|
import detailNavbar from './components/detail/detail-navbar.vue';
|
||||||
import detailCellSku from './components/detail/detail-cell-sku.vue';
|
import detailCellSku from './components/detail/detail-cell-sku.vue';
|
||||||
import detailTabbar from './components/detail/detail-tabbar.vue';
|
import detailTabbar from './components/detail/detail-tabbar.vue';
|
||||||
|
@ -150,14 +153,12 @@
|
||||||
import detailContentCard from './components/detail/detail-content-card.vue';
|
import detailContentCard from './components/detail/detail-content-card.vue';
|
||||||
import grouponCardList from './components/groupon/groupon-card-list.vue';
|
import grouponCardList from './components/groupon/groupon-card-list.vue';
|
||||||
import { useDurationTime, formatGoodsSwiper, fen2yuan } from '@/sheep/hooks/useGoods';
|
import { useDurationTime, formatGoodsSwiper, fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import CombinationApi from "@/sheep/api/promotion/combination";
|
import CombinationApi from '@/sheep/api/promotion/combination';
|
||||||
import SpuApi from "@/sheep/api/product/spu";
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
|
|
||||||
const headerBg = sheep.$url.css('/static/img/shop/goods/groupon-bg.png');
|
const headerBg = sheep.$url.css('/static/img/shop/goods/groupon-bg.png');
|
||||||
const btnBg = sheep.$url.css('/static/img/shop/goods/groupon-btn.png');
|
const btnBg = sheep.$url.css('/static/img/shop/goods/groupon-btn.png');
|
||||||
const disabledBtnBg = sheep.$url.css(
|
const disabledBtnBg = sheep.$url.css('/static/img/shop/goods/activity-btn-disabled.png');
|
||||||
'/static/img/shop/goods/activity-btn-disabled.png',
|
|
||||||
);
|
|
||||||
const grouponBg = sheep.$url.css('/static/img/shop/goods/groupon-tip-bg.png');
|
const grouponBg = sheep.$url.css('/static/img/shop/goods/groupon-tip-bg.png');
|
||||||
|
|
||||||
onPageScroll(() => {});
|
onPageScroll(() => {});
|
||||||
|
@ -261,7 +262,7 @@
|
||||||
// 加载商品信息
|
// 加载商品信息
|
||||||
const { data: spu } = await SpuApi.getSpuDetail(activity.spuId);
|
const { data: spu } = await SpuApi.getSpuDetail(activity.spuId);
|
||||||
state.goodsId = spu.id;
|
state.goodsId = spu.id;
|
||||||
activity.products.forEach(product => {
|
activity.products.forEach((product) => {
|
||||||
spu.price = Math.min(spu.price, product.combinationPrice); // 设置 SPU 的最低价格
|
spu.price = Math.min(spu.price, product.combinationPrice); // 设置 SPU 的最低价格
|
||||||
});
|
});
|
||||||
// 关闭骨架屏
|
// 关闭骨架屏
|
||||||
|
@ -475,8 +476,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.groupon-box {
|
.groupon-box {
|
||||||
background: v-bind(grouponBg)
|
background: v-bind(grouponBg) no-repeat;
|
||||||
no-repeat;
|
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,22 @@
|
||||||
<template>
|
<template>
|
||||||
<s-layout navbar="normal" :leftWidth="0" :rightWidth="0" tools="search" :defaultSearch="state.keyword"
|
<s-layout
|
||||||
@search="onSearch">
|
navbar="normal"
|
||||||
|
:leftWidth="0"
|
||||||
|
:rightWidth="0"
|
||||||
|
tools="search"
|
||||||
|
:defaultSearch="state.keyword"
|
||||||
|
@search="onSearch"
|
||||||
|
>
|
||||||
<!-- 筛选 -->
|
<!-- 筛选 -->
|
||||||
<su-sticky bgColor="#fff">
|
<su-sticky bgColor="#fff">
|
||||||
<view class="ss-flex">
|
<view class="ss-flex">
|
||||||
<view class="ss-flex-1">
|
<view class="ss-flex-1">
|
||||||
<su-tabs :list="state.tabList" :scrollable="false" @change="onTabsChange"
|
<su-tabs
|
||||||
:current="state.currentTab" />
|
:list="state.tabList"
|
||||||
|
:scrollable="false"
|
||||||
|
@change="onTabsChange"
|
||||||
|
:current="state.currentTab"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="list-icon" @tap="state.iconStatus = !state.iconStatus">
|
<view class="list-icon" @tap="state.iconStatus = !state.iconStatus">
|
||||||
<text v-if="state.iconStatus" class="sicon-goods-list" />
|
<text v-if="state.iconStatus" class="sicon-goods-list" />
|
||||||
|
@ -16,12 +26,23 @@
|
||||||
</su-sticky>
|
</su-sticky>
|
||||||
|
|
||||||
<!-- 弹窗 -->
|
<!-- 弹窗 -->
|
||||||
<su-popup :show="state.showFilter" type="top" round="10" :space="sys_navBar + 38" backgroundColor="#F6F6F6"
|
<su-popup
|
||||||
:zIndex="10" @close="state.showFilter = false">
|
:show="state.showFilter"
|
||||||
|
type="top"
|
||||||
|
round="10"
|
||||||
|
:space="sys_navBar + 38"
|
||||||
|
backgroundColor="#F6F6F6"
|
||||||
|
:zIndex="10"
|
||||||
|
@close="state.showFilter = false"
|
||||||
|
>
|
||||||
<view class="filter-list-box">
|
<view class="filter-list-box">
|
||||||
<view class="filter-item" v-for="(item, index) in state.tabList[state.currentTab].list"
|
<view
|
||||||
:key="item.value" :class="[{ 'filter-item-active': index === state.curFilter }]"
|
class="filter-item"
|
||||||
@tap="onFilterItem(index)">
|
v-for="(item, index) in state.tabList[state.currentTab].list"
|
||||||
|
:key="item.value"
|
||||||
|
:class="[{ 'filter-item-active': index === state.curFilter }]"
|
||||||
|
@tap="onFilterItem(index)"
|
||||||
|
>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -29,7 +50,11 @@
|
||||||
|
|
||||||
<!-- 情况一:单列布局 -->
|
<!-- 情况一:单列布局 -->
|
||||||
<view v-if="state.iconStatus && state.pagination.total > 0" class="goods-list ss-m-t-20">
|
<view v-if="state.iconStatus && state.pagination.total > 0" class="goods-list ss-m-t-20">
|
||||||
<view class="ss-p-l-20 ss-p-r-20 ss-m-b-20" v-for="item in state.pagination.list" :key="item.id">
|
<view
|
||||||
|
class="ss-p-l-20 ss-p-r-20 ss-m-b-20"
|
||||||
|
v-for="item in state.pagination.list"
|
||||||
|
:key="item.id"
|
||||||
|
>
|
||||||
<s-goods-column
|
<s-goods-column
|
||||||
class=""
|
class=""
|
||||||
size="lg"
|
size="lg"
|
||||||
|
@ -41,8 +66,10 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 情况二:双列布局 -->
|
<!-- 情况二:双列布局 -->
|
||||||
<view v-if="!state.iconStatus && state.pagination.total > 0"
|
<view
|
||||||
class="ss-flex ss-flex-wrap ss-p-x-20 ss-m-t-20 ss-col-top">
|
v-if="!state.iconStatus && state.pagination.total > 0"
|
||||||
|
class="ss-flex ss-flex-wrap ss-p-x-20 ss-m-t-20 ss-col-top"
|
||||||
|
>
|
||||||
<view class="goods-list-box">
|
<view class="goods-list-box">
|
||||||
<view class="left-list" v-for="item in state.leftGoodsList" :key="item.id">
|
<view class="left-list" v-for="item in state.leftGoodsList" :key="item.id">
|
||||||
<s-goods-column
|
<s-goods-column
|
||||||
|
@ -78,9 +105,14 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}" @tap="loadMore" />
|
}"
|
||||||
|
@tap="loadMore"
|
||||||
|
/>
|
||||||
<s-empty v-if="state.pagination.total === 0" icon="/static/soldout-empty.png" text="暂无商品" />
|
<s-empty v-if="state.pagination.total === 0" icon="/static/soldout-empty.png" text="暂无商品" />
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
@ -89,7 +121,7 @@
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
|
|
||||||
|
@ -111,10 +143,12 @@
|
||||||
iconStatus: false, // true - 单列布局;false - 双列布局
|
iconStatus: false, // true - 单列布局;false - 双列布局
|
||||||
keyword: '',
|
keyword: '',
|
||||||
categoryId: 0,
|
categoryId: 0,
|
||||||
tabList: [{
|
tabList: [
|
||||||
|
{
|
||||||
name: '综合推荐',
|
name: '综合推荐',
|
||||||
list: [{
|
list: [
|
||||||
label: '综合推荐'
|
{
|
||||||
|
label: '综合推荐',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '价格升序',
|
label: '价格升序',
|
||||||
|
@ -131,12 +165,12 @@
|
||||||
{
|
{
|
||||||
name: '销量',
|
name: '销量',
|
||||||
sort: 'salesCount',
|
sort: 'salesCount',
|
||||||
order: false
|
order: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '新品优先',
|
name: '新品优先',
|
||||||
value: 'createTime',
|
value: 'createTime',
|
||||||
order: false
|
order: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
loadStatus: '',
|
loadStatus: '',
|
||||||
|
@ -211,8 +245,10 @@
|
||||||
const onFilterItem = (val) => {
|
const onFilterItem = (val) => {
|
||||||
// 如果点击的是当前的筛选项,则直接收起筛选项,不要加载数据
|
// 如果点击的是当前的筛选项,则直接收起筛选项,不要加载数据
|
||||||
// 这里选择 tabList[0] 的原因,是目前只有它有 list
|
// 这里选择 tabList[0] 的原因,是目前只有它有 list
|
||||||
if (state.currentSort === state.tabList[0].list[val].sort
|
if (
|
||||||
&& state.currentOrder === state.tabList[0].list[val].order) {
|
state.currentSort === state.tabList[0].list[val].sort &&
|
||||||
|
state.currentOrder === state.tabList[0].list[val].order
|
||||||
|
) {
|
||||||
state.showFilter = false;
|
state.showFilter = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -226,7 +262,7 @@
|
||||||
// 清空 + 加载数据
|
// 清空 + 加载数据
|
||||||
emptyList();
|
emptyList();
|
||||||
getList();
|
getList();
|
||||||
}
|
};
|
||||||
|
|
||||||
async function getList() {
|
async function getList() {
|
||||||
state.loadStatus = 'loading';
|
state.loadStatus = 'loading';
|
||||||
|
@ -241,7 +277,7 @@
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.list = _.concat(state.pagination.list, data.list)
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.pagination.total = data.total;
|
state.pagination.total = data.total;
|
||||||
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
mountMasonry();
|
mountMasonry();
|
||||||
|
|
|
@ -69,10 +69,7 @@
|
||||||
|
|
||||||
<!-- 功能卡片 -->
|
<!-- 功能卡片 -->
|
||||||
<view class="detail-cell-card detail-card ss-flex-col">
|
<view class="detail-cell-card detail-card ss-flex-col">
|
||||||
<detail-cell-sku
|
<detail-cell-sku :sku="state.selectedSku" @tap="state.showSelectSku = true" />
|
||||||
:sku="state.selectedSku"
|
|
||||||
@tap="state.showSelectSku = true"
|
|
||||||
/>
|
|
||||||
</view>
|
</view>
|
||||||
<!-- 规格与数量弹框 -->
|
<!-- 规格与数量弹框 -->
|
||||||
<s-select-seckill-sku
|
<s-select-seckill-sku
|
||||||
|
@ -107,7 +104,9 @@
|
||||||
<button v-else class="ss-reset-button origin-price-btn ss-flex-col">
|
<button v-else class="ss-reset-button origin-price-btn ss-flex-col">
|
||||||
<view
|
<view
|
||||||
class="no-original"
|
class="no-original"
|
||||||
:class="state.goodsInfo.stock === 0 || timeStatusEnum !== TimeStatusEnum.STARTED ? '' : ''"
|
:class="
|
||||||
|
state.goodsInfo.stock === 0 || timeStatusEnum !== TimeStatusEnum.STARTED ? '' : ''
|
||||||
|
"
|
||||||
>
|
>
|
||||||
秒杀价
|
秒杀价
|
||||||
</view>
|
</view>
|
||||||
|
@ -139,7 +138,7 @@
|
||||||
import { reactive, computed, ref } from 'vue';
|
import { reactive, computed, ref } from 'vue';
|
||||||
import { onLoad, onPageScroll } from '@dcloudio/uni-app';
|
import { onLoad, onPageScroll } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import {isEmpty, min} from 'lodash';
|
import { isEmpty, min } from 'lodash-es';
|
||||||
import { useDurationTime, formatGoodsSwiper, fen2yuan } from '@/sheep/hooks/useGoods';
|
import { useDurationTime, formatGoodsSwiper, fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import detailNavbar from './components/detail/detail-navbar.vue';
|
import detailNavbar from './components/detail/detail-navbar.vue';
|
||||||
import detailCellSku from './components/detail/detail-cell-sku.vue';
|
import detailCellSku from './components/detail/detail-cell-sku.vue';
|
||||||
|
@ -148,15 +147,13 @@
|
||||||
import detailCommentCard from './components/detail/detail-comment-card.vue';
|
import detailCommentCard from './components/detail/detail-comment-card.vue';
|
||||||
import detailContentCard from './components/detail/detail-content-card.vue';
|
import detailContentCard from './components/detail/detail-content-card.vue';
|
||||||
import detailProgress from './components/detail/detail-progress.vue';
|
import detailProgress from './components/detail/detail-progress.vue';
|
||||||
import SeckillApi from "@/sheep/api/promotion/seckill";
|
import SeckillApi from '@/sheep/api/promotion/seckill';
|
||||||
import SpuApi from "@/sheep/api/product/spu";
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import {getTimeStatusEnum, TimeStatusEnum} from "@/sheep/util/const";
|
import { getTimeStatusEnum, TimeStatusEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
const headerBg = sheep.$url.css('/static/img/shop/goods/seckill-bg.png');
|
const headerBg = sheep.$url.css('/static/img/shop/goods/seckill-bg.png');
|
||||||
const btnBg = sheep.$url.css('/static/img/shop/goods/seckill-btn.png');
|
const btnBg = sheep.$url.css('/static/img/shop/goods/seckill-btn.png');
|
||||||
const disabledBtnBg = sheep.$url.css(
|
const disabledBtnBg = sheep.$url.css('/static/img/shop/goods/activity-btn-disabled.png');
|
||||||
'/static/img/shop/goods/activity-btn-disabled.png',
|
|
||||||
);
|
|
||||||
const seckillBg = sheep.$url.css('/static/img/shop/goods/seckill-tip-bg.png');
|
const seckillBg = sheep.$url.css('/static/img/shop/goods/seckill-tip-bg.png');
|
||||||
const grouponBg = sheep.$url.css('/static/img/shop/goods/groupon-tip-bg.png');
|
const grouponBg = sheep.$url.css('/static/img/shop/goods/groupon-tip-bg.png');
|
||||||
|
|
||||||
|
@ -221,36 +218,40 @@
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
const activity = ref()
|
const activity = ref();
|
||||||
const timeStatusEnum = ref('')
|
const timeStatusEnum = ref('');
|
||||||
// 查询活动
|
// 查询活动
|
||||||
const getActivity = async (id) => {
|
const getActivity = async (id) => {
|
||||||
const { data } = await SeckillApi.getSeckillActivity(id)
|
const { data } = await SeckillApi.getSeckillActivity(id);
|
||||||
activity.value = data
|
activity.value = data;
|
||||||
timeStatusEnum.value = getTimeStatusEnum(activity.startTime, activity.endTime)
|
timeStatusEnum.value = getTimeStatusEnum(activity.startTime, activity.endTime);
|
||||||
|
|
||||||
// 查询商品
|
// 查询商品
|
||||||
await getSpu(data.spuId)
|
await getSpu(data.spuId);
|
||||||
}
|
};
|
||||||
|
|
||||||
const getSpu = async (id) => {
|
const getSpu = async (id) => {
|
||||||
const { data } = await SpuApi.getSpuDetail(id)
|
const { data } = await SpuApi.getSpuDetail(id);
|
||||||
// 模拟
|
// 模拟
|
||||||
data.activity_type = 'seckill'
|
data.activity_type = 'seckill';
|
||||||
state.goodsInfo = data
|
state.goodsInfo = data;
|
||||||
// 处理轮播图
|
// 处理轮播图
|
||||||
state.goodsSwiper = formatGoodsSwiper(state.goodsInfo.sliderPicUrls);
|
state.goodsSwiper = formatGoodsSwiper(state.goodsInfo.sliderPicUrls);
|
||||||
|
|
||||||
// 默认显示最低价
|
// 默认显示最低价
|
||||||
state.goodsInfo.price = min([state.goodsInfo.price, ...activity.value.products.map(spu => spu.seckillPrice)])
|
state.goodsInfo.price = min([
|
||||||
|
state.goodsInfo.price,
|
||||||
|
...activity.value.products.map((spu) => spu.seckillPrice),
|
||||||
|
]);
|
||||||
|
|
||||||
// 价格、库存使用活动的
|
// 价格、库存使用活动的
|
||||||
data.skus.forEach(sku => {
|
data.skus.forEach((sku) => {
|
||||||
const product = activity.value.products.find(product => product.skuId === sku.id);
|
const product = activity.value.products.find((product) => product.skuId === sku.id);
|
||||||
if (product) {
|
if (product) {
|
||||||
sku.price = product.seckillPrice;
|
sku.price = product.seckillPrice;
|
||||||
sku.stock = Math.min(sku.stock, product.stock);
|
sku.stock = Math.min(sku.stock, product.stock);
|
||||||
} else { // 找不到可能是没配置,则不能发起秒杀
|
} else {
|
||||||
|
// 找不到可能是没配置,则不能发起秒杀
|
||||||
sku.stock = 0;
|
sku.stock = 0;
|
||||||
}
|
}
|
||||||
// 设置限购数量
|
// 设置限购数量
|
||||||
|
@ -264,7 +265,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
state.skeletonLoading = false;
|
state.skeletonLoading = false;
|
||||||
}
|
};
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
// 非法参数
|
// 非法参数
|
||||||
|
@ -274,7 +275,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询活动
|
// 查询活动
|
||||||
getActivity(options.id)
|
getActivity(options.id);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { computed, reactive } from 'vue';
|
import { computed, reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { handleTree } from '@/sheep/util';
|
import { handleTree } from '@/sheep/util';
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
|
|
@ -98,11 +98,7 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="modal-content content_box">
|
<view class="modal-content content_box">
|
||||||
<radio-group @change="onChange">
|
<radio-group @change="onChange">
|
||||||
<label
|
<label class="radio ss-flex ss-col-center" v-for="item in state.reasonList" :key="item">
|
||||||
class="radio ss-flex ss-col-center"
|
|
||||||
v-for="item in state.reasonList"
|
|
||||||
:key="item"
|
|
||||||
>
|
|
||||||
<view class="ss-flex-1 ss-p-20">{{ item }}</view>
|
<view class="ss-flex-1 ss-p-20">{{ item }}</view>
|
||||||
<radio
|
<radio
|
||||||
:value="item"
|
:value="item"
|
||||||
|
@ -153,9 +149,9 @@
|
||||||
],
|
],
|
||||||
reasonList: [], // 可选的申请原因数组
|
reasonList: [], // 可选的申请原因数组
|
||||||
showModal: false, // 是否显示申请原因弹窗
|
showModal: false, // 是否显示申请原因弹窗
|
||||||
currentValue: '' // 当前选择的售后原因
|
currentValue: '', // 当前选择的售后原因
|
||||||
});
|
});
|
||||||
const formData = reactive({
|
let formData = reactive({
|
||||||
way: '',
|
way: '',
|
||||||
applyReason: '',
|
applyReason: '',
|
||||||
applyDescription: '',
|
applyDescription: '',
|
||||||
|
|
|
@ -3,24 +3,38 @@
|
||||||
<s-layout title="售后详情" :navbar="!isEmpty(state.info) && state.loading ? 'inner' : 'normal'">
|
<s-layout title="售后详情" :navbar="!isEmpty(state.info) && state.loading ? 'inner' : 'normal'">
|
||||||
<view class="content_box" v-if="!isEmpty(state.info) && state.loading">
|
<view class="content_box" v-if="!isEmpty(state.info) && state.loading">
|
||||||
<!-- 步骤条 -->
|
<!-- 步骤条 -->
|
||||||
<view class="steps-box ss-flex" :style="[
|
<view
|
||||||
|
class="steps-box ss-flex"
|
||||||
|
:style="[
|
||||||
{
|
{
|
||||||
marginTop: '-' + Number(statusBarHeight + 88) + 'rpx',
|
marginTop: '-' + Number(statusBarHeight + 88) + 'rpx',
|
||||||
paddingTop: Number(statusBarHeight + 88) + 'rpx',
|
paddingTop: Number(statusBarHeight + 88) + 'rpx',
|
||||||
},
|
},
|
||||||
]">
|
]"
|
||||||
|
>
|
||||||
<view class="ss-flex">
|
<view class="ss-flex">
|
||||||
<view class="steps-item" v-for="(item, index) in state.list" :key="index">
|
<view class="steps-item" v-for="(item, index) in state.list" :key="index">
|
||||||
<view class="ss-flex">
|
<view class="ss-flex">
|
||||||
<text class="sicon-circleclose"
|
<text
|
||||||
v-if="state.list.length - 1 === index && [61, 62, 63].includes(state.info.status)" />
|
class="sicon-circleclose"
|
||||||
<text class="sicon-circlecheck" v-else
|
v-if="state.list.length - 1 === index && [61, 62, 63].includes(state.info.status)"
|
||||||
:class="state.active >= index ? 'activity-color' : 'info-color'" />
|
/>
|
||||||
|
<text
|
||||||
|
class="sicon-circlecheck"
|
||||||
|
v-else
|
||||||
|
:class="state.active >= index ? 'activity-color' : 'info-color'"
|
||||||
|
/>
|
||||||
|
|
||||||
<view v-if="state.list.length - 1 !== index" class="line"
|
<view
|
||||||
:class="state.active >= index ? 'activity-bg' : 'info-bg'" />
|
v-if="state.list.length - 1 !== index"
|
||||||
|
class="line"
|
||||||
|
:class="state.active >= index ? 'activity-bg' : 'info-bg'"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="steps-item-title" :class="state.active >= index ? 'activity-color' : 'info-color'">
|
<view
|
||||||
|
class="steps-item-title"
|
||||||
|
:class="state.active >= index ? 'activity-color' : 'info-color'"
|
||||||
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -28,8 +42,10 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 服务状态 -->
|
<!-- 服务状态 -->
|
||||||
<view class="status-box ss-flex ss-col-center ss-row-between ss-m-x-20"
|
<view
|
||||||
@tap="sheep.$router.go('/pages/order/aftersale/log', { id: state.id })">
|
class="status-box ss-flex ss-col-center ss-row-between ss-m-x-20"
|
||||||
|
@tap="sheep.$router.go('/pages/order/aftersale/log', { id: state.id })"
|
||||||
|
>
|
||||||
<view class="">
|
<view class="">
|
||||||
<view class="status-text">
|
<view class="status-text">
|
||||||
{{ formatAfterSaleStatusDescription(state.info) }}
|
{{ formatAfterSaleStatusDescription(state.info) }}
|
||||||
|
@ -86,18 +102,31 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 操作区 -->
|
<!-- 操作区 -->
|
||||||
<s-empty v-if="isEmpty(state.info) && state.loading" icon="/static/order-empty.png" text="暂无该订单售后详情" />
|
<s-empty
|
||||||
|
v-if="isEmpty(state.info) && state.loading"
|
||||||
|
icon="/static/order-empty.png"
|
||||||
|
text="暂无该订单售后详情"
|
||||||
|
/>
|
||||||
<su-fixed bottom placeholder bg="bg-white" v-if="!isEmpty(state.info)">
|
<su-fixed bottom placeholder bg="bg-white" v-if="!isEmpty(state.info)">
|
||||||
<view class="foot_box">
|
<view class="foot_box">
|
||||||
<button class="ss-reset-button btn" v-if="state.info.buttons?.includes('cancel')"
|
<button
|
||||||
@tap="onApply(state.info.id)">
|
class="ss-reset-button btn"
|
||||||
|
v-if="state.info.buttons?.includes('cancel')"
|
||||||
|
@tap="onApply(state.info.id)"
|
||||||
|
>
|
||||||
取消申请
|
取消申请
|
||||||
</button>
|
</button>
|
||||||
<button class="ss-reset-button btn" v-if="state.info.buttons?.includes('delivery')"
|
<button
|
||||||
@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.info.id })">
|
class="ss-reset-button btn"
|
||||||
|
v-if="state.info.buttons?.includes('delivery')"
|
||||||
|
@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.info.id })"
|
||||||
|
>
|
||||||
填写退货
|
填写退货
|
||||||
</button>
|
</button>
|
||||||
<button class="ss-reset-button contcat-btn btn" @tap="sheep.$router.go('/pages/chat/index')">
|
<button
|
||||||
|
class="ss-reset-button contcat-btn btn"
|
||||||
|
@tap="sheep.$router.go('/pages/chat/index')"
|
||||||
|
>
|
||||||
联系客服
|
联系客服
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -109,8 +138,12 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import { fen2yuan, formatAfterSaleStatusDescription, handleAfterSaleButtons } from '@/sheep/hooks/useGoods';
|
import {
|
||||||
|
fen2yuan,
|
||||||
|
formatAfterSaleStatusDescription,
|
||||||
|
handleAfterSaleButtons,
|
||||||
|
} from '@/sheep/hooks/useGoods';
|
||||||
import AfterSaleApi from '@/sheep/api/trade/afterSale';
|
import AfterSaleApi from '@/sheep/api/trade/afterSale';
|
||||||
|
|
||||||
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
||||||
|
@ -120,13 +153,17 @@
|
||||||
info: {}, // 收货信息
|
info: {}, // 收货信息
|
||||||
loading: false,
|
loading: false,
|
||||||
active: 0, // 在 list 的激活位置
|
active: 0, // 在 list 的激活位置
|
||||||
list: [{
|
list: [
|
||||||
|
{
|
||||||
title: '提交申请',
|
title: '提交申请',
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
title: '处理中',
|
title: '处理中',
|
||||||
}, {
|
},
|
||||||
title: '完成'
|
{
|
||||||
}], // 时间轴
|
title: '完成',
|
||||||
|
},
|
||||||
|
], // 时间轴
|
||||||
});
|
});
|
||||||
|
|
||||||
function onApply(id) {
|
function onApply(id) {
|
||||||
|
@ -175,7 +212,7 @@
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
if (!options.id) {
|
if (!options.id) {
|
||||||
sheep.$helper.toast(`缺少订单信息,请检查`);
|
sheep.$helper.toast(`缺少订单信息,请检查`);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
state.id = options.id;
|
state.id = options.id;
|
||||||
getDetail(options.id);
|
getDetail(options.id);
|
||||||
|
|
|
@ -3,13 +3,22 @@
|
||||||
<s-layout title="售后列表">
|
<s-layout title="售后列表">
|
||||||
<!-- tab -->
|
<!-- tab -->
|
||||||
<su-sticky bgColor="#fff">
|
<su-sticky bgColor="#fff">
|
||||||
<su-tabs :list="tabMaps" :scrollable="false" @change="onTabsChange" :current="state.currentTab" />
|
<su-tabs
|
||||||
|
:list="tabMaps"
|
||||||
|
:scrollable="false"
|
||||||
|
@change="onTabsChange"
|
||||||
|
:current="state.currentTab"
|
||||||
|
/>
|
||||||
</su-sticky>
|
</su-sticky>
|
||||||
<s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" text="暂无数据" />
|
<s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" text="暂无数据" />
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<view v-if="state.pagination.total > 0">
|
<view v-if="state.pagination.total > 0">
|
||||||
<view class="list-box ss-m-y-20" v-for="order in state.pagination.list" :key="order.id"
|
<view
|
||||||
@tap="sheep.$router.go('/pages/order/aftersale/detail', { id: order.id })">
|
class="list-box ss-m-y-20"
|
||||||
|
v-for="order in state.pagination.list"
|
||||||
|
:key="order.id"
|
||||||
|
@tap="sheep.$router.go('/pages/order/aftersale/detail', { id: order.id })"
|
||||||
|
>
|
||||||
<view class="order-head ss-flex ss-col-center ss-row-between">
|
<view class="order-head ss-flex ss-col-center ss-row-between">
|
||||||
<text class="no">服务单号:{{ order.no }}</text>
|
<text class="no">服务单号:{{ order.no }}</text>
|
||||||
<text class="state">{{ formatAfterSaleStatus(order) }}</text>
|
<text class="state">{{ formatAfterSaleStatus(order) }}</text>
|
||||||
|
@ -30,15 +39,24 @@
|
||||||
<view class="tool-btn-box ss-flex ss-col-center ss-row-right ss-p-r-20">
|
<view class="tool-btn-box ss-flex ss-col-center ss-row-right ss-p-r-20">
|
||||||
<!-- TODO 功能缺失:填写退货信息 -->
|
<!-- TODO 功能缺失:填写退货信息 -->
|
||||||
<view>
|
<view>
|
||||||
<button class="ss-reset-button tool-btn" @tap.stop="onApply(order.id)"
|
<button
|
||||||
v-if="order?.buttons.includes('cancel')">取消申请</button>
|
class="ss-reset-button tool-btn"
|
||||||
|
@tap.stop="onApply(order.id)"
|
||||||
|
v-if="order?.buttons.includes('cancel')"
|
||||||
|
>取消申请</button
|
||||||
|
>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}" @tap="loadMore" />
|
}"
|
||||||
|
@tap="loadMore"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -46,8 +64,12 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { formatAfterSaleStatus, formatAfterSaleStatusDescription, handleAfterSaleButtons } from '@/sheep/hooks/useGoods';
|
import {
|
||||||
|
formatAfterSaleStatus,
|
||||||
|
formatAfterSaleStatusDescription,
|
||||||
|
handleAfterSaleButtons,
|
||||||
|
} from '@/sheep/hooks/useGoods';
|
||||||
import AfterSaleApi from '@/sheep/api/trade/afterSale';
|
import AfterSaleApi from '@/sheep/api/trade/afterSale';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
|
||||||
|
@ -58,13 +80,14 @@
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10
|
pageSize: 10,
|
||||||
},
|
},
|
||||||
loadStatus: '',
|
loadStatus: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO 芋艿:优化点,增加筛选
|
// TODO 芋艿:优化点,增加筛选
|
||||||
const tabMaps = [{
|
const tabMaps = [
|
||||||
|
{
|
||||||
name: '全部',
|
name: '全部',
|
||||||
value: 'all',
|
value: 'all',
|
||||||
},
|
},
|
||||||
|
@ -104,7 +127,7 @@
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data.list.forEach(order => handleAfterSaleButtons(order));
|
data.list.forEach((order) => handleAfterSaleButtons(order));
|
||||||
state.pagination.list = _.concat(state.pagination.list, data.list);
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.pagination.total = data.total;
|
state.pagination.total = data.total;
|
||||||
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
|
@ -137,7 +160,7 @@
|
||||||
// 加载更多
|
// 加载更多
|
||||||
function loadMore() {
|
function loadMore() {
|
||||||
if (state.loadStatus === 'noMore') {
|
if (state.loadStatus === 'noMore') {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.pageNo++;
|
state.pagination.pageNo++;
|
||||||
getOrderList();
|
getOrderList();
|
||||||
|
|
|
@ -2,12 +2,21 @@
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="我的订单">
|
<s-layout title="我的订单">
|
||||||
<su-sticky bgColor="#fff">
|
<su-sticky bgColor="#fff">
|
||||||
<su-tabs :list="tabMaps" :scrollable="false" @change="onTabsChange" :current="state.currentTab" />
|
<su-tabs
|
||||||
|
:list="tabMaps"
|
||||||
|
:scrollable="false"
|
||||||
|
@change="onTabsChange"
|
||||||
|
:current="state.currentTab"
|
||||||
|
/>
|
||||||
</su-sticky>
|
</su-sticky>
|
||||||
<s-empty v-if="state.pagination.total === 0" icon="/static/order-empty.png" text="暂无订单" />
|
<s-empty v-if="state.pagination.total === 0" icon="/static/order-empty.png" text="暂无订单" />
|
||||||
<view v-if="state.pagination.total > 0">
|
<view v-if="state.pagination.total > 0">
|
||||||
<view class="bg-white order-list-card-box ss-r-10 ss-m-t-14 ss-m-20" v-for="order in state.pagination.list"
|
<view
|
||||||
:key="order.id" @tap="onOrderDetail(order.id)">
|
class="bg-white order-list-card-box ss-r-10 ss-m-t-14 ss-m-20"
|
||||||
|
v-for="order in state.pagination.list"
|
||||||
|
:key="order.id"
|
||||||
|
@tap="onOrderDetail(order.id)"
|
||||||
|
>
|
||||||
<view class="order-card-header ss-flex ss-col-center ss-row-between ss-p-x-20">
|
<view class="order-card-header ss-flex ss-col-center ss-row-between ss-p-x-20">
|
||||||
<view class="order-no">订单号:{{ order.no }}</view>
|
<view class="order-no">订单号:{{ order.no }}</view>
|
||||||
<view class="order-state ss-font-26" :class="formatOrderColor(order)">
|
<view class="order-state ss-font-26" :class="formatOrderColor(order)">
|
||||||
|
@ -25,45 +34,71 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="pay-box ss-m-t-30 ss-flex ss-row-right ss-p-r-20">
|
<view class="pay-box ss-m-t-30 ss-flex ss-row-right ss-p-r-20">
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<view class="discounts-title pay-color">共 {{ order.productCount }} 件商品,总金额:</view>
|
<view class="discounts-title pay-color"
|
||||||
<view class="discounts-money pay-color">
|
>共 {{ order.productCount }} 件商品,总金额:</view
|
||||||
¥{{ fen2yuan(order.payPrice) }}
|
>
|
||||||
|
<view class="discounts-money pay-color"> ¥{{ fen2yuan(order.payPrice) }} </view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view
|
||||||
<view class="order-card-footer ss-flex ss-col-center ss-p-x-20"
|
class="order-card-footer ss-flex ss-col-center ss-p-x-20"
|
||||||
:class="order.buttons.length > 3 ? 'ss-row-between' : 'ss-row-right'">
|
:class="order.buttons.length > 3 ? 'ss-row-between' : 'ss-row-right'"
|
||||||
|
>
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<button v-if="order.buttons.includes('combination')" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onOrderGroupon(order)">
|
v-if="order.buttons.includes('combination')"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onOrderGroupon(order)"
|
||||||
|
>
|
||||||
拼团详情
|
拼团详情
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.length === 0" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onOrderDetail(order.id)">
|
v-if="order.buttons.length === 0"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onOrderDetail(order.id)"
|
||||||
|
>
|
||||||
查看详情
|
查看详情
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('confirm')" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onConfirm(order)">
|
v-if="order.buttons.includes('confirm')"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onConfirm(order)"
|
||||||
|
>
|
||||||
确认收货
|
确认收货
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('express')" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onExpress(order.id)">
|
v-if="order.buttons.includes('express')"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onExpress(order.id)"
|
||||||
|
>
|
||||||
查看物流
|
查看物流
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('cancel')" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onCancel(order.id)">
|
v-if="order.buttons.includes('cancel')"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onCancel(order.id)"
|
||||||
|
>
|
||||||
取消订单
|
取消订单
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('comment')" class="tool-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onComment(order.id)">
|
v-if="order.buttons.includes('comment')"
|
||||||
|
class="tool-btn ss-reset-button"
|
||||||
|
@tap.stop="onComment(order.id)"
|
||||||
|
>
|
||||||
评价
|
评价
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('delete')" class="delete-btn ss-reset-button"
|
<button
|
||||||
@tap.stop="onDelete(order.id)">
|
v-if="order.buttons.includes('delete')"
|
||||||
|
class="delete-btn ss-reset-button"
|
||||||
|
@tap.stop="onDelete(order.id)"
|
||||||
|
>
|
||||||
删除订单
|
删除订单
|
||||||
</button>
|
</button>
|
||||||
<button v-if="order.buttons.includes('pay')" class="tool-btn ss-reset-button ui-BG-Main-Gradient"
|
<button
|
||||||
@tap.stop="onPay(order.payOrderId)">
|
v-if="order.buttons.includes('pay')"
|
||||||
|
class="tool-btn ss-reset-button ui-BG-Main-Gradient"
|
||||||
|
@tap.stop="onPay(order.payOrderId)"
|
||||||
|
>
|
||||||
继续支付
|
继续支付
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -72,9 +107,14 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 加载更多 -->
|
<!-- 加载更多 -->
|
||||||
<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}" @tap="loadMore" />
|
}"
|
||||||
|
@tap="loadMore"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -83,13 +123,13 @@
|
||||||
import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app';
|
||||||
import {
|
import {
|
||||||
fen2yuan,
|
fen2yuan,
|
||||||
formatOrderColor, formatOrderStatus, handleOrderButtons,
|
formatOrderColor,
|
||||||
|
formatOrderStatus,
|
||||||
|
handleOrderButtons,
|
||||||
} from '@/sheep/hooks/useGoods';
|
} from '@/sheep/hooks/useGoods';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import {
|
import { isEmpty } from 'lodash-es';
|
||||||
isEmpty
|
|
||||||
} from 'lodash';
|
|
||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
|
||||||
|
@ -102,11 +142,12 @@
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 5,
|
pageSize: 5,
|
||||||
},
|
},
|
||||||
loadStatus: ''
|
loadStatus: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const tabMaps = [{
|
const tabMaps = [
|
||||||
name: '全部'
|
{
|
||||||
|
name: '全部',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '待付款',
|
name: '待付款',
|
||||||
|
@ -275,13 +316,13 @@
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
pageSize: state.pagination.pageSize,
|
pageSize: state.pagination.pageSize,
|
||||||
status: tabMaps[state.currentTab].value,
|
status: tabMaps[state.currentTab].value,
|
||||||
commentStatus: tabMaps[state.currentTab].value === 30 ? false : null
|
commentStatus: tabMaps[state.currentTab].value === 30 ? false : null,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data.list.forEach(order => handleOrderButtons(order));
|
data.list.forEach((order) => handleOrderButtons(order));
|
||||||
state.pagination.list = _.concat(state.pagination.list, data.list)
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.pagination.total = data.total;
|
state.pagination.total = data.total;
|
||||||
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
}
|
}
|
||||||
|
@ -296,7 +337,7 @@
|
||||||
// 加载更多
|
// 加载更多
|
||||||
function loadMore() {
|
function loadMore() {
|
||||||
if (state.loadStatus === 'noMore') {
|
if (state.loadStatus === 'noMore') {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.pageNo++;
|
state.pagination.pageNo++;
|
||||||
getOrderList();
|
getOrderList();
|
||||||
|
@ -380,7 +421,8 @@
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.order-state {}
|
.order-state {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.pay-box {
|
.pay-box {
|
||||||
|
|
|
@ -30,7 +30,9 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="time-box item ss-flex ss-col-center ss-row-between">
|
<view class="time-box item ss-flex ss-col-center ss-row-between">
|
||||||
<text class="item-title">充值时间</text>
|
<text class="item-title">充值时间</text>
|
||||||
<view class="time"> {{ sheep.$helper.timeFormat(item.payTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
|
<view class="time">
|
||||||
|
{{ sheep.$helper.timeFormat(item.payTime, 'yyyy-mm-dd hh:MM:ss') }}</view
|
||||||
|
>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -53,7 +55,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import PayWalletApi from '@/sheep/api/pay/wallet';
|
import PayWalletApi from '@/sheep/api/pay/wallet';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
||||||
|
|
|
@ -50,7 +50,10 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- #ifdef MP -->
|
<!-- #ifdef MP -->
|
||||||
<view class="subscribe-box ss-flex ss-m-t-44" v-if="showSubscribeBtn && state.orderType === 'goods'">
|
<view
|
||||||
|
class="subscribe-box ss-flex ss-m-t-44"
|
||||||
|
v-if="showSubscribeBtn && state.orderType === 'goods'"
|
||||||
|
>
|
||||||
<image class="subscribe-img" :src="sheep.$url.static('/static/img/shop/order/cargo.png')" />
|
<image class="subscribe-img" :src="sheep.$url.static('/static/img/shop/order/cargo.png')" />
|
||||||
<view class="subscribe-title ss-m-r-48 ss-m-l-16">获取实时发货信息与订单状态</view>
|
<view class="subscribe-title ss-m-r-48 ss-m-l-16">获取实时发货信息与订单状态</view>
|
||||||
<view class="subscribe-start" @tap="subscribeMessage">立即订阅</view>
|
<view class="subscribe-start" @tap="subscribeMessage">立即订阅</view>
|
||||||
|
@ -63,7 +66,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onLoad, onHide, onShow } from '@dcloudio/uni-app';
|
import { onLoad, onHide, onShow } from '@dcloudio/uni-app';
|
||||||
import { reactive, computed, ref } from 'vue';
|
import { reactive, computed, ref } from 'vue';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import PayOrderApi from '@/sheep/api/pay/order';
|
import PayOrderApi from '@/sheep/api/pay/order';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
|
@ -114,12 +117,12 @@
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '支付结果',
|
title: '支付结果',
|
||||||
showCancel: false, // 不要取消按钮
|
showCancel: false, // 不要取消按钮
|
||||||
content: "支付成功",
|
content: '支付成功',
|
||||||
success: () => {
|
success: () => {
|
||||||
// 订阅只能由用户主动触发,只能包一层 showModal 诱导用户点击
|
// 订阅只能由用户主动触发,只能包一层 showModal 诱导用户点击
|
||||||
autoSubscribeMessage();
|
autoSubscribeMessage();
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
// #endif
|
// #endif
|
||||||
// 特殊:获得商品订单信息
|
// 特殊:获得商品订单信息
|
||||||
|
@ -153,8 +156,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// #ifdef MP
|
// #ifdef MP
|
||||||
const showSubscribeBtn = ref(false) // 默认隐藏
|
const showSubscribeBtn = ref(false); // 默认隐藏
|
||||||
const SUBSCRIBE_BTN_STATUS_STORAGE_KEY = "subscribe_btn_status"
|
const SUBSCRIBE_BTN_STATUS_STORAGE_KEY = 'subscribe_btn_status';
|
||||||
function subscribeMessage() {
|
function subscribeMessage() {
|
||||||
if (state.orderType !== 'goods') {
|
if (state.orderType !== 'goods') {
|
||||||
return;
|
return;
|
||||||
|
@ -176,11 +179,11 @@
|
||||||
const subscribeBtnStatus = uni.getStorageSync(SUBSCRIBE_BTN_STATUS_STORAGE_KEY);
|
const subscribeBtnStatus = uni.getStorageSync(SUBSCRIBE_BTN_STATUS_STORAGE_KEY);
|
||||||
if (!subscribeBtnStatus) {
|
if (!subscribeBtnStatus) {
|
||||||
showSubscribeBtn.value = true;
|
showSubscribeBtn.value = true;
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 订阅消息
|
// 2. 订阅消息
|
||||||
subscribeMessage()
|
subscribeMessage();
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,70 @@
|
||||||
<!-- 收货地址的新增/编辑 -->
|
<!-- 收货地址的新增/编辑 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout :title="state.model.id ? '编辑地址' : '新增地址'">
|
<s-layout :title="state.model.id ? '编辑地址' : '新增地址'">
|
||||||
<uni-forms ref="addressFormRef" v-model="state.model" :rules="rules" validateTrigger="bind"
|
<uni-forms
|
||||||
labelWidth="160" labelAlign="left" border :labelStyle="{ fontWeight: 'bold' }">
|
ref="addressFormRef"
|
||||||
|
v-model="state.model"
|
||||||
|
:rules="rules"
|
||||||
|
validateTrigger="bind"
|
||||||
|
labelWidth="160"
|
||||||
|
labelAlign="left"
|
||||||
|
border
|
||||||
|
:labelStyle="{ fontWeight: 'bold' }"
|
||||||
|
>
|
||||||
<view class="bg-white form-box ss-p-x-30">
|
<view class="bg-white form-box ss-p-x-30">
|
||||||
<uni-forms-item name="name" label="收货人" class="form-item">
|
<uni-forms-item name="name" label="收货人" class="form-item">
|
||||||
<uni-easyinput v-model="state.model.name" placeholder="请填写收货人姓名" :inputBorder="false"
|
<uni-easyinput
|
||||||
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal" />
|
v-model="state.model.name"
|
||||||
|
placeholder="请填写收货人姓名"
|
||||||
|
:inputBorder="false"
|
||||||
|
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
||||||
|
/>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
|
|
||||||
<uni-forms-item name="mobile" label="手机号" class="form-item">
|
<uni-forms-item name="mobile" label="手机号" class="form-item">
|
||||||
<uni-easyinput v-model="state.model.mobile" type="number" placeholder="请输入手机号" :inputBorder="false"
|
<uni-easyinput
|
||||||
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
|
v-model="state.model.mobile"
|
||||||
|
type="number"
|
||||||
|
placeholder="请输入手机号"
|
||||||
|
:inputBorder="false"
|
||||||
|
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
||||||
|
>
|
||||||
</uni-easyinput>
|
</uni-easyinput>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
<uni-forms-item name="areaName" label="省市区" @tap="state.showRegion = true" class="form-item">
|
<uni-forms-item
|
||||||
<uni-easyinput v-model="state.model.areaName" disabled :inputBorder="false"
|
name="areaName"
|
||||||
|
label="省市区"
|
||||||
|
@tap="state.showRegion = true"
|
||||||
|
class="form-item"
|
||||||
|
>
|
||||||
|
<uni-easyinput
|
||||||
|
v-model="state.model.areaName"
|
||||||
|
disabled
|
||||||
|
:inputBorder="false"
|
||||||
:styles="{ disableColor: '#fff', color: '#333' }"
|
:styles="{ disableColor: '#fff', color: '#333' }"
|
||||||
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
||||||
placeholder="请选择省市区">
|
placeholder="请选择省市区"
|
||||||
|
>
|
||||||
<template v-slot:right>
|
<template v-slot:right>
|
||||||
<uni-icons type="right" />
|
<uni-icons type="right" />
|
||||||
</template>
|
</template>
|
||||||
</uni-easyinput>
|
</uni-easyinput>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
<uni-forms-item name="detailAddress" label="详细地址" :formItemStyle="{ alignItems: 'flex-start' }"
|
<uni-forms-item
|
||||||
:labelStyle="{ lineHeight: '5em' }" class="textarea-item">
|
name="detailAddress"
|
||||||
<uni-easyinput :inputBorder="false" type="textarea" v-model="state.model.detailAddress"
|
label="详细地址"
|
||||||
|
:formItemStyle="{ alignItems: 'flex-start' }"
|
||||||
|
:labelStyle="{ lineHeight: '5em' }"
|
||||||
|
class="textarea-item"
|
||||||
|
>
|
||||||
|
<uni-easyinput
|
||||||
|
:inputBorder="false"
|
||||||
|
type="textarea"
|
||||||
|
v-model="state.model.detailAddress"
|
||||||
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
|
||||||
placeholder="请输入详细地址" clearable />
|
placeholder="请输入详细地址"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
</uni-forms-item>
|
</uni-forms-item>
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box">
|
<view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box">
|
||||||
|
@ -48,7 +84,11 @@
|
||||||
</su-fixed>
|
</su-fixed>
|
||||||
|
|
||||||
<!-- 省市区弹窗 -->
|
<!-- 省市区弹窗 -->
|
||||||
<su-region-picker :show="state.showRegion" @cancel="state.showRegion = false" @confirm="onRegionConfirm" />
|
<su-region-picker
|
||||||
|
:show="state.showRegion"
|
||||||
|
@cancel="state.showRegion = false"
|
||||||
|
@confirm="onRegionConfirm"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -56,7 +96,7 @@
|
||||||
import { ref, reactive, unref } from 'vue';
|
import { ref, reactive, unref } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import { mobile } from '@/sheep/validate/form';
|
import { mobile } from '@/sheep/validate/form';
|
||||||
import AreaApi from '@/sheep/api/system/area';
|
import AreaApi from '@/sheep/api/system/area';
|
||||||
import AddressApi from '@/sheep/api/member/address';
|
import AddressApi from '@/sheep/api/member/address';
|
||||||
|
@ -85,22 +125,26 @@
|
||||||
},
|
},
|
||||||
mobile,
|
mobile,
|
||||||
detailAddress: {
|
detailAddress: {
|
||||||
rules: [{
|
rules: [
|
||||||
|
{
|
||||||
required: true,
|
required: true,
|
||||||
errorMessage: '请输入详细地址',
|
errorMessage: '请输入详细地址',
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
areaName: {
|
areaName: {
|
||||||
rules: [{
|
rules: [
|
||||||
|
{
|
||||||
required: true,
|
required: true,
|
||||||
errorMessage: '请选择您的位置'
|
errorMessage: '请选择您的位置',
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 确认选择地区
|
// 确认选择地区
|
||||||
const onRegionConfirm = (e) => {
|
const onRegionConfirm = (e) => {
|
||||||
state.model.areaName = `${e.province_name} ${e.city_name} ${e.district_name}`
|
state.model.areaName = `${e.province_name} ${e.city_name} ${e.district_name}`;
|
||||||
state.model.areaId = e.district_id;
|
state.model.areaId = e.district_id;
|
||||||
state.showRegion = false;
|
state.showRegion = false;
|
||||||
};
|
};
|
||||||
|
@ -130,9 +174,11 @@
|
||||||
|
|
||||||
// 提交请求
|
// 提交请求
|
||||||
const formData = {
|
const formData = {
|
||||||
...state.model
|
...state.model,
|
||||||
}
|
};
|
||||||
const {code } = state.model.id > 0 ? await AddressApi.updateAddress(formData)
|
const { code } =
|
||||||
|
state.model.id > 0
|
||||||
|
? await AddressApi.updateAddress(formData)
|
||||||
: await AddressApi.createAddress(formData);
|
: await AddressApi.createAddress(formData);
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
sheep.$router.back();
|
sheep.$router.back();
|
||||||
|
@ -171,7 +217,7 @@
|
||||||
if (options.data) {
|
if (options.data) {
|
||||||
let data = JSON.parse(options.data);
|
let data = JSON.parse(options.data);
|
||||||
const areaData = uni.getStorageSync('areaData');
|
const areaData = uni.getStorageSync('areaData');
|
||||||
const findAreaByName = (areas, name) => areas.find(item => item.name === name);
|
const findAreaByName = (areas, name) => areas.find((item) => item.name === name);
|
||||||
|
|
||||||
let provinceObj = findAreaByName(areaData, data.province_name);
|
let provinceObj = findAreaByName(areaData, data.province_name);
|
||||||
let cityObj = provinceObj ? findAreaByName(provinceObj.children, data.city_name) : undefined;
|
let cityObj = provinceObj ? findAreaByName(provinceObj.children, data.city_name) : undefined;
|
||||||
|
@ -181,7 +227,9 @@
|
||||||
state.model = {
|
state.model = {
|
||||||
...state.model,
|
...state.model,
|
||||||
areaId,
|
areaId,
|
||||||
areaName: [data.province_name, data.city_name, data.district_name].filter(Boolean).join(" "),
|
areaName: [data.province_name, data.city_name, data.district_name]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join(' '),
|
||||||
defaultStatus: false,
|
defaultStatus: false,
|
||||||
detailAddress: data.address,
|
detailAddress: data.address,
|
||||||
mobile: data.mobile,
|
mobile: data.mobile,
|
||||||
|
|
|
@ -2,26 +2,39 @@
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="收货地址" :bgStyle="{ color: '#FFF' }">
|
<s-layout title="收货地址" :bgStyle="{ color: '#FFF' }">
|
||||||
<view v-if="state.list.length">
|
<view v-if="state.list.length">
|
||||||
<s-address-item hasBorderBottom v-for="item in state.list" :key="item.id" :item="item"
|
<s-address-item
|
||||||
@tap="onSelect(item)" />
|
hasBorderBottom
|
||||||
|
v-for="item in state.list"
|
||||||
|
:key="item.id"
|
||||||
|
:item="item"
|
||||||
|
@tap="onSelect(item)"
|
||||||
|
/>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<su-fixed bottom placeholder>
|
<su-fixed bottom placeholder>
|
||||||
<view class="footer-box ss-flex ss-row-between ss-p-20">
|
<view class="footer-box ss-flex ss-row-between ss-p-20">
|
||||||
<!-- 微信小程序和微信H5 -->
|
<!-- 微信小程序和微信H5 -->
|
||||||
<button v-if="['WechatMiniProgram', 'WechatOfficialAccount'].includes(sheep.$platform.name)"
|
<button
|
||||||
|
v-if="['WechatMiniProgram', 'WechatOfficialAccount'].includes(sheep.$platform.name)"
|
||||||
@tap="importWechatAddress"
|
@tap="importWechatAddress"
|
||||||
class="border ss-reset-button sync-wxaddress ss-m-20 ss-flex ss-row-center ss-col-center">
|
class="border ss-reset-button sync-wxaddress ss-m-20 ss-flex ss-row-center ss-col-center"
|
||||||
|
>
|
||||||
<text class="cicon-weixin ss-p-r-10" style="color: #09bb07; font-size: 40rpx"></text>
|
<text class="cicon-weixin ss-p-r-10" style="color: #09bb07; font-size: 40rpx"></text>
|
||||||
导入微信地址
|
导入微信地址
|
||||||
</button>
|
</button>
|
||||||
<button class="add-btn ss-reset-button ui-Shadow-Main"
|
<button
|
||||||
@tap="sheep.$router.go('/pages/user/address/edit')">
|
class="add-btn ss-reset-button ui-Shadow-Main"
|
||||||
|
@tap="sheep.$router.go('/pages/user/address/edit')"
|
||||||
|
>
|
||||||
新增收货地址
|
新增收货地址
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
</su-fixed>
|
</su-fixed>
|
||||||
<s-empty v-if="state.list.length === 0 && !state.loading" text="暂无收货地址" icon="/static/data-empty.png" />
|
<s-empty
|
||||||
|
v-if="state.list.length === 0 && !state.loading"
|
||||||
|
text="暂无收货地址"
|
||||||
|
icon="/static/data-empty.png"
|
||||||
|
/>
|
||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -29,7 +42,7 @@
|
||||||
import { reactive, onBeforeMount } from 'vue';
|
import { reactive, onBeforeMount } from 'vue';
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
import { onShow } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import AreaApi from '@/sheep/api/system/area';
|
import AreaApi from '@/sheep/api/system/area';
|
||||||
import AddressApi from '@/sheep/api/member/address';
|
import AddressApi from '@/sheep/api/member/address';
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
<!-- 头部 -->
|
<!-- 头部 -->
|
||||||
<view class="cart-header ss-flex ss-col-center ss-row-between ss-p-x-30">
|
<view class="cart-header ss-flex ss-col-center ss-row-between ss-p-x-30">
|
||||||
<view class="header-left ss-flex ss-col-center ss-font-26">
|
<view class="header-left ss-flex ss-col-center ss-font-26">
|
||||||
共 <text class="goods-number ui-TC-Main ss-flex">{{ state.pagination.total }}</text> 件商品
|
共
|
||||||
|
<text class="goods-number ui-TC-Main ss-flex">{{ state.pagination.total }}</text> 件商品
|
||||||
</view>
|
</view>
|
||||||
<view class="header-right">
|
<view class="header-right">
|
||||||
<button
|
<button
|
||||||
|
@ -77,7 +78,8 @@
|
||||||
<view class="footer-right">
|
<view class="footer-right">
|
||||||
<button
|
<button
|
||||||
class="ss-reset-button ui-BG-Main-Gradient pay-btn ss-font-28 ui-Shadow-Main"
|
class="ss-reset-button ui-BG-Main-Gradient pay-btn ss-font-28 ui-Shadow-Main"
|
||||||
@tap="onCancel">
|
@tap="onCancel"
|
||||||
|
>
|
||||||
取消收藏
|
取消收藏
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
|
@ -100,7 +102,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import FavoriteApi from '@/sheep/api/product/favorite';
|
import FavoriteApi from '@/sheep/api/product/favorite';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
|
||||||
|
@ -129,7 +131,7 @@
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.list = _.concat(state.pagination.list, data.list)
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.pagination.total = data.total;
|
state.pagination.total = data.total;
|
||||||
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
}
|
}
|
||||||
|
@ -174,7 +176,7 @@
|
||||||
// 加载更多
|
// 加载更多
|
||||||
function loadMore() {
|
function loadMore() {
|
||||||
if (state.loadStatus === 'noMore') {
|
if (state.loadStatus === 'noMore') {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
state.pagination.pageNo++;
|
state.pagination.pageNo++;
|
||||||
getData();
|
getData();
|
||||||
|
|
|
@ -81,11 +81,13 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="footer-right ss-flex">
|
<view class="footer-right ss-flex">
|
||||||
<button
|
<button
|
||||||
:class="['ss-reset-button pay-btn ss-font-28 ',
|
:class="[
|
||||||
|
'ss-reset-button pay-btn ss-font-28 ',
|
||||||
{
|
{
|
||||||
'ui-BG-Main-Gradient': state.selectedSpuIdList.length > 0,
|
'ui-BG-Main-Gradient': state.selectedSpuIdList.length > 0,
|
||||||
'ui-Shadow-Main': state.selectedSpuIdList.length > 0
|
'ui-Shadow-Main': state.selectedSpuIdList.length > 0,
|
||||||
}]"
|
},
|
||||||
|
]"
|
||||||
@tap="onDelete"
|
@tap="onDelete"
|
||||||
>
|
>
|
||||||
删除足迹
|
删除足迹
|
||||||
|
@ -120,9 +122,9 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import SpuHistoryApi from "@/sheep/api/product/history";
|
import SpuHistoryApi from '@/sheep/api/product/history';
|
||||||
import {cloneDeep} from "@/sheep/helper/utils";
|
import { cloneDeep } from '@/sheep/helper/utils';
|
||||||
|
|
||||||
const sys_navBar = sheep.$platform.navbar;
|
const sys_navBar = sheep.$platform.navbar;
|
||||||
const pagination = {
|
const pagination = {
|
||||||
|
|
|
@ -26,7 +26,8 @@
|
||||||
<button
|
<button
|
||||||
class="ss-reset-button avatar-action-btn"
|
class="ss-reset-button avatar-action-btn"
|
||||||
open-type="chooseAvatar"
|
open-type="chooseAvatar"
|
||||||
@chooseavatar="onChooseAvatar">
|
@chooseavatar="onChooseAvatar"
|
||||||
|
>
|
||||||
修改
|
修改
|
||||||
</button>
|
</button>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
|
@ -154,10 +155,7 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<view class="info ss-flex ss-col-center" v-if="state.thirdInfo">
|
<view class="info ss-flex ss-col-center" v-if="state.thirdInfo">
|
||||||
<image
|
<image class="avatar ss-m-r-20" :src="sheep.$url.cdn(state.thirdInfo.avatar)" />
|
||||||
class="avatar ss-m-r-20"
|
|
||||||
:src="sheep.$url.cdn(state.thirdInfo.avatar)"
|
|
||||||
/>
|
|
||||||
<text class="name">{{ state.thirdInfo.nickname }}</text>
|
<text class="name">{{ state.thirdInfo.nickname }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="bind-box ss-m-l-20">
|
<view class="bind-box ss-m-l-20">
|
||||||
|
@ -185,7 +183,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, reactive, onBeforeMount } from 'vue';
|
import { computed, reactive, onBeforeMount } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { clone } from 'lodash';
|
import { clone } from 'lodash-es';
|
||||||
import { showAuthModal } from '@/sheep/hooks/useModal';
|
import { showAuthModal } from '@/sheep/hooks/useModal';
|
||||||
import FileApi from '@/sheep/api/infra/file';
|
import FileApi from '@/sheep/api/infra/file';
|
||||||
import UserApi from '@/sheep/api/member/user';
|
import UserApi from '@/sheep/api/member/user';
|
||||||
|
@ -198,14 +196,15 @@
|
||||||
|
|
||||||
const placeholderStyle = 'color:#BBBBBB;font-size:28rpx;line-height:normal';
|
const placeholderStyle = 'color:#BBBBBB;font-size:28rpx;line-height:normal';
|
||||||
|
|
||||||
const sexRadioMap = [{
|
const sexRadioMap = [
|
||||||
|
{
|
||||||
name: '男',
|
name: '男',
|
||||||
value: '1',
|
value: '1',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '女',
|
name: '女',
|
||||||
value: '2',
|
value: '2',
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const userInfo = computed(() => sheep.$store('user').userInfo);
|
const userInfo = computed(() => sheep.$store('user').userInfo);
|
||||||
|
|
|
@ -13,7 +13,9 @@
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-flex ss-row-between ss-col-center ss-m-t-64">
|
<view class="ss-flex ss-row-between ss-col-center ss-m-t-64">
|
||||||
<view class="money-num">{{ state.showMoney ? fen2yuan(userWallet.balance) : '*****' }}</view>
|
<view class="money-num">{{
|
||||||
|
state.showMoney ? fen2yuan(userWallet.balance) : '*****'
|
||||||
|
}}</view>
|
||||||
<button class="ss-reset-button topup-btn" @tap="sheep.$router.go('/pages/pay/recharge')">
|
<button class="ss-reset-button topup-btn" @tap="sheep.$router.go('/pages/pay/recharge')">
|
||||||
充值
|
充值
|
||||||
</button>
|
</button>
|
||||||
|
@ -24,7 +26,12 @@
|
||||||
<su-sticky>
|
<su-sticky>
|
||||||
<!-- 统计 -->
|
<!-- 统计 -->
|
||||||
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
||||||
<uni-datetime-picker v-model="state.data" type="daterange" @change="onChangeTime" :end="state.today">
|
<uni-datetime-picker
|
||||||
|
v-model="state.data"
|
||||||
|
type="daterange"
|
||||||
|
@change="onChangeTime"
|
||||||
|
:end="state.today"
|
||||||
|
>
|
||||||
<button class="ss-reset-button date-btn">
|
<button class="ss-reset-button date-btn">
|
||||||
<text>{{ dateFilterText }}</text>
|
<text>{{ dateFilterText }}</text>
|
||||||
<text class="cicon-drop-down ss-seldate-icon"></text>
|
<text class="cicon-drop-down ss-seldate-icon"></text>
|
||||||
|
@ -82,7 +89,7 @@
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import PayWalletApi from '@/sheep/api/pay/wallet';
|
import PayWalletApi from '@/sheep/api/pay/wallet';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
@ -98,7 +105,7 @@
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 8
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
summary: {
|
summary: {
|
||||||
totalIncome: 0,
|
totalIncome: 0,
|
||||||
|
@ -155,7 +162,7 @@
|
||||||
// 获得钱包统计
|
// 获得钱包统计
|
||||||
async function getSummary() {
|
async function getSummary() {
|
||||||
const { data, code } = await PayWalletApi.getWalletTransactionSummary({
|
const { data, code } = await PayWalletApi.getWalletTransactionSummary({
|
||||||
'createTime': [state.date[0] + ' 00:00:00', state.date[1] + ' 23:59:59'],
|
createTime: [state.date[0] + ' 00:00:00', state.date[1] + ' 23:59:59'],
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -226,8 +233,7 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
background: v-bind(headerBg)
|
background: v-bind(headerBg) no-repeat;
|
||||||
no-repeat;
|
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,12 @@
|
||||||
<su-sticky :customNavHeight="sys_navBar">
|
<su-sticky :customNavHeight="sys_navBar">
|
||||||
<!-- 统计 -->
|
<!-- 统计 -->
|
||||||
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
<view class="filter-box ss-p-x-30 ss-flex ss-col-center ss-row-between">
|
||||||
<uni-datetime-picker v-model="state.date" type="daterange" @change="onChangeTime" :end="state.today">
|
<uni-datetime-picker
|
||||||
|
v-model="state.date"
|
||||||
|
type="daterange"
|
||||||
|
@change="onChangeTime"
|
||||||
|
:end="state.today"
|
||||||
|
>
|
||||||
<button class="ss-reset-button date-btn">
|
<button class="ss-reset-button date-btn">
|
||||||
<text>{{ dateFilterText }}</text>
|
<text>{{ dateFilterText }}</text>
|
||||||
<text class="cicon-drop-down ss-seldate-icon"></text>
|
<text class="cicon-drop-down ss-seldate-icon"></text>
|
||||||
|
@ -83,7 +88,7 @@
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { computed, reactive } from 'vue';
|
import { computed, reactive } from 'vue';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash-es';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import PointApi from '@/sheep/api/member/point';
|
import PointApi from '@/sheep/api/member/point';
|
||||||
import { resetPagination } from '@/sheep/util';
|
import { resetPagination } from '@/sheep/util';
|
||||||
|
|
|
@ -18,9 +18,7 @@
|
||||||
<view class="address-text">
|
<view class="address-text">
|
||||||
{{ props.item.detailAddress }}
|
{{ props.item.detailAddress }}
|
||||||
</view>
|
</view>
|
||||||
<view class="person-text">
|
<view class="person-text"> {{ props.item.name }} {{ props.item.mobile }} </view>
|
||||||
{{ props.item.name }} {{ props.item.mobile }}
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view v-else>
|
<view v-else>
|
||||||
<view class="address-text ss-m-b-10">请选择收货地址</view>
|
<view class="address-text ss-m-b-10">请选择收货地址</view>
|
||||||
|
@ -47,7 +45,7 @@
|
||||||
* @slot - 默认插槽
|
* @slot - 默认插槽
|
||||||
*/
|
*/
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
|
|
@ -11,7 +11,11 @@
|
||||||
<view v-if="tagStyle.show" class="tag-icon-box">
|
<view v-if="tagStyle.show" class="tag-icon-box">
|
||||||
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
||||||
</view>
|
</view>
|
||||||
<image class="xs-img-box" :src="sheep.$url.cdn(data.image || data.picUrl)" mode="aspectFit"></image>
|
<image
|
||||||
|
class="xs-img-box"
|
||||||
|
:src="sheep.$url.cdn(data.image || data.picUrl)"
|
||||||
|
mode="aspectFit"
|
||||||
|
></image>
|
||||||
<view
|
<view
|
||||||
v-if="goodsFields.title?.show || goodsFields.name?.show || goodsFields.price?.show"
|
v-if="goodsFields.title?.show || goodsFields.name?.show || goodsFields.price?.show"
|
||||||
class="xs-goods-content ss-flex-col ss-row-around"
|
class="xs-goods-content ss-flex-col ss-row-around"
|
||||||
|
@ -39,14 +43,21 @@
|
||||||
<view v-if="tagStyle.show" class="tag-icon-box">
|
<view v-if="tagStyle.show" class="tag-icon-box">
|
||||||
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
||||||
</view>
|
</view>
|
||||||
<image class="sm-img-box" :src="sheep.$url.cdn(data.image || data.picUrl)" mode="aspectFill"></image>
|
<image
|
||||||
|
class="sm-img-box"
|
||||||
|
:src="sheep.$url.cdn(data.image || data.picUrl)"
|
||||||
|
mode="aspectFill"
|
||||||
|
></image>
|
||||||
|
|
||||||
<view
|
<view
|
||||||
v-if="goodsFields.title?.show || goodsFields.name?.show || goodsFields.price?.show"
|
v-if="goodsFields.title?.show || goodsFields.name?.show || goodsFields.price?.show"
|
||||||
class="sm-goods-content"
|
class="sm-goods-content"
|
||||||
:style="[{ color: titleColor, width: titleWidth ? titleWidth + 'rpx' : '' }]"
|
:style="[{ color: titleColor, width: titleWidth ? titleWidth + 'rpx' : '' }]"
|
||||||
>
|
>
|
||||||
<view v-if="goodsFields.title?.show || goodsFields.name?.show" class="sm-goods-title ss-line-1 ss-m-b-16">
|
<view
|
||||||
|
v-if="goodsFields.title?.show || goodsFields.name?.show"
|
||||||
|
class="sm-goods-title ss-line-1 ss-m-b-16"
|
||||||
|
>
|
||||||
{{ data.title || data.name }}
|
{{ data.title || data.name }}
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view
|
||||||
|
@ -65,7 +76,11 @@
|
||||||
<view v-if="tagStyle.show" class="tag-icon-box">
|
<view v-if="tagStyle.show" class="tag-icon-box">
|
||||||
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
||||||
</view>
|
</view>
|
||||||
<image class="md-img-box" :src="sheep.$url.cdn(data.image || data.picUrl)" mode="widthFix"></image>
|
<image
|
||||||
|
class="md-img-box"
|
||||||
|
:src="sheep.$url.cdn(data.image || data.picUrl)"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
<view
|
<view
|
||||||
class="md-goods-content ss-flex-col ss-row-around ss-p-b-20 ss-p-t-20 ss-p-x-16"
|
class="md-goods-content ss-flex-col ss-row-around ss-p-b-20 ss-p-t-20 ss-p-x-16"
|
||||||
:id="elId"
|
:id="elId"
|
||||||
|
@ -106,7 +121,10 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view
|
<view
|
||||||
v-if="(goodsFields.original_price?.show||goodsFields.marketPrice?.show) &&( data.original_price > 0|| data.marketPrice > 0)"
|
v-if="
|
||||||
|
(goodsFields.original_price?.show || goodsFields.marketPrice?.show) &&
|
||||||
|
(data.original_price > 0 || data.marketPrice > 0)
|
||||||
|
"
|
||||||
class="goods-origin-price ss-m-t-16 font-OPPOSANS ss-flex"
|
class="goods-origin-price ss-m-t-16 font-OPPOSANS ss-flex"
|
||||||
:style="[{ color: originPriceColor }]"
|
:style="[{ color: originPriceColor }]"
|
||||||
>
|
>
|
||||||
|
@ -141,7 +159,11 @@
|
||||||
<view v-if="grouponTag" class="groupon-tag ss-flex ss-row-center">
|
<view v-if="grouponTag" class="groupon-tag ss-flex ss-row-center">
|
||||||
<view class="tag-icon">拼团</view>
|
<view class="tag-icon">拼团</view>
|
||||||
</view>
|
</view>
|
||||||
<image class="lg-img-box" :src="sheep.$url.cdn(data.image || data.picUrl)" mode="aspectFill"></image>
|
<image
|
||||||
|
class="lg-img-box"
|
||||||
|
:src="sheep.$url.cdn(data.image || data.picUrl)"
|
||||||
|
mode="aspectFill"
|
||||||
|
></image>
|
||||||
<view class="lg-goods-content ss-flex-1 ss-flex-col ss-row-between ss-p-b-10 ss-p-t-20">
|
<view class="lg-goods-content ss-flex-1 ss-flex-col ss-row-between ss-p-b-10 ss-p-t-20">
|
||||||
<view>
|
<view>
|
||||||
<view
|
<view
|
||||||
|
@ -177,7 +199,10 @@
|
||||||
{{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
|
{{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view
|
||||||
v-if="(goodsFields.original_price?.show||goodsFields.marketPrice?.show) &&( data.original_price > 0|| data.marketPrice > 0)"
|
v-if="
|
||||||
|
(goodsFields.original_price?.show || goodsFields.marketPrice?.show) &&
|
||||||
|
(data.original_price > 0 || data.marketPrice > 0)
|
||||||
|
"
|
||||||
class="goods-origin-price ss-flex ss-col-bottom font-OPPOSANS"
|
class="goods-origin-price ss-flex ss-col-bottom font-OPPOSANS"
|
||||||
:style="[{ color: originPriceColor }]"
|
:style="[{ color: originPriceColor }]"
|
||||||
>
|
>
|
||||||
|
@ -192,9 +217,7 @@
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<slot name="cart">
|
<slot name="cart">
|
||||||
<view class="buy-box ss-flex ss-col-center ss-row-center" v-if="buttonShow">
|
<view class="buy-box ss-flex ss-col-center ss-row-center" v-if="buttonShow"> 去购买 </view>
|
||||||
去购买
|
|
||||||
</view>
|
|
||||||
</slot>
|
</slot>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
@ -204,7 +227,11 @@
|
||||||
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
<image class="tag-icon" :src="sheep.$url.cdn(tagStyle.src || tagStyle.imgUrl)"></image>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<image class="sl-img-box" :src="sheep.$url.cdn(data.image || data.picUrl)" mode="aspectFill"></image>
|
<image
|
||||||
|
class="sl-img-box"
|
||||||
|
:src="sheep.$url.cdn(data.image || data.picUrl)"
|
||||||
|
mode="aspectFill"
|
||||||
|
></image>
|
||||||
|
|
||||||
<view class="sl-goods-content">
|
<view class="sl-goods-content">
|
||||||
<view>
|
<view>
|
||||||
|
@ -241,7 +268,10 @@
|
||||||
{{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
|
{{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view
|
||||||
v-if="(goodsFields.original_price?.show||goodsFields.marketPrice?.show) &&( data.original_price > 0|| data.marketPrice > 0)"
|
v-if="
|
||||||
|
(goodsFields.original_price?.show || goodsFields.marketPrice?.show) &&
|
||||||
|
(data.original_price > 0 || data.marketPrice > 0)
|
||||||
|
"
|
||||||
class="goods-origin-price ss-m-t-16 font-OPPOSANS ss-flex"
|
class="goods-origin-price ss-m-t-16 font-OPPOSANS ss-flex"
|
||||||
:style="[{ color: originPriceColor }]"
|
:style="[{ color: originPriceColor }]"
|
||||||
>
|
>
|
||||||
|
@ -296,7 +326,7 @@
|
||||||
import { fen2yuan, formatSales } from '@/sheep/hooks/useGoods';
|
import { fen2yuan, formatSales } from '@/sheep/hooks/useGoods';
|
||||||
import { formatStock } from '@/sheep/hooks/useGoods';
|
import { formatStock } from '@/sheep/hooks/useGoods';
|
||||||
import goodsCollectVue from '@/pages/user/goods-collect.vue';
|
import goodsCollectVue from '@/pages/user/goods-collect.vue';
|
||||||
import { isArray } from 'lodash';
|
import { isArray } from 'lodash-es';
|
||||||
|
|
||||||
// 数据
|
// 数据
|
||||||
const state = reactive({});
|
const state = reactive({});
|
||||||
|
|
|
@ -31,7 +31,11 @@
|
||||||
></view>
|
></view>
|
||||||
|
|
||||||
<!-- 顶部导航栏-情况4:装修组件导航栏-沉浸式 -->
|
<!-- 顶部导航栏-情况4:装修组件导航栏-沉浸式 -->
|
||||||
<s-custom-navbar v-if="navbar === 'custom' && navbarMode === 'inner'" :data="navbarStyle" :showLeftButton="showLeftButton" />
|
<s-custom-navbar
|
||||||
|
v-if="navbar === 'custom' && navbarMode === 'inner'"
|
||||||
|
:data="navbarStyle"
|
||||||
|
:showLeftButton="showLeftButton"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- 页面内容插槽 -->
|
<!-- 页面内容插槽 -->
|
||||||
<slot />
|
<slot />
|
||||||
|
@ -58,7 +62,7 @@
|
||||||
*/
|
*/
|
||||||
import { computed, reactive, ref } from 'vue';
|
import { computed, reactive, ref } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
import { onShow } from '@dcloudio/uni-app';
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
import { onShareAppMessage } from '@dcloudio/uni-app';
|
import { onShareAppMessage } from '@dcloudio/uni-app';
|
||||||
|
|
|
@ -91,8 +91,8 @@
|
||||||
// 按钮状态: active,nostock
|
// 按钮状态: active,nostock
|
||||||
import { computed, reactive, watch } from 'vue';
|
import { computed, reactive, watch } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import {convertProductPropertyList, fen2yuan} from "@/sheep/hooks/useGoods";
|
import { convertProductPropertyList, fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import {min} from "lodash";
|
import { min } from 'lodash-es';
|
||||||
const emits = defineEmits(['change', 'addCart', 'buy', 'close']);
|
const emits = defineEmits(['change', 'addCart', 'buy', 'close']);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
singleLimitCount: {
|
singleLimitCount: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 1,
|
default: 1,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
goodsInfo: computed(() => props.modelValue),
|
goodsInfo: computed(() => props.modelValue),
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
const skuList = computed(() => {
|
const skuList = computed(() => {
|
||||||
let skuPrices = state.goodsInfo.skus;
|
let skuPrices = state.goodsInfo.skus;
|
||||||
for (let price of skuPrices) {
|
for (let price of skuPrices) {
|
||||||
price.value_id_array = price.properties.map((item) => item.valueId)
|
price.value_id_array = price.properties.map((item) => item.valueId);
|
||||||
}
|
}
|
||||||
return skuPrices;
|
return skuPrices;
|
||||||
});
|
});
|
||||||
|
@ -258,7 +258,10 @@
|
||||||
const onSelectSku = (propertyId, valueId) => {
|
const onSelectSku = (propertyId, valueId) => {
|
||||||
// 清空已选择
|
// 清空已选择
|
||||||
let isChecked = true; // 选中 or 取消选中
|
let isChecked = true; // 选中 or 取消选中
|
||||||
if (state.currentPropertyArray[propertyId] !== undefined && state.currentPropertyArray[propertyId] === valueId) {
|
if (
|
||||||
|
state.currentPropertyArray[propertyId] !== undefined &&
|
||||||
|
state.currentPropertyArray[propertyId] === valueId
|
||||||
|
) {
|
||||||
// 点击已被选中的,删除并填充 ''
|
// 点击已被选中的,删除并填充 ''
|
||||||
isChecked = false;
|
isChecked = false;
|
||||||
state.currentPropertyArray.splice(propertyId, 1, '');
|
state.currentPropertyArray.splice(propertyId, 1, '');
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* @param {Object} device - 设备信息
|
* @param {Object} device - 设备信息
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash-es';
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
import { isWxBrowser } from '@/sheep/helper/utils';
|
import { isWxBrowser } from '@/sheep/helper/utils';
|
||||||
// #endif
|
// #endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import $store from '@/sheep/store';
|
import $store from '@/sheep/store';
|
||||||
import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
|
import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
|
||||||
import { isNumber, isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash';
|
import { isNumber, isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash-es';
|
||||||
import throttle from '@/sheep/helper/throttle';
|
import throttle from '@/sheep/helper/throttle';
|
||||||
|
|
||||||
const _go = (
|
const _go = (
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import $share from '@/sheep/platform/share';
|
import $share from '@/sheep/platform/share';
|
||||||
import { clone, cloneDeep } from 'lodash';
|
import { clone, cloneDeep } from 'lodash-es';
|
||||||
import cart from './cart';
|
import cart from './cart';
|
||||||
import app from './app';
|
import app from './app';
|
||||||
import { showAuthModal } from '@/sheep/hooks/useModal';
|
import { showAuthModal } from '@/sheep/hooks/useModal';
|
||||||
|
@ -68,12 +68,12 @@ const user = defineStore({
|
||||||
|
|
||||||
// 获取订单、优惠券等其他资产信息
|
// 获取订单、优惠券等其他资产信息
|
||||||
getNumData() {
|
getNumData() {
|
||||||
OrderApi.getOrderCount().then(res => {
|
OrderApi.getOrderCount().then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.numData.orderCount = res.data;
|
this.numData.orderCount = res.data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
CouponApi.getUnusedCouponCount().then(res => {
|
CouponApi.getUnusedCouponCount().then((res) => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.numData.unusedCouponCount = res.data;
|
this.numData.unusedCouponCount = res.data;
|
||||||
}
|
}
|
||||||
|
@ -143,20 +143,22 @@ const user = defineStore({
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绑定推广员
|
// 绑定推广员
|
||||||
$share.bindBrokerageUser()
|
$share.bindBrokerageUser();
|
||||||
},
|
},
|
||||||
|
|
||||||
// 登出系统
|
// 登出系统
|
||||||
async logout() {
|
async logout() {
|
||||||
this.resetUserData();
|
this.resetUserData();
|
||||||
return !this.isLogin;
|
return !this.isLogin;
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
persist: {
|
persist: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
strategies: [{
|
strategies: [
|
||||||
|
{
|
||||||
key: 'user-store',
|
key: 'user-store',
|
||||||
}]
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
|
|
||||||
import { reactive, computed } from 'vue';
|
import { reactive, computed } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { clone } from 'lodash';
|
import { clone } from 'lodash-es';
|
||||||
|
|
||||||
// 数据
|
// 数据
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
@ -200,7 +200,7 @@
|
||||||
if (item.type === 'video') {
|
if (item.type === 'video') {
|
||||||
previewImage.splice(index, 1);
|
previewImage.splice(index, 1);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
uni.previewImage({
|
uni.previewImage({
|
||||||
urls:
|
urls:
|
||||||
previewImage.length < 1
|
previewImage.length < 1
|
||||||
|
|
Loading…
Reference in New Issue