nuxt-layer-core 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/layers/solution/app/components/CoursesSection.vue +42 -43
- package/app/layers/solution/app/components/CtaSection.vue +40 -22
- package/app/layers/solution/app/components/DynamicPageSections.vue +103 -0
- package/app/layers/solution/app/components/PricingPlansSection.vue +108 -146
- package/app/layers/solution/app/components/RegistrationForm.vue +33 -6
- package/app/layers/solution/app/components/RegistrationSection.vue +24 -0
- package/app/layers/solution/app/components/RegistrationSidebar.vue +70 -0
- package/app/layers/solution/app/components/TheHeader.vue +11 -7
- package/app/layers/solution/app/composables/useConsultationRequest.ts +8 -0
- package/app/layers/solution/app/composables/usePlanNormalizer.ts +45 -0
- package/app/layers/solution/app/composables/useSolutionApi.ts +18 -0
- package/app/layers/solution/app/data/pricingPlans.ts +150 -0
- package/app/layers/solution/app/nuxt.config.ts +6 -0
- package/app/layers/solution/app/pages/[slug]/[slug2]/[slug3]/index.vue +22 -0
- package/app/layers/solution/app/pages/[slug]/[slug2]/index.vue +23 -0
- package/app/layers/solution/app/pages/[slug]/index.vue +22 -0
- package/app/layers/solution/app/pages/dang-ky-tu-van/khoa-hoc-proxmox.vue.disabled +39 -0
- package/app/layers/solution/app/pages/giai-phap-proxmox/dang-ky-khoa-hoc/[slug].vue.disabled +56 -0
- package/app/pages/index.vue +2 -1
- package/nuxt.config.ts +1 -0
- package/package.json +1 -1
- package/app/layers/solution/app/pages/giai-phap-proxmox/dang-ky-khoa-hoc/[slug].vue +0 -131
- package/website-longvan-1.1.6.tgz +0 -0
- package/website-longvan-1.1.7.tgz +0 -0
- package/website-longvan-1.1.8.tgz +0 -0
- /package/app/layers/solution/app/pages/cap-nhat-thong-tin/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/dang-ky/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/dang-nhap/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/doi-mat-khau/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/giai-phap-proxmox/[slug]/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/giai-phap-proxmox/[slug]/proxmox-hci/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/quen-mat-khau/{index.vue → index.vue.disabled} +0 -0
- /package/app/layers/solution/app/pages/xac-thuc/{index.vue → index.vue.disabled} +0 -0
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
definePageMeta({ layout: 'default' })
|
|
3
|
-
|
|
4
|
-
const route = useRoute()
|
|
5
|
-
const { getSolutionDetail } = useSolutionApi()
|
|
6
|
-
|
|
7
|
-
const slug = computed(() => route.params.slug as string)
|
|
8
|
-
|
|
9
|
-
// SSR data fetch
|
|
10
|
-
const { data, error } = await useAsyncData(
|
|
11
|
-
`dang-ky-${slug.value}`,
|
|
12
|
-
() => getSolutionDetail(slug.value, 'giai-phap'),
|
|
13
|
-
{ server: true }
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
if (error.value || !data.value) {
|
|
17
|
-
throw createError({ statusCode: 404, statusMessage: 'Không tìm thấy khóa học', fatal: true })
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Format plans from resumeData
|
|
21
|
-
const formatPlans = (resumeData: any) => {
|
|
22
|
-
const fieldResumes = resumeData?.fieldResumes || []
|
|
23
|
-
return fieldResumes
|
|
24
|
-
?.filter((group: any) => group?.type === 'FIELD_GROUP' && Array.isArray(group?.children))
|
|
25
|
-
?.map((group: any) => {
|
|
26
|
-
const fields = Object.fromEntries(
|
|
27
|
-
group.children?.map((field: any) => [field?.fieldName?.split('@')?.pop(), field?.value]) || []
|
|
28
|
-
)
|
|
29
|
-
return {
|
|
30
|
-
id: fields.productid || group.fieldName,
|
|
31
|
-
name: fields.title || '',
|
|
32
|
-
level: fields.level || '',
|
|
33
|
-
duration: fields.time || '',
|
|
34
|
-
icon: fields.icon || 'lucide:server',
|
|
35
|
-
}
|
|
36
|
-
}) || []
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const plans = computed(() => formatPlans(data.value?.resumeData))
|
|
40
|
-
const targetCTA = computed(() => data.value?.productData?.[0]?.targetCTA || '')
|
|
41
|
-
const selectedPlanId = computed(() => (route.query.plan as string) || '')
|
|
42
|
-
|
|
43
|
-
useHead({
|
|
44
|
-
title: computed(() => `Đăng ký khóa học - ${data.value?.productData?.[0]?.product?.title || 'Proxmox HCI'}`),
|
|
45
|
-
})
|
|
46
|
-
</script>
|
|
47
|
-
|
|
48
|
-
<template>
|
|
49
|
-
<div class="bg-ink text-cloud font-body antialiased">
|
|
50
|
-
<TheHeader :target-c-t-a="targetCTA" :slug="slug" />
|
|
51
|
-
|
|
52
|
-
<div class="min-h-screen bg-[#f4f5f9] px-6 py-[7rem] font-sans text-slate-900">
|
|
53
|
-
<div class="mx-auto grid max-w-[1000px] grid-cols-1 items-start gap-6 md:grid-cols-[340px_1fr]">
|
|
54
|
-
<!-- Left column -->
|
|
55
|
-
<aside class="flex flex-col gap-4">
|
|
56
|
-
<div class="rounded-2xl border border-[#e7e9f0] bg-white p-7">
|
|
57
|
-
<h2 class="mb-5 text-[17px] font-bold text-slate-900">Vì sao chọn chúng tôi</h2>
|
|
58
|
-
<ul class="flex flex-col gap-[22px]">
|
|
59
|
-
<li class="flex items-start gap-3">
|
|
60
|
-
<span
|
|
61
|
-
class="flex h-[34px] w-[34px] flex-none items-center justify-center rounded-[10px] bg-[#e8eefc] text-[#2f5fe0]">
|
|
62
|
-
<svg class="h-[17px] w-[17px]" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
63
|
-
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
64
|
-
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" />
|
|
65
|
-
<circle cx="9" cy="7" r="4" />
|
|
66
|
-
<path d="M23 21v-2a4 4 0 0 0-3-3.87" />
|
|
67
|
-
<path d="M16 3.13a4 4 0 0 1 0 7.75" />
|
|
68
|
-
</svg>
|
|
69
|
-
</span>
|
|
70
|
-
<span class="flex flex-col gap-[3px]">
|
|
71
|
-
<span class="text-sm font-semibold text-slate-900">Lớp nhỏ, kèm sát</span>
|
|
72
|
-
<span class="text-[13px] leading-relaxed text-gray-500">Sĩ số giới hạn, giảng viên hỗ trợ trực tiếp
|
|
73
|
-
từng học viên.</span>
|
|
74
|
-
</span>
|
|
75
|
-
</li>
|
|
76
|
-
<li class="flex items-start gap-3">
|
|
77
|
-
<span
|
|
78
|
-
class="flex h-[34px] w-[34px] flex-none items-center justify-center rounded-[10px] bg-[#e8eefc] text-[#2f5fe0]">
|
|
79
|
-
<svg class="h-[17px] w-[17px]" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
80
|
-
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
81
|
-
<path d="M22 10 12 5 2 10l10 5 10-5Z" />
|
|
82
|
-
<path d="M6 12v5c0 1.66 2.69 3 6 3s6-1.34 6-3v-5" />
|
|
83
|
-
</svg>
|
|
84
|
-
</span>
|
|
85
|
-
<span class="flex flex-col gap-[3px]">
|
|
86
|
-
<span class="text-sm font-semibold text-slate-900">Thực hành hệ thống thật</span>
|
|
87
|
-
<span class="text-[13px] leading-relaxed text-gray-500">Thao tác trên cụm Proxmox HCI thực tế, không
|
|
88
|
-
chỉ lý thuyết.</span>
|
|
89
|
-
</span>
|
|
90
|
-
</li>
|
|
91
|
-
<li class="flex items-start gap-3">
|
|
92
|
-
<span
|
|
93
|
-
class="flex h-[34px] w-[34px] flex-none items-center justify-center rounded-[10px] bg-[#e8eefc] text-[#2f5fe0]">
|
|
94
|
-
<svg class="h-[17px] w-[17px]" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
95
|
-
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
96
|
-
<circle cx="12" cy="12" r="10" />
|
|
97
|
-
<path d="m9 12 2 2 4-4" />
|
|
98
|
-
</svg>
|
|
99
|
-
</span>
|
|
100
|
-
<span class="flex flex-col gap-[3px]">
|
|
101
|
-
<span class="text-sm font-semibold text-slate-900">Chứng nhận hoàn thành</span>
|
|
102
|
-
<span class="text-[13px] leading-relaxed text-gray-500">Cấp chứng nhận và hỗ trợ tư vấn nghề nghiệp
|
|
103
|
-
sau khóa học.</span>
|
|
104
|
-
</span>
|
|
105
|
-
</li>
|
|
106
|
-
</ul>
|
|
107
|
-
</div>
|
|
108
|
-
|
|
109
|
-
<div class="rounded-2xl border border-[#dbe4fd] bg-[#eef2ff] px-6 py-[22px]">
|
|
110
|
-
<p class="mb-2 flex items-center gap-[9px] text-sm font-bold text-[#2f5fe0]">
|
|
111
|
-
<svg class="h-[17px] w-[17px] flex-none" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
112
|
-
stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
|
|
113
|
-
<path d="M23 7 16 12l7 5V7Z" />
|
|
114
|
-
<rect x="1" y="5" width="15" height="14" rx="2" ry="2" />
|
|
115
|
-
</svg>
|
|
116
|
-
Khai giảng linh hoạt
|
|
117
|
-
</p>
|
|
118
|
-
<p class="text-[13px] leading-relaxed text-gray-600">
|
|
119
|
-
Lịch học buổi tối và cuối tuần, phù hợp cho cả người đi làm. Hỗ trợ ghi hình buổi học để xem lại.
|
|
120
|
-
</p>
|
|
121
|
-
</div>
|
|
122
|
-
</aside>
|
|
123
|
-
|
|
124
|
-
<!-- Right column: form -->
|
|
125
|
-
<RegistrationForm :plans="plans" :selected-plan-id="selectedPlanId" />
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
<TheFooter />
|
|
130
|
-
</div>
|
|
131
|
-
</template>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/app/layers/solution/app/pages/giai-phap-proxmox/[slug]/{index.vue → index.vue.disabled}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|