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:
@@ -1,4 +1,4 @@
|
||||
.booking {
|
||||
background: linear-gradient(180deg, $theme-color-100 0%, #f5f7fa 100%) 0 86px / 100%
|
||||
background: linear-gradient(180deg, #e8fff1 0%, #f5f7fa 100%) 0 86px / 100%
|
||||
100px no-repeat;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
top: -12rpx;
|
||||
left: 24rpx;
|
||||
font-size: 20rpx;
|
||||
color: $uni-text-color-grey;
|
||||
color: #333-grey;
|
||||
background-color: #fff;
|
||||
padding: 0 8rpx;
|
||||
z-index: 1;
|
||||
@@ -41,7 +41,7 @@
|
||||
.date-text {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.day-text {
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
<template>
|
||||
<div class="demo-container">
|
||||
<div class="demo-header">
|
||||
<spanclass="demo-title">GoodConfirm 组件演示</text>
|
||||
<span class="demo-title">GoodConfirm 组件演示</span>
|
||||
</div>
|
||||
|
||||
<div class="demo-section">
|
||||
<div class="section-title">基础用法</div>
|
||||
<button class="demo-btn" @click="showConfirm">显示商品确认弹窗</button>
|
||||
<button
|
||||
class="demo-btn"
|
||||
@click="setQuantity(5)"
|
||||
style="margin-left: 12px"
|
||||
>
|
||||
<button class="demo-btn" @click="setQuantity(5)" style="margin-left: 12px">
|
||||
设置5人测试横向滚动
|
||||
</button>
|
||||
</div>
|
||||
@@ -22,42 +18,29 @@
|
||||
<text>Stepper数量: {{ quantity }}</text>
|
||||
<text>表单项数量: {{ userFormCount }}</text>
|
||||
<text>总价: ¥{{ totalPrice }}</text>
|
||||
<spanclass="debug-info">实时quantity值: {{ quantity }}</text>
|
||||
<spanclass="feature-highlight">✨ 支持横向滚动浏览多个游客信息</text>
|
||||
<spanclass="feature-highlight"
|
||||
>🗑️ 支持删除游客信息(至少保留一位)</text
|
||||
>
|
||||
<span class="debug-info">实时quantity值: {{ quantity }}</span>
|
||||
<span class="feature-highlight">✨ 支持横向滚动浏览多个游客信息</span>
|
||||
<span class="feature-highlight">🗑️ 支持删除游客信息(至少保留一位)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="demo-section" v-if="lastOrderData">
|
||||
<div class="section-title">最后提交的数据</div>
|
||||
<div class="order-data">
|
||||
<text>商品: {{ lastOrderData.goodsData.commodityName }}</text>
|
||||
<text>数量: {{ lastOrderData.quantity }}</text>
|
||||
<text>总价: ¥{{ lastOrderData.totalPrice }}</text>
|
||||
<text>用户信息:</text>
|
||||
<span>商品: {{ lastOrderData.goodsData.commodityName }}</span>
|
||||
<span>数量: {{ lastOrderData.quantity }}</span>
|
||||
<span>总价: ¥{{ lastOrderData.totalPrice }}</span>
|
||||
<span>用户信息:</span>
|
||||
<div class="user-list">
|
||||
<div
|
||||
v-for="(user, index) in lastOrderData.userFormList"
|
||||
:key="index"
|
||||
class="user-item"
|
||||
>
|
||||
<text
|
||||
>游客{{ index + 1 }}: {{ user.name || "未填写" }} -
|
||||
{{ user.phone || "未填写" }}</text
|
||||
>
|
||||
<div v-for="(user, index) in lastOrderData.userFormList" :key="index" class="user-item">
|
||||
<span>游客{{ index + 1 }}: {{ user.name || "未填写" }} -
|
||||
{{ user.phone || "未填写" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<GoodConfirm
|
||||
ref="confirmRef"
|
||||
:goodsData="goodsData"
|
||||
@confirm="handleConfirm"
|
||||
@close="handleClose"
|
||||
/>
|
||||
<GoodConfirm ref="confirmRef" :goodsData="goodsData" @confirm="handleConfirm" @close="handleClose" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
.header-title {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -62,9 +62,9 @@
|
||||
justify-content: space-between;
|
||||
|
||||
.goods-title {
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
line-height: 22px;
|
||||
margin-bottom: 8px;
|
||||
display: -webkit-box;
|
||||
@@ -79,7 +79,7 @@
|
||||
margin-bottom: 12px;
|
||||
|
||||
.currency {
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
color: #ff6b35;
|
||||
font-weight: 500;
|
||||
}
|
||||
@@ -92,8 +92,8 @@
|
||||
}
|
||||
|
||||
.price-desc {
|
||||
font-size: $uni-font-size-base;
|
||||
color: $uni-text-color-grey;
|
||||
font-size: 14px;
|
||||
color: #333-grey;
|
||||
font-weight: 400;
|
||||
margin-left: 12px;
|
||||
}
|
||||
@@ -107,9 +107,9 @@
|
||||
}
|
||||
|
||||
.service-title {
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.goods-service-item {
|
||||
@@ -120,16 +120,16 @@
|
||||
|
||||
.service-label,
|
||||
.service-value {
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.service-label {
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.service-value {
|
||||
color: $uni-text-color-grey;
|
||||
color: #333-grey;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,8 +166,8 @@
|
||||
}
|
||||
|
||||
.total-count {
|
||||
font-size: $uni-font-size-sm;
|
||||
color: $uni-text-color;
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.total-price {
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
&::before {
|
||||
content: "¥";
|
||||
font-size: $uni-font-size-sm;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 24px;
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
margin-bottom: 12px;
|
||||
|
||||
.title {
|
||||
font-size: $uni-font-size-lg;
|
||||
color: $uni-text-color;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
line-height: 1.4;
|
||||
flex: 0 280px;
|
||||
@@ -54,8 +54,8 @@
|
||||
border-radius: 6px;
|
||||
|
||||
.facility-text {
|
||||
font-size: $uni-font-size-sm;
|
||||
color: $uni-text-color;
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
line-height: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
||||
@@ -37,8 +37,8 @@ $button-color: #00a6ff;
|
||||
flex-shrink: 0;
|
||||
|
||||
.module-title {
|
||||
font-size: $uni-font-size-base;
|
||||
color: $uni-text-color;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
word-wrap: break-word;
|
||||
margin-left: 4px;
|
||||
@@ -47,7 +47,7 @@ $button-color: #00a6ff;
|
||||
|
||||
.module-desc {
|
||||
flex: 1;
|
||||
font-size: $uni-font-size-sm;
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
margin-top: 4px;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constants/constant";
|
||||
|
||||
const commandModel = ref({
|
||||
icon: "",
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
right: 12px;
|
||||
bottom: 12px;
|
||||
background-color: #ffeb00;
|
||||
color: $uni-text-color;
|
||||
font-size: $uni-font-size-base;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
padding: 4px 12px;
|
||||
border-radius: 20px;
|
||||
|
||||
@@ -31,14 +31,14 @@
|
||||
<script setup>
|
||||
import { defineProps, computed, watch, onBeforeUnmount } from "vue";
|
||||
|
||||
import ChatMarkdown from "./ChatMarkdown/index.vue";
|
||||
import ChatMarkdown from "../ChatMarkdown/index.vue";
|
||||
import ChatLoading from "./ChatLoading/index.vue";
|
||||
import StreamManager from '@/utils/StreamManager.js';
|
||||
import {
|
||||
getLongTextPredivText,
|
||||
getLongTextValue,
|
||||
hasLongTextExtraSections,
|
||||
} from "@/utils/longTextCard";
|
||||
} from "@/constants/longTextCard";
|
||||
|
||||
// 直接根据文字长度判断,超过约100个字符认为会溢出(约3行)
|
||||
const props = defineProps({
|
||||
|
||||
@@ -12,7 +12,7 @@ import { onMounted } from "vue";
|
||||
import {
|
||||
SCROLL_TO_BOTTOM,
|
||||
SEND_MESSAGE_CONTENT_TEXT,
|
||||
} from "@/constant/constant";
|
||||
} from "@/constants/constant";
|
||||
|
||||
const props = defineProps({
|
||||
question: {
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
|
||||
.tag-text {
|
||||
color: #0ccd58;
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
.hold-to-talk-button {
|
||||
width: 100%;
|
||||
height: 44px;
|
||||
color: $uni-text-color;
|
||||
font-size: $uni-font-size-lg;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -99,7 +99,7 @@
|
||||
width: 100%;
|
||||
max-height: 92px;
|
||||
min-height: 22px;
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
margin: 6px 0;
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ import {
|
||||
LONG_TEXT_KEYS,
|
||||
getLongTextSections,
|
||||
getLongTextValue,
|
||||
} from "@/utils/longTextCard";
|
||||
} from "@/constants/longTextCard";
|
||||
|
||||
const props = defineProps({
|
||||
answerText: {
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
:finish="item.finish"
|
||||
/> -->
|
||||
|
||||
<LongTextGuideCardPrediv v-if="item.componentName && isLongTextCard(item.componentName)"
|
||||
<LongTextGuideCardPreview v-if="item.componentName && isLongTextCard(item.componentName)"
|
||||
:componentName="item.componentName" />
|
||||
|
||||
<QuickBookingComponent v-if="
|
||||
@@ -147,12 +147,12 @@ import {
|
||||
SEND_MESSAGE_COMMAND_TYPE,
|
||||
NOTICE_EVENT_LOGOUT,
|
||||
NOTICE_EVENT_LOGIN_SUCCESS,
|
||||
} from "@/constant/constant";
|
||||
import { MessageRole, MessageType, CompName, Command } from "@/model/ChatModel";
|
||||
} from "@/constants/constant";
|
||||
import { MessageRole, MessageType, CompName, Command } from "@/constants/ChatModel";
|
||||
|
||||
import HomeWelcome from "../HomeWelcome/index.vue";
|
||||
import AiTabSwitch from "@/components/AiTabSwitch/index.vue";
|
||||
import Discovery from "../../Discovery/index.vue";
|
||||
import Discovery from "../Discovery/index.vue";
|
||||
import ChatGuide from "../ChatGuide/index.vue";
|
||||
|
||||
import ChatTopNavBar from "../ChatTopNavBar/index.vue";
|
||||
@@ -162,37 +162,36 @@ import ChatCardOther from "../ChatCardOther/index.vue";
|
||||
import ChatQuickAccess from "../ChatQuickAccess/index.vue";
|
||||
import ChatInputArea from "../ChatInputArea/index.vue";
|
||||
|
||||
import QuickBookingComponent from "../../ChatModule/QuickBookingComponent/index.vue";
|
||||
import DiscoveryCardComponent from "../../ChatModule/DiscoveryCardComponent/index.vue";
|
||||
import ActivityListComponent from "../../ChatModule/ActivityListComponent/index.vue";
|
||||
import RecommendPostsComponent from "../../ChatModule/RecommendPostsComponent/index.vue";
|
||||
import AttachListComponent from "../../ChatModule/AttachListComponent/index.vue";
|
||||
import DetailCardCompontent from "../../ChatModule/DetailCardCompontent/index.vue";
|
||||
import OpenMapComponent from "../../ChatModule/OpenMapComponent/index.vue";
|
||||
import AnswerComponent from "../../ChatModule/AnswerComponent/index.vue";
|
||||
import GeneratorPhotoComponent from "../../ChatModule/GeneratorPhotoComponent/index.vue";
|
||||
import QuickBookingComponent from "../QuickBookingComponent/index.vue";
|
||||
import DiscoveryCardComponent from "../DiscoveryCardComponent/index.vue";
|
||||
import ActivityListComponent from "../ActivityListComponent/index.vue";
|
||||
import RecommendPostsComponent from "../RecommendPostsComponent/index.vue";
|
||||
import AttachListComponent from "../AttachListComponent/index.vue";
|
||||
import DetailCardCompontent from "../DetailCardCompontent/index.vue";
|
||||
import OpenMapComponent from "../OpenMapComponent/index.vue";
|
||||
import AnswerComponent from "../AnswerComponent/index.vue";
|
||||
import GeneratorPhotoComponent from "../GeneratorPhotoComponent/index.vue";
|
||||
|
||||
import ZModuleC01 from "../../ChatModule/ZModuleC01/index.vue";
|
||||
import LongTextGuideCardPrediv from "../../ChatModule/LongTextGuideCardPrediv/index.vue";
|
||||
import LongTextGuideCardPreview from "../LongTextGuideCardPreview/index.vue";
|
||||
|
||||
import CreateServiceOrder from "@/components/CreateServiceOrder/index.vue";
|
||||
import Feedback from "@/components/Feedback/index.vue";
|
||||
import AddCarCrad from "@/components/AddCarCrad/index.vue";
|
||||
import SurveyQuestionnaire from "@/components/SurveyQuestionnaire/index.vue";
|
||||
import { mainPageData } from "@/request/api/MainPageDataApi";
|
||||
import { mainPageData } from "@/api/home";
|
||||
import {
|
||||
conversationMsgList,
|
||||
recentConversation,
|
||||
} from "@/request/api/ConversationApi";
|
||||
} from "@/api/home";
|
||||
import WebSocketManager from "@/utils/WebSocketManager";
|
||||
import { IdUtils } from "@/utils";
|
||||
import { IdUtils } from "@/utils/IdUtils";
|
||||
import {
|
||||
appendLongTextChunk,
|
||||
createLongTextData,
|
||||
} from "@/utils/longTextCard";
|
||||
} from "@/constants/longTextCard";
|
||||
import { checkToken } from "@/hooks/useGoLogin";
|
||||
import { useAppStore } from "@/store";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
import { getAccessToken } from "@/constants/token";
|
||||
|
||||
const emit = defineEmits(["showDrawer"]);
|
||||
const appStore = useAppStore();
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constants/constant";
|
||||
import { defineProps } from "vue";
|
||||
|
||||
defineProps({
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { Command } from "@/model/ChatModel";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constants/constant";
|
||||
import { checkToken } from "@/hooks/useGoLogin";
|
||||
|
||||
const itemList = ref([
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, defineProps, computed, defineExpose } from "vue";
|
||||
import { getCurrentConfig } from "@/constant/base";
|
||||
import { getCurrentConfig } from "@/constants/base";
|
||||
import SpriteAnimator from "@/components/Sprite/SpriteAnimator.vue";
|
||||
|
||||
const props = defineProps({
|
||||
|
||||
@@ -18,7 +18,7 @@ v
|
||||
|
||||
<script setup>
|
||||
import { defineProps, computed, getCurrentInstance, defineExpose } from "vue";
|
||||
import { getCurrentConfig } from "@/constant/base";
|
||||
import { getCurrentConfig } from "@/constants/base";
|
||||
import ChatMoreTips from "../ChatMoreTips/index.vue";
|
||||
import SpriteAnimator from "@/components/Sprite/SpriteAnimator.vue";
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -20,7 +20,7 @@
|
||||
|
||||
<script setup>
|
||||
import { getCurrentInstance, nextTick, onMounted, ref, watch } from "vue";
|
||||
import { isZhiNian } from "@/constant/base";
|
||||
import { isZhiNian } from "@/constants/base";
|
||||
import indicatorSrc from "./images/selected_tabs_icon.png";
|
||||
import indicatorSrcB from "./images/selected_tabs_icon_b.png";
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref } from "vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE, SWITCH_TO_COMPANION_TAB } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE, SWITCH_TO_COMPANION_TAB } from "@/constants/constant";
|
||||
import { navigateTo } from "@/router";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
import { getAccessToken } from "@/constants/token";
|
||||
|
||||
import FindTabs from "./components/FindTabs/index.vue";
|
||||
import CardSwiper from "./components/CardSwiper/index.vue";
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, nextTick } from "vue";
|
||||
import { SCROLL_TO_BOTTOM } from "@/constant/constant";
|
||||
import { discoveryCradComponent } from "@/request/api/MainPageDataApi";
|
||||
import { SCROLL_TO_BOTTOM } from "@/constants/constant";
|
||||
import { discoveryCradComponent } from "@/api/home";
|
||||
import RecommendPostsList from "../RecommendPostsList/index.vue";
|
||||
|
||||
const themeDTOList = ref([]);
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE } from "@/constants/constant";
|
||||
import { defineProps } from "vue";
|
||||
import ModuleTitle from "@/components/ModuleTitle/index.vue";
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
padding: 12px;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
font-size: $uni-font-size-sm;
|
||||
color: $uni-text-color;
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, defineEmits, defineExpose } from "vue";
|
||||
import { getLoginUserPhone } from "@/request/api/LoginApi";
|
||||
import { NOTICE_EVENT_LOGOUT } from "@/constant/constant";
|
||||
import { getLoginUserPhone } from "@/api/login";
|
||||
import { NOTICE_EVENT_LOGOUT } from "@/constants/constant";
|
||||
import { useAppStore } from "@/store";
|
||||
|
||||
const appStore = useAppStore();
|
||||
@@ -88,22 +88,7 @@ const handleMenuClick = (item) => {
|
||||
};
|
||||
|
||||
// 退出登录
|
||||
const handleLogout = () => {
|
||||
uni.showModal({
|
||||
title: "温馨提示",
|
||||
content: "确定要退出登录吗?",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.clearStorageSync();
|
||||
emits("close");
|
||||
uni.$emit(NOTICE_EVENT_LOGOUT);
|
||||
uni.showToast({
|
||||
title: "退出登录成功",
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
const handleLogout = () => { };
|
||||
|
||||
defineExpose({ getLoginUserPhoneInfo });
|
||||
</script>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
.label {
|
||||
font-size: 28rpx;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.value {
|
||||
@@ -59,7 +59,7 @@
|
||||
height: 42px;
|
||||
margin-top: 40px;
|
||||
background-color: #fff;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
border-radius: 8rpx;
|
||||
border: none;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
.title {
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.close-icon {
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
import { defineProps, nextTick, onMounted, computed } from "vue";
|
||||
import {
|
||||
SCROLL_TO_BOTTOM,
|
||||
} from "@/constant/constant";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
} from "@/constants/constant";
|
||||
import { getAccessToken } from "@/constants/token";
|
||||
import { navigateTo } from "@/router";
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
}
|
||||
|
||||
.content {
|
||||
background: linear-gradient(180deg, $theme-color-100 0%, #0ccd58 100%);
|
||||
background: linear-gradient(180deg, #e8fff1 0%, #0ccd58 100%);
|
||||
border-radius: 24px 24px 24px 24px;
|
||||
border: 1px solid #ffffff;
|
||||
position: relative;
|
||||
@@ -23,8 +23,8 @@
|
||||
.btn-bg-sub {
|
||||
background: #0ccd58;
|
||||
box-shadow:
|
||||
inset 0px 0px 41px 0px $theme-color-50,
|
||||
inset 0px 0px 15px 0px $theme-color-100;
|
||||
inset 0px 0px 41px 0px #f0f8f3,
|
||||
inset 0px 0px 15px 0px #e8fff1;
|
||||
}
|
||||
|
||||
/* 左上角标签容器 */
|
||||
|
||||
@@ -20,7 +20,7 @@ import { onMounted, ref } from "vue";
|
||||
import { defineProps, computed } from "vue";
|
||||
import SpriteAnimator from "@/components/Sprite/SpriteAnimator.vue";
|
||||
import NoticeMessage from "../NoticeMessage/index.vue";
|
||||
import { getLocalWeather } from "@/request/api/MainPageDataApi";
|
||||
import { getLocalWeather } from "@/api/home";
|
||||
|
||||
const weatherText = ref('');
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
<script setup>
|
||||
import TopNavBar from "@/components/TopNavBar/index.vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constants/constant";
|
||||
|
||||
const products = [
|
||||
{
|
||||
|
||||
@@ -76,8 +76,8 @@
|
||||
|
||||
<script setup>
|
||||
import TopNavBar from "@/components/TopNavBar/index.vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constant/constant";
|
||||
import { getAccessToken } from "@/constant/token";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constants/constant";
|
||||
import { getAccessToken } from "@/constants/token";
|
||||
import { navigateTo } from "@/router";
|
||||
|
||||
const photo = {
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
<script setup>
|
||||
import TopNavBar from "@/components/TopNavBar/index.vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constants/constant";
|
||||
|
||||
const faq = ["古桥有什么传说", "最佳观赏时间", "旁边还有什么景点"];
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
<script setup>
|
||||
import TopNavBar from "@/components/TopNavBar/index.vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT } from "@/constants/constant";
|
||||
|
||||
const steps = [
|
||||
{
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { Command } from "@/model/ChatModel";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constant/constant";
|
||||
import { Command } from "@/constants/ChatModel";
|
||||
import { SEND_MESSAGE_COMMAND_TYPE } from "@/constants/constant";
|
||||
import { checkToken } from "@/hooks/useGoLogin";
|
||||
|
||||
const popup = ref(null);
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, ref } from "vue";
|
||||
import { getTimeNoticeList } from "@/request/api/MainPageDataApi";
|
||||
import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constant/constant";
|
||||
import { getTimeNoticeList } from "@/api/home";
|
||||
import { NOTICE_EVENT_LOGIN_SUCCESS } from "@/constants/constant";
|
||||
|
||||
const props = defineProps({
|
||||
tipsMessage: {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
.label {
|
||||
font-size: 24rpx;
|
||||
color: $uni-text-color-grey;
|
||||
color: #333-grey;
|
||||
}
|
||||
.date {
|
||||
font-size: 28rpx;
|
||||
|
||||
@@ -12,8 +12,8 @@ import QuickBookingCalender from "../QuickBookingCalender/index.vue";
|
||||
import QuickBookingContentList from "../QuickBookingContentList/index.vue";
|
||||
import { ref, nextTick } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
import { quickBookingComponent } from "@/request/api/MainPageDataApi";
|
||||
import { SCROLL_TO_BOTTOM } from "@/constant/constant";
|
||||
import { quickBookingComponent } from "@/api/home";
|
||||
import { SCROLL_TO_BOTTOM } from "@/constants/constant";
|
||||
|
||||
const selectedDate = ref({});
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
left: 8px;
|
||||
background: #ffe7b2;
|
||||
color: #b97a00;
|
||||
font-size: $uni-font-size-sm;
|
||||
font-size: 12px;
|
||||
padding: 2px 8px;
|
||||
border-radius: 4px;
|
||||
z-index: 2;
|
||||
@@ -59,7 +59,7 @@
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #222;
|
||||
width: 100%;
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
.card-price {
|
||||
color: #ff6600;
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.card-unit {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
<script setup>
|
||||
import { defineProps } from "vue";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE } from "@/constant/constant";
|
||||
import { SEND_MESSAGE_CONTENT_TEXT, SEND_MESSAGE_COMMAND_TYPE } from "@/constants/constant";
|
||||
import ModuleTitle from "@/components/ModuleTitle/index.vue";
|
||||
|
||||
const props = defineProps({
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
.popup-title {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
line-height: 24px;
|
||||
}
|
||||
@@ -65,8 +65,8 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #ffffff;
|
||||
border-radius: $uni-border-radius-50px;
|
||||
font-size: $uni-font-size-lg;
|
||||
border-radius: 50px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ import {
|
||||
import CheckBox from "@/components/CheckBox/index.vue";
|
||||
import AgreePopup from "./components/AgreePopup/index.vue";
|
||||
import { zniconsMap } from "@/static/fonts/znicons";
|
||||
import { getCurrentConfig } from "@/constant/base";
|
||||
import { getCurrentConfig } from "@/constants/base";
|
||||
|
||||
// 是否需要微信手机号授权登录
|
||||
const needWxAuthLogin = ref(false);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
.notice-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: $uni-font-size-lg;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
|
||||
.tab-text {
|
||||
font-size: $uni-font-size-base;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
font-weight: 400;
|
||||
transition: all 0.3s ease;
|
||||
@@ -29,14 +29,14 @@
|
||||
}
|
||||
|
||||
.tab-text-active {
|
||||
color: $uni-text-color;
|
||||
font-size: $uni-font-size-lg;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.tab-item-active {
|
||||
.tab-text {
|
||||
color: $uni-text-color;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
@@ -48,7 +48,8 @@
|
||||
min-height: 3px; /* 确保最小高度 */
|
||||
background-color: #007aff;
|
||||
border-radius: 10px;
|
||||
transition: left 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); /* 启用硬件加速 */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.order-detail-wrapper {
|
||||
background: linear-gradient(180deg, $theme-color-100 0%, #f5f7fa 100%);
|
||||
background: linear-gradient(180deg, #e8fff1 0%, #f5f7fa 100%);
|
||||
padding: 0 12px 40px;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.tab-wrapper {
|
||||
background-color: $theme-color-100;
|
||||
background-color: #e8fff1;
|
||||
height: 48px;
|
||||
overflow-x: auto;
|
||||
/* 支持横向滚动 */
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
<div class="order-card bg-white border-box p-12 rounded-12 m-12">
|
||||
<!-- 卡片头部 -->
|
||||
<div class="border-box flex flex-items-center pb-12">
|
||||
<img
|
||||
class="icon mr-4"
|
||||
src="https://oss.nianxx.cn/mp/static/version_101/service/service_icon.png"
|
||||
/>
|
||||
<img class="icon mr-4" src="https://oss.nianxx.cn/mp/static/version_101/service/service_icon.png" />
|
||||
<span class="font-size-14 color-525866 line-height-20">工单</span>
|
||||
<span class="font-size-12 color-525866 line-height-20 ml-auto">{{
|
||||
isCancelWork ? "已取消" : workOrderStatus(orderData.workOrderStatus)
|
||||
@@ -25,54 +22,34 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<img
|
||||
v-if="orderData.contentImgUrl"
|
||||
class="right rounded-6"
|
||||
:src="orderData.contentImgUrl"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<img v-if="orderData.contentImgUrl" class="right rounded-6" :src="orderData.contentImgUrl" mode="aspectFill" />
|
||||
</div>
|
||||
|
||||
<!-- 服务人员 -->
|
||||
<div
|
||||
v-if="orderData.processMemberName && orderData.processMemberPhone"
|
||||
class="service-user border-box p-8 flex flex-items-center flex-justify-between mb-12"
|
||||
>
|
||||
<div v-if="orderData.processMemberName && orderData.processMemberPhone"
|
||||
class="service-user border-box p-8 flex flex-items-center flex-justify-between mb-12">
|
||||
<div class="font-size-12 line-height-16">
|
||||
服务人员:{{ orderData.processMemberName }}
|
||||
</div>
|
||||
<uni-icons
|
||||
class="ml-auto mr-4"
|
||||
type="phone-filled"
|
||||
size="14"
|
||||
color="#436799"
|
||||
/>
|
||||
<span class="font-size-12 line-height-16" @click="callService"
|
||||
>拨打电话</span
|
||||
>
|
||||
<uni-icons class="ml-auto mr-4" type="phone-filled" size="14" color="#436799" />
|
||||
<span class="font-size-12 line-height-16" @click="callService">拨打电话</span>
|
||||
</div>
|
||||
|
||||
<!-- 取消操作 -->
|
||||
<div
|
||||
v-if="
|
||||
!isCancelWork &&
|
||||
orderData.workOrderStatus !== '2' &&
|
||||
orderData.workOrderStatus !== '3'
|
||||
"
|
||||
class="flex flex-items-center flex-justify-between"
|
||||
>
|
||||
<span
|
||||
class="cancel border-box border rounded-6 font-size-12 line-height-16 color-525866 ml-auto"
|
||||
@click="cancelCall"
|
||||
>取消呼叫</span
|
||||
>
|
||||
<div v-if="
|
||||
!isCancelWork &&
|
||||
orderData.workOrderStatus !== '2' &&
|
||||
orderData.workOrderStatus !== '3'
|
||||
" class="flex flex-items-center flex-justify-between">
|
||||
<span class="cancel border-box border rounded-6 font-size-12 line-height-16 color-525866 ml-auto"
|
||||
@click="cancelCall">取消呼叫</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { defineProps } from "vue";
|
||||
import { closeWorkOrder } from "@/request/api/WorkOrderApi";
|
||||
import { closeWorkOrder } from "@/api/WorkOrder";
|
||||
import { ref } from "vue";
|
||||
const isCancelWork = ref(false);
|
||||
|
||||
|
||||
@@ -1,36 +1,21 @@
|
||||
<template>
|
||||
<z-paging
|
||||
:bg-color="
|
||||
'linear-gradient(180deg, ' +
|
||||
$theme -
|
||||
color -
|
||||
100 +
|
||||
' 0%, #F5F7FA 100%) 0 86px / 100% 100px no-repeat'
|
||||
"
|
||||
ref="paging"
|
||||
v-model="dataList"
|
||||
use-virtual-list
|
||||
:force-close-inner-list="true"
|
||||
cell-height-mode="dynamic"
|
||||
safe-area-inset-bottom
|
||||
@query="queryList"
|
||||
>
|
||||
<z-paging :bg-color="'linear-gradient(180deg, ' +
|
||||
$theme -
|
||||
color -
|
||||
100 +
|
||||
' 0%, #F5F7FA 100%) 0 86px / 100% 100px no-repeat'
|
||||
" ref="paging" v-model="dataList" use-virtual-list :force-close-inner-list="true" cell-height-mode="dynamic"
|
||||
safe-area-inset-bottom @query="queryList">
|
||||
<template #top>
|
||||
<TopNavBar title="呼叫服务" />
|
||||
</template>
|
||||
|
||||
<template #empty>
|
||||
<CustomEmpty
|
||||
emptyIcon="https://oss.nianxx.cn/mp/static/version_101/order/service_empty.png"
|
||||
statusspan="您暂无呼叫服务"
|
||||
/>
|
||||
<CustomEmpty emptyIcon="https://oss.nianxx.cn/mp/static/version_101/order/service_empty.png"
|
||||
statusspan="您暂无呼叫服务" />
|
||||
</template>
|
||||
|
||||
<OrderCard
|
||||
v-for="(item, index) in dataList"
|
||||
:key="item.id || index"
|
||||
:orderData="item"
|
||||
/>
|
||||
<OrderCard v-for="(item, index) in dataList" :key="item.id || index" :orderData="item" />
|
||||
</z-paging>
|
||||
</template>
|
||||
|
||||
@@ -39,7 +24,7 @@ import { ref } from "vue";
|
||||
import TopNavBar from "@/components/TopNavBar/index.vue";
|
||||
import CustomEmpty from "@/components/CustomEmpty/index.vue";
|
||||
import OrderCard from "./components/OrderCard/index.vue";
|
||||
import { userWorkOrderList } from "@/request/api/WorkOrderApi";
|
||||
import { userWorkOrderList } from "@/api/WorkOrder";
|
||||
|
||||
const dataList = ref([]);
|
||||
const paging = ref(null);
|
||||
|
||||
Reference in New Issue
Block a user