Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d91d8eb2db | ||
|
|
3c403c424a | ||
|
|
730025128a | ||
|
|
5275b64e60 | ||
|
|
ca85a34e49 | ||
|
|
d46cfd3943 | ||
|
|
a382a1a876 | ||
|
|
7fc548e161 | ||
|
|
ea28ca6875 | ||
|
|
11e83df02f | ||
|
|
039f05ce23 | ||
|
|
c1f2117e48 | ||
|
|
5cc6d99891 | ||
|
|
a2ba10f796 | ||
|
|
9ce6e63ee9 | ||
|
|
94f8883bd8 | ||
|
|
53899380c3 | ||
|
|
bc0e731fc3 | ||
|
|
515b8bb00f | ||
|
|
9f7015090d | ||
|
|
139ec62e9a | ||
|
|
4b9ef94741 | ||
|
|
46ba5e6aef | ||
|
|
75d0b004dc | ||
|
|
52cfca1ca1 | ||
|
|
34be99fccb | ||
|
|
164589f634 | ||
|
|
39869cd92d | ||
|
|
a863300ae3 | ||
|
|
8ac9f2714f | ||
|
|
dcd63dd54e | ||
|
|
25fc972833 | ||
|
|
cde0de43ff | ||
|
|
bfde5df0cd | ||
|
|
b92bf484df | ||
|
|
1b02d0cefa | ||
|
|
b24af1f71f | ||
|
|
951a52d37b | ||
|
|
9616e660a6 | ||
|
|
da81f6df7d | ||
|
|
c48951df8c | ||
|
|
1407350bf7 | ||
|
|
4c4134389e | ||
|
|
f98b1a2bea | ||
|
|
1ff8890d58 | ||
|
|
7be216ea4b | ||
|
|
530410fcf0 | ||
|
|
29a5024468 | ||
|
|
cb8431fbd4 | ||
|
|
6900eb1909 | ||
|
|
7793a69b9d | ||
|
|
7017561242 | ||
|
|
0cdaaac0ed | ||
|
|
18aa26dcae | ||
|
|
87c6e967f2 | ||
|
|
01c2dfa30d | ||
|
|
1978484071 | ||
|
|
68680d0d0e | ||
|
|
92e89bae34 | ||
|
|
94e0dd4f5d | ||
|
|
9a225c6ba5 | ||
|
|
6c80e36508 | ||
|
|
cf88789eef | ||
|
|
98b3f1fc67 | ||
|
|
a09e171bf7 | ||
|
|
5ee9c18f4c | ||
|
|
b8132062ea | ||
|
|
35c143039c | ||
|
|
f94df74591 | ||
|
|
e9b9ac1f7a | ||
|
|
d916fe5c80 | ||
|
|
315b5b852d | ||
|
|
0213a4b88a | ||
|
|
4bdc82786e | ||
|
|
f36b183407 | ||
|
|
113aead37b | ||
|
|
90b6ae7d40 | ||
|
|
959fe83d72 | ||
|
|
f784d411b6 | ||
|
|
c8f9043869 | ||
|
|
789ec69933 | ||
|
|
4dd6e82309 | ||
|
|
3051aed6b2 | ||
|
|
8e50c5da49 | ||
|
|
fd10210972 | ||
|
|
c399bb2373 | ||
|
|
9451092335 | ||
|
|
fd33176222 | ||
|
|
290ee5db04 | ||
|
|
07b630601a | ||
|
|
b59c41c5f8 | ||
|
|
a4ec421412 |
No files matched your search
@@ -1,5 +1,5 @@
|
|||||||
# 版本号
|
# 版本号
|
||||||
SHOPRO_VERSION=v2.3.0
|
SHOPRO_VERSION=v2.4.1
|
||||||
|
|
||||||
# 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development)
|
# 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development)
|
||||||
SHOPRO_BASE_URL=http://api-dashboard.yudao.iocoder.cn
|
SHOPRO_BASE_URL=http://api-dashboard.yudao.iocoder.cn
|
||||||
|
|||||||
@@ -3,17 +3,15 @@
|
|||||||
import { ShoproInit } from './sheep';
|
import { ShoproInit } from './sheep';
|
||||||
|
|
||||||
onLaunch(() => {
|
onLaunch(() => {
|
||||||
// 隐藏原生导航栏 使用自定义底部导航
|
// 延时隐藏原生导航栏
|
||||||
uni.hideTabBar();
|
setTimeout(() => {
|
||||||
|
uni.hideTabBar();
|
||||||
|
}, 200);
|
||||||
|
|
||||||
// 加载Shopro底层依赖
|
// 加载Shopro底层依赖
|
||||||
ShoproInit();
|
ShoproInit();
|
||||||
});
|
});
|
||||||
|
|
||||||
onError((err) => {
|
|
||||||
console.log('AppOnError:', err);
|
|
||||||
});
|
|
||||||
|
|
||||||
onShow((options) => {
|
onShow((options) => {
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
// 获取urlSchemes参数
|
// 获取urlSchemes参数
|
||||||
@@ -23,13 +21,13 @@
|
|||||||
|
|
||||||
// 获取剪贴板
|
// 获取剪贴板
|
||||||
uni.getClipboardData({
|
uni.getClipboardData({
|
||||||
success: (res) => { },
|
success: (res) => {},
|
||||||
});
|
});
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
// 确认收货回调结果
|
// 确认收货回调结果
|
||||||
console.log(options,'options');
|
console.log(options, 'options');
|
||||||
// #endif
|
// #endif
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
支持 Spring Boot、Spring Cloud 两种架构:
|
支持 Spring Boot、Spring Cloud 两种架构:
|
||||||
|
|
||||||
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
|
① Spring Boot 单体架构:<https://doc.iocoder.cn>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
|
② Spring Cloud 微服务架构:<https://cloud.iocoder.cn>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
"id": "shopro",
|
"id": "shopro",
|
||||||
"name": "shopro",
|
"name": "shopro",
|
||||||
"displayName": "芋道商城",
|
"displayName": "芋道商城",
|
||||||
"version": "2.3.0",
|
"version": "2.4.1",
|
||||||
"description": "芋道商城,一套代码,同时发行到iOS、Android、H5、微信小程序多个平台,请使用手机扫码快速体验强大功能",
|
"description": "芋道商城,一套代码,同时发行到iOS、Android、H5、微信小程序多个平台,请使用手机扫码快速体验强大功能",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prettier": "prettier --write \"{pages,sheep}/**/*.{js,json,tsx,css,less,scss,vue,html,md}\""
|
"prettier": "prettier --write \"{pages,sheep}/**/*.{js,json,tsx,css,less,scss,vue,html,md}\""
|
||||||
|
|||||||
@@ -209,6 +209,7 @@
|
|||||||
import { isEmpty } from 'lodash-es';
|
import { isEmpty } from 'lodash-es';
|
||||||
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';
|
||||||
|
import { SharePageEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
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;
|
||||||
@@ -234,7 +235,7 @@
|
|||||||
image: sheep.$url.cdn(state.data.headRecord.picUrl),
|
image: sheep.$url.cdn(state.data.headRecord.picUrl),
|
||||||
desc: state.data.goods?.subtitle,
|
desc: state.data.goods?.subtitle,
|
||||||
params: {
|
params: {
|
||||||
page: '5',
|
page: SharePageEnum.GROUPON_DETAIL.value,
|
||||||
query: state.data.headRecord.id,
|
query: state.data.headRecord.id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 拼团活动列表 -->
|
<!-- 拼团活动列表 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout navbar="inner" :bgStyle="{ color: '#FE832A' }">
|
<s-layout :bgStyle="{ color: '#FE832A' }" navbar="inner">
|
||||||
<view class="page-bg" :style="[{ marginTop: '-' + Number(statusBarHeight + 88) + 'rpx' }]" />
|
<view class="page-bg" :style="[{ marginTop: '-' + Number(statusBarHeight + 88) + 'rpx' }]" />
|
||||||
<view class="list-content">
|
<view class="list-content">
|
||||||
<!-- 参团会员统计 -->
|
<!-- 参团会员统计 -->
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
:scroll-with-animation="false"
|
:scroll-with-animation="false"
|
||||||
:enable-back-to-top="true"
|
:enable-back-to-top="true"
|
||||||
>
|
>
|
||||||
<s-point-card ref="sPointCardRef" class="ss-p-x-20 ss-m-t-20"/>
|
<s-point-card ref="sPointCardRef" class="ss-p-x-20 ss-m-t-20" />
|
||||||
<s-empty
|
<s-empty
|
||||||
v-if="activityTotal === 0"
|
v-if="activityTotal === 0"
|
||||||
icon="/static/goods-empty.png"
|
icon="/static/goods-empty.png"
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
v-if="activityTotal > 0"
|
v-if="activityTotal > 0"
|
||||||
:status="loadStatus"
|
:status="loadStatus"
|
||||||
:content-text="{
|
:content-text="{
|
||||||
contentdown: '上拉加载更多',
|
contentdown: '上拉加载更多',
|
||||||
}"
|
}"
|
||||||
@tap="loadMore"
|
@tap="loadMore"
|
||||||
/>
|
/>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
|
|
||||||
// 加载更多
|
// 加载更多
|
||||||
function loadMore() {
|
function loadMore() {
|
||||||
if (state.loadStatus !== 'noMore') {
|
if (loadStatus.value !== 'noMore') {
|
||||||
activityPageParams.pageNo += 1;
|
activityPageParams.pageNo += 1;
|
||||||
getActivityList();
|
getActivityList();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 秒杀活动列表 -->
|
<!-- 秒杀活动列表 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout navbar="inner" :bgStyle="{ color: 'rgb(245,28,19)' }">
|
<s-layout :bgStyle="{ color: 'rgb(245,28,19)' }" navbar="inner">
|
||||||
<!--顶部背景图-->
|
<!--顶部背景图-->
|
||||||
<view
|
<view
|
||||||
class="page-bg"
|
class="page-bg"
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
</s-layout>
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, computed, ref, nextTick } from 'vue';
|
import { computed, nextTick, reactive, ref } 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 { useDurationTime } from '@/sheep/hooks/useGoods';
|
import { useDurationTime } from '@/sheep/hooks/useGoods';
|
||||||
|
|||||||
+16
-14
@@ -25,7 +25,7 @@
|
|||||||
<view class="item" v-for="(item, index) in state.signConfigList" :key="index">
|
<view class="item" v-for="(item, index) in state.signConfigList" :key="index">
|
||||||
<view
|
<view
|
||||||
:class="
|
:class="
|
||||||
(index === state.signConfigList.length ? 'reward' : '') +
|
(index === state.signConfigList.length ? 'reward' : '') +
|
||||||
' ' +
|
' ' +
|
||||||
(state.signInfo.continuousDay >= item.day ? 'rewardTxt' : '')
|
(state.signInfo.continuousDay >= item.day ? 'rewardTxt' : '')
|
||||||
"
|
"
|
||||||
@@ -62,13 +62,14 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 签到说明 TODO @芋艿:【签到】这里改成【已累计签到】;改版,接入 sheepjs -->
|
<!-- 签到说明 TODO @科举:这里改成【已累计签到】 -->
|
||||||
<view class="bg-white ss-m-t-16 ss-p-t-30 ss-p-b-60 ss-p-x-40">
|
<view class="bg-white ss-m-t-16 ss-p-t-30 ss-p-b-60 ss-p-x-40">
|
||||||
<view class="activity-title ss-m-b-30">签到说明</view>
|
<view class="activity-title ss-m-b-30">签到说明</view>
|
||||||
<view class="activity-des">1、已累计签到{{state.signInfo.totalDay}}天</view>
|
<view class="activity-des">1.已累计签到{{ state.signInfo.totalDay }}天</view>
|
||||||
<view class="activity-des">
|
<view class="activity-des">
|
||||||
2、据说连续签到第 {{ state.maxDay }} 天可获得超额积分,一定要坚持签到哦~~~
|
2.据说连续签到第 {{ state.maxDay }} 天可获得超额积分,要坚持签到哦~~
|
||||||
</view>
|
</view>
|
||||||
|
<view class="activity-des"> 3.积分可以在购物时抵现金结算的哦 ~~</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -347,8 +348,7 @@
|
|||||||
.title {
|
.title {
|
||||||
font-size: 34rpx;
|
font-size: 34rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
// color: var(--ui-BG-Main);
|
color: var(--ui-BG-Main-TC);
|
||||||
color: #ff6000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
@@ -410,12 +410,10 @@
|
|||||||
background-color: #f4b409;
|
background-color: #f4b409;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
font-size: 20rpx;
|
font-size: 20rpx;
|
||||||
color: #a57d3f;
|
color: var(--ui-BG-Main-TC);
|
||||||
line-height: 32rpx;
|
line-height: 32rpx;
|
||||||
}
|
text-align: center;
|
||||||
|
padding: 2rpx;
|
||||||
.venusSelect {
|
|
||||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowYWFmYjU3Mi03MGJhLTRiNDctOTI2Yi0zOThlZDkzZDkxMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzkwRkI4NEFEMDFCMTFFODhDNDdBMDVGOTBBN0U2NTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzkwRkI4NDlEMDFCMTFFODhDNDdBMDVGOTBBN0U2NTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZmRjNTM0MmUtNmFkOC1iMDRhLThjZTEtMjk2YWYzM2FkMmUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjBhYWZiNTcyLTcwYmEtNGI0Ny05MjZiLTM5OGVkOTNkOTEwOSIv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');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.venus {
|
.venus {
|
||||||
@@ -424,7 +422,11 @@
|
|||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
width: 56rpx;
|
width: 56rpx;
|
||||||
height: 56rpx;
|
height: 56rpx;
|
||||||
margin: 10rpx 0;
|
margin: 10rpx auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.venusSelect {
|
||||||
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowYWFmYjU3Mi03MGJhLTRiNDctOTI2Yi0zOThlZDkzZDkxMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzkwRkI4NEFEMDFCMTFFODhDNDdBMDVGOTBBN0U2NTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzkwRkI4NDlEMDFCMTFFODhDNDdBMDVGOTBBN0U2NTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZmRjNTM0MmUtNmFkOC1iMDRhLThjZTEtMjk2YWYzM2FkMmUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjBhYWZiNTcyLTcwYmEtNGI0Ny05MjZiLTM5OGVkOTNkOTEwOSIv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');
|
||||||
}
|
}
|
||||||
|
|
||||||
.num {
|
.num {
|
||||||
@@ -435,7 +437,7 @@
|
|||||||
.item {
|
.item {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
border-bottom: 1px solid #eee;
|
flex-direction: column;
|
||||||
height: 130rpx;
|
height: 130rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,6 +448,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.on {
|
.on {
|
||||||
background-color: #999 !important;
|
color: #f4b409;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,20 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 聊天虚拟列表 -->
|
<!-- 聊天虚拟列表 -->
|
||||||
<z-paging ref="pagingRef" v-model="messageList" use-chat-record-mode use-virtual-list
|
<z-paging
|
||||||
cell-height-mode="dynamic" default-page-size="20" :auto-clean-list-when-reload="false"
|
ref="pagingRef"
|
||||||
safe-area-inset-bottom bottom-bg-color="#f8f8f8" :back-to-top-style="backToTopStyle"
|
v-model="messageList"
|
||||||
:auto-show-back-to-top="showNewMessageTip" @backToTopClick="onBackToTopClick"
|
use-chat-record-mode
|
||||||
@scrolltoupper="onScrollToUpper" @query="queryList">
|
use-virtual-list
|
||||||
|
cell-height-mode="dynamic"
|
||||||
|
default-page-size="20"
|
||||||
|
:auto-clean-list-when-reload="false"
|
||||||
|
safe-area-inset-bottom
|
||||||
|
bottom-bg-color="#f8f8f8"
|
||||||
|
:back-to-top-style="backToTopStyle"
|
||||||
|
:auto-show-back-to-top="showNewMessageTip"
|
||||||
|
@backToTopClick="onBackToTopClick"
|
||||||
|
@scrolltoupper="onScrollToUpper"
|
||||||
|
@query="queryList"
|
||||||
|
>
|
||||||
<template #top>
|
<template #top>
|
||||||
<!-- 撑一下顶部导航 -->
|
<!-- 撑一下顶部导航 -->
|
||||||
<view :style="{ height: sys_navBar + 'px' }"></view>
|
<view :style="{ height: sys_navBar + 'px' }"></view>
|
||||||
</template>
|
</template>
|
||||||
<!-- style="transform: scaleY(-1)"必须写,否则会导致列表倒置!!! -->
|
<!-- style="transform: scaleY(-1)"必须写,否则会导致列表倒置!!! -->
|
||||||
<!-- 注意不要直接在chat-item组件标签上设置style,因为在微信小程序中是无效的,请包一层view -->
|
<!-- 注意不要直接在chat-item组件标签上设置style,因为在微信小程序中是无效的,请包一层view -->
|
||||||
<template #cell="{item,index}">
|
<template #cell="{ item, index }">
|
||||||
<view style="transform: scaleY(-1)">
|
<view style="transform: scaleY(-1)">
|
||||||
<!-- 消息渲染 -->
|
<!-- 消息渲染 -->
|
||||||
<MessageListItem :message="item" :message-index="index" :message-list="messageList"></MessageListItem>
|
<MessageListItem
|
||||||
|
:message="item"
|
||||||
|
:message-index="index"
|
||||||
|
:message-list="messageList"
|
||||||
|
></MessageListItem>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<!-- 底部聊天输入框 -->
|
<!-- 底部聊天输入框 -->
|
||||||
@@ -34,49 +49,79 @@
|
|||||||
import KeFuApi from '@/sheep/api/promotion/kefu';
|
import KeFuApi from '@/sheep/api/promotion/kefu';
|
||||||
import { isEmpty } from '@/sheep/helper/utils';
|
import { isEmpty } from '@/sheep/helper/utils';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
|
import { formatDate } from '@/sheep/util';
|
||||||
|
|
||||||
const sys_navBar = sheep.$platform.navbar;
|
const sys_navBar = sheep.$platform.navbar;
|
||||||
const messageList = ref([]); // 消息列表
|
const messageList = ref([]); // 消息列表
|
||||||
const showNewMessageTip = ref(false); // 显示有新消息提示
|
const showNewMessageTip = ref(false); // 显示有新消息提示
|
||||||
|
const refreshMessage = ref(false); // 更新消息列表
|
||||||
const backToTopStyle = reactive({
|
const backToTopStyle = reactive({
|
||||||
'width': '100px',
|
width: '100px',
|
||||||
'background-color': '#fff',
|
'background-color': '#fff',
|
||||||
'border-radius': '30px',
|
'border-radius': '30px',
|
||||||
'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.1)',
|
'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.1)',
|
||||||
'display': 'flex',
|
display: 'flex',
|
||||||
'justifyContent': 'center',
|
justifyContent: 'center',
|
||||||
'alignItems': 'center',
|
alignItems: 'center',
|
||||||
}); // 返回顶部样式
|
}); // 返回顶部样式
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
no: 1, // 查询次数,只用于触底计算
|
||||||
pageSize: 10,
|
limit: 20,
|
||||||
|
createTime: undefined,
|
||||||
});
|
});
|
||||||
const pagingRef = ref(null); // 虚拟列表
|
const pagingRef = ref(null); // 虚拟列表
|
||||||
const queryList = async (pageNo, pageSize) => {
|
const queryList = async (no, limit) => {
|
||||||
// 组件加载时会自动触发此方法,因此默认页面加载时会自动触发,无需手动调用
|
// 组件加载时会自动触发此方法,因此默认页面加载时会自动触发,无需手动调用
|
||||||
// 这里的pageNo和pageSize会自动计算好,直接传给服务器即可
|
queryParams.no = no;
|
||||||
queryParams.pageNo = pageNo;
|
queryParams.limit = limit;
|
||||||
queryParams.pageSize = pageSize;
|
|
||||||
await getMessageList();
|
await getMessageList();
|
||||||
};
|
};
|
||||||
// 获得消息分页列表
|
// 获得消息分页列表
|
||||||
const getMessageList = async () => {
|
const getMessageList = async () => {
|
||||||
const { data } = await KeFuApi.getKefuMessagePage(queryParams);
|
const { data } = await KeFuApi.getKefuMessageList(queryParams);
|
||||||
if (isEmpty(data.list)) {
|
if (isEmpty(data)) {
|
||||||
|
pagingRef.value.completeByNoMore([], true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pagingRef.value.completeByTotal(data.list, data.total);
|
if (queryParams.no > 1 && refreshMessage.value) {
|
||||||
|
const newMessageList = [];
|
||||||
|
for (const message of data) {
|
||||||
|
if (messageList.value.some((val) => val.id === message.id)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
newMessageList.push(message);
|
||||||
|
}
|
||||||
|
// 新消息追加到开头
|
||||||
|
messageList.value = [...newMessageList, ...messageList.value];
|
||||||
|
pagingRef.value.updateCache(); // 更新缓存
|
||||||
|
refreshMessage.value = false; // 更新好后重置状态
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data.slice(-1).length > 0) {
|
||||||
|
// 设置最后一次历史查询的最后一条消息的 createTime
|
||||||
|
queryParams.createTime = formatDate(data.slice(-1)[0].createTime);
|
||||||
|
}
|
||||||
|
pagingRef.value.completeByNoMore(data, false);
|
||||||
};
|
};
|
||||||
/** 刷新消息列表 */
|
/** 刷新消息列表 */
|
||||||
const refreshMessageList = (message = undefined) => {
|
const refreshMessageList = async (message = undefined) => {
|
||||||
if (message !== undefined) {
|
if (typeof message !== 'undefined') {
|
||||||
showNewMessageTip.value = true;
|
|
||||||
// 追加数据
|
// 追加数据
|
||||||
pagingRef.value.addChatRecordData([message], false);
|
pagingRef.value.addChatRecordData([message], false);
|
||||||
return;
|
} else {
|
||||||
|
queryParams.createTime = undefined;
|
||||||
|
refreshMessage.value = true;
|
||||||
|
await getMessageList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 若已是第一页则不做处理
|
||||||
|
if (queryParams.no > 1) {
|
||||||
|
showNewMessageTip.value = true;
|
||||||
|
} else {
|
||||||
|
onScrollToUpper();
|
||||||
}
|
}
|
||||||
pagingRef.value.reload();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** 滚动到最新消息 */
|
/** 滚动到最新消息 */
|
||||||
const onBackToTopClick = (event) => {
|
const onBackToTopClick = (event) => {
|
||||||
event(false); // 禁用默认操作
|
event(false); // 禁用默认操作
|
||||||
@@ -85,7 +130,7 @@
|
|||||||
/** 监听滚动到底部事件(因为 scroll 翻转了顶就是底) */
|
/** 监听滚动到底部事件(因为 scroll 翻转了顶就是底) */
|
||||||
const onScrollToUpper = () => {
|
const onScrollToUpper = () => {
|
||||||
// 若已是第一页则不做处理
|
// 若已是第一页则不做处理
|
||||||
if (queryParams.pageNo === 1) {
|
if (queryParams.no === 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
showNewMessageTip.value = false;
|
showNewMessageTip.value = false;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<!-- 内容 -->
|
<!-- 内容 -->
|
||||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.TEXT">
|
<template v-if="message.contentType === KeFuMessageContentTypeEnum.TEXT">
|
||||||
<view class="message-box" :class="{ admin: message.senderType === UserTypeEnum.ADMIN }">
|
<view class="message-box" :class="{ admin: message.senderType === UserTypeEnum.ADMIN }">
|
||||||
<mp-html :content="replaceEmoji(message.content)" />
|
<mp-html :content="replaceEmoji(getMessageContent(message).text || message.content)" />
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.IMAGE">
|
<template v-if="message.contentType === KeFuMessageContentTypeEnum.IMAGE">
|
||||||
@@ -58,9 +58,9 @@
|
|||||||
<su-image
|
<su-image
|
||||||
class="message-img"
|
class="message-img"
|
||||||
isPreview
|
isPreview
|
||||||
:previewList="[sheep.$url.cdn(message.content)]"
|
:previewList="[sheep.$url.cdn(getMessageContent(message).picUrl || message.content)]"
|
||||||
:current="0"
|
:current="0"
|
||||||
:src="sheep.$url.cdn(message.content)"
|
:src="sheep.$url.cdn(getMessageContent(message).picUrl || message.content)"
|
||||||
:height="200"
|
:height="200"
|
||||||
:width="200"
|
:width="200"
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
@@ -68,10 +68,12 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.PRODUCT">
|
<template v-if="message.contentType === KeFuMessageContentTypeEnum.PRODUCT">
|
||||||
|
<div class="ss-m-b-10">
|
||||||
<GoodsItem
|
<GoodsItem
|
||||||
:goodsData="getMessageContent(message)"
|
:goodsData="getMessageContent(message)"
|
||||||
@tap="sheep.$router.go('/pages/goods/index', { id: getMessageContent(message).spuId })"
|
@tap="sheep.$router.go('/pages/goods/index', { id: getMessageContent(message).spuId })"
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="message.contentType === KeFuMessageContentTypeEnum.ORDER">
|
<template v-if="message.contentType === KeFuMessageContentTypeEnum.ORDER">
|
||||||
<OrderItem
|
<OrderItem
|
||||||
@@ -84,7 +86,7 @@
|
|||||||
v-if="message.senderType === UserTypeEnum.MEMBER"
|
v-if="message.senderType === UserTypeEnum.MEMBER"
|
||||||
class="chat-avatar ss-m-l-24"
|
class="chat-avatar ss-m-l-24"
|
||||||
:src="
|
:src="
|
||||||
sheep.$url.cdn(message.senderAvatar) ||
|
sheep.$url.cdn(userInfo.avatar) ||
|
||||||
sheep.$url.static('/static/img/shop/chat/default.png')
|
sheep.$url.static('/static/img/shop/chat/default.png')
|
||||||
"
|
"
|
||||||
mode="aspectFill"
|
mode="aspectFill"
|
||||||
@@ -101,7 +103,7 @@
|
|||||||
import { KeFuMessageContentTypeEnum, UserTypeEnum } from '@/pages/chat/util/constants';
|
import { KeFuMessageContentTypeEnum, UserTypeEnum } from '@/pages/chat/util/constants';
|
||||||
import { emojiList } from '@/pages/chat/util/emoji';
|
import { emojiList } from '@/pages/chat/util/emoji';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { formatDate } from '@/sheep/util';
|
import { formatDate, jsonParse } from '@/sheep/util';
|
||||||
import GoodsItem from '@/pages/chat/components/goods.vue';
|
import GoodsItem from '@/pages/chat/components/goods.vue';
|
||||||
import OrderItem from '@/pages/chat/components/order.vue';
|
import OrderItem from '@/pages/chat/components/order.vue';
|
||||||
|
|
||||||
@@ -122,7 +124,9 @@
|
|||||||
default: () => [],
|
default: () => [],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const getMessageContent = computed(() => (item) => JSON.parse(item.content)); // 解析消息内容
|
|
||||||
|
const getMessageContent = computed(() => (item) => jsonParse(item.content)); // 解析消息内容
|
||||||
|
const userInfo = computed(() => sheep.$store('user').userInfo);
|
||||||
|
|
||||||
//======================= 工具 =======================
|
//======================= 工具 =======================
|
||||||
|
|
||||||
@@ -145,7 +149,7 @@
|
|||||||
let emojiFile = selEmojiFile(item);
|
let emojiFile = selEmojiFile(item);
|
||||||
newData = newData.replace(
|
newData = newData.replace(
|
||||||
item,
|
item,
|
||||||
`<img class="chat-img" style="width: 24px;height: 24px;margin: 0 3px;" src="${sheep.$url.cdn(
|
`<img class="chat-img" style="width: 24px;height: 24px;margin: 0 3px;vertical-align: middle;" src="${sheep.$url.cdn(
|
||||||
'/static/img/chat/emoji/' + emojiFile,
|
'/static/img/chat/emoji/' + emojiFile,
|
||||||
)}"/>`,
|
)}"/>`,
|
||||||
);
|
);
|
||||||
@@ -167,7 +171,7 @@
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.message-item {
|
.message-item {
|
||||||
margin-bottom: 33rpx;
|
margin-bottom: 10rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.date-message,
|
.date-message,
|
||||||
@@ -231,18 +235,23 @@
|
|||||||
.message-box {
|
.message-box {
|
||||||
max-width: 50%;
|
max-width: 50%;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 20px;
|
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
padding: 20rpx;
|
padding: 20rpx;
|
||||||
border-radius: 10rpx;
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
|
background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 9px;
|
||||||
|
border-top-left-radius: 10px;
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
&.admin {
|
&.admin {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 9px;
|
||||||
|
border-radius: 0 10px 10px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep() {
|
:deep() {
|
||||||
@@ -270,30 +279,6 @@
|
|||||||
border-radius: 6rpx;
|
border-radius: 6rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.template-wrap {
|
|
||||||
// width: 100%;
|
|
||||||
padding: 20rpx 24rpx;
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: 26rpx;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #333;
|
|
||||||
margin-bottom: 29rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: var(--ui-BG-Main);
|
|
||||||
margin-bottom: 16rpx;
|
|
||||||
|
|
||||||
&:last-of-type {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-img {
|
.error-img {
|
||||||
width: 400rpx;
|
width: 400rpx;
|
||||||
height: 400rpx;
|
height: 400rpx;
|
||||||
|
|||||||
+34
-14
@@ -1,17 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<s-layout class="chat-wrap" :title="!isReconnecting ? '连接客服成功' : '会话重连中'" navbar="inner">
|
<s-layout
|
||||||
|
class="chat-wrap"
|
||||||
|
:title="!isReconnecting ? '连接客服成功' : '会话重连中'"
|
||||||
|
navbar="inner"
|
||||||
|
>
|
||||||
<!-- 覆盖头部导航栏背景颜色 -->
|
<!-- 覆盖头部导航栏背景颜色 -->
|
||||||
<div class="page-bg" :style="{ height: sys_navBar + 'px' }"></div>
|
<view class="page-bg" :style="{ height: sys_navBar + 'px' }"></view>
|
||||||
<!-- 聊天区域 -->
|
<!-- 聊天区域 -->
|
||||||
<MessageList ref="messageListRef">
|
<MessageList ref="messageListRef">
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<message-input v-model="chat.msg" @on-tools="onTools" @send-message="onSendMessage"></message-input>
|
<message-input
|
||||||
|
v-model="chat.msg"
|
||||||
|
@on-tools="onTools"
|
||||||
|
@send-message="onSendMessage"
|
||||||
|
></message-input>
|
||||||
</template>
|
</template>
|
||||||
</MessageList>
|
</MessageList>
|
||||||
<!-- 聊天工具 -->
|
<!-- 聊天工具 -->
|
||||||
<tools-popup :show-tools="chat.showTools" :tools-mode="chat.toolsMode" @close="handleToolsClose"
|
<tools-popup
|
||||||
@on-emoji="onEmoji" @image-select="onSelect" @on-show-select="onShowSelect">
|
:show-tools="chat.showTools"
|
||||||
<message-input v-model="chat.msg" @on-tools="onTools" @send-message="onSendMessage"></message-input>
|
:tools-mode="chat.toolsMode"
|
||||||
|
@close="handleToolsClose"
|
||||||
|
@on-emoji="onEmoji"
|
||||||
|
@image-select="onSelect"
|
||||||
|
@on-show-select="onShowSelect"
|
||||||
|
>
|
||||||
|
<message-input
|
||||||
|
v-model="chat.msg"
|
||||||
|
@on-tools="onTools"
|
||||||
|
@send-message="onSendMessage"
|
||||||
|
></message-input>
|
||||||
</tools-popup>
|
</tools-popup>
|
||||||
<!-- 商品订单选择 -->
|
<!-- 商品订单选择 -->
|
||||||
<SelectPopup
|
<SelectPopup
|
||||||
@@ -30,10 +48,14 @@
|
|||||||
import ToolsPopup from '@/pages/chat/components/toolsPopup.vue';
|
import ToolsPopup from '@/pages/chat/components/toolsPopup.vue';
|
||||||
import MessageInput from '@/pages/chat/components/messageInput.vue';
|
import MessageInput from '@/pages/chat/components/messageInput.vue';
|
||||||
import SelectPopup from '@/pages/chat/components/select-popup.vue';
|
import SelectPopup from '@/pages/chat/components/select-popup.vue';
|
||||||
import { KeFuMessageContentTypeEnum, WebSocketMessageTypeConstants } from '@/pages/chat/util/constants';
|
import {
|
||||||
|
KeFuMessageContentTypeEnum,
|
||||||
|
WebSocketMessageTypeConstants,
|
||||||
|
} from '@/pages/chat/util/constants';
|
||||||
import FileApi from '@/sheep/api/infra/file';
|
import FileApi from '@/sheep/api/infra/file';
|
||||||
import KeFuApi from '@/sheep/api/promotion/kefu';
|
import KeFuApi from '@/sheep/api/promotion/kefu';
|
||||||
import { useWebSocket } from '@/sheep/hooks/useWebSocket';
|
import { useWebSocket } from '@/sheep/hooks/useWebSocket';
|
||||||
|
import { jsonParse } from '@/sheep/util';
|
||||||
|
|
||||||
const sys_navBar = sheep.$platform.navbar;
|
const sys_navBar = sheep.$platform.navbar;
|
||||||
|
|
||||||
@@ -52,7 +74,7 @@
|
|||||||
try {
|
try {
|
||||||
const data = {
|
const data = {
|
||||||
contentType: KeFuMessageContentTypeEnum.TEXT,
|
contentType: KeFuMessageContentTypeEnum.TEXT,
|
||||||
content: chat.msg,
|
content: JSON.stringify({ text: chat.msg }),
|
||||||
};
|
};
|
||||||
await KeFuApi.sendKefuMessage(data);
|
await KeFuApi.sendKefuMessage(data);
|
||||||
await messageListRef.value.refreshMessageList();
|
await messageListRef.value.refreshMessageList();
|
||||||
@@ -104,7 +126,7 @@
|
|||||||
const res = await FileApi.uploadFile(data.tempFiles[0].path);
|
const res = await FileApi.uploadFile(data.tempFiles[0].path);
|
||||||
msg = {
|
msg = {
|
||||||
contentType: KeFuMessageContentTypeEnum.IMAGE,
|
contentType: KeFuMessageContentTypeEnum.IMAGE,
|
||||||
content: res.data,
|
content: JSON.stringify({ picUrl: res.data }),
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case 'goods':
|
case 'goods':
|
||||||
@@ -134,19 +156,18 @@
|
|||||||
//======================= 聊天工具相关 end =======================
|
//======================= 聊天工具相关 end =======================
|
||||||
const { options } = useWebSocket({
|
const { options } = useWebSocket({
|
||||||
// 连接成功
|
// 连接成功
|
||||||
onConnected: async () => {
|
onConnected: async () => {},
|
||||||
},
|
|
||||||
// 收到消息
|
// 收到消息
|
||||||
onMessage: async (data) => {
|
onMessage: async (data) => {
|
||||||
const type = data.type;
|
const type = data.type;
|
||||||
if (!type) {
|
if (!type) {
|
||||||
console.error('未知的消息类型:' + data.value);
|
console.error('未知的消息类型:' + data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 2.2 消息类型:KEFU_MESSAGE_TYPE
|
// 2.2 消息类型:KEFU_MESSAGE_TYPE
|
||||||
if (type === WebSocketMessageTypeConstants.KEFU_MESSAGE_TYPE) {
|
if (type === WebSocketMessageTypeConstants.KEFU_MESSAGE_TYPE) {
|
||||||
// 刷新消息列表
|
// 刷新消息列表
|
||||||
await messageListRef.value.refreshMessageList(JSON.parse(data.content));
|
await messageListRef.value.refreshMessageList(jsonParse(data.content));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 2.3 消息类型:KEFU_MESSAGE_ADMIN_READ
|
// 2.3 消息类型:KEFU_MESSAGE_ADMIN_READ
|
||||||
@@ -160,7 +181,6 @@
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.chat-wrap {
|
.chat-wrap {
|
||||||
|
|
||||||
.page-bg {
|
.page-bg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
@@ -1,249 +1,272 @@
|
|||||||
<!-- 佣金排行榜 -->
|
<!-- 佣金排行榜 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="佣金排行榜">
|
<s-layout title="佣金排行榜">
|
||||||
<view class="CommissionRank">
|
<view class="commission-rank">
|
||||||
<view class="header">
|
<view class="header">
|
||||||
<view class="rank" v-if="state.position">
|
<view class="rank" v-if="state.position">
|
||||||
您目前的排名
|
您目前的排名
|
||||||
<text class="num">{{ state.position }}</text> 名
|
<text class="num">{{ state.position }}</text> 名
|
||||||
</view>
|
</view>
|
||||||
<view class="rank" v-else>您目前暂无排名</view>
|
<view class="rank" v-else>您目前暂无排名</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="wrapper">
|
<view class="wrapper">
|
||||||
<view class="nav acea-row row-around" style="justify-content: space-around; display: flex">
|
<view class="nav acea-row row-around" style="justify-content: space-around; display: flex">
|
||||||
<view class="item" :class="state.currentTab === index ? 'font-color' : ''"
|
<view
|
||||||
v-for="(item, index) in tabMaps" :key="index" @click="switchTap(index)">
|
class="item"
|
||||||
{{ item }}
|
:class="state.currentTab === index ? 'font-color' : ''"
|
||||||
</view>
|
v-for="(item, index) in tabMaps"
|
||||||
</view>
|
:key="index"
|
||||||
<view class="list">
|
@click="switchTap(index)"
|
||||||
<view class="item acea-row row-between-wrapper" v-for="(item, index) in state.rankList"
|
>
|
||||||
:key="index">
|
{{ item }}
|
||||||
<view class="num" v-if="index <= 2">
|
</view>
|
||||||
<image :src="'/static/images/medal0' + (index + 1) + '.png'" />
|
</view>
|
||||||
</view>
|
<view class="list">
|
||||||
<view class="num" v-else>
|
<view class="item" v-for="(item, index) in state.pagination.list" :key="index">
|
||||||
{{ index + 1 }}
|
<view class="num" v-if="index <= 2">
|
||||||
</view>
|
<image :src="'/static/images/medal0' + (index + 1) + '.png'" />
|
||||||
<view class="picTxt acea-row row-between-wrapper">
|
</view>
|
||||||
<view class="pictrue">
|
<view class="num" v-else>
|
||||||
<image :src="item.avatar" />
|
{{ index + 1 }}
|
||||||
</view>
|
</view>
|
||||||
<view class="text line1">{{ item.nickname }}</view>
|
<view class="pictrue">
|
||||||
</view>
|
<image :src="item.avatar" />
|
||||||
<view class="people font-color">¥{{ fen2yuan(item.brokeragePrice) }}</view>
|
</view>
|
||||||
</view>
|
<view class="text">{{ item.nickname }}</view>
|
||||||
</view>
|
<view class="people">¥{{ fen2yuan(item.brokeragePrice) }}</view>
|
||||||
<view class="noCommodity"
|
</view>
|
||||||
v-if="state.rankList.length === 0 && (state.page !== 1 || state.active === 0)">
|
</view>
|
||||||
<emptyPage title="暂无排行~" />
|
<view class="noCommodity" v-if="state.pagination.list.length === 0">
|
||||||
</view>
|
<emptyPage title="暂无排行~" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</s-layout>
|
</view>
|
||||||
|
|
||||||
|
<uni-load-more
|
||||||
|
v-if="state.pagination.total > 0"
|
||||||
|
:status="state.loadStatus"
|
||||||
|
:content-text="{
|
||||||
|
contentdown: '上拉加载更多',
|
||||||
|
}"
|
||||||
|
@tap="loadMore"
|
||||||
|
/>
|
||||||
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import {
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
onLoad
|
import { reactive } from 'vue';
|
||||||
} from '@dcloudio/uni-app';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
import {
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
reactive
|
import _ from 'lodash-es';
|
||||||
} from 'vue';
|
import { resetPagination } from '@/sheep/util';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
|
||||||
import {
|
|
||||||
fen2yuan
|
|
||||||
} from '@/sheep/hooks/useGoods';
|
|
||||||
|
|
||||||
const tabMaps = ['周排行', '月排行'];
|
const tabMaps = ['周排行', '月排行'];
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
currentTab: 0,
|
currentTab: 0,
|
||||||
position: 0, // 排名
|
position: 0, // 排名
|
||||||
rankList: [],
|
pagination: {
|
||||||
});
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
},
|
||||||
|
loadStatus: '',
|
||||||
|
});
|
||||||
|
|
||||||
async function switchTap(index) {
|
async function switchTap(index) {
|
||||||
state.currentTab = index;
|
state.currentTab = index;
|
||||||
state.rankList = [];
|
resetPagination(state.pagination);
|
||||||
calculateTimes();
|
calculateTimes();
|
||||||
getBrokerageRankList();
|
getBrokerageRankList();
|
||||||
getBrokerageRankNumber();
|
}
|
||||||
}
|
|
||||||
|
|
||||||
async function getBrokerageRankList() {
|
async function getBrokerageRankList() {
|
||||||
const {
|
const { code, data } = await BrokerageApi.getBrokerageUserChildSummaryPageByPrice({
|
||||||
code,
|
pageNo: state.pagination.pageNo,
|
||||||
data
|
pageSize: state.pagination.pageSize,
|
||||||
} = await BrokerageApi.getBrokerageUserChildSummaryPageByPrice({
|
'times[0]': state.times[0],
|
||||||
pageNo: 1,
|
'times[1]': state.times[1],
|
||||||
pageSize: 10,
|
});
|
||||||
'times[0]': state.times[0],
|
if (code !== 0) {
|
||||||
'times[1]': state.times[1],
|
return;
|
||||||
});
|
}
|
||||||
if (code !== 0) {
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
return;
|
state.pagination.total = data.total;
|
||||||
}
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
state.rankList = data.list;
|
if (state.pagination.pageNo === 1) {
|
||||||
}
|
getBrokerageRankNumber();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function getBrokerageRankNumber() {
|
async function getBrokerageRankNumber() {
|
||||||
const {
|
const { code, data } = await BrokerageApi.getRankByPrice({
|
||||||
code,
|
times: state.times,
|
||||||
data
|
});
|
||||||
} = await BrokerageApi.getRankByPrice({
|
if (code !== 0) {
|
||||||
times: state.times,
|
return;
|
||||||
});
|
}
|
||||||
if (code !== 0) {
|
state.position = data;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
state.position = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
return sheep.$helper.timeFormat(date, 'yyyy-mm-dd hh:MM:ss');
|
return sheep.$helper.timeFormat(date, 'yyyy-mm-dd hh:MM:ss');
|
||||||
}
|
}
|
||||||
|
|
||||||
function calculateTimes() {
|
function calculateTimes() {
|
||||||
let times;
|
let times;
|
||||||
if (state.currentTab === 0) {
|
if (state.currentTab === 0) {
|
||||||
times = getWeekTimes();
|
times = getWeekTimes();
|
||||||
} else {
|
} else {
|
||||||
times = getMonthTimes();
|
times = getMonthTimes();
|
||||||
}
|
}
|
||||||
state.times = [formatDate(times[0]), formatDate(times[1])];
|
state.times = [formatDate(times[0]), formatDate(times[1])];
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(function() {
|
onLoad(function () {
|
||||||
calculateTimes();
|
calculateTimes();
|
||||||
getBrokerageRankList();
|
getBrokerageRankList();
|
||||||
getBrokerageRankNumber();
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// TODO 芋艿:此处可考虑抽离
|
// TODO 芋艿:此处可考虑抽离
|
||||||
/**
|
/**
|
||||||
* 获得当前周的开始和结束时间
|
* 获得当前周的开始和结束时间
|
||||||
*/
|
*/
|
||||||
function getWeekTimes() {
|
function getWeekTimes() {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const dayOfWeek = today.getDay();
|
const dayOfWeek = today.getDay();
|
||||||
return [
|
return [
|
||||||
new Date(today.getFullYear(), today.getMonth(), today.getDate() - dayOfWeek, 0, 0, 0),
|
new Date(today.getFullYear(), today.getMonth(), today.getDate() - dayOfWeek, 0, 0, 0),
|
||||||
new Date(
|
new Date(
|
||||||
today.getFullYear(),
|
today.getFullYear(),
|
||||||
today.getMonth(),
|
today.getMonth(),
|
||||||
today.getDate() + (6 - dayOfWeek),
|
today.getDate() + (6 - dayOfWeek),
|
||||||
23,
|
23,
|
||||||
59,
|
59,
|
||||||
59,
|
59,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得当前月的开始和结束时间
|
* 获得当前月的开始和结束时间
|
||||||
*/
|
*/
|
||||||
function getMonthTimes() {
|
function getMonthTimes() {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const year = today.getFullYear();
|
const year = today.getFullYear();
|
||||||
const month = today.getMonth();
|
const month = today.getMonth();
|
||||||
const startDate = new Date(year, month, 1, 0, 0, 0);
|
const startDate = new Date(year, month, 1, 0, 0, 0);
|
||||||
const nextMonth = new Date(year, month + 1, 1);
|
const nextMonth = new Date(year, month + 1, 1);
|
||||||
const endDate = new Date(nextMonth.getTime() - 1);
|
const endDate = new Date(nextMonth.getTime() - 1);
|
||||||
return [startDate, endDate];
|
return [startDate, endDate];
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:css 需要优化下;并且展示样式有问题
|
// 加载更多
|
||||||
|
function loadMore() {
|
||||||
|
if (state.loadStatus === 'noMore') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
state.pagination.pageNo++;
|
||||||
|
getBrokerageRankList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上拉加载更多
|
||||||
|
onReachBottom(() => loadMore());
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.CommissionRank .header {
|
.commission-rank {
|
||||||
background: url('data:image/jpeg;base64,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 truncated
|
.header {
|
||||||
width: 100%;
|
background: url('data:image/jpeg;base64,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 truncated
|
||||||
height: 344rpx;
|
no-repeat;
|
||||||
background-size: 100% 100%;
|
width: 100%;
|
||||||
}
|
height: 344rpx;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
|
||||||
.CommissionRank .header .rank {
|
.rank {
|
||||||
font-size: 33rpx;
|
font-size: 33rpx;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 160rpx;
|
top: 160rpx;
|
||||||
left: 48rpx;
|
left: 48rpx;
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .header .rank .num {
|
.num {
|
||||||
font-size: 51rpx;
|
font-size: 51rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 0 10rpx;
|
margin: 0 10rpx;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.CommissionRank .wrapper {
|
.wrapper {
|
||||||
width: 710rpx;
|
width: 710rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 14rpx;
|
border-radius: 14rpx;
|
||||||
margin: -76rpx auto 0 auto;
|
margin: -76rpx auto 0 auto;
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .wrapper .nav {
|
.nav {
|
||||||
height: 99rpx;
|
height: 99rpx;
|
||||||
border-bottom: 2.5rpx solid #f3f3f3;
|
border-bottom: 2.5rpx solid #f3f3f3;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #999;
|
color: #999;
|
||||||
line-height: 99rpx;
|
line-height: 99rpx;
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .wrapper .nav .item.font-color {
|
.item.font-color {
|
||||||
border-bottom: 4rpx solid #e93323;
|
border-bottom: 4rpx solid #e93323;
|
||||||
margin-top: -2rpx;
|
margin-top: -2rpx;
|
||||||
color: #e93323;
|
color: #e93323;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.CommissionRank .wrapper .list {
|
.list {
|
||||||
padding: 0 30rpx;
|
padding: 0 20rpx;
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item {
|
.item {
|
||||||
border-bottom: 1px solid #f3f3f3;
|
display: flex;
|
||||||
height: 101rpx;
|
justify-content: space-around;
|
||||||
font-size: 28rpx;
|
align-items: center;
|
||||||
}
|
border-bottom: 1px solid #f3f3f3;
|
||||||
|
height: 101rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .num {
|
.num {
|
||||||
color: #666;
|
color: #666;
|
||||||
width: 70rpx;
|
flex: 0.08;
|
||||||
}
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .num image {
|
image {
|
||||||
width: 34rpx;
|
width: 50rpx;
|
||||||
height: 40rpx;
|
height: 50rpx;
|
||||||
display: block;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .picTxt {
|
.pictrue {
|
||||||
width: 350rpx;
|
flex: 0.15;
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .picTxt .pictrue {
|
image {
|
||||||
width: 68rpx;
|
width: 68rpx;
|
||||||
height: 68rpx;
|
height: 68rpx;
|
||||||
}
|
display: block;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .picTxt .pictrue image {
|
.text {
|
||||||
width: 100%;
|
color: #333;
|
||||||
height: 100%;
|
flex: 0.5;
|
||||||
display: block;
|
}
|
||||||
border-radius: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.CommissionRank .wrapper .list .item .picTxt .text {
|
.people {
|
||||||
width: 262rpx;
|
text-align: right;
|
||||||
color: #333;
|
flex: 0.27;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.CommissionRank .wrapper .list .item .people {
|
}
|
||||||
width: 175rpx;
|
}
|
||||||
text-align: right;
|
}
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -45,7 +45,8 @@
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
methods: { // 开启的提现方式
|
methods: {
|
||||||
|
// 开启的提现方式
|
||||||
type: Array,
|
type: Array,
|
||||||
default: [],
|
default: [],
|
||||||
},
|
},
|
||||||
@@ -57,7 +58,7 @@
|
|||||||
|
|
||||||
const typeList = [
|
const typeList = [
|
||||||
{
|
{
|
||||||
// icon: '/static/img/shop/pay/wechat.png', // TODO 芋艿:后续给个 icon
|
icon: '/static/img/shop/pay/wechat.png',
|
||||||
title: '钱包余额',
|
title: '钱包余额',
|
||||||
value: '1',
|
value: '1',
|
||||||
},
|
},
|
||||||
@@ -68,14 +69,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: '/static/img/shop/pay/wechat.png',
|
icon: '/static/img/shop/pay/wechat.png',
|
||||||
title: '微信零钱',
|
title: '微信账户', // 微信手动转账
|
||||||
value: '3',
|
value: '3',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: '/static/img/shop/pay/alipay.png',
|
icon: '/static/img/shop/pay/alipay.png',
|
||||||
title: '支付宝账户',
|
title: '支付宝账户',
|
||||||
value: '4',
|
value: '4',
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
icon: '/static/img/shop/pay/wechat.png',
|
||||||
|
title: '微信零钱', // 微信 API 转账
|
||||||
|
value: '5',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
function onChange(e) {
|
function onChange(e) {
|
||||||
@@ -89,7 +95,7 @@
|
|||||||
}
|
}
|
||||||
// 赋值
|
// 赋值
|
||||||
emits('update:modelValue', {
|
emits('update:modelValue', {
|
||||||
type: state.currentValue
|
type: state.currentValue,
|
||||||
});
|
});
|
||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
emits('close');
|
emits('close');
|
||||||
|
|||||||
@@ -31,9 +31,10 @@
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
// 用户资料卡片
|
// 用户资料卡片
|
||||||
.user-card {
|
.user-card {
|
||||||
width: 690rpx;
|
width: 700rpx;
|
||||||
height: 192rpx;
|
height: 192rpx;
|
||||||
margin: -88rpx 20rpx 0 20rpx;
|
margin: 0 auto;
|
||||||
|
margin-top: -88rpx;
|
||||||
padding-top: 88rpx;
|
padding-top: 88rpx;
|
||||||
background: v-bind(headerBg) no-repeat;
|
background: v-bind(headerBg) no-repeat;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+26
-17
@@ -63,26 +63,25 @@
|
|||||||
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';
|
||||||
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
pagination: {
|
pagination: {
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
loadStatus: '',
|
loadStatus: '',
|
||||||
shareInfo: {},
|
shareInfo: {},
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO @puhui999:【分享】接入
|
|
||||||
function onShareGoods(goodsInfo) {
|
function onShareGoods(goodsInfo) {
|
||||||
state.shareInfo = $share.getShareInfo(
|
state.shareInfo = $share.getShareInfo(
|
||||||
{
|
{
|
||||||
title: goodsInfo.title,
|
title: goodsInfo.name,
|
||||||
image: sheep.$url.cdn(goodsInfo.image),
|
image: sheep.$url.cdn(goodsInfo.picUrl),
|
||||||
desc: goodsInfo.subtitle,
|
desc: goodsInfo.introduction,
|
||||||
params: {
|
params: {
|
||||||
page: '2',
|
page: '2',
|
||||||
query: goodsInfo.id,
|
query: goodsInfo.id,
|
||||||
@@ -90,10 +89,10 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'goods', // 商品海报
|
type: 'goods', // 商品海报
|
||||||
title: goodsInfo.title, // 商品标题
|
title: goodsInfo.name, // 商品名称
|
||||||
image: sheep.$url.cdn(goodsInfo.image), // 商品主图
|
image: sheep.$url.cdn(goodsInfo.picUrl), // 商品主图
|
||||||
price: goodsInfo.price[0], // 商品价格
|
price: fen2yuan(goodsInfo.price), // 商品价格
|
||||||
original_price: goodsInfo.original_price, // 商品原价
|
original_price: fen2yuan(goodsInfo.marketPrice), // 商品原价
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
showShareModal();
|
showShareModal();
|
||||||
@@ -105,19 +104,29 @@
|
|||||||
pageSize: state.pagination.pageSize,
|
pageSize: state.pagination.pageSize,
|
||||||
pageNo: state.pagination.pageNo,
|
pageNo: state.pagination.pageNo,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
|
state.loadStatus = 'error'; // 处理错误状态
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 使用 Promise.all 来等待所有佣金请求完成
|
||||||
|
await Promise.all(
|
||||||
|
data.list.map(async (item) => {
|
||||||
|
try {
|
||||||
|
const res = await BrokerageApi.getProductBrokeragePrice(item.id);
|
||||||
|
item.brokerageMinPrice = res.data.brokerageMinPrice;
|
||||||
|
item.brokerageMaxPrice = res.data.brokerageMaxPrice;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`获取商品【${item.name}】的佣金时出错:`, error);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
// 在所有请求完成后合并列表和更新状态
|
||||||
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';
|
||||||
// 补充分佣金额
|
|
||||||
data.list.forEach((item) => {
|
|
||||||
BrokerageApi.getProductBrokeragePrice(item.id).then((res) => {
|
|
||||||
item.brokerageMinPrice = res.data.brokerageMinPrice;
|
|
||||||
item.brokerageMaxPrice = res.data.brokerageMaxPrice;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
|
|||||||
@@ -23,11 +23,13 @@
|
|||||||
import commissionMenu from './components/commission-menu.vue';
|
import commissionMenu from './components/commission-menu.vue';
|
||||||
import commissionAuth from './components/commission-auth.vue';
|
import commissionAuth from './components/commission-auth.vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
|
import { SharePageEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
|
/** 分销邀请 */
|
||||||
const shareInfo = computed(() => {
|
const shareInfo = computed(() => {
|
||||||
return sheep.$platform.share.getShareInfo({
|
return sheep.$platform.share.getShareInfo({
|
||||||
params: {
|
params: {
|
||||||
page: '6',
|
page: SharePageEnum.HOME.value, // 用户通邀请进入到首页
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
type: 'user',
|
type: 'user',
|
||||||
|
|||||||
+14
-10
@@ -72,10 +72,9 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad, onPageScroll, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import _ from 'lodash-es';
|
import _ from 'lodash-es';
|
||||||
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';
|
||||||
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
||||||
@@ -97,22 +96,22 @@
|
|||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const tabMaps = [
|
const tabMaps = [
|
||||||
{
|
{
|
||||||
name: '全部',
|
name: '全部',
|
||||||
value: 'all',
|
value: -1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '待结算',
|
name: '待结算',
|
||||||
value: '0', // 待结算
|
value: 0, // 待结算
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '已结算',
|
name: '已结算',
|
||||||
value: '1', // 已结算
|
value: 1, // 已结算
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -126,12 +125,17 @@
|
|||||||
// 获取订单列表
|
// 获取订单列表
|
||||||
async function getOrderList() {
|
async function getOrderList() {
|
||||||
state.loadStatus = 'loading';
|
state.loadStatus = 'loading';
|
||||||
let { code, data } = await BrokerageApi.getBrokerageRecordPage({
|
const tab = tabMaps[state.currentTab];
|
||||||
|
const queryParams = {
|
||||||
pageSize: state.pagination.pageSize,
|
pageSize: state.pagination.pageSize,
|
||||||
pageNo: state.pagination.pageSize,
|
pageNo: state.pagination.pageNo,
|
||||||
bizType: 1, // 获得推广佣金
|
bizType: 1, // 获得推广佣金
|
||||||
status: state.currentTab > 0 ? state.currentTab : undefined,
|
status: tab.value,
|
||||||
});
|
}
|
||||||
|
if (tab.value < 0) {
|
||||||
|
delete queryParams.status;
|
||||||
|
}
|
||||||
|
const { code, data } = await BrokerageApi.getBrokerageRecordPage(queryParams);
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+268
-243
@@ -1,297 +1,322 @@
|
|||||||
<template>
|
<template>
|
||||||
<s-layout title="推广人排行榜">
|
<s-layout title="推广人排行榜">
|
||||||
<view class="PromoterRank" style='backgroundColor:red'>
|
<view class="promoter-rank">
|
||||||
<view class="redBg bg-color">
|
<view class="nav">
|
||||||
<view class="header">
|
<view
|
||||||
<view class="nav acea-row row-center-wrapper" style='display:flex'>
|
class="item"
|
||||||
<view class="item" :class="state.currentTab === index ? 'font-color' : ''"
|
:class="state.currentTab === index ? 'active' : ''"
|
||||||
v-for="(item, index) in tabMaps" :key="index" @click="switchTap(index)">
|
v-for="(item, index) in tabMaps"
|
||||||
{{ item }}
|
:key="index"
|
||||||
</view>
|
@click="switchTap(index)"
|
||||||
</view>
|
>
|
||||||
<!-- top3 排名 -->
|
{{ item }}
|
||||||
<view class="rank acea-row row-bottom row-around">
|
</view>
|
||||||
<view class="item" v-show="state.two.id">
|
</view>
|
||||||
<view class="pictrue">
|
<view class="top-list">
|
||||||
<image :src="state.two.avatar"></image>
|
<template v-for="(item, index) in state.pagination.list" :key="index">
|
||||||
</view>
|
<view v-if="index < 3" class="item">
|
||||||
<view class="name line1">{{state.two.nickname}}</view>
|
<view class="pictrue">
|
||||||
<view class="num">{{ state.two.brokerageUserCount }}人</view>
|
<view class="num">
|
||||||
</view>
|
<text>{{ index + 1 }}</text>
|
||||||
<view class="item" v-show="state.one.id">
|
</view>
|
||||||
<view class="pictrue">
|
<image class="image" :src="item.avatar"></image>
|
||||||
<image :src="state.one.avatar"></image>
|
</view>
|
||||||
</view>
|
<view class="people">{{ item.brokerageUserCount }}人</view>
|
||||||
<view class="name line1">{{state.one.nickname}}</view>
|
<view class="nickname">{{ item.nickname }}</view>
|
||||||
<view class="num">{{ state.one.brokerageUserCount }}人</view>
|
</view>
|
||||||
</view>
|
</template>
|
||||||
<view class="item" v-show="state.three.id">
|
</view>
|
||||||
<view class="pictrue">
|
</view>
|
||||||
<image :src="state.three.avatar"></image>
|
<view class="other-list">
|
||||||
</view>
|
<template v-for="(item, index) in state.pagination.list" :key="index">
|
||||||
<view class="name line1">{{state.three.nickname}}</view>
|
<view class="item" v-if="index > 2">
|
||||||
<view class="num">{{ state.three.brokerageUserCount }}人</view>
|
<view class="num">{{ index + 1 }}</view>
|
||||||
</view>
|
<view class="pictrue">
|
||||||
</view>
|
<image class="image" :src="item.avatar"></image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view class="nickname">{{ item.nickname }}</view>
|
||||||
<!-- 其它排名 -->
|
<view class="people">{{ item.brokerageUserCount }}人</view>
|
||||||
<view class="list" v-if="state.rankList.length">
|
</view>
|
||||||
<view class="item acea-row row-between-wrapper" v-for="(item,index) in state.rankList" :key="index">
|
</template>
|
||||||
<view class="num">{{ index + 4 }}</view>
|
</view>
|
||||||
<view class="picTxt acea-row row-between-wrapper">
|
<uni-load-more
|
||||||
<view class="pictrue">
|
v-if="state.pagination.total > 0"
|
||||||
<image :src="item.avatar"></image>
|
:status="state.loadStatus"
|
||||||
</view>
|
:content-text="{
|
||||||
<view class="text line1">{{item.nickname}}</view>
|
contentdown: '上拉加载更多',
|
||||||
</view>
|
}"
|
||||||
<view class="people font-color">{{ item.brokerageUserCount }}人</view>
|
@tap="loadMore"
|
||||||
</view>
|
/>
|
||||||
</view>
|
</s-layout>
|
||||||
</view>
|
|
||||||
</s-layout>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive } from 'vue';
|
||||||
|
import _ from 'lodash-es';
|
||||||
|
import { resetPagination } from '@/sheep/util';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
|
|
||||||
const tabMaps = ['周排行', '月排行'];
|
const tabMaps = ['周排行', '月排行'];
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
currentTab: 0,
|
currentTab: 0,
|
||||||
|
times: [],
|
||||||
rankList: [],
|
pagination: {
|
||||||
times: [],
|
list: [],
|
||||||
|
total: 0,
|
||||||
one: {}, // 排名第一
|
|
||||||
two: {}, // 排名第二
|
|
||||||
three: {}, // 排名第三
|
|
||||||
});
|
|
||||||
|
|
||||||
function switchTap(index) {
|
|
||||||
if (state.currentTab === index) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
state.currentTab = index;
|
|
||||||
calculateTimes();
|
|
||||||
getRankList();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getRankList() {
|
|
||||||
// 重置数据
|
|
||||||
state.one = {};
|
|
||||||
state.two = {};
|
|
||||||
state.three = {};
|
|
||||||
state.rankList = [];
|
|
||||||
// 查询
|
|
||||||
const { code, data } = await BrokerageApi.getBrokerageUserRankPageByUserCount({
|
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
},
|
||||||
|
loadStatus: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
function switchTap(index) {
|
||||||
|
if (state.currentTab === index) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
state.currentTab = index;
|
||||||
|
resetPagination(state.pagination);
|
||||||
|
calculateTimes();
|
||||||
|
getRankList();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getRankList() {
|
||||||
|
state.loadStatus = 'loading';
|
||||||
|
// 查询
|
||||||
|
const { code, data } = await BrokerageApi.getBrokerageUserRankPageByUserCount({
|
||||||
|
pageNo: state.pagination.pageNo,
|
||||||
|
pageSize: state.pagination.pageSize,
|
||||||
'times[0]': state.times[0],
|
'times[0]': state.times[0],
|
||||||
'times[1]': state.times[1],
|
'times[1]': state.times[1],
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.rankList = data.list;
|
state.pagination.list = _.concat(state.pagination.list, data.list);
|
||||||
state.one = state.rankList.shift() || {};
|
state.pagination.total = data.total;
|
||||||
state.two = state.rankList.shift() || {};
|
state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
|
||||||
state.trhee = state.rankList.shift() || {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function calculateTimes() {
|
// 加载更多
|
||||||
let times;
|
function loadMore() {
|
||||||
if (state.currentTab === 0) {
|
if (state.loadStatus === 'noMore') {
|
||||||
times = getWeekTimes();
|
return;
|
||||||
} else {
|
}
|
||||||
times = getMonthTimes();
|
state.pagination.pageNo++;
|
||||||
}
|
getList();
|
||||||
state.times = [formatDate(times[0]), formatDate(times[1])]
|
}
|
||||||
}
|
|
||||||
|
// 上拉加载更多
|
||||||
|
onReachBottom(() => loadMore());
|
||||||
|
|
||||||
|
function calculateTimes() {
|
||||||
|
let times;
|
||||||
|
if (state.currentTab === 0) {
|
||||||
|
times = getWeekTimes();
|
||||||
|
} else {
|
||||||
|
times = getMonthTimes();
|
||||||
|
}
|
||||||
|
state.times = [formatDate(times[0]), formatDate(times[1])];
|
||||||
|
}
|
||||||
|
|
||||||
onLoad(function () {
|
onLoad(function () {
|
||||||
calculateTimes();
|
calculateTimes();
|
||||||
getRankList();
|
getRankList();
|
||||||
});
|
});
|
||||||
|
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
return sheep.$helper.timeFormat(date, 'yyyy-mm-dd hh:MM:ss');
|
return sheep.$helper.timeFormat(date, 'yyyy-mm-dd hh:MM:ss');
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:此处可考虑抽离
|
// TODO 芋艿:此处可考虑抽离
|
||||||
// 此处可考虑抽离
|
// 此处可考虑抽离
|
||||||
/**
|
/**
|
||||||
* 获得当前周的开始和结束时间
|
* 获得当前周的开始和结束时间
|
||||||
*/
|
*/
|
||||||
function getWeekTimes() {
|
function getWeekTimes() {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const dayOfWeek = today.getDay();
|
const dayOfWeek = today.getDay();
|
||||||
return [
|
return [
|
||||||
new Date(today.getFullYear(), today.getMonth(), today.getDate() - dayOfWeek, 0, 0, 0),
|
new Date(today.getFullYear(), today.getMonth(), today.getDate() - dayOfWeek, 0, 0, 0),
|
||||||
new Date(today.getFullYear(), today.getMonth(), today.getDate() + (6 - dayOfWeek), 23, 59, 59)
|
new Date(
|
||||||
]
|
today.getFullYear(),
|
||||||
}
|
today.getMonth(),
|
||||||
|
today.getDate() + (6 - dayOfWeek),
|
||||||
|
23,
|
||||||
|
59,
|
||||||
|
59,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得当前月的开始和结束时间
|
* 获得当前月的开始和结束时间
|
||||||
*/
|
*/
|
||||||
function getMonthTimes() {
|
function getMonthTimes() {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const year = today.getFullYear();
|
const year = today.getFullYear();
|
||||||
const month = today.getMonth();
|
const month = today.getMonth();
|
||||||
const startDate = new Date(year, month, 1, 0, 0, 0);
|
const startDate = new Date(year, month, 1, 0, 0, 0);
|
||||||
const nextMonth = new Date(year, month + 1, 1);
|
const nextMonth = new Date(year, month + 1, 1);
|
||||||
const endDate = new Date(nextMonth.getTime() - 1);
|
const endDate = new Date(nextMonth.getTime() - 1);
|
||||||
return [startDate, endDate]
|
return [startDate, endDate];
|
||||||
}
|
}
|
||||||
// TODO 芋艿:css 需要优化下;并且展示样式有问题
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang='scss' scoped>
|
<style lang="scss" scoped>
|
||||||
.PromoterRank .redBg {
|
.promoter-rank {
|
||||||
padding: 45rpx 0 30rpx 0;
|
padding: 45rpx 0 30rpx 0;
|
||||||
}
|
background: url('data:image/jpeg;base64,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 truncated
|
||||||
|
no-repeat;
|
||||||
|
width: 100%;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
|
||||||
.PromoterRank .header {
|
.nav {
|
||||||
background: url("data:image/jpeg;base64,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 truncated
|
display: flex;
|
||||||
width: 100%;
|
width: 450rpx;
|
||||||
height: 460rpx;
|
height: 66rpx;
|
||||||
background-size: 100% 100%;
|
border: 1px solid #fff;
|
||||||
}
|
border-radius: 33rpx;
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #fff;
|
||||||
|
margin: 0 auto;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
.PromoterRank .header .nav {
|
.item {
|
||||||
width: 450rpx;
|
width: 50%;
|
||||||
height: 66rpx;
|
height: 100%;
|
||||||
border: 1px solid #fff;
|
text-align: center;
|
||||||
border-radius: 33rpx;
|
line-height: 60rpx;
|
||||||
font-size: 30rpx;
|
|
||||||
color: #fff;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .header .nav .item {
|
&.active {
|
||||||
width: 223rpx;
|
color: #333;
|
||||||
height: 100%;
|
background-color: white;
|
||||||
text-align: center;
|
}
|
||||||
line-height: 60rpx;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.PromoterRank .header .nav .item.font-color:nth-of-type(1) {
|
.top-list {
|
||||||
background-color: #fff;
|
display: flex;
|
||||||
border-radius: 33rpx 0 0 33rpx;
|
justify-content: center;
|
||||||
color: red
|
align-items: center;
|
||||||
}
|
padding-top: 50rpx;
|
||||||
|
|
||||||
.PromoterRank .header .nav .item.font-color:nth-of-type(2) {
|
.item {
|
||||||
background-color: #fff;
|
margin: 0 20rpx;
|
||||||
border-radius: 0 33rpx 33rpx 0;
|
|
||||||
color: red
|
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .header .rank {
|
.pictrue {
|
||||||
padding: 0 20rpx;
|
position: relative;
|
||||||
margin-top: 30rpx;
|
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAACxCAYAAAAfz/U3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODVBODg2MzdEOEU1MTFFOTg4RTM5OTQyQjhDODMzMTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODVBODg2MzZEOEU1MTFFOTg4RTM5OTQyQjhDODMzMTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuM0xM0AABKbSURBVHja7F0LdB1VFb0vSRuSJmk+TWM/KJC2gAgUBWVVQCyKrQsVqC2ggFCgtFC0pbJc8il/qC6WRfn/EVCgUAu4lLYsiiIgVflJxX7oR2kS0jRJbdqkaZPWs+fdV+bd3pk3783Mm3kzZ6911ry8+eae/c4599xz7yT27Nkj8oG1a9eKEKKOZCbJZJJRJKXy+z6SDSR/JvkFyQdBP2hjY2Mg9y0S8cUFJO+RXEdymIkcQIkkTOqY+XFtpLgS5OckD5KMcHAsyDKL5HmSAUyQ6GMOyRU5nPdtkseZINHGF0huc3H+GdLtMEEiihs8ukYpEyR6+BzJNz24znCSbzFBoofxHl7r60yQ6OEwD691FBMkehjp4bUamCDRQ7uH19ri87MmwtJoJQHeG8HeeSRfJfkUST/JJpIlJE+SNHt8vw0eXmu1D+1xKMlZJONIhpH0kDSRPEeykGRrEEpKBDQWM43kFpEcC9EBRLmW5F4PH+FUkkUeXetGkrkeXWsgyfUimcCzytSi8a5obGxcFAeC3E7yI4en3Ucy3aNHKCNZJ62VF13mf3n0XK+QnOjw2OuIJNdHOQaZlQU5gItJrvHo3jDZd3pwnWc8JMeiLMhhEIR+aOdG1YIMpc16kvIsT+2Tv9hVHjwG7o0h/KNzPL+T5Eskazx4FoztPJ9jsD2GLElH1CzI+TmQIxVIX+rRM3SL5HjKdhdxzBqPnmVOjuchbsubFcknQdxkH0+UwZwXQBxyPMmKLM75D8nJJK969Ayo/jnOxflfiyJBDnFx7iibHk8ueEc2shOSLJbKfMnD+3/GZduPiiJBqlycWyq8z9m0kvzSwXGzSTZ6fO9BHvTIIkeQj1yc20LS5cMzvSGDYCv8V4rXcJsE/DiKBPnQxblQkh/pbRQj21VTr5KBrddY7fK6G6JIkN+7OPd5H5+rNUOX0g/AGv7WxflPRpEgC0j+l8N5O0Qyo+oX7MY4mny87105nrfG5x9MYASBIqbmcN5U4e/oqd3IabmP932X5Ooczju3sbFxTxQJAvyO5Mosjv9pHsxpjc2+T/t875uF8wFJuKXTiBxv5lNhQdSD3EpyeoZIfKVIpqLn5eF57AhSkYf7zxDJSnm7wBNjP+OJHM/lW1lBFQxhkOpnNvvvcBnUOgUSTnZzGo8U3iborPCwSNbBWLpZIsc/glBUkBVlbTb7TsnTM2DgzS6FX03y+Tw8BxKBE232dwSlpCAJYudiviKSFWd+Y6KDY/IxxeFkm3gHxVOb40gQJL922/QeLvT5/lDIdxwcd04e3MzMDD+knjgSpDWDm0Hw5ueYww8dBqHVPpMVtSl2I90IXnvjSBB029632Y/SwJt8ujeKl6ZlcfycDL0dN8CAoV0uZlWAOgqUIEj2rHNgeg/34d73k1RmcXw9ya98eA4UQo3LcMwHcSUIkKk6Cz0MJMq8HOr/nsPYQ8XZJN/18DnGCmflBuvjTBAnvw5MmVzg0f1AjMdcnP+USM7jcQvkXv5AUpzhuM44uxgA4xFOJgSdRvIbl/fCfNqnHSjFDjgXVe1HuLjGKEkOJ934lSKPtR9hJEizbASnrmGR7FVkC8yteU14s64HurzIal6Sw7nIqbxNcrDD45cHrJ9QzM39WxbHniob+CyHxx8oY5h7hLcjs5gBh+H65xxakxHy+BeyDI7fDlo5iRAsgzmJ5NkcLrlMJMcwMLqJcsadMqjFzPuDRDLBheUtq3z+11Cv8qJIrl+G+pGN8llgafaXzzA5h24ykoiYD/RvI2gJaBnMvBHEhjgNsjdTmeMluqViUIw0WOY4Bgf4L2HcZBdJrXC3KuJbRIqjg7YggbsYaoRWGazmCriO0SKZkRwdMDmEJEaDcL9k5lshcP+hWR9kuWCoeJ0J8gleYj6kAYNzS5kgn+A14W+BcKFhGbnej8PwICVheAhqjG4KVlGvepkv/2RJiRg4cKAYMGCA8RlSXFxsSFFRkSHGr0Vud+/evXcL6e/vN2TXrl2G7Ny509imjvMBC8PC1JIQ/Wpe8IIgUPp+++0nysrKRGlpqUGMlOIdm1WFMFYAaUAWSE9Pj9ixY4fxnQfuZQkTRO9mkFnNqpIskUgYhCgvLzcEhMgXQEYQETJ4cLLzBLJ0d3cbAsLkkEZYTha1mQmyr5vZQW4GYyWzHfVtiQwVFRVi0KBBWVsIPwGCQqqrqw0XtH37drFt2zaDMA7xQJiCocATZSkQOTBq+wjJMXaxRFVVlaisrDQ+FxL6+vpEV1eX2Lp1q/HZBlgBaSb9YFYwQZLEGCKSq/xNs7JocCH4RcJaRAGwKlu2bDFckBWfRLKo6VoiyubYEoTI8X2RfJtTvZUbqampMQgSRYAgnZ2ddu4HNbuXE0meiBVBiBj7y1/IBN1+BH21tbWRJYaOKB0dHUZPyAJY5WgaEeWjyBOEyIGyPczWr1X3IU9RV1cXGVeSi+tpb283ciwadEqSPBtJghAxMIUB65RO1XVV4UoQZ+BznAF9ID6B67HQzcMyiO2JDEGIHCjcQaZ0rC4Ara+vz2v+ohCAfEpbW5tVIIvR79OJJOsLniBEDkwrfFJ1KbAUiDNgNRjWgDVBfKLRE+pOziKSLC1YghA5sKwByv0GqLFGQ0ODkQpnZEZvb69obW3VxSb4YgaR5KGCIggRA4EE3ohwlboPAejQoUNDlf0sBCAru2nTJiOQ1QAL0Vzjx8pDnhNEkgMFujPUfXApCEYZuQPBK1yOBrDUl3pNEk8JQuTAvBGky89R4w1YDYydMNwDYzuwJhrdoXD6fCJJf+gIIi3Ho0JZaB6uZNiwYbFJeuUL6N20tLToalJ+LUniiWKLPCTHXSo5MBw+YsQIJocPQJuibdHGCn4AXUidhIMgIvl6sbSYA6Ot+Ac4v+Ef0LZoY83I9gypk+BdDDEVD3O3znKgO8vwH+j+NjU16arZLiFXc09gBCFyYGUczCorNsccbDnyD2ReQRIlJkGeZAKRZFneCSLT55jEXGvurSAgxWgsI5jAtbm5We3doE98DJFkXS7XLMqRHJjNtlAo6XN0ZZkcwQau0IEC6Gih1FneglSsjJP2/nokwTjPETygA+hCAQZJ78gLQWQ9R9qqf0ifc4Y0PIAuNDU1U6Xu/ItBZCXYu2bXgp7KyJEjeWwlZECwunHjRnWAD0VHR2ZTmZatVu9Xg1KMyjI5wgfoBLpRCrBqpA69dzGywHiCGnfwkH14Ad1o4pEJUpfeuRg5NQEr3QwxR8zIdzDCD+RHlMo0TKU41MmUCqcW5AYzOWC2UCbIKAxAV4qrGSJ16t6CkPXASsd4EXGxOUrWmC5GiIEaEtSSmIC8/FFkRd53a0Hmm8mBXgt3aQuz66uMjRVL3ebuYsh6YFXhk8zfYd5K3KcmFCKgM+hOwUlSxzlbkLS3LSCNHtdJTVEAdKcZCrkpJ4LI6Qrj1G4to7Ch0eE4qeusLchPzH9gIjVXhhU+Uovt2Ok6I0GIURiIG68GOYzoBKwKxkudO7Ygs1TWsfWIlhXR6HOWI4IQk+Ckppi/4+mR0YNGp5Ol7jNaELxZaS+9UBDLPZdo9miUYucyqfuMBLnA/AfWBGNEExrdXmhLEDIxeP3E3vefILmCBeMY0QR0qyQ9D5ccsLQgU9RgptBWE2Q4B3SrSZxNsSLine truncated
|
||||||
}
|
no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 136rpx;
|
||||||
|
height: 177rpx;
|
||||||
|
position: relative;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
.PromoterRank .header .rank .item .pictrue {
|
.image {
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAACxCAYAAAAfz/U3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODVBODg2MzdEOEU1MTFFOTg4RTM5OTQyQjhDODMzMTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODVBODg2MzZEOEU1MTFFOTg4RTM5OTQyQjhDODMzMTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIv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 truncated
|
display: inline-block;
|
||||||
background-size: 100% 100%;
|
margin-top: 47rpx;
|
||||||
width: 136rpx;
|
width: 130rpx;
|
||||||
height: 177rpx;
|
height: 130rpx;
|
||||||
position: relative;
|
border-radius: 50%;
|
||||||
margin: 0 auto;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .header .rank .item .pictrue image {
|
.num {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 130rpx;
|
bottom: 0;
|
||||||
height: 130rpx;
|
left: 0;
|
||||||
display: block;
|
width: 100%;
|
||||||
bottom: 2rpx;
|
text-align: center;
|
||||||
border-radius: 50%;
|
|
||||||
left: 50%;
|
|
||||||
margin-left: -65rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .header .rank .item:nth-of-type(2) .pictrue {
|
text {
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJwAAADNCAYAAABNahkfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU1MTlBRjBEOEU1MTFFOUEwRjRGRTQyMUZGNDk5NEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU1MTlBRUZEOEU1MTFFOUEwRjRGRTQyMUZGNDk5NEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIv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 truncated
|
display: inline-block;
|
||||||
width: 156rpx;
|
width: 30rpx;
|
||||||
height: 205rpx;
|
height: 30rpx;
|
||||||
}
|
line-height: 30rpx;
|
||||||
|
color: white;
|
||||||
|
border-radius: 50%;
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 22rpx;
|
||||||
|
background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .header .rank .item:nth-of-type(2) .pictrue image {
|
.nickname {
|
||||||
width: 150rpx;
|
color: white;
|
||||||
height: 150rpx;
|
font-weight: 20rpx;
|
||||||
margin-left: -75rpx;
|
text-align: center;
|
||||||
}
|
max-width: 200rpx;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .header .rank .item:nth-of-type(3) .pictrue {
|
.people {
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAACxCAYAAAAfz/U3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTExRTlGRDlEOEU2MTFFOTg0MDg4RjQ5MDM3QjNGRTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTExRTlGRDhEOEU2MTFFOTg0MDg4RjQ5MDM3QjNGRTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIv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 truncated
|
text-align: center;
|
||||||
}
|
color: white;
|
||||||
|
font-weight: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .header .rank .item:nth-of-type(3) .pictrue image {
|
&:first-second {
|
||||||
margin-left: -64rpx;
|
.pictrue {
|
||||||
}
|
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJwAAADNCAYAAABNahkfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU1MTlBRjBEOEU1MTFFOUEwRjRGRTQyMUZGNDk5NEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU1MTlBRUZEOEU1MTFFOUEwRjRGRTQyMUZGNDk5NEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIv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 truncated
|
||||||
|
no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .header .rank .item .name {
|
&:first-third {
|
||||||
font-size: 30rpx;
|
.pictrue {
|
||||||
color: #fff;
|
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIgAAACxCAYAAAAfz/U3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNGUyNzRkOS00YmQ4LTUzNGItYWZkZS02ZTlmMTgxYmZlYWUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTExRTlGRDlEOEU2MTFFOTg0MDg4RjQ5MDM3QjNGRTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTExRTlGRDhEOEU2MTFFOTg0MDg4RjQ5MDM3QjNGRTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTAxZGU2OWItNWM2My0xOTQ1LTllZmMtMGIzNjcwYTFmNWUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE0ZTI3NGQ5LTRiZDgtNTM0Yi1hZmRlLTZlOWYxODFiZmVhZSIv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 truncated
|
||||||
margin-top: 22rpx;
|
no-repeat;
|
||||||
text-align: center;
|
}
|
||||||
width: 170rpx;
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .header .rank .item .num {
|
.other-list {
|
||||||
font-size: 30rpx;
|
margin-top: 20rpx;
|
||||||
color: #fff;
|
padding: 0 16rpx;
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .list {
|
.item {
|
||||||
width: 710rpx;
|
border-radius: 14rpx;
|
||||||
background-color: #fff;
|
margin-bottom: 12rpx;
|
||||||
border-radius: 20rpx;
|
padding: 15rpx 20rpx;
|
||||||
margin: -60rpx auto 0 auto;
|
display: flex;
|
||||||
padding: 0 30rpx;
|
justify-content: space-around;
|
||||||
}
|
align-items: center;
|
||||||
|
background: white;
|
||||||
|
|
||||||
.PromoterRank .list .item {
|
.num {
|
||||||
border-bottom: 1px solid #f3f3f3;
|
flex: 0.1;
|
||||||
height: 101rpx;
|
text-align: center;
|
||||||
font-size: 28rpx;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .list .item .num {
|
.pictrue {
|
||||||
color: #666;
|
flex: 0.2;
|
||||||
width: 70rpx;
|
display: flex;
|
||||||
}
|
align-items: center;
|
||||||
|
|
||||||
.PromoterRank .list .item .picTxt {
|
.image {
|
||||||
width: 350rpx;
|
width: 60rpx;
|
||||||
}
|
height: 60rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.PromoterRank .list .item .picTxt .pictrue {
|
.nickname {
|
||||||
width: 68rpx;
|
flex: 0.5;
|
||||||
height: 68rpx;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .list .item .picTxt .pictrue image {
|
.people {
|
||||||
width: 100%;
|
flex: 0.2;
|
||||||
height: 100%;
|
text-align: center;
|
||||||
display: block;
|
}
|
||||||
border-radius: 50%;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.PromoterRank .list .item .picTxt .text {
|
|
||||||
width: 262rpx;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PromoterRank .list .item .people {
|
|
||||||
width: 175rpx;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
>单</view
|
>单</view
|
||||||
>
|
>
|
||||||
<view>
|
<view>
|
||||||
<text class="num">{{ item.brokeragePrice || 0 }}</text
|
<text class="num">{{ fen2yuan(item.brokeragePrice) || 0 }}</text
|
||||||
>元
|
>元
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -259,6 +259,7 @@
|
|||||||
import _ from 'lodash-es';
|
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';
|
||||||
|
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
||||||
|
|
||||||
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
||||||
// const agentInfo = computed(() => sheep.$store('user').agentInfo);
|
// const agentInfo = computed(() => sheep.$store('user').agentInfo);
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
loadStatus: '',
|
loadStatus: '',
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,9 @@
|
|||||||
<view v-if="!state.accountInfo.type" class="empty-text">请选择提现方式</view>
|
<view v-if="!state.accountInfo.type" class="empty-text">请选择提现方式</view>
|
||||||
<view v-if="state.accountInfo.type === '1'" class="empty-text">钱包余额</view>
|
<view v-if="state.accountInfo.type === '1'" class="empty-text">钱包余额</view>
|
||||||
<view v-if="state.accountInfo.type === '2'" class="empty-text">银行卡转账</view>
|
<view v-if="state.accountInfo.type === '2'" class="empty-text">银行卡转账</view>
|
||||||
<view v-if="state.accountInfo.type === '3'" class="empty-text">微信零钱</view>
|
<view v-if="state.accountInfo.type === '3'" class="empty-text">微信账户</view>
|
||||||
<view v-if="state.accountInfo.type === '4'" class="empty-text">支付宝账户</view>
|
<view v-if="state.accountInfo.type === '4'" class="empty-text">支付宝账户</view>
|
||||||
|
<view v-if="state.accountInfo.type === '5'" class="empty-text">微信零钱</view>
|
||||||
<text class="cicon-forward" />
|
<text class="cicon-forward" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
<!-- 提现账号 -->
|
<!-- 提现账号 -->
|
||||||
<view class="card-title" v-show="['2', '3', '4'].includes(state.accountInfo.type)">
|
<view class="card-title" v-show="['2', '3', '4', '5'].includes(state.accountInfo.type)">
|
||||||
提现账号
|
提现账号
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view
|
||||||
@@ -77,6 +78,7 @@
|
|||||||
limit="1"
|
limit="1"
|
||||||
mode="grid"
|
mode="grid"
|
||||||
:imageStyles="{ width: '168rpx', height: '168rpx' }"
|
:imageStyles="{ width: '168rpx', height: '168rpx' }"
|
||||||
|
@success="(payload) => state.accountInfo.accountQrCodeUrl = payload.tempFilePaths[0]"
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -160,13 +162,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, reactive, onBeforeMount } from 'vue';
|
import { computed, onBeforeMount, reactive } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import accountTypeSelect from './components/account-type-select.vue';
|
import accountTypeSelect from './components/account-type-select.vue';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
import TradeConfigApi from '@/sheep/api/trade/config';
|
import TradeConfigApi from '@/sheep/api/trade/config';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
import DictApi from '@/sheep/api/system/dict';
|
import DictApi from '@/sheep/api/system/dict';
|
||||||
|
import SLayout from '@/sheep/components/s-layout/s-layout.vue';
|
||||||
|
|
||||||
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;
|
||||||
|
|||||||
@@ -164,7 +164,7 @@
|
|||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
categoryId: 0, // 选中的商品分类编号
|
categoryId: 0, // 选中的商品分类编号
|
||||||
tabMaps: [], // 指定分类时,每个分类构成一个 tab
|
tabMaps: [], // 指定分类时,每个分类构成一个 tab
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 优惠券中心 -->
|
<!-- 优惠券中心 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="优惠券" :bgStyle="{ color: '#f2f2f2' }">
|
<s-layout :bgStyle="{ color: '#f2f2f2' }" title="优惠券">
|
||||||
<su-sticky bgColor="#fff">
|
<su-sticky bgColor="#fff">
|
||||||
<su-tabs
|
<su-tabs
|
||||||
:list="tabMaps"
|
:list="tabMaps"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { reactive, ref } from 'vue';
|
import { reactive } from 'vue';
|
||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
* @param commentIndex 当前评论的下标
|
* @param commentIndex 当前评论的下标
|
||||||
*/
|
*/
|
||||||
function uploadSuccess(payload, commentIndex) {
|
function uploadSuccess(payload, commentIndex) {
|
||||||
state.commentList[commentIndex].picUrls = state.commentList[commentIndex].images;
|
state.commentList[commentIndex].picUrls = payload.tempFilePaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(async (options) => {
|
onLoad(async (options) => {
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 1,
|
pageSize: 8,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -159,6 +159,7 @@
|
|||||||
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';
|
||||||
|
import { SharePageEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
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');
|
||||||
@@ -239,7 +240,7 @@
|
|||||||
title: state.activity.name,
|
title: state.activity.name,
|
||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
||||||
params: {
|
params: {
|
||||||
page: '3',
|
page: SharePageEnum.GROUPON.value,
|
||||||
query: state.activity.id,
|
query: state.activity.id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
<view class="price-text ss-m-r-16">
|
<view class="price-text ss-m-r-16">
|
||||||
{{ fen2yuan(state.selectedSku.price || state.goodsInfo.price) }}
|
{{ fen2yuan(state.selectedSku.price || state.goodsInfo.price) }}
|
||||||
</view>
|
</view>
|
||||||
<view class="origin-price-text" v-if="state.goodsInfo.marketPrice > 0">
|
<view class="origin-price-text" v-if="state.goodsInfo.marketPrice > state.goodsInfo.price">
|
||||||
{{ fen2yuan(state.selectedSku.marketPrice || state.goodsInfo.marketPrice) }}
|
{{ fen2yuan(state.selectedSku.marketPrice || state.goodsInfo.marketPrice) }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -234,6 +234,7 @@
|
|||||||
import countDown from '@/sheep/components/countDown/index.vue';
|
import countDown from '@/sheep/components/countDown/index.vue';
|
||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
import activity from '@/sheep/api/promotion/activity';
|
import activity from '@/sheep/api/promotion/activity';
|
||||||
|
import { SharePageEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
const bgColor = {
|
const bgColor = {
|
||||||
bgColor: '#E93323',
|
bgColor: '#E93323',
|
||||||
@@ -318,7 +319,7 @@
|
|||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
||||||
desc: state.goodsInfo.introduction,
|
desc: state.goodsInfo.introduction,
|
||||||
params: {
|
params: {
|
||||||
page: '2',
|
page: SharePageEnum.GOODS.value,
|
||||||
query: state.goodsInfo.id,
|
query: state.goodsInfo.id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -361,7 +362,7 @@
|
|||||||
// 选择有 promotionPrice 且最小的
|
// 选择有 promotionPrice 且最小的
|
||||||
state.settlementSku = state.goodsInfo.skus
|
state.settlementSku = state.goodsInfo.skus
|
||||||
.filter((sku) => sku.stock > 0 && sku.promotionPrice > 0)
|
.filter((sku) => sku.stock > 0 && sku.promotionPrice > 0)
|
||||||
.reduce((prev, curr) => (prev.promotionPrice < curr.promotionPrice ? prev : curr));
|
.reduce((prev, curr) => (prev.promotionPrice < curr.promotionPrice ? prev : curr), []);
|
||||||
|
|
||||||
// 设置满减送活动
|
// 设置满减送活动
|
||||||
if (data.rewardActivity) {
|
if (data.rewardActivity) {
|
||||||
|
|||||||
+17
-16
@@ -7,7 +7,10 @@
|
|||||||
<detailSkeleton v-if="state.skeletonLoading" />
|
<detailSkeleton v-if="state.skeletonLoading" />
|
||||||
<!-- 下架/售罄提醒 -->
|
<!-- 下架/售罄提醒 -->
|
||||||
<s-empty
|
<s-empty
|
||||||
v-else-if="state.goodsInfo === null || state.goodsInfo.activity_type !== PromotionActivityTypeEnum.POINT.type"
|
v-else-if="
|
||||||
|
state.goodsInfo === null ||
|
||||||
|
state.goodsInfo.activity_type !== PromotionActivityTypeEnum.POINT.type
|
||||||
|
"
|
||||||
text="活动不存在或已结束"
|
text="活动不存在或已结束"
|
||||||
icon="/static/soldout-empty.png"
|
icon="/static/soldout-empty.png"
|
||||||
showAction
|
showAction
|
||||||
@@ -37,7 +40,9 @@
|
|||||||
></image>
|
></image>
|
||||||
<text class="point-text ss-m-r-16">
|
<text class="point-text ss-m-r-16">
|
||||||
{{ getShowPrice.point }}
|
{{ getShowPrice.point }}
|
||||||
{{ !getShowPrice.price || getShowPrice.price === 0 ? '' : `+¥${getShowPrice.price}` }}
|
{{
|
||||||
|
!getShowPrice.price || getShowPrice.price === 0 ? '' : `+¥${getShowPrice.price}`
|
||||||
|
}}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="sales-text">
|
<view class="sales-text">
|
||||||
@@ -87,21 +92,19 @@
|
|||||||
<button
|
<button
|
||||||
class="ss-reset-button btn-box ss-flex-col"
|
class="ss-reset-button btn-box ss-flex-col"
|
||||||
@tap="state.showSelectSku = true"
|
@tap="state.showSelectSku = true"
|
||||||
:class="
|
:class="state.goodsInfo.stock != 0 ? 'check-btn-box' : 'disabled-btn-box'"
|
||||||
state.goodsInfo.stock != 0
|
|
||||||
? 'check-btn-box'
|
|
||||||
: 'disabled-btn-box'
|
|
||||||
"
|
|
||||||
:disabled="state.goodsInfo.stock === 0"
|
:disabled="state.goodsInfo.stock === 0"
|
||||||
>
|
>
|
||||||
<view class="price-box ss-flex">
|
<view class="price-box ss-flex">
|
||||||
<image
|
<image
|
||||||
:src="sheep.$url.static('/static/img/shop/goods/score1.svg')"
|
:src="sheep.$url.static('/static/img/shop/goods/score1.svg')"
|
||||||
style="width: 36rpx;height: 36rpx;margin: 0 4rpx;"
|
style="width: 36rpx; height: 36rpx; margin: 0 4rpx"
|
||||||
></image>
|
></image>
|
||||||
<text class="point-text ss-m-r-16">
|
<text class="point-text ss-m-r-16">
|
||||||
{{ getShowPrice.point }}
|
{{ getShowPrice.point }}
|
||||||
{{ !getShowPrice.price || getShowPrice.price === 0 ? '' : `+¥${getShowPrice.price}` }}
|
{{
|
||||||
|
!getShowPrice.price || getShowPrice.price === 0 ? '' : `+¥${getShowPrice.price}`
|
||||||
|
}}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view v-if="state.goodsInfo.stock === 0">已售罄</view>
|
<view v-if="state.goodsInfo.stock === 0">已售罄</view>
|
||||||
@@ -126,7 +129,7 @@
|
|||||||
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 SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import { PromotionActivityTypeEnum } from '@/sheep/util/const';
|
import { PromotionActivityTypeEnum, SharePageEnum } from '@/sheep/util/const';
|
||||||
import PointApi from '@/sheep/api/promotion/point';
|
import PointApi from '@/sheep/api/promotion/point';
|
||||||
|
|
||||||
const headerBg = sheep.$url.css('/static/img/shop/goods/score-bg.png');
|
const headerBg = sheep.$url.css('/static/img/shop/goods/score-bg.png');
|
||||||
@@ -135,8 +138,7 @@
|
|||||||
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');
|
||||||
|
|
||||||
onPageScroll(() => {
|
onPageScroll(() => {});
|
||||||
});
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
skeletonLoading: true,
|
skeletonLoading: true,
|
||||||
goodsInfo: {},
|
goodsInfo: {},
|
||||||
@@ -171,7 +173,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 分享信息
|
// 分享信息
|
||||||
// TODO puhui999: 下次 fix
|
|
||||||
const shareInfo = computed(() => {
|
const shareInfo = computed(() => {
|
||||||
if (isEmpty(unref(activity))) return {};
|
if (isEmpty(unref(activity))) return {};
|
||||||
return sheep.$platform.share.getShareInfo(
|
return sheep.$platform.share.getShareInfo(
|
||||||
@@ -179,7 +180,7 @@
|
|||||||
title: activity.value.name,
|
title: activity.value.name,
|
||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
||||||
params: {
|
params: {
|
||||||
page: '4',
|
page: SharePageEnum.POINT.value,
|
||||||
query: activity.value.id,
|
query: activity.value.id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -187,8 +188,8 @@
|
|||||||
type: 'goods', // 商品海报
|
type: 'goods', // 商品海报
|
||||||
title: activity.value.name, // 商品标题
|
title: activity.value.name, // 商品标题
|
||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl), // 商品主图
|
image: sheep.$url.cdn(state.goodsInfo.picUrl), // 商品主图
|
||||||
price: state.goodsInfo.price, // 商品价格
|
price: (getShowPrice.value.price || 0) + ` + ${getShowPrice.value.point} 积分`, // 积分价格
|
||||||
marketPrice: state.goodsInfo.marketPrice, // 商品原价
|
marketPrice: fen2yuan(state.goodsInfo.marketPrice), // 商品原价
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -137,11 +137,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, computed, ref, unref } from 'vue';
|
import { computed, reactive, ref, unref } 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-es';
|
import { isEmpty, min } from 'lodash-es';
|
||||||
import { useDurationTime, formatGoodsSwiper, fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan, formatGoodsSwiper, useDurationTime } 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';
|
||||||
import detailTabbar from './components/detail/detail-tabbar.vue';
|
import detailTabbar from './components/detail/detail-tabbar.vue';
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
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, SharePageEnum, 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');
|
||||||
@@ -206,7 +206,7 @@
|
|||||||
title: activity.value.name,
|
title: activity.value.name,
|
||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
image: sheep.$url.cdn(state.goodsInfo.picUrl),
|
||||||
params: {
|
params: {
|
||||||
page: '4',
|
page: SharePageEnum.SECKILL.value,
|
||||||
query: activity.value.id,
|
query: activity.value.id,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -214,8 +214,8 @@
|
|||||||
type: 'goods', // 商品海报
|
type: 'goods', // 商品海报
|
||||||
title: activity.value.name, // 商品标题
|
title: activity.value.name, // 商品标题
|
||||||
image: sheep.$url.cdn(state.goodsInfo.picUrl), // 商品主图
|
image: sheep.$url.cdn(state.goodsInfo.picUrl), // 商品主图
|
||||||
price: state.goodsInfo.price, // 商品价格
|
price: fen2yuan(state.goodsInfo.price), // 商品价格
|
||||||
marketPrice: state.goodsInfo.marketPrice, // 商品原价
|
marketPrice: fen2yuan(state.goodsInfo.marketPrice), // 商品原价
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
+254
-170
@@ -1,192 +1,276 @@
|
|||||||
<template>
|
<template>
|
||||||
<s-layout title="购物车" tabbar="/pages/index/cart" :bgStyle="{ color: '#fff' }">
|
<s-layout :bgStyle="{ color: '#fff' }" tabbar="/pages/index/cart" title="购物车">
|
||||||
<s-empty v-if="state.list.length === 0" text="购物车空空如也,快去逛逛吧~" icon="/static/cart-empty.png" />
|
<s-empty
|
||||||
|
v-if="state.list.length === 0"
|
||||||
|
icon="/static/cart-empty.png"
|
||||||
|
text="购物车空空如也,快去逛逛吧~"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- 头部 -->
|
<!-- 头部 -->
|
||||||
<view class="cart-box ss-flex ss-flex-col ss-row-between" v-if="state.list.length">
|
<view v-if="state.list.length" class="cart-box ss-flex ss-flex-col ss-row-between">
|
||||||
<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.list.length }}</text>
|
<text class="goods-number ui-TC-Main ss-flex">{{ state.list.length }}</text>
|
||||||
件商品
|
件商品
|
||||||
</view>
|
</view>
|
||||||
<view class="header-right">
|
<view class="header-right">
|
||||||
<button v-if="state.editMode" class="ss-reset-button" @tap="state.editMode = false">
|
<button v-if="state.editMode" class="ss-reset-button" @tap="state.editMode = false">
|
||||||
取消
|
取消
|
||||||
</button>
|
</button>
|
||||||
<button v-else class="ss-reset-button ui-TC-Main" @tap="state.editMode = true">
|
<button v-else class="ss-reset-button ui-TC-Main" @tap="state.editMode = true">
|
||||||
编辑
|
编辑
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 内容 -->
|
<!-- 内容 -->
|
||||||
<view class="cart-content ss-flex-1 ss-p-x-30 ss-m-b-40">
|
<view class="cart-content ss-flex-1 ss-p-x-30 ss-m-b-40">
|
||||||
<view class="goods-box ss-r-10 ss-m-b-14" v-for="item in state.list" :key="item.id">
|
<view v-for="item in state.list" :key="item.id" class="goods-box ss-r-10 ss-m-b-14">
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<label class="check-box ss-flex ss-col-center ss-p-l-10" @tap="onSelectSingle(item.id)">
|
<label class="check-box ss-flex ss-col-center ss-p-l-10" @tap="onSelectSingle(item.id)">
|
||||||
<radio :checked="state.selectedIds.includes(item.id)" color="var(--ui-BG-Main)"
|
<radio
|
||||||
style="transform: scale(0.8)" @tap.stop="onSelectSingle(item.id)" />
|
:checked="state.selectedIds.includes(item.id)"
|
||||||
</label>
|
color="var(--ui-BG-Main)"
|
||||||
<s-goods-item :title="item.spu.name" :img="item.spu.picUrl || item.goods.image"
|
style="transform: scale(0.8)"
|
||||||
:price="item.sku.price"
|
@tap.stop="onSelectSingle(item.id)"
|
||||||
:skuText="item.sku.properties.length>1? item.sku.properties.reduce((items2,items)=>items2.valueName+' '+items.valueName):item.sku.properties[0].valueName"
|
/>
|
||||||
priceColor="#FF3000" :titleWidth="400">
|
</label>
|
||||||
<template v-if="!state.editMode" v-slot:tool>
|
<s-goods-item
|
||||||
<su-number-box :min="0" :max="item.sku.stock" :step="1" v-model="item.count" @change="onNumberChange($event, item)" />
|
:img="item.spu.picUrl || item.goods.image"
|
||||||
</template>
|
:price="item.sku.price"
|
||||||
</s-goods-item>
|
:skuText="
|
||||||
</view>
|
item.sku.properties.length > 1
|
||||||
</view>
|
? item.sku.properties.reduce(
|
||||||
</view>
|
(items2, items) => items2.valueName + ' ' + items.valueName,
|
||||||
<!-- 底部 -->
|
)
|
||||||
<su-fixed bottom :val="48" placeholder v-if="state.list.length > 0" :isInset="false">
|
: item.sku.properties[0].valueName
|
||||||
<view class="cart-footer ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom">
|
"
|
||||||
<view class="footer-left ss-flex ss-col-center">
|
:title="item.spu.name"
|
||||||
<label class="check-box ss-flex ss-col-center ss-p-r-30" @tap="onSelectAll">
|
:titleWidth="400"
|
||||||
<radio :checked="state.isAllSelected" color="var(--ui-BG-Main)"
|
priceColor="#FF3000"
|
||||||
style="transform: scale(0.8)" @tap.stop="onSelectAll" />
|
>
|
||||||
<view class="ss-m-l-8"> 全选 </view>
|
<template v-if="!state.editMode" v-slot:tool>
|
||||||
</label>
|
<su-number-box
|
||||||
<text>合计:</text>
|
v-model="item.count"
|
||||||
<view class="text-price price-text">
|
:max="item.sku.stock"
|
||||||
{{ fen2yuan(state.totalPriceSelected) }}
|
:min="0"
|
||||||
</view>
|
:step="1"
|
||||||
</view>
|
@change="onNumberChange($event, item)"
|
||||||
<view class="footer-right">
|
/>
|
||||||
<button v-if="state.editMode" class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
|
</template>
|
||||||
@tap="onDelete">
|
</s-goods-item>
|
||||||
删除
|
</view>
|
||||||
</button>
|
</view>
|
||||||
<button v-else class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
|
</view>
|
||||||
@tap="onConfirm">
|
<!-- 底部 -->
|
||||||
去结算
|
<su-fixed v-if="state.list.length > 0" :isInset="false" :val="48" bottom placeholder>
|
||||||
{{ state.selectedIds?.length ? `(${state.selectedIds.length})` : '' }}
|
<view class="cart-footer ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom">
|
||||||
</button>
|
<view class="footer-left ss-flex ss-col-center">
|
||||||
</view>
|
<label class="check-box ss-flex ss-col-center ss-p-r-30" @tap="onSelectAll">
|
||||||
</view>
|
<radio
|
||||||
</su-fixed>
|
:checked="state.isAllSelected"
|
||||||
</view>
|
color="var(--ui-BG-Main)"
|
||||||
</s-layout>
|
style="transform: scale(0.8)"
|
||||||
|
@tap.stop="onSelectAll"
|
||||||
|
/>
|
||||||
|
<view class="ss-m-l-8"> 全选</view>
|
||||||
|
</label>
|
||||||
|
<text>合计:</text>
|
||||||
|
<view class="text-price price-text">
|
||||||
|
{{ fen2yuan(state.totalPriceSelected) }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="footer-right">
|
||||||
|
<button
|
||||||
|
v-if="state.editMode"
|
||||||
|
class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
|
||||||
|
@tap="onDelete"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
v-else
|
||||||
|
class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
|
||||||
|
@tap="onConfirm"
|
||||||
|
>
|
||||||
|
去结算
|
||||||
|
{{ state.selectedIds?.length ? `(${state.selectedIds.length})` : '' }}
|
||||||
|
</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</su-fixed>
|
||||||
|
</view>
|
||||||
|
</s-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { computed, reactive } from 'vue';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import { fen2yuan } from '../../sheep/hooks/useGoods';
|
import { computed, reactive } from 'vue';
|
||||||
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
|
import { isEmpty } from '@/sheep/helper/utils';
|
||||||
|
|
||||||
const sys_navBar = sheep.$platform.navbar;
|
const sys_navBar = sheep.$platform.navbar;
|
||||||
const cart = sheep.$store('cart');
|
const cart = sheep.$store('cart');
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
editMode: false,
|
editMode: false,
|
||||||
list: computed(() => cart.list),
|
list: computed(() => cart.list),
|
||||||
selectedList: [],
|
selectedList: [],
|
||||||
selectedIds: computed(() => cart.selectedIds),
|
selectedIds: computed(() => cart.selectedIds),
|
||||||
isAllSelected: computed(() => cart.isAllSelected),
|
isAllSelected: computed(() => cart.isAllSelected),
|
||||||
totalPriceSelected: computed(() => cart.totalPriceSelected),
|
totalPriceSelected: computed(() => cart.totalPriceSelected),
|
||||||
});
|
});
|
||||||
|
|
||||||
// 单选选中
|
// 单选选中
|
||||||
function onSelectSingle(id) {
|
function onSelectSingle(id) {
|
||||||
cart.selectSingle(id);
|
cart.selectSingle(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 全选
|
// 全选
|
||||||
function onSelectAll() {
|
function onSelectAll() {
|
||||||
cart.selectAll(!state.isAllSelected);
|
cart.selectAll(!state.isAllSelected);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 结算
|
// 结算
|
||||||
function onConfirm() {
|
async function onConfirm() {
|
||||||
let items = []
|
const items = [];
|
||||||
let goods_list = [];
|
state.selectedList = state.list.filter((item) => state.selectedIds.includes(item.id));
|
||||||
state.selectedList = state.list.filter((item) => state.selectedIds.includes(item.id));
|
state.selectedList.map((item) => {
|
||||||
state.selectedList.map((item) => {
|
// 此处前端做出修改
|
||||||
// 此处前端做出修改
|
items.push({
|
||||||
items.push({
|
skuId: item.sku.id,
|
||||||
skuId: item.sku.id,
|
count: item.count,
|
||||||
count: item.count,
|
cartId: item.id,
|
||||||
cartId: item.id,
|
categoryId: item.spu.categoryId,
|
||||||
categoryId: item.spu.categoryId
|
});
|
||||||
})
|
});
|
||||||
goods_list.push({
|
if (isEmpty(items)) {
|
||||||
// goods_id: item.goods_id,
|
sheep.$helper.toast('请先选择商品');
|
||||||
goods_id: item.spu.id,
|
return;
|
||||||
// goods_num: item.goods_num,
|
}
|
||||||
goods_num: item.count,
|
await validateDeliveryType(state.selectedList.map((item) => item.spu).map((spu) => spu.id));
|
||||||
// 商品价格id真没有
|
sheep.$router.go('/pages/order/confirm', {
|
||||||
// goods_sku_price_id: item.goods_sku_price_id,
|
data: JSON.stringify({
|
||||||
});
|
items,
|
||||||
});
|
}),
|
||||||
// return;
|
});
|
||||||
if (goods_list.length === 0) {
|
}
|
||||||
sheep.$helper.toast('请选择商品');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sheep.$router.go('/pages/order/confirm', {
|
|
||||||
data: JSON.stringify({
|
|
||||||
items
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onNumberChange(e, cartItem) {
|
/**
|
||||||
if (e === 0) {
|
* 校验配送方式冲突
|
||||||
cart.delete(cartItem.id);
|
*
|
||||||
return;
|
* @param {string[]} spuIds - 商品ID数组
|
||||||
}
|
* @returns {Promise<void>}
|
||||||
if (cartItem.goods_num === e) return;
|
* @throws {Error} 当配送方式冲突或获取商品信息失败时抛出错误
|
||||||
cartItem.goods_num = e;
|
*/
|
||||||
cart.update({
|
async function validateDeliveryType(spuIds) {
|
||||||
goods_id: cartItem.id,
|
// 获取商品信息
|
||||||
goods_num: e,
|
const { data: spuList } = await SpuApi.getSpuListByIds(spuIds.join(','));
|
||||||
goods_sku_price_id: cartItem.goods_sku_price_id,
|
if (isEmpty(spuList)) {
|
||||||
});
|
sheep.$helper.toast('未找到商品信息');
|
||||||
}
|
throw new Error('未找到商品信息');
|
||||||
async function onDelete() {
|
}
|
||||||
cart.delete(state.selectedIds);
|
// 获取所有商品的配送方式列表
|
||||||
}
|
const deliveryTypesList = spuList.map(item => item.deliveryTypes);
|
||||||
|
// 检查配送方式冲突
|
||||||
|
const hasConflict = checkDeliveryConflicts(deliveryTypesList);
|
||||||
|
if (hasConflict) {
|
||||||
|
sheep.$helper.toast('选中商品支持的配送方式冲突,不允许提交');
|
||||||
|
throw new Error('选中商品支持的配送方式冲突,不允许提交');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查配送方式列表中是否存在冲突
|
||||||
|
* @description
|
||||||
|
* 示例场景:
|
||||||
|
* A 商品支持:[快递, 自提]
|
||||||
|
* B 商品支持:[快递]
|
||||||
|
* C 商品支持:[自提]
|
||||||
|
*
|
||||||
|
* 对比结果:
|
||||||
|
* A 和 B:不冲突 (有交集:快递)
|
||||||
|
* A 和 C:不冲突 (有交集:自提)
|
||||||
|
* B 和 C:冲突 (无交集)
|
||||||
|
* @param {Array<Array<number>>} deliveryTypesList - 配送方式列表的数组
|
||||||
|
* @returns {boolean} 是否存在冲突
|
||||||
|
*/
|
||||||
|
function checkDeliveryConflicts(deliveryTypesList) {
|
||||||
|
for (let i = 0; i < deliveryTypesList.length - 1; i++) {
|
||||||
|
const currentTypes = deliveryTypesList[i];
|
||||||
|
for (let j = i + 1; j < deliveryTypesList.length; j++) {
|
||||||
|
const nextTypes = deliveryTypesList[j];
|
||||||
|
// 检查是否没有交集(即冲突)
|
||||||
|
const hasNoIntersection = !currentTypes.some(type =>
|
||||||
|
nextTypes.includes(type),
|
||||||
|
);
|
||||||
|
if (hasNoIntersection) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onNumberChange(e, cartItem) {
|
||||||
|
if (e === 0) {
|
||||||
|
cart.delete(cartItem.id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (cartItem.goods_num === e) return;
|
||||||
|
cartItem.goods_num = e;
|
||||||
|
cart.update({
|
||||||
|
goods_id: cartItem.id,
|
||||||
|
goods_num: e,
|
||||||
|
goods_sku_price_id: cartItem.goods_sku_price_id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onDelete() {
|
||||||
|
cart.delete(state.selectedIds);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
:deep(.ui-fixed) {
|
:deep(.ui-fixed) {
|
||||||
height: 72rpx;
|
height: 72rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cart-box {
|
.cart-box {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.cart-header {
|
.cart-header {
|
||||||
height: 70rpx;
|
height: 70rpx;
|
||||||
background-color: #f6f6f6;
|
background-color: #f6f6f6;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: v-bind('sys_navBar') rpx;
|
top: v-bind('sys_navBar') rpx;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cart-footer {
|
.cart-footer {
|
||||||
height: 100rpx;
|
height: 100rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
|
||||||
.pay-btn {
|
.pay-btn {
|
||||||
width: 180rpx;
|
width: 180rpx;
|
||||||
height: 70rpx;
|
height: 70rpx;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
line-height: 28rpx;
|
line-height: 28rpx;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
border-radius: 40rpx;
|
border-radius: 40rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.cart-content {
|
.cart-content {
|
||||||
margin-top: 70rpx;
|
margin-top: 70rpx;
|
||||||
|
|
||||||
.goods-box {
|
.goods-box {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 商品分类列表 -->
|
<!-- 商品分类列表 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="分类" tabbar="/pages/index/category" :bgStyle="{ color: '#fff' }">
|
<s-layout :bgStyle="{ color: '#fff' }" tabbar="/pages/index/category" title="分类">
|
||||||
<view class="s-category">
|
<view class="s-category">
|
||||||
<view class="three-level-wrap ss-flex ss-col-top" :style="[{ height: pageHeight + 'px' }]">
|
<view class="three-level-wrap ss-flex ss-col-top" :style="[{ height: pageHeight + 'px' }]">
|
||||||
<!-- 商品分类(左) -->
|
<!-- 商品分类(左) -->
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
scroll-y
|
scroll-y
|
||||||
:style="[{ height: pageHeight + 'px' }]"
|
:style="[{ height: pageHeight + 'px' }]"
|
||||||
v-if="state.categoryList?.length"
|
v-if="state.categoryList?.length"
|
||||||
|
@scrolltolower="handleScrollToLower"
|
||||||
>
|
>
|
||||||
<image
|
<image
|
||||||
v-if="state.categoryList[state.activeMenu].picUrl"
|
v-if="state.categoryList[state.activeMenu].picUrl"
|
||||||
@@ -61,7 +62,7 @@
|
|||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import CategoryApi from '@/sheep/api/product/category';
|
import CategoryApi from '@/sheep/api/product/category';
|
||||||
import SpuApi from '@/sheep/api/product/spu';
|
import SpuApi from '@/sheep/api/product/spu';
|
||||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { computed, reactive } from 'vue';
|
import { computed, reactive } from 'vue';
|
||||||
import _ from 'lodash-es';
|
import _ from 'lodash-es';
|
||||||
import { handleTree } from '@/sheep/util';
|
import { handleTree } from '@/sheep/util';
|
||||||
@@ -135,14 +136,14 @@
|
|||||||
await getList();
|
await getList();
|
||||||
|
|
||||||
// 首页点击分类的处理:查找满足条件的分类
|
// 首页点击分类的处理:查找满足条件的分类
|
||||||
const foundCategory = state.categoryList.find(category => category.id === params.id);
|
const foundCategory = state.categoryList.find((category) => category.id === Number(params.id));
|
||||||
// 如果找到则调用 onMenu 自动勾选相应分类,否则调用 onMenu(0) 勾选第一个分类
|
// 如果找到则调用 onMenu 自动勾选相应分类,否则调用 onMenu(0) 勾选第一个分类
|
||||||
onMenu(foundCategory ? state.categoryList.indexOf(foundCategory) : 0);
|
onMenu(foundCategory ? state.categoryList.indexOf(foundCategory) : 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
onReachBottom(() => {
|
function handleScrollToLower() {
|
||||||
loadMore();
|
loadMore();
|
||||||
});
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<image class="goods-img" :src="item.picUrl" mode="aspectFit" />
|
<image class="goods-img" :src="item.picUrl" mode="aspectFit" />
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-content">
|
<view class="goods-content">
|
||||||
<view class="goods-title ss-line-1 ss-m-b-28">{{ item.title }}</view>
|
<view class="goods-title ss-line-1 ss-m-b-28">{{ item.name }}</view>
|
||||||
<view class="goods-price">¥{{ fen2yuan(item.price) }}</view>
|
<view class="goods-price">¥{{ fen2yuan(item.price) }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 搜索界面 -->
|
<!-- 搜索界面 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout class="set-wrap" title="搜索" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" class="set-wrap" title="搜索">
|
||||||
<view class="ss-p-x-24">
|
<view class="ss-p-x-24">
|
||||||
<view class="ss-flex ss-col-center">
|
<view class="ss-flex ss-col-center">
|
||||||
<uni-search-bar
|
<uni-search-bar
|
||||||
|
|||||||
@@ -29,9 +29,9 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="flex flex-wrap">
|
<view class="flex flex-wrap">
|
||||||
<text class="default font-color" v-if="state.addressInfo.defaultStatus">[默认]</text>
|
<text class="default font-color" v-if="state.addressInfo.defaultStatus">[默认]</text>
|
||||||
<text class="line2"
|
<text class="line2">
|
||||||
>{{ state.addressInfo.areaName }} {{ state.addressInfo.detailAddress }}</text
|
{{ state.addressInfo.areaName }} {{ state.addressInfo.detailAddress }}
|
||||||
>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="addressCon" v-else>
|
<view class="addressCon" v-else>
|
||||||
@@ -44,7 +44,11 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 情况二:门店的选择 -->
|
<!-- 情况二:门店的选择 -->
|
||||||
<view class="address flex flex-wrap flex-center ss-row-between" v-else @tap="onSelectAddress">
|
<view
|
||||||
|
class="address flex flex-wrap flex-center ss-row-between"
|
||||||
|
v-if="state.deliveryType === 2"
|
||||||
|
@tap="onSelectAddress"
|
||||||
|
>
|
||||||
<view class="addressCon" v-if="state.pickUpInfo.name">
|
<view class="addressCon" v-if="state.pickUpInfo.name">
|
||||||
<view class="name"
|
<view class="name"
|
||||||
>{{ state.pickUpInfo.name }}
|
>{{ state.pickUpInfo.name }}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
<!-- TODO 芋艿:上传的测试 -->
|
<!-- TODO 芋艿:上传的测试 -->
|
||||||
<view class="upload-img">
|
<view class="upload-img">
|
||||||
<s-uploader
|
<s-uploader
|
||||||
v-model:url="formData.images"
|
v-model:url="formData.applyPicUrls"
|
||||||
fileMediatype="image"
|
fileMediatype="image"
|
||||||
limit="9"
|
limit="9"
|
||||||
mode="grid"
|
mode="grid"
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
way: '',
|
way: '',
|
||||||
applyReason: '',
|
applyReason: '',
|
||||||
applyDescription: '',
|
applyDescription: '',
|
||||||
images: [],
|
applyPicUrls: [],
|
||||||
});
|
});
|
||||||
const rules = reactive({});
|
const rules = reactive({});
|
||||||
|
|
||||||
|
|||||||
@@ -37,14 +37,14 @@
|
|||||||
<text class="_icon-forward"></text>
|
<text class="_icon-forward"></text>
|
||||||
</view>
|
</view>
|
||||||
<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 功能缺失:填写退货信息 -->
|
|
||||||
<view>
|
<view>
|
||||||
<button
|
<button
|
||||||
class="ss-reset-button tool-btn"
|
class="ss-reset-button tool-btn"
|
||||||
@tap.stop="onApply(order.id)"
|
@tap.stop="onApply(order.id)"
|
||||||
v-if="order?.buttons.includes('cancel')"
|
v-if="order?.buttons.includes('cancel')"
|
||||||
>取消申请</button
|
|
||||||
>
|
>
|
||||||
|
取消申请
|
||||||
|
</button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
+25
-3
@@ -228,6 +228,7 @@
|
|||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
import TradeConfigApi from '@/sheep/api/trade/config';
|
import TradeConfigApi from '@/sheep/api/trade/config';
|
||||||
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
import { fen2yuan } from '@/sheep/hooks/useGoods';
|
||||||
|
import { DeliveryTypeEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
orderPayload: {},
|
orderPayload: {},
|
||||||
@@ -244,7 +245,7 @@
|
|||||||
|
|
||||||
const addressState = ref({
|
const addressState = ref({
|
||||||
addressInfo: {}, // 选择的收货地址
|
addressInfo: {}, // 选择的收货地址
|
||||||
deliveryType: 1, // 收货方式:1-快递配送,2-门店自提
|
deliveryType: undefined, // 收货方式:1-快递配送,2-门店自提
|
||||||
isPickUp: true, // 门店自提是否开启
|
isPickUp: true, // 门店自提是否开启
|
||||||
pickUpInfo: {}, // 选择的自提门店信息
|
pickUpInfo: {}, // 选择的自提门店信息
|
||||||
receiverName: '', // 收件人名称
|
receiverName: '', // 收件人名称
|
||||||
@@ -349,7 +350,7 @@
|
|||||||
pointActivityId: state.orderPayload.pointActivityId,
|
pointActivityId: state.orderPayload.pointActivityId,
|
||||||
});
|
});
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
return;
|
return code;
|
||||||
}
|
}
|
||||||
state.orderInfo = data;
|
state.orderInfo = data;
|
||||||
state.couponInfo = data.coupons || [];
|
state.couponInfo = data.coupons || [];
|
||||||
@@ -357,20 +358,41 @@
|
|||||||
if (state.orderInfo.address) {
|
if (state.orderInfo.address) {
|
||||||
addressState.value.addressInfo = state.orderInfo.address;
|
addressState.value.addressInfo = state.orderInfo.address;
|
||||||
}
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad(async (options) => {
|
onLoad(async (options) => {
|
||||||
|
// 解析参数
|
||||||
if (!options.data) {
|
if (!options.data) {
|
||||||
sheep.$helper.toast('参数不正确,请检查!');
|
sheep.$helper.toast('参数不正确,请检查!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.orderPayload = JSON.parse(options.data);
|
state.orderPayload = JSON.parse(options.data);
|
||||||
await getOrderInfo();
|
|
||||||
// 获取交易配置
|
// 获取交易配置
|
||||||
const { data, code } = await TradeConfigApi.getTradeConfig();
|
const { data, code } = await TradeConfigApi.getTradeConfig();
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
addressState.value.isPickUp = data.deliveryPickUpEnabled;
|
addressState.value.isPickUp = data.deliveryPickUpEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 价格计算
|
||||||
|
// 情况一:先自动选择“快递物流”
|
||||||
|
addressState.value.deliveryType = DeliveryTypeEnum.EXPRESS.type;
|
||||||
|
let orderCode = await getOrderInfo();
|
||||||
|
if (orderCode === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 情况二:失败,再自动选择“门店自提”
|
||||||
|
if (addressState.value.isPickUp) {
|
||||||
|
addressState.value.deliveryType = DeliveryTypeEnum.PICK_UP.type;
|
||||||
|
let orderCode = await getOrderInfo();
|
||||||
|
if (orderCode === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 情况三:都失败,则不选择
|
||||||
|
addressState.value.deliveryType = undefined;
|
||||||
|
await getOrderInfo();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 使用 watch 监听地址和配送方式的变化
|
// 使用 watch 监听地址和配送方式的变化
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 支付结果页面 -->
|
<!-- 支付结果页面 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="支付结果" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" title="支付结果">
|
||||||
<view class="pay-result-box ss-flex-col ss-row-center ss-col-center">
|
<view class="pay-result-box ss-flex-col ss-row-center ss-col-center">
|
||||||
<!-- 信息展示 -->
|
<!-- 信息展示 -->
|
||||||
<view class="pay-waiting ss-m-b-30" v-if="payResult === 'waiting'" />
|
<view class="pay-waiting ss-m-b-30" v-if="payResult === 'waiting'" />
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onLoad, onHide, onShow } from '@dcloudio/uni-app';
|
import { onHide, onLoad, onShow } from '@dcloudio/uni-app';
|
||||||
import { reactive, computed, ref } from 'vue';
|
import { computed, reactive, ref } from 'vue';
|
||||||
import { isEmpty } from 'lodash-es';
|
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';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- FAQ 常见问题 -->
|
<!-- FAQ 常见问题 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout class="set-wrap" title="常见问题" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" class="set-wrap" title="常见问题">
|
||||||
<uni-collapse>
|
<uni-collapse>
|
||||||
<uni-collapse-item v-for="(item, index) in state.list" :key="item">
|
<uni-collapse-item v-for="(item, index) in state.list" :key="item">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 文章展示 -->
|
<!-- 文章展示 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout class="set-wrap" :title="state.title" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" :title="state.title" class="set-wrap">
|
||||||
<view class="ss-p-30">
|
<view class="ss-p-30">
|
||||||
<mp-html class="richtext" :content="state.content" />
|
<mp-html class="richtext" :content="state.content" />
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<s-layout class="set-wrap" title="系统设置" :bgStyle="{ color: '#fff' }">
|
<s-layout :bgStyle="{ color: '#fff' }" class="set-wrap" title="系统设置">
|
||||||
<view class="header-box ss-flex-col ss-row-center ss-col-center">
|
<view class="header-box ss-flex-col ss-row-center ss-col-center">
|
||||||
<image
|
<image
|
||||||
class="logo-img ss-m-b-46"
|
class="logo-img ss-m-b-46"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 收件地址列表 -->
|
<!-- 收件地址列表 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="收货地址" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" title="收货地址">
|
||||||
<view v-if="state.list.length">
|
<view v-if="state.list.length">
|
||||||
<s-address-item
|
<s-address-item
|
||||||
hasBorderBottom
|
hasBorderBottom
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onBeforeMount, reactive } from 'vue';
|
import { onBeforeMount, reactive } from 'vue';
|
||||||
import { onShow, onLoad } from '@dcloudio/uni-app';
|
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash-es';
|
import { isEmpty } from 'lodash-es';
|
||||||
import AreaApi from '@/sheep/api/system/area';
|
import AreaApi from '@/sheep/api/system/area';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!-- 商品浏览记录 -->
|
<!-- 商品浏览记录 -->
|
||||||
<template>
|
<template>
|
||||||
<s-layout title="我的足迹" :bgStyle="{ color: '#f2f2f2' }">
|
<s-layout :bgStyle="{ color: '#f2f2f2' }" title="我的足迹">
|
||||||
<view class="cart-box ss-flex ss-flex-col ss-row-between">
|
<view class="cart-box ss-flex ss-flex-col ss-row-between">
|
||||||
<!-- 头部 -->
|
<!-- 头部 -->
|
||||||
<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">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<s-layout title="选择自提门店" :bgStyle="{ color: '#FFF' }">
|
<s-layout :bgStyle="{ color: '#FFF' }" title="选择自提门店">
|
||||||
<view class="storeBox" ref="container">
|
<view class="storeBox" ref="container">
|
||||||
<view
|
<view
|
||||||
class="storeBox-box"
|
class="storeBox-box"
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ const KeFuApi = {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getKefuMessagePage: (params) => {
|
getKefuMessageList: (params) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/promotion/kefu-message/page',
|
url: '/promotion/kefu-message/list',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params,
|
params,
|
||||||
custom: {
|
custom: {
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ const TradeConfigApi = {
|
|||||||
return request({
|
return request({
|
||||||
url: `/trade/config/get`,
|
url: `/trade/config/get`,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
|
custom: {
|
||||||
|
showLoading: false,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ const OrderApi = {
|
|||||||
if (!(data.pointActivityId > 0)) {
|
if (!(data.pointActivityId > 0)) {
|
||||||
delete data2.pointActivityId;
|
delete data2.pointActivityId;
|
||||||
}
|
}
|
||||||
|
if (!(data.deliveryType > 0)) {
|
||||||
|
delete data2.deliveryType;
|
||||||
|
}
|
||||||
// 解决 SpringMVC 接受 List<Item> 参数的问题
|
// 解决 SpringMVC 接受 List<Item> 参数的问题
|
||||||
delete data2.items;
|
delete data2.items;
|
||||||
for (let i = 0; i < data.items.length; i++) {
|
for (let i = 0; i < data.items.length; i++) {
|
||||||
|
|||||||
@@ -57,8 +57,9 @@
|
|||||||
<view class="ss-m-b-24 cotBu-txt">
|
<view class="ss-m-b-24 cotBu-txt">
|
||||||
{{
|
{{
|
||||||
item.validityType == 1
|
item.validityType == 1
|
||||||
? sheep.$helper.timeFormat(item.validStartTime, 'yyyy.mm.dd') -
|
? sheep.$helper.timeFormat(item.validStartTime, 'yyyy-mm-dd') +
|
||||||
sheep.$helper.timeFormat(item.validEndTime, 'yyyy.mm.dd')
|
'-' +
|
||||||
|
sheep.$helper.timeFormat(item.validEndTime, 'yyyy-mm-dd')
|
||||||
: '领取后' + item.fixedStartTerm + '-' + item.fixedEndTerm + '天可用'
|
: '领取后' + item.fixedStartTerm + '-' + item.fixedEndTerm + '天可用'
|
||||||
}}
|
}}
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
v-if="data.type === 'text'"
|
v-if="data.type === 'text'"
|
||||||
class="nav-title inline"
|
class="nav-title inline"
|
||||||
:style="[{ color: data.textColor, width: width }]"
|
:style="[{ color: data.textColor, width: width }]"
|
||||||
|
@tap="sheep.$router.go(data.url)"
|
||||||
>
|
>
|
||||||
{{ data.text }}
|
{{ data.text }}
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view
|
<view
|
||||||
class="page-app"
|
class="page-app"
|
||||||
:class="['theme-' + sys.mode, 'main-' + sys.theme, 'font-' + sys.fontSize]"
|
:class="['theme-' + sys?.mode, 'main-' + sys?.theme, 'font-' + sys?.fontSize]"
|
||||||
>
|
>
|
||||||
<view class="page-main" :style="[bgMain]">
|
<view class="page-main" :style="[bgMain]">
|
||||||
<!-- 顶部导航栏-情况1:默认通用顶部导航栏 -->
|
<!-- 顶部导航栏-情况1:默认通用顶部导航栏 -->
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<su-inner-navbar v-if="navbar === 'inner'" :title="title" />
|
<su-inner-navbar v-if="navbar === 'inner'" :title="title" />
|
||||||
<view
|
<view
|
||||||
v-if="navbar === 'inner'"
|
v-if="navbar === 'inner'"
|
||||||
:style="[{ paddingTop: sheep.$platform.navbar + 'px' }]"
|
:style="[{ paddingTop: sheep?.$platform?.navbar + 'px' }]"
|
||||||
></view>
|
></view>
|
||||||
|
|
||||||
<!-- 顶部导航栏-情况4:装修组件导航栏-沉浸式 -->
|
<!-- 顶部导航栏-情况4:装修组件导航栏-沉浸式 -->
|
||||||
@@ -60,12 +60,11 @@
|
|||||||
/**
|
/**
|
||||||
* 模板组件 - 提供页面公共组件,属性,方法
|
* 模板组件 - 提供页面公共组件,属性,方法
|
||||||
*/
|
*/
|
||||||
import { computed, reactive, ref } from 'vue';
|
import { computed, onMounted } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { isEmpty } from 'lodash-es';
|
import { isEmpty } from 'lodash-es';
|
||||||
import { onShow } from '@dcloudio/uni-app';
|
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
import { onShareAppMessage } from '@dcloudio/uni-app';
|
import { onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app';
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -157,7 +156,7 @@
|
|||||||
const bgMain = computed(() => {
|
const bgMain = computed(() => {
|
||||||
if (navbarMode.value === 'inner') {
|
if (navbarMode.value === 'inner') {
|
||||||
return {
|
return {
|
||||||
background: `${props.bgStyle.backgroundColor} url(${sheep.$url.cdn(
|
background: `${props.bgStyle.backgroundColor || props.bgStyle.color} url(${sheep.$url.cdn(
|
||||||
props.bgStyle.backgroundImage,
|
props.bgStyle.backgroundImage,
|
||||||
)}) no-repeat top center / 100% auto`,
|
)}) no-repeat top center / 100% auto`,
|
||||||
};
|
};
|
||||||
@@ -169,7 +168,7 @@
|
|||||||
const bgBody = computed(() => {
|
const bgBody = computed(() => {
|
||||||
if (navbarMode.value === 'normal') {
|
if (navbarMode.value === 'normal') {
|
||||||
return {
|
return {
|
||||||
background: `${props.bgStyle.backgroundColor} url(${sheep.$url.cdn(
|
background: `${props.bgStyle.backgroundColor || props.bgStyle.color} url(${sheep.$url.cdn(
|
||||||
props.bgStyle.backgroundImage,
|
props.bgStyle.backgroundImage,
|
||||||
)}) no-repeat top center / 100% auto`,
|
)}) no-repeat top center / 100% auto`,
|
||||||
};
|
};
|
||||||
@@ -191,21 +190,34 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
// 微信小程序分享
|
uni.showShareMenu({
|
||||||
|
withShareTicket: true,
|
||||||
|
menus: ['shareAppMessage', 'shareTimeline'],
|
||||||
|
});
|
||||||
|
// 微信小程序分享好友
|
||||||
onShareAppMessage(() => {
|
onShareAppMessage(() => {
|
||||||
return {
|
return {
|
||||||
title: shareInfo.value.title,
|
title: shareInfo.value.title,
|
||||||
path: shareInfo.value.path,
|
path: shareInfo.value.forward.path,
|
||||||
|
imageUrl: shareInfo.value.image,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
// 微信小程序分享朋友圈
|
||||||
|
onShareTimeline(() => {
|
||||||
|
return {
|
||||||
|
title: shareInfo.value.title,
|
||||||
|
query: shareInfo.value.forward.path,
|
||||||
imageUrl: shareInfo.value.image,
|
imageUrl: shareInfo.value.image,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
onShow(() => {
|
// 组件中使用 onMounted 监听页面加载,不是页面组件不使用 onShow
|
||||||
|
onMounted(()=>{
|
||||||
if (!isEmpty(shareInfo.value)) {
|
if (!isEmpty(shareInfo.value)) {
|
||||||
sheep.$platform.share.updateShareInfo(shareInfo.value);
|
sheep.$platform.share.updateShareInfo(shareInfo.value);
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -92,7 +92,6 @@
|
|||||||
showAuthModal();
|
showAuthModal();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log(props.shareInfo);
|
|
||||||
unref(SharePosterRef).getPoster();
|
unref(SharePosterRef).getPoster();
|
||||||
state.showPosterModal = true;
|
state.showPosterModal = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
:key="item.text"
|
:key="item.text"
|
||||||
:text="item.text"
|
:text="item.text"
|
||||||
:name="item.url"
|
:name="item.url"
|
||||||
|
:badge="item.badge"
|
||||||
|
:dot="item.dot"
|
||||||
|
:badgeStyle="tabbar.badgeStyle"
|
||||||
:isCenter="getTabbarCenter(index)"
|
:isCenter="getTabbarCenter(index)"
|
||||||
:centerImage="sheep.$url.cdn(item.iconUrl)"
|
:centerImage="sheep.$url.cdn(item.iconUrl)"
|
||||||
@tap="sheep.$router.go(item.url)"
|
@tap="sheep.$router.go(item.url)"
|
||||||
@@ -33,6 +36,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { computed, unref } from 'vue';
|
import { computed, unref } from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
|
import SuTabbar from '@/sheep/ui/su-tabbar/su-tabbar.vue';
|
||||||
|
|
||||||
const tabbar = computed(() => {
|
const tabbar = computed(() => {
|
||||||
return sheep.$store('app').template.basic?.tabbar;
|
return sheep.$store('app').template.basic?.tabbar;
|
||||||
|
|||||||
@@ -1,108 +1,104 @@
|
|||||||
<!-- 装修商品组件:标题栏 -->
|
<!-- 装修商品组件:标题栏 -->
|
||||||
<template>
|
<template>
|
||||||
<view class="ss-title-wrap ss-flex ss-col-center" :class="[state.typeMap[data.textAlign]]" :style="[bgStyle, { marginLeft: `${data.space}px` }]">
|
<view
|
||||||
<view class="title-content">
|
class="ss-title-wrap ss-flex ss-col-center"
|
||||||
<!-- 主标题 -->
|
:class="[state.typeMap[data.textAlign]]"
|
||||||
<view v-if="data.title" class="title-text" :style="[titleStyles]">{{ data.title }}</view>
|
:style="[bgStyle, { marginLeft: `${data.space}px` }]"
|
||||||
<!-- 副标题 -->
|
>
|
||||||
<view v-if="data.description" :style="[descStyles]" class="sub-title-text">{{ data.description }}</view>
|
<view class="title-content">
|
||||||
</view>
|
<!-- 主标题 -->
|
||||||
<!-- 查看更多 -->
|
<view
|
||||||
<view v-if="data.more?.show" class="more-box ss-flex ss-col-center" @tap="sheep.$router.go(data.more.url)"
|
v-if="data.title"
|
||||||
:style="{color: data.descriptionColor}">
|
:style="{
|
||||||
<view class="more-text" v-if="data.more.type !== 'icon'">{{ data.more.text }} </view>
|
fontSize: `${data.titleSize}px`,
|
||||||
<text class="_icon-forward" v-if="data.more.type !== 'text'"></text>
|
fontWeight: data.titleWeight,
|
||||||
</view>
|
color: data.titleColor,
|
||||||
</view>
|
textAlign: data.textAlign
|
||||||
|
}"
|
||||||
|
class="title-text"
|
||||||
|
>
|
||||||
|
{{ data.title }}
|
||||||
|
</view>
|
||||||
|
<!-- 副标题 -->
|
||||||
|
<view
|
||||||
|
v-if="data.description"
|
||||||
|
:style="{
|
||||||
|
fontSize: `${data.descriptionSize}px`,
|
||||||
|
fontWeight: data.descriptionWeight,
|
||||||
|
color: data.descriptionColor,
|
||||||
|
textAlign: data.textAlign
|
||||||
|
}"
|
||||||
|
class="sub-title-text"
|
||||||
|
>
|
||||||
|
{{ data.description }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 查看更多 -->
|
||||||
|
<view
|
||||||
|
v-if="data.more?.show"
|
||||||
|
class="more-box ss-flex ss-col-center"
|
||||||
|
@tap="sheep.$router.go(data.more.url)"
|
||||||
|
:style="{ color: data.descriptionColor }"
|
||||||
|
>
|
||||||
|
<view v-if="data.more.type !== 'icon'" class="more-text">{{ data.more.text }}</view>
|
||||||
|
<text class="_icon-forward" v-if="data.more.type !== 'text'"></text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
/**
|
/**
|
||||||
* 标题栏
|
* 标题栏
|
||||||
*/
|
*/
|
||||||
import {
|
import { computed, reactive } from 'vue';
|
||||||
reactive,
|
import sheep from '@/sheep';
|
||||||
computed
|
|
||||||
} from 'vue';
|
|
||||||
import sheep from '@/sheep';
|
|
||||||
|
|
||||||
// 数据
|
// 数据
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
typeMap: {
|
typeMap: {
|
||||||
left: 'ss-row-left',
|
left: 'ss-row-left',
|
||||||
center: 'ss-row-center',
|
center: 'ss-row-center',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// 接收参数
|
// 接收参数
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 装修数据
|
// 装修数据
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
// 装修样式
|
// 装修样式
|
||||||
styles: {
|
styles: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
// 设置背景样式
|
// 设置背景样式
|
||||||
const bgStyle = computed(() => {
|
const bgStyle = computed(() => {
|
||||||
// 直接从 props.styles 解构
|
// 直接从 props.styles 解构
|
||||||
const {
|
const { bgType, bgImg, bgColor } = props.styles;
|
||||||
bgType,
|
|
||||||
bgImg,
|
|
||||||
bgColor
|
|
||||||
} = props.styles;
|
|
||||||
|
|
||||||
// 根据 bgType 返回相应的样式
|
// 根据 bgType 返回相应的样式
|
||||||
return {
|
return {
|
||||||
background: bgType === 'img' ? `url(${bgImg}) no-repeat top center / 100% 100%` : bgColor
|
background: bgType === 'img' ? `url(${bgImg}) no-repeat top center / 100% 100%` : bgColor,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// 标题样式
|
|
||||||
const titleStyles = {
|
|
||||||
color: props.data.titleColor,
|
|
||||||
fontSize: `${props.data.titleSize}px`,
|
|
||||||
textAlign: props.data.textAlign
|
|
||||||
};
|
|
||||||
|
|
||||||
// 副标题
|
|
||||||
const descStyles = {
|
|
||||||
color: props.data.descriptionColor,
|
|
||||||
textAlign: props.data.textAlign,
|
|
||||||
fontSize: `${props.data.descriptionSize}px`,
|
|
||||||
fontWeight: `${props.data.descriptionWeight}px`,
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.ss-title-wrap {
|
.ss-title-wrap {
|
||||||
height: 80rpx;
|
min-height: 80rpx;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.title-content {
|
.more-box {
|
||||||
.title-text {
|
white-space: nowrap;
|
||||||
font-size: 30rpx;
|
font-size: 22rpx;
|
||||||
color: #333;
|
color: #999;
|
||||||
}
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
.sub-title-text {
|
transform: translateY(-50%);
|
||||||
font-size: 22rpx;
|
right: 20rpx;
|
||||||
color: #999;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.more-box {
|
|
||||||
white-space: nowrap;
|
|
||||||
font-size: 22rpx;
|
|
||||||
color: #999;
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
right: 20rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -204,32 +204,46 @@ async function uploadFiles(choosePromise, { onChooseFile, onUploadProgress }) {
|
|||||||
|
|
||||||
// 如果是前端直连上传
|
// 如果是前端直连上传
|
||||||
if (UPLOAD_TYPE.CLIENT === import.meta.env.SHOPRO_UPLOAD_TYPE) {
|
if (UPLOAD_TYPE.CLIENT === import.meta.env.SHOPRO_UPLOAD_TYPE) {
|
||||||
for (const file of files) {
|
// 为上传创建一组 Promise
|
||||||
// 1.1 获取文件预签名地址
|
const uploadPromises = files.map(async (file) => {
|
||||||
const { data: presignedInfo } = await FileApi.getFilePresignedUrl(file.name);
|
try {
|
||||||
// 1.2 获取二进制文件对象
|
// 1.1 获取文件预签名地址
|
||||||
const fileBuffer = await convertToArrayBuffer(file);
|
const { data: presignedInfo } = await FileApi.getFilePresignedUrl(file.name);
|
||||||
// 1.3 上传文件
|
// 1.2 获取二进制文件对象
|
||||||
await uni.request({
|
const fileBuffer = await convertToArrayBuffer(file);
|
||||||
url: presignedInfo.uploadUrl, // 预签名的上传 URL
|
|
||||||
method: 'PUT', // 使用 PUT 方法
|
// 返回上传的 Promise
|
||||||
header: {
|
return new Promise((resolve, reject) => {
|
||||||
'Content-Type': file.fileType + '/' + file.name.substring(file.name.lastIndexOf('.') + 1), // 设置内容类型
|
uni.request({
|
||||||
},
|
url: presignedInfo.uploadUrl, // 预签名的上传 URL
|
||||||
data: fileBuffer, // 文件的路径,适用于小程序
|
method: 'PUT', // 使用 PUT 方法
|
||||||
success: (res) => {
|
header: {
|
||||||
// 1.4. 记录文件信息到后端(异步)
|
'Content-Type':
|
||||||
createFile(presignedInfo, file);
|
file.fileType + '/' + file.name.substring(file.name.lastIndexOf('.') + 1), // 设置内容类型
|
||||||
// 1.5. 重新赋值
|
},
|
||||||
file.url = presignedInfo.url;
|
data: fileBuffer, // 文件的路径,适用于小程序
|
||||||
console.log('上传成功:', res);
|
success: (res) => {
|
||||||
},
|
// 1.4. 记录文件信息到后端(异步)
|
||||||
fail: (err) => {
|
createFile(presignedInfo, file);
|
||||||
console.error('上传失败:', err);
|
// 1.5. 重新赋值
|
||||||
},
|
file.url = presignedInfo.url;
|
||||||
});
|
console.log('上传成功:', res);
|
||||||
}
|
resolve(file);
|
||||||
return files;
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.error('上传失败:', err);
|
||||||
|
reject(err);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('上传失败:', error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 等待所有上传完成
|
||||||
|
return await Promise.all(uploadPromises); // 返回已上传的文件列表
|
||||||
} else {
|
} else {
|
||||||
// 后端上传
|
// 后端上传
|
||||||
for (let file of files) {
|
for (let file of files) {
|
||||||
|
|||||||
@@ -44,13 +44,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { chooseAndUploadFile, uploadCloudFiles } from './choose-and-upload-file.js';
|
import { chooseAndUploadFile, uploadCloudFiles } from './choose-and-upload-file.js';
|
||||||
import {
|
import { get_extname, get_files_and_is_max, get_file_data } from './utils.js';
|
||||||
get_file_ext,
|
|
||||||
get_extname,
|
|
||||||
get_files_and_is_max,
|
|
||||||
get_file_info,
|
|
||||||
get_file_data,
|
|
||||||
} from './utils.js';
|
|
||||||
import uploadImage from './upload-image.vue';
|
import uploadImage from './upload-image.vue';
|
||||||
import uploadFile from './upload-file.vue';
|
import uploadFile from './upload-file.vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
@@ -352,22 +346,21 @@
|
|||||||
/**
|
/**
|
||||||
* 选择文件并上传
|
* 选择文件并上传
|
||||||
*/
|
*/
|
||||||
chooseFiles() {
|
async chooseFiles() {
|
||||||
const _extname = get_extname(this.fileExtname);
|
const _extname = get_extname(this.fileExtname);
|
||||||
// 获取后缀
|
// 获取后缀
|
||||||
uniCloud
|
await chooseAndUploadFile({
|
||||||
.chooseAndUploadFile({
|
type: this.fileMediatype,
|
||||||
type: this.fileMediatype,
|
compressed: false,
|
||||||
compressed: false,
|
sizeType: this.sizeType,
|
||||||
sizeType: this.sizeType,
|
// TODO 如果为空,video 有问题
|
||||||
// TODO 如果为空,video 有问题
|
extension: _extname.length > 0 ? _extname : undefined,
|
||||||
extension: _extname.length > 0 ? _extname : undefined,
|
count: this.limitLength - this.files.length, //默认9
|
||||||
count: this.limitLength - this.files.length, //默认9
|
onChooseFile: this.chooseFileCallback,
|
||||||
onChooseFile: this.chooseFileCallback,
|
onUploadProgress: (progressEvent) => {
|
||||||
onUploadProgress: (progressEvent) => {
|
this.setProgress(progressEvent, progressEvent.index);
|
||||||
this.setProgress(progressEvent, progressEvent.index);
|
},
|
||||||
},
|
})
|
||||||
})
|
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
this.setSuccessAndError(result);
|
this.setSuccessAndError(result);
|
||||||
})
|
})
|
||||||
@@ -587,7 +580,7 @@
|
|||||||
path: v.path,
|
path: v.path,
|
||||||
size: v.size,
|
size: v.size,
|
||||||
fileID: v.fileID,
|
fileID: v.fileID,
|
||||||
url: v.path,
|
url: v.url,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return newFilesData;
|
return newFilesData;
|
||||||
|
|||||||
@@ -17,12 +17,11 @@ export const get_file_ext = (name) => {
|
|||||||
*/
|
*/
|
||||||
export const get_extname = (fileExtname) => {
|
export const get_extname = (fileExtname) => {
|
||||||
if (!Array.isArray(fileExtname)) {
|
if (!Array.isArray(fileExtname)) {
|
||||||
let extname = fileExtname.replace(/(\[|\])/g, '');
|
let extname = fileExtname.replace(/([\[\]])/g, '');
|
||||||
return extname.split(',');
|
return extname.split(',');
|
||||||
} else {
|
} else {
|
||||||
return fileExtname;
|
return fileExtname;
|
||||||
}
|
}
|
||||||
return [];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,7 +90,7 @@ export const get_file_data = async (files, type = 'image') => {
|
|||||||
extname: extname || '',
|
extname: extname || '',
|
||||||
cloudPath: files.cloudPath,
|
cloudPath: files.cloudPath,
|
||||||
fileType: files.fileType,
|
fileType: files.fileType,
|
||||||
url: files.path || files.path,
|
url: files.url || files.path,
|
||||||
size: files.size, //单位是字节
|
size: files.size, //单位是字节
|
||||||
image: {},
|
image: {},
|
||||||
path: files.path,
|
path: files.path,
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ export function appendSettlementProduct(spus, settlementInfos) {
|
|||||||
// 选择价格最小的 SKU 设置到 SPU 上
|
// 选择价格最小的 SKU 设置到 SPU 上
|
||||||
const settlementSku = settlementInfo.skus
|
const settlementSku = settlementInfo.skus
|
||||||
.filter((sku) => sku.promotionPrice > 0)
|
.filter((sku) => sku.promotionPrice > 0)
|
||||||
.reduce((prev, curr) => (prev.promotionPrice < curr.promotionPrice ? prev : curr));
|
.reduce((prev, curr) => (prev.promotionPrice < curr.promotionPrice ? prev : curr), []);
|
||||||
if (settlementSku) {
|
if (settlementSku) {
|
||||||
spu.promotionType = settlementSku.promotionType;
|
spu.promotionType = settlementSku.promotionType;
|
||||||
spu.promotionPrice = settlementSku.promotionPrice;
|
spu.promotionPrice = settlementSku.promotionPrice;
|
||||||
|
|||||||
+43
-37
@@ -3,6 +3,8 @@ import $platform from '@/sheep/platform';
|
|||||||
import $router from '@/sheep/router';
|
import $router from '@/sheep/router';
|
||||||
import $url from '@/sheep/url';
|
import $url from '@/sheep/url';
|
||||||
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
import BrokerageApi from '@/sheep/api/trade/brokerage';
|
||||||
|
import { SharePageEnum } from '@/sheep/util/const';
|
||||||
|
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
import $wxsdk from '@/sheep/libs/sdk-h5-weixin';
|
import $wxsdk from '@/sheep/libs/sdk-h5-weixin';
|
||||||
// #endif
|
// #endif
|
||||||
@@ -35,7 +37,11 @@ const getShareInfo = (
|
|||||||
link: '', // 分享Url+参数
|
link: '', // 分享Url+参数
|
||||||
query: '', // 分享参数
|
query: '', // 分享参数
|
||||||
poster, // 海报所需数据
|
poster, // 海报所需数据
|
||||||
|
forward: {} // 转发所需参数
|
||||||
};
|
};
|
||||||
|
shareInfo.title = scene.title;
|
||||||
|
shareInfo.image = $url.cdn(scene.image);
|
||||||
|
shareInfo.desc = scene.desc;
|
||||||
|
|
||||||
const app = $store('app');
|
const app = $store('app');
|
||||||
const shareConfig = app.platform.share;
|
const shareConfig = app.platform.share;
|
||||||
@@ -47,19 +53,11 @@ const getShareInfo = (
|
|||||||
// 配置分享链接地址
|
// 配置分享链接地址
|
||||||
shareInfo.link = buildSpmLink(query, shareConfig.linkAddress);
|
shareInfo.link = buildSpmLink(query, shareConfig.linkAddress);
|
||||||
// 配置页面地址带参数
|
// 配置页面地址带参数
|
||||||
shareInfo.path = buildSpmPath(query);
|
shareInfo.path = buildSpmPath();
|
||||||
|
|
||||||
// 配置转发参数
|
// 配置页面转发参数
|
||||||
if (shareConfig.methods.includes('forward')) {
|
if (shareConfig.methods.includes('forward')) {
|
||||||
// TODO puhui999: forward 这块有点问题
|
shareInfo.forward.path = buildSpmPath(query);
|
||||||
if (shareConfig.forwardInfo.title === '' || shareConfig.forwardInfo.image === '') {
|
|
||||||
console.log('请在平台设置中配置转发信息');
|
|
||||||
}
|
|
||||||
// 设置自定义分享信息
|
|
||||||
shareInfo.title = scene.title || shareConfig.forwardInfo.title;
|
|
||||||
shareInfo.image = $url.cdn(scene.image || shareConfig.forwardInfo.image);
|
|
||||||
shareInfo.desc = scene.desc || shareConfig.forwardInfo.subtitle;
|
|
||||||
shareInfo.path = buildSpmPath(scene.path, query);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return shareInfo;
|
return shareInfo;
|
||||||
@@ -79,7 +77,7 @@ const buildSpmQuery = (params) => {
|
|||||||
shareId = user.userInfo.id;
|
shareId = user.userInfo.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let page = '1'; // 页面类型: 1=首页(默认),2=商品,3=拼团商品,4=秒杀商品,5=邀请参团,6=分销邀请...按需扩展
|
let page = SharePageEnum.HOME.value; // 页面类型,默认首页
|
||||||
if (typeof params.page !== 'undefined') {
|
if (typeof params.page !== 'undefined') {
|
||||||
page = params.page;
|
page = params.page;
|
||||||
}
|
}
|
||||||
@@ -100,7 +98,8 @@ const buildSpmQuery = (params) => {
|
|||||||
const buildSpmPath = (query) => {
|
const buildSpmPath = (query) => {
|
||||||
// 默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,
|
// 默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,
|
||||||
// 不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面。scancode_time为系统保留参数,不允许配置
|
// 不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面。scancode_time为系统保留参数,不允许配置
|
||||||
return `pages/index/index`;
|
// 页面分享时参数使用 ? 拼接
|
||||||
|
return typeof query === 'undefined' ? `pages/index/index` : `pages/index/index?${query}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 构造分享链接
|
// 构造分享链接
|
||||||
@@ -123,55 +122,58 @@ const decryptSpm = (spm) => {
|
|||||||
let query;
|
let query;
|
||||||
shareParams.shareId = shareParamsArray[0];
|
shareParams.shareId = shareParamsArray[0];
|
||||||
switch (shareParamsArray[1]) {
|
switch (shareParamsArray[1]) {
|
||||||
case '1':
|
case SharePageEnum.HOME.value:
|
||||||
// 默认首页不跳转
|
// 默认首页不跳转
|
||||||
shareParams.page = '/pages/index/index';
|
shareParams.page = SharePageEnum.HOME.page;
|
||||||
break;
|
break;
|
||||||
case '2':
|
case SharePageEnum.GOODS.value:
|
||||||
// 普通商品
|
// 普通商品
|
||||||
shareParams.page = '/pages/goods/index';
|
shareParams.page = SharePageEnum.GOODS.page;
|
||||||
shareParams.query = {
|
shareParams.query = {
|
||||||
id: shareParamsArray[2],
|
id: shareParamsArray[2], // 设置活动编号
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case '3':
|
case SharePageEnum.GROUPON.value:
|
||||||
// 拼团商品
|
// 拼团商品
|
||||||
shareParams.page = '/pages/goods/groupon';
|
shareParams.page = SharePageEnum.GROUPON.page;
|
||||||
query = shareParamsArray[2].split(',');
|
|
||||||
shareParams.query = {
|
shareParams.query = {
|
||||||
id: query[0],
|
id: shareParamsArray[2], // 设置活动编号
|
||||||
activity_id: query[1],
|
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case '4':
|
case SharePageEnum.SECKILL.value:
|
||||||
// 秒杀商品
|
// 秒杀商品
|
||||||
shareParams.page = '/pages/goods/seckill';
|
shareParams.page = SharePageEnum.SECKILL.page;
|
||||||
query = shareParamsArray[2].split(',');
|
|
||||||
shareParams.query = {
|
shareParams.query = {
|
||||||
id: query[1],
|
id: shareParamsArray[2], // 设置活动编号
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case '5':
|
case SharePageEnum.GROUPON_DETAIL.value:
|
||||||
// 参与拼团
|
// 参与拼团
|
||||||
shareParams.page = '/pages/activity/groupon/detail';
|
shareParams.page = SharePageEnum.GROUPON_DETAIL.page;
|
||||||
shareParams.query = {
|
shareParams.query = {
|
||||||
id: shareParamsArray[2],
|
id: shareParamsArray[2], // 设置活动编号
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case SharePageEnum.POINT.value:
|
||||||
|
// 积分商品
|
||||||
|
shareParams.page = SharePageEnum.POINT.page;
|
||||||
|
shareParams.query = {
|
||||||
|
id: shareParamsArray[2], // 设置活动编号
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
shareParams.platform = platformMap[shareParamsArray[3] - 1];
|
shareParams.platform = platformMap[shareParamsArray[3] - 1];
|
||||||
shareParams.from = fromMap[shareParamsArray[4] - 1];
|
shareParams.from = fromMap[shareParamsArray[4] - 1];
|
||||||
if (shareParams.shareId !== 0) {
|
if (shareParams.shareId !== 0) {
|
||||||
|
// 记录分享者编号
|
||||||
|
uni.setStorageSync('shareId', shareParams.shareId);
|
||||||
// 已登录 绑定推广员
|
// 已登录 绑定推广员
|
||||||
if (user.isLogin) {
|
if (!!user.isLogin) {
|
||||||
bindBrokerageUser(shareParams.shareId);
|
bindBrokerageUser(shareParams.shareId);
|
||||||
} else {
|
|
||||||
// 记录分享者编号
|
|
||||||
uni.setStorageSync('shareId', shareParams.shareId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shareParams.page !== '/pages/index/index') {
|
if (shareParams.page !== SharePageEnum.HOME.page) {
|
||||||
$router.go(shareParams.page, shareParams.query);
|
$router.go(shareParams.page, shareParams.query);
|
||||||
}
|
}
|
||||||
return shareParams;
|
return shareParams;
|
||||||
@@ -184,8 +186,12 @@ const bindBrokerageUser = async (val = undefined) => {
|
|||||||
if (!shareId) {
|
if (!shareId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await BrokerageApi.bindBrokerageUser({ bindUserId: shareId });
|
// 绑定成功返回 true,失败返回 false
|
||||||
uni.removeStorageSync('shareId');
|
const { data } = await BrokerageApi.bindBrokerageUser({ bindUserId: shareId });
|
||||||
|
// 绑定成功后清除缓存
|
||||||
|
if (data) {
|
||||||
|
uni.removeStorageSync('shareId');
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-10
@@ -80,13 +80,13 @@ http.interceptors.request.use(
|
|||||||
if (config.custom.showLoading) {
|
if (config.custom.showLoading) {
|
||||||
LoadingInstance.count++;
|
LoadingInstance.count++;
|
||||||
LoadingInstance.count === 1 &&
|
LoadingInstance.count === 1 &&
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
title: config.custom.loadingMsg,
|
title: config.custom.loadingMsg,
|
||||||
mask: true,
|
mask: true,
|
||||||
fail: () => {
|
fail: () => {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 增加 token 令牌、terminal 终端、tenant 租户的请求头
|
// 增加 token 令牌、terminal 终端、tenant 租户的请求头
|
||||||
@@ -124,9 +124,10 @@ http.interceptors.response.use(
|
|||||||
if (response.data.code === 401) {
|
if (response.data.code === 401) {
|
||||||
return refreshToken(response.config);
|
return refreshToken(response.config);
|
||||||
}
|
}
|
||||||
|
// 特殊:处理分销用户绑定失败的提示
|
||||||
// 错误提示
|
if ((response.data.code + '').includes('1011007')) {
|
||||||
if (response.config.custom.showError) {
|
console.error(`分销用户绑定失败,原因:${response.data.msg}`);
|
||||||
|
} else if (response.config.custom.showError) { // 错误提示
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: response.data.msg || '服务器开小差啦,请稍后再试~',
|
title: response.data.msg || '服务器开小差啦,请稍后再试~',
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
|
|||||||
+30
-29
@@ -1,39 +1,40 @@
|
|||||||
@import './mixins';
|
@import './mixins';
|
||||||
|
|
||||||
//颜色 ,渐变背景60%
|
//颜色 ,渐变背景60%
|
||||||
$yellow: #ffc300; //ss-黄
|
$red: #d10019; // 中国红
|
||||||
$orange: #ff6000; //ss-橘
|
$orange: #f37b1d; // 桔橙
|
||||||
$red: #ff3000; //ss-红
|
$gold: #fbbd08; // 明黄
|
||||||
$pink: #e03997;
|
$green: #8dc63f; // 橄榄绿
|
||||||
$mauve: #b745cb;
|
$cyan: #1cbbb4; // 天青
|
||||||
$purple: #652abf; //rgba(101, 42, 191, 1); // ss-紫
|
$blue: #0081ff; // 海蓝
|
||||||
$blue: #0081ff;
|
$purple: #6739b6; // 姹紫
|
||||||
$cyan: #37c0fe;
|
$brightRed: #e54d42; // 嫣红
|
||||||
$green: #2aae67; //ss-绿
|
$forestGreen: #39b54a; // 森绿
|
||||||
$olive: #8dc63f;
|
$mauve: #9c26b0; // 木槿
|
||||||
$grey: #8799a3;
|
$pink: #e03997; // 桃粉
|
||||||
$brown: #a5673f;
|
$brown: #a5673f; // 棕褐
|
||||||
$black: #484848; //ss-黑
|
$grey: #8799a3; // 玄灰
|
||||||
$golden: #e9b461; //ss-金
|
$gray: #aaaaaa; // 草灰
|
||||||
|
$black: #333333; // 墨黑
|
||||||
|
|
||||||
$colors: ();
|
$colors: ();
|
||||||
$colors: map-merge(
|
$colors: map-merge(
|
||||||
(
|
(
|
||||||
'yellow': $yellow,
|
'red':$red,
|
||||||
'orange': $orange,
|
'orange':$orange,
|
||||||
'red': $red,
|
'gold':$gold,
|
||||||
'pink': $pink,
|
'green':$green,
|
||||||
'mauve': $mauve,
|
'cyan':$cyan,
|
||||||
'purple': $purple,
|
'blue':$blue,
|
||||||
'violet': $purple,
|
'purple':$purple,
|
||||||
'blue': $blue,
|
'brightRed':$brightRed,
|
||||||
'cyan': $cyan,
|
'forestGreen':$forestGreen,
|
||||||
'green': $green,
|
'mauve':$mauve,
|
||||||
'olive': $olive,
|
'pink':$pink,
|
||||||
'grey': $grey,
|
'brown':$brown,
|
||||||
'brown': $brown,
|
'grey':$grey,
|
||||||
'black': $black,
|
'gray':$gray,
|
||||||
'golden': $golden,
|
'black':$black,
|
||||||
),
|
),
|
||||||
$colors
|
$colors
|
||||||
);
|
);
|
||||||
|
|||||||
+15
-2
@@ -62,7 +62,7 @@ const app = defineStore({
|
|||||||
this.info = {
|
this.info = {
|
||||||
name: '芋道商城',
|
name: '芋道商城',
|
||||||
logo: 'https://static.iocoder.cn/ruoyi-vue-pro-logo.png',
|
logo: 'https://static.iocoder.cn/ruoyi-vue-pro-logo.png',
|
||||||
version: '2.3.0',
|
version: '2.4.0',
|
||||||
copyright: '全部开源,个人与企业可 100% 免费使用',
|
copyright: '全部开源,个人与企业可 100% 免费使用',
|
||||||
copytime: 'Copyright© 2018-2024',
|
copytime: 'Copyright© 2018-2024',
|
||||||
|
|
||||||
@@ -71,13 +71,18 @@ const app = defineStore({
|
|||||||
};
|
};
|
||||||
this.platform = {
|
this.platform = {
|
||||||
share: {
|
share: {
|
||||||
methods: ['poster', 'link'],
|
methods: ['forward', 'poster', 'link'],
|
||||||
linkAddress: 'http://127.0.0.1:3000', // TODO 芋艿:可以考虑改到 .env 那
|
linkAddress: 'http://127.0.0.1:3000', // TODO 芋艿:可以考虑改到 .env 那
|
||||||
posterInfo: {
|
posterInfo: {
|
||||||
user_bg: '/static/img/shop/config/user-poster-bg.png',
|
user_bg: '/static/img/shop/config/user-poster-bg.png',
|
||||||
goods_bg: '/static/img/shop/config/goods-poster-bg.png',
|
goods_bg: '/static/img/shop/config/goods-poster-bg.png',
|
||||||
groupon_bg: '/static/img/shop/config/groupon-poster-bg.png',
|
groupon_bg: '/static/img/shop/config/groupon-poster-bg.png',
|
||||||
},
|
},
|
||||||
|
forwardInfo: {
|
||||||
|
title: '',
|
||||||
|
image: '',
|
||||||
|
desc: '',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
bind_mobile: 0,
|
bind_mobile: 0,
|
||||||
};
|
};
|
||||||
@@ -123,6 +128,14 @@ const adaptTemplate = async (appTemplate, templateId) => {
|
|||||||
const tabBar = diyTemplate?.property?.tabBar;
|
const tabBar = diyTemplate?.property?.tabBar;
|
||||||
if (tabBar) {
|
if (tabBar) {
|
||||||
appTemplate.basic.tabbar = tabBar;
|
appTemplate.basic.tabbar = tabBar;
|
||||||
|
// TODO 商城装修没有对 tabBar 进行角标配置,测试角标需打开以下注释
|
||||||
|
// appTemplate.basic.tabbar.items.forEach((tabBar) => {
|
||||||
|
// tabBar.dot = false
|
||||||
|
// tabBar.badge = 100
|
||||||
|
// })
|
||||||
|
// appTemplate.basic.tabbar.badgeStyle = {
|
||||||
|
// backgroundColor: '#882222',
|
||||||
|
// }
|
||||||
if (tabBar?.theme) {
|
if (tabBar?.theme) {
|
||||||
appTemplate.basic.theme = tabBar?.theme;
|
appTemplate.basic.theme = tabBar?.theme;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,31 +6,31 @@
|
|||||||
</view>
|
</view>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view class="u-tabbar-item__icon">
|
<view class="u-tabbar-item__icon">
|
||||||
<image
|
<uni-badge
|
||||||
v-if="icon"
|
absolute="rightTop"
|
||||||
:name="icon"
|
size="small"
|
||||||
:color="isActive ? parentData.activeColor : parentData.color"
|
:text="badge || (dot ? 1 : null)"
|
||||||
:size="20"
|
:customStyle="badgeStyle"
|
||||||
></image>
|
:isDot="dot"
|
||||||
<block v-else>
|
>
|
||||||
<slot v-if="isActive" name="active-icon" />
|
<image
|
||||||
<slot v-else name="inactive-icon" />
|
v-if="icon"
|
||||||
</block>
|
:name="icon"
|
||||||
<!-- <u-badge
|
:color="isActive ? parentData.activeColor : parentData.inactiveColor"
|
||||||
absolute
|
:size="20"
|
||||||
:offset="[0, dot ? '34rpx' : badge > 9 ? '14rpx' : '20rpx']"
|
></image>
|
||||||
:customStyle="badgeStyle"
|
<block v-else>
|
||||||
:isDot="dot"
|
<slot v-if="isActive" name="active-icon" />
|
||||||
:value="badge || (dot ? 1 : null)"
|
<slot v-else name="inactive-icon" />
|
||||||
:show="dot || badge > 0"
|
</block>
|
||||||
></u-badge> -->
|
</uni-badge>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<slot name="text">
|
<slot name="text">
|
||||||
<text
|
<text
|
||||||
class="u-tabbar-item__text"
|
class="u-tabbar-item__text"
|
||||||
:style="{
|
:style="{
|
||||||
color: isActive ? parentData.activeColor : parentData.color,
|
color: isActive ? parentData.activeColor : parentData.inactiveColor,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
{{ text }}
|
{{ text }}
|
||||||
@@ -44,16 +44,17 @@
|
|||||||
/**
|
/**
|
||||||
* TabbarItem 底部导航栏子组件
|
* TabbarItem 底部导航栏子组件
|
||||||
* @description 此组件提供了自定义tabbar的能力。
|
* @description 此组件提供了自定义tabbar的能力。
|
||||||
* @property {String | Number} name item标签的名称,作为与u-tabbar的value参数匹配的标识符
|
* @property {String | Number} name item标签的名称,作为与u-tabbar的value参数匹配的标识符
|
||||||
* @property {String} icon uView内置图标或者绝对路径的图片
|
* @property {String} icon uView内置图标或者绝对路径的图片
|
||||||
* @property {String | Number} badge 右上角的角标提示信息
|
* @property {String | Number} badge 右上角的角标提示信息
|
||||||
* @property {Boolean} dot 是否显示圆点,将会覆盖badge参数(默认 false )
|
* @property {Boolean} dot 是否显示圆点,将会覆盖badge参数(默认 false )
|
||||||
* @property {String} text 描述文本
|
* @property {String} text 描述文本
|
||||||
* @property {Object | String} badgeStyle 控制徽标的位置,对象或者字符串形式,可以设置top和right属性(默认 'top: 6px;right:2px;' )
|
* @property {Object | String} badgeStyle 控制徽标的位置,对象或者字符串形式,可以设置top和right属性(默认 'top: 6px;right:2px;' )
|
||||||
* @property {Object} customStyle 定义需要用到的外部样式
|
* @property {Object} customStyle 定义需要用到的外部样式
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
import { deepMerge, addStyle, sleep, $parent } from '@/sheep/helper';
|
import { $parent, addStyle } from '@/sheep/helper';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'su-tabbar-item',
|
name: 'su-tabbar-item',
|
||||||
props: {
|
props: {
|
||||||
@@ -102,8 +103,8 @@
|
|||||||
},
|
},
|
||||||
// 控制徽标的位置,对象或者字符串形式,可以设置top和right属性
|
// 控制徽标的位置,对象或者字符串形式,可以设置top和right属性
|
||||||
badgeStyle: {
|
badgeStyle: {
|
||||||
type: [Object, String],
|
type: Object,
|
||||||
default: '',
|
default: ()=>{},
|
||||||
},
|
},
|
||||||
isCenter: {
|
isCenter: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@@ -120,8 +121,8 @@
|
|||||||
addStyle,
|
addStyle,
|
||||||
parentData: {
|
parentData: {
|
||||||
value: null,
|
value: null,
|
||||||
activeColor: '',
|
activeColor: '', // 选中标签的颜色
|
||||||
color: '',
|
inactiveColor: '', // 未选中标签的颜色
|
||||||
},
|
},
|
||||||
parent: {},
|
parent: {},
|
||||||
};
|
};
|
||||||
@@ -202,6 +203,7 @@
|
|||||||
height: 25px;
|
height: 25px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.u-tabbar-item {
|
.u-tabbar-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -230,5 +232,6 @@
|
|||||||
:host {
|
:host {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #endif */
|
/* #endif */
|
||||||
</style>
|
</style>
|
||||||
+41
-1
@@ -119,7 +119,11 @@ export const PromotionActivityTypeEnum = {
|
|||||||
name: '积分商城',
|
name: '积分商城',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
/** 配送方式枚举 */
|
||||||
|
export const DeliveryTypeEnum = {
|
||||||
|
EXPRESS: { type: 1, name: '快递发货' },
|
||||||
|
PICK_UP: { type: 2, name: '用户自提' },
|
||||||
|
};
|
||||||
export const getTimeStatusEnum = (startTime, endTime) => {
|
export const getTimeStatusEnum = (startTime, endTime) => {
|
||||||
const now = dayjs();
|
const now = dayjs();
|
||||||
if (now.isBefore(startTime)) {
|
if (now.isBefore(startTime)) {
|
||||||
@@ -130,3 +134,39 @@ export const getTimeStatusEnum = (startTime, endTime) => {
|
|||||||
return TimeStatusEnum.STARTED;
|
return TimeStatusEnum.STARTED;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* 分享页枚举
|
||||||
|
* 按需扩展
|
||||||
|
* */
|
||||||
|
export const SharePageEnum = {
|
||||||
|
HOME: {
|
||||||
|
name: '首页',
|
||||||
|
page: '/pages/index/index',
|
||||||
|
value: '1'
|
||||||
|
},
|
||||||
|
GOODS: {
|
||||||
|
name: '普通商品页',
|
||||||
|
page: '/pages/goods/index',
|
||||||
|
value: '2'
|
||||||
|
},
|
||||||
|
GROUPON: {
|
||||||
|
name: '拼团商品页',
|
||||||
|
page: '/pages/goods/groupon',
|
||||||
|
value: '3'
|
||||||
|
},
|
||||||
|
SECKILL: {
|
||||||
|
name: '秒杀商品页',
|
||||||
|
page: '/pages/goods/seckill',
|
||||||
|
value: '4'
|
||||||
|
},
|
||||||
|
GROUPON_DETAIL: {
|
||||||
|
name: '参与拼团页',
|
||||||
|
page: '/pages/activity/groupon/detail',
|
||||||
|
value: '5'
|
||||||
|
},
|
||||||
|
POINT: {
|
||||||
|
name: '积分商品页',
|
||||||
|
page: '/pages/goods/point',
|
||||||
|
value: '6'
|
||||||
|
}
|
||||||
|
}
|
||||||
+56
-36
@@ -1,4 +1,4 @@
|
|||||||
import dayjs from "dayjs";
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将一个整数转换为分数保留两位小数
|
* 将一个整数转换为分数保留两位小数
|
||||||
@@ -6,10 +6,10 @@ import dayjs from "dayjs";
|
|||||||
* @return {number} 分数
|
* @return {number} 分数
|
||||||
*/
|
*/
|
||||||
export const formatToFraction = (num) => {
|
export const formatToFraction = (num) => {
|
||||||
if (typeof num === 'undefined') return 0
|
if (typeof num === 'undefined') return 0;
|
||||||
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
|
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num;
|
||||||
return parseFloat((parsedNumber / 100).toFixed(2))
|
return parseFloat((parsedNumber / 100).toFixed(2));
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将一个数转换为 1.00 这样
|
* 将一个数转换为 1.00 这样
|
||||||
@@ -19,26 +19,26 @@ export const formatToFraction = (num) => {
|
|||||||
* @return {string} 分数
|
* @return {string} 分数
|
||||||
*/
|
*/
|
||||||
export const floatToFixed2 = (num) => {
|
export const floatToFixed2 = (num) => {
|
||||||
let str = '0.00'
|
let str = '0.00';
|
||||||
if (typeof num === 'undefined') {
|
if (typeof num === 'undefined') {
|
||||||
return str
|
return str;
|
||||||
}
|
}
|
||||||
const f = formatToFraction(num)
|
const f = formatToFraction(num);
|
||||||
const decimalPart = f.toString().split('.')[1]
|
const decimalPart = f.toString().split('.')[1];
|
||||||
const len = decimalPart ? decimalPart.length : 0
|
const len = decimalPart ? decimalPart.length : 0;
|
||||||
switch (len) {
|
switch (len) {
|
||||||
case 0:
|
case 0:
|
||||||
str = f.toString() + '.00'
|
str = f.toString() + '.00';
|
||||||
break
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
str = f.toString() + '.0'
|
str = f.toString() + '.0';
|
||||||
break
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
str = f.toString()
|
str = f.toString();
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
return str
|
return str;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将一个分数转换为整数
|
* 将一个分数转换为整数
|
||||||
@@ -47,11 +47,11 @@ export const floatToFixed2 = (num) => {
|
|||||||
* @return {number} 整数
|
* @return {number} 整数
|
||||||
*/
|
*/
|
||||||
export const convertToInteger = (num) => {
|
export const convertToInteger = (num) => {
|
||||||
if (typeof num === 'undefined') return 0
|
if (typeof num === 'undefined') return 0;
|
||||||
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
|
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num;
|
||||||
// TODO 分转元后还有小数则四舍五入
|
// TODO 分转元后还有小数则四舍五入
|
||||||
return Math.round(parsedNumber * 100)
|
return Math.round(parsedNumber * 100);
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 时间日期转换
|
* 时间日期转换
|
||||||
@@ -64,16 +64,16 @@ export const convertToInteger = (num) => {
|
|||||||
* @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
|
* @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
|
||||||
* @returns {string} 返回拼接后的时间字符串
|
* @returns {string} 返回拼接后的时间字符串
|
||||||
*/
|
*/
|
||||||
export function formatDate(date, format= 'YYYY-MM-DD HH:mm:ss') {
|
export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
|
||||||
// 日期不存在,则返回空
|
// 日期不存在,则返回空
|
||||||
if (!date) {
|
if (!date) {
|
||||||
return ''
|
return '';
|
||||||
}
|
}
|
||||||
// 日期存在,则进行格式化
|
// 日期存在,则进行格式化
|
||||||
if (format === undefined) {
|
if (format === undefined) {
|
||||||
format = 'YYYY-MM-DD HH:mm:ss'
|
format = 'YYYY-MM-DD HH:mm:ss';
|
||||||
}
|
}
|
||||||
return dayjs(date).format(format)
|
return dayjs(date).format(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,16 +85,22 @@ export function formatDate(date, format= 'YYYY-MM-DD HH:mm:ss') {
|
|||||||
* @param {*} children 孩子节点字段 默认 'children'
|
* @param {*} children 孩子节点字段 默认 'children'
|
||||||
* @param {*} rootId 根Id 默认 0
|
* @param {*} rootId 根Id 默认 0
|
||||||
*/
|
*/
|
||||||
export function handleTree(data, id = 'id', parentId = 'parentId', children = 'children', rootId = 0) {
|
export function handleTree(
|
||||||
|
data,
|
||||||
|
id = 'id',
|
||||||
|
parentId = 'parentId',
|
||||||
|
children = 'children',
|
||||||
|
rootId = 0,
|
||||||
|
) {
|
||||||
// 对源数据深度克隆
|
// 对源数据深度克隆
|
||||||
const cloneData = JSON.parse(JSON.stringify(data))
|
const cloneData = JSON.parse(JSON.stringify(data));
|
||||||
// 循环所有项
|
// 循环所有项
|
||||||
const treeData = cloneData.filter(father => {
|
const treeData = cloneData.filter((father) => {
|
||||||
let branchArr = cloneData.filter(child => {
|
let branchArr = cloneData.filter((child) => {
|
||||||
//返回每一项的子级数组
|
//返回每一项的子级数组
|
||||||
return father[id] === child[parentId]
|
return father[id] === child[parentId];
|
||||||
});
|
});
|
||||||
branchArr.length > 0 ? father.children = branchArr : '';
|
branchArr.length > 0 ? (father.children = branchArr) : '';
|
||||||
//返回第一层
|
//返回第一层
|
||||||
return father[parentId] === rootId;
|
return father[parentId] === rootId;
|
||||||
});
|
});
|
||||||
@@ -120,14 +126,28 @@ export function resetPagination(pagination) {
|
|||||||
* @param source 源对象
|
* @param source 源对象
|
||||||
*/
|
*/
|
||||||
export const copyValueToTarget = (target, source) => {
|
export const copyValueToTarget = (target, source) => {
|
||||||
const newObj = Object.assign({}, target, source)
|
const newObj = Object.assign({}, target, source);
|
||||||
// 删除多余属性
|
// 删除多余属性
|
||||||
Object.keys(newObj).forEach((key) => {
|
Object.keys(newObj).forEach((key) => {
|
||||||
// 如果不是target中的属性则删除
|
// 如果不是target中的属性则删除
|
||||||
if (Object.keys(target).indexOf(key) === -1) {
|
if (Object.keys(target).indexOf(key) === -1) {
|
||||||
delete newObj[key]
|
delete newObj[key];
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
// 更新目标对象值
|
// 更新目标对象值
|
||||||
Object.assign(target, newObj)
|
Object.assign(target, newObj);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析 JSON 字符串
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
export function jsonParse(str) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(str);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`str[${str}] 不是一个 JSON 字符串`);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -186,6 +186,9 @@
|
|||||||
可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)
|
可通过 [issue](https://github.com/jin-yufeng/mp-html/issues/new/choose) 、插件问答或发送邮件到 [mp_html@126.com](mailto:mp_html@126.com) 提问,不建议在评论区提问(不方便回复)
|
||||||
提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复
|
提问请严格按照 [issue 模板](https://github.com/jin-yufeng/mp-html/issues/new/choose) ,描述清楚使用环境、`html` 内容或可复现的 `demo` 项目以及复现方式,对于 **描述不清**、**无法复现** 或重复的问题将不予回复
|
||||||
|
|
||||||
欢迎加入 `QQ` 交流群:`699734691`
|
欢迎加入 `QQ` 交流群:
|
||||||
|
群1(已满):`699734691`
|
||||||
|
群2(已满):`778239129`
|
||||||
|
群3:`960265313`
|
||||||
|
|
||||||
查看 [问题反馈](https://jin-yufeng.gitee.io/mp-html/#/question/feedback) 了解更多
|
查看 [问题反馈](https://jin-yufeng.gitee.io/mp-html/#/question/feedback) 了解更多
|
||||||
@@ -1,3 +1,32 @@
|
|||||||
|
## v2.5.0(2024-04-22)
|
||||||
|
1. `U` `play` 事件增加返回 `src` 等信息 [详细](https://github.com/jin-yufeng/mp-html/issues/526)
|
||||||
|
2. `U` `preview-img` 属性支持设置为 `all` 开启 `base64` 图片预览 [详细](https://github.com/jin-yufeng/mp-html/issues/536)
|
||||||
|
3. `U` `editable` 插件增加简易模式(点击文字直接编辑)
|
||||||
|
4. `U` `latex` 插件支持块级公式 [详细](https://github.com/jin-yufeng/mp-html/issues/582)
|
||||||
|
5. `F` 修复了表格部分情况下背景丢失的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/587)
|
||||||
|
6. `F` 修复了部分 `svg` 无法显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/591)
|
||||||
|
7. `F` 修复了 `h5` 和 `app` 端部分情况下样式无法识别的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/518)
|
||||||
|
8. `F` 修复了 `latex` 插件部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/580)
|
||||||
|
9. `F` 修复了 `editable` 插件表格无法删除的问题
|
||||||
|
10. `F` 修复了 `editable` 插件 `vue3` `h5` 端点击图片报错的问题
|
||||||
|
11. `F` 修复了 `editable` 插件点击表格没有菜单栏的问题
|
||||||
|
## v2.4.3(2024-01-21)
|
||||||
|
1. `A` 增加 [card](https://jin-yufeng.gitee.io/mp-html/#/advanced/plugin#card) 插件 [详细](https://github.com/jin-yufeng/mp-html/pull/533) by [@whoooami](https://github.com/whoooami)
|
||||||
|
2. `F` 修复了 `svg` 中包含 `foreignobject` 可能不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/523)
|
||||||
|
3. `F` 修复了合并单元格的表格部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/561)
|
||||||
|
4. `F` 修复了 `img` 标签设置 `object-fit` 无效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/567)
|
||||||
|
5. `F` 修复了 `latex` 插件公式会换行的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/540)
|
||||||
|
6. `F` 修复了 `editable` 和 `audio` 插件共用时点击 `audio` 无法编辑的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/529) by [@whoooami](https://github.com/whoooami)
|
||||||
|
7. `F` 修复了微信小程序部分情况下图片会报错 `replace of undefined` 的问题
|
||||||
|
8. `F` 修复了快手小程序图片不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/571)
|
||||||
|
## v2.4.2(2023-05-14)
|
||||||
|
1. `A` `editable` 插件支持修改文字颜色 [详细](https://github.com/jin-yufeng/mp-html/issues/254)
|
||||||
|
2. `F` 修复了 `svg` 中有 `style` 不生效的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/505)
|
||||||
|
3. `F` 修复了使用旧版编译器可能报错 `Bad attr nodes` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/472)
|
||||||
|
4. `F` 修复了 `app` 端可能出现无法读取 `lazyLoad` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/513)
|
||||||
|
5. `F` 修复了 `editable` 插件在点击换图时未拼接 `domain` 的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/497) by [@TwoKe945](https://github.com/TwoKe945)
|
||||||
|
6. `F` 修复了 `latex` 插件部分情况下不显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/515)
|
||||||
|
7. `F` 修复了 `editable` 插件点击音视频时其他标签框不消失的问题
|
||||||
## v2.4.1(2022-12-25)
|
## v2.4.1(2022-12-25)
|
||||||
1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题
|
1. `F` 修复了没有图片时 `ready` 事件可能不触发的问题
|
||||||
2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470)
|
2. `F` 修复了加载过程中可能出现 `Root label not found` 错误的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/470)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
/**
|
/**
|
||||||
* mp-html v2.4.1
|
* mp-html v2.5.0
|
||||||
* @description 富文本组件
|
* @description 富文本组件
|
||||||
* @tutorial https://github.com/jin-yufeng/mp-html
|
* @tutorial https://github.com/jin-yufeng/mp-html
|
||||||
* @property {String} container-style 容器的样式
|
* @property {String} container-style 容器的样式
|
||||||
|
|||||||
@@ -10,13 +10,16 @@
|
|||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifndef H5 || (APP-PLUS && VUE2) -->
|
<!-- #ifndef H5 || (APP-PLUS && VUE2) -->
|
||||||
<!-- 表格中的图片,使用 rich-text 防止大小不正确 -->
|
<!-- 表格中的图片,使用 rich-text 防止大小不正确 -->
|
||||||
<rich-text v-if="n.name==='img'&&n.t" :style="'display:'+n.t" :nodes="'<img class=\'_img\' style=\''+n.attrs.style+'\' src=\''+n.attrs.src+'\'>'" :data-i="i" @tap.stop="imgTap" />
|
<rich-text v-if="n.name==='img'&&n.t" :style="'display:'+n.t" :nodes="[{attrs:{style:n.attrs.style||'',src:n.attrs.src},name:'img'}]" :data-i="i" @tap.stop="imgTap" />
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifndef H5 || APP-PLUS -->
|
<!-- #ifndef H5 || APP-PLUS || MP-KUAISHOU -->
|
||||||
<image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;height:1px;'+n.attrs.style" :src="n.attrs.src" :mode="!n.h?'widthFix':(!n.w?'heightFix':'')" :lazy-load="opts[0]" :webp="n.webp" :show-menu-by-longpress="opts[3]&&!n.attrs.ignore" :image-menu-prevent="!opts[3]||n.attrs.ignore" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" />
|
<image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;height:1px;'+n.attrs.style" :src="n.attrs.src" :mode="!n.h?'widthFix':(!n.w?'heightFix':(n.m||'scaleToFill'))" :lazy-load="opts[0]" :webp="n.webp" :show-menu-by-longpress="opts[3]&&!n.attrs.ignore" :image-menu-prevent="!opts[3]||n.attrs.ignore" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" />
|
||||||
|
<!-- #endif -->
|
||||||
|
<!-- #ifdef MP-KUAISHOU -->
|
||||||
|
<image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+n.attrs.style" :src="n.attrs.src" :lazy-load="opts[0]" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap"></image>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifdef APP-PLUS && VUE3 -->
|
<!-- #ifdef APP-PLUS && VUE3 -->
|
||||||
<image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;'+n.attrs.style" :src="n.attrs.src||(ctrl.load?n.attrs['data-src']:'')" :mode="!n.h?'widthFix':(!n.w?'heightFix':'')" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" />
|
<image v-else-if="n.name==='img'" :id="n.attrs.id" :class="'_img '+n.attrs.class" :style="(ctrl[i]===-1?'display:none;':'')+'width:'+(ctrl[i]||1)+'px;'+n.attrs.style" :src="n.attrs.src||(ctrl.load?n.attrs['data-src']:'')" :mode="!n.h?'widthFix':(!n.w?'heightFix':(n.m||''))" :data-i="i" @load="imgLoad" @error="mediaError" @tap.stop="imgTap" @longpress="imgLongTap" />
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- 文本 -->
|
<!-- 文本 -->
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
<!-- #ifdef MP-WEIXIN -->
|
||||||
@@ -67,7 +70,7 @@
|
|||||||
<rich-text v-else-if="!n.c&&!handler.isInline(n.name, n.attrs.style)" :id="n.attrs.id" :style="n.f" :user-select="opts[4]" :nodes="[n]" />
|
<rich-text v-else-if="!n.c&&!handler.isInline(n.name, n.attrs.style)" :id="n.attrs.id" :style="n.f" :user-select="opts[4]" :nodes="[n]" />
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifndef H5 || ((MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE2) -->
|
<!-- #ifndef H5 || ((MP-WEIXIN || MP-QQ || APP-PLUS || MP-360) && VUE2) -->
|
||||||
<rich-text v-else-if="!n.c" :id="n.attrs.id" :style="n.f+';display:inline'" :preview="false" :selectable="opts[4]" :user-select="opts[4]" :nodes="[n]" />
|
<rich-text v-else-if="!n.c" :id="n.attrs.id" :style="'display:inline;'+n.f" :preview="false" :selectable="opts[4]" :user-select="opts[4]" :nodes="[n]" />
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- 继续递归 -->
|
<!-- 继续递归 -->
|
||||||
<view v-else-if="n.c===2" :id="n.attrs.id" :class="'_block _'+n.name+' '+n.attrs.class" :style="n.f+';'+n.attrs.style">
|
<view v-else-if="n.c===2" :id="n.attrs.id" :class="'_block _'+n.name+' '+n.attrs.class" :style="n.f+';'+n.attrs.style">
|
||||||
@@ -184,7 +187,15 @@ export default {
|
|||||||
* @param {Event} e
|
* @param {Event} e
|
||||||
*/
|
*/
|
||||||
play (e) {
|
play (e) {
|
||||||
this.root.$emit('play')
|
const i = e.currentTarget.dataset.i
|
||||||
|
const node = this.childs[i]
|
||||||
|
this.root.$emit('play', {
|
||||||
|
source: node.name,
|
||||||
|
attrs: {
|
||||||
|
...node.attrs,
|
||||||
|
src: node.src[this.ctrl[i] || 0]
|
||||||
|
}
|
||||||
|
})
|
||||||
// #ifndef APP-PLUS
|
// #ifndef APP-PLUS
|
||||||
if (this.root.pauseVideo) {
|
if (this.root.pauseVideo) {
|
||||||
let flag = false
|
let flag = false
|
||||||
@@ -299,7 +310,7 @@ export default {
|
|||||||
* @description 检查是否所有图片加载完毕
|
* @description 检查是否所有图片加载完毕
|
||||||
*/
|
*/
|
||||||
checkReady () {
|
checkReady () {
|
||||||
if (!this.root.lazyLoad) {
|
if (this.root && !this.root.lazyLoad) {
|
||||||
this.root._unloadimgs -= 1
|
this.root._unloadimgs -= 1
|
||||||
if (!this.root._unloadimgs) {
|
if (!this.root._unloadimgs) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ const config = {
|
|||||||
viewbox: 'viewBox',
|
viewbox: 'viewBox',
|
||||||
attributename: 'attributeName',
|
attributename: 'attributeName',
|
||||||
repeatcount: 'repeatCount',
|
repeatcount: 'repeatCount',
|
||||||
repeatdur: 'repeatDur'
|
repeatdur: 'repeatDur',
|
||||||
|
foreignobject: 'foreignObject'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const tagSelector={}
|
const tagSelector={}
|
||||||
@@ -321,6 +322,7 @@ Parser.prototype.onTagName = function (name) {
|
|||||||
this.tagName = this.xml ? name : name.toLowerCase()
|
this.tagName = this.xml ? name : name.toLowerCase()
|
||||||
if (this.tagName === 'svg') {
|
if (this.tagName === 'svg') {
|
||||||
this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
|
this.xml = (this.xml || 0) + 1 // svg 标签内大小写敏感
|
||||||
|
config.ignoreTags.style = undefined // svg 标签内 style 可用
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,6 +333,12 @@ Parser.prototype.onTagName = function (name) {
|
|||||||
*/
|
*/
|
||||||
Parser.prototype.onAttrName = function (name) {
|
Parser.prototype.onAttrName = function (name) {
|
||||||
name = this.xml ? name : name.toLowerCase()
|
name = this.xml ? name : name.toLowerCase()
|
||||||
|
// #ifdef (VUE3 && (H5 || APP-PLUS)) || APP-PLUS-NVUE
|
||||||
|
if (name.includes('?') || name.includes(';')) {
|
||||||
|
this.attrName = undefined
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
if (name.substr(0, 5) === 'data-') {
|
if (name.substr(0, 5) === 'data-') {
|
||||||
if (name === 'data-src' && !this.attrs.src) {
|
if (name === 'data-src' && !this.attrs.src) {
|
||||||
// data-src 自动转为 src
|
// data-src 自动转为 src
|
||||||
@@ -457,7 +465,7 @@ Parser.prototype.onOpenTag = function (selfClose) {
|
|||||||
node.webp = 'T'
|
node.webp = 'T'
|
||||||
}
|
}
|
||||||
// data url 图片如果没有设置 original-src 默认为不可预览的小图片
|
// data url 图片如果没有设置 original-src 默认为不可预览的小图片
|
||||||
if (attrs.src.includes('data:') && !attrs['original-src']) {
|
if (attrs.src.includes('data:') && this.options.previewImg !== 'all' && !attrs['original-src']) {
|
||||||
attrs.ignore = 'T'
|
attrs.ignore = 'T'
|
||||||
}
|
}
|
||||||
if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {
|
if (!attrs.ignore || node.webp || attrs.src.includes('cloud://')) {
|
||||||
@@ -551,6 +559,13 @@ Parser.prototype.onOpenTag = function (selfClose) {
|
|||||||
if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {
|
if (!isNaN(parseInt(styleObj.height)) && (!styleObj.height.includes('%') || (parent && (parent.attrs.style || '').includes('height')))) {
|
||||||
node.h = 'T'
|
node.h = 'T'
|
||||||
}
|
}
|
||||||
|
if (node.w && node.h && styleObj['object-fit']) {
|
||||||
|
if (styleObj['object-fit'] === 'contain') {
|
||||||
|
node.m = 'aspectFit'
|
||||||
|
} else if (styleObj['object-fit'] === 'cover') {
|
||||||
|
node.m = 'aspectFill'
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (node.name === 'svg') {
|
} else if (node.name === 'svg') {
|
||||||
siblings.push(node)
|
siblings.push(node)
|
||||||
this.stack.push(node)
|
this.stack.push(node)
|
||||||
@@ -677,11 +692,19 @@ Parser.prototype.popNode = function () {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const name = config.svgDict[node.name] || node.name
|
const name = config.svgDict[node.name] || node.name
|
||||||
|
if (name === 'foreignObject') {
|
||||||
|
for (const child of (node.children || [])) {
|
||||||
|
if (child.attrs && !child.attrs.xmlns) {
|
||||||
|
child.attrs.xmlns = 'http://www.w3.org/1999/xhtml'
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
src += '<' + name
|
src += '<' + name
|
||||||
for (const item in node.attrs) {
|
for (const item in node.attrs) {
|
||||||
const val = node.attrs[item]
|
const val = node.attrs[item]
|
||||||
if (val) {
|
if (val) {
|
||||||
src += ` ${config.svgDict[item] || item}="${val}"`
|
src += ` ${config.svgDict[item] || item}="${val.replace(/"/g, '')}"`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!node.children) {
|
if (!node.children) {
|
||||||
@@ -703,6 +726,7 @@ Parser.prototype.popNode = function () {
|
|||||||
node.children = undefined
|
node.children = undefined
|
||||||
// #endif
|
// #endif
|
||||||
this.xml = false
|
this.xml = false
|
||||||
|
config.ignoreTags.style = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -839,6 +863,10 @@ Parser.prototype.popNode = function () {
|
|||||||
if (node.flag && node.c) {
|
if (node.flag && node.c) {
|
||||||
// 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
|
// 有 colspan 或 rowspan 且含有链接的表格通过 grid 布局实现
|
||||||
styleObj.display = 'grid'
|
styleObj.display = 'grid'
|
||||||
|
if (styleObj['border-collapse'] === 'collapse') {
|
||||||
|
styleObj['border-collapse'] = undefined
|
||||||
|
spacing = 0
|
||||||
|
}
|
||||||
if (spacing) {
|
if (spacing) {
|
||||||
styleObj['grid-gap'] = spacing + 'px'
|
styleObj['grid-gap'] = spacing + 'px'
|
||||||
styleObj.padding = spacing + 'px'
|
styleObj.padding = spacing + 'px'
|
||||||
@@ -856,6 +884,23 @@ Parser.prototype.popNode = function () {
|
|||||||
for (let i = 0; i < nodes.length; i++) {
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
if (nodes[i].name === 'tr') {
|
if (nodes[i].name === 'tr') {
|
||||||
trList.push(nodes[i])
|
trList.push(nodes[i])
|
||||||
|
} else if (nodes[i].name === 'colgroup') {
|
||||||
|
let colI = 1
|
||||||
|
for (const col of (nodes[i].children || [])) {
|
||||||
|
if (col.name === 'col') {
|
||||||
|
const style = col.attrs.style || ''
|
||||||
|
const start = style.indexOf('width') ? style.indexOf(';width') : 0
|
||||||
|
// 提取出宽度
|
||||||
|
if (start !== -1) {
|
||||||
|
let end = style.indexOf(';', start + 6)
|
||||||
|
if (end === -1) {
|
||||||
|
end = style.length
|
||||||
|
}
|
||||||
|
width[colI] = style.substring(start ? start + 7 : 6, end)
|
||||||
|
}
|
||||||
|
colI += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
traversal(nodes[i].children || [])
|
traversal(nodes[i].children || [])
|
||||||
}
|
}
|
||||||
@@ -982,11 +1027,26 @@ Parser.prototype.popNode = function () {
|
|||||||
node.children = [table]
|
node.children = [table]
|
||||||
attrs = table.attrs
|
attrs = table.attrs
|
||||||
}
|
}
|
||||||
|
} else if ((node.name === 'tbody' || node.name === 'tr') && node.flag && node.c) {
|
||||||
|
node.flag = undefined;
|
||||||
|
(function traversal (nodes) {
|
||||||
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
|
if (nodes[i].name === 'td') {
|
||||||
|
// 颜色样式设置给单元格避免丢失
|
||||||
|
for (const style of ['color', 'background', 'background-color']) {
|
||||||
|
if (styleObj[style]) {
|
||||||
|
nodes[i].attrs.style = style + ':' + styleObj[style] + ';' + (nodes[i].attrs.style || '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
traversal(nodes[i].children || [])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(children)
|
||||||
} else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {
|
} else if ((node.name === 'td' || node.name === 'th') && (attrs.colspan || attrs.rowspan)) {
|
||||||
for (let i = this.stack.length; i--;) {
|
for (let i = this.stack.length; i--;) {
|
||||||
if (this.stack[i].name === 'table') {
|
if (this.stack[i].name === 'table' || this.stack[i].name === 'tbody' || this.stack[i].name === 'tr') {
|
||||||
this.stack[i].flag = 1 // 指示含有合并单元格
|
this.stack[i].flag = 1 // 指示含有合并单元格
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (node.name === 'ruby') {
|
} else if (node.name === 'ruby') {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "mp-html",
|
"id": "mp-html",
|
||||||
"displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】",
|
"displayName": "mp-html 富文本组件【全端支持,支持编辑、latex等扩展】",
|
||||||
"version": "v2.4.1",
|
"version": "v2.5.0",
|
||||||
"description": "一个强大的富文本组件,高效轻量,功能丰富",
|
"description": "一个强大的富文本组件,高效轻量,功能丰富",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"富文本",
|
"富文本",
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.2.2(2023-01-28)
|
||||||
|
- 修复 运行/打包 控制台警告问题
|
||||||
|
## 1.2.1(2022-09-05)
|
||||||
|
- 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473)
|
||||||
## 1.2.0(2021-11-19)
|
## 1.2.0(2021-11-19)
|
||||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge)
|
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="uni-badge--x">
|
<view class="uni-badge--x">
|
||||||
<slot />
|
<slot />
|
||||||
<text v-if="text" :class="classNames" :style="[badgeWidth, positionStyle, customStyle, dotStyle]"
|
<text v-if="text" :class="classNames" :style="[positionStyle, customStyle, dotStyle]"
|
||||||
class="uni-badge" @click="onClick()">{{displayValue}}</text>
|
class="uni-badge" @click="onClick()">{{displayValue}}</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -130,16 +130,13 @@
|
|||||||
const match = whiteList[this.absolute]
|
const match = whiteList[this.absolute]
|
||||||
return match ? match : whiteList['rightTop']
|
return match ? match : whiteList['rightTop']
|
||||||
},
|
},
|
||||||
badgeWidth() {
|
|
||||||
return {
|
|
||||||
width: `${this.width}px`
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dotStyle() {
|
dotStyle() {
|
||||||
if (!this.isDot) return {}
|
if (!this.isDot) return {}
|
||||||
return {
|
return {
|
||||||
width: '10px',
|
width: '10px',
|
||||||
|
minWidth: '0',
|
||||||
height: '10px',
|
height: '10px',
|
||||||
|
padding: '0',
|
||||||
borderRadius: '10px'
|
borderRadius: '10px'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -160,7 +157,7 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" >
|
||||||
$uni-primary: #2979ff !default;
|
$uni-primary: #2979ff !default;
|
||||||
$uni-success: #4cd964 !default;
|
$uni-success: #4cd964 !default;
|
||||||
$uni-warning: #f0ad4e !default;
|
$uni-warning: #f0ad4e !default;
|
||||||
@@ -195,10 +192,13 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
font-feature-settings: "tnum";
|
||||||
|
min-width: 20px;
|
||||||
/* #endif */
|
/* #endif */
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
|
padding: 0 4px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-radius: 100px;
|
border-radius: 100px;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "uni-badge",
|
"id": "uni-badge",
|
||||||
"displayName": "uni-badge 数字角标",
|
"displayName": "uni-badge 数字角标",
|
||||||
"version": "1.2.0",
|
"version": "1.2.2",
|
||||||
"description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。",
|
"description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"",
|
"",
|
||||||
@@ -18,11 +18,7 @@
|
|||||||
"directories": {
|
"directories": {
|
||||||
"example": "../../temps/example_temps"
|
"example": "../../temps/example_temps"
|
||||||
},
|
},
|
||||||
"dcloudext": {
|
"dcloudext": {
|
||||||
"category": [
|
|
||||||
"前端组件",
|
|
||||||
"通用组件"
|
|
||||||
],
|
|
||||||
"sale": {
|
"sale": {
|
||||||
"regular": {
|
"regular": {
|
||||||
"price": "0.00"
|
"price": "0.00"
|
||||||
@@ -39,10 +35,11 @@
|
|||||||
"data": "无",
|
"data": "无",
|
||||||
"permissions": "无"
|
"permissions": "无"
|
||||||
},
|
},
|
||||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
|
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
|
||||||
|
"type": "component-vue"
|
||||||
},
|
},
|
||||||
"uni_modules": {
|
"uni_modules": {
|
||||||
"dependencies": [],
|
"dependencies": ["uni-scss"],
|
||||||
"encrypt": [],
|
"encrypt": [],
|
||||||
"platforms": {
|
"platforms": {
|
||||||
"cloud": {
|
"cloud": {
|
||||||
|
|||||||
Reference in new issue
Block a user