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:
@@ -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>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="command-wrapper">
|
||||
<spanclass="command-text">{{ span}}</text>
|
||||
<span class="command-text">{{ span }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
|
||||
.command-text {
|
||||
color: #fff;
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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: () => { },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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("");
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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: 字符串高度 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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: () => { },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ defineExpose({
|
||||
align-items: center;
|
||||
background-color: #0CCD58;
|
||||
height: 44px;
|
||||
border-radius: $uni-border-radius-50px;
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
.audio-visualizer {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
<!-- 内容区域 -->
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// TopNavBar 组件样式
|
||||
.top-nav-bar {
|
||||
width: 100%;
|
||||
background-color: $theme-color-100;
|
||||
background-color: #e8fff1;
|
||||
|
||||
&--fixed {
|
||||
position: fixed;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user