sdk.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <section class="mb-product">
  3. <section class="video-section">
  4. <div class="video-title">
  5. <h1>DDAC游戏盾——让APP自带</h1>
  6. <div class="video-subtitle">“国家级别”防御</div>
  7. <div class="video-text">
  8. 却只需要开发者“日常级别”
  9. 的工作量
  10. </div>
  11. <div class="video-btn">
  12. 联系我们 <Icon size="16" name="ic:sharp-keyboard-arrow-right"></Icon>
  13. </div>
  14. </div>
  15. <div class="right-bg"></div>
  16. </section>
  17. <Introduction />
  18. <section class="mb-card-text">
  19. <h3>
  20. 一体化解决游戏安全问题
  21. </h3>
  22. <div class="mb-accordion">
  23. <div v-for="(item, index) in accordionItems" :key="item.title" class="accordion-item"
  24. :class="{ 'is-open': openIndices.includes(index) }" @click="toggleAccordion(index)">
  25. <div class="accordion-header">
  26. <div class="accordion-left">
  27. <img width="24" height="24" :src="item.icon" alt="icon">
  28. <span class="accordion-title">{{ item.title }}</span>
  29. </div>
  30. <Icon size="20" name="line-md:chevron-right" class="accordion-icon" />
  31. </div>
  32. <Transition name="accordion-expand">
  33. <div v-show="openIndices.includes(index)" class="accordion-body">
  34. <p class="accordion-text">{{ item.description }}</p>
  35. </div>
  36. </Transition>
  37. </div>
  38. </div>
  39. </section>
  40. <PlansSection class="mb-plans-section" />
  41. </section>
  42. </template>
  43. <script setup>
  44. import { ref } from 'vue'
  45. import Introduction from '~/components/mobile/products/Introduction.vue'
  46. import PlansSection from '~/components/mobile/home/PlansSection.vue'
  47. import icon1 from '~/assets/svg/products/sdk/security.svg'
  48. import icon2 from '~/assets/svg/products/sdk/acceleration.svg'
  49. import icon3 from '~/assets/svg/products/sdk/lock.svg'
  50. import icon4 from '~/assets/svg/products/sdk/user.svg'
  51. useHead(() => ({
  52. title: 'SDK安全加固',
  53. meta: [
  54. { name: 'viewport', content: 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' }
  55. ]
  56. }))
  57. const accordionItems = [
  58. {
  59. title: 'DDoS 防护',
  60. description: '分布式的抗D节点,同时基于SDK端流量数据的灵活调度策略,智能隔离清洗攻击流量。',
  61. icon: icon1
  62. },
  63. {
  64. title: '智能加速',
  65. description: '基于用户IP识别,智能网络传输线路选择,静态动态Edge分发,即时游戏无延迟。',
  66. icon: icon2
  67. },
  68. {
  69. title: '全链加密',
  70. description: 'SDK自身高强度加密,且可以实时动态更新,安全可靠,无惧 MITM Attack。',
  71. icon: icon3
  72. },
  73. {
  74. title: '用户友好的加密调度中心',
  75. description: '用于替代DNS的一个加密调度中心,能够实现细化到单个客户端,级别的秒级调度,兼容性稳定可靠!提供完整SDK中文文档,轻松集成!',
  76. icon: icon4
  77. }
  78. ]
  79. const openIndices = ref([0])
  80. const toggleAccordion = (index) => {
  81. const i = openIndices.value.indexOf(index)
  82. if (i > -1) {
  83. openIndices.value.splice(i, 1)
  84. } else {
  85. openIndices.value.push(index)
  86. }
  87. }
  88. </script>
  89. <style scoped lang="scss">
  90. .mb-product {
  91. .video-section {
  92. box-sizing: border-box;
  93. padding-top: 32px;
  94. display: flex;
  95. position: relative;
  96. width: 100%;
  97. margin: 0 auto;
  98. .right-bg {
  99. position: absolute;
  100. right: 0;
  101. top: -52px;
  102. width: 312px;
  103. height: 260px;
  104. background-image: url('/images/products/sdk-bg1.png');
  105. background-size: contain;
  106. background-position: center;
  107. background-repeat: no-repeat;
  108. z-index: 3;
  109. }
  110. .video-title {
  111. z-index: 3;
  112. color: #fff;
  113. font-style: normal;
  114. display: flex;
  115. flex-direction: column;
  116. h1 {
  117. font-size: 14px;
  118. font-weight: 500;
  119. background: linear-gradient(91deg, #D8D3FF -6.9%, #E6D2FF 111.73%);
  120. background-clip: text;
  121. -webkit-background-clip: text;
  122. -webkit-text-fill-color: transparent;
  123. }
  124. .video-subtitle {
  125. margin-left: -4%;
  126. color: #DBB9FF;
  127. font-size: 14px;
  128. font-weight: 500;
  129. }
  130. .video-text {
  131. width: 130px;
  132. margin-top: 12px;
  133. color: #E2D9FF;
  134. font-size: 10px;
  135. font-weight: 400;
  136. }
  137. .video-btn {
  138. margin-top: 12px;
  139. display: flex;
  140. width: 85px;
  141. height: 24px;
  142. justify-content: center;
  143. align-items: center;
  144. color: #FFF;
  145. font-size: 10px;
  146. font-weight: 400;
  147. border-radius: 4px;
  148. background: linear-gradient(91deg, #A39DFF 1.24%, #7D46FF 122.93%);
  149. }
  150. }
  151. }
  152. }
  153. .mb-card-text {
  154. margin-top: 20px;
  155. h3 {
  156. text-align: center;
  157. color: #FFF;
  158. font-size: 20px;
  159. font-weight: 400;
  160. }
  161. .mb-accordion {
  162. margin-top: 14px;
  163. display: flex;
  164. flex-direction: column;
  165. gap: 10px;
  166. .accordion-item {
  167. padding: 20px;
  168. border-radius: 10px;
  169. border: 1px solid rgba(255, 255, 255, 0.10);
  170. background: #1C192B;
  171. backdrop-filter: blur(9px);
  172. transition: border-color 0.2s ease, background 0.2s ease;
  173. }
  174. .accordion-header {
  175. display: flex;
  176. align-items: center;
  177. justify-content: space-between;
  178. }
  179. .accordion-left {
  180. display: flex;
  181. align-items: center;
  182. gap: 10px;
  183. }
  184. .accordion-title {
  185. color: #FFF;
  186. font-size: 14px;
  187. font-weight: 500;
  188. }
  189. .accordion-icon {
  190. color: #fff;
  191. transition: transform 0.2s ease;
  192. }
  193. .accordion-item.is-open .accordion-icon {
  194. transform: rotate(90deg);
  195. }
  196. .accordion-body {
  197. margin-top: 10px;
  198. }
  199. .accordion-text {
  200. color: rgba(255, 255, 255, 0.50);
  201. font-size: 12px;
  202. font-weight: 400;
  203. line-height: 20px;
  204. }
  205. }
  206. .accordion-expand-enter-active,
  207. .accordion-expand-leave-active {
  208. transition: all 0.2s ease;
  209. overflow: hidden;
  210. }
  211. .accordion-expand-enter-from,
  212. .accordion-expand-leave-to {
  213. opacity: 0;
  214. max-height: 0;
  215. }
  216. .accordion-expand-enter-to,
  217. .accordion-expand-leave-from {
  218. opacity: 1;
  219. max-height: 200px;
  220. }
  221. }
  222. .mb-plans-section{
  223. margin-top: 44px;
  224. }
  225. </style>