Brand.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817
  1. <!--
  2. 描述: 公司品牌介绍
  3. 作者: Jack Chen
  4. 日期: 2020-05-10
  5. -->
  6. <template>
  7. <div class="brand-container">
  8. <div class="wrap">
  9. <header>
  10. <div class="weather">
  11. <img :src="imgSrc">
  12. <span class="tem">{{ weatcherData.tem }}°C</span>
  13. <span class="wea">{{ weatcherData.wea }}</span>
  14. </div>
  15. <h2>区块链科技公司品牌概览</h2>
  16. <div class="showTime">
  17. <span class="time">{{ nowTime }}</span>
  18. <span class="date">
  19. <span>{{ week }}</span>
  20. <span>{{ date }}</span>
  21. </span>
  22. </div>
  23. </header>
  24. <section class="mainbox">
  25. <div class="item left">
  26. <div class="panel">
  27. <h2>业务范围</h2>
  28. <business />
  29. <div class="panel-footer"></div>
  30. </div>
  31. <div class="panel">
  32. <h2>人才队伍</h2>
  33. <talent />
  34. <div class="panel-footer"></div>
  35. </div>
  36. <div class="panel">
  37. <h2>营收状况</h2>
  38. <income />
  39. <div class="panel-footer"></div>
  40. </div>
  41. </div>
  42. <div class="item center">
  43. <div class="resume">
  44. <div class="resume-hd">
  45. <ul>
  46. <li>
  47. <countTo :startVal='startVal' :endVal='490' :duration='6000' separator=""></countTo>
  48. </li>
  49. <li>
  50. <countTo :startVal='startVal' :endVal='75' :duration='6000' separator=""></countTo>
  51. </li>
  52. <li>
  53. <countTo :startVal='startVal' :endVal='3000' :duration='6000' separator=""></countTo>
  54. </li>
  55. </ul>
  56. </div>
  57. <div class="resume-bd">
  58. <ul>
  59. <li>公司总人数(单位:人)</li>
  60. <li>技术人员占比(单位:%)</li>
  61. <li>产品投资额(单位:万元)</li>
  62. </ul>
  63. </div>
  64. </div>
  65. <div class="map">
  66. <div class="chart" id="chart_map"></div>
  67. <div class="map1"></div>
  68. <div class="map2"></div>
  69. <div class="map3"></div>
  70. </div>
  71. </div>
  72. <div class="item right">
  73. <div class="panel">
  74. <h2>产品热词</h2>
  75. <wordCloud />
  76. <div class="panel-footer"></div>
  77. </div>
  78. <div class="panel">
  79. <h2>客户分布</h2>
  80. <distribution />
  81. <div class="panel-footer"></div>
  82. </div>
  83. <div class="panel">
  84. <h2>发展历程</h2>
  85. <history />
  86. <div class="panel-footer"></div>
  87. </div>
  88. </div>
  89. </section>
  90. </div>
  91. </div>
  92. </template>
  93. <script>
  94. import '@/assets/js/flexible'
  95. import '@/assets/js/china'
  96. import countTo from 'vue-count-to'
  97. export default {
  98. name: 'Brand',
  99. components: {
  100. countTo
  101. },
  102. data() {
  103. return {
  104. nowTime: '',
  105. week: '',
  106. date: '',
  107. timer: null,
  108. imgSrc: '',
  109. weatcherData: {},
  110. startVal: 0,
  111. geoCoordMap: {},
  112. XAData: [
  113. [{ name: "长沙" }, { name: "北京", value: 100 }],
  114. [{ name: "长沙" }, { name: "上海", value: 100 }],
  115. [{ name: "长沙" }, { name: "广州", value: 100 }],
  116. [{ name: "长沙" }, { name: "深圳", value: 100 }],
  117. [{ name: "长沙" }, { name: "西安", value: 100 }]
  118. ],
  119. XNData: [
  120. [{ name: "长沙" }, { name: "西宁", value: 100 }],
  121. [{ name: "长沙" }, { name: "拉萨", value: 100 }],
  122. [{ name: "长沙" }, { name: "哈尔滨", value: 100 }],
  123. [{ name: "长沙" }, { name: "成都", value: 100 }],
  124. [{ name: "长沙" }, { name: "重庆", value: 100 }]
  125. ],
  126. YCData: [
  127. [{ name: "北京" }, { name: "长沙", value: 100 }],
  128. [{ name: "北京" }, { name: "贵阳", value: 100 }],
  129. [{ name: "北京" }, { name: "杭州", value: 100 }]
  130. ]
  131. }
  132. },
  133. computed: {
  134. },
  135. created() {
  136. },
  137. mounted() {
  138. this.getWeather();
  139. this.timer = setInterval(() => {
  140. this.getWeather();
  141. }, 1000 * 60 * 60)
  142. this.nowTimes();
  143. this.getEchart();
  144. },
  145. methods: {
  146. timeFormate(timeStamp) { //显示当前时间
  147. let newDate = new Date(timeStamp);
  148. let year = newDate.getFullYear();
  149. let month = newDate.getMonth() + 1 < 10 ? '0' + (newDate.getMonth() + 1) : newDate.getMonth() + 1;
  150. let date = newDate.getDate() < 10 ? '0' + newDate.getDate() : newDate.getDate();
  151. let hh = newDate.getHours() < 10 ? '0' + newDate.getHours() : newDate.getHours();
  152. let mm = newDate.getMinutes() < 10 ? '0' + newDate.getMinutes() : newDate.getMinutes();
  153. let ss = newDate.getSeconds() < 10 ? '0' + newDate.getSeconds() : newDate.getSeconds();
  154. let week = newDate.getDay();
  155. let weeks = ['日', '一', '二', '三', '四', '五', '六'];
  156. let getWeek = '星期' + weeks[week];
  157. this.week = getWeek;
  158. this.date = year + '.' + month + '.' + date;
  159. this.nowTime = hh + ':' + mm + ':' + ss;
  160. },
  161. nowTimes() {
  162. this.timeFormate(new Date());
  163. setInterval(this.nowTimes, 1000);
  164. this.clear();
  165. },
  166. clear() {
  167. clearInterval(this.nowTimes)
  168. this.nowTimes = null;
  169. },
  170. getWeather() { // 第三方天气api接口
  171. window.axios.get('https://www.tianqiapi.com/api/', {
  172. params: {
  173. appid: '26148275',
  174. appsecret: '2id6H48Y',
  175. version: 'v6'
  176. }
  177. }).then(res => {
  178. if (res.data) {
  179. if (res.data.wea_img == 'xue') {
  180. this.imgSrc = require('../assets/img/brand/xue.png');
  181. } else if (res.data.wea_img == 'yin') {
  182. this.imgSrc = require('../assets/img/brand/yin.png');
  183. } else if (res.data.wea_img == 'yu' || res.data.wea_img == 'bingbao') {
  184. this.imgSrc = require('../assets/img/brand/yu.png');
  185. } else if (res.data.wea_img == 'yun') {
  186. this.imgSrc = require('../assets/img/brand/yun.png');
  187. } else if (res.data.wea_img == 'wu') {
  188. this.imgSrc = require('../assets/img/brand/wu.png');
  189. } else if (res.data.wea_img == 'shachen') {
  190. this.imgSrc = require('../assets/img/brand/shachen.png');
  191. } else if (res.data.wea_img == 'lei') {
  192. this.imgSrc = require('../assets/img/brand/lei.png');
  193. } else {
  194. this.imgSrc = require('../assets/img/brand/qing.png');
  195. }
  196. this.weatcherData = res.data;
  197. }
  198. }).catch(err => {
  199. console.log(err)
  200. })
  201. },
  202. convertData(data) { // 地图数据转换
  203. let res = [];
  204. for (let i = 0; i < data.length; i++) {
  205. let dataItem = data[i];
  206. let fromCoord = this.geoCoordMap[dataItem[0].name];
  207. let toCoord = this.geoCoordMap[dataItem[1].name];
  208. if (fromCoord && toCoord) {
  209. res.push({
  210. fromName: dataItem[0].name,
  211. toName: dataItem[1].name,
  212. coords: [fromCoord, toCoord],
  213. value: dataItem[1].value
  214. });
  215. }
  216. }
  217. return res;
  218. },
  219. getEchart() { // 初始化地图数据
  220. let myChart = echarts.init(document.getElementById('chart_map'));
  221. this.geoCoordMap = {
  222. 上海: [121.4648, 31.2891],
  223. 东莞: [113.8953, 22.901],
  224. 东营: [118.7073, 37.5513],
  225. 中山: [113.4229, 22.478],
  226. 临汾: [111.4783, 36.1615],
  227. 临沂: [118.3118, 35.2936],
  228. 丹东: [124.541, 40.4242],
  229. 丽水: [119.5642, 28.1854],
  230. 乌鲁木齐: [87.9236, 43.5883],
  231. 佛山: [112.8955, 23.1097],
  232. 保定: [115.0488, 39.0948],
  233. 兰州: [103.5901, 36.3043],
  234. 包头: [110.3467, 41.4899],
  235. 北京: [116.4551, 40.2539],
  236. 北海: [109.314, 21.6211],
  237. 南京: [118.8062, 31.9208],
  238. 南宁: [108.479, 23.1152],
  239. 南昌: [116.0046, 28.6633],
  240. 南通: [121.1023, 32.1625],
  241. 厦门: [118.1689, 24.6478],
  242. 台州: [121.1353, 28.6688],
  243. 合肥: [117.29, 32.0581],
  244. 呼和浩特: [111.4124, 40.4901],
  245. 咸阳: [108.4131, 34.8706],
  246. 哈尔滨: [127.9688, 45.368],
  247. 唐山: [118.4766, 39.6826],
  248. 嘉兴: [120.9155, 30.6354],
  249. 大同: [113.7854, 39.8035],
  250. 大连: [122.2229, 39.4409],
  251. 天津: [117.4219, 39.4189],
  252. 太原: [112.3352, 37.9413],
  253. 威海: [121.9482, 37.1393],
  254. 宁波: [121.5967, 29.6466],
  255. 宝鸡: [107.1826, 34.3433],
  256. 宿迁: [118.5535, 33.7775],
  257. 常州: [119.4543, 31.5582],
  258. 广州: [113.5107, 23.2196],
  259. 廊坊: [116.521, 39.0509],
  260. 延安: [109.1052, 36.4252],
  261. 张家口: [115.1477, 40.8527],
  262. 徐州: [117.5208, 34.3268],
  263. 德州: [116.6858, 37.2107],
  264. 惠州: [114.6204, 23.1647],
  265. 成都: [103.9526, 30.7617],
  266. 扬州: [119.4653, 32.8162],
  267. 承德: [117.5757, 41.4075],
  268. 拉萨: [91.1865, 30.1465],
  269. 无锡: [120.3442, 31.5527],
  270. 日照: [119.2786, 35.5023],
  271. 昆明: [102.9199, 25.4663],
  272. 杭州: [119.5313, 29.8773],
  273. 枣庄: [117.323, 34.8926],
  274. 柳州: [109.3799, 24.9774],
  275. 株洲: [113.5327, 27.0319],
  276. 武汉: [114.3896, 30.6628],
  277. 汕头: [117.1692, 23.3405],
  278. 江门: [112.6318, 22.1484],
  279. 沈阳: [123.1238, 42.1216],
  280. 沧州: [116.8286, 38.2104],
  281. 河源: [114.917, 23.9722],
  282. 泉州: [118.3228, 25.1147],
  283. 泰安: [117.0264, 36.0516],
  284. 泰州: [120.0586, 32.5525],
  285. 济南: [117.1582, 36.8701],
  286. 济宁: [116.8286, 35.3375],
  287. 海口: [110.3893, 19.8516],
  288. 淄博: [118.0371, 36.6064],
  289. 淮安: [118.927, 33.4039],
  290. 深圳: [114.5435, 22.5439],
  291. 清远: [112.9175, 24.3292],
  292. 温州: [120.498, 27.8119],
  293. 渭南: [109.7864, 35.0299],
  294. 湖州: [119.8608, 30.7782],
  295. 湘潭: [112.5439, 27.7075],
  296. 滨州: [117.8174, 37.4963],
  297. 潍坊: [119.0918, 36.524],
  298. 烟台: [120.7397, 37.5128],
  299. 玉溪: [101.9312, 23.8898],
  300. 珠海: [113.7305, 22.1155],
  301. 盐城: [120.2234, 33.5577],
  302. 盘锦: [121.9482, 41.0449],
  303. 石家庄: [114.4995, 38.1006],
  304. 福州: [119.4543, 25.9222],
  305. 秦皇岛: [119.2126, 40.0232],
  306. 绍兴: [120.564, 29.7565],
  307. 聊城: [115.9167, 36.4032],
  308. 肇庆: [112.1265, 23.5822],
  309. 舟山: [122.2559, 30.2234],
  310. 苏州: [120.6519, 31.3989],
  311. 莱芜: [117.6526, 36.2714],
  312. 菏泽: [115.6201, 35.2057],
  313. 营口: [122.4316, 40.4297],
  314. 葫芦岛: [120.1575, 40.578],
  315. 衡水: [115.8838, 37.7161],
  316. 衢州: [118.6853, 28.8666],
  317. 西宁: [101.4038, 36.8207],
  318. 西安: [109.1162, 34.2004],
  319. 贵阳: [106.6992, 26.7682],
  320. 连云港: [119.1248, 34.552],
  321. 邢台: [114.8071, 37.2821],
  322. 邯郸: [114.4775, 36.535],
  323. 郑州: [113.4668, 34.6234],
  324. 鄂尔多斯: [108.9734, 39.2487],
  325. 重庆: [107.7539, 30.1904],
  326. 金华: [120.0037, 29.1028],
  327. 铜川: [109.0393, 35.1947],
  328. 银川: [106.3586, 38.1775],
  329. 镇江: [119.4763, 31.9702],
  330. 长春: [125.8154, 44.2584],
  331. 长沙: [113.0823, 28.2568],
  332. 长治: [112.8625, 36.4746],
  333. 阳泉: [113.4778, 38.0951],
  334. 青岛: [120.4651, 36.3373],
  335. 韶关: [113.7964, 24.7028]
  336. };
  337. let planePath = "path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z";
  338. let color = ["#fff", "#fff", "#fff"]; //航线的颜色
  339. let series = [];
  340. [
  341. ["长沙", this.XAData],
  342. ["长沙", this.XNData],
  343. ["北京", this.YCData]
  344. ].forEach((item, i) => {
  345. series.push(
  346. {
  347. name: item[0] + " Top3",
  348. type: "lines",
  349. zlevel: 1,
  350. effect: {
  351. show: true,
  352. period: 6,
  353. trailLength: 0.7,
  354. color: "red", //arrow箭头的颜色
  355. symbolSize: 3
  356. },
  357. lineStyle: {
  358. normal: {
  359. color: color[i],
  360. width: 0,
  361. curveness: 0.2
  362. }
  363. },
  364. data: this.convertData(item[1])
  365. },
  366. {
  367. name: item[0] + " Top3",
  368. type: "lines",
  369. zlevel: 2,
  370. symbol: ["none", "arrow"],
  371. symbolSize: 10,
  372. effect: {
  373. show: true,
  374. period: 6,
  375. trailLength: 0,
  376. symbol: planePath,
  377. symbolSize: 15
  378. },
  379. lineStyle: {
  380. normal: {
  381. color: color[i],
  382. width: 1,
  383. opacity: 0.6,
  384. curveness: 0.2
  385. }
  386. },
  387. data: this.convertData(item[1])
  388. },
  389. {
  390. name: item[0] + " Top3",
  391. type: "effectScatter",
  392. coordinateSystem: "geo",
  393. zlevel: 2,
  394. rippleEffect: {
  395. brushType: "stroke"
  396. },
  397. label: {
  398. normal: {
  399. show: true,
  400. position: "right",
  401. formatter: "{b}"
  402. }
  403. },
  404. symbolSize: (val) => {
  405. return val[2] / 8;
  406. },
  407. itemStyle: {
  408. normal: {
  409. color: color[i]
  410. },
  411. emphasis: {
  412. areaColor: "#2B91B7"
  413. }
  414. },
  415. data: item[1].map((dataItem) => {
  416. return {
  417. name: dataItem[1].name,
  418. value: this.geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
  419. };
  420. })
  421. }
  422. );
  423. });
  424. let option = {
  425. tooltip: {
  426. trigger: "item",
  427. formatter: (params, ticket, callback) => {
  428. if (params.seriesType == "effectScatter") {
  429. return "线路:" + params.data.name + "" + params.data.value[2];
  430. } else if (params.seriesType == "lines") {
  431. return (
  432. params.data.fromName +
  433. ">" +
  434. params.data.toName +
  435. "<br />" +
  436. params.data.value
  437. );
  438. } else {
  439. return params.name;
  440. }
  441. }
  442. },
  443. geo: {
  444. map: "china",
  445. label: {
  446. emphasis: {
  447. show: true,
  448. color: "#fff"
  449. }
  450. },
  451. roam: false,
  452. // 放大我们的地图
  453. zoom: 1,
  454. itemStyle: {
  455. normal: {
  456. areaColor: "rgba(43, 196, 243, 0.42)",
  457. borderColor: "rgba(43, 196, 243, 1)",
  458. borderWidth: 1
  459. },
  460. emphasis: {
  461. areaColor: "#2B91B7"
  462. }
  463. }
  464. },
  465. series: series
  466. }
  467. myChart.setOption(option, true);
  468. window.addEventListener("resize", () => {
  469. myChart.resize();
  470. });
  471. }
  472. },
  473. beforeDestroy() {
  474. clearInterval(this.timer);
  475. }
  476. }
  477. </script>
  478. <style lang="scss" scoped>
  479. .brand-container {
  480. position: absolute;
  481. width: 100%;
  482. height: 100%;
  483. background: #000;
  484. .wrap {
  485. background: url(../assets/img/brand/bg.jpg) no-repeat #000;
  486. background-size: cover;
  487. line-height: 1.15;
  488. header {
  489. position: relative;
  490. height: 1rem;
  491. background: url(../assets/img/brand/head_bg.png) no-repeat top center;
  492. background-size: 100% 100%;
  493. h2 {
  494. color: #7ef0ff;
  495. font-size: 0.475rem;
  496. text-align: center;
  497. line-height: 0.75rem;
  498. letter-spacing: 1px;
  499. }
  500. .weather {
  501. position: absolute;
  502. left: 1.375rem;
  503. top: 0.35rem;
  504. font-size: 0.25rem;
  505. color: rgba(126, 240, 255, .7);
  506. img {
  507. width: .45rem;
  508. }
  509. span {
  510. display: inline-block;
  511. }
  512. .tem {
  513. margin: 0 .1rem 0 .2rem;
  514. }
  515. }
  516. .showTime {
  517. position: absolute;
  518. right: 1.375rem;
  519. top: 0.5rem;
  520. color: rgba(126, 240, 255, .7);
  521. display: flex;
  522. .time {
  523. font-size: .28rem;
  524. margin-right: .18rem;
  525. }
  526. .date {
  527. span {
  528. display: block;
  529. &:nth-child(1) {
  530. font-size: .12rem;
  531. text-align: right;
  532. }
  533. &:nth-child(2) {
  534. font-size: .14rem;
  535. }
  536. }
  537. }
  538. }
  539. }
  540. .mainbox {
  541. min-width: 1024px;
  542. max-width: 1920px;
  543. padding: 0.125rem 0.125rem 0;
  544. display: flex;
  545. .item {
  546. flex: 3;
  547. &.center {
  548. flex: 5;
  549. margin: 0 0.125rem 0.1rem;
  550. overflow: hidden;
  551. .resume {
  552. background: rgba(101, 132, 226, 0.1);
  553. padding: 0.1875rem;
  554. .resume-hd {
  555. position: relative;
  556. border: 1px solid rgba(25, 186, 139, 0.17);
  557. ul {
  558. display: flex;
  559. %li-line {
  560. content: "";
  561. position: absolute;
  562. height: 50%;
  563. width: 1px;
  564. background: rgba(255, 255, 255, 0.2);
  565. top: 25%;
  566. }
  567. li {
  568. position: relative;
  569. flex: 1;
  570. text-align: center;
  571. height: 1.2rem;
  572. line-height: 1.2rem;
  573. font-size: 0.65rem;
  574. color: #ffeb7b;
  575. padding: 0.05rem 0;
  576. font-family: 'DIGITALDREAMFAT';
  577. font-weight: bold;
  578. &:nth-child(2) {
  579. &:after {
  580. @extend %li-line;
  581. right: 0;
  582. }
  583. &:before {
  584. @extend %li-line;
  585. left: 0;
  586. }
  587. }
  588. }
  589. }
  590. &:before {
  591. content: "";
  592. position: absolute;
  593. width: 30px;
  594. height: 10px;
  595. border-top: 2px solid #02a6b5;
  596. border-left: 2px solid #02a6b5;
  597. top: 0;
  598. left: 0;
  599. }
  600. &:after {
  601. content: "";
  602. position: absolute;
  603. width: 30px;
  604. height: 10px;
  605. border-bottom: 2px solid #02a6b5;
  606. border-right: 2px solid #02a6b5;
  607. right: 0;
  608. bottom: 0;
  609. }
  610. }
  611. .resume-bd {
  612. ul {
  613. display: flex;
  614. li {
  615. flex: 1;
  616. height: 0.5rem;
  617. line-height: 0.5rem;
  618. text-align: center;
  619. font-size: 0.225rem;
  620. color: rgba(255, 255, 255, 0.7);
  621. padding-top: 0.125rem;
  622. }
  623. }
  624. }
  625. }
  626. }
  627. %map-style {
  628. position: absolute;
  629. top: 50%;
  630. left: 50%;
  631. transform: translate(-50%, -50%);
  632. width: 6.475rem;
  633. height: 6.475rem;
  634. background: url(../assets/img/brand/map.png) no-repeat;
  635. background-size: 100% 100%;
  636. opacity: 0.3;
  637. }
  638. .map {
  639. position: relative;
  640. height: 10.125rem;
  641. .chart {
  642. position: absolute;
  643. top: 0;
  644. left: 0;
  645. z-index: 5;
  646. height: 10.125rem;
  647. width: 100%;
  648. }
  649. .map1 {
  650. @extend %map-style;
  651. }
  652. .map2 {
  653. @extend %map-style;
  654. width: 8.0375rem;
  655. height: 8.0375rem;
  656. background-image: url(../assets/img/brand/lbx.png);
  657. opacity: 0.6;
  658. -webkit-animation: rotate 15s linear infinite;
  659. animation: rotate 15s linear infinite;
  660. z-index: 2;
  661. }
  662. .map3 {
  663. @extend %map-style;
  664. width: 7.075rem;
  665. height: 7.075rem;
  666. background-image: url(../assets/img/brand/jt.png);
  667. -webkit-animation: rotate1 10s linear infinite;
  668. animation: rotate1 10s linear infinite;
  669. }
  670. }
  671. .panel {
  672. position: relative;
  673. height: 3.875rem;
  674. border: 1px solid rgba(25, 186, 139, 0.17);
  675. background: rgba(255, 255, 255, 0.04) url(../assets/img/brand/line.png);
  676. padding: 0 0.1875rem 0;
  677. margin-bottom: 0.1875rem;
  678. &:before {
  679. position: absolute;
  680. top: 0;
  681. left: 0;
  682. content: "";
  683. width: 10px;
  684. height: 10px;
  685. border-top: 2px solid #02a6b5;
  686. border-left: 2px solid #02a6b5;
  687. }
  688. &:after {
  689. position: absolute;
  690. top: 0;
  691. right: 0;
  692. content: "";
  693. width: 10px;
  694. height: 10px;
  695. border-top: 2px solid #02a6b5;
  696. border-right: 2px solid #02a6b5;
  697. }
  698. .panel-footer {
  699. position: absolute;
  700. left: 0;
  701. bottom: 0;
  702. width: 100%;
  703. &:before {
  704. position: absolute;
  705. bottom: 0;
  706. left: 0;
  707. content: "";
  708. width: 10px;
  709. height: 10px;
  710. border-bottom: 2px solid #02a6b5;
  711. border-left: 2px solid #02a6b5;
  712. }
  713. &:after {
  714. position: absolute;
  715. bottom: 0;
  716. right: 0;
  717. content: "";
  718. width: 10px;
  719. height: 10px;
  720. border-bottom: 2px solid #02a6b5;
  721. border-right: 2px solid #02a6b5;
  722. }
  723. }
  724. h2 {
  725. height: 0.6rem;
  726. line-height: 0.6rem;
  727. text-align: center;
  728. color: #fff;
  729. font-size: 0.225rem;
  730. font-weight: 400;
  731. a {
  732. margin: 0 0.1875rem;
  733. color: #fff;
  734. text-decoration: none;
  735. }
  736. }
  737. .chart {
  738. height: 3rem;
  739. }
  740. }
  741. }
  742. }
  743. }
  744. }
  745. @-webkit-keyframes rotate {
  746. from {
  747. transform: translate(-50%, -50%) rotate(0deg);
  748. }
  749. to {
  750. transform: translate(-50%, -50%) rotate(360deg);
  751. }
  752. }
  753. @keyframes rotate {
  754. from {
  755. transform: translate(-50%, -50%) rotate(0deg);
  756. }
  757. to {
  758. transform: translate(-50%, -50%) rotate(360deg);
  759. }
  760. }
  761. @-webkit-keyframes rotate1 {
  762. from {
  763. transform: translate(-50%, -50%) rotate(0deg);
  764. }
  765. to {
  766. transform: translate(-50%, -50%) rotate(-360deg);
  767. }
  768. }
  769. @keyframes rotate1 {
  770. from {
  771. transform: translate(-50%, -50%) rotate(0deg);
  772. }
  773. to {
  774. transform: translate(-50%, -50%) rotate(-360deg);
  775. }
  776. }
  777. @media screen and (max-width: 1024px) {
  778. html {
  779. font-size: 42px !important;
  780. }
  781. }
  782. @media screen and (min-width: 1920) {
  783. html {
  784. font-size: 80px !important;
  785. }
  786. }
  787. </style>