Flowchart.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <template>
  2. <section class="mb-about-flow">
  3. <div class="mb-flow-title">
  4. <div class="mb-flow-title-text">
  5. 全线产品自主研发
  6. </div>
  7. <div class="mb-flow-title-subtext">
  8. 全线产品自主研发,从高防IP、CDN到游戏盾SDK,核心技术完全自控,安全能力不受制于人,防护效果快人一步。
  9. </div>
  10. </div>
  11. <div class="mb-flow-content">
  12. <div class="mb-flow-content-left">
  13. <div class="mb-left-user">
  14. <NuxtImg class="mb-flow-icon" src="/images/about/icon-user.png" alt="icon" />
  15. <div class="mb-flow-text">用户</div>
  16. </div>
  17. <div class="mb-left-sdk">
  18. <NuxtImg class="mb-flow-icon" src="/images/about/icon-sdk.png" alt="icon" />
  19. <div class="mb-flow-text">终端设备/SDK</div>
  20. </div>
  21. </div>
  22. <div class="mb-flow-content-con">
  23. <div class="mb-con-item">高仿IP</div>
  24. <div class="mb-con-item">CDN</div>
  25. <div class="mb-con-item">游戏盾</div>
  26. </div>
  27. <div class="mb-flow-content-right">
  28. <div class="mb-right-item">硬扛攻击,业务稳赢</div>
  29. <div class="mb-right-item">就近分发<br />访问快人一步</div>
  30. <div class="mb-right-item">端上智能调度+<br />加密隧道/大陆加速</div>
  31. </div>
  32. </div>
  33. <div class="mb-flow-bottom">
  34. <div class="mb-btm-left">高防服务器</div>
  35. <div class="mb-btm-con">
  36. <span>互联网基础设施</span><span>高防DNSSSL节点池</span>
  37. </div>
  38. <div class="mb-btm-right">源站服务器</div>
  39. </div>
  40. </section>
  41. </template>
  42. <script setup>
  43. </script>
  44. <style lang="scss" scoped>
  45. .mb-about-flow {
  46. width: 100%;
  47. margin: 25px auto 0;
  48. box-sizing: border-box;
  49. .mb-flow-title {
  50. position: relative;
  51. border-radius: 4px;
  52. border: 1px solid #8B74FF;
  53. background: rgba(63, 51, 125, 0.30);
  54. color: #FFF;
  55. .mb-flow-title-text {
  56. display: flex;
  57. align-items: center;
  58. justify-content: center;
  59. width: 100%;
  60. height: 20px;
  61. font-size: 12px;
  62. font-weight: 400;
  63. background: rgba(128, 119, 255, .5);
  64. }
  65. .mb-flow-title-subtext {
  66. padding: 4px 10px;
  67. font-size: 10px;
  68. font-weight: 400;
  69. }
  70. &::before {
  71. content: '';
  72. position: absolute;
  73. bottom: -16px;
  74. left: 50%;
  75. transform: translateX(-50%);
  76. width: 1px;
  77. height: 16px;
  78. background: #8B74FF;
  79. }
  80. &::after {
  81. content: '';
  82. position: absolute;
  83. bottom: -16px;
  84. left: 50%;
  85. transform: translateX(-50%);
  86. width: 0;
  87. height: 0;
  88. border-left: 4px solid transparent;
  89. border-right: 4px solid transparent;
  90. border-top: 4px solid #8B74FF;
  91. }
  92. }
  93. .mb-flow-content {
  94. width: 100%;
  95. box-sizing: border-box;
  96. display: flex;
  97. align-items: center;
  98. .mb-flow-content-left {
  99. display: flex;
  100. gap: 10px;
  101. }
  102. .mb-flow-icon {
  103. width: 24px;
  104. height: 24px;
  105. }
  106. .mb-left-user,
  107. .mb-left-sdk {
  108. display: flex;
  109. flex-direction: column;
  110. align-items: center;
  111. justify-content: center;
  112. color: #FFF;
  113. .mb-flow-text {
  114. position: relative;
  115. box-sizing: border-box;
  116. width: 45px;
  117. display: flex;
  118. justify-content: center;
  119. align-items: center;
  120. border-radius: 2px;
  121. border: 1px solid #A39DFF;
  122. background: #3F337D;
  123. font-size: 10px;
  124. &::before {
  125. content: '';
  126. position: absolute;
  127. right: -10px;
  128. top: 50%;
  129. transform: translateY(-50%);
  130. width: 8px;
  131. height: 1px;
  132. background: #8B74FF;
  133. }
  134. &::after {
  135. content: '';
  136. position: absolute;
  137. right: -10px;
  138. top: 50%;
  139. transform: translateY(-50%);
  140. width: 0;
  141. height: 0;
  142. border-top: 4px solid transparent;
  143. border-bottom: 4px solid transparent;
  144. border-left: 4px solid #8B74FF;
  145. }
  146. }
  147. }
  148. .mb-left-sdk {
  149. .mb-flow-text {
  150. width: 70px;
  151. height: 20px;
  152. text-align: center;
  153. &::before {
  154. right: -12px;
  155. width: 12px;
  156. }
  157. &::after {
  158. right: -12px;
  159. }
  160. }
  161. }
  162. .mb-flow-content-con {
  163. position: relative;
  164. display: flex;
  165. flex-direction: column;
  166. align-items: center;
  167. justify-content: center;
  168. gap: 10px;
  169. width: 106px;
  170. height: 98px;
  171. box-sizing: border-box;
  172. border-radius: 10px;
  173. border: 1px solid #8B74FF;
  174. margin: 16px 18px 16px 12px;
  175. background: rgba(63, 51, 125, 0.30);
  176. &::before {
  177. content: '';
  178. position: absolute;
  179. left: 50%;
  180. bottom: -16px;
  181. transform: translateX(-50%);
  182. width: 1px;
  183. height: 16px;
  184. background: #8B74FF;
  185. }
  186. &::after {
  187. content: '';
  188. position: absolute;
  189. left: 50%;
  190. bottom: -16px;
  191. transform: translateX(-50%);
  192. width: 0;
  193. height: 0;
  194. border-left: 4px solid transparent;
  195. border-right: 4px solid transparent;
  196. border-top: 4px solid #8B74FF;
  197. }
  198. .mb-con-item {
  199. color: #FFF;
  200. font-size: 10px;
  201. font-weight: 400;
  202. display: flex;
  203. height: 20px;
  204. width: 62px;
  205. justify-content: center;
  206. align-items: center;
  207. border-radius: 4px;
  208. border: 1px solid #A39DFF;
  209. background: #3F337D;
  210. }
  211. }
  212. .mb-flow-content-right {
  213. display: flex;
  214. flex-direction: column;
  215. gap: 4px;
  216. align-items: center;
  217. .mb-right-item {
  218. position: relative;
  219. display: flex;
  220. align-items: center;
  221. justify-content: center;
  222. box-sizing: border-box;
  223. width: 102px;
  224. border-radius: 4px;
  225. padding: 0 4px;
  226. border: 1px solid #A39DFF;
  227. background: #3F337D;
  228. color: #FFF;
  229. font-size: 10px;
  230. font-weight: 400;
  231. &:nth-of-type(1) {
  232. height: 25px;
  233. }
  234. &:nth-of-type(2) {
  235. height: 32px;
  236. }
  237. &:nth-of-type(3) {
  238. height: 32px;
  239. }
  240. &::before {
  241. content: '';
  242. position: absolute;
  243. left: -14px;
  244. top: 50%;
  245. transform: translateY(-50%);
  246. width: 14px;
  247. height: 1px;
  248. background: #8B74FF;
  249. }
  250. &::after {
  251. content: '';
  252. position: absolute;
  253. left: -14px;
  254. top: 50%;
  255. transform: translateY(-50%);
  256. width: 0;
  257. height: 0;
  258. border-top: 4px solid transparent;
  259. border-bottom: 4px solid transparent;
  260. border-right: 4px solid #8B74FF;
  261. }
  262. }
  263. }
  264. }
  265. .mb-flow-bottom {
  266. display: flex;
  267. gap: 22px;
  268. color: #FFF;
  269. align-items: center;
  270. font-size: 10px;
  271. .mb-btm-left,
  272. .mb-btm-con,
  273. .mb-btm-right {
  274. border: 1px solid #A39DFF;
  275. background: #3F337D;
  276. display: flex;
  277. flex-direction: column;
  278. justify-content: center;
  279. align-items: center;
  280. border-radius: 4px;
  281. }
  282. .mb-btm-left {
  283. position: relative;
  284. margin-left: 26px;
  285. width: 70px;
  286. height: 25px;
  287. &::before {
  288. content: '';
  289. position: absolute;
  290. right: -24px;
  291. top: 50%;
  292. transform: translateY(-50%);
  293. width: 18px;
  294. height: 1px;
  295. background: #8B74FF;
  296. }
  297. &::after {
  298. content: '';
  299. position: absolute;
  300. right: -8px;
  301. top: 50%;
  302. transform: translateY(-50%);
  303. width: 0;
  304. height: 0;
  305. border-top: 4px solid transparent;
  306. border-bottom: 4px solid transparent;
  307. border-right: 4px solid #8B74FF;
  308. }
  309. }
  310. .mb-btm-con {
  311. width: 108px;
  312. height: 40px;
  313. gap: 4px;
  314. }
  315. .mb-btm-right {
  316. position: relative;
  317. width: 94px;
  318. height: 25px;
  319. &::before {
  320. content: '';
  321. position: absolute;
  322. left: -24px;
  323. top: 50%;
  324. transform: translateY(-50%);
  325. width: 18px;
  326. height: 1px;
  327. background: #8B74FF;
  328. }
  329. &::after {
  330. content: '';
  331. position: absolute;
  332. left: -8px;
  333. top: 50%;
  334. transform: translateY(-50%);
  335. width: 0;
  336. height: 0;
  337. border-top: 4px solid transparent;
  338. border-bottom: 4px solid transparent;
  339. border-left: 4px solid #8B74FF;
  340. }
  341. }
  342. }
  343. }
  344. </style>