refactor: clean up codebase and add new features

Replace SCSS variable usages with explicit pixel/hex values for consistent styling across all components
Fix broken template syntax including missing class spaces and incorrect closing tags
Migrate constant and API imports to centralized @/constants and @/api modules
Add new utility classes: IdUtils, CallbackUtils, and TimerUtils
Add new chat conversation API endpoints for recent conversations and message lists
Add new Discovery page components (FindTabs, QuickQuestions, CardSwiper) and their styles
Update app store config to use environment variables for base API and WebSocket URLs
Add new selected tab icon assets
This commit is contained in:
duanshuwen
2026-05-26 23:50:37 +08:00
parent c977c485ef
commit 1a5a2ae6a9
101 changed files with 1488 additions and 745 deletions

View File

@@ -8,7 +8,7 @@
: leftUnselected || leftSelected
" class="tab-image" mode="scaleToFill" />
<div class="tab-label">
<spanclass="tab-text">探索发现</text>
<span class="tab-text">探索发现</span>
</div>
</div>
</div>
@@ -20,13 +20,13 @@
: rightUnselected || rightSelected
" class="tab-image" mode="scaleToFill" />
<div class="tab-label">
<spanclass="tab-text">AI伴游</text>
<div v-if="showDot" :class="[
'status-dot',
modelValue === 1
? 'status-dot--active'
: 'status-dot--inactive',
]"></div>
<span class="tab-text">AI伴游</span>
<div v-if="showDot" :class="[
'status-dot',
modelValue === 1
? 'status-dot--active'
: 'status-dot--inactive',
]"></div>
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<template>
<div class="command-wrapper">
<spanclass="command-text">{{ span}}</text>
<span class="command-text">{{ span }}</span>
</div>
</template>

View File

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

View File

@@ -2,21 +2,21 @@
<div class="create-service-order">
<div class="w-full bg-white border-box border-ff overflow-hidden rounded-20">
<div class="border-box order-header w-vw flex flex-items-center flex-justify-between bg-theme-color-50">
<spanclass="font-size-18 font-500 color-171717 text-left ml-12">
<span class="font-size-18 font-500 color-171717 text-left ml-12">
{{ isCallSuccess ? "服务已创建" : "呼叫服务" }}
</text>
<img class="header-icon" src="https://oss.nianxx.cn/mp/static/version_101/home/feedback.png" />
</span>
<img class="header-icon" src="https://oss.nianxx.cn/mp/static/version_101/home/feedback.png" />
</div>
<div v-if="!isCallSuccess" class="border-box p-12">
<div class="bg-F5F7FA border-box flex flex-items-center p-12 rounded-10 font-size-14 color-171717 mb-12">
<spanclass="font-500 line-height-22 mr-20">所在位置</text>
<input placeholder="请填写所在位置" v-model="roomId" />
<span class="font-500 line-height-22 mr-20">所在位置</span>
<input placeholder="请填写所在位置" v-model="roomId" />
</div>
<div class="bg-F5F7FA border-box flex flex-items-center p-12 rounded-10 font-size-14 color-171717 mb-12">
<spanclass="font-500 line-height-22 mr-20">联系电话</text>
<input placeholder="请填写联系电话" v-model="contactPhone" @input="handleContactPhoneInput" />
<span class="font-500 line-height-22 mr-20">联系电话</span>
<input placeholder="请填写联系电话" v-model="contactPhone" @input="handleContactPhoneInput" />
</div>
<div class="bg-F5F7FA border-box p-12 rounded-10 font-size-14 font-500 color-171717 mb-12">
@@ -71,8 +71,8 @@
<script setup>
import { ref, computed, onMounted, nextTick, defineProps, watch } from "vue";
import { SCROLL_TO_BOTTOM } from "@/constant/constant";
import { createWorkOrder } from "@/request/api/WorkOrderApi";
import { SCROLL_TO_BOTTOM } from "@/constants/constant";
import { createWorkOrder } from "@/api/WorkOrder";
import { updateImageFile } from "@/request/api/UpdateFile";
import { zniconsMap } from "@/assets/fonts/znicons";

View File

@@ -1,9 +1,9 @@
<template>
<div class="empty-container flex flex-col items-center justify-center">
<img class="empty-image" :src="emptyIcon" mode="aspectFit" />
<spanclass="font-size-12 text-center color-99A0AE mt-8">
<span class="font-size-12 text-center color-99A0AE mt-8">
{{ statusText }}
</text>
</span>
</div>
</template>

View File

@@ -1,21 +1,19 @@
<template>
<div class="border-box flex flex-items-center flex-justify-between mb-12">
<div class="left flex flex-items-center">
<spanclass="font-size-12 color-99A0AE mr-4">入住</text>
<spanclass="font-size-12 color-171717 mr-16">
<span class="font-size-12 color-99A0AE mr-4">入住</span>
<span class="font-size-12 color-171717 mr-16">
{{ selectedDate.startDate }}
</text>
<text
class="total border-box rounded-50 flex flex-items-center font-size-11 color-43669A relative"
>{{ selectedDate.totalDays }}</text
>
<spanclass="font-size-12 color-99A0AE ml-16">离店</text>
<spanclass="font-size-12 color-171717 ml-4">
</span>
<span class="total border-box rounded-50 flex flex-items-center font-size-11 color-43669A relative">{{
selectedDate.totalDays }}</span>
<span class="font-size-12 color-99A0AE ml-16">离店</span>
<span class="font-size-12 color-171717 ml-4">
{{ selectedDate.endDate }}
</text>
</span>
</div>
<div class="flex flex-items-center" v-if="showBtn" @click="emit('click')">
<spanclass="font-size-12 theme-color-500 line-height-16">房间详情</text>
<span class="font-size-12 theme-color-500 line-height-16">房间详情</span>
<uni-icons type="right" size="15" color="#99A0AE" />
</div>
</div>
@@ -57,20 +55,16 @@ const emit = defineEmits(["click"]);
}
&::before {
background: linear-gradient(
270deg,
rgba(67, 102, 154, 1),
rgba(67, 102, 154, 0)
);
background: linear-gradient(270deg,
rgba(67, 102, 154, 1),
rgba(67, 102, 154, 0));
left: -9px;
}
&::after {
background: linear-gradient(
270deg,
rgba(67, 102, 154, 0),
rgba(67, 102, 154, 1)
);
background: linear-gradient(270deg,
rgba(67, 102, 154, 0),
rgba(67, 102, 154, 1));
right: -9px;
}
}

View File

@@ -1,41 +1,22 @@
<template>
<uni-popup
ref="popupRef"
type="bottom"
:safe-area="false"
@maskClick="handleClose"
>
<uni-popup ref="popupRef" type="bottom" :safe-area="false" @maskClick="handleClose">
<div class="refund-popup bg-F5F7FA border-box">
<div
class="border-box flex flex-items-center justify-between pt-12 pb-12 relative"
>
<div
class="flex-full font-size-16 color-171717 line-height-24 text-center"
>
<div class="border-box flex flex-items-center justify-between pt-12 pb-12 relative">
<div class="flex-full font-size-16 color-171717 line-height-24 text-center">
明细详情
</div>
<!-- 关闭按钮 -->
<uni-icons
class="close absolute"
type="close"
size="20"
color="#CACFD8"
@click="handleClose"
/>
<uni-icons class="close absolute" type="close" size="20" color="#CACFD8" @click="handleClose" />
</div>
<!-- 内容区域 -->
<div class="rounded-12 bg-white ml-12 mr-12 mb-40">
<div
class="border-box border-bottom flex flex-items-center flex-justify-between pt-12 pb-12 ml-12 mr-12"
>
<spanclass="font-size-16 font-500 color-171717">在线支付</text>
<spanclass="font-size-14 color-171717">239</text>
<div class="border-box border-bottom flex flex-items-center flex-justify-between pt-12 pb-12 ml-12 mr-12">
<span class="font-size-16 font-500 color-171717">在线支付</span>
<span class="font-size-14 color-171717">239</span>
</div>
<div
class="border-box flex flex-items-center flex-justify-between pt-12 pb-12 ml-12 mr-12"
>
<spanclass="font-size-16 font-500 color-171717">房费</text>
<spanclass="font-size-14 color-171717">239</text>
<div class="border-box flex flex-items-center flex-justify-between pt-12 pb-12 ml-12 mr-12">
<span class="font-size-16 font-500 color-171717">房费</span>
<span class="font-size-14 color-171717">239</span>
</div>
</div>
</div>
@@ -55,7 +36,7 @@ const props = defineProps({
// 订单数据
orderData: {
type: Object,
default: () => {},
default: () => { },
},
});

View File

@@ -1,44 +1,26 @@
<template>
<div class="create-service-order">
<div
class="w-full bg-white border-box border-ff overflow-hidden rounded-20"
>
<div
class="border-box order-header w-vw flex flex-items-center flex-justify-between bg-theme-color-50"
>
<spanclass="font-size-18 font-500 color-171717 text-left ml-12">
<div class="w-full bg-white border-box border-ff overflow-hidden rounded-20">
<div class="border-box order-header w-vw flex flex-items-center flex-justify-between bg-theme-color-50">
<span class="font-size-18 font-500 color-171717 text-left ml-12">
{{ isCallSuccess ? "反馈已创建" : "反馈意见" }}
</text>
<img
class="header-icon"
src="https://oss.nianxx.cn/mp/static/version_101/home/feedback.png"
/>
</span>
<img class="header-icon" src="https://oss.nianxx.cn/mp/static/version_101/home/feedback.png" />
</div>
<div v-if="!isCallSuccess" class="border-box p-12">
<div
class="bg-F5F7FA border-box flex flex-items-center p-12 rounded-10 font-size-14 color-171717 mb-12"
>
<spanclass="font-500 line-height-22 mr-20">联系电话</text>
<div class="bg-F5F7FA border-box flex flex-items-center p-12 rounded-10 font-size-14 color-171717 mb-12">
<span class="font-500 line-height-22 mr-20">联系电话</span>
<input placeholder="请填写联系电话" v-model="contactPhone" />
</div>
<div
class="bg-F5F7FA border-box p-12 rounded-10 font-size-14 font-500 color-171717 mb-12"
>
<div class="bg-F5F7FA border-box p-12 rounded-10 font-size-14 font-500 color-171717 mb-12">
<div class="font-500 line-height-22 mb-12">意见内容</div>
<textarea
class="h-80"
placeholder="请输入反馈意见"
placeholder-class="font-size-14 font-400"
maxlength="100"
v-model="contactText"
/>
<textarea class="h-80" placeholder="请输入反馈意见" placeholder-class="font-size-14 font-400" maxlength="100"
v-model="contactText" />
</div>
<div
class="btn rounded-50 color-white bg-button flex flex-items-center flex-justify-center"
@click="handleCall"
>
<div class="btn rounded-50 color-white bg-button flex flex-items-center flex-justify-center"
@click="handleCall">
立即提交
</div>
</div>
@@ -54,9 +36,9 @@
<div class="footer-help flex flex-items-center pl-12 mb-12">
<img class="help-icon mr-4" src="./images/icon_volume.png" />
<spanclass="font-size-12 font-500 color-FA7319">
<span class="font-size-12 font-500 color-FA7319">
{{ appName }}收到您的意见将第一时间为您处理!
</text>
</span>
</div>
</div>
</div>
@@ -64,8 +46,8 @@
<script setup>
import { ref, onMounted, nextTick, computed } from "vue";
import { SCROLL_TO_BOTTOM } from "@/constant/constant";
import { getCurrentConfig } from "@/constant/base";
import { SCROLL_TO_BOTTOM } from "@/constants/constant";
import { getCurrentConfig } from "@/constants/base";
import { submitFeedback } from "@/request/api/FeedbackApi";
const contactPhone = ref("");

View File

@@ -1,50 +1,27 @@
<template>
<div class="form-wrapper">
<div class="form-header">
<uni-icons
class="minus uni-color"
color="opacity"
size="22"
type="minus"
/>
<spanclass="form-title">{{ title }}</text>
<uni-icons
v-if="showDeleteIcon"
class="delete uni-color"
color="opacity"
size="22"
type="trash"
@click="handleDelete"
/>
<uni-icons class="minus uni-color" color="opacity" size="22" type="minus" />
<span class="form-title">{{ title }}</span>
<uni-icons v-if="showDeleteIcon" class="delete uni-color" color="opacity" size="22" type="trash"
@click="handleDelete" />
</div>
<div class="form-item-wrapper">
<div class="form-item">
<div class="form-item-row">
<spanclass="form-label"> </text>
<input
class="form-input"
:class="{ 'form-input-error': nameError }"
v-model="nameValue"
placeholder="请输入姓名"
@blur="validateName"
/>
<span class="form-label"> </span>
<input class="form-input" :class="{ 'form-input-error': nameError }" v-model="nameValue" placeholder="请输入姓名"
@blur="validateName" />
</div>
<spanv-if="nameError" class="form-error">{{ nameError }}</text>
<span v-if="nameError" class="form-error">{{ nameError }}</span>
</div>
<div class="form-item">
<div class="form-item-row">
<spanclass="form-label">手机号</text>
<input
class="form-input"
:class="{ 'form-input-error': phoneError }"
v-model="phoneValue"
placeholder="请输入手机号"
type="tel"
maxlength="11"
@blur="validatePhone"
/>
<span class="form-label">手机号</span>
<input class="form-input" :class="{ 'form-input-error': phoneError }" v-model="phoneValue"
placeholder="请输入手机号" type="tel" maxlength="11" @blur="validatePhone" />
</div>
<spanv-if="phoneError" class="form-error">{{ phoneError }}</text>
<span v-if="phoneError" class="form-error">{{ phoneError }}</span>
</div>
</div>
</div>

View File

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

View File

@@ -15,13 +15,13 @@
<uni-icons fontFamily="znicons" size="20" color="#333">
{{ zniconsMap[moduleItem.moduleIcon] }}
</uni-icons>
<spanclass="ml-4 font-size-14 color-171717 line-height-20">
<span class="ml-4 font-size-14 color-171717 line-height-20">
{{ moduleItem.moduleTitle }}
</text>
</span>
</div>
<spanclass="flex-full font-size-12 color-525866 line-height-20 mt-4">
<span class="flex-full font-size-12 color-525866 line-height-20 mt-4">
{{ moduleItem.moduleContent }}
</text>
</span>
</div>
</div>
</div>

View File

@@ -43,13 +43,7 @@
<div class="section-title">示例6: 动态圆角控制</div>
<div class="control-panel">
<text>圆角大小: {{ dynamicRadius }}px</text>
<slider
:value="dynamicRadius"
:min="0"
:max="50"
@change="handleRadiusChange"
activeColor="#007AFF"
/>
<slider :value="dynamicRadius" :min="0" :max="50" @change="handleRadiusChange" activeColor="#007AFF" />
</div>
<imgSwiper :border-radius="dynamicRadius" />
</div>
@@ -77,23 +71,13 @@
<div class="section-title">示例11: 动态高度和缩略图控制</div>
<div class="control-panel">
<text>高度: {{ dynamicHeight }}px</text>
<slider
:value="dynamicHeight"
:min="100"
:max="400"
@change="handleHeightChange"
activeColor="#007AFF"
/>
<slider :value="dynamicHeight" :min="100" :max="400" @change="handleHeightChange" activeColor="#007AFF" />
<div class="checkbox-wrapper">
<checkbox :checked="showThumbnails" @change="handleThumbnailToggle" />
<spanclass="checkbox-label">显示缩略图</text>
<span class="checkbox-label">显示缩略图</span>
</div>
</div>
<imgSwiper
:height="dynamicHeight"
:show-thumbnails="showThumbnails"
:border-radius="10"
/>
<imgSwiper :height="dynamicHeight" :show-thumbnails="showThumbnails" :border-radius="10" />
</div>
<!-- 示例12: 字符串高度 -->

View File

@@ -3,31 +3,31 @@
<swiper class="swiper-box" :style="swiperStyle" :autoplay="false" :interval="3000" :duration="1000"
:current="active" @change="handleSwiperChange">
<swiper-item class="swiper-item" v-for="(item, index) in thumbnails" :key="index">
<img class="swiper-item-image" :src="item.photoUrl" mode="aspectFill"></image>
<img class="swiper-item-image" :src="item.photoUrl" mode="aspectFill">
</swiper-item>
</swiper>
<!-- 缩略图部分 -->
<div v-if="showThumbnails && thumbnails.length > 0" class="thumbnail-box" :style="thumbnailBoxStyle">
<scroll-div class="thumbnail-scroll" scroll-x="true" :scroll-left="scrollLeft" :scroll-with-animation="true"
<div class="thumbnail-scroll" scroll-x="true" :scroll-left="scrollLeft" :scroll-with-animation="true"
show-scrollbar="false">
<div class="thumbnail-list" v-if="thumbnails.length > 1">
<div v-for="(thumb, index) in thumbnails" :key="index"
:class="['thumbnail-item', { active: index === active }]" :id="`thumbnail-${index}`"
@click="handleThumbnailClick(index)">
<img class="thumbnail-image" :src="thumb.photoUrl" mode="aspectFill"></image>
<img class="thumbnail-image" :src="thumb.photoUrl" mode="aspectFill">
</div>
</div>
</scroll-div>
</div>
<div class="custom-indicator" @click="handlePredivClick">
<uni-icons fontFamily="znicons" size="10" color="#fff">{{
zniconsMap["zn-camera"]
}}</uni-icons>
<spanclass="custom-indicator-text">{{ thumbnails.length }}</text>
<uni-icons fontFamily="znicons" size="10" color="#fff">{{
zniconsMap["zn-nav-arrow-right"]
}}</uni-icons>
<span class="custom-indicator-text">{{ thumbnails.length }}</span>
<uni-icons fontFamily="znicons" size="10" color="#fff">{{
zniconsMap["zn-nav-arrow-right"]
}}</uni-icons>
</div>
</div>
</div>

View File

@@ -33,7 +33,7 @@
.custom-indicator {
margin-left: 12px;
background: rgba(0, 0, 0, 0.5);
border-radius: $uni-border-radius-50px;
border-radius: 50px;
padding: 0 6px 4px 8px;
flex: 0 0 auto;
flex-shrink: 0;

View File

@@ -1,8 +1,8 @@
<template>
<div class="store-address">
<div class="text-container" @click.stop="openMap">
<spanclass="location-label">位于 {{ orderData.oneLevelAddress }}</text>
<spanclass="address-text">{{ orderData.commodityAddress }}</text>
<span class="location-label">位于 {{ orderData.oneLevelAddress }}</span>
<span class="address-text">{{ orderData.commodityAddress }}</span>
</div>
<div class="actions">
@@ -10,14 +10,14 @@
<div class="actions-btn" @click.stop="openMap">
<uni-icons type="paperplane-filled" size="16" color="#171717" />
</div>
<spanclass="actions-text">导航</text>
<span class="actions-text">导航</span>
</div>
<div>
<div class="actions-btn" @click.stop="callPhone">
<uni-icons type="phone-filled" size="16" color="#171717" />
</div>
<spanclass="actions-text">电话</text>
<span class="actions-text">电话</span>
</div>
</div>
</div>

View File

@@ -5,7 +5,7 @@
padding: 12px;
background-color: #ffffff;
border-top: 1px solid #e0e0e0;
// 左侧文本容器
.text-container {
display: flex;
@@ -15,14 +15,14 @@
.location-label {
color: $text-color-800;
font-size: $uni-font-size-base;
font-size: 14px;
font-weight: 500;
}
.address-text {
margin-top: 4px;
color: $text-color-600;
font-size: $uni-font-size-sm;
font-size: 12px;
font-weight: 400;
}
@@ -38,7 +38,7 @@
width: 28px;
height: 28px;
border-radius: 10px;
background-color: #F5F5F5;
background-color: #f5f5f5;
display: flex;
align-items: center;
justify-content: center;
@@ -50,7 +50,7 @@
}
.actions-text {
font-size: $uni-font-size-sm;
font-size: 12px;
color: $text-color-600;
}
}

View File

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

View File

@@ -1,16 +1,12 @@
<template>
<div class="module-header mb-4">
<spanclass="module-title">{{ title }}</text>
<img
class="underline"
:src="isZhiNian ? indicatorSrcB : indicatorSrc"
mode="aspectFill"
/>
<span class="module-title">{{ title }}</span>
<img class="underline" :src="isZhiNian ? indicatorSrcB : indicatorSrc" mode="aspectFill" />
</div>
</template>
<script setup>
import { isZhiNian } from "@/constant/base";
import { isZhiNian } from "@/constants/base";
import indicatorSrc from "./images/wave_icon.png";
import indicatorSrcB from "./images/wave_icon_b.png";

View File

@@ -3,8 +3,8 @@
<div class="content">
<div class="title">隐私保护指引</div>
<div class="des">
请您仔细阅读并充分理解<text class="link" @click="handleOpenPrivacyContract">{{ privacyContractName }}</text>
如您同意前述协议的全部内容请点击同意开始使用<spanclass="cancel">如您不同意将被限制使用部分功能或将在您使用具体功能前再次询问以取得您的授权同意</text>
请您仔细阅读并充分理解<span class="link" @click="handleOpenPrivacyContract">{{ privacyContractName }}</span>
如您同意前述协议的全部内容请点击同意开始使用<span class="cancel">如您不同意将被限制使用部分功能或将在您使用具体功能前再次询问以取得您的授权同意</span>
</div>
<div class="btns">

View File

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

View File

@@ -1,27 +1,12 @@
<template>
<uni-popup
ref="popupRef"
type="bottom"
:safe-area="false"
@maskClick="handleClose"
>
<uni-popup ref="popupRef" type="bottom" :safe-area="false" @maskClick="handleClose">
<div class="refund-popup bg-F5F7FA border-box">
<div
class="border-box flex flex-items-center justify-between pt-12 pb-12 relative"
>
<div
class="flex-full font-size-16 color-171717 line-height-24 text-center"
>
<div class="border-box flex flex-items-center justify-between pt-12 pb-12 relative">
<div class="flex-full font-size-16 color-171717 line-height-24 text-center">
取消政策
</div>
<!-- 关闭按钮 -->
<uni-icons
class="close absolute"
type="close"
size="20"
color="#CACFD8"
@click="handleClose"
/>
<uni-icons class="close absolute" type="close" size="20" color="#CACFD8" @click="handleClose" />
</div>
<!-- 内容区域 -->
<div class="border-box rounded-12 bg-white p-12 ml-12 mr-12 mb-40">
@@ -29,15 +14,12 @@
<uni-icons fontFamily="znicons" size="20" color="#333">
{{ zniconsMap["zn-refund"] }}
</uni-icons>
<spanclass="font-size-14 font-600 color-171717 ml-8">
<span class="font-size-14 font-600 color-171717 ml-8">
{{ refundTitle }}
</text>
</span>
</div>
<div
class="font-size-14 color-525866 line-height-16 mb-4"
v-for="(item, index) in commodityPurchaseInstruction"
:key="index"
>
<div class="font-size-14 color-525866 line-height-16 mb-4" v-for="(item, index) in commodityPurchaseInstruction"
:key="index">
{{ item }}
</div>
</div>
@@ -59,7 +41,7 @@ const props = defineProps({
// 订单数据
orderData: {
type: Object,
default: () => {},
default: () => { },
},
});

View File

@@ -1,6 +1,6 @@
<template>
<div class="response-intro-wrapper">
<spanclass="response-intro-text">{{ introText }}</text>
<span class="response-intro-text">{{ introText }}</span>
</div>
</template>

View File

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

View File

@@ -1,23 +1,19 @@
<template>
<div class="service-prompt">
<div class="service-header">
<spanclass="header-text">你可以这样问我</text>
<img
class="header-icon"
src="./images/icon_refresh.png"
@click="handleRefresh"
></image>
<span class="header-text">你可以这样问我</span>
<img class="header-icon" src="./images/icon_refresh.png" @click="handleRefresh"></image>
</div>
<div class="service-buttons">
<spanclass="service-button" @click="handleClick('bed')">
<span class="service-button" @click="handleClick('bed')">
帮我加一张床
</text>
<spanclass="service-button" @click="handleClick('hotWater')">
</span>
<span class="service-button" @click="handleClick('hotWater')">
房间热水不够热
</text>
<spanclass="service-button" @click="handleClick('mahjong')">
</span>
<span class="service-button" @click="handleClick('mahjong')">
帮忙加一台麻将机
</text>
</span>
</div>
</div>
</template>

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
<template>
<div class="sum-wrapper">
<div class="sum-item">
<spanclass="sum-label">价格</text>
<spanclass="sum-value">¥{{ referencePrice }}</text>
<span class="sum-label">价格</span>
<span class="sum-value">¥{{ referencePrice }}</span>
</div>
<div class="sum-item">
<spanclass="sum-label">折扣优惠</text>
<spanclass="sum-discount">-¥{{ discount }}</text>
<span class="sum-label">折扣优惠</span>
<span class="sum-discount">-¥{{ discount }}</span>
</div>
</div>
</template>

View File

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

View File

@@ -1,21 +1,17 @@
<template>
<div class="survey-questionnaire w-vw-24">
<div class="bg-white border-box border-ff overflow-hidden rounded-20">
<div
class="border-box flex flex-items-center flex-justify-between bg-theme-color-50"
>
<spanclass="font-size-18 font-500 color-171717 text-left ml-12">
<div class="border-box flex flex-items-center flex-justify-between bg-theme-color-50">
<span class="font-size-18 font-500 color-171717 text-left ml-12">
调查问卷
</text>
</span>
<img class="w-102 h-72" :src="surveyData.logoUrl" mode="widthFix" />
</div>
<img class="w-full" :src="surveyData.bannerUrl" mode="widthFix" />
<div
class="h-44 m-12 rounded-50 bg-button color-white flex flex-items-center flex-justify-center"
@click="handleCall"
>
<div class="h-44 m-12 rounded-50 bg-button color-white flex flex-items-center flex-justify-center"
@click="handleCall">
前往填写
</div>
</div>
@@ -23,7 +19,7 @@
</template>
<script setup>
import { getAccessToken } from "@/constant/token";
import { getAccessToken } from "@/constants/token";
import { defineProps, computed } from "vue";
import { navigateTo } from "../../router";

View File

@@ -1,42 +1,27 @@
<template>
<div class="card border-box pb-12 relative mt-12">
<div
class="card-item absolute overflow-hidden"
v-for="(card, index) in list"
:key="card.__uid"
:style="[itemStyle(index, card), transformStyle(index, card)]"
@touchstart.stop="touchStart($event, index)"
@touchmove.stop.prevent="touchMove($event, index)"
@touchend.stop="touchEnd(index)"
@touchcancel.stop="touchCancel(index)"
@transitionend="onTransitionEnd(index)"
>
<div class="card-item absolute overflow-hidden" v-for="(card, index) in list" :key="card.__uid"
:style="[itemStyle(index, card), transformStyle(index, card)]" @touchstart.stop="touchStart($event, index)"
@touchmove.stop.prevent="touchMove($event, index)" @touchend.stop="touchEnd(index)"
@touchcancel.stop="touchCancel(index)" @transitionend="onTransitionEnd(index)">
<div class="inner-card bg-white">
<!-- 商品大图部分自适应剩余空间 -->
<div class="goods-image-wrapper relative">
<img
class="w-full h-full"
:src="card.commodityPhoto"
mode="aspectFill"
/>
<img class="w-full h-full" :src="card.commodityPhoto" mode="aspectFill" />
</div>
<!-- 底部价格 + 购买按钮 -->
<div
class="card-footer border-box p-12 flex flex-justify-between flex-items-center"
>
<div class="card-footer border-box p-12 flex flex-justify-between flex-items-center">
<div class="border-box">
<div class="font-size-14 font-500 color-333 ellipsis-1">
{{ card.commodityName }}
</div>
<div class="card-price-row color-333">
<spanclass="font-size-11"></text>
<spanclass="font-size-24 font-bold">
<span class="font-size-11"></span>
<span class="font-size-24 font-bold">
{{ card.specificationPrice }}
</text>
<spanclass="font-size-11 ml-2" v-if="card.stockUnitLabel"
>/{{ card.stockUnitLabel }}</text
>
</span>
<span class="font-size-11 ml-2" v-if="card.stockUnitLabel">/{{ card.stockUnitLabel }}</span>
</div>
</div>

View File

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

View File

@@ -15,12 +15,7 @@
<!-- 示例3: 自定义颜色 -->
<div class="demo-section">
<div class="demo-title">自定义颜色</div>
<TopNavBar
title="蓝色导航栏"
backgroundColor="#007AFF"
titleColor="#ffffff"
backIconColor="#ffffff"
/>
<TopNavBar title="蓝色导航栏" backgroundColor="#007AFF" titleColor="#ffffff" backIconColor="#ffffff" />
</div>
<!-- 示例4: 隐藏返回按钮 -->
@@ -48,18 +43,13 @@
<template #title>
<div class="custom-title">
<uni-icons type="star" size="16" color="#FFD700" />
<spanclass="title-text">自定义标题</text>
<span class="title-text">自定义标题</span>
</div>
</template>
<template #right>
<div class="right-actions">
<uni-icons
type="search"
size="20"
color="#333"
style="margin-right: 10px"
/>
<uni-icons type="search" size="20" color="#333" style="margin-right: 10px" />
<uni-icons type="more" size="20" color="#333" />
</div>
</template>
@@ -69,12 +59,8 @@
<!-- 示例8: 渐变背景 -->
<div class="demo-section">
<div class="demo-title">渐变背景</div>
<TopNavBar
title="渐变导航栏"
backgroundColor="linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
titleColor="#ffffff"
backIconColor="#ffffff"
/>
<TopNavBar title="渐变导航栏" backgroundColor="linear-gradient(135deg, #667eea 0%, #764ba2 100%)" titleColor="#ffffff"
backIconColor="#ffffff" />
</div>
<!-- 内容区域 -->

View File

@@ -1,37 +1,23 @@
<template>
<div :class="navBarClass" :style="navBarStyle">
<!-- 状态栏占位 -->
<div
:style="{ height: statusBarHeight + 'px' }"
v-if="!hideStatusBar"
></div>
<div :style="{ height: statusBarHeight + 'px' }" v-if="!hideStatusBar"></div>
<!-- 导航栏内容 -->
<div
class="flex flex-items-center flex-justify-between border-box pl-8 pr-8"
:style="{ height: navBarHeight + 'px' }"
>
<div class="flex flex-items-center flex-justify-between border-box pl-8 pr-8"
:style="{ height: navBarHeight + 'px' }">
<!-- 左侧返回按钮 -->
<div
class="nav-bar-left flex flex-items-center flex-justify-center"
v-if="showBack"
@click="handleBack"
>
<div class="nav-bar-left flex flex-items-center flex-justify-center" v-if="showBack" @click="handleBack">
<uni-icons type="left" size="20" :color="backIconColor" />
</div>
<!-- 中间标题区域 -->
<div
:class="[
'nav-bar-center flex flex-items-center flex-justify-center',
`nav-bar-center--${titleAlign}`,
]"
>
<div :class="[
'nav-bar-center flex flex-items-center flex-justify-center',
`nav-bar-center--${titleAlign}`,
]">
<slot name="title">
<text
class="font-size-17 font-500 color-000"
:style="{ color: titleColor }"
>
<text class="font-size-17 font-500 color-000" :style="{ color: titleColor }">
{{ title }}
</text>
</slot>
@@ -68,7 +54,7 @@ const props = defineProps({
// 背景颜色
background: {
type: String,
default: "$theme-color-100",
default: "#E8FFF1",
},
// 标题颜色
titleColor: {

View File

@@ -1,7 +1,7 @@
// TopNavBar 组件样式
.top-nav-bar {
width: 100%;
background-color: $theme-color-100;
background-color: #e8fff1;
&--fixed {
position: fixed;

View File

@@ -36,7 +36,7 @@
}
.date-item.selected {
border: 1px solid #0ccd58;
background: $theme-color-50;
background: #f0f8f3;
}
.date-item.selected .label,
.date-item.selected .md,