| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <template>
- <view class="family-member-strip" v-if="members && members.length > 0">
- <scroll-view
- class="strip-scroll"
- scroll-x
- :scroll-with-animation="true"
- :enhanced="true"
- show-scrollbar="false"
- v-if="members.length >= 4"
- >
- <view class="strip-inner scroll-mode">
- <FamilyMemberCard
- v-for="member in members"
- :key="member.id"
- :member="member"
- :isSelected="member.id === selectedMemberId"
- @select="onSelect"
- />
- </view>
- </scroll-view>
- <view class="strip-inner center-mode" v-else>
- <FamilyMemberCard
- v-for="member in members"
- :key="member.id"
- :member="member"
- :isSelected="member.id === selectedMemberId"
- @select="onSelect"
- />
- </view>
- </view>
- </template>
- <script>
- import FamilyMemberCard from '@/components/FamilyMemberCard'
- export default {
- components: { FamilyMemberCard },
- props: {
- members: { type: Array, default: function() { return [] } },
- selectedMemberId: { type: Number, default: null }
- },
- methods: {
- onSelect: function(member) {
- this.$emit('select', member)
- }
- }
- }
- </script>
- <style scoped>
- .family-member-strip {
- margin: 16rpx 0;
- padding: 0 30rpx;
- }
- .strip-scroll {
- width: 100%;
- white-space: nowrap;
- }
- .strip-inner {
- display: flex;
- flex-direction: row;
- }
- .strip-inner.scroll-mode {
- gap: 16rpx;
- }
- .strip-inner.center-mode {
- justify-content: center;
- gap: 24rpx;
- flex-wrap: wrap;
- }
- /* scroll-view 内的 FamilyMemberCard 需要 display: inline-flex 支持横向滚动 */
- .strip-scroll .strip-inner.scroll-mode {
- display: inline-flex;
- }
- </style>
|