index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  1. <template>
  2. <div class="banner-box">
  3. <div class="center1200">
  4. <p class="banner-title mywow" animate-param="fadeInUp,delay-0.3s">
  5. 互联网基础设施服务提供商
  6. </p>
  7. <p class="banner-explain mywow" animate-param="fadeInUp,delay-0.3s">
  8. 向客户提供业界领先的网络电信增值业务经营服务。
  9. </p>
  10. <div class="center-btn mywow" animate-param="fadeInUp,delay-0.3s">了解详情</div>
  11. </div>
  12. </div>
  13. <div class="product-presentation">
  14. <div class="center1200">
  15. <p class="title mywow" animate-param="fadeInUp,delay-0.3s">产品介绍</p>
  16. <p class="explain mywow" animate-param="fadeInUp,delay-0.3s">
  17. 我们专注短信领域,赋能未来
  18. </p>
  19. <div class="classify-label">
  20. <div
  21. animate-param="fadeInUp,delay-0.3s"
  22. :class="[
  23. 'classify-item mywow',
  24. activeClassify === index ? 'active-classify-item' : '',
  25. ]"
  26. v-for="(item, index) in classifyList"
  27. :key="`classify_${index}`"
  28. @click.stop="onSelectClassify(index)"
  29. >
  30. <img class="classify-icon" :src="item.icon" />
  31. <p class="classify-name">{{ item.label }}</p>
  32. </div>
  33. </div>
  34. <div class="classify-content mywow" animate-param="fadeInUp,delay-0.3s">
  35. <div class="content-left">
  36. <template v-if="sublevelList && sublevelList.length > 0">
  37. <div class="subleve-label">
  38. <div class="subleve-item one-row" v-for="(sv, svIndex) in sublevelList">
  39. <img class="subleve-icon" :src="sv.icon" />
  40. <span
  41. :class="[
  42. 'subleve-name one-row',
  43. activeSublevel === svIndex ? 'active-subleve-item' : '',
  44. ]"
  45. @click.stop="activeSublevel = svIndex"
  46. >
  47. {{ sv.label }}
  48. </span>
  49. </div>
  50. </div>
  51. <div class="subleve-explain">
  52. {{ sublevelList[activeSublevel].explain }}
  53. </div>
  54. <div class="btn-01">了解详情</div>
  55. </template>
  56. </div>
  57. <div class="content-right">
  58. <img
  59. class="model-img"
  60. v-if="sublevelList[activeSublevel].img"
  61. :src="sublevelList[activeSublevel].img"
  62. />
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. <!-- 平台优势 -->
  68. <div class="advantage">
  69. <div class="center1200">
  70. <p class="title mywow" animate-param="fadeInUp,delay-0.3s">平台优势</p>
  71. <p class="explain mywow" animate-param="fadeInUp,delay-0.3s">为什么选择飞信云</p>
  72. <div class="advantage-content mywow" animate-param="fadeInUp,delay-0.3s">
  73. <div class="advantage-item" v-for="(item, index) in advantageList">
  74. <img class="advantage-icon" :src="item.icon" />
  75. <p class="advantage-name">{{ item.label }}</p>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. <!-- 合作案例 -->
  81. <div class="cooperation-case">
  82. <div class="center1200">
  83. <p class="title mywow" animate-param="fadeInUp,delay-0.3s">合作案例</p>
  84. <div class="case-content" animate-param="fadeInUp,delay-0.3s">
  85. <div class="case-item" v-for="(item, index) in caseList">
  86. <img class="case-icon" :src="item.icon" />
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <!-- 联系我们 -->
  92. <!-- <div class="contact-us">
  93. <div class="center1200">
  94. <p class="contact-us-title">联系我们,即刻申请免费测试账号</p>
  95. <p class="contact-us-hint">为您的企业提供更稳定高效的信息服务!</p>
  96. <div class="contact-us-btn">联系我们<span>></span></div>
  97. </div>
  98. </div> -->
  99. </template>
  100. <script lang="ts" setup>
  101. import { ref, reactive } from "vue";
  102. // 产品介绍 Begin ---------------------
  103. import icon_01 from "./../assets/icon/icon_01.png";
  104. import icon_02 from "./../assets/icon/icon_02.png";
  105. import icon_03 from "./../assets/icon/icon_03.png";
  106. import icon_04 from "./../assets/icon/icon_04.png";
  107. import icon_05 from "./../assets/icon/icon_05.png";
  108. import icon_06 from "./../assets/icon/icon_06.png";
  109. import icon_07 from "./../assets/icon/icon_07.png";
  110. import icon_08 from "./../assets/icon/icon_08.png";
  111. const activeClassify = ref(0);
  112. const activeSublevel = ref(0);
  113. const sublevelList = ref<any>([]);
  114. const classifyList = ref([
  115. {
  116. label: "云通讯产品",
  117. icon: icon_01,
  118. children: [
  119. {
  120. label: "通知短信",
  121. icon: icon_08,
  122. img: icon_07,
  123. explain:
  124. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  125. link: "#",
  126. },
  127. {
  128. label: "短信验证码",
  129. icon: icon_08,
  130. explain:
  131. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  132. link: "#",
  133. },
  134. {
  135. label: "会员营销短信",
  136. icon: icon_08,
  137. explain:
  138. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  139. link: "#",
  140. },
  141. {
  142. label: "图片/视频短信",
  143. icon: icon_08,
  144. explain:
  145. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  146. link: "#",
  147. },
  148. {
  149. label: "5G短信",
  150. icon: icon_08,
  151. explain:
  152. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  153. link: "#",
  154. },
  155. {
  156. label: "语音短信",
  157. icon: icon_08,
  158. explain:
  159. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  160. link: "#",
  161. },
  162. {
  163. label: "国际短信",
  164. icon: icon_08,
  165. explain:
  166. "提供通知类短信服务,三网合一的高质量短信通道,适用服务通知、物流通知、订单通知、注册及消费信息确认等",
  167. link: "#",
  168. },
  169. ],
  170. },
  171. {
  172. label: "物联网",
  173. icon: icon_02,
  174. },
  175. {
  176. label: "号码检测",
  177. icon: icon_03,
  178. },
  179. {
  180. label: "实名认证",
  181. icon: icon_04,
  182. },
  183. {
  184. label: "业务风控",
  185. icon: icon_05,
  186. },
  187. {
  188. label: "IDC",
  189. icon: icon_06,
  190. },
  191. ]);
  192. // 选择一级分类
  193. const onSelectClassify = (e) => {
  194. activeClassify.value = e;
  195. sublevelList.value = classifyList.value[activeClassify.value].children;
  196. activeSublevel.value = 0;
  197. };
  198. onSelectClassify(0);
  199. // 产品介绍 End ---------------------
  200. // 平台优势
  201. const activeAdvantage = ref(0);
  202. const advantageList = ref([
  203. {
  204. label: "云通讯产品",
  205. icon: icon_01,
  206. },
  207. {
  208. label: "多流量套餐",
  209. icon: icon_02,
  210. },
  211. {
  212. label: "检测高效,覆盖面广",
  213. icon: icon_03,
  214. },
  215. {
  216. label: "认证准确,数据可视化",
  217. icon: icon_04,
  218. },
  219. {
  220. label: "安全防控,算法精确",
  221. icon: icon_05,
  222. },
  223. {
  224. label: "专业化运维",
  225. icon: icon_06,
  226. },
  227. ]);
  228. // 合作案例
  229. import logo_01 from "./../assets/icon/logo_01.png";
  230. import logo_02 from "./../assets/icon/logo_02.png";
  231. import logo_03 from "./../assets/icon/logo_03.png";
  232. import logo_04 from "./../assets/icon/logo_04.png";
  233. import logo_05 from "./../assets/icon/logo_05.png";
  234. import logo_06 from "./../assets/icon/logo_06.png";
  235. import logo_07 from "./../assets/icon/logo_07.png";
  236. import logo_08 from "./../assets/icon/logo_08.png";
  237. import logo_09 from "./../assets/icon/logo_09.png";
  238. import logo_10 from "./../assets/icon/logo_10.png";
  239. import logo_11 from "./../assets/icon/logo_11.png";
  240. import logo_12 from "./../assets/icon/logo_12.png";
  241. const caseList = ref([
  242. {
  243. icon: logo_01,
  244. },
  245. {
  246. icon: logo_02,
  247. },
  248. {
  249. icon: logo_03,
  250. },
  251. {
  252. icon: logo_04,
  253. },
  254. {
  255. icon: logo_05,
  256. },
  257. {
  258. icon: logo_06,
  259. },
  260. {
  261. icon: logo_07,
  262. },
  263. {
  264. icon: logo_08,
  265. },
  266. {
  267. icon: logo_09,
  268. },
  269. {
  270. icon: logo_10,
  271. },
  272. {
  273. icon: logo_11,
  274. },
  275. {
  276. icon: logo_12,
  277. },
  278. ]);
  279. // onMounted(() => {
  280. // })
  281. // console.log('globalProperties', $onAnimated)
  282. // proxy.$onAnimated && proxy.$onAnimated()
  283. </script>
  284. <style lang="scss" scoped>
  285. .banner-box {
  286. width: 100%;
  287. min-height: 750px;
  288. font-family: var(--family-01);
  289. font-weight: var(--weight-400);
  290. background-image: url("../assets/images/home_bg_01.png");
  291. background-repeat: no-repeat;
  292. background-position: center center;
  293. background-size: cover;
  294. display: flex;
  295. align-items: center;
  296. .banner-title {
  297. font-size: var(--size-48);
  298. color: var(--color-01);
  299. }
  300. .banner-explain {
  301. font-size: var(--size-24);
  302. color: var(--color-02);
  303. padding: var(--size-26) 0 var(--size-48);
  304. }
  305. }
  306. .product-presentation {
  307. width: 100%;
  308. background-image: url("../assets/images/home_bg_02.png");
  309. background-repeat: no-repeat;
  310. background-position: center center;
  311. background-size: cover;
  312. padding-top: var(--size-95);
  313. .title {
  314. font-size: var(--size-34);
  315. font-family: var(--family-01);
  316. font-weight: var(--weight-700);
  317. color: var(--color-01);
  318. line-height: var(--size-48);
  319. text-align: center;
  320. }
  321. .explain {
  322. font-size: var(--size-18);
  323. font-family: var(--family-01);
  324. font-weight: var(--weight-400);
  325. text-align: center;
  326. color: var(--color-03);
  327. line-height: var(--size-48);
  328. }
  329. .classify-label {
  330. width: 100%;
  331. display: flex;
  332. justify-content: space-around;
  333. padding-top: var(--size-31);
  334. align-items: stretch;
  335. .classify-item {
  336. display: flex;
  337. flex-direction: column;
  338. justify-content: center;
  339. align-items: center;
  340. cursor: pointer;
  341. .classify-icon {
  342. width: var(--size-60);
  343. height: var(--size-60);
  344. object-fit: contain;
  345. }
  346. .classify-name {
  347. font-size: var(--size-20);
  348. line-height: var(--size-48);
  349. font-family: var(--family-01);
  350. font-weight: var(--weight-400);
  351. color: var(--color-02);
  352. position: relative;
  353. transition: all 0.2s;
  354. &::after {
  355. transition: all 0.6s;
  356. content: "";
  357. position: absolute;
  358. left: 0;
  359. right: 0;
  360. bottom: 0;
  361. width: 0;
  362. height: var(--size-2);
  363. background-color: transparent;
  364. }
  365. }
  366. }
  367. .active-classify-item {
  368. .classify-name {
  369. color: var(--color-04);
  370. font-weight: var(--weight-600);
  371. &::after {
  372. width: auto;
  373. background-color: var(--color-04);
  374. }
  375. }
  376. }
  377. }
  378. .classify-content {
  379. width: 100%;
  380. padding-top: var(--size-52);
  381. display: flex;
  382. align-items: stretch;
  383. .content-left {
  384. width: 1px;
  385. flex: 1;
  386. // padding-right: var(--size-100);
  387. display: flex;
  388. flex-direction: column;
  389. justify-content: center;
  390. .subleve-label {
  391. width: 100%;
  392. display: flex;
  393. align-items: stretch;
  394. flex-wrap: wrap;
  395. .subleve-item {
  396. width: 25%;
  397. display: flex;
  398. flex-direction: row;
  399. align-items: center;
  400. cursor: pointer;
  401. font-size: var(--color-18);
  402. font-family: var(--family-01);
  403. font-weight: var(--weight-400);
  404. line-height: var(--size-48);
  405. color: var(--color-01);
  406. .subleve-icon {
  407. width: var(--size-28);
  408. height: var(--size-25);
  409. object-fit: cover;
  410. }
  411. .subleve-name {
  412. text-align: left;
  413. padding: 0 var(--size-20) 0 var(--size-6);
  414. }
  415. }
  416. .active-subleve-item {
  417. color: var(--color-04);
  418. font-weight: var(--weight-700);
  419. }
  420. }
  421. .subleve-explain {
  422. font-size: var(--size-16);
  423. font-family: var(--family-01);
  424. font-weight: var(--weight-400);
  425. color: var(--color-01);
  426. // line-height: var(--size-32);
  427. padding: var(--size-55) 0;
  428. }
  429. }
  430. .content-right {
  431. transform: translateX(81px);
  432. flex-shrink: 0;
  433. width: var(--size-487);
  434. height: var(--size-627);
  435. .model-img {
  436. width: var(--size-487);
  437. height: var(--size-627);
  438. object-fit: cover;
  439. }
  440. }
  441. }
  442. }
  443. .advantage {
  444. width: 100%;
  445. background-image: url("../assets/images/home_bg_03.png");
  446. background-repeat: no-repeat;
  447. background-position: center center;
  448. background-size: cover;
  449. padding-top: var(--size-95);
  450. .title {
  451. font-size: var(--size-34);
  452. font-family: var(--family-01);
  453. font-weight: var(--weight-700);
  454. color: var(--color-01);
  455. text-align: center;
  456. }
  457. .explain {
  458. font-size: var(--size-18);
  459. font-family: var(--family-01);
  460. font-weight: var(--weight-400);
  461. text-align: center;
  462. color: var(--color-03);
  463. padding: var(--size-17) 0 var(--size-20);
  464. }
  465. .advantage-content {
  466. display: flex;
  467. align-items: stretch;
  468. justify-content: center;
  469. flex-wrap: wrap;
  470. padding: var(--size-59) 0 var(--size-50);
  471. .advantage-item {
  472. flex-shrink: 0;
  473. // width: 362px;
  474. width: calc((100% - var(--size-122)) / 3);
  475. height: 221px;
  476. display: flex;
  477. flex-direction: column;
  478. justify-content: center;
  479. align-items: center;
  480. background-color: #fff;
  481. box-shadow: var(--shadow-01);
  482. margin-right: calc(var(--size-122) / 2);
  483. margin-bottom: var(--size-39);
  484. border-radius: 8px;
  485. cursor: pointer;
  486. transition: all 0.3s;
  487. &:hover {
  488. background-color: var(--color-04);
  489. .advantage-name {
  490. color: #fff;
  491. }
  492. }
  493. &:nth-child(3n) {
  494. margin-right: 0;
  495. }
  496. .advantage-icon {
  497. width: var(--size-86);
  498. height: var(--size-76);
  499. object-fit: contain;
  500. }
  501. .advantage-name {
  502. padding-top: var(--size-17);
  503. font-size: var(--size-24);
  504. font-family: var(--family-01);
  505. font-weight: var(--color-01);
  506. }
  507. }
  508. }
  509. }
  510. .cooperation-case {
  511. width: 100%;
  512. background-image: url("../assets/images/home_bg_04.png");
  513. background-repeat: no-repeat;
  514. background-position: center center;
  515. background-size: cover;
  516. padding-top: var(--size-95);
  517. .title {
  518. font-size: var(--size-34);
  519. font-family: var(--family-01);
  520. font-weight: var(--weight-700);
  521. color: var(--color-01);
  522. text-align: center;
  523. }
  524. .case-content {
  525. display: flex;
  526. flex-wrap: wrap;
  527. justify-content: center;
  528. padding: var(--size-40) 0 var(--size-60);
  529. .case-item {
  530. width: calc((100% - var(--size-96)) / 4);
  531. height: 133px;
  532. margin-right: calc(var(--size-96) / 3);
  533. margin-bottom: calc(var(--size-96) / 3);
  534. background-color: #fff;
  535. box-shadow: var(--shadow-01);
  536. padding: var(--size-15) var(--size-20);
  537. border-radius: 8px;
  538. cursor: pointer;
  539. &:nth-child(4n) {
  540. margin-right: 0;
  541. }
  542. .case-icon {
  543. width: 100%;
  544. height: 100%;
  545. object-fit: contain;
  546. }
  547. }
  548. }
  549. }
  550. .contact-us {
  551. width: 100%;
  552. min-height: 317px;
  553. background-image: url("../assets/images/home_bg_05.png");
  554. background-repeat: no-repeat;
  555. background-position: center center;
  556. background-size: cover;
  557. display: flex;
  558. flex-direction: column;
  559. align-items: center;
  560. justify-content: center;
  561. .contact-us-title {
  562. font-size: var(--size-36);
  563. font-family: var(--family-01);
  564. font-weight: var(--weight-400);
  565. color: #ffffff;
  566. line-height: 48px;
  567. }
  568. .contact-us-hint {
  569. font-size: var(--size-18);
  570. font-family: var(--family-01);
  571. font-weight: var(--weight-400);
  572. color: #ffffff;
  573. padding: var(--size-29) 0 var(--size-46);
  574. }
  575. .contact-us-btn {
  576. width: 227px;
  577. height: 61px;
  578. background: #ffffff;
  579. border-radius: 6px;
  580. background-color: #fff;
  581. display: flex;
  582. justify-content: center;
  583. align-items: center;
  584. cursor: pointer;
  585. font-size: var(--size-24);
  586. font-family: var(--family-01);
  587. font-weight: var(--weight-400);
  588. color: #08b3e9;
  589. span {
  590. padding-left: var(--size-18);
  591. }
  592. }
  593. }
  594. </style>