|
|
@@ -18,25 +18,41 @@
|
|
|
</n-grid>
|
|
|
</n-card>
|
|
|
|
|
|
- <div class="btn-list flex items-align px-5 overflow-x-auto pt-5">
|
|
|
- <div
|
|
|
- class="choose-btn w-2/5 flex-shrink-0 flex-col items-center text-center pb-5 pt-4 border rounded-lg"
|
|
|
- v-for="i in 3"
|
|
|
- :key="i"
|
|
|
- >
|
|
|
- <div class="text-black dark:text-white text-base">3个月</div>
|
|
|
- <div class="text-3xl font-medium"><span class="text-base">¥</span>399</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <n-carousel class="px-5 pt-9" :space-between="23" :show-dots="false" slides-per-view="auto" draggable>
|
|
|
+ <n-carousel-item style="width: 40%" v-for="item in memberships" :key="String(item.id)">
|
|
|
+ <div
|
|
|
+ class="choose-btn flex-shrink-0 flex-col items-center text-center pb-5 pt-4 border rounded-lg"
|
|
|
+ :class="{ prim: chooseMemberId === item.id }"
|
|
|
+ @click="chooseMemberId = item.id"
|
|
|
+ >
|
|
|
+ <div class="text-black dark:text-white text-base">{{ item.name }}</div>
|
|
|
+ <div class="text-3xl font-medium"><span class="text-base">¥</span>{{ item.price }}</div>
|
|
|
+ </div>
|
|
|
+ </n-carousel-item>
|
|
|
+ </n-carousel>
|
|
|
+
|
|
|
+ <div class="btn-list flex items-align"></div>
|
|
|
|
|
|
<div class="px-6 py-10">
|
|
|
- <n-button type="primary" size="large" round block>¥399 立即开通</n-button>
|
|
|
+ <n-button type="primary" size="large" round block>¥{{ chooseMemberInfo?.price || 0 }} 立即开通</n-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
|
import { VipCard } from '@/components/common'
|
|
|
-import { NCard, NEl, NPageHeader, NRow, NCol, NGrid, NGridItem, NButton, NIcon } from 'naive-ui'
|
|
|
+import {
|
|
|
+ NCard,
|
|
|
+ NEl,
|
|
|
+ NPageHeader,
|
|
|
+ NRow,
|
|
|
+ NCol,
|
|
|
+ NGrid,
|
|
|
+ NGridItem,
|
|
|
+ NButton,
|
|
|
+ NIcon,
|
|
|
+ NCarousel,
|
|
|
+ NCarouselItem
|
|
|
+} from 'naive-ui'
|
|
|
import { useRouter } from 'vue-router'
|
|
|
import imgItem01 from '@/assets/png-01.png'
|
|
|
import imgQiye from '@/assets/qiye.png'
|
|
|
@@ -46,6 +62,10 @@ import imgItem03 from '@/assets/png-03.png'
|
|
|
import imgItem05 from '@/assets/png-05.png'
|
|
|
import imgItem06 from '@/assets/png-06.png'
|
|
|
import imgItem07 from '@/assets/png-07.png'
|
|
|
+import { fetchGetMemberships } from '@/api'
|
|
|
+import { onMounted, ref, computed } from 'vue'
|
|
|
+import { useUserMemberStore } from '@/store'
|
|
|
+import type { MemberShip } from '@/store/modules/memberShip/helper'
|
|
|
|
|
|
const router = useRouter()
|
|
|
function handleBack() {
|
|
|
@@ -94,6 +114,27 @@ const items = [
|
|
|
img: imgItem07
|
|
|
}
|
|
|
]
|
|
|
+
|
|
|
+const chooseMemberId = ref(0)
|
|
|
+const chooseMemberInfo = computed(() => {
|
|
|
+ if (chooseMemberId.value) {
|
|
|
+ return memberships.value.find(item => {
|
|
|
+ return item.id === chooseMemberId.value
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return null
|
|
|
+})
|
|
|
+
|
|
|
+const userMemberStore = useUserMemberStore()
|
|
|
+const memberships = ref<Array<MemberShip>>([])
|
|
|
+onMounted(() => {
|
|
|
+ userMemberStore.fetchMembers().then(res => {
|
|
|
+ memberships.value = res
|
|
|
+ if (res.length > 0) {
|
|
|
+ chooseMemberId.value = res[0].id
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
@@ -114,10 +155,14 @@ const items = [
|
|
|
--n-padding-bottom: 10px !important;
|
|
|
--n-color-modal: transparent;
|
|
|
}
|
|
|
-.choose-btn + .choose-btn {
|
|
|
- margin-left: 23px;
|
|
|
-}
|
|
|
::-webkit-scrollbar {
|
|
|
// display: none;
|
|
|
}
|
|
|
+
|
|
|
+.choose-btn {
|
|
|
+ &.prim {
|
|
|
+ border-color: #c274fe;
|
|
|
+ background: linear-gradient(#ffbef230, #c274fe30);
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|