feat: 优化处理了滚动条的问题

This commit is contained in:
2025-08-13 19:29:11 +08:00
parent 6e365fd187
commit ef8d388837
8 changed files with 587 additions and 586 deletions

47
App.vue
View File

@@ -5,32 +5,32 @@ import { goLogin } from "@/hooks/useGoLogin";
import { goHome } from "@/hooks/useGoHome"; import { goHome } from "@/hooks/useGoHome";
onLaunch(async () => { onLaunch(async () => {
console.log("App Launch"); console.log("App Launch");
const token = uni.getStorageSync("token"); const token = uni.getStorageSync("token");
// 检测是否绑定手机号和token // 检测是否绑定手机号和token
if (!token) { if (!token) {
goLogin(); goLogin();
return; return;
} }
if (token) { if (token) {
const res = await checkPhone(); const res = await checkPhone();
if (res.data) { if (res.data) {
goHome(); goHome();
}
} }
}
}); });
onShow(() => { onShow(() => {
console.log("App Show"); console.log("App Show");
}); });
onHide(() => { onHide(() => {
console.log("App Hide"); console.log("App Hide");
}); });
</script> </script>
@@ -41,13 +41,18 @@ onHide(() => {
page, page,
body, body,
#app { #app {
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
background-color: #e9f3f7; background-color: #e9f3f7;
height: 100vh; height: 100vh;
width: 100vw; width: 100vw;
}
/*每个页面公共css */
::-webkit-scrollbar {
display: none;
} }
.mb12 { .mb12 {
margin-bottom: 12px; margin-bottom: 12px;
} }
</style> </style>

View File

@@ -50,12 +50,6 @@ const sendReply = (text) => {
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
padding-bottom: 12px; padding-bottom: 12px;
box-sizing: border-box; box-sizing: border-box;
/* 隐藏滚动条 */
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
} }
.more-tips-item { .more-tips-item {

View File

@@ -1,140 +1,143 @@
<template> <template>
<view class="quick-access"> <view class="quick-access">
<view class="quick-access-scroll"> <view class="quick-access-scroll">
<view class="quick-access-item" v-for="(item, index) in itemList" :key="index" @click="sendReply(item)"> <view
<image class="quick-access-item-bg" src="/static/quick/quick_icon_bg.png" mode="aspectFill"></image> class="quick-access-item"
<view class="quick-access-item-title"> v-for="(item, index) in itemList"
<image :src="item.icon"></image> :key="index"
<text>{{ item.title }}</text> @click="sendReply(item)"
</view> >
<text class="quick-access-item-content">{{ item.content }}</text> <image
</view> class="quick-access-item-bg"
</view> src="/static/quick/quick_icon_bg.png"
</view> mode="aspectFill"
></image>
<view class="quick-access-item-title">
<image :src="item.icon"></image>
<text>{{ item.title }}</text>
</view>
<text class="quick-access-item-content">{{
item.content
}}</text>
</view>
</view>
</view>
</template> </template>
<script setup> <script setup>
import { onMounted, ref } from 'vue'; import { onMounted, ref } from "vue";
const itemList = ref([]) const itemList = ref([]);
const emits = defineEmits(['replySent']); const emits = defineEmits(["replySent"]);
const sendReply = (item) => { const sendReply = (item) => {
emits('replySent', item); // 向父组件传递数据 emits("replySent", item); // 向父组件传递数据
} };
onMounted(() => { onMounted(() => {
initData() initData();
}) });
const initData = () => { const initData = () => {
itemList.value = [ itemList.value = [
{ {
icon: '/static/quick/quick_icon_yuding.png', icon: "/static/quick/quick_icon_yuding.png",
title: '快速预定', title: "快速预定",
content: '预定门票、房间、餐食', content: "预定门票、房间、餐食",
type: 'Command.quickBooking' type: "Command.quickBooking",
}, },
{ {
icon: '/static/quick/quick_icon_find.png', icon: "/static/quick/quick_icon_find.png",
title: '探索发现', title: "探索发现",
content: '探索玩法、出片佳地', content: "探索玩法、出片佳地",
type: 'Command.discovery' type: "Command.discovery",
}, },
{ {
icon: '/static/quick/quick_icon_order.png', icon: "/static/quick/quick_icon_order.png",
title: '订单/工单', title: "订单/工单",
content: '我的订单/工单', content: "我的订单/工单",
type: 'MyOrder' type: "MyOrder",
}, },
{ {
icon: '/static/quick/quick_icon_call.png', icon: "/static/quick/quick_icon_call.png",
title: '呼叫服务', title: "呼叫服务",
content: '加水、客房服务等', content: "加水、客房服务等",
type: 'Command.createWorkOrder' type: "Command.createWorkOrder",
} },
] ];
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.quick-access { .quick-access {
width: 100%; width: 100%;
&-scroll {
display: flex;
flex-direction: row;
overflow-x: auto;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
/* 隐藏滚动条 */
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
.quick-access-item {
flex: 0 0 104px;
border-radius: 8px;
margin: 4px 4px 8px 4px;
box-shadow: 0 2px 5px 0px rgba(0,0,0,0.1);
padding: 12px;
display: inline-flex;
flex-direction: column;
position: relative;
&:first-child {
margin-left: 12px;
}
&:last-child {
margin-right: 12px;
}
.quick-access-item-bg {
position: absolute;
top: 0;
left: 0;
z-index: 0;
border-radius: 8px;
width: 128px;
height: 56px;
}
.quick-access-item-title {
display: flex;
align-items: center;
z-index: 1;
image {
width: 16px;
height: 16px;
margin-right: 4px;
}
text {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 12px;
color: #201F32;
line-height: 16px;
}
}
.quick-access-item-content {
z-index: 1;
margin-top: 4px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 10px;
color: #678CAD;
line-height: 18px;
}
}
}
&-scroll {
display: flex;
flex-direction: row;
overflow-x: auto;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
}
.quick-access-item {
flex: 0 0 104px;
border-radius: 8px;
margin: 4px 4px 8px 4px;
box-shadow: 0 2px 5px 0px rgba(0, 0, 0, 0.1);
padding: 12px;
display: inline-flex;
flex-direction: column;
position: relative;
&:first-child {
margin-left: 12px;
}
&:last-child {
margin-right: 12px;
}
.quick-access-item-bg {
position: absolute;
top: 0;
left: 0;
z-index: 0;
border-radius: 8px;
width: 128px;
height: 56px;
}
.quick-access-item-title {
display: flex;
align-items: center;
z-index: 1;
image {
width: 16px;
height: 16px;
margin-right: 4px;
}
text {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 12px;
color: #201f32;
line-height: 16px;
}
}
.quick-access-item-content {
z-index: 1;
margin-top: 4px;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 10px;
color: #678cad;
line-height: 18px;
}
}
}
</style> </style>

View File

@@ -49,14 +49,6 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.area-msg-list-content {
/* 隐藏滚动条 */
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
.message-item-ai { .message-item-ai {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
@@ -140,15 +132,6 @@
align-items: center; align-items: center;
} }
} }
::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
background: transparent;
color: transparent;
}
// 打字机光标闪烁动画 // 打字机光标闪烁动画
.typing-cursor { .typing-cursor {

View File

@@ -1,201 +1,214 @@
<template> <template>
<view class="container"> <view class="container">
<ModuleTitle :title="commodityDTO.title" /> <ModuleTitle :title="commodityDTO.title" />
<view class="container-scroll"> <view class="container-scroll">
<view v-for="(item, index) in commodityDTO.commodityList" :key="`${item.commodityId}-${index}`"> <view
v-for="(item, index) in commodityDTO.commodityList"
:key="`${item.commodityId}-${index}`"
>
<view class="mk-card-item" @click="placeOrderHandle(item)"> <view class="mk-card-item" @click="placeOrderHandle(item)">
<!-- <view class="card-badge">超值推荐</view> --> <!-- <view class="card-badge">超值推荐</view> -->
<image class="card-img" :src="item.commodityIcon" mode="aspectFill" /> <image
<view class="card-content"> class="card-img"
<view class="card-title-column"> :src="item.commodityIcon"
<text class="card-title">{{ item.commodityName }}</text> mode="aspectFill"
<view class="card-tags" v-for="(tag) in item.commodityTradeRuleList" :key="tag"> />
<text class="card-tag">{{ tag }}</text> <view class="card-content">
</view> <view class="card-title-column">
</view> <text class="card-title">{{
<template v-for="(serviceItem, index) in item.commodityServices" :key="serviceItem.serviceTitle"> item.commodityName
<view v-if="index < 3" class="card-desc">· {{ serviceItem.serviceTitle }}</view> }}</text>
</template> <view
<view class="card-bottom-row"> class="card-tags"
<view class="card-price-row"> v-for="tag in item.commodityTradeRuleList"
<text class="card-price-fu"></text> :key="tag"
<text class="card-price">{{ item.commodityPrice }}</text> >
<text class="card-unit">/</text> <text class="card-tag">{{ tag }}</text>
</view> </view>
</view>
<template
v-for="(
serviceItem, index
) in item.commodityServices"
:key="serviceItem.serviceTitle"
>
<view v-if="index < 3" class="card-desc"
>· {{ serviceItem.serviceTitle }}</view
>
</template>
<view class="card-bottom-row">
<view class="card-price-row">
<text class="card-price-fu">¥</text>
<text class="card-price">{{
item.commodityPrice
}}</text>
<text class="card-unit">/人</text>
</view>
<text class="card-btn">下单</text> <text class="card-btn">下单</text>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import ModuleTitle from '@/components/ModuleTitle/index.vue' import ModuleTitle from "@/components/ModuleTitle/index.vue";
import { defineProps } from 'vue' import { defineProps } from "vue";
const props = defineProps({ const props = defineProps({
commodityDTO: { commodityDTO: {
type: Object, type: Object,
default: {} default: {},
} },
}) });
/// 去下单
const placeOrderHandle = (item) => {
uni.navigateTo({
url: `/pages/goods/index?commodityId=${item.commodityId}`,
})
}
/// 去下单
const placeOrderHandle = (item) => {
uni.navigateTo({
url: `/pages/goods/index?commodityId=${item.commodityId}`,
});
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
.container-scroll {
display: flex;
flex-direction: row;
overflow-x: auto;
overflow-y: hidden;
margin: 4px 0;
.container-scroll { .mk-card-item {
display: flex; position: relative;
flex-direction: row;
overflow-x: auto;
overflow-y: hidden;
margin: 4px 0;
/* 隐藏滚动条 */ display: flex;
scrollbar-width: none; flex-direction: column;
&::-webkit-scrollbar { align-items: start;
display: none; width: 188px;
} // height: 244px;
background-color: #ffffff;
border-radius: 10px;
margin-right: 8px;
padding-bottom: 12px;
.mk-card-item { .card-badge {
position: relative; position: absolute;
top: 8px;
left: 8px;
background: #ffe7b2;
color: #b97a00;
font-size: 12px;
padding: 2px 8px;
border-radius: 4px;
z-index: 2;
}
display: flex; .card-img {
flex-direction: column; width: 188px;
align-items: start; height: 114px;
width: 188px; border-radius: 10px;
// height: 244px; object-fit: cover; /* 确保图片不变形,保持比例裁剪 */
background-color: #ffffff; flex-shrink: 0; /* 防止图片被压缩 */
border-radius: 10px; }
margin-right: 8px;
padding-bottom: 12px;
.card-badge { .card-content {
position: absolute; box-sizing: border-box;
top: 8px; padding: 10px 12px 0 12px;
left: 8px; display: flex;
background: #ffe7b2; flex-direction: column;
color: #b97a00; justify-content: space-between;
font-size: 12px; align-items: start;
padding: 2px 8px; width: 100%;
border-radius: 4px; flex: 1; /* 让内容区域占据剩余空间 */
z-index: 2; overflow: hidden; /* 防止内容溢出 */
} }
.card-img { .card-title-column {
width: 188px; display: flex;
height: 114px; align-items: start;
border-radius: 10px; flex-direction: column;
object-fit: cover; /* 确保图片不变形,保持比例裁剪 */ width: 100%;
flex-shrink: 0; /* 防止图片被压缩 */ }
}
.card-content { .card-title {
box-sizing: border-box; font-size: 16px;
padding: 10px 12px 0 12px; font-weight: bold;
display: flex; color: #222;
flex-direction: column; width: 100%;
justify-content: space-between; /* 限制标题最多显示两行 */
align-items: start; display: -webkit-box;
width: 100%; -webkit-box-orient: vertical;
flex: 1; /* 让内容区域占据剩余空间 */ -webkit-line-clamp: 2;
overflow: hidden; /* 防止内容溢出 */ overflow: hidden;
} text-overflow: ellipsis;
line-height: 1.4;
max-height: 2.8em; /* 2行的高度 */
}
.card-title-column { .card-tags {
display: flex; display: flex;
align-items: start; flex-direction: row;
flex-direction: column; align-items: start;
width: 100%; padding: 6px 0;
} }
.card-title { .card-tag {
font-size: 16px; background: #f5f5f5;
font-weight: bold; color: #ff6600;
color: #222; font-size: 10px;
width: 100%; border-radius: 4px;
/* 限制标题最多显示两行 */ padding: 0 6px;
display: -webkit-box; margin-left: 2px;
-webkit-box-orient: vertical; border: 1px solid #ff6600;
-webkit-line-clamp: 2; }
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.4;
max-height: 2.8em; /* 2行的高度 */
}
.card-tags { .card-desc {
display: flex; font-size: 13px;
flex-direction: row; color: #888;
align-items: start; margin-top: 2px;
padding: 6px 0; }
}
.card-tag { .card-bottom-row {
background: #f5f5f5; display: flex;
color: #ff6600; align-items: center;
font-size: 10px; justify-content: space-between;
border-radius: 4px; margin-top: 8px;
padding: 0 6px; width: 100%;
margin-left: 2px; }
border: 1px solid #ff6600;
}
.card-desc { .card-price-row {
font-size: 13px; .card-price-fu {
color: #888; color: #ff6600;
margin-top: 2px; font-size: 11px;
} font-weight: normal;
}
.card-bottom-row { .card-price {
display: flex; color: #ff6600;
align-items: center; font-size: 16px;
justify-content: space-between; font-weight: bold;
margin-top: 8px; }
width: 100%; .card-unit {
} font-size: 11px;
color: #888;
font-weight: normal;
margin-left: 2px;
}
}
.card-price-row { .card-btn {
.card-price-fu { background: #ff6600;
color: #ff6600; color: #fff;
font-size: 11px; font-size: 15px;
font-weight: normal; border-radius: 20px;
} padding: 0 18px;
height: 32px;
.card-price { line-height: 32px;
color: #ff6600; }
font-size: 16px; }
font-weight: bold; }
} }
.card-unit {
font-size: 11px;
color: #888;
font-weight: normal;
margin-left: 2px;
}
}
.card-btn {
background: #ff6600;
color: #fff;
font-size: 15px;
border-radius: 20px;
padding: 0 18px;
height: 32px;
line-height: 32px;
}
}
}
}
</style> </style>

View File

@@ -1,200 +1,214 @@
<template> <template>
<view class="container"> <view class="container">
<ModuleTitle title="相关商品" /> <ModuleTitle title="相关商品" />
<view class="container-scroll"> <view class="container-scroll">
<view v-for="(item, index) in commodityList" :key="`${item.commodityId}-${index}`"> <view
<view class="mk-card-item" @click="placeOrderHandle(item)"> v-for="(item, index) in commodityList"
<image class="card-img" :src="item.commodityPhoto" mode="aspectFill" /> :key="`${item.commodityId}-${index}`"
<view class="card-content"> >
<view class="card-title-column"> <view class="mk-card-item" @click="placeOrderHandle(item)">
<text class="card-title">{{ item.commodityName }}</text> <image
<view class="card-tags" v-for="(tag) in item.commodityTradeRuleList" :key="tag"> class="card-img"
<text class="card-tag">{{ tag }}</text> :src="item.commodityPhoto"
</view> mode="aspectFill"
</view> />
<template v-for="(serviceItem, index) in item.commodityServices" :key="serviceItem.serviceTitle"> <view class="card-content">
<view v-if="index < 3" class="card-desc">· {{ serviceItem.serviceTitle }}</view> <view class="card-title-column">
</template> <text class="card-title">{{
<view class="card-bottom-row"> item.commodityName
<view class="card-price-row"> }}</text>
<text class="card-price-fu"></text> <view
<text class="card-price">{{ item.specificationPrice }}</text> class="card-tags"
<text class="card-unit">/</text> v-for="tag in item.commodityTradeRuleList"
</view> :key="tag"
<text class="card-btn">下单</text> >
</view> <text class="card-tag">{{ tag }}</text>
</view> </view>
</view>
<template
v-for="(
serviceItem, index
) in item.commodityServices"
:key="serviceItem.serviceTitle"
>
<view v-if="index < 3" class="card-desc"
>· {{ serviceItem.serviceTitle }}</view
>
</template>
<view class="card-bottom-row">
<view class="card-price-row">
<text class="card-price-fu">¥</text>
<text class="card-price">{{
item.specificationPrice
}}</text>
<text class="card-unit">/人</text>
</view>
<text class="card-btn">下单</text>
</view>
</view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import ModuleTitle from '@/components/ModuleTitle/index.vue' import ModuleTitle from "@/components/ModuleTitle/index.vue";
import { defineProps } from 'vue' import { defineProps } from "vue";
const props = defineProps({ const props = defineProps({
commodityList: { commodityList: {
type: Array, type: Array,
default: [] default: [],
} },
}) });
/// 去下单
const placeOrderHandle = (item) => {
uni.navigateTo({
url: `/pages/goods/index?commodityId=${item.commodityId}`,
})
}
/// 去下单
const placeOrderHandle = (item) => {
uni.navigateTo({
url: `/pages/goods/index?commodityId=${item.commodityId}`,
});
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
margin: 6px 0 0; margin: 6px 0 0;
.container-scroll { .container-scroll {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
overflow-x: auto; overflow-x: auto;
overflow-y: hidden; overflow-y: hidden;
margin: 4px 0; margin: 4px 0;
/* 隐藏滚动条 */ .mk-card-item {
scrollbar-width: none; position: relative;
&::-webkit-scrollbar {
display: none;
}
.mk-card-item { display: flex;
position: relative; flex-direction: column;
align-items: start;
width: 188px;
// height: 244px;
background-color: #ffffff;
border-radius: 10px;
margin-right: 8px;
padding-bottom: 12px;
display: flex; .card-badge {
flex-direction: column; position: absolute;
align-items: start; top: 8px;
width: 188px; left: 8px;
// height: 244px; background: #ffe7b2;
background-color: #ffffff; color: #b97a00;
border-radius: 10px; font-size: 12px;
margin-right: 8px; padding: 2px 8px;
padding-bottom: 12px; border-radius: 4px;
z-index: 2;
}
.card-badge { .card-img {
position: absolute; width: 188px;
top: 8px; height: 114px;
left: 8px; border-radius: 10px;
background: #ffe7b2; object-fit: cover; /* 确保图片不变形,保持比例裁剪 */
color: #b97a00; flex-shrink: 0; /* 防止图片被压缩 */
font-size: 12px; }
padding: 2px 8px;
border-radius: 4px;
z-index: 2;
}
.card-img { .card-content {
width: 188px; box-sizing: border-box;
height: 114px; padding: 10px 12px 0 12px;
border-radius: 10px; display: flex;
object-fit: cover; /* 确保图片不变形,保持比例裁剪 */ flex-direction: column;
flex-shrink: 0; /* 防止图片被压缩 */ justify-content: space-between;
} align-items: start;
width: 100%;
flex: 1; /* 让内容区域占据剩余空间 */
overflow: hidden; /* 防止内容溢出 */
}
.card-content { .card-title-column {
box-sizing: border-box; display: flex;
padding: 10px 12px 0 12px; align-items: start;
display: flex; flex-direction: column;
flex-direction: column; width: 100%;
justify-content: space-between; }
align-items: start;
width: 100%;
flex: 1; /* 让内容区域占据剩余空间 */
overflow: hidden; /* 防止内容溢出 */
}
.card-title-column { .card-title {
display: flex; font-size: 16px;
align-items: start; font-weight: bold;
flex-direction: column; color: #222;
width: 100%; width: 100%;
} /* 限制标题最多显示两行 */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.4;
max-height: 2.8em; /* 2行的高度 */
}
.card-title { .card-tags {
font-size: 16px; display: flex;
font-weight: bold; flex-direction: row;
color: #222; align-items: start;
width: 100%; padding: 6px 0;
/* 限制标题最多显示两行 */ }
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.4;
max-height: 2.8em; /* 2行的高度 */
}
.card-tags { .card-tag {
display: flex; background: #f5f5f5;
flex-direction: row; color: #ff6600;
align-items: start; font-size: 10px;
padding: 6px 0; border-radius: 4px;
} padding: 0 6px;
margin-left: 2px;
.card-tag {
background: #f5f5f5;
color: #ff6600;
font-size: 10px;
border-radius: 4px;
padding: 0 6px;
margin-left: 2px;
border: 1px solid #ff6600; border: 1px solid #ff6600;
} }
.card-desc { .card-desc {
font-size: 13px; font-size: 13px;
color: #888; color: #888;
margin-top: 2px; margin-top: 2px;
} }
.card-bottom-row { .card-bottom-row {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-top: 8px; margin-top: 8px;
width: 100%; width: 100%;
} }
.card-price-row { .card-price-row {
.card-price-fu { .card-price-fu {
color: #ff6600; color: #ff6600;
font-size: 11px; font-size: 11px;
font-weight: normal; font-weight: normal;
} }
.card-price { .card-price {
color: #ff6600; color: #ff6600;
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
} }
.card-unit { .card-unit {
font-size: 11px; font-size: 11px;
color: #888; color: #888;
font-weight: normal; font-weight: normal;
margin-left: 2px; margin-left: 2px;
} }
} }
.card-btn { .card-btn {
background: #ff6600; background: #ff6600;
color: #fff; color: #fff;
font-size: 15px; font-size: 15px;
border-radius: 20px; border-radius: 20px;
padding: 0 18px; padding: 0 18px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
} }
} }
}
} }
}
</style> </style>

View File

@@ -1,72 +1,67 @@
<template> <template>
<view class="container"> <view class="container">
<ModuleTitle :title="recommendTheme.themeName" /> <ModuleTitle :title="recommendTheme.themeName" />
<view class="container-scroll"> <view class="container-scroll">
<view v-for="(item, index) in recommendTheme.recommendPostsList" :key="index"> <view
v-for="(item, index) in recommendTheme.recommendPostsList"
:key="index"
>
<view class="mk-card-item" @click="sendReply(item)"> <view class="mk-card-item" @click="sendReply(item)">
<image :src="item.coverPhoto" mode="widthFix"></image> <image :src="item.coverPhoto" mode="widthFix"></image>
<text>{{ item.topic }}</text> <text>{{ item.topic }}</text>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import ModuleTitle from '@/components/ModuleTitle/index.vue' import ModuleTitle from "@/components/ModuleTitle/index.vue";
import { RECOMMEND_POSTS_TITLE } from '@/constant/constant' import { RECOMMEND_POSTS_TITLE } from "@/constant/constant";
import { defineProps } from 'vue' import { defineProps } from "vue";
const props = defineProps({ const props = defineProps({
recommendTheme: { recommendTheme: {
type: Object, type: Object,
default: {} default: {},
} },
}) });
const sendReply = (item) => {
const topic = item.userInputContent || item.topic.replace(/^#/, '');
uni.$emit(RECOMMEND_POSTS_TITLE, topic);
}
const sendReply = (item) => {
const topic = item.userInputContent || item.topic.replace(/^#/, "");
uni.$emit(RECOMMEND_POSTS_TITLE, topic);
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
.container-scroll {
display: flex;
flex-direction: row;
overflow-x: auto;
margin-top: 4px;
.container-scroll { .mk-card-item {
display: flex; display: flex;
flex-direction: row; flex-direction: column;
overflow-x: auto; align-items: start;
margin-top: 4px; width: 188px;
height: 154px;
background-color: #ffffff;
border-radius: 10px;
margin-right: 8px;
/* 隐藏滚动条 */ image {
scrollbar-width: none; width: 188px;
&::-webkit-scrollbar { height: 112px;
display: none; }
} text {
padding: 12px;
.mk-card-item { text-align: center;
display: flex; font-weight: 500;
flex-direction: column; font-size: 12px;
align-items: start; color: #333333;
width: 188px; }
height: 154px; }
background-color: #ffffff; }
border-radius: 10px; }
margin-right: 8px;
image {
width: 188px;
height: 112px;
}
text {
padding: 12px;
text-align: center;
font-weight: 500;
font-size: 12px;
color: #333333;
}
}
}
}
</style> </style>

View File

@@ -44,12 +44,6 @@
overflow-x: auto; overflow-x: auto;
margin-top: 4px; margin-top: 4px;
/* 隐藏滚动条 */
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
.mk-card-item { .mk-card-item {
flex-shrink: 0; /* 关键:防止 flex 布局压缩子元素宽度 */ flex-shrink: 0; /* 关键:防止 flex 布局压缩子元素宽度 */
width: 142px; width: 142px;