Compare commits

2 Commits

Author SHA1 Message Date
duanshuwen
afb124ee19 feat: 新增更多服务弹窗 2025-10-15 21:35:54 +08:00
e9dbb3d44f feat: 样式调整 2025-10-15 20:58:12 +08:00
11 changed files with 176 additions and 23 deletions

View File

@@ -1,6 +1,6 @@
<template> <template>
<view class="chat-mine bg-17294E"> <view class="chat-mine bg-17294E">
<text>{{ text }}</text> <text class="font-size-15 color-white">{{ text }}</text>
<slot></slot> <slot></slot>
</view> </view>
</template> </template>

View File

@@ -5,15 +5,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-width: 100px;
max-width: 100%; // ✅ 限制最大宽度 max-width: 100%; // ✅ 限制最大宽度
overflow-x: hidden; // ✅ 防止横向撑开 overflow-x: hidden; // ✅ 防止横向撑开
text {
font-size: 15px;
color: #ffffff;
line-height: 22px;
text-align: justify;
font-style: normal;
text-transform: none;
}
} }

View File

@@ -25,7 +25,7 @@
> >
<template v-if="item.msgType === MessageRole.AI"> <template v-if="item.msgType === MessageRole.AI">
<ChatCardAI <ChatCardAI
class="message-item-ai" class="flex flex-justify-start"
:key="`ai-${item.msgId}-${item.msg ? item.msg.length : 0}`" :key="`ai-${item.msgId}-${item.msg ? item.msg.length : 0}`"
:text="item.msg || ''" :text="item.msg || ''"
:isLoading="item.isLoading" :isLoading="item.isLoading"
@@ -77,11 +77,11 @@
</template> </template>
<template v-else-if="item.msgType === MessageRole.ME"> <template v-else-if="item.msgType === MessageRole.ME">
<ChatCardMine class="message-item-mine" :text="item.msg" /> <ChatCardMine class="flex flex-justify-end" :text="item.msg" />
</template> </template>
<template v-else> <template v-else>
<ChatCardOther class="message-item-other" :text="item.msg"> <ChatCardOther class="flex flex-justify-center" :text="item.msg">
<ActivityListComponent <ActivityListComponent
v-if=" v-if="
mainPageDataModel.activityList && mainPageDataModel.activityList &&

View File

@@ -19,36 +19,41 @@
</template> </template>
<script setup> <script setup>
import { onMounted, ref } from "vue"; import { ref } from "vue";
import { currentClientType, ClientType } from "@/constant/base"; import { currentClientType, ClientType } from "@/constant/base";
const itemList = ref([ const itemList = ref([
{ {
icon: "", icon: "",
title: "快速预定", title: "快速预定",
type: "Command.quickBooking", type: "quickBooking",
}, },
{ {
icon: "", icon: "",
title: "探索发现", title: "探索发现",
type: "Command.discovery", type: "discovery",
}, },
{ {
icon: "", icon: "",
title: "呼叫服务", title: "呼叫服务",
type: "Command.callService", type: "callService",
}, },
{ {
icon: "https://oss.nianxx.cn/mp/static/version_101/home/more.png", icon: "https://oss.nianxx.cn/mp/static/version_101/home/more.png",
title: "更多", title: "更多",
type: "Command.more", type: "more",
}, },
]); ]);
const emits = defineEmits(["replySent"]); const emits = defineEmits(["replySent"]);
const sendReply = (item) => { const sendReply = (item) => {
emits("replySent", item); // 向父组件传递数据 if (item.type === "more") {
uni.$emit("SHOW_MORE_POPUP");
return;
}
emits("replySent", item);
}; };
// onMounted(() => { // onMounted(() => {

View File

@@ -0,0 +1,99 @@
<template>
<uni-popup ref="popup" type="bottom" :safe-area="false">
<view class="popup-content border-box pt-12 pl-12 pr-12">
<view class="header flex flex-items-center pb-12">
<view class="title flex-full font-size-17 color-000 font-500"
>更多服务</view
>
<uni-icons type="close" size="20" color="#CACFD8" @click="close" />
</view>
<view class="list bg-white border-box pl-20 pr-20">
<view
class="item border-box border-bottom pt-20 pb-20"
v-for="(item, index) in list"
:key="index"
@click="close"
>
<view class="flex flex-items-center flex-justify-center">
<image v-if="item.icon" class="left" :src="item.icon" />
<view class="center flex-full">
<view class="font-size-16 color-000 line-height-24 font-500">
{{ item.title }}
</view>
<view class="font-size-12 color-A3A3A3 line-height-16">
{{ item.content }}
</view>
</view>
<view
class="right border-box font-size-12 color-white line-height-16"
>
{{ item.btnText }}
</view>
</view>
</view>
</view>
</view>
</uni-popup>
</template>
<script setup>
import { ref } from "vue";
const popup = ref(null);
const list = ref([
{
icon: "https://oss.nianxx.cn/mp/static/version_101/home/ksyd.png",
title: "快速预定",
content: "预定门票、房间、餐食",
btnText: "去预定",
type: "quickBooking",
},
{
icon: "https://oss.nianxx.cn/mp/static/version_101/home/tsfx.png",
title: "探索发现",
content: "发现景点、活动、特色内容",
btnText: "去探索",
type: "discovery",
},
{
icon: "https://oss.nianxx.cn/mp/static/version_101/home/mddd.png",
title: "我的订单",
content: "查看门票、住宿、餐饮等订单",
btnText: "去查看",
type: "myOrder",
},
{
icon: "https://oss.nianxx.cn/mp/static/version_101/home/wdgd.png",
title: "我的工单",
content: "查看服务工单、进度与处理情况",
btnText: "去查看",
type: "myWorkOrder",
},
{
icon: "https://oss.nianxx.cn/mp/static/version_101/home/fkyj.png",
title: "反馈意见",
content: "提交使用问题、建议与需求",
btnText: "去反馈",
type: "feedback",
},
]);
const open = () => {
popup.value && popup.value.open();
};
const close = () => {
popup.value && popup.value.close();
};
// 接收更多服务
uni.$on("SHOW_MORE_POPUP", () => {
open();
});
</script>
<style lang="scss" scoped>
@import "./styles/index.scss";
</style>

View File

@@ -0,0 +1,29 @@
.popup-content {
background-color: #f5f7fa;
border-radius: 15px 15px 0 0;
padding-bottom: Max(env(safe-area-inset-bottom), 12px) !important;
}
.list {
border-radius: 15px;
}
.item {
gap: 20px;
&:last-child {
border-bottom: none;
}
}
.left {
width: 24px;
height: 24px;
margin-right: 12px;
}
.right {
background-color: #2d91ff;
border-radius: 5px;
padding: 6px;
}

View File

@@ -11,6 +11,9 @@
@close="handleCalendarClose" @close="handleCalendarClose"
@select="handleDateSelect" @select="handleDateSelect"
/> />
<!-- 更多服务 -->
<MoreService />
</template> </template>
<script setup> <script setup>
@@ -20,6 +23,7 @@ import { getUrlParams } from "@/utils/UrlParams";
import { useAppStore } from "@/store"; import { useAppStore } from "@/store";
import ChatMainList from "./components/chat/ChatMainList/index.vue"; import ChatMainList from "./components/chat/ChatMainList/index.vue";
import Calender from "@/components/Calender/index.vue"; import Calender from "@/components/Calender/index.vue";
import MoreService from "./components/module/MoreService/index.vue";
const appStore = useAppStore(); const appStore = useAppStore();

View File

@@ -2,3 +2,7 @@
.border { .border {
border: 1px solid #000; border: 1px solid #000;
} }
.border-bottom {
border-bottom: 1px solid #e5e8ee;
}

View File

@@ -4,22 +4,26 @@
color: #fff; color: #fff;
} }
.color-00 { .color-000 {
color: #000; color: #000;
} }
.color-33 { .color-333 {
color: #333; color: #333;
} }
.color-66 { .color-666 {
color: #666; color: #666;
} }
.color-99 { .color-999 {
color: #999; color: #999;
} }
.color-A3A3A3 {
color: #a3a3a3;
}
.color-525866 { .color-525866 {
color: #525866; color: #525866;
} }

View File

@@ -7,6 +7,14 @@
align-items: center; align-items: center;
} }
.flex-justify-start {
justify-content: flex-start;
}
.flex-justify-end {
justify-content: flex-end;
}
.flex-justify-center { .flex-justify-center {
justify-content: center; justify-content: center;
} }

View File

@@ -1,4 +1,8 @@
// 行高 // 行高
.line-height-16 {
line-height: 16px;
}
.line-height-17 { .line-height-17 {
line-height: 17px; line-height: 17px;
} }
@@ -18,3 +22,7 @@
.line-height-22 { .line-height-22 {
line-height: 22px; line-height: 22px;
} }
.line-height-24 {
line-height: 24px;
}