PcFooter.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <template>
  2. <footer>
  3. <div
  4. class="footer-top"
  5. v-if="footerBannerList.length > 0">
  6. <el-image
  7. lazy
  8. :src="footerBannerList[0].image"
  9. alt=""
  10. class="footer-banner"
  11. fit="cover"></el-image>
  12. <div class="top-item">
  13. <p>Need ideas? Samples? Art assistance?</p>
  14. <p>Get in touch, we're here to help</p>
  15. <!-- <el-button
  16. class="btn btn-red"
  17. @click="openLoginDialog">
  18. Become a member
  19. </el-button> -->
  20. <div class="btn btn-blue">
  21. <nuxt-link
  22. to="/home/contact"
  23. v-if="isLogin">
  24. Contact Us
  25. </nuxt-link>
  26. <nuxt-link
  27. to="/home/contactPromoCollection"
  28. v-else>
  29. Contact Us
  30. </nuxt-link>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="footer-middle com-margin-auto">
  35. <div class="middle com-margin-auto com-flex">
  36. <div class="middle-item-left">
  37. <img
  38. src="@/assets/img/logo_footer.png"
  39. alt="" />
  40. <p>{{ indexConfigWebsite.company_introduction }}</p>
  41. </div>
  42. <div class="middle-item-right">
  43. <div class="item-menu">
  44. <div class="item-title">OUR PRODUCTS</div>
  45. <div class="item-line"></div>
  46. <div class="item-content">
  47. <div>
  48. <ul>
  49. <li
  50. v-for="item in productList"
  51. :key="item.id">
  52. <nuxt-link
  53. :to="{
  54. name: 'category-firstCategory',
  55. params: {
  56. firstCategory: item.name
  57. .replace(/\s+/g, '-')
  58. .replace('-&', '')
  59. .toLowerCase(),
  60. id: item.id,
  61. },
  62. }">
  63. {{ item.name }}
  64. </nuxt-link>
  65. </li>
  66. </ul>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="item-menu">
  71. <div class="item-title">CUSTOMER SUPPORT</div>
  72. <div class="item-line"></div>
  73. <div class="item-content">
  74. <div>
  75. <!-- <nuxt-link to="/home/helpCenter">Help Center </nuxt-link> -->
  76. <a
  77. href="mailto:Info@promocollection.uk?subject=Sample%20Request"
  78. v-show="audit_status">
  79. Sample Request
  80. </a>
  81. <nuxt-link to="/home/termsConditions">
  82. Terms & Conditions
  83. </nuxt-link>
  84. <!-- <nuxt-link
  85. to="/home/refundReturns"
  86. v-show="audit_status">
  87. Refund & Returns
  88. </nuxt-link> -->
  89. </div>
  90. </div>
  91. </div>
  92. <div class="item-menu">
  93. <div class="item-title">ADDITIONAL INFO</div>
  94. <div class="item-line"></div>
  95. <div class="item-content">
  96. <div>
  97. <nuxt-link
  98. to="/media"
  99. target="_self"
  100. >Media Centre
  101. </nuxt-link>
  102. <!-- <nuxt-link to="/home/newsLetter"> NewsLetter </nuxt-link> -->
  103. <nuxt-link
  104. to="/home/downloadCenter"
  105. v-show="audit_status">
  106. Download Center
  107. </nuxt-link>
  108. <!-- <nuxt-link to="/home/FAQs"> FAQ </nuxt-link> -->
  109. <nuxt-link to="/home/privacyPolicy"> Privacy Policy </nuxt-link>
  110. <nuxt-link
  111. to="/home/contact"
  112. v-if="isLogin">
  113. Contact Us
  114. </nuxt-link>
  115. <nuxt-link
  116. to="/home/contactPromoCollection"
  117. v-else>
  118. Contact Us
  119. </nuxt-link>
  120. <nuxt-link
  121. :to="{
  122. path: '/article/About-Us',
  123. }"
  124. >About Us
  125. </nuxt-link>
  126. <div
  127. class="item-content-a"
  128. @click="goApiWord">
  129. API
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </div>
  136. <div
  137. v-show="flag_scroll"
  138. class="goTop"
  139. @click="backTop">
  140. <img
  141. src="@/assets/img/Floating.png"
  142. alt=""
  143. @click="backTop" />
  144. </div>
  145. </div>
  146. <div class="footer-bottom">
  147. <div class="footer-bottom-item com-width-1400 com-margin-auto">
  148. <div class="footer-bottom-item-left">
  149. <a href="https://www.facebook.com/profile.php?id=100070939456361">
  150. <img
  151. src="@/assets/img/Shape 4.png"
  152. alt="" />
  153. </a>
  154. <!-- <a href="https://twitter.com/Promocollection/">
  155. <img
  156. src="@/assets/img/Shape 5.png"
  157. alt="" />
  158. </a>
  159. <a href="https://www.youtube.com/channel/UCXHWdW0Khk-TNxjObLqi7Yg">
  160. <img
  161. src="@/assets/img/Shape 7.png"
  162. alt="" />
  163. </a> -->
  164. <a href="https://www.instagram.com/promocollectioneu/">
  165. <img
  166. src="@/assets/img/Shape 21.png"
  167. alt="" />
  168. </a>
  169. <a href="https://www.linkedin.com/company/promocollection-uk/?viewAsMember=true">
  170. <img src="@/assets/img/linkin.png" alt="">
  171. </a>
  172. </div>
  173. <div class="contact">
  174. <div>(+44)203 916 5098</div>
  175. <div>info@promocollection.uk</div>
  176. </div>
  177. <div class="flex icon-wrap">
  178. <img
  179. src="@/assets/img/footer/uk_foot3.jpg"
  180. height="68.4"
  181. width="143"
  182. style="margin-right: 20px" />
  183. <img
  184. src="@/assets/img/footer/uk_foot4.png"
  185. height="68.4"
  186. width="68.4"
  187. style="margin-right: 20px" />
  188. <img
  189. src="@/assets/img/footer/uk_foot5.png"
  190. height="64.82"
  191. width="204" />
  192. </div>
  193. <div class="footer-bottom-item-right">
  194. {{ indexConfigWebsite.version_info }}
  195. </div>
  196. </div>
  197. </div>
  198. <dialog-XX-success
  199. :imgShow="false"
  200. :visible.sync="xxContentVisible"
  201. :desc="xxDesc"></dialog-XX-success>
  202. </footer>
  203. </template>
  204. <script>
  205. import { mapMutations } from 'vuex'
  206. import dialogXXSuccess from './DIalogXXSuccess.vue'
  207. export default {
  208. components: { 'dialog-XX-success': dialogXXSuccess },
  209. data() {
  210. return {
  211. footerBannerList: [],
  212. productList: [],
  213. indexConfigWebsite: [],
  214. aboutUsArticle: {},
  215. flag_scroll: false,
  216. scroll: 0,
  217. xxContentVisible: false,
  218. xxDesc: '',
  219. }
  220. },
  221. async fetch() {
  222. await this.$axios
  223. .post('/uk-api/home/indexBanner', { type: 6 })
  224. .then(res => {
  225. this.footerBannerList = res.result.data
  226. // this.$store.commit("config/setConfigInfo", res.result);
  227. })
  228. await this.$axios.post('/uk-api/home/indexConfigWebsite', { site: 1 }).then(res => {
  229. this.indexConfigWebsite = res.result
  230. this.$store.commit('config/setConfigInfo', res.result)
  231. })
  232. await this.$axios.post('/uk-api/common/shopProductList').then(res => {
  233. this.productList = res.result
  234. })
  235. await this.$axios
  236. .post('/uk-api/home/articleList', { keyword: 'About us' })
  237. .then(res => {
  238. this.aboutUsArticle = res.result.data[0]
  239. })
  240. },
  241. computed: {
  242. audit_status() {
  243. return this.$store.state.userInfo?.audit_status === 1
  244. },
  245. isLogin() {
  246. return !!this.$store.state.userInfo?.email
  247. },
  248. },
  249. methods: {
  250. ...mapMutations('config', ['setConfigInfo']),
  251. ...mapMutations(['openDialog']),
  252. backTop() {
  253. var timer = setInterval(function () {
  254. document.documentElement.scrollTop -= 20
  255. if (document.documentElement.scrollTop <= 0) {
  256. clearInterval(timer)
  257. }
  258. }, 10)
  259. },
  260. handleScroll() {
  261. const scrollobj =
  262. document.body.scrollTop + document.documentElement.scrollTop
  263. if (scrollobj > 500) {
  264. this.flag_scroll = true
  265. } else {
  266. this.flag_scroll = false
  267. }
  268. },
  269. openLoginDialog() {
  270. if (this.$utils.checkLogin()) {
  271. this.$router.push({
  272. name: 'news-newsName',
  273. params: { newsName: 'About-Us' },
  274. })
  275. } else {
  276. this.openDialog()
  277. }
  278. },
  279. goApiWord() {
  280. if (this.isLogin) {
  281. if (this.$store.state.userInfo.open_platform) {
  282. const { href } = this.$router.resolve({
  283. name: 'home-api',
  284. })
  285. window.open(href, '_black')
  286. } else {
  287. this.submitLoading = false
  288. this.xxContentVisible = true
  289. this.xxDesc =
  290. 'If you encounter difficulties, please contact info@promocollection.uk'
  291. // this.$message.error(
  292. // 'If you encounter difficulties, please contact info@promocollection.uk'
  293. // )
  294. }
  295. } else {
  296. this.openDialog()
  297. }
  298. },
  299. },
  300. mounted() {
  301. window.addEventListener('scroll', this.handleScroll, true)
  302. },
  303. destroyed() {
  304. window.removeEventListener('scroll', this.scrollToTop)
  305. },
  306. }
  307. </script>
  308. <style lang="scss" scoped>
  309. footer {
  310. line-height: 0;
  311. margin-top: 15px;
  312. font-family: Proxima Nova;
  313. .footer-top {
  314. position: relative;
  315. .footer-banner {
  316. width: 100%;
  317. height: 500px;
  318. }
  319. .top-item {
  320. position: absolute;
  321. top: 160px;
  322. left: 20%;
  323. p:first-of-type {
  324. width: 360px;
  325. height: 66px;
  326. font-size: 36px;
  327. font-weight: bold;
  328. color: #ffffff;
  329. line-height: 33px;
  330. margin-bottom: 18px;
  331. }
  332. p:nth-of-type(2) {
  333. width: 400px;
  334. height: 38px;
  335. font-size: 16px;
  336. font-weight: 400;
  337. color: #8290a1;
  338. line-height: 20px;
  339. margin-bottom: 16px;
  340. }
  341. .btn {
  342. width: 172px;
  343. height: 50px;
  344. line-height: 50px;
  345. border-radius: 6px;
  346. font-size: 14px;
  347. font-family: Proxima Nova;
  348. font-weight: bold;
  349. color: #ffffff;
  350. text-transform: uppercase;
  351. border: none;
  352. cursor: pointer;
  353. margin-right: 16px;
  354. text-align: center;
  355. a {
  356. display: block;
  357. width: 100%;
  358. color: #ffffff;
  359. }
  360. }
  361. .btn-red {
  362. background: #e90000;
  363. }
  364. .btn-blue {
  365. background: #0b6dc9;
  366. }
  367. }
  368. }
  369. .footer-middle {
  370. max-width: 1400px;
  371. .middle {
  372. display: flex;
  373. justify-content: space-around;
  374. background: url('@/assets/img/Shape 28.png') no-repeat;
  375. height: 377px;
  376. .footer-middle-item {
  377. width: 100%;
  378. }
  379. }
  380. .middle-item-left {
  381. margin-right: 10px;
  382. img {
  383. width: 241px;
  384. height: 65px;
  385. }
  386. p {
  387. max-width: 465px;
  388. font-size: 12px;
  389. font-weight: 400;
  390. color: #4a596c;
  391. line-height: 24px;
  392. margin-left: 20px;
  393. margin-top: 15px;
  394. }
  395. }
  396. .middle-item-right {
  397. display: flex;
  398. justify-content: space-around;
  399. margin-top: 35px;
  400. .item-menu {
  401. &:nth-child(2) {
  402. margin-left: 80px;
  403. }
  404. &:last-child {
  405. margin-left: 35px;
  406. }
  407. height: 172px;
  408. .item-title {
  409. white-space: nowrap;
  410. height: 20px;
  411. line-height: 20px;
  412. font-size: 14px;
  413. font-weight: bold;
  414. color: #000000;
  415. padding-bottom: 5px;
  416. }
  417. .item-line {
  418. width: 40px;
  419. height: 2px;
  420. background: #e90000;
  421. }
  422. .item-content {
  423. margin-top: 20px;
  424. height: 104px;
  425. div {
  426. height: 100%;
  427. a,
  428. .item-content-a {
  429. white-space: nowrap;
  430. display: block;
  431. // width: 120px;
  432. height: 20px;
  433. line-height: 20px;
  434. font-size: 0.87rem;
  435. font-weight: 400;
  436. color: #4a596c;
  437. padding-bottom: 5px;
  438. cursor: pointer;
  439. &:hover {
  440. color: #006dc9;
  441. }
  442. }
  443. ul {
  444. display: flex;
  445. justify-content: flex-start;
  446. flex-wrap: wrap;
  447. width: 200px;
  448. li {
  449. &:nth-child(even) {
  450. a {
  451. width: 80px;
  452. }
  453. }
  454. &:nth-child(odd) {
  455. a {
  456. width: 120px;
  457. }
  458. }
  459. a {
  460. display: inline-block;
  461. height: 20px;
  462. line-height: 20px;
  463. // font-size: 12px;
  464. font-size: 0.87rem;
  465. font-weight: 400;
  466. color: #4a596c;
  467. padding-bottom: 5px;
  468. cursor: pointer;
  469. }
  470. }
  471. }
  472. }
  473. }
  474. }
  475. }
  476. .goTop {
  477. width: 1.6cm;
  478. height: 1.6cm;
  479. position: fixed;
  480. z-index: 2;
  481. bottom: 2cm;
  482. right: 12px;
  483. cursor: pointer;
  484. img {
  485. width: 100%;
  486. }
  487. }
  488. }
  489. .footer-bottom {
  490. width: 100%;
  491. background-color: #f1f4f9;
  492. font-size: 12px;
  493. line-height: 14px;
  494. font-weight: 400;
  495. color: #4a596c;
  496. .contact div {
  497. margin-bottom: 6px;
  498. }
  499. .icon-wrap {
  500. padding: 0 4px;
  501. }
  502. .footer-bottom-item {
  503. padding: 4px;
  504. min-height: 130px;
  505. display: flex;
  506. justify-content: space-between;
  507. align-items: center;
  508. flex-wrap: wrap;
  509. .footer-bottom-item-left {
  510. padding: 0 10px 0 0;
  511. a {
  512. cursor: pointer;
  513. img {
  514. width: 19px;
  515. height: 20px;
  516. margin-left: 24px;
  517. }
  518. }
  519. }
  520. }
  521. }
  522. }
  523. </style>