Compare commits

...

13 Commits

Author SHA1 Message Date
duanshuwen
0bffc08a93 fix: 退款异常问题修复 2025-10-07 17:59:25 +08:00
duanshuwen
f095e12b46 fix: 还原退款 2025-10-07 17:24:07 +08:00
duanshuwen
f95a51cad8 fix: 退款问题修复 2025-10-07 17:19:45 +08:00
duanshuwen
500c44ebea fix: 待支付|再次预定交互逻辑调整 2025-10-07 16:31:35 +08:00
duanshuwen
3646870695 feat: 修复商品下单节流 2025-10-07 14:26:17 +08:00
duanshuwen
56f7f9d426 feat: 字体大小16px替换全局变量 2025-10-06 17:35:29 +08:00
duanshuwen
637c5f674b feat: 圆角50px替换全局变量 2025-10-06 17:30:17 +08:00
duanshuwen
dad5c4cc5e feat: 圆角50%替换全局变量|颜色#999替换全局变量 2025-10-06 17:25:28 +08:00
duanshuwen
6f477f3513 feat: 订单卡片图片图标替换成字体图标 2025-10-06 13:25:45 +08:00
duanshuwen
c8e51e4975 feat: 替换sass版本,定义全局样式,实现简单的页面布局操作,比如颜色、边距、圆角等 2025-10-06 13:13:16 +08:00
duanshuwen
e0f0e90635 feat: 样式优化 2025-10-05 16:24:17 +08:00
duanshuwen
59c8fd515b feat: 订单样式优化 2025-10-05 15:59:39 +08:00
duanshuwen
e58ded9b84 feat: 优化订单详情滚动交互 2025-10-05 11:54:09 +08:00
121 changed files with 15492 additions and 1486 deletions

4
.npmrc Normal file
View File

@ -0,0 +1,4 @@
registry=https://registry.npmmirror.com
sass_binary_site=https://cdn.npmmirror.com/binaries/node-sass
shamefully-hoist=true

12097
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -72,7 +72,7 @@
"@dcloudio/vite-plugin-uni": "3.0.0-4070620250821001",
"@vue/runtime-core": "^3.4.21",
"@vue/tsconfig": "^0.1.3",
"sass": "^1.93.0",
"sass": "1.58.3",
"vite": "5.2.8"
}
}

View File

@ -25,5 +25,5 @@ const props = defineProps({
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -474,5 +474,5 @@ onBeforeUnmount(() => {
<style lang="scss" scoped>
//
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -80,7 +80,7 @@ $font-size-label: 10px;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 50%;
border-radius: $uni-border-radius-circle;
transition: background-color 0.2s;
&:active {

View File

@ -40,5 +40,5 @@ const onChange = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -14,5 +14,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -7,5 +7,5 @@
.command-text {
color: #fff;
font-size: 14px;
font-size: $uni-font-size-base;
}

View File

@ -252,5 +252,5 @@ onMounted(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -3,10 +3,10 @@
}
.order-header {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
margin-bottom: 10px;
color: #333;
color: $uni-text-color;
}
.order-content {
@ -28,7 +28,7 @@
width: 24px;
height: 24px;
margin-right: 8px;
border-radius: 50%;
border-radius: $uni-border-radius-circle;
background-color: #ffa500;
display: flex;
align-items: center;
@ -36,9 +36,9 @@
}
.order-description {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
color: #333;
color: $uni-text-color;
}
.order-line {
@ -54,7 +54,7 @@
top: -8px;
width: 16px;
height: 16px;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
background-color: #eff6fa;
}
@ -75,8 +75,8 @@
display: flex;
align-items: center;
margin-bottom: 10px;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
.detail-label {
@ -85,15 +85,15 @@
}
.detail-value {
color: #333;
color: $uni-text-color;
}
.detail-input {
border: none;
outline: none;
width: calc(100% - 80px);
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
border-bottom: 1px solid #ddd;
}
@ -101,8 +101,8 @@
border: none;
outline: none;
width: 100%;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
.order-button {
@ -110,7 +110,7 @@
height: 42px;
background: linear-gradient(90deg, #ff7e00, #ffba00);
color: #fff;
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 600;
border-radius: 20px;
margin-top: 20px;
@ -131,9 +131,9 @@
.order-button-secondary {
flex: 1;
height: 42px;
background: linear-gradient(90deg, #0256FF, #00A6FF);
background: linear-gradient(90deg, #0256ff, #00a6ff);
color: #fff;
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 600;
border: none;
border-radius: 20px;
@ -148,7 +148,7 @@
height: 42px;
background: linear-gradient(90deg, #ff7e00, #ffba00);
color: #fff;
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 600;
border-radius: 20px;
display: flex;
@ -160,7 +160,7 @@
margin-bottom: 12px;
display: flex;
align-items: center;
font-size: 14px;
font-size: $uni-font-size-base;
color: #ed6a0c;
}

View File

@ -3,5 +3,5 @@
</template>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,30 +1,36 @@
.divider {
height: 1px;
margin: 0 10px;
background: linear-gradient(to right, #eee, #eee 5px, transparent 5px, transparent);
background: linear-gradient(
to right,
#eee,
#eee 5px,
transparent 5px,
transparent
);
background-size: 10px 100%;
position: relative;
&::before, &::after {
position: absolute;
content: '';
height: 12px;
width: 6px;
background-color: #E2EDF2;
top: 50%;
transform: translateY(-50%);
}
// &::before, &::after {
// position: absolute;
// content: '';
// height: 12px;
// width: 6px;
&::before {
border-radius: 0 20px 20px 0;
top: 0;
left: -10px;
}
// background-color: #E2EDF2;
// top: 50%;
// transform: translateY(-50%);
// }
&::after {
border-radius: 20px 0 0 20px;
top: 0;
right: -10px;
}
}
// &::before {
// border-radius: 0 20px 20px 0;
// top: 0;
// left: -10px;
// }
// &::after {
// border-radius: 20px 0 0 20px;
// top: 0;
// right: -10px;
// }
}

View File

@ -141,5 +141,5 @@ onMounted(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -3,10 +3,10 @@
}
.order-header {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
margin-bottom: 10px;
color: #333;
color: $uni-text-color;
}
.order-content {
@ -22,8 +22,8 @@
display: flex;
align-items: start;
margin-bottom: 12px;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
.detail-label {
@ -32,14 +32,14 @@
}
.detail-value {
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
.detail-textarea {
width: 100%;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
border-radius: 4px;
border: 1px solid #ddd;
padding: 8px;
@ -49,8 +49,8 @@
border: none;
outline: none;
width: 100%;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
border-bottom: 1px solid #ddd;
padding-left: 8px;
}
@ -59,7 +59,7 @@
width: 300px;
height: 42px;
color: #fff;
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 600;
border-radius: 21px;
margin-top: 24px;
@ -69,7 +69,7 @@
}
.submit-button {
background: linear-gradient(90deg, #ff7e00, #ffba00);
background: linear-gradient(179deg, #00a6ff 0%, #0256ff 100%);
}
.look-button {
@ -80,7 +80,7 @@
margin-bottom: 12px;
display: flex;
align-items: center;
font-size: 14px;
font-size: $uni-font-size-base;
color: #ed6a0c;
}

View File

@ -175,5 +175,5 @@ defineExpose({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,7 +1,7 @@
// SASS 变量定义
$form-primary-color: #00a6ff;
$form-error-color: #ff4d4f;
$form-text-color: #333;
$form-text-color: $uni-text-color;
$form-label-color: #86909c;
$form-border-color: #ddd;
$form-input-border-color: #ddd;
@ -48,7 +48,7 @@ $form-transition: all 0.2s ease;
.form-title {
margin-left: 8px;
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 500;
color: $form-primary-color;
flex: 1;
@ -85,7 +85,7 @@ $form-transition: all 0.2s ease;
}
.form-label {
font-size: 14px;
font-size: $uni-font-size-base;
color: $form-label-color;
width: 50px;
flex-shrink: 0;
@ -95,7 +95,7 @@ $form-transition: all 0.2s ease;
.form-input {
flex: 1;
font-size: 14px;
font-size: $uni-font-size-base;
color: $form-text-color;
border: none;
border-bottom: 1px solid $form-input-border-color;
@ -127,7 +127,7 @@ $form-transition: all 0.2s ease;
}
.form-error {
font-size: 12px;
font-size: $uni-font-size-sm;
color: $form-error-color;
margin-top: 6px;
margin-left: 60px;

View File

@ -58,5 +58,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use './styles/index.scss';
@import "./styles/index.scss";
</style>

View File

@ -23,8 +23,8 @@
flex-shrink: 0;
.module-title {
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
text-align: center;
word-wrap: break-word;
margin-left: 4px;
@ -33,7 +33,7 @@
.module-desc {
flex: 1;
font-size: 12px;
font-size: $uni-font-size-sm;
color: #666;
line-height: 1.5;
margin-top: 4px;

View File

@ -47,7 +47,11 @@
:id="`thumbnail-${index}`"
@click="handleThumbnailClick(index)"
>
<image class="thumbnail-image" :src="thumb.photoUrl" mode="aspectFill"></image>
<image
class="thumbnail-image"
:src="thumb.photoUrl"
mode="aspectFill"
></image>
<text>{{ thumb.photoName }}</text>
</view>
</view>
@ -159,5 +163,5 @@ const handleSwiperChange = (e) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -19,7 +19,7 @@
right: 8px;
z-index: 10;
background: rgba(0, 0, 0, 0.5);
border-radius: 50px;
border-radius: $uni-border-radius-50px;
padding: 3px 8px;
font-size: 8px;
color: #fff;

View File

@ -48,5 +48,5 @@ const openMap = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -7,8 +7,8 @@
background-size: cover;
background-position: center;
border-radius: 20px;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
position: relative;
overflow: hidden;
@ -30,15 +30,15 @@
}
.location-label {
color: #333;
font-size: 14px;
color: $uni-text-color;
font-size: $uni-font-size-base;
font-weight: 500;
}
.address-text {
margin-top: 4px;
color: #666;
font-size: 12px;
font-size: $uni-font-size-sm;
font-weight: 400;
}

View File

@ -42,5 +42,5 @@ const openMap = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,8 +1,8 @@
.store-address {
display: flex;
align-items: center;
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
text {
flex: 1;

View File

@ -1,7 +1,7 @@
<template>
<view class="module-header mb12">
<text class="module-title">{{ title }}</text>
<image class="underline" src="./images/wave_icon.png" mode="aspectFill"/>
<image class="underline" src="./images/wave_icon.png" mode="aspectFill" />
</view>
</template>
@ -9,11 +9,11 @@
defineProps({
title: {
type: String,
default: '图片详情'
}
default: "图片详情",
},
});
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -48,5 +48,5 @@ const orderStatusText = computed(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -15,7 +15,7 @@
.order-icon {
width: 20px;
height: 20px;
border-radius: 50%;
border-radius: $uni-border-radius-circle;
background-color: #ffa500;
display: flex;
align-items: center;
@ -24,18 +24,18 @@
}
.order-title {
font-size: 16px;
color: #333;
font-size: $uni-font-size-lg;
color: $uni-text-color;
}
.order-status {
font-size: 14px;
font-size: $uni-font-size-base;
padding: 5px 10px;
border-radius: 15px;
}
.status-canceled {
color: #999;
color: $uni-text-color-grey;
border: 1px solid #999;
}
@ -70,12 +70,12 @@
}
.detail-label {
font-size: 14px;
font-size: $uni-font-size-base;
color: #666;
margin-right: 10px;
}
.detail-value {
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}

View File

@ -3,14 +3,23 @@
<view class="content">
<view class="title">隐私保护指引</view>
<view class="des">
请您仔细阅读并充分理解<text class="link" @click="handleOpenPrivacyContract">{{ privacyContractName }}</text>
如您同意前述协议的全部内容请点击同意开始使用<text class="cancel">如您不同意将被限制使用部分功能或将在您使用具体功能前再次询问以取得您的授权同意</text>
请您仔细阅读并充分理解<text
class="link"
@click="handleOpenPrivacyContract"
>{{ privacyContractName }}</text
>
如您同意前述协议的全部内容请点击同意开始使用<text class="cancel"
>如您不同意将被限制使用部分功能或将在您使用具体功能前再次询问以取得您的授权同意</text
>
</view>
<view class="btns">
<button class="reject" @click="handleDisagree">拒绝</button>
<button class="agree" open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization">
<button
class="agree"
open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization"
>
同意
</button>
</view>
@ -19,11 +28,11 @@
</template>
<script setup>
import { ref } from 'vue'
import { ref } from "vue";
import { onShow } from "@dcloudio/uni-app";
const showPrivacy = ref(true)
const privacyContractName = ref('隐私保护指引')
const showPrivacy = ref(true);
const privacyContractName = ref("隐私保护指引");
onShow(() => {
//
@ -34,7 +43,7 @@ onShow(() => {
console.log("cj隐私配置", res);
if (res.errMsg == "getPrivacySetting:ok" && res.needAuthorization) {
privacyContractName.value = res.privacyContractName;
showPrivacy.value = res.needAuthorization
showPrivacy.value = res.needAuthorization;
}
},
});
@ -44,36 +53,33 @@ onShow(() => {
// #ifdef MP-TOUTIAO
uni.getPrivacySetting({
success: (res) => {
console.log(res)
}
})
console.log(res);
},
});
// #endif
})
});
//
const handleDisagree = () => {
showPrivacy.value = false
}
showPrivacy.value = false;
};
//
const handleAgreePrivacyAuthorization = () => {
showPrivacy.value = false
}
showPrivacy.value = false;
};
//
const handleOpenPrivacyContract = () => {
//
// #ifdef MP-WEIXIN
wx.openPrivacyContract({
fail: () => { }
})
fail: () => {},
});
// #endif
}
};
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -43,7 +43,7 @@
.reject,
.agree {
border-radius: 50px;
border-radius: $uni-border-radius-50px;
width: 45%;
border: none;
font-size: 18px;
@ -57,7 +57,7 @@
.reject {
color: #000;
background-color: #f5f5f5;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
}
.agree {

View File

@ -17,5 +17,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -4,8 +4,8 @@
.response-intro-text {
font-weight: 500;
font-size: 14px;
color: #333333;
font-size: $uni-font-size-base;
color: $uni-text-color;
line-height: 20px;
text-align: justify;
}

View File

@ -7,5 +7,5 @@
<script setup></script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -36,5 +36,5 @@ const handleClick = (type) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -9,7 +9,7 @@
}
.header-text {
font-size: 12px;
font-size: $uni-font-size-sm;
color: #6b84a2;
}
@ -46,8 +46,8 @@
rgba(255, 255, 255, 0.5),
rgba(255, 255, 255, 1)
);
font-size: 12px;
font-size: $uni-font-size-sm;
font-weight: 500;
color: #00a6ff;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
}

View File

@ -109,7 +109,7 @@ defineExpose({
align-items: center;
background-color: #00a6ff;
height: 44px;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
}
.audio-visualizer {

View File

@ -59,5 +59,5 @@ const increase = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -5,7 +5,7 @@
.stepper-text {
width: 40px;
font-size: 16px;
color: #333;
font-size: $uni-font-size-lg;
color: $uni-text-color;
text-align: center;
}

View File

@ -25,5 +25,5 @@ defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -19,15 +19,15 @@
.sum-label {
font-size: 15px;
color: #333;
color: $uni-text-color;
}
.sum-value {
font-size: 14px;
color: #999;
font-size: $uni-font-size-base;
color: $uni-text-color-grey;
}
.sum-discount {
font-size: 14px;
font-size: $uni-font-size-base;
color: #ff5722;
}

View File

@ -11,5 +11,5 @@ const tags = ["门票套餐", "民俗活动", "车程路况"];
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -7,7 +7,7 @@
background-color: #fff;
border-radius: 10px;
padding: 8px 16px;
font-size: 12px;
color: #00A6FF;
font-size: $uni-font-size-sm;
color: #00a6ff;
white-space: nowrap;
}
}

View File

@ -1,22 +1,27 @@
<template>
<view :class="navBarClass" :style="navBarStyle">
<!-- 状态栏占位 -->
<view :style="{ height: statusBarHeight + 'px' }" v-if="!hideStatusBar"></view>
<view
:style="{ height: statusBarHeight + 'px' }"
v-if="!hideStatusBar"
></view>
<!-- 导航栏内容 -->
<view class="nav-bar-content" :style="{ height: navBarHeight + 'px' }">
<!-- 左侧返回按钮 -->
<view class="nav-bar-left" @click="handleBack" v-if="showBack">
<uni-icons type="left" size="20" :color="backIconColor" />
</view>
<!-- 中间标题区域 -->
<view :class="['nav-bar-center', `nav-bar-center--${titleAlign}`]">
<slot name="title">
<text class="nav-bar-title" :style="{ color: titleColor }">{{ title }}</text>
<text class="nav-bar-title" :style="{ color: titleColor }">{{
title
}}</text>
</slot>
</view>
<!-- 右侧操作区域 -->
<view class="nav-bar-right">
<slot name="right"></slot>
@ -26,108 +31,114 @@
</template>
<script setup>
import { computed, onMounted, ref } from 'vue'
import { computed, onMounted, ref } from "vue";
// props
const props = defineProps({
//
title: {
type: String,
default: ''
default: "",
},
//
fixed: {
type: Boolean,
default: false
default: false,
},
//
shadow: {
type: Boolean,
default: true,
},
//
showBack: {
type: Boolean,
default: true
default: true,
},
//
backgroundColor: {
type: String,
default: '#ffffff'
default: "#ffffff",
},
//
titleColor: {
type: String,
default: '#333333'
default: "#333333",
},
//
backIconColor: {
type: String,
default: '#333333'
default: "#333333",
},
//
hideStatusBar: {
type: Boolean,
default: false
default: false,
},
// z-index
zIndex: {
type: Number,
default: 999
default: 999,
},
//
titleAlign: {
type: String,
default: 'center', // 'center' | 'left'
validator: (value) => ['center', 'left'].includes(value)
}
})
default: "center", // 'center' | 'left'
validator: (value) => ["center", "left"].includes(value),
},
});
// emits
const emit = defineEmits(['back'])
const emit = defineEmits(["back"]);
//
const statusBarHeight = ref(0)
const navBarHeight = ref(44) //
const statusBarHeight = ref(0);
const navBarHeight = ref(44); //
//
onMounted(() => {
const systemInfo = uni.getSystemInfoSync()
statusBarHeight.value = systemInfo.statusBarHeight || 0
const systemInfo = uni.getSystemInfoSync();
statusBarHeight.value = systemInfo.statusBarHeight || 0;
//
if (systemInfo.platform === 'ios') {
navBarHeight.value = 44
if (systemInfo.platform === "ios") {
navBarHeight.value = 44;
} else {
navBarHeight.value = 48
navBarHeight.value = 48;
}
})
});
//
const navBarClass = computed(() => {
return [
'top-nav-bar',
"top-nav-bar",
{
'top-nav-bar--fixed': props.fixed
}
]
})
"top-nav-bar--fixed": props.fixed,
"has-shadow": props.shadow,
},
];
});
//
const navBarStyle = computed(() => {
return {
backgroundColor: props.backgroundColor,
zIndex: props.zIndex
}
})
zIndex: props.zIndex,
};
});
//
const handleBack = () => {
emit('back')
emit("back");
// back
if (!emit('back')) {
if (!emit("back")) {
uni.navigateBack({
delta: 1
})
delta: 1,
});
}
}
};
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
</style>
@import "./styles/index.scss";
</style>

View File

@ -1,8 +1,11 @@
// TopNavBar 组件样式
.top-nav-bar {
width: 100%;
background-color: #ffffff;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.1);
background-color: $uni-bg-color;
&.has-shadow {
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.1);
}
&--fixed {
position: fixed;
@ -44,6 +47,7 @@
.nav-bar-center {
flex: 1;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
@ -71,7 +75,7 @@
.nav-bar-title {
font-size: 18px;
font-weight: 500;
color: #333333;
color: $uni-text-color;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;

View File

@ -22,5 +22,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -14,6 +14,6 @@
.empty-text {
margin-top: 10px;
font-size: 14px;
font-size: $uni-font-size-base;
color: #666666;
}
}

View File

@ -123,5 +123,5 @@ const formatServiceAmount = (amount) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -26,5 +26,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -7,7 +7,7 @@
.notice-title {
display: flex;
align-items: center;
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 500;
color: #333;
color: $uni-text-color;
}

View File

@ -31,15 +31,15 @@ const props = defineProps({
}
.label {
font-size: 12px;
font-size: $uni-font-size-sm;
color: #666666;
flex-shrink: 0;
margin-right: 8px;
}
.value {
font-size: 14px;
color: #333333;
font-size: $uni-font-size-base;
color: $uni-text-color;
flex: 1;
}
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

View File

@ -7,11 +7,14 @@
<view class="order-title">
{{ orderData.workOrderTypeName || orderData.commodityName }}
</view>
<image
v-if="props.orderData.orderType !== undefined"
<uni-icons
class="arrow-icon"
src="./images/arrow.png"
></image>
v-if="props.orderData.orderType !== undefined"
type="right"
color="#999"
size="16"
/>
</view>
<view
v-if="orderData.status !== 'pending'"
@ -33,7 +36,7 @@
</template>
<script setup>
import { defineProps, defineExpose } from "vue";
import { defineProps } from "vue";
import Divider from "@/components/Divider/index.vue";
import OrderCardContent from "./OrderCardContent.vue";
import serviceIcon from "./images/service.png";
@ -117,5 +120,5 @@ const handleCardClick = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -4,6 +4,11 @@
box-shadow: 0px 3px 8px 0 rgba(0, 0, 0, 0.12);
margin: 12px;
transition: all 0.3s ease;
mask: radial-gradient(circle at 0 57px, #0000 6px, red 0),
radial-gradient(circle at right 57px, #0000 6px, red 0);
mask-size: 50%;
mask-position: 0, 100%;
mask-repeat: no-repeat;
&:active {
transform: scale(0.98);
@ -36,9 +41,9 @@
}
.order-title {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
color: #333333;
color: $uni-text-color;
line-height: 1.4;
}
@ -51,7 +56,7 @@
box-sizing: border-box;
padding: 6px 16px;
border-radius: 20px;
font-size: 12px;
font-size: $uni-font-size-sm;
font-weight: 500;
&.tag-0 {

View File

@ -27,7 +27,7 @@
v-if="shouldShowButton"
:class="['reserve-button', { loading: isLoading }]"
:disabled="isLoading"
@click="handleButtonClick"
@click="handleButtonClick(orderData)"
>
{{ isLoading ? "处理中..." : buttonText }}
</button>
@ -52,7 +52,7 @@ const PAY_WAY_MAP = {
const isLoading = ref(false);
//
const emit = defineEmits(["show-refund-popup"]);
const emit = defineEmits(["show-refund-popup", "pay-success"]);
const props = defineProps({
orderData: {
@ -80,7 +80,7 @@ const formattedAmount = computed(() => {
return amount ? `${parseFloat(amount).toFixed(2)}` : "0.00";
});
//
// 0- 1- 2-使 3- 4-退 5- 6-
const buttonText = computed(() => {
const status = props.orderData.orderStatus;
switch (status) {
@ -88,62 +88,109 @@ const buttonText = computed(() => {
return "立即支付";
case "2": // 使
return "申请退款";
default: //
case "3": //
case "5": //
case "6": //
return "再次预定";
}
});
// 退
// 使
const shouldShowButton = computed(() => {
return props.orderData.orderStatus !== "4"; // 4-退
const status = props.orderData.orderStatus;
return ["0", "2", "3", "5", "6"].includes(status);
});
//
const handleButtonClick = async () => {
const handleButtonClick = async (orderData) => {
if (isLoading.value) return; //
const status = props.orderData.orderStatus;
const orderId = props.orderData.orderId;
//
const payWay = props.orderData.payWay;
//
const paySource = "1";
if (status === "2") {
// 2使退
emit("show-refund-popup");
return; //
}
try {
isLoading.value = true;
// 1
//
const res = await orderPayNow({ orderId, payWay, paySource });
console.log(res);
const status = orderData.orderStatus;
//
uni.requestPayment({
provider: "wxpay",
timeStamp: String(Date.now()),
nonceStr: "A1B2C3D4E5",
package: "prepay_id=wx20180101abcdefg",
signType: "MD5",
paySign: "",
success: (res) => {
console.log("success:" + JSON.stringify(res));
},
fail: (err) => {
console.log("fail:" + JSON.stringify(err));
},
});
if (status === "2") {
// 2使退
emit("show-refund-popup");
return; //
}
//
if (["3", "5", "6"].includes(status)) {
uni.navigateTo({
url: `/pages/goods/index?commodityId=${orderData.commodityId}`,
});
}
//
if (status === "0") {
const orderId = orderData.orderId;
const payWay = orderData.payWay;
const paySource = orderData.paySource;
const res = await orderPayNow({ orderId, payWay, paySource });
console.log("确认订单---2:", res);
//
if (!res || !res.data) {
uni.showToast({
title: "订单创建失败,请重试",
icon: "none",
duration: 2000,
});
return;
}
const { data } = res;
const { nonceStr, packageVal, paySign, signType, timeStamp } = data;
//
if (!nonceStr || !packageVal || !paySign || !signType || !timeStamp) {
console.error("支付参数不完整:", {
nonceStr: !!nonceStr,
packageVal: !!packageVal,
paySign: !!paySign,
signType: !!signType,
timeStamp: !!timeStamp,
});
uni.showToast({
title: "支付参数错误,请重试",
icon: "none",
duration: 2000,
});
return;
}
//
uni.requestPayment({
provider: "wxpay",
timeStamp: String(timeStamp), //
nonceStr: String(nonceStr),
package: String(packageVal), //
signType: String(signType),
paySign: String(paySign),
success: () => {
uni.showToast({
title: "支付成功",
icon: "success",
duration: 2000,
success: () => {
emit("pay-success");
},
});
},
fail: (err) => {
uni.showToast({
title: "支付失败,请重试",
icon: "none",
duration: 2000,
});
},
});
}
} catch (error) {
console.error("操作失败:", error);
uni.showToast({
title: error.message || "操作失败,请重试",
icon: "none",
});
} finally {
isLoading.value = false;
}
@ -157,5 +204,5 @@ const openFeedback = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,14 +1,9 @@
@use "sass:color";
// SASS变量定义提高可维护性和编译性能
// 颜色系统
$order-bg-color: #fff;
$text-color-primary: #333;
$text-color-secondary: #666;
$text-color-accent: #ff5722;
$button-color: #00a6ff;
$button-hover-color: color.scale($button-color, $lightness: -16%);
$button-disabled-color: #ccc;
$border-color: #ececec;
$shadow-color: rgba(0, 0, 0, 0.08);
@ -33,16 +28,6 @@ $font-weight-semibold: 600;
$transition-fast: 0.2s ease;
$transition-normal: 0.3s ease;
// 动画关键帧
@keyframes loading-spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.order-info {
background-color: $order-bg-color;
border-radius: $order-border-radius;
@ -127,55 +112,15 @@ $transition-normal: 0.3s ease;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
height: $button-height;
font-size: $font-size-medium;
font-weight: $font-weight-medium;
margin-top: $spacing-large;
position: relative;
overflow: hidden;
transition: all $transition-normal;
letter-spacing: 0.5px;
// 按钮波纹效果
&::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
&:hover {
background: linear-gradient(
135deg,
$button-hover-color 0%,
color.scale($button-hover-color, $lightness: -11.9%) 100%
);
transform: translateY(-2px);
box-shadow: 0 4px 16px rgba($button-color, 0.4);
&::before {
width: 300px;
height: 300px;
}
}
&:active {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba($button-color, 0.3);
}
&:focus {
outline: none;
box-shadow: 0 0 0 3px rgba($button-color, 0.3);
}
&:disabled {
background: $button-disabled-color;
cursor: not-allowed;
@ -198,21 +143,6 @@ $transition-normal: 0.3s ease;
&::before {
display: none;
}
// 加载动画
&::after {
content: "";
position: absolute;
left: 50%;
top: 50%;
width: 16px;
height: 16px;
margin: -8px 0 0 -8px;
border: 2px solid transparent;
border-top: 2px solid #fff;
border-radius: 50%;
animation: loading-spin 1s linear infinite;
}
}
}

View File

@ -31,5 +31,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,5 +1,5 @@
.order-qrcode {
background: #ffffff;
background-color: $uni-bg-color;
border-radius: 10px;
box-sizing: border-box;
display: flex;
@ -10,7 +10,7 @@
margin-bottom: 12px;
text {
font-size: 12px;
font-size: $uni-font-size-sm;
color: #666666;
line-height: 17px;
margin-top: 4px;

View File

@ -85,5 +85,5 @@ const statusDescription = computed(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -24,5 +24,5 @@
}
.status-description {
font-size: 12px;
}
font-size: $uni-font-size-sm;
}

View File

@ -98,7 +98,7 @@ const refundAmount = computed(() => {
});
// 退
const isRefundable = computed(() => !props.orderData.refundable);
const isRefundable = computed(() => props.orderData.refundable);
//
const btnText = computed(() => (isRefundable.value ? "点击退款" : "我知道了"));
@ -113,9 +113,9 @@ const commodityPurchaseInstruction = computed(() => {
});
//
const show = () => popupRef.value.open();
const show = () => popupRef.value && popupRef.value.open();
const hide = () => popupRef.value.close();
const hide = () => popupRef.value && popupRef.value.close();
// modelValue
watch(
@ -150,5 +150,5 @@ const handleConfirmClick = (text) => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -25,9 +25,9 @@
}
&__title {
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 500;
color: #333;
color: $uni-text-color;
line-height: 22px;
margin-bottom: 12px;
text-align: center;
@ -40,7 +40,7 @@
margin-bottom: 4px;
.amount-symbol {
font-size: 12px;
font-size: $uni-font-size-sm;
color: #ff6a00;
}
@ -51,14 +51,14 @@
}
.amount-unit {
font-size: 12px;
font-size: $uni-font-size-sm;
color: #ff6a00;
}
}
&__amount-label {
font-size: 12px;
color: #333;
font-size: $uni-font-size-sm;
color: $uni-text-color;
margin-bottom: 16px;
}
@ -67,15 +67,15 @@
margin-bottom: 16px;
.policy-title {
font-size: 14px;
font-size: $uni-font-size-base;
color: #007aff;
font-weight: 600;
margin-bottom: 8px;
}
.policy-content {
font-size: 12px;
color: #333333;
font-size: $uni-font-size-sm;
color: $uni-text-color;
line-height: 22px;
text-align: justify;
}
@ -94,7 +94,7 @@
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
font-size: $uni-font-size-lg;
transition: all 0.3s ease;
outline: none;

View File

@ -271,5 +271,5 @@ defineExpose({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -21,7 +21,7 @@
}
.tab-text {
font-size: 14px;
font-size: $uni-font-size-base;
color: #666;
font-weight: 400;
transition: all 0.3s ease;
@ -29,14 +29,14 @@
}
.tab-text-active {
color: #333;
font-size: 16px;
color: $uni-text-color;
font-size: $uni-font-size-lg;
font-weight: 600;
}
.tab-item-active {
.tab-text {
color: #333;
color: $uni-text-color;
font-weight: 600;
}
}
@ -46,13 +46,14 @@
bottom: 0;
height: 3px;
min-height: 3px; /* 确保最小高度 */
background-color: #007AFF;
background-color: #007aff;
border-radius: 10px;
transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1), width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1),
width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 1;
transform: translateZ(0); /* 启用硬件加速 */
will-change: left, width; /* 优化动画性能 */
/* 初始状态:未初始化时隐藏 */
opacity: 0;
width: 15px; /* 默认宽度15px */
@ -64,7 +65,6 @@
opacity: 1;
}
/* 点击效果 */
.tab-item:active {
opacity: 0.7;
@ -97,4 +97,4 @@
.tab-indicator.animating {
animation: tabSwitch 0.3s ease-out;
}
}

View File

@ -92,5 +92,5 @@ const formatPhone = (phone) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -5,7 +5,7 @@
}
.user-info-title {
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 600;
margin-bottom: 14px;
}
@ -17,12 +17,12 @@
}
.label {
font-size: 14px;
font-size: $uni-font-size-base;
color: #666;
margin-right: 8px;
}
.value {
font-size: 14px;
color: #333;
}
font-size: $uni-font-size-base;
color: $uni-text-color;
}

View File

@ -1,32 +1,49 @@
<template>
<view class="order-detail-wrapper">
<uni-icons type="left" size="20" color="#fff" @click="goBack" />
<view class="order-detail-page">
<TopNavBar
titleAlign="center"
:backgroundColor="backgroundColor"
:backIconColor="backIconColor"
:shadow="shadow"
fixed
>
<template #title>
{{ title }}
</template>
</TopNavBar>
<OrderStatusInfo :orderData="orderData" />
<OrderQrcode
v-if="orderData.orderStatus === '2'"
size="132"
unit="px"
:val="orderData.orderId"
/>
<GoodsInfo :orderData="orderData" />
<UserInfo :orderData="orderData" />
<NoticeInfo :orderData="orderData" />
<OrderInfo :orderData="orderData" @show-refund-popup="showRefundPopup" />
<view class="order-detail-wrapper">
<OrderStatusInfo :orderData="orderData" />
<OrderQrcode
v-if="orderData.orderStatus === '2'"
size="132"
unit="px"
:val="orderData.orderId"
/>
<GoodsInfo :orderData="orderData" />
<UserInfo :orderData="orderData" />
<NoticeInfo :orderData="orderData" />
<OrderInfo
:orderData="orderData"
@show-refund-popup="showRefundPopup"
@pay-success="handlePaySuccess"
/>
<!-- 退款状态显示 -->
<RefundPopup
v-model="refundVisible"
:orderData="orderData"
@confirm="handleRefundConfirm"
/>
<!-- 退款状态显示 -->
<RefundPopup
v-model="refundVisible"
:orderData="orderData"
@confirm="handleRefundConfirm"
/>
</view>
</view>
</template>
<script setup>
import { ref } from "vue";
import { onLoad } from "@dcloudio/uni-app";
import { onLoad, onPageScroll } from "@dcloudio/uni-app";
import { userOrderDetail, orderRefund } from "@/request/api/OrderApi";
import TopNavBar from "@/components/TopNavBar/index.vue";
import OrderQrcode from "./components/OrderQrcode/index.vue";
import OrderStatusInfo from "./components/OrderStatusInfo/index.vue";
import GoodsInfo from "./components/GoodsInfo/index.vue";
@ -38,20 +55,35 @@ import RefundPopup from "./components/RefundPopup/index.vue";
const refundVisible = ref(false);
const orderData = ref({});
onLoad(async ({ orderId }) => {
const res = await userOrderDetail({ orderId });
onLoad(({ orderId }) => getOrderDetail(orderId));
//
const getOrderDetail = async (orderId) => {
const res = await userOrderDetail({ orderId });
orderData.value = res.data;
console.log(res);
});
//
const goBack = () => {
uni.navigateBack({
delta: 1,
});
};
//
const backgroundColor = ref("transparent");
const backIconColor = ref("#fff");
const title = ref("");
const shadow = ref(false);
onPageScroll(({ scrollTop }) => {
//
if (scrollTop <= 0) {
backgroundColor.value = "transparent";
backIconColor.value = "#fff";
title.value = "";
shadow.value = false;
} else {
backgroundColor.value = "#ffffff";
backIconColor.value = "#333333";
title.value = "订单详情";
shadow.value = true;
}
});
// 退
const showRefundPopup = () => {
refundVisible.value = true;
@ -79,8 +111,13 @@ const handleRefundConfirm = async ({ orderId }) => {
});
}
};
//
const handlePaySuccess = ({ orderId }) => {
getOrderDetail(orderId);
};
</script>
<style lang="scss" scoped>
@use "./styles/detail.scss";
@import "./styles/detail.scss";
</style>

View File

@ -63,5 +63,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -16,15 +16,15 @@
top: -12rpx;
left: 24rpx;
font-size: 20rpx;
color: #999999;
background: #ffffff;
color: $uni-text-color-grey;
background-color: $uni-bg-color;
padding: 0 8rpx;
z-index: 1;
}
.date-box {
padding: 20rpx 24rpx;
background: #ffffff;
background-color: $uni-bg-color;
border-radius: 16rpx;
border: 2rpx solid #f0f0f0;
display: flex;
@ -41,7 +41,7 @@
.date-text {
font-size: 32rpx;
font-weight: 500;
color: #333333;
color: $uni-text-color;
}
.day-text {
@ -61,4 +61,4 @@
.nights-text {
font-size: 24rpx;
color: #666666;
}
}

View File

@ -369,5 +369,5 @@ defineExpose({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -15,7 +15,7 @@
.header-title {
font-size: 18px;
font-weight: 600;
color: #333;
color: $uni-text-color;
flex: 1;
text-align: center;
}
@ -62,9 +62,9 @@
justify-content: space-between;
.goods-title {
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 500;
color: #333;
color: $uni-text-color;
line-height: 22px;
margin-bottom: 8px;
display: -webkit-box;
@ -79,7 +79,7 @@
margin-bottom: 12px;
.currency {
font-size: 14px;
font-size: $uni-font-size-base;
color: #ff6b35;
font-weight: 500;
}
@ -92,8 +92,8 @@
}
.price-desc {
font-size: 14px;
color: #999;
font-size: $uni-font-size-base;
color: $uni-text-color-grey;
font-weight: 400;
margin-left: 12px;
}
@ -107,9 +107,9 @@
}
.service-title {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
color: #333;
color: $uni-text-color;
}
.goods-service-item {
@ -120,16 +120,16 @@
.service-label,
.service-value {
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
}
.service-label {
color: #333;
color: $uni-text-color;
}
.service-value {
color: #999;
color: $uni-text-color-grey;
}
}
}
@ -166,8 +166,8 @@
}
.total-count {
font-size: 12px;
color: #333;
font-size: $uni-font-size-sm;
color: $uni-text-color;
}
.total-price {
@ -178,7 +178,7 @@
&::before {
content: "¥";
font-size: 12px;
font-size: $uni-font-size-sm;
}
}
@ -189,7 +189,7 @@
color: #fff;
border: none;
border-radius: 24px;
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: 600;
display: flex;
align-items: center;

View File

@ -47,9 +47,8 @@ const facilitiesList = computed(() => {
return [];
});
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -8,8 +8,8 @@
margin-bottom: 12px;
.title {
font-size: 16px;
color: #333;
font-size: $uni-font-size-lg;
color: $uni-text-color;
font-weight: 600;
line-height: 1.4;
flex: 0 280px;
@ -54,8 +54,8 @@
border-radius: 6px;
.facility-text {
font-size: 12px;
color: #333;
font-size: $uni-font-size-sm;
color: $uni-text-color;
line-height: 1;
white-space: nowrap;
overflow: hidden;

View File

@ -70,6 +70,7 @@ import {
commodityDailyPriceList,
orderPay,
} from "@/request/api/GoodsApi";
import { ThrottleUtils } from "@/utils";
import TopNavBar from "@/components/TopNavBar/index.vue";
import ImageSwiper from "@/components/ImageSwiper/index.vue";
import GoodInfo from "./components/GoodInfo/index.vue";
@ -122,6 +123,19 @@ const goodsInfo = async (params) => {
commodityId: goodsData.value.commodityId,
});
}
if (goodsData.value.commodityStatus !== "1") {
uni.showModal({
title: "温馨提示",
content: "商品已下架,是否返回上一页?",
success: (res) => {
if (res.confirm) {
uni.navigateBack({ delta: 1 });
}
},
});
return;
}
};
const configGoodsData = () => {
@ -164,7 +178,7 @@ const showConfirmPopup = () => {
};
//
const handleConfirmOrder = async (orderData) => {
const handleConfirmOrder = ThrottleUtils.createThrottle(async (orderData) => {
console.log("确认订单---1:", orderData);
const { goodsData } = orderData;
// id
@ -260,7 +274,7 @@ const handleConfirmOrder = async (orderData) => {
});
},
});
};
}, 1000);
//
const handleCloseConfirm = () => {
@ -349,5 +363,5 @@ const handleDateSelect = (data) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -1,7 +1,4 @@
@use "sass:color";
$button-color: #00a6ff;
$button-hover-color: color.scale($button-color, $lightness: -16%);
.goods-container {
display: flex;
@ -37,8 +34,8 @@ $button-hover-color: color.scale($button-color, $lightness: -16%);
flex-shrink: 0;
.module-title {
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
text-align: center;
word-wrap: break-word;
margin-left: 4px;
@ -47,7 +44,7 @@ $button-hover-color: color.scale($button-color, $lightness: -16%);
.module-desc {
flex: 1;
font-size: 12px;
font-size: $uni-font-size-sm;
color: #666;
line-height: 1.5;
margin-top: 4px;
@ -94,8 +91,8 @@ $button-hover-color: color.scale($button-color, $lightness: -16%);
}
.label {
font-size: 14px;
color: #333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
.price {
@ -106,7 +103,7 @@ $button-hover-color: color.scale($button-color, $lightness: -16%);
&::before {
content: "¥";
font-size: 12px;
font-size: $uni-font-size-sm;
}
}
@ -119,53 +116,14 @@ $button-hover-color: color.scale($button-color, $lightness: -16%);
display: flex;
align-items: center;
justify-content: center;
border-radius: 50px;
border-radius: $uni-border-radius-50px;
height: 42px;
font-size: 14px;
font-size: $uni-font-size-base;
font-weight: 500;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
letter-spacing: 0.5px;
margin-left: auto;
// 按钮波纹效果
&::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
&:hover {
background: linear-gradient(
135deg,
$button-hover-color 0%,
color.scale($button-hover-color, $lightness: -11.9%) 100%
);
transform: translateY(-2px);
box-shadow: 0 4px 16px rgba($button-color, 0.4);
&::before {
width: 300px;
height: 300px;
}
}
&:active {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba($button-color, 0.3);
}
&:focus {
outline: none;
box-shadow: 0 0 0 3px rgba($button-color, 0.3);
}
}
}

View File

@ -66,5 +66,5 @@ watch(
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -16,5 +16,5 @@ defineProps({
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -16,5 +16,5 @@ defineProps({
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -8,7 +8,7 @@
overflow-x: hidden; // 防止横向撑开
text {
font-size: 14px;
color: #333333;
font-size: $uni-font-size-base;
color: $uni-text-color;
}
}

View File

@ -244,5 +244,5 @@ defineExpose({ focusInput });
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -2,7 +2,7 @@
display: flex;
align-items: center;
border-radius: 22px;
background-color: #ffffff;
background-color: $uni-bg-color;
box-shadow: 0px 0px 20px 0px rgba(52, 25, 204, 0.05);
margin: 0 12px;
margin-bottom: 8px;
@ -29,12 +29,12 @@
.hold-to-talk-button {
width: 100%;
height: 44px;
color: #333333;
font-size: 16px;
color: $uni-text-color;
font-size: $uni-font-size-lg;
display: flex;
justify-content: center;
align-items: center;
background-color: #ffffff;
background-color: $uni-bg-color;
transition: all 0.2s ease;
user-select: none;
-webkit-user-select: none;
@ -68,7 +68,7 @@
width: 100%;
max-height: 92px;
min-height: 22px;
font-size: 16px;
font-size: $uni-font-size-lg;
line-height: 22px;
margin: 6px 0;

View File

@ -802,5 +802,5 @@ const resetConfig = () => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -39,5 +39,5 @@ const sendReply = (text) => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -15,7 +15,7 @@
border-radius: 8px;
margin: 4px;
box-shadow: 0 2px 5px 0px rgba(0, 0, 0, 0.1);
background-color: #ffffff;
background-color: $uni-bg-color;
padding: 2px 12px;
display: flex;
flex-direction: column;
@ -25,7 +25,7 @@
.more-tips-item-title {
font-weight: 500;
font-size: 12px;
font-size: $uni-font-size-sm;
color: #00a6ff;
line-height: 24px;
text-align: center;

View File

@ -96,5 +96,5 @@ const initData = () => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -50,7 +50,7 @@
text {
font-weight: 500;
font-size: 12px;
font-size: $uni-font-size-sm;
color: #201f32;
line-height: 16px;
}

View File

@ -5,5 +5,5 @@
<script></script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -33,5 +33,5 @@ const closeDrawer = (e) => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -49,5 +49,5 @@ const backgroundStyle = computed(() => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -50,5 +50,5 @@ onUnmounted(() => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -15,7 +15,7 @@
.title {
font-size: 18px;
text-align: center;
color: #333333;
color: $uni-text-color;
}
.close-icon {

View File

@ -115,5 +115,5 @@ const handleLogout = () => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -27,12 +27,12 @@
.avatar-row .avatar {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
border-radius: $uni-border-radius-circle;
}
.label {
font-size: 28rpx;
color: #333;
color: $uni-text-color;
}
.value {
@ -59,7 +59,7 @@
height: 42px;
margin-top: 40px;
background-color: #fff;
color: #333;
color: $uni-text-color;
border-radius: 8rpx;
border: none;
}

View File

@ -18,7 +18,7 @@
display: inline-block;
width: 3px;
height: 3px;
border-radius: 50%;
border-radius: $uni-border-radius-circle;
margin-right: 3px;
background: #333333;
animation: wave 1.3s linear infinite;

View File

@ -45,5 +45,5 @@ const handleClick = (item) => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -27,8 +27,8 @@
right: 12px;
bottom: 12px;
background-color: #ffeb00;
color: #333;
font-size: 14px;
color: $uni-text-color;
font-size: $uni-font-size-base;
font-weight: 500;
padding: 4px 12px;
border-radius: 20px;

View File

@ -41,5 +41,5 @@ onMounted(() => {
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -5,7 +5,7 @@
}
.tag-item {
background-color: #ffffff;
background-color: $uni-bg-color;
border-radius: 8px;
padding: 4px 10px;
margin-right: 8px;
@ -17,5 +17,5 @@
.tag-text {
color: #00a6ff; /* 蓝色文字,可根据设计调整 */
font-size: 14px;
font-size: $uni-font-size-base;
}

View File

@ -26,5 +26,5 @@ const props = defineProps({
</script>
<style scoped lang="scss">
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -69,5 +69,5 @@ const placeOrderHandle = (item) => {
</script>
<style lang="scss" scoped>
@use "./styles/index.scss";
@import "./styles/index.scss";
</style>

View File

@ -15,7 +15,7 @@
flex-direction: column;
align-items: start;
width: 188px;
background-color: #ffffff;
background-color: $uni-bg-color;
border-radius: 10px;
margin-right: 8px;
padding-bottom: 12px;
@ -26,7 +26,7 @@
left: 8px;
background: #ffe7b2;
color: #b97a00;
font-size: 12px;
font-size: $uni-font-size-sm;
padding: 2px 8px;
border-radius: 4px;
z-index: 2;
@ -60,7 +60,7 @@
}
.card-title {
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: bold;
color: #222;
width: 100%;
@ -113,7 +113,7 @@
.card-price {
color: #ff6600;
font-size: 16px;
font-size: $uni-font-size-lg;
font-weight: bold;
}
.card-unit {

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