【fix】优化代码

This commit is contained in:
黄少君
2024-02-22 18:37:23 +08:00
parent 17c043348a
commit f8fac0a5bc
246 changed files with 973 additions and 406 deletions

16
App.vue
View File

@ -1,15 +1,15 @@
<script setup>
import { createBuryPoint } from '@/api/global'
import cookie from "@/utils/cookie";
import { onLaunch } from "@dcloudio/uni-app";
import { useMainStore } from "@/store/store";
import { onLaunch, onShow } from "@dcloudio/uni-app";
import { useMainStore } from "@/store/modules/useMainStore";
const mainStore = useMainStore();
onLaunch( () => {
onLaunch(() => {
const tokenObj = cookie.get('accessToken')
let userInfo = ''
if (tokenObj && !mainStore.user) {
userInfo = mainStore.getUserInfo()
userInfo = mainStore.getUserInfo()
}
// 埋点
createBuryPoint({
@ -17,11 +17,14 @@ onLaunch( () => {
})
})
onShow(() => {
mainStore.doGetIntegralName()
})
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-plus/index.scss";
@import '@/uni_modules/uv-ui-tools/index.scss';
@import "style/style.scss";
page {
@ -29,7 +32,8 @@ page {
position: relative;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
&::after{
&::after {
content: '';
width: 100%;
height: env(safe-area-inset-bottom);

View File

@ -47,3 +47,9 @@ export const updateWithDrawMethod = async (data) => requestUtil.post('/app/distr
* @return {Promise<*>}
*/
export const withDrawNow = async (data) => requestUtil.post('/app/distributor/wages/withdraw', data)
/**
* 分享获得积分
* @return {Promise<*>}
*/
export const shareToAddIntegral = async () => requestUtil.get('/member/user-bill/shareGoods')

View File

@ -61,3 +61,9 @@ export const getMemberTaskList = async () => requestUtil.get('/member/user-level
* @return data.createTime 创建时间
*/
export const getMemberEquityList = async (params) => requestUtil.get('/member/user-level/equity', params)
/**
* 获取积分名称
* @return {Promise<*>}
*/
export const getIntegralName = async () => requestUtil.get('/system/dict-data/get-value?dictType=integral_config&label=integral_name')

View File

@ -31,9 +31,9 @@ const {goBack} = useRouter()
*
*/
const props = defineProps({
scrollTop:{
type:Number,
default:()=>0
scrollTop: {
type: Number,
default: () => 0
},
systemBarAreaBg: {
type: String,
@ -57,7 +57,7 @@ const props = defineProps({
},
returnSize: {
type: Number,
default: () => 22
default: () => 16
},
textShadow: {
type: [Boolean, String],
@ -82,6 +82,10 @@ const props = defineProps({
leftWidth: {
type: Number,
default: () => 0
},
circleBack: {
type: Boolean,
default: false
}
})
@ -98,7 +102,8 @@ const {
propUp,
showRight,
leftWidth,
scrollTop
scrollTop,
circleBack
} = toRefs(props)
const emits = defineEmits(['getSystemInfo', 'animation'])
@ -118,6 +123,7 @@ const heightInfo = ref({
function getSystemInfo() {
const res = uni.getSystemInfoSync();
const heightObj = unref(heightInfo)
console.log(heightObj)
heightObj.safeAreaInsets = res.safeAreaInsets
heightObj.statusBarHeight = res.statusBarHeight
heightObj.screenWidth = res.screenWidth || res.windowWidth
@ -141,6 +147,7 @@ function getMenuInfo() {
const menuButtonBoundingClientRect = uni.getMenuButtonBoundingClientRect();
if (menuButtonBoundingClientRect) {
menuInfo.value = {...menuButtonBoundingClientRect}
console.log(menuInfo.value)
}
}
@ -155,7 +162,7 @@ const scssVarStyle = computed(() => {
const systemBarAreaStyle = computed(() => {
return {
width: '100%',
height: `${ unref(heightInfo).statusBarHeight * 2 }rpx`,
height: `${ unref(heightInfo).statusBarHeight }px`,
background: unref(systemBarAreaBg)
}
})
@ -164,7 +171,12 @@ const systemBarAreaStyle = computed(() => {
const headerAreaStyle = computed(() => {
// 计算margin top
// margin-top (导航条高度 - 胶囊高度) / 2 永远确保胶囊在header中央
const marginTop = unref(menuInfo).height > 0 ? `-${((HEADER_HEIGHT - unref(menuInfo).height))/2}px` : 0
let marginTop = 0
if (unref(menuInfo).height > 0) {
// buttonMarginTopDiff 此处 胶囊和statusBar是由一个距离的
const buttonMarginTopDiff = unref(menuInfo).top - unref(heightInfo).statusBarHeight
marginTop = `${ (-1 * ((HEADER_HEIGHT - unref(menuInfo).height) / 2)) + buttonMarginTopDiff }px`
}
return {
width: '100%',
background: unref(headerAreaBg),
@ -173,6 +185,12 @@ const headerAreaStyle = computed(() => {
}
})
const circleBackStyle = computed(() => {
return {
height: menuInfo.value.height > 0 ? menuInfo.value.height + 'px' : '32px'
}
})
// 文本样式
const textShadowStyle = computed(() => {
return {
@ -193,6 +211,15 @@ const titleStyle = computed(() => {
}
})
const rightStyle = computed(() => {
if (menuInfo.value.left > 0) {
return {
right: `${ (heightInfo.value.screenWidth - menuInfo.value.right) + menuInfo.value.width + 5 }px`
}
}
return {}
})
// 滚动后背景样式
const scrollMaskStyle = computed(() => {
return {
@ -203,7 +230,7 @@ const scrollMaskStyle = computed(() => {
// 总高度
const containerHeight = computed(() => {
const marginTop = unref(menuInfo).height > 0 ? `${((HEADER_HEIGHT - unref(menuInfo).height))/2}` : 0
const marginTop = unref(menuInfo).height > 0 ? `${ ((HEADER_HEIGHT - unref(menuInfo).height)) / 2 }` : 0
return (unref(heightInfo).statusBarHeight + HEADER_HEIGHT - marginTop)
})
@ -222,7 +249,7 @@ watch(scrollTop, () => {
})
defineExpose({containerHeight, heightInfo})
defineExpose({containerHeight, heightInfo, menuInfo})
onLoad(() => {
getSystemInfo()
@ -257,7 +284,19 @@ onLoad(() => {
v-if="showReturn"
>
<slot name="left">
<view
v-if="circleBack"
class="circle-back"
:style="circleBackStyle">
<uv-icon
name="arrow-left"
:color="returnColor"
:size="returnSize"
@click="goBack"
/>
</view>
<uv-icon
v-else
name="arrow-left"
:color="returnColor"
:size="returnSize"
@ -274,6 +313,7 @@ onLoad(() => {
</view>
<view
class="right"
:style="rightStyle"
v-if="showRight"
>
<slot name="right">
@ -367,4 +407,15 @@ onLoad(() => {
}
}
.circle-back {
aspect-ratio: 1/1;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.7);
border-radius: 50%;
box-shadow: 0 0 10rpx rgba(225, 225, 225, 0.48);
border: 1rpx solid rgba(225, 225, 225, 0.8);
}
</style>

View File

@ -15,7 +15,7 @@ import { doPayment, PayType } from "@/utils/paymentUtils";
import { orderInfo as orderInfoRequest } from "@/api/order";
import { useInterface } from "@/hooks/useInterface";
import { useRouter } from "@/hooks/useRouter";
import {useMainStore} from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
const {toast} = useInterface()
const {push} = useRouter()
@ -54,7 +54,7 @@ const subLoading = ref(false)
async function handleSubmit() {
try {
subLoading.value = true
await doPayment({type: payType.value, payInfo: orderInfo.value,isGroup:orderInfo.value.campaignType===1})
await doPayment({type: payType.value, payInfo: orderInfo.value, isGroup: orderInfo.value.campaignType === 1})
subLoading.value = false
emits('confirm')
close()
@ -97,10 +97,14 @@ async function handleSubmit() {
:src="pay.icon"
/>
<view class="info">
<view class="label flex flex-nowrap flex-ai__end" style="white-space: nowrap">
<view
class="label flex flex-nowrap flex-ai__end"
style="white-space: nowrap">
{{ pay.label }}
<span v-if="pay.type===PayType['1']" style="font-size: 16rpx;white-space: nowrap;">
{{mainStore.user.nowMoney}}
<span
v-if="pay.type===PayType['1']"
style="font-size: 16rpx;white-space: nowrap;">
{{ mainStore.user.nowMoney }}
</span>
</view>
<view>

View File

@ -134,7 +134,7 @@ defineExpose({
<slot name="rightOption">
<view
>
<u-icon
<uv-icon
color="#000"
name="close"
size="16"
@ -157,6 +157,7 @@ defineExpose({
.popup_inner {
padding: 20rpx 20rpx env(safe-area-inset-bottom) 20rpx;
box-sizing: border-box;
.head {
padding: 20rpx 0;
font-weight: bolder;

View File

@ -7,7 +7,7 @@
-->
<script setup>
import { ref } from "vue";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { distributionShareBg } from '@/utils/images'
import { useImage } from "@/hooks/useImage";
import { generateMiniProgramQrCode } from "@/api/global";
@ -69,7 +69,7 @@ async function save() {
</script>
<template>
<u-overlay
<uv-overlay
:show="show"
@click="close">
<view
@ -109,7 +109,7 @@ async function save() {
</view>
</view>
</view>
</u-overlay>
</uv-overlay>
</template>
<style

View File

@ -8,7 +8,7 @@
<script setup>
import { getCurrentInstance, nextTick, ref } from "vue";
import { useImage } from "@/hooks/useImage";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { useShare } from "@/hooks/useShare";
import { generateMiniProgramQrCode } from "@/api/global";
@ -270,7 +270,7 @@ async function generatePoster() {
// #ifdef MP-WEIXIN
wx.canvasToTempFilePath({
canvasId: 'goods-canvas',
canvas:canvasRef.value,//这里是重点,获取实例的时候保存为全局变量就行了
canvas: canvasRef.value,//这里是重点,获取实例的时候保存为全局变量就行了
success: async (res) => {
posterImagePath.value = res.tempFilePath;
uni.hideLoading()
@ -279,7 +279,7 @@ async function generatePoster() {
console.log(err)
uni.hideLoading()
}
},_this)
}, _this)
// #endif
}
@ -299,7 +299,7 @@ async function save() {
</script>
<template>
<u-overlay
<uv-overlay
@touchmove="(e)=>{e.preventDefault();}"
:show="show"
@click="close">
@ -332,7 +332,7 @@ async function save() {
style="width:654rpx;height: 1032rpx;margin: 20rpx auto;position: absolute;z-index:999;top: -999px;"
id="goods-canvas" />
</u-overlay>
</uv-overlay>
</template>
<style

View File

@ -8,7 +8,7 @@
<script setup>
import { getCurrentInstance, nextTick, ref } from "vue";
import { useImage } from "@/hooks/useImage";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { generateMiniProgramQrCode } from "@/api/global";
// =================================== hooks ============================================
@ -268,7 +268,7 @@ async function generatePoster() {
// #ifdef MP-WEIXIN
wx.canvasToTempFilePath({
canvasId: 'goods-canvas',
canvas:canvasRef.value,//这里是重点,获取实例的时候保存为全局变量就行了
canvas: canvasRef.value,//这里是重点,获取实例的时候保存为全局变量就行了
success: async (res) => {
posterImagePath.value = res.tempFilePath;
uni.hideLoading()
@ -277,7 +277,7 @@ async function generatePoster() {
console.log(err)
uni.hideLoading()
}
},_this)
}, _this)
// #endif
}
@ -297,7 +297,7 @@ async function save() {
</script>
<template>
<u-overlay
<uv-overlay
@touchmove="(e)=>{e.preventDefault();}"
:show="show"
@click="close">
@ -330,7 +330,7 @@ async function save() {
style="width:654rpx;height: 1032rpx;margin: 20rpx auto;position: absolute;z-index:999;top: -999px;"
id="goods-canvas" />
</u-overlay>
</uv-overlay>
</template>
<style

View File

@ -7,7 +7,7 @@
-->
<script setup>
import { ref } from "vue";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { distributionShareBg } from '@/utils/images'
import { useImage } from "@/hooks/useImage";
import { generateMiniProgramQrCode } from "@/api/global";
@ -66,7 +66,7 @@ async function save() {
</script>
<template>
<u-overlay
<uv-overlay
:show="show"
@click="close">
<view
@ -105,7 +105,7 @@ async function save() {
</view>
</view>
</view>
</u-overlay>
</uv-overlay>
</template>
<style

View File

@ -50,7 +50,7 @@ defineExpose({ executeRefresh })
<template>
<!--push({ url: '/pages/goodsList/goodsList' }-->
<view class="recommend-container">
<view class="recommend-container" v-if="!listEmpty">
<slot name="head">
<view class="title-row">
商品推荐

View File

@ -1,5 +1,5 @@
<template>
<div class="coupon-box" >
<div class="coupon-box" v-if="couponsData?.length > 0">
<div class="coupon-list coupon-flex coupon-swiper" v-if="componentContent.arrangeType == '横向滑动'">
<swiper class="swiper"
:disable-touch="couponsData.length < 3"

View File

@ -157,12 +157,14 @@ const { activityData, productList, count, jumpProductDetail, jumpDiscount } = co
line-height: 28rpx;
color: #CCCCCC;
display: inline-block;
white-space: nowrap;
}
.stock{
line-height: 1em;
display: inline-block;
font-size: 20rpx;
color: #999999;
white-space: nowrap;
}
}
}

View File

@ -55,7 +55,9 @@ export default function (componentContent, typeId, shopId) {
(res) => {
afterGetData()
activityData.value = res.data
getTime()
if(res.data){
getTime()
}
},
() => {
afterGetData()

View File

@ -1,5 +1,5 @@
<template>
<div class="group-list">
<div class="group-list" v-if="productList.length > 0">
<div class="group-warp">
<div class="header">
<div class="header-warp">
@ -8,15 +8,15 @@
</div>
<a v-show="componentContent.showMore" class="btn-all a-link" @click="jumpGroupWorks(componentContent.id)">查看更多</a>
</div>
<div v-if="productList.length > 0">
<div>
<swiper class="swiper pro-box"
:disable-touch="productList.length < 3"
:circular="false"
:indicator-dots="false"
:autoplay="productList.length > 2"
:display-multiple-items="2"
:previous-margin="swiperCurrent === productList.length - 2?'60rpx':'0rpx'"
:next-margin="swiperCurrent === productList.length - 2?'0rpx':'60rpx'"
:previous-margin="swiperCurrent === productList.length - 2 && productList.length.length > 2?'60rpx':'0rpx'"
:next-margin="swiperCurrent === productList.length - 2 && productList.length.length > 2?'0rpx':'60rpx'"
@change="swiperChange">
<swiper-item class="swiper-slide pro-item-warp" v-for="(item,index) in productList" :key="index" @click="jumpProductDetail(item)">
<div class="pro-item-inner">

View File

@ -22,7 +22,6 @@ export default function (componentContent, typeId, shopId) {
})
function getData () {
if (componentContent.value.id) {
beforeGetData()
const params = {
method: 'POST',
@ -42,9 +41,6 @@ export default function (componentContent, typeId, shopId) {
afterGetData()
}
)
} else {
productList.value = []
}
}
return {

View File

@ -1,6 +1,6 @@
<template>
<global-loading />
<div class="hom-pro-list">
<div class="hom-pro-list" v-if="productData.length > 0">
<div class="header">
<div class="header-warp">
<div class="title">商品推荐</div>
@ -115,7 +115,7 @@
<div
class="product-list-box"
v-if="productData.length>0">
v-if="!loading">
<div
class="product-list-item-warp"
v-for="(col,i) in colList"
@ -216,7 +216,7 @@ const props = defineProps({
},
});
const {typeId, componentContent} = toRefs(props);
const {productData, jumpProductDetail, jumpProList, loadNext, getPercentageNum} = productMixin(componentContent);
const {productData, jumpProductDetail, jumpProList, loadNext, getPercentageNum, loading} = productMixin(componentContent);
const swiperCurrent = ref(0)
const colList = computed(() => [

View File

@ -6,11 +6,13 @@ export default function (componentContent) {
const { sendReq, beforeGetData, afterGetData, jumpProductDetail, jumpProList } = funMixin()
const productData = ref([])
const loading = ref(true)
onMounted(() => {
getData(true)
})
function getData (isFirst) {
loading.value = true
if (componentContent.value.productData.sourceType === '1') {
if (
componentContent.value.productData.productIdList?.length > 0
@ -24,12 +26,14 @@ export default function (componentContent) {
(proRes) => {
afterGetData()
productData.value = proRes.data.list
loading.value = false
if (isFirst) {
componentContent.value.productData.imgTextData = productData.value
}
},
() => {
afterGetData()
loading.value = false
}
)
} else {
@ -45,6 +49,7 @@ export default function (componentContent) {
},
(proRes) => {
afterGetData()
loading.value = false
productData.value = proRes.data.list
if (isFirst) {
componentContent.value.productData.imgTextData = productData.value
@ -53,6 +58,7 @@ export default function (componentContent) {
},
() => {
afterGetData()
loading.value = false
}
)
} else {
@ -73,6 +79,7 @@ export default function (componentContent) {
productData,
jumpProductDetail,
jumpProList,
getPercentageNum
getPercentageNum,
loading
}
}

View File

@ -151,6 +151,7 @@ const { activityData, productList, count, jumpProductDetail, jumpSeckills } = co
color: #EE6D46;
padding-right: 10rpx;
display: inline-block;
white-space: nowrap;
}
.original-price{
font-size: 20rpx;
@ -163,6 +164,7 @@ const { activityData, productList, count, jumpProductDetail, jumpSeckills } = co
display: inline-block;
font-size: 20rpx;
color: #999999;
white-space: nowrap;
}
}
}

View File

@ -55,7 +55,9 @@ export default function (componentContent, typeId, shopId) {
(res) => {
afterGetData()
activityData.value = res.data
getTime()
if(res.data){
getTime()
}
},
() => {
afterGetData()

View File

@ -12,7 +12,7 @@
<CouponItem
@receiveCoupon="handleGetDetail(props.id)"
:coupons="item"
:type="'get'"
type="get"
/>
</view>
</template>

View File

@ -88,7 +88,6 @@
<text v-if="data.stock">仅剩{{ data.stock }}</text>
<text v-else>库存不足</text>
</view>
<view
class="buy-num"
v-if="purchase"
@ -98,6 +97,7 @@
</view>
</view>
<uv-button
class="button"
round
block
type="primary"
@ -317,6 +317,11 @@ const percentage = computed(() => {
align-items: center;
justify-content: center;
.button {
flex-shrink: 0;
white-space: nowrap;
}
&-desc {
line-height: 28rpx;
font-size: 20rpx;

View File

@ -24,16 +24,11 @@
>
<view
v-for="(item, index) in data.cartInfo"
:key="index"
class="order-evaluate"
:class="{evaluateBtn: data._status._type == 3}"
>
<view
v-if="data._status._type == 3 && item.isReply === 0"
class="order-actions-primary order-evaluate-btn"
@tap.stop="toEvaluate(item.unique,data.orderId)"
>
去评价
</view>
<Goods
row
:jump="false"
@ -75,7 +70,14 @@
<span v-if="item.orderDetailState===2"> 售后中 </span>
<span v-if="item.orderDetailState===3"> 售后完成 </span>
</view>
<view class="price-box cart-num flex flex-ai__end">
<view class="price-box cart-num flex flex-ai__center">
<view
v-if="data._status._type == 3 && item.isReply === 0"
class="order-actions-primary order-evaluate-btn"
@tap.stop="toEvaluate(item.unique,data.orderId)"
>
去评价
</view>
x{{ item.cartNum }}
</view>
</view>
@ -254,14 +256,17 @@ async function doTakeGoods() {
let option = {
uni: data.value.orderId,
}
let payInfo = JSON.parse(data.value.payInfo)
showWsReceipt(payInfo.transaction_id).then(async (res) => {
if (res === 'success') {
await orderTake(option)
emit('refresh')
toast({title: '已收货'});
}
})
try {
let payInfo = JSON.parse(data.value.payInfo)
const res = await showWsReceipt(payInfo.transaction_id)
if (res !== 'success') return
await orderTake(option)
emit('refresh')
toast({title: '已收货'});
} catch (e) {
console.error(e)
toast({title: '收货失败', icon: 'error'});
}
}

View File

@ -91,44 +91,42 @@ export function useOrder(handleOrderInfo = () => {
/**
* 微信确认收货弹窗
* @param params
* @param transactionId
* @returns {Promise<void>}
*/
const showWsReceipt = (transactionId) => {
return new Promise((resolve, reject) => {
// // #ifdef MP-WEIXIN
// //拉起确认收货组件
// if (wx.openBusinessView) {
// wx.openBusinessView({
// businessType: 'weappOrderConfirm',
// extraData: {
// // merchant_id: '',//用户交易商户号
// // merchant_trade_no: "",//商户订单号
// transaction_id: transactionId //用户交易
// },
// success: (e) => {
// resolve('success');
// }, fail: e => {
// resolve('success');
// }
// });
//
// } else {
// //引导用户升级微信版本
// uni.showToast({
// title: "请升级微信版本",
// duration: 3000,
// icon: "none",
// });
// }
//
//
// // #endif
// // #ifndef MP-WEIXIN
// resolve('success');
// // #endif
// #ifdef MP-WEIXIN
// 如果没有transactionId说明使用的不是微信支付直接返回成功
if (!transactionId) return resolve('success')
//拉起确认收货组件
if (wx.openBusinessView) {
wx.openBusinessView({
businessType: 'weappOrderConfirm',
extraData: {
// merchant_id: '',//用户交易商户
// merchant_trade_no: "",//商户订单号
transaction_id: transactionId //用户交易单号
},
success: (e) => {
resolve('success');
}, fail: e => {
reject(e)
}
});
} else {
//引导用户升级微信版本
uni.showToast({
title: "请升级微信版本",
duration: 3000,
icon: "none",
});
reject("请升级微信版本")
}
// #endif
// #ifndef MP-WEIXIN
resolve('success');
// #endif
})
}

17
main.js
View File

@ -4,26 +4,21 @@
* @LastEditors: Gaoxs
* @Description:
*/
import util from '@/utils'
import App from './App'
import uvUI from '@/uni_modules/uv-ui-tools'
import uviewPlus from 'uview-plus'
// #ifdef H5
// #endif
import { createPinia } from 'pinia'
import { createSSRApp } from 'vue'
import store from "@/store";
import util from '@/utils'
// #ifdef H5
import VConsole from 'vconsole'
// #endif
export function createApp() {
const app = createSSRApp(App)
app.use(util)
app.use(createPinia())
app.use(store)
app.use(uvUI);
app.use(uviewPlus)
uni.$uv.setConfig({
config: {
// 修改默认单位为rpx相当于执行 uni.$uv.config.unit = 'rpx'

View File

@ -21,7 +21,6 @@
"moment": "^2.29.4",
"pinia": "^2.1.6",
"qs": "^6.11.2",
"uview-plus": "^3.1.42",
"vant": "^4.6.2",
"vconsole": "^3.15.1",
"vue": "^3.3.7",

View File

@ -28,13 +28,6 @@
}
}
],
"easycom": {
"custom": {
"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
}
},
"subPackages": [
// 1.0分包
{

View File

@ -86,7 +86,7 @@
<script setup>
import { ref, unref } from 'vue'
import { onLoad, onReachBottom } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import Empty from '@/components/Empty/index.vue'
import { addressEditIcon, emptyAddressIcon } from "@/utils/images";
import { getAddressDel, } from '@/api/address'

View File

@ -108,7 +108,7 @@
<script setup>
import { computed, nextTick, onMounted, ref, unref, watch } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import { getAddressAddAndEdit, getAddressDel, } from '@/api/address'
import { useRouter } from "@/hooks/useRouter";
import { storeToRefs } from "pinia";
@ -303,10 +303,10 @@ function handleChooseAddress() {
/**
* 手机号验证
*/
function phoneInput(event){
function phoneInput(event) {
const pattern = /[^\d]/g;
nextTick(() => {
addressData.value.phone = event.detail.value.replace(pattern,'');
addressData.value.phone = event.detail.value.replace(pattern, '');
})
}

View File

@ -114,6 +114,7 @@ const isActivity = computed(() => {
background: $white-color;
font-weight: 500;
font-size: 32rpx;
word-break: break-all;
}
.label-row {

View File

@ -8,9 +8,9 @@
<script setup>
import { computed, nextTick, onBeforeUnmount, onMounted, ref, toRefs, unref, watch } from "vue";
import { getTimeAfterNow } from "@/utils/utils";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { useInterface } from "@/hooks/useInterface";
import {handleLoginFailure} from "@/utils";
import { handleLoginFailure } from "@/utils";
const emits = defineEmits(["activeListItemTimeOver", "doGroupBy"])
@ -54,7 +54,7 @@ const {toast} = useInterface();
const mainStore = useMainStore()
function handleGoGroupBy(order) {
if(!mainStore.user){
if (!mainStore.user) {
handleLoginFailure()
return
}

View File

@ -1,10 +1,24 @@
<template>
<view class="goodsDetail">
<view :style="computedHeightStyle"></view>
<!-- <view :style="computedHeightStyle"></view>-->
<Header
circle-back
ref="headerRef"
:propUp="false"
:scroll-top="scrollTop" />
:scroll-top="scrollTop">
<template #right>
<view
class="share-icon"
@click="doShare(detailData.storeInfo)"
:style="computedShareIconStyle">
<uv-icon
color="#000"
name="share-square"
size="16"
/>
</view>
</template>
</Header>
<view v-if="!showEmpty">
<view v-if="detailData">
<swiper
@ -43,6 +57,7 @@
</view>
</view>
<view
v-if="detailData.couponSplicing"
class="label-row"
@click="discountCouponSelect('select')">
<view class="label">
@ -261,6 +276,7 @@
</view>
<GoodEmpty v-else />
<Recommend />
<view style="height: 100rpx;"></view>
<GoodAttrSelect
v-if="detailData && storeAttr"
ref="selectAttrPanel"
@ -268,6 +284,11 @@
:sku-id="storeAttr.id"
@select="handleSelectAttr"
/>
<GoodsSharePopup
ref="goodsShare"
@share="shareConfirm" />
<GoodsPoster ref="goodsPoster" />
</view>
</template>
@ -277,7 +298,7 @@ import { productAffirmCollectIcon, productCartIcon, productCollectIcon, productC
import { computed, ref, unref } from 'vue'
import { collectSingle, getProductDetail, unCollectSingle } from '@/api/product'
import { getCartAdd, getCartCount } from '@/api/cart'
import {onLoad, onPageScroll, onShareAppMessage, onShareTimeline} from '@dcloudio/uni-app'
import { onLoad, onPageScroll, onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app'
import { useRouter } from "@/hooks/useRouter";
import { useInterface } from "@/hooks/useInterface";
import Header from "@/components/Header/index.vue";
@ -293,21 +314,45 @@ import Blank from "@/components/blank/blank.vue";
import GroupByOrderList from "@/pages/goodsDetail/components/GroupByOrderList.vue";
import { getCanGroupByList } from "@/api/goods";
import { useService } from "@/hooks/useService";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { storeToRefs } from "pinia";
import { useGlobalRequestStore } from "@/store/modules/useGlobalRequestStore";
import GoodsPoster from "@/components/Poster/Goods.vue";
import GoodsSharePopup from "@/components/Share/Goods.vue";
const {push, getParams, pushToTab, goBack} = useRouter();
const {toast} = useInterface();
const mainStore = useMainStore();
const { user } = storeToRefs(mainStore)
const globalRequestStore = useGlobalRequestStore();
const {user} = storeToRefs(mainStore)
// =========================== 分享 =================================
const {shareAppMessage, shareTimeline, goodsDetailShare} = useShare()
const {shareAppMessage, shareTimeline, goodsDetailShare, shareH5} = useShare()
onShareAppMessage(shareAppMessage)
onShareTimeline(shareTimeline)
const goodsShare = ref()
const goodsPoster = ref()
function doShare(goods) {
console.log(goods)
goodsShare.value.open('分享商品', goods)
}
async function shareConfirm(shareItem, goods) {
await globalRequestStore.doShareToAddIntegral()
goodsDetailShare(goods)
if (shareItem.value === 'photo') {
goodsPoster.value.open(goods)
return
}
if (shareItem.value === 'wechat') {
shareH5()
}
}
// =========================== hooks 生命周期 =================================
const {scrollTop} = useScroll()
onPageScroll(()=>{})
onPageScroll(() => {
})
const paramsObj = ref({})
onLoad((options) => {
const params = getParams(options)
@ -318,7 +363,7 @@ onLoad((options) => {
// 处理从分销商商品分享进入
handleJumpFromDistributionInvite(params)
handleGetDetail({productId: params.id, skuId: params.skuId ? params.skuId : ''})
if(user.value){
if (user.value) {
handleGetCartCount(params.id)
}
})
@ -356,6 +401,14 @@ const computedHeightStyle = computed(() => {
return {...style, height: `${ headerRef.value.heightInfo.statusBarHeight }px`}
})
const computedShareIconStyle = computed(() => {
const style = {width: '32px', height: '32px'}
if (!headerRef.value || headerRef.value?.menuInfo.height === 0) return style
return {
width: headerRef.value.menuInfo.height + 'px',
height: headerRef.value.menuInfo.height + 'px',
}
})
/** 选中的sku是否是活动sku */
const skuIsActivity = computed(() => {
if (!storeAttr.value) return false
@ -391,6 +444,7 @@ const handleGetDetail = async (data) => {
setDefaultAttr(detail)
await handleGetCanGroupByList()
} catch (error) {
console.dir(error)
}
};
@ -537,7 +591,7 @@ const handleSelectAttr = (attr) => {
break;
}
actionType.value = "";
selectAttrPanel.value.close();
selectAttrPanel.value?.close();
};
/**
@ -675,7 +729,7 @@ const handleDoGroupBy = (orderInfo) => {
* 去客服
*/
const goToService = async () => {
const {getServiceData,openService} = useService();
const {getServiceData, openService} = useService();
await getServiceData()
await openService()
};
@ -691,6 +745,19 @@ const goToShopCart = () => {
</script>
<style lang="scss">
.share-icon {
width: 64rpx;
height: 64rpx;
background: rgba(255, 255, 255, 0.7);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 10rpx rgba(225, 225, 225, 0.48);
border: 1rpx solid rgba(225, 225, 225, 0.8);
box-sizing: border-box;
}
.search {
padding: 0 17px;
}
@ -717,6 +784,7 @@ const goToShopCart = () => {
.goodsDetail {
width: 100%;
overflow-x: hidden;
&-storeName {
line-height: 40rpx;

View File

@ -13,7 +13,7 @@ import { wxLogin } from "@/utils/wechatUtils";
import { ref } from "vue";
import { useInterface } from "@/hooks/useInterface";
import { privacyAgreementUrl, userAgreementUrl, weixinLogin } from "@/api/auth";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { afterLogin } from "@/utils";
const {toast, loading, hideLoading} = useInterface()
@ -119,10 +119,10 @@ function toAgreement(type) {
class="button animation-button disabled"
@click="checkPrivacy"
>
<!-- <image-->
<!-- class="icon"-->
<!-- :src="wechat"-->
<!-- />-->
<!-- <image-->
<!-- class="icon"-->
<!-- :src="wechat"-->
<!-- />-->
一键登录
</view>
<button
@ -132,10 +132,10 @@ function toAgreement(type) {
@getphonenumber="getPhoneNumber"
@click="getCode"
>
<!-- <image-->
<!-- class="icon"-->
<!-- :src="wechat"-->
<!-- />-->
<!-- <image-->
<!-- class="icon"-->
<!-- :src="wechat"-->
<!-- />-->
一键登录
</button>
<!-- #endif -->

View File

@ -13,7 +13,7 @@ import { nextTick, onBeforeUnmount, ref, unref } from "vue";
import { checkPhone } from "@/utils/utils";
import { useInterface } from "@/hooks/useInterface";
import { privacyAgreementUrl, sendSmsCode as sendSmsCodeRequest, smsLogin, userAgreementUrl } from '@/api/auth'
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { afterLogin } from "@/utils";
const {getParams, goBack, push, pushToTab} = useRouter()
@ -162,10 +162,10 @@ async function doLogin() {
/**
* 手机号验证
*/
function phoneInput(event){
function phoneInput(event) {
const pattern = /[^\d]/g;
nextTick(() => {
form.value.mobile = event.detail.value.replace(pattern,'');
form.value.mobile = event.detail.value.replace(pattern, '');
})
}

View File

@ -71,7 +71,7 @@
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { smsLogin, weixinLogin } from '@/api/auth'
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import { onLoad } from '@dcloudio/uni-app'
import { useRouter } from "@/hooks/useRouter";

View File

@ -102,6 +102,7 @@ const toEvaluate = (unique, orderId, isRedirectTo) => {
.order-good {
background: #fff;
border-radius: 15rpx;
margin-bottom: 20rpx;
}
.after-sale-box {

View File

@ -91,7 +91,7 @@ onMounted(() => {
v-for="item in residuePersonNum"
:key="item"
@click="goGroupByDetail({teamworkId:orderInfoData.teamworkId})">
<u-icon name="plus" />
<uv-icon name="plus" />
</view>
</view>

View File

@ -7,7 +7,9 @@
@leftClick="goBackList"
/>
<view v-if="orderInfoData">
<view class="orderInfo-header background-warp" :class="orderInfoData.state === 0 && 'mb-100'">
<view
class="orderInfo-header background-warp"
:class="orderInfoData.state === 0 && 'mb-100'">
<view class="background">
<image
class="image"
@ -17,37 +19,43 @@
</view>
<view class="background-content page-space">
<view class="order-status-info">
<view class="order-status" :class="'order-status-'+ orderInfoData.state">
<view
class="order-status"
:class="'order-status-'+ orderInfoData.state">
<view>
<!-- {{ orderInfoStatusMsg }}-->
{{refundOrderStatus[orderInfoData.state]}}
<!-- {{ orderInfoStatusMsg }}-->
{{ refundOrderStatus[orderInfoData.state] }}
</view>
</view>
<view class="order-date" v-if="parseInt(orderInfoData.remainTime) > 0 && ![3,4].includes(orderInfoData.state)">
{{remainTimeStr}}
<view
class="order-date"
v-if="parseInt(orderInfoData.remainTime) > 0 && ![3,4].includes(orderInfoData.state)">
{{ remainTimeStr }}
</view>
</view>
<!-- <view class="address noBorder">-->
<!-- <view class="address-icon">-->
<!-- <image-->
<!-- class="image"-->
<!-- src="https://b2c-pro-static-dev.zkthink.com/static/images/icon-location.png"-->
<!-- />-->
<!-- </view>-->
<!-- <view class="address-main">-->
<!-- <view class="address-header">-->
<!-- <view class="address-name">{{ orderInfoData.realName }}</view>-->
<!-- <view class="address-phone">{{ orderInfoData.userPhone }}</view>-->
<!-- </view>-->
<!-- <view class="address-content">-->
<!-- <view class="address-desc">{{ orderInfoData.userAddress }}</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="address noBorder">-->
<!-- <view class="address-icon">-->
<!-- <image-->
<!-- class="image"-->
<!-- src="https://b2c-pro-static-dev.zkthink.com/static/images/icon-location.png"-->
<!-- />-->
<!-- </view>-->
<!-- <view class="address-main">-->
<!-- <view class="address-header">-->
<!-- <view class="address-name">{{ orderInfoData.realName }}</view>-->
<!-- <view class="address-phone">{{ orderInfoData.userPhone }}</view>-->
<!-- </view>-->
<!-- <view class="address-content">-->
<!-- <view class="address-desc">{{ orderInfoData.userAddress }}</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
</view>
</view>
<view class="page-space">
<view class="mb-20 card" v-if="orderInfoData.realName">
<view
class="mb-20 card"
v-if="orderInfoData.realName">
<view class="card-head">
<view class="card-title">
商家收货信息
@ -60,14 +68,16 @@
收货人
</view>
<view class="info-cell-value">
<view class="address-name">{{ orderInfoData.realName }}</view>
<view class="address-phone">{{ orderInfoData.userPhone }}</view>
<view class="address-name">{{ orderInfoData.realName }}</view>
<view class="address-phone">{{ orderInfoData.userPhone }}</view>
</view>
</view>
<view class="info-cell">
<view class="info-cell-label">
<text class="wem1"></text>
<text class="wem1"></text>
</view>
<view class="info-cell-value">
{{ orderInfoData.userAddress }}
@ -77,7 +87,9 @@
</view>
</view>
<view class="mb-20 card" v-if="orderInfoData.deliverySn">
<view
class="mb-20 card"
v-if="orderInfoData.deliverySn">
<view class="card-head">
<view class="card-title">
物流信息
@ -162,7 +174,7 @@
服务类型
</view>
<view class="info-cell-value">
{{ orderInfoData.serviceType===0?'仅退款':'退货退款' }}
{{ orderInfoData.serviceType === 0 ? '仅退款' : '退货退款' }}
</view>
</view>
<view class="info-cell">
@ -279,13 +291,16 @@
</view>
</layout>
<Modal ref="modalRef" :content="modalTitle" @confirm="confirmModal" />
<Modal
ref="modalRef"
:content="modalTitle"
@confirm="confirmModal" />
</template>
<script setup>
import { computed, ref, unref } from 'vue'
import { onShow} from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { onShow } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/modules/useMainStore'
import { formatDate } from '@/utils/utils'
import {
orderCancel,
@ -297,15 +312,16 @@ import {
} from '@/api/order'
import { orderReStatus } from '@/config'
import { useRouter } from "@/hooks/useRouter";
import {useGlobalProperties} from "@/hooks";
import { useGlobalProperties } from "@/hooks";
import { useShearPlate } from "@/hooks/useShearPlate";
import { formatRemainTime } from '@/utils/utils'
import Modal from "@/components/Modal/index.vue";
import { afterSalesBg } from "@/utils/images";
import config from "@/uni_modules/uv-ui-tools/libs/config/config";
const {$timeFormat} = useGlobalProperties()
const {getUrlParams,push} = useRouter()
const {getUrlParams, push} = useRouter()
const {setData} = useShearPlate();
const orderInfoData = ref(null)
const orderInfoStatusMsg = ref('')
@ -313,7 +329,7 @@ const expressData = ref(null)
const id = ref(0)
const orderId = ref(0)
const remainTimeStr = ref('')
const refundOrderStatus = ref({
const refundOrderStatus = ref({
0: '请耐心等待平台审核',
1: '平台已同意退货申请,请尽早退货',
2: '请耐心等待平台确认收货',
@ -331,8 +347,8 @@ const handleOrderInfo = async (option) => {
const modalRef = ref()
const modalType = ref(0) // 0删除记录 1撤销申请
const modalTitle = computed(()=>{
const tipsArr = ['确认删除记录吗?','确认撤销申请吗?']
const modalTitle = computed(() => {
const tipsArr = ['确认删除记录吗?', '确认撤销申请吗?']
return tipsArr[modalType.value]
})
@ -340,7 +356,7 @@ const modalTitle = computed(()=>{
* 打开弹窗
* @param {number} type 0删除记录 1撤销申请
*/
function showModal(type){
function showModal(type) {
modalType.value = type
unref(modalRef).show()
}
@ -348,15 +364,15 @@ function showModal(type){
/**
* 确认弹窗
*/
function confirmModal(){
const funcArr = [doDeleteRequest,doRevoke]
function confirmModal() {
const funcArr = [doDeleteRequest, doRevoke]
funcArr[modalType.value]()
}
/**
* 确认删除
*/
async function doDeleteRequest(){
async function doDeleteRequest() {
await afterSalesOrderDelete({
id: id.value,
orderCode: orderInfoData.value.orderId
@ -365,15 +381,15 @@ async function doDeleteRequest(){
title: '已删除',
duration: 2000
});
setTimeout(()=>{
setTimeout(() => {
toRefundList()
},2000)
}, 2000)
}
/**
* 确认撤销
*/
async function doRevoke(){
async function doRevoke() {
await afterSalesOrderRevoke({
id: id.value,
key: orderInfoData.value.orderId
@ -382,9 +398,9 @@ async function doRevoke(){
title: '已撤销',
duration: 2000
});
setTimeout(()=>{
setTimeout(() => {
toRefundList()
},2000)
}, 2000)
}
// 跳转列表
@ -408,7 +424,7 @@ const toRefund = () => {
push({url: '/pages/refund/refund'}, {
data: {
refundType: orderInfoData.value.serviceType,
goods: orderInfoData.value.cartInfo.map(v=>{
goods: orderInfoData.value.cartInfo.map(v => {
return v.productAttrUnique
}).toString(),
id: orderId.value
@ -419,11 +435,11 @@ const toRefund = () => {
// 返回列表
const goBackList = () => {
push({url: '/pages/refundList/refundList'}, {
type:"redirectTo"
type: "redirectTo"
})
}
onShow(()=>{
onShow(() => {
const params = getUrlParams()
id.value = params.id
orderId.value = params.orderId
@ -436,11 +452,12 @@ onShow(()=>{
<style lang="scss">
@import "../../style/images";
.orderList {
padding: 20rpx 0;
}
.page-space{
.page-space {
position: relative;
z-index: 2;
}
@ -459,12 +476,15 @@ onShow(()=>{
background-size: 40rpx 40rpx;
background-position: left center;
background-repeat: no-repeat;
&.order-status-0,&.order-status-1,&.order-status-2,&.order-status-5{
&.order-status-0, &.order-status-1, &.order-status-2, &.order-status-5 {
background-image: $orderStateClock;
}
&.order-status-3,&.order-status-4{
&.order-status-3, &.order-status-4 {
background-image: $orderStateFinish;
}
.image {
width: 40rpx;
height: 40rpx;
@ -488,14 +508,15 @@ onShow(()=>{
}
}
.infos{
.info-cell-label{
.wem1{
.infos {
.info-cell-label {
.wem1 {
width: 1em;
display: inline-block;
}
}
.info-cell-value{
.info-cell-value {
display: flex;
}
}

View File

@ -149,7 +149,7 @@ onLoad((options) => {
</Empty>
</template>
</view>
<u-action-sheet
<uv-action-sheet
:actions="mapUtils.mapList"
:show="showMapSelect"
cancelText="取消"

View File

@ -1,8 +1,8 @@
<script setup>
import { useRouter } from "@/hooks/useRouter";
import {onLoad, onPageScroll, onShow} from "@dcloudio/uni-app";
import { onLoad, onPageScroll, onShow } from "@dcloudio/uni-app";
import { nextTick, onBeforeUnmount, ref, unref } from "vue";
import { useMainStore } from '@/store/store';
import { useMainStore } from '@/store/modules/useMainStore';
import { storeToRefs } from "pinia";
import { orderConfirm, orderCreate } from "@/api/order";
import { useInterface } from "@/hooks/useInterface";
@ -16,15 +16,16 @@ import Header from "@/components/Header/index.vue"
import { useScroll } from "@/hooks/useScroll";
import { nextIcon, shopIcon } from "@/utils/images";
import { emitter } from "@/utils/emitter";
import {h5InWeChat} from "@/utils";
import { h5InWeChat } from "@/utils";
import Login from "@/pages/login/login.vue";
// ==================================== hooks =====================================
const {scrollTop} = useScroll()
onPageScroll(()=>{})
onPageScroll(() => {
})
const {getParams, push, goBack} = useRouter()
const {toast, loading, hideLoading} = useInterface();
const mainStore = useMainStore();
const {selectAddress, defaultAddress, address} = storeToRefs(mainStore);
const {selectAddress, defaultAddress, address, integralName} = storeToRefs(mainStore);
const campaignType = ref(0)
const zeroPrice = ref(false) // 本单支付金额是否为0
/**
@ -187,20 +188,20 @@ async function handleConfirm() {
try {
const payInfo = await doCreateServiceOrder()
// 去拉取支付
await doPayment({type: payType.value, payInfo,isGroup:routerParams.value.campaignType===1})
await doPayment({type: payType.value, payInfo, isGroup: routerParams.value.campaignType === 1})
// #ifndef H5
push({url: '/pages/payStatus/index'}, { data: {campaignType: campaignType.value},type: 'redirectTo'})
push({url: '/pages/payStatus/index'}, {data: {campaignType: campaignType.value}, type: 'redirectTo'})
// #endif
// 处理微信内h5
// #ifdef H5
if(h5InWeChat()){
push({url: '/pages/payStatus/index'}, { data: {campaignType: campaignType.value},type: 'redirectTo'})
if (h5InWeChat()) {
push({url: '/pages/payStatus/index'}, {data: {campaignType: campaignType.value}, type: 'redirectTo'})
}
// #endif
} catch (e) {
console.error(e)
toast({title: '支付失败'})
push({url: '/pages/payStatus/index'}, {data: {campaignType: campaignType.value} , type: 'redirectTo'})
push({url: '/pages/payStatus/index'}, {data: {campaignType: campaignType.value}, type: 'redirectTo'})
} finally {
subLoading.value = false
mainStore.cartId = null
@ -247,7 +248,7 @@ function setActivityData(data) {
if (routerParams.value.orderType !== 2) return
// 活动商品
data.campaignType = routerParams.value.campaignType // 1拼团 2秒杀 3砍价
campaignType.value = routerParams.value.campaignType
campaignType.value = routerParams.value.campaignType
data.campaignDetailId = routerParams.value.campaignDetailId // 活动营销ID
// 拼团 路由参数 campaignType 1拼团活动
if (routerParams.value.campaignType !== 1) return;
@ -374,7 +375,7 @@ onShow(async () => {
v-else>
点击选择门店
</view>
<u-icon name="arrow-right" />
<uv-icon name="arrow-right" />
</view>
</view>
</template>
@ -402,11 +403,15 @@ onShow(async () => {
imgWidth="200rpx"
>
<template #options="{goods}">
<view class="goods-detail" style="width: 100%">
<view
class="goods-detail"
style="width: 100%">
<view class="sku-row">
{{ goods.attrInfo.sku }}
</view>
<view class="price-row flex flex-ai__center flex-jc__sb" style="width:100%;">
<view
class="price-row flex flex-ai__center flex-jc__sb"
style="width:100%;">
<view class="price flex flex-ai__end">
{{ sku.truePrice }}
<span class="old-price">
@ -487,10 +492,14 @@ onShow(async () => {
/>
</view>
<view class="text">
<view class="flex flex-nowrap flex-ai__end" style="white-space: nowrap">
<view
class="flex flex-nowrap flex-ai__end"
style="white-space: nowrap">
{{ payItem.label }}
<span v-if="payItem.type===PayType['1']" style="font-size: 16rpx;white-space: nowrap;">
{{mainStore.user.nowMoney}}
<span
v-if="payItem.type===PayType['1']"
style="font-size: 16rpx;white-space: nowrap;">
{{ mainStore.user.nowMoney }}
</span>
</view>
<view class="e-text">
@ -531,20 +540,20 @@ onShow(async () => {
<view
class="row flex flex-ai__center flex-jc__sb"
v-if="orderDetail.priceGroup.enableIntegral">
<view class="label">积分抵扣</view>
<view class="label">{{ integralName }}抵扣</view>
<view class="value flex flex-ai__center">
当前积分:
当前{{ integralName }}:
<text class="primary-color">{{ orderDetail.priceGroup.integral }}</text>
<u-checkbox-group
<uv-checkbox-group
style="margin-left: 10rpx;margin-top: 3rpx;"
shape="circle"
activeColor="#ee6d46"
v-model="useIntegral"
@change="handleUseIntegralChange">
<u-checkbox
<uv-checkbox
label=" "
:name="1" />
</u-checkbox-group>
</uv-checkbox-group>
<template v-if="useIntegral.length>0">
-{{ orderDetail.priceGroup.deductionPrice.toFixed(2) }}
</template>
@ -586,6 +595,7 @@ $bottomHeight: 100rpx;
.arrow-icon {
width: 20rpx;
height: 20rpx;
flex-shrink: 0;
}
.bottom-empty-height {
@ -637,6 +647,7 @@ $bottomHeight: 100rpx;
.address-info {
color: #333333;
margin: 10rpx 0;
word-break: break-all;
}
}
}

View File

@ -252,7 +252,7 @@
import { ref } from 'vue'
import { orderConfirm, orderCreate } from '@/api/order'
import { onLoad } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store';
import { useMainStore } from '@/store/modules/useMainStore';
import { useRouter } from "@/hooks/useRouter";
import { getAddressList } from "@/api/address";

View File

@ -1,4 +1,4 @@
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { useInterface } from "@/hooks/useInterface";
import { updateAvatar, updateUserInfo } from "@/api/user";
import { requestUtil } from "@/utils/request";

View File

@ -8,7 +8,7 @@
<script setup>
import Header from "@/components/Header/index.vue"
import moment from "moment"
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { storeToRefs } from "pinia";
import UvIcon from "@/uni_modules/uv-icon/components/uv-icon/uv-icon.vue";
import UvImage from "@/uni_modules/uv-image/components/uv-image/uv-image.vue";

View File

@ -142,7 +142,7 @@ import { onLoad } from '@dcloudio/uni-app'
import { storeToRefs } from 'pinia'
import { objectURLToBlob } from '@/utils'
import Header from "@/components/Header/index.vue"
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import { updateAvatar, updateNickname } from '@/api/user'
import { useGlobalProperties } from "@/hooks";
import { useRouter } from "@/hooks/useRouter";

View File

@ -1,5 +1,9 @@
<template>
<Header ref="headerRef" :scroll-top="scrollTop"> 分类</Header>
<Header
ref="headerRef"
:show-return="false"
:scroll-top="scrollTop"> 分类
</Header>
<view
class="goods-category"
:style="computeMainBoxStyle"

View File

@ -1,5 +1,7 @@
<template>
<view class="home-container" :style="{ 'margin-top': `${statusBarHeight}px` }">
<view
class="home-container"
:style="{ 'margin-top': `${statusBarHeight}px` }">
<CanvasPage />
<!-- h5 tabbar 底部 -->
<!-- <view class="h5-tabbar-height"></view> -->
@ -11,7 +13,7 @@
<script setup>
import { ref } from 'vue'
import { onLoad, onReachBottom, onShareAppMessage, onShareTimeline } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import { useRouter } from "@/hooks/useRouter";
import CanvasPage from '@/components/canvasShow/canvasShowPage.vue'
import ReturnTop from "@/components/ReturnTop/index.vue"
@ -20,6 +22,7 @@ import UvIcon from "@/uni_modules/uv-icon/components/uv-icon/uv-icon.vue";
import { useScroll } from "@/hooks/useScroll";
import { homeLogoIcon } from "@/utils/images";
import { useShare } from "@/hooks/useShare";
const main = useMainStore()
const {push} = useRouter()
const recommendRef = ref(null)
@ -53,7 +56,7 @@ onLoad(() => {
});
})
const {shareAppMessage,shareTimeline} = useShare();
const {shareAppMessage, shareTimeline} = useShare();
onShareAppMessage(shareAppMessage)
onShareTimeline(shareTimeline)
const {scrollTop} = useScroll()
@ -64,6 +67,7 @@ const {scrollTop} = useScroll()
.home-container {
width: 100%;
position: relative;
.header-row {
.logo-col {
@include useFlex(flex-start, center);

View File

@ -4,6 +4,7 @@
system-bar-area-bg="#fff"
header-area-bg="#fff"
bg-change-by-scroll
:show-return="false"
>
购物车
</Header>

View File

@ -10,7 +10,7 @@ import { toRefs } from "vue";
import { useRouter } from "@/hooks/useRouter";
import { useInterface } from "@/hooks/useInterface";
import { storeToRefs } from "pinia";
import { useMainStore } from "@/store/store";
import { useMainStore } from "@/store/modules/useMainStore";
import { useService } from "@/hooks/useService";
const props = defineProps({
@ -41,7 +41,7 @@ async function toLink(listItem) {
if (!user.value) return toast({title: '请先登录'})
if (!listItem.path) return toast({title: ' 暂未开放 '})
if (listItem.path === 'kf') {
const {getServiceData,openService} = useService();
const {getServiceData, openService} = useService();
await getServiceData()
await openService()
return

View File

@ -2,114 +2,116 @@
<view class="mine-container">
<Header :show-return="false">我的</Header>
<!-- user info -->
<view class="userinfo-box">
<!-- 未登录 -->
<view
class="userinfo-box__inner no-login"
v-if="!(user && user.id)"
@click="toLogin"
>
<view class="flex flex-ai__center">
<image
class="head"
:src="defaultAvatarIcon"
/>
<view class="user-info">
点击登录
</view>
</view>
</view>
<!-- 已登录 -->
<view
class="userinfo-box__inner"
@click="toUserCenter"
v-else
>
<view class="flex flex-ai__center">
<image
class="head"
:src="user.avatar"
/>
<view class="user-info">
{{ user.nickname }}
</view>
</view>
<view class="user-top">
<!-- user info -->
<view class="userinfo-box">
<!-- 未登录 -->
<view
class="sign-box"
@click.stop="goSignIn">
<image :src="mySignIn" />
签到
</view>
</view>
</view>
<!-- 账户信息 -->
<view class="account-box">
<template
v-for="item in accountList"
:key="item.id">
<view
v-if="user"
class="account-item"
@click.stop="handleJump(item)">
<view class="count">
{{ user[item.field] || 0 }}
</view>
<view class="title">
{{ item.label }}
</view>
</view>
</template>
</view>
<!-- VIP 信息 未激活 -->
<view
class="vip-box vip-none"
@click="goMemberCenter"
v-if="!memberLeverInfo.currentLevel">
<view
class="vip-box__inner flex flex-ai__center flex-jc__sb"
:style="{backgroundImage:`url(${myVip1})`}">
<image
class="icon"
:src="noneVip" />
<view class="vip-text">
开通享更多特权省钱又省心
</view>
<view class="vip-button">
立即激活
</view>
</view>
</view>
<!-- VIP 信息 激活 -->
<view
class="vip-box"
@click="goMemberCenter"
v-else>
<view
class="vip-box__inner "
:style="{backgroundImage:`url(${myVip1})`}">
<view class="flex flex-ai__center flex-jc__sb">
<image
class="icon"
:src="memberLeverInfo.currentLevel.iconUrl" />
<view class="vip-text flex flex-ai__center">
{{ memberLeverInfo.currentLevel.levelName }}
<view class="process">
<view
class="schedule"
:style="{width: `${memberLeverInfo.needGrowthValue/memberLeverInfo.nextLevel.growthValue}%`}"></view>
class="userinfo-box__inner no-login"
v-if="!(user && user.id)"
@click="toLogin"
>
<view class="flex flex-ai__center">
<image
class="head"
:src="defaultAvatarIcon"
/>
<view class="user-info">
点击登录
</view>
</view>
<view class="vip-button">
查看权益 >
</view>
<!-- 已登录 -->
<view
class="userinfo-box__inner"
@click="toUserCenter"
v-else
>
<view class="flex flex-ai__center">
<image
class="head"
:src="user.avatar"
/>
<view class="user-info">
{{ user.nickname }}
</view>
</view>
<view
class="sign-box"
@click.stop="goSignIn">
<image :src="mySignIn" />
签到
</view>
</view>
<view class="tips">
再获取{{ memberLeverInfo.needGrowthValue }}经验可升级为{{ memberLeverInfo.nextLevel.levelName }}会员
</view>
<!-- 账户信息 -->
<view class="account-box">
<template
v-for="item in accountList"
:key="item.id">
<view
v-if="user"
class="account-item"
@click.stop="handleJump(item)">
<view class="count">
{{ user[item.field] || 0 }}
</view>
<view class="title">
{{ item.field === 'integral' ? `我的${ integralName }` : item.label }}
</view>
</view>
</template>
</view>
<!-- VIP 信息 未激活 -->
<view
class="vip-box vip-none"
@click="goMemberCenter"
v-if="!memberLeverInfo.currentLevel">
<view
class="vip-box__inner flex flex-ai__center flex-jc__sb"
:style="{backgroundImage:`url(${myVip1})`}">
<image
class="icon"
:src="noneVip" />
<view class="vip-text">
开通享更多特权省钱又省心
</view>
<view class="vip-button">
立即激活
</view>
</view>
</view>
<!-- VIP 信息 激活 -->
<view
class="vip-box"
@click="goMemberCenter"
v-else>
<view
class="vip-box__inner "
:style="{backgroundImage:`url(${myVip1})`}">
<view class="flex flex-ai__center flex-jc__sb">
<image
class="icon"
:src="memberLeverInfo.currentLevel.iconUrl" />
<view class="vip-text flex flex-ai__center">
{{ memberLeverInfo.currentLevel.levelName }}
<view class="process">
<view
class="schedule"
:style="{width: `${memberLeverInfo.needGrowthValue/memberLeverInfo.nextLevel.growthValue}%`}"></view>
</view>
</view>
<view class="vip-button">
查看权益 >
</view>
</view>
<view class="tips">
再获取{{ memberLeverInfo.needGrowthValue }}经验可升级为{{ memberLeverInfo.nextLevel.levelName }}会员
</view>
</view>
</view>
</view>
@ -147,7 +149,7 @@ import Header from '@/components/Header/index.vue'
import { orderUserCount } from '@/api/order'
import { onShow } from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { useMainStore } from '@/store/modules/useMainStore'
import { useRouter } from "@/hooks/useRouter";
import { storeToRefs } from "pinia";
import GridCard from "@/root/user/components/GridCard.vue";
@ -155,10 +157,10 @@ import { accountList, cardOneList, cardTwoList, orderIconList } from "@/root/use
import { defaultAvatarIcon, mySignIn, myVip1, myVipNone, noneVip } from "@/utils/images";
import { useInterface } from "@/hooks/useInterface";
import { useJump } from "@/hooks/useJump";
import { getUserMemberLevel } from "@/api/member";
import { getIntegralName, getUserMemberLevel } from "@/api/member";
const mainStore = useMainStore()
const {user} = storeToRefs(mainStore);
const {user, integralName} = storeToRefs(mainStore);
const {push} = useRouter()
const {toast} = useInterface();
const {goSignIn, goMemberCenter} = useJump()
@ -204,6 +206,7 @@ async function doGetUserMemberLevel() {
memberLeverInfo.value = await getUserMemberLevel()
}
function handleJump(item) {
if (!item.path) return toast({title: '暂未开放~'})
if (typeof item.path === 'function') {
@ -225,7 +228,12 @@ onShow(() => {
scoped
>
.mine-container {
background: linear-gradient(to bottom, #fff 0%, #fff 28%, #b0b0b0 40%, #fff 41%);
background-color: #ffffff;
.user-top {
padding-bottom: 22rpx;
background: url("https://b2c-pro-static-dev.zkthink.com/static/my/bg-top.png") no-repeat bottom center / 100% auto;
}
.userinfo-box {
@include usePadding(32, 0);
@ -379,7 +387,8 @@ onShow(() => {
.big-card {
width: 100%;
background: #f6f6f6;
border-radius: 30rpx;
border-radius: 30rpx 30rpx 0 0;
margin-top: -22rpx;
@include usePadding(32, 32);
}

12
store/index.js Normal file
View File

@ -0,0 +1,12 @@
/**
* @name: storeIndex
* @author: kahu4
* @date: 2024-02-21 17:28
* @description暴露公共store
* @update: 2024-02-21 17:28
* */
import { createPinia } from "pinia";
const store = createPinia();
export default store;

View File

@ -0,0 +1,32 @@
/**
* @name: globalRequestStore
* @author: kahu4
* @date: 2024-02-21 17:32
* @description公共方法
* @update: 2024-02-21 17:32
* */
import { defineStore } from "pinia";
import store from "@/store";
import { shareToAddIntegral } from "@/api/account/integral";
export const useGlobalRequestStore = defineStore('globalRequestStore', {
state: () => ({}),
getters: {},
actions: {
/**
* 分享商品获取积分
* @return {Promise<boolean>}
*/
async doShareToAddIntegral() {
try {
await shareToAddIntegral()
return true
} catch (e) {
return false
}
}
},
});
export const useGlobalRequestStoreWithOut = () => useGlobalRequestStore(store);

View File

@ -0,0 +1,80 @@
import { defineStore } from 'pinia'
import cookie from '@/utils/cookie'
import { getUserInfo } from '@/api/user'
import { getAddressCityList, getAddressList } from '@/api/address'
import { useRouter } from "@/hooks/useRouter";
import { getIntegralName } from "@/api/member";
import store from "@/store";
const {push} = useRouter()
export const useMainStore = defineStore('main', {
state: () => ({
user: null,
address: [],
areaList: [],
selectAddress: null,
moreLoading: true,
cartId: null,
integralName: '积分'
}),
getters: {
defaultAddress(state) {
return state.address?.filter(item => item.isDefault)?.[0]
},
},
actions: {
setAccessToken(user) {
cookie.set('accessToken', user)
return getUserInfo()
},
setSelectAddress(id) {
this.selectAddress = this.address.filter(item => item.id == id)[0]
},
async getUserInfo() {
let res = await getUserInfo()
this.user = res
return res
},
restAddress() {
this.address = []
this.moreLoading = true
},
clearSelectAddress() {
this.selectAddress = null
},
async getAddressList(page) {
let res = await getAddressList({page: page})
if (res.length) {
this.address = this.address.concat(res)
} else {
this.moreLoading = false
}
// console.log('--> % getUserInfo % res:\n', res)
},
async getAddressCityList() {
this.areaList = await getAddressCityList()
},
init() {
let accessToken = cookie.get('accessToken')
if (accessToken) {
return getUserInfo()
}
return null
},
logout() {
this.user = null
this.address = []
this.areaList = []
this.selectAddress = null
cookie.remove('accessToken')
push({url: '/pages/login/guid'}, {type: "redirectTo"})
},
async doGetIntegralName() {
this.integralName = await getIntegralName()
}
},
})
export const useMainStoreWithOut = () => useMainStore(store)

View File

@ -659,14 +659,14 @@ image {
box-sizing: border-box;
&-btn {
z-index: 999;
position: absolute;
right: 32rpx;
//z-index: 999;
//position: absolute;
width: 50px !important;
height: 25px !important;
line-height: 25px !important;
font-size: 12px !important;
bottom: 130rpx;
margin-right: 10rpx;
border-radius: 0 !important;
}
}
@ -838,6 +838,7 @@ image {
line-height: 33rpx;
font-size: 24rpx;
color: #999999;
word-break: break-all;
}
}

View File

@ -13,7 +13,7 @@
*/
/* 颜色变量 */
@import 'uview-plus/theme.scss';
@import '@/uni_modules/uv-ui-tools/theme.scss';
/* 行为相关颜色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;

11
unpackage/dist/build/.nvue/app.css.js vendored Normal file
View File

@ -0,0 +1,11 @@
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var require_app_css = __commonJS({
"app.css.js"(exports) {
const _style_0 = {};
exports.styles = [_style_0];
}
});
export default require_app_css();

2
unpackage/dist/build/.nvue/app.js vendored Normal file
View File

@ -0,0 +1,2 @@
Promise.resolve("./app.css.js").then(() => {
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{t as e,o as t,j as s,w as a,h as o,i as u,I as p,z as n,l,f as c,s as d,B as i,u as r}from"./index-d4baa715.js";import{r as y}from"./coupon.18b394c1.js";import{_ as f}from"./_plugin-vue_export-helper.1b428a4d.js";const _=f({__name:"CouponItem",props:{coupons:{type:Object,default:()=>({})},type:{type:String,default:"select"},tabType:{type:Number,default:0}},emits:["receiveCoupon"],setup(f,{emit:_}){const b=f,{push:m}=r(),{coupons:k}=e(b),T=async()=>{await y(k.value.id),_("receiveCoupon"),d({title:"领取成功",icon:"none",duration:2e3})};return(e,d)=>{const r=i;return t(),s(r,{class:"coupon-item"},{default:a((()=>[o(r,{class:"discount"},{default:a((()=>[1===u(k).couponType?(t(),s(r,{key:0,class:"unit pre-unit"},{default:a((()=>[p(" ¥ ")])),_:1})):n("",!0),p(" "+l(1==u(k).couponType?u(k).couponValue:u(k).discount)+" ",1),2===u(k).couponType?(t(),s(r,{key:1,class:"unit"},{default:a((()=>[p(" 折 ")])),_:1})):n("",!0)])),_:1}),o(r,{class:"info"},{default:a((()=>[o(r,{class:"row"},{default:a((()=>[p(l(1==u(k).couponType?"满减券":"折扣券"),1)])),_:1}),o(r,{class:"row tip"},{default:a((()=>[p(" (实付"+l(u(k).threshold)+"元使用) ",1)])),_:1})])),_:1}),"select"===f.type?(t(),s(r,{key:0},{default:a((()=>[0===f.tabType?(t(),s(r,{key:0,class:"button"},{default:a((()=>[c("span",{onClick:d[0]||(d[0]=e=>{return t=u(k),void m({url:"/pages/goodsList/goodsList"},{data:{couponId:t.id}});var t})},"去使用")])),_:1})):n("",!0),1===f.tabType?(t(),s(r,{key:1,class:"button disable"},{default:a((()=>[c("span",null,"已使用")])),_:1})):n("",!0),2===f.tabType?(t(),s(r,{key:2,class:"button expired"},{default:a((()=>[c("span",null,"已失效")])),_:1})):n("",!0)])),_:1})):n("",!0),"get"===f.type?(t(),s(r,{key:1,class:"button get-coupon",onClick:T},{default:a((()=>[p(" 领取 ")])),_:1})):n("",!0)])),_:1})}}},[["__scopeId","data-v-52d18deb"]]);export{_ as C};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{t,x as e,o as a,j as s,w as o,h as l,y as i,i as d,m as u,I as r,l as p,a0 as n,B as c,u as f}from"./index-d4baa715.js";import{L as g}from"./index.6c6cd02e.js";import{d as m}from"./utils.052a93d2.js";import{_ as y}from"./_plugin-vue_export-helper.1b428a4d.js";const _="NEW",h=y({__name:"Goods",props:{goods:{type:Object,default:()=>({})},imgWidth:{type:String,default:"100%"},ratio:{type:[String,Boolean],default:()=>"1/1"},infoPadding:{type:String,default:()=>"0 0"},titleWrap:{type:Boolean,default:()=>!1},titleSize:{type:Number,default:()=>28},type:{type:String,default:()=>_},row:{type:Boolean,default:!1},jump:{type:Boolean,default:!0}},setup(y){const _=y,{goods:h,imgWidth:w,ratio:j,infoPadding:v,titleWrap:x,titleSize:S,row:W,jump:B}=t(_),{push:I}=f(),$=e((()=>""+1/m(1,1.3)));function b(){B.value&&I({url:"/pages/goodsDetail/goodsDetail"},{data:{id:h.value.id,skuId:h.value.skuId}})}return(t,e)=>{const f=c;return a(),s(f,{class:u({goods:!0,row:d(W)}),onClick:b},{default:o((()=>[l(f,{class:"goods-image",style:i({width:d(w),"aspect-ratio":!0===d(j)?d($):d(j)})},{default:o((()=>[l(g,{unique:d(h).id,src:d(h).image,class:"image",mode:!0===d(j)?"aspectFit":"aspectFill"},null,8,["unique","src","mode"])])),_:1},8,["style"]),l(f,{class:"goods-info",style:i({padding:d(v),width:d(W)?`calc( 100% - ${d(w)} )`:"100%",height:d(W)?`${d(w)}`:"auto"})},{default:o((()=>[l(f,{class:u({"title-row":!0,nowrap:!d(x)}),style:i({"font-size":`${d(S)}rpx`})},{default:o((()=>[r(p(d(h).storeName),1)])),_:1},8,["class","style"]),l(f,{class:"",style:{width:"100%"}},{default:o((()=>[n(t.$slots,"options",{goods:d(h)},void 0,!0)])),_:3})])),_:3},8,["style"])])),_:3},8,["class"])}}},[["__scopeId","data-v-0b4acd91"]]);export{h as G};

View File

@ -0,0 +1 @@
import{a as e,o as l,j as a,w as s,f as n,h as t,e as c,F as o,k as u,I as i,l as r,p as f,A as _,N as p,B as m}from"./index-d4baa715.js";import{P as x}from"./Popup.965f3d92.js";import{a4 as d,a5 as h}from"./images.f0a6f614.js";import{_ as v}from"./_plugin-vue_export-helper.1b428a4d.js";const k=v({__name:"InviteFriends",emits:["share"],setup(v,{expose:k,emit:j}){const b=e(null),y=e("分享");function C(){b.value.close()}function w(e){j("share",e),C()}k({open:function(e){e&&(y.value=e),b.value.show()}});const I=[{label:"微信好友",value:"wechat",icon:d},{label:"生成海报",value:"photo",icon:h}];return(e,d)=>{const h=f,v=_,k=p,j=m;return l(),a(x,{ref_key:"popupRef",ref:b,title:y.value},{rightOption:s((()=>[n("span")])),default:s((()=>[t(j,{class:"share-box flex flex-ai__center flex-jc__sa"},{default:s((()=>[(l(),c(o,null,u(I,(e=>(l(),c(o,{key:e.value},["wechat"===e.value?(l(),a(k,{key:0,"open-type":"share",onClick:l=>w(e),class:"item flex flex-column flex-jc__center flex-ai__center"},{default:s((()=>[t(h,{src:e.icon},null,8,["src"]),t(v,null,{default:s((()=>[i(r(e.label),1)])),_:2},1024)])),_:2},1032,["onClick"])):(l(),a(j,{key:1,onClick:l=>w(e),class:"item flex flex-column flex-jc__center flex-ai__center"},{default:s((()=>[t(h,{src:e.icon},null,8,["src"]),t(v,null,{default:s((()=>[i(r(e.label),1)])),_:2},1024)])),_:2},1032,["onClick"]))],64)))),64))])),_:1}),t(j,{class:"cancel",onClick:C},{default:s((()=>[i(" 取消 ")])),_:1})])),_:1},8,["title"])}}},[["__scopeId","data-v-9c41d5c5"]]);export{k as I};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{aK as t,V as e}from"./index-d4baa715.js";function s(e){return t.post("/member/auth/sms-login",e,{login:!1})}function a(e){return t.post("/member/auth/send-sms-code",e,{login:!1})}const m=`${e}/system/dict-data/agreement/1`,n=`${e}/system/dict-data/agreement/2`,r=`${e}/system/dict-data/get-stream?dictType=distributor_agreement&label=分销商协议`;export{s as a,r as d,n as p,a as s,m as u};

View File

@ -0,0 +1 @@
import{a as s,o as a,j as e,y as t,B as n}from"./index-d4baa715.js";const l={__name:"blank",props:["size"],setup(l){const o=s(l.size);return(s,l)=>{const r=n;return a(),e(r,{class:"blank",style:t({height:o.value+"px"})},null,8,["style"])}}};export{l as _};

View File

@ -0,0 +1 @@
import{a as s,o as a,j as t,w as e,a0 as o,m as r,y as l,B as c}from"./index-d4baa715.js";import{_ as d}from"./_plugin-vue_export-helper.1b428a4d.js";const p=d({__name:"card",props:["class","width"],setup(d){const p=d;s(p.class);const n=s(p.width);return(s,d)=>{const u=c;return a(),t(u,{class:r(["card",p.class]),style:l({width:n.value?n.value+"rpx":"100%"})},{default:e((()=>[o(s.$slots,"default",{},void 0,!0)])),_:3},8,["class","style"])}}},[["__scopeId","data-v-4aee1572"]]);export{p as _};

View File

@ -0,0 +1 @@
import{aK as t}from"./index-d4baa715.js";function a(a){return t.post("/cart/add",a)}function r(a){return t.get("/cart/cart/list",a)}function c(a){return t.get("/cart/count",a)}const s=a=>t.post("/cart/num",a),n=a=>t.post("/order/confirm",a),o=a=>t.post("/cart/cart/del",a),e=a=>t.post("/cart/cart/changeSku",a);export{e as a,c as b,n as c,o as d,a as e,r as g,s as u};

View File

@ -0,0 +1 @@
import{a as s,o as a,j as e,w as n,a0 as o,m as t,B as r}from"./index-d4baa715.js";/* empty css */import{_}from"./_plugin-vue_export-helper.1b428a4d.js";const i=_({__name:"container",props:["min"],setup(_){const i=s(null!=(null==_?void 0:_.min));return(s,_)=>{const l=r;return a(),e(l,{class:t(["container",i.value?"container-min":""])},{default:n((()=>[o(s.$slots,"default",{},void 0,!0)])),_:3},8,["class"])}}},[["__scopeId","data-v-fd4d18c7"]]);export{i as _};

View File

@ -0,0 +1 @@
import{aK as o}from"./index-d4baa715.js";const t=t=>o.get(`/product/coupon/relation/searchUserCoupon/${t}`,{}),c=t=>o.get(`/product/coupon/relation/receive/${t}`,{}),e=t=>o.get(`/product/coupon/receive-list/${t}`,{}),r=t=>o.get(`/cart/coupon/?cartIds=${t}`,{}),a=t=>o.get("/product/coupon/canvas-list",t);export{r as a,e as b,t as c,a as g,c as r};

View File

@ -0,0 +1 @@
.flex[data-v-aba9466d]{display:flex!important}.flex-wrap[data-v-aba9466d]{flex-wrap:wrap}.flex-nowrap[data-v-aba9466d]{flex-wrap:nowrap}.flex-lr__center[data-v-aba9466d]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-aba9466d]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-aba9466d]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-aba9466d]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-aba9466d]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-aba9466d]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-aba9466d]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-aba9466d]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-aba9466d]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-aba9466d]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-aba9466d]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-aba9466d]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-aba9466d]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-aba9466d]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-aba9466d]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-aba9466d]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-aba9466d]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-aba9466d]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-aba9466d]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-aba9466d]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-aba9466d]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-aba9466d]{flex-direction:column}.flex-jc__sb[data-v-aba9466d]{justify-content:space-between}.flex-jc__sa[data-v-aba9466d]{justify-content:space-around}.flex-jc__se[data-v-aba9466d]{justify-content:space-evenly}.flex-jc__start[data-v-aba9466d]{justify-content:flex-start}.flex-jc__center[data-v-aba9466d]{justify-content:center}.flex-jc__end[data-v-aba9466d]{justify-content:flex-end}.flex-ai__start[data-v-aba9466d]{align-items:flex-start}.flex-ai__center[data-v-aba9466d]{align-items:center}.flex-ai__end[data-v-aba9466d]{align-items:flex-end}.primary-color[data-v-aba9466d]{color:#ee6d46}.animation-button[data-v-aba9466d]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-aba9466d]:active{scale:1.1}.animation-button.disabled[data-v-aba9466d]{background:#999}.h5-tabbar-height[data-v-aba9466d]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-aba9466d]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.create-address[data-v-aba9466d]{background:#fff}.form-checkbox[data-v-aba9466d]{padding-left:1.09375rem}.w-158[data-v-aba9466d]{flex:0 0 4.9375rem}.chooise[data-v-aba9466d]{display:flex;flex-direction:row;flex-wrap:nowrap;gap:0;justify-content:space-between;align-items:center;color:#999}

View File

@ -0,0 +1 @@
import{aV as t}from"./index-d4baa715.js";class e{constructor(e,s){this.options=e,this.animation=t({...e}),this.currentStepAnimates={},this.next=0,this.$=s}_nvuePushAnimates(t,e){let i=this.currentStepAnimates[this.next],n={};if(n=i||{styles:{},config:{}},s.includes(t)){n.styles.transform||(n.styles.transform="");let s="";"rotate"===t&&(s="deg"),n.styles.transform+=`${t}(${e+s}) `}else n.styles[t]=`${e}`;this.currentStepAnimates[this.next]=n}_animateRun(t={},e={}){let s=this.$.$refs.ani.ref;if(s)return new Promise(((i,n)=>{nvueAnimation.transition(s,{styles:t,...e},(t=>{i()}))}))}_nvueNextAnimate(t,e=0,s){let i=t[e];if(i){let{styles:n,config:a}=i;this._animateRun(n,a).then((()=>{e+=1,this._nvueNextAnimate(t,e,s)}))}else this.currentStepAnimates={},"function"==typeof s&&s(),this.isEnd=!0}step(t={}){return this.animation.step(t),this}run(t){this.$.animationData=this.animation.export(),this.$.timer=setTimeout((()=>{"function"==typeof t&&t()}),this.$.durationTime)}}const s=["matrix","matrix3d","rotate","rotate3d","rotateX","rotateY","rotateZ","scale","scale3d","scaleX","scaleY","scaleZ","skew","skewX","skewY","translate","translate3d","translateX","translateY","translateZ"];function i(t,s){if(s)return clearTimeout(s.timer),new e(t,s)}s.concat(["opacity","backgroundColor"],["width","height","left","right","top","bottom"]).forEach((t=>{e.prototype[t]=function(...e){return this.animation[t](...e),this}}));export{i as c};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{aK as t}from"./index-d4baa715.js";function r(r){return t.get(`/product/reply/list/${r.id}`,r)}function e(r){return t.get("/teamwork/wait-list",r)}function a(r){return t.get("/teamwork/product-detail",r)}export{a,e as g,r};

View File

@ -0,0 +1 @@
import{a,x as s,G as o,H as t,o as e,j as l,w as d,h as u,I as i,l as r,i as c,z as n,f as g,Q as f,a0 as p,m as _,B as m,A as v,p as k,u as y}from"./index-d4baa715.js";import{_ as b}from"./uv-line-progress.9ba483c2.js";import{_ as h}from"./uv-button.4742932f.js";import{G as x}from"./good-attr-select.827f4d84.js";import{a3 as E}from"./images.f0a6f614.js";import{L as j}from"./index.6c6cd02e.js";import{_ as C}from"./_plugin-vue_export-helper.1b428a4d.js";const I=C({__name:"goods",props:["data","groupBuy","original","stock","list","buyProgress","total","selectModel","model","purchase","link","price","hasFirst"],setup(C){const I=C,P=a(void 0!==I.list),T=a(I.groupBuy),w=a(I.stock),D=a(I.total),F=a(I.buyProgress),q=a(void 0!==I.selectModel),B=a(void 0!==I.model),M=a(I.purchase);a(I.price);const S=a(I.original),A=a(null),G=a(void 0!==I.link),N=a(I.hasFirst),{push:z}=y(),H=()=>{G.value&&z({url:"/pages/goodsDetail/goodsDetail"},{data:{id:I.data.id,skuId:I.data.skuId}})},L=()=>{A.value.open()},Q=()=>{},W=s((()=>{const a=I.data.campaignTotal||I.data.total;return(a-(I.data.campaignStock||I.data.stock))/a*100})),X=s((()=>{const a=I.data.campaignTotal||I.data.total,s=I.data.campaignStock||I.data.stock;return Math.floor((a-s)/a*100).toFixed(0)+"%"}));return(a,s)=>{const y=m,I=o(t("uv-line-progress"),b),G=v,z=k,$=o(t("uv-button"),h),J=o(t("good-attr-select"),x);return e(),l(y,{class:_(["goods",[P.value&&"goods-list",N.value&&"goods-first"]]),onClick:H},{default:d((()=>[u(y,{class:"goods-header"},{default:d((()=>[u(y,{class:"goods-thumb"},{default:d((()=>[u(j,{unique:C.data.id,src:C.data.image,class:"goods-thumb-img",mode:"aspectFit"},null,8,["unique","src"])])),_:1})])),_:1}),u(y,{class:"goods-content"},{default:d((()=>[u(y,null,{default:d((()=>[u(y,{class:"goods-storeName"},{default:d((()=>[i(r(C.data.storeName),1)])),_:1}),N.value&&F.value?(e(),l(y,{key:0,class:"buy-progress-first"},{default:d((()=>[u(I,{activeColor:"#EE6D46",inactiveColor:"#E6E6E6",height:"14rpx",percentage:c(W),showText:!1},null,8,["percentage"]),u(G,{class:"text"},{default:d((()=>[i("已售"+r(c(X)),1)])),_:1})])),_:1})):n("",!0)])),_:1}),q.value?(e(),l(y,{key:0,class:"goods-list-model"},{default:d((()=>[g("div",{class:"goods-list-model-border",onClick:f(L,["stop"])},[u(y,{class:"goods-list-model-label"},{default:d((()=>[i(r(C.data.attrInfo.sku),1)])),_:1}),u(y,{class:"goods-list-model-action icon"},{default:d((()=>[u(z,{src:c(E)},null,8,["src"])])),_:1})],8,["onClick"])])),_:1})):n("",!0),B.value?(e(),l(y,{key:1,class:"goods-list-model-info"},{default:d((()=>[u(y,{class:"goods-list-model-label"},{default:d((()=>[i(r(C.data.attrInfo.sku),1)])),_:1})])),_:1})):n("",!0),u(y,null,{default:d((()=>[u(y,{class:"goods-info"},{default:d((()=>[u(y,{class:"goods-info-left"},{default:d((()=>[T.value?(e(),l(y,{key:0,class:"goods-desc"},{default:d((()=>[i(r(C.data.person)+"人团 ",1)])),_:1})):n("",!0),u(y,{class:"goods-price-row"},{default:d((()=>[u(y,{class:"goods-price"},{default:d((()=>[i(" ¥"+r(C.data.campaignPrice||C.data.price),1)])),_:1}),S.value?(e(),l(y,{key:0,class:"goods-price goods-price-original"},{default:d((()=>[i(" ¥"+r(C.data.otPrice||C.data.originalPrice),1)])),_:1})):n("",!0)])),_:1})])),_:1}),u(y,{class:"goods-info-action"},{default:d((()=>[u(y,{class:"goods-info-action-btn"},{default:d((()=>[p(a.$slots,"action",{},void 0,!0)])),_:3}),w.value?(e(),l(y,{key:0,class:"goods-info-action-desc"},{default:d((()=>[C.data.stock?(e(),l(G,{key:0},{default:d((()=>[i("仅剩"+r(C.data.stock)+"件",1)])),_:1})):(e(),l(G,{key:1},{default:d((()=>[i("库存不足")])),_:1}))])),_:1})):n("",!0),M.value?(e(),l(y,{key:1,class:"buy-num"},{default:d((()=>[u(y,{class:"buy-num-info-desc"},{default:d((()=>[i(" x"+r(M.value),1)])),_:1})])),_:1})):n("",!0),T.value?(e(),l($,{key:2,class:"button",round:"",block:"",type:"primary"},{default:d((()=>[i(" 立刻拼团 ")])),_:1})):n("",!0)])),_:3})])),_:3}),!N.value&&F.value?(e(),l(y,{key:0,class:"buy-progress"},{default:d((()=>[u(y,{class:"buy-progress-info"},{default:d((()=>[D.value?(e(),l(y,{key:0,class:"buy-progress-info-desc"},{default:d((()=>[i(" 限量"+r(C.data.campaignTotal||C.data.total)+"件 ",1)])),_:1})):n("",!0),u(I,{activeColor:"#EE6D46",inactiveColor:"#E6E6E6",height:"14rpx",percentage:c(W),showText:!1},null,8,["percentage"])])),_:1}),u(y,{class:"buy-progress-action"},{default:d((()=>[u($,{round:"",block:"",type:"primary"},{default:d((()=>[i(" 立即抢购 ")])),_:1})])),_:1})])),_:1})):n("",!0)])),_:3})])),_:3}),u(J,{ref_key:"selectAttrPanel",ref:A,id:C.data.id,onSelect:Q},null,8,["id"])])),_:3},8,["class"])}}},[["__scopeId","data-v-880dbd95"]]);export{I as _};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.flex[data-v-88d0f1e2]{display:flex!important}.flex-wrap[data-v-88d0f1e2]{flex-wrap:wrap}.flex-nowrap[data-v-88d0f1e2]{flex-wrap:nowrap}.flex-lr__center[data-v-88d0f1e2]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-88d0f1e2]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-88d0f1e2]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-88d0f1e2]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-88d0f1e2]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-88d0f1e2]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-88d0f1e2]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-88d0f1e2]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-88d0f1e2]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-88d0f1e2]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-88d0f1e2]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-88d0f1e2]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-88d0f1e2]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-88d0f1e2]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-88d0f1e2]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-88d0f1e2]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-88d0f1e2]{flex-direction:column}.flex-jc__sb[data-v-88d0f1e2]{justify-content:space-between}.flex-jc__sa[data-v-88d0f1e2]{justify-content:space-around}.flex-jc__se[data-v-88d0f1e2]{justify-content:space-evenly}.flex-jc__start[data-v-88d0f1e2]{justify-content:flex-start}.flex-jc__center[data-v-88d0f1e2]{justify-content:center}.flex-jc__end[data-v-88d0f1e2]{justify-content:flex-end}.flex-ai__start[data-v-88d0f1e2]{align-items:flex-start}.flex-ai__center[data-v-88d0f1e2]{align-items:center}.flex-ai__end[data-v-88d0f1e2]{align-items:flex-end}.primary-color[data-v-88d0f1e2]{color:#ee6d46}.animation-button[data-v-88d0f1e2]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-88d0f1e2]:active{scale:1.1}.animation-button.disabled[data-v-88d0f1e2]{background:#999}.h5-tabbar-height[data-v-88d0f1e2]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-88d0f1e2]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.login-guid[data-v-88d0f1e2]{width:100%;height:100vh;background:#fff}.login-guid .main-box[data-v-88d0f1e2]{width:100%;top:9.375rem;position:absolute}.login-guid .main-box .logo[data-v-88d0f1e2]{width:7.96875rem;height:3rem}.login-guid .button-group[data-v-88d0f1e2]{padding:0 1.5625rem;box-sizing:border-box;width:100%;font-size:.875rem;position:absolute;bottom:20%}.login-guid .button-group .button[data-v-88d0f1e2]{width:100%;margin-bottom:.9375rem;display:flex;align-items:center;justify-content:center;height:2.75rem;font-size:.875rem;border-radius:0}.login-guid .button-group .button .icon[data-v-88d0f1e2]{width:1.25rem;height:1.25rem;margin-right:.625rem}.login-guid .button-group .white-button[data-v-88d0f1e2]{background:#fff;border:.03125rem solid #333;color:#333}.agreement-box[data-v-88d0f1e2]{padding:0 .9375rem;box-sizing:border-box;position:fixed;bottom:5%;width:100%;font-size:.75rem;color:#999;transition:all .3s}.agreement-box .agreement-text[data-v-88d0f1e2]{text-align:center}.agreement-box .agreement-text .color[data-v-88d0f1e2]{color:#ee6d46}.agreement-box[data-v-88d0f1e2] .uv-checkbox{width:100%;align-items:flex-start}.error-animation[data-v-88d0f1e2]{animation:error-text-88d0f1e2 .8s 1}@keyframes error-text-88d0f1e2{0%{transform:translate(0)}5%,25%,45%,65%,85%{transform:translate(-.3125rem)}10%,30%,50%,70%,90%{transform:translate(.3125rem)}15%,35%,55%,75%,95%{transform:translate(.625rem)}20%,40%,60%,80%,to{transform:translate(-.625rem)}}

View File

@ -0,0 +1 @@
import{aJ as a}from"./index-d4baa715.js";const s=`${a}static/icon/empty/优惠券.png`,i=`${a}static/icon/empty/收藏.png`,n=`${a}static/icon/empty/购物车.png`,t=`${a}static/icon/empty/订单.png`,g=`${a}static/icon/empty/地址.png`,c=`${a}static/icon/empty/good.png`,p=`${a}static/icon/logo.png`,o=`${a}static/icon/login/手机@2x.png`,e=`${a}static/icon/login/验证码@2x.png`,$=`${a}static/icon/user/mine.png`,m=`${a}static/icon/pay/weixin.png`,r=`${a}static/icon/pay/zhifubao.png`,d=`${a}static/icon/pay/yue.png`,y=`${a}static/icon/shop.png`,h=`${a}static/icon/location.png`,l=`${a}static/icon/location-1.png`,u=`${a}static/icon/phone.png`,f=`${a}static/icon/time.png`,b=`${a}static/icon/phone-grey.png`,k=`${a}static/icon/loaction-grey.png`,z=`${a}static/images/icon-dfk.png`,j=`${a}static/images/icon-dfh.png`,q=`${a}static/images/icon-dsh.png`,E=`${a}static/images/icon-dpj.png`,w=`${a}static/images/icon-wdzj.png`,x=`${a}static/images/icon-yhq.png`,B=`${a}static/images/icon-wdsc.png`,A=`${a}static/images/icon-kqzb.png`,D=`${a}static/images/icon-wdtg.png`,v=`${a}static/images/icon-kqjl.png`,I=`${a}static/images/icon-kqjl.png`,J=`${a}static/images/icon-lxkf.png`,K=`${a}static/images/icon-address.png`,S=`${a}static/images/icon-zhsz.png`,V=`${a}static/icon/login/phone.png`,C=`${a}static/images/icon-dpj.png`,F=`${a}static/images/%E5%8D%95%E5%95%86%E6%88%B7%E5%8A%A0%E8%BD%BD%E5%8A%A8%E5%9B%BE.gif`,G=`${a}static/images/up.png`,H=`${a}static/icon/pay/pay-success.png`,L=`${a}static/icon/pay/pay-error.png`,M=`${a}static/images/icon-edit.png`,N=`${a}static/images/order-info-bg.png`,O=`${a}static/images/icon-location.png`,P=`${a}static/images/down.png`,Q=`${a}static/images/icon-kefu.png`,R=`${a}static/images/icon-gouwuche.png`,T=`${a}static/images/icon-shouceng.png`,U=`${a}static/images/icon-shouceng-o.png`,W=`${a}static/images/banner.png`,X=`${a}static/images/kjzq.png`,Y=`${a}static/images/zkzq.png`,Z=`${a}static/images/flashKilling.png`,_=`${a}static/images/ptzq.png`,aa=`${a}static/images/see.png`,sa=`${a}static/images/notSee.png`,ia=`${a}static/images/delete.png`,na=`${a}static/images/refund-order-bg.png`,ta=`${a}static/images/next.png`,ga=`${a}static/share/wechat.png`,ca=`${a}static/share/photo.png`,pa=s=>`${a}static/my/${s}`,oa=pa("signIn.png"),ea=pa("scancle.png"),$a=pa("none.png"),ma=pa("vip-1.png"),ra=s=>`${a}static/activity/${s}`,da=ra("groupBy/groupBy-bg.png"),ya=ra("afterVerification/qr-scan.png"),ha=s=>`${a}static/distribution/${s}`,la=ha("audit.png"),ua=ha("error.png"),fa=ha("team.png"),ba=ha("share.png"),ka=ha("money.png"),za=ha("order.png"),ja=ha("user.png"),qa=ha("goods.png"),Ea=ha("share-bg.png"),wa=s=>`${a}static/account/${s}`,xa=wa("sign-in-bg.png"),Ba=wa("ok.png"),Aa=wa("star.png"),Da=wa("integral-bg.png"),va=wa("sign-success-bg.png");export{U as $,o as A,e as B,aa as C,sa as D,ia as E,i as F,m as G,d as H,r as I,s as J,ta as K,y as L,l as M,f as N,u as O,b as P,h as Q,k as R,W as S,_ as T,Z as U,Y as V,X as W,c as X,Q as Y,R as Z,T as _,j as a,O as a0,N as a1,G as a2,P as a3,ga as a4,ca as a5,na as a6,C as a7,H as a8,L as a9,da as aa,ya as ab,fa as ac,ka as ad,za as ae,qa as af,ba as ag,ja as ah,Ea as ai,la as aj,ua as ak,xa as al,va as am,Ba as an,Aa as ao,Da as ap,q as b,E as c,w as d,n as e,x as f,B as g,A as h,D as i,v as j,I as k,J as l,K as m,S as n,ea as o,$ as p,oa as q,ma as r,$a as s,z as t,F as u,t as v,g as w,M as x,V as y,p as z};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.flex[data-v-a2ed81fa]{display:flex!important}.flex-wrap[data-v-a2ed81fa]{flex-wrap:wrap}.flex-nowrap[data-v-a2ed81fa]{flex-wrap:nowrap}.flex-lr__center[data-v-a2ed81fa]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-a2ed81fa]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-a2ed81fa]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-a2ed81fa]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-a2ed81fa]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-a2ed81fa]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-a2ed81fa]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-a2ed81fa]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-a2ed81fa]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-a2ed81fa]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-a2ed81fa]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-a2ed81fa]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-a2ed81fa]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-a2ed81fa]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-a2ed81fa]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-a2ed81fa]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-a2ed81fa]{flex-direction:column}.flex-jc__sb[data-v-a2ed81fa]{justify-content:space-between}.flex-jc__sa[data-v-a2ed81fa]{justify-content:space-around}.flex-jc__se[data-v-a2ed81fa]{justify-content:space-evenly}.flex-jc__start[data-v-a2ed81fa]{justify-content:flex-start}.flex-jc__center[data-v-a2ed81fa]{justify-content:center}.flex-jc__end[data-v-a2ed81fa]{justify-content:flex-end}.flex-ai__start[data-v-a2ed81fa]{align-items:flex-start}.flex-ai__center[data-v-a2ed81fa]{align-items:center}.flex-ai__end[data-v-a2ed81fa]{align-items:flex-end}.primary-color[data-v-a2ed81fa]{color:#ee6d46}.animation-button[data-v-a2ed81fa]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-a2ed81fa]:active{scale:1.1}.animation-button.disabled[data-v-a2ed81fa]{background:#999}.h5-tabbar-height[data-v-a2ed81fa]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-a2ed81fa]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.container[data-v-a2ed81fa]{--header-height: 0;--side-distance: .9375rem}.container .header-container[data-v-a2ed81fa]{width:100%;position:fixed;top:0;left:0;z-index:99}.container .header-container .system-bar-area[data-v-a2ed81fa]{width:100%;z-index:1}.container .header-container .header-row[data-v-a2ed81fa]{z-index:1;width:100%;height:var(--header-height);position:relative}.container .header-container .header-row .left[data-v-a2ed81fa],.container .header-container .header-row .right[data-v-a2ed81fa],.container .header-container .header-row .title[data-v-a2ed81fa]{position:absolute;top:50%;height:100%;transform:translateY(-50%);display:flex;align-items:center}.container .header-container .header-row .left[data-v-a2ed81fa]{left:var(--side-distance)}.container .header-container .header-row .right[data-v-a2ed81fa]{right:var(--side-distance)}.container .header-container .header-row .title[data-v-a2ed81fa]{left:50%;transform:translate(-50%) translateY(-50%);color:#333}.container .header-container .bg-mask[data-v-a2ed81fa]{z-index:0;position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;box-shadow:0 0 .46875rem rgba(162,162,162,.5)}.container .prop-up[data-v-a2ed81fa]{width:100%;height:var(--header-height)}.circle-back[data-v-a2ed81fa]{aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.7);border-radius:50%;box-shadow:0 0 .3125rem rgba(225,225,225,.48);border:.03125rem solid rgba(225,225,225,.8)}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.flex[data-v-d2f4925f]{display:flex!important}.flex-wrap[data-v-d2f4925f]{flex-wrap:wrap}.flex-nowrap[data-v-d2f4925f]{flex-wrap:nowrap}.flex-lr__center[data-v-d2f4925f]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-d2f4925f]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-d2f4925f]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-d2f4925f]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-d2f4925f]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-d2f4925f]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-d2f4925f]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-d2f4925f]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-d2f4925f]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-d2f4925f]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-d2f4925f]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-d2f4925f]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-d2f4925f]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-d2f4925f]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-d2f4925f]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-d2f4925f]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-d2f4925f]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-d2f4925f]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-d2f4925f]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-d2f4925f]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-d2f4925f]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-d2f4925f]{flex-direction:column}.flex-jc__sb[data-v-d2f4925f]{justify-content:space-between}.flex-jc__sa[data-v-d2f4925f]{justify-content:space-around}.flex-jc__se[data-v-d2f4925f]{justify-content:space-evenly}.flex-jc__start[data-v-d2f4925f]{justify-content:flex-start}.flex-jc__center[data-v-d2f4925f]{justify-content:center}.flex-jc__end[data-v-d2f4925f]{justify-content:flex-end}.flex-ai__start[data-v-d2f4925f]{align-items:flex-start}.flex-ai__center[data-v-d2f4925f]{align-items:center}.flex-ai__end[data-v-d2f4925f]{align-items:flex-end}.primary-color[data-v-d2f4925f]{color:#ee6d46}.animation-button[data-v-d2f4925f]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-d2f4925f]:active{scale:1.1}.animation-button.disabled[data-v-d2f4925f]{background:#999}.h5-tabbar-height[data-v-d2f4925f]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-d2f4925f]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.balance[data-v-d2f4925f]{padding:1rem;box-sizing:border-box;width:100%}.balance .balance-detail[data-v-d2f4925f]{padding:1rem;box-sizing:border-box;background:#333333;color:#fff;width:100%;border-radius:.46875rem}.balance .balance-detail .title[data-v-d2f4925f]{color:#999;font-size:.875rem;margin-bottom:.625rem}.balance .balance-detail .money[data-v-d2f4925f]{font-size:1.5rem}.balance .balance-detail .button[data-v-d2f4925f]{padding:.375rem 1.1875rem;box-sizing:border-box;background:#fff;border-radius:.46875rem;color:#333}.balance .list-card[data-v-d2f4925f]{width:100%;padding:1rem;box-sizing:border-box;background:#fff;border-radius:.46875rem;margin-top:.9375rem}.balance .list-card .title[data-v-d2f4925f]{font-size:1rem;font-weight:600}.balance .list-card .row[data-v-d2f4925f]{margin:.75rem 0}.balance .list-card .row .left .icon[data-v-d2f4925f]{width:2.5rem;height:2.5rem;border-radius:.3125rem;background:#b9b9b9;margin-right:.625rem}.balance .list-card .row .left .type-name[data-v-d2f4925f]{font-size:.875rem}.balance .list-card .row .left .time[data-v-d2f4925f]{color:#999;font-size:.75rem}.balance .list-card .row .right[data-v-d2f4925f]{padding:.21875rem 1.1875rem;box-sizing:border-box;border-radius:.3125rem}.balance .list-card .row .success[data-v-d2f4925f]{color:#28c445;background:rgba(40,196,69,.1)}.balance .list-card .row .error[data-v-d2f4925f]{color:#ee6d46;background:#FFF7F5}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.flex[data-v-8e2af78d]{display:flex!important}.flex-wrap[data-v-8e2af78d]{flex-wrap:wrap}.flex-nowrap[data-v-8e2af78d]{flex-wrap:nowrap}.flex-lr__center[data-v-8e2af78d]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-8e2af78d]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-8e2af78d]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-8e2af78d]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-8e2af78d]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-8e2af78d]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-8e2af78d]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-8e2af78d]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-8e2af78d]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-8e2af78d]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-8e2af78d]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-8e2af78d]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-8e2af78d]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-8e2af78d]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-8e2af78d]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-8e2af78d]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-8e2af78d]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-8e2af78d]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-8e2af78d]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-8e2af78d]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-8e2af78d]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-8e2af78d]{flex-direction:column}.flex-jc__sb[data-v-8e2af78d]{justify-content:space-between}.flex-jc__sa[data-v-8e2af78d]{justify-content:space-around}.flex-jc__se[data-v-8e2af78d]{justify-content:space-evenly}.flex-jc__start[data-v-8e2af78d]{justify-content:flex-start}.flex-jc__center[data-v-8e2af78d]{justify-content:center}.flex-jc__end[data-v-8e2af78d]{justify-content:flex-end}.flex-ai__start[data-v-8e2af78d]{align-items:flex-start}.flex-ai__center[data-v-8e2af78d]{align-items:center}.flex-ai__end[data-v-8e2af78d]{align-items:flex-end}.primary-color[data-v-8e2af78d]{color:#ee6d46}.animation-button[data-v-8e2af78d]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-8e2af78d]:active{scale:1.1}.animation-button.disabled[data-v-8e2af78d]{background:#999}.h5-tabbar-height[data-v-8e2af78d]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-8e2af78d]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.recommend-container[data-v-8e2af78d]{padding:.625rem .9375rem;box-sizing:border-box;width:100%}.recommend-container .title-row[data-v-8e2af78d]{width:100%;font-size:1rem;text-align:center;position:relative;color:#333;font-weight:700}.recommend-container .title-row[data-v-8e2af78d]:before,.recommend-container .title-row[data-v-8e2af78d]:after{content:"";position:absolute;width:10%;height:.09375rem;border-radius:.15625rem;background:#333;top:50%;transform:translateY(50%)}.recommend-container .title-row[data-v-8e2af78d]:before{left:25%}.recommend-container .title-row[data-v-8e2af78d]:after{right:25%}.product-box[data-v-8e2af78d]{margin-top:.9375rem;width:100%;box-sizing:border-box;overflow:hidden}.product-box .goods-col[data-v-8e2af78d]{width:49%;display:flex;flex-wrap:wrap;justify-content:space-between;flex-grow:0;float:left}.product-box .goods-col[data-v-8e2af78d]:nth-child(2){float:right}.product-box .goods-col .product[data-v-8e2af78d]{flex-grow:0;width:100%;background:#fff;border-radius:.625rem;overflow:hidden;margin-bottom:.625rem}.product-box .goods-col .product .good-bottom[data-v-8e2af78d]{display:flex;align-items:center;justify-content:space-between;font-size:.625rem}.product-box .goods-col .product .good-bottom .price[data-v-8e2af78d]{font-size:.875rem}.product-box .goods-col .product .good-bottom .sale[data-v-8e2af78d]{color:#999}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.flex[data-v-3fd0056f]{display:flex!important}.flex-wrap[data-v-3fd0056f]{flex-wrap:wrap}.flex-nowrap[data-v-3fd0056f]{flex-wrap:nowrap}.flex-lr__center[data-v-3fd0056f]{justify-content:space-between;align-items:center}.flex-lr__start[data-v-3fd0056f]{justify-content:space-between;align-items:flex-start}.flex-lr__end[data-v-3fd0056f]{justify-content:space-between;align-items:flex-end}.flex-start__center[data-v-3fd0056f]{justify-content:flex-start;align-items:center}.flex-start__start[data-v-3fd0056f]{justify-content:flex-start;align-items:flex-start}.flex-start__end[data-v-3fd0056f]{justify-content:flex-start;align-items:flex-end}.flex-end__center[data-v-3fd0056f]{justify-content:flex-end;align-items:center}.flex-end__start[data-v-3fd0056f]{justify-content:flex-start;align-items:flex-start}.flex-end__end[data-v-3fd0056f]{justify-content:flex-end;align-items:flex-end}.flex-tb__center[data-v-3fd0056f]{flex-direction:column;justify-content:space-between;align-items:center}.flex-tb__start[data-v-3fd0056f]{flex-direction:column;justify-content:space-between;align-items:flex-start}.flex-tb__end[data-v-3fd0056f]{flex-direction:column;justify-content:space-between;align-items:flex-end}.flex-top__center[data-v-3fd0056f]{flex-direction:column;justify-content:flex-start;align-items:center}.flex-top__start[data-v-3fd0056f]{flex-direction:column;justify-content:flex-start;align-items:flex-start}.flex-top__end[data-v-3fd0056f]{flex-direction:column;justify-content:flex-start;align-items:flex-end}.flex-bottom__center[data-v-3fd0056f]{flex-direction:column;justify-content:flex-end;align-items:center}.flex-bottom__start[data-v-3fd0056f]{flex-direction:column;justify-content:flex-end;align-items:flex-start}.flex-bottom__end[data-v-3fd0056f]{flex-direction:column;justify-content:flex-end;align-items:flex-end}.flex-center__center[data-v-3fd0056f]{flex-direction:column;justify-content:center;align-items:center}.flex-center__start[data-v-3fd0056f]{flex-direction:column;justify-content:center;align-items:flex-start}.flex-center_end[data-v-3fd0056f]{flex-direction:column;justify-content:center;align-items:flex-end}.flex-column[data-v-3fd0056f]{flex-direction:column}.flex-jc__sb[data-v-3fd0056f]{justify-content:space-between}.flex-jc__sa[data-v-3fd0056f]{justify-content:space-around}.flex-jc__se[data-v-3fd0056f]{justify-content:space-evenly}.flex-jc__start[data-v-3fd0056f]{justify-content:flex-start}.flex-jc__center[data-v-3fd0056f]{justify-content:center}.flex-jc__end[data-v-3fd0056f]{justify-content:flex-end}.flex-ai__start[data-v-3fd0056f]{align-items:flex-start}.flex-ai__center[data-v-3fd0056f]{align-items:center}.flex-ai__end[data-v-3fd0056f]{align-items:flex-end}.primary-color[data-v-3fd0056f]{color:#ee6d46}.animation-button[data-v-3fd0056f]{background:#ee6d46;color:#fff;transition:all .3s}.animation-button[data-v-3fd0056f]:active{scale:1.1}.animation-button.disabled[data-v-3fd0056f]{background:#999}.h5-tabbar-height[data-v-3fd0056f]{width:100%;height:var(--window-bottom)}.tabbar-height[data-v-3fd0056f]{height:3.6875rem;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.account-setting .card[data-v-3fd0056f]{padding:0 1.0625rem;box-sizing:border-box;background:#fff;margin-bottom:.625rem}.account-setting .card .cell-row[data-v-3fd0056f]{padding:1.40625rem 0;box-sizing:border-box;display:flex;flex-direction:row;flex-wrap:nowrap;gap:0;justify-content:space-between;align-items:center;border-bottom:.03125rem solid #E6E6E6}.account-setting .card .cell-row[data-v-3fd0056f]:last-child{border-bottom:0}.account-setting .card .cell-row .label[data-v-3fd0056f]{font-size:.875rem;color:#333}.account-setting .card .cell-row .value[data-v-3fd0056f]{display:flex;flex-direction:row;flex-wrap:nowrap;gap:.3125rem;justify-content:flex-end;align-items:center;font-size:.875rem;color:#999}.account-setting .card .cell-row .value uni-input[data-v-3fd0056f]{text-align:right}.account-setting .button[data-v-3fd0056f]{padding:.78125rem 1.0625rem;box-sizing:border-box;text-align:center}

Some files were not shown because too many files have changed in this diff Show More