PcFooter.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  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.com.au?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 to="/media" target="_self">Media Centre
  98. </nuxt-link>
  99. <nuxt-link to="/home/newsLetter"> NewsLetter </nuxt-link>
  100. <nuxt-link
  101. to="/home/downloadCenter"
  102. v-show="audit_status">
  103. Download Center
  104. </nuxt-link>
  105. <!-- <nuxt-link to="/home/FAQs"> FAQ </nuxt-link> -->
  106. <nuxt-link to="/home/privacyPolicy">
  107. Privacy Policy
  108. </nuxt-link>
  109. <nuxt-link
  110. to="/home/contact"
  111. v-if="isLogin">
  112. Contact Us
  113. </nuxt-link>
  114. <nuxt-link
  115. to="/home/contactPromoCollection"
  116. v-else>
  117. Contact Us
  118. </nuxt-link>
  119. <nuxt-link
  120. :to="{
  121. name: 'news-newsName',
  122. params: { newsName: '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/PromoCollection/">
  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/promocollectionau/">
  165. <img
  166. src="@/assets/img/Shape 21.png"
  167. alt="" />
  168. </a>
  169. </div>
  170. <div class="footer-bottom-item-right">
  171. {{ indexConfigWebsite.version_info }}
  172. </div>
  173. </div>
  174. </div>
  175. <dialog-XX-success :imgShow=false
  176. :visible.sync="xxContentVisible" :desc="xxDesc"></dialog-XX-success>
  177. </footer>
  178. </template>
  179. <script>
  180. import { mapMutations } from 'vuex'
  181. import dialogXXSuccess from './DIalogXXSuccess.vue'
  182. export default {
  183. components: { 'dialog-XX-success': dialogXXSuccess },
  184. data() {
  185. return {
  186. footerBannerList: [],
  187. productList: [],
  188. indexConfigWebsite: [],
  189. aboutUsArticle: {},
  190. flag_scroll: false,
  191. scroll: 0,
  192. xxContentVisible: false,
  193. xxDesc: '',
  194. }
  195. },
  196. async fetch() {
  197. await this.$axios
  198. .post('home/indexBanner', { site: 1, type: 6 })
  199. .then(res => {
  200. this.footerBannerList = res.result.data
  201. // this.$store.commit("config/setConfigInfo", res.result);
  202. })
  203. await this.$axios.post('home/indexConfigWebsite', { site: 1 }).then(res => {
  204. this.indexConfigWebsite = res.result
  205. this.$store.commit('config/setConfigInfo', res.result)
  206. })
  207. await this.$axios.post('common/shopProductList').then(res => {
  208. this.productList = res.result
  209. })
  210. await this.$axios
  211. .post('/home/articleLists', { state: 'au', keyword: 'About us' })
  212. .then(res => {
  213. this.aboutUsArticle = res.result.data[0]
  214. })
  215. },
  216. computed: {
  217. audit_status() {
  218. return this.$store.state.userInfo?.audit_status === 1
  219. },
  220. isLogin() {
  221. return !!this.$store.state.userInfo?.email
  222. },
  223. },
  224. methods: {
  225. ...mapMutations('config', ['setConfigInfo']),
  226. ...mapMutations(['openDialog']),
  227. backTop() {
  228. var timer = setInterval(function () {
  229. document.documentElement.scrollTop -= 20
  230. if (document.documentElement.scrollTop <= 0) {
  231. clearInterval(timer)
  232. }
  233. }, 10)
  234. },
  235. handleScroll() {
  236. const scrollobj =
  237. document.body.scrollTop + document.documentElement.scrollTop
  238. if (scrollobj > 500) {
  239. this.flag_scroll = true
  240. } else {
  241. this.flag_scroll = false
  242. }
  243. },
  244. openLoginDialog() {
  245. if(this.$utils.checkLogin()){
  246. this.$router.push({name: 'news-newsName',params: { newsName: 'About-Us' }})
  247. }else{
  248. this.openDialog();
  249. }
  250. },
  251. goApiWord() {
  252. if (this.isLogin) {
  253. if (this.$store.state.userInfo.open_platform) {
  254. const { href } = this.$router.resolve({
  255. name: 'home-api',
  256. })
  257. window.open(href, '_black')
  258. } else {
  259. this.submitLoading = false
  260. this.xxContentVisible = true
  261. this.xxDesc = 'If you encounter difficulties, please contact info@promocollection.com.au'
  262. // this.$message.error(
  263. // 'If you encounter difficulties, please contact info@promocollection.com.au'
  264. // )
  265. }
  266. } else {
  267. this.openDialog()
  268. }
  269. },
  270. },
  271. mounted() {
  272. window.addEventListener('scroll', this.handleScroll, true)
  273. },
  274. destroyed() {
  275. window.removeEventListener('scroll', this.scrollToTop)
  276. },
  277. }
  278. </script>
  279. <style lang="scss" scoped>
  280. footer {
  281. line-height: 0;
  282. margin-top: 15px;
  283. font-family: Proxima Nova;
  284. .footer-top {
  285. position: relative;
  286. .footer-banner {
  287. width: 100%;
  288. height: 500px;
  289. }
  290. .top-item {
  291. position: absolute;
  292. top: 160px;
  293. left: 20%;
  294. p:first-of-type {
  295. width: 360px;
  296. height: 66px;
  297. font-size: 36px;
  298. font-weight: bold;
  299. color: #ffffff;
  300. line-height: 33px;
  301. margin-bottom: 18px;
  302. }
  303. p:nth-of-type(2) {
  304. width: 400px;
  305. height: 38px;
  306. font-size: 16px;
  307. font-weight: 400;
  308. color: #8290a1;
  309. line-height: 20px;
  310. margin-bottom: 16px;
  311. }
  312. .btn {
  313. width: 172px;
  314. height: 50px;
  315. line-height: 50px;
  316. border-radius: 6px;
  317. font-size: 14px;
  318. font-family: Proxima Nova;
  319. font-weight: bold;
  320. color: #ffffff;
  321. text-transform: uppercase;
  322. border: none;
  323. cursor: pointer;
  324. margin-right: 16px;
  325. text-align: center;
  326. a {
  327. display: block;
  328. width: 100%;
  329. color: #ffffff;
  330. }
  331. }
  332. .btn-red {
  333. background: #e90000;
  334. }
  335. .btn-blue {
  336. background: #0b6dc9;
  337. }
  338. }
  339. }
  340. .footer-middle {
  341. max-width: 1400px;
  342. .middle {
  343. display: flex;
  344. justify-content: space-around;
  345. background: url('@/assets/img/Shape 28.png') no-repeat;
  346. height: 377px;
  347. .footer-middle-item {
  348. width: 100%;
  349. }
  350. }
  351. .middle-item-left {
  352. margin-right: 10px;
  353. img {
  354. width: 241px;
  355. height: 65px;
  356. }
  357. p {
  358. max-width: 465px;
  359. font-size: 12px;
  360. font-weight: 400;
  361. color: #4a596c;
  362. line-height: 24px;
  363. margin-left: 20px;
  364. margin-top: 15px;
  365. }
  366. }
  367. .middle-item-right {
  368. display: flex;
  369. justify-content: space-around;
  370. margin-top: 35px;
  371. .item-menu {
  372. &:nth-child(2){
  373. margin-left: 80px;
  374. }
  375. &:last-child{
  376. margin-left: 35px;
  377. }
  378. height: 172px;
  379. .item-title {
  380. white-space:nowrap;
  381. height: 20px;
  382. line-height: 20px;
  383. font-size: 14px;
  384. font-weight: bold;
  385. color: #000000;
  386. padding-bottom: 5px;
  387. }
  388. .item-line {
  389. width: 40px;
  390. height: 2px;
  391. background: #e90000;
  392. }
  393. .item-content {
  394. margin-top: 20px;
  395. height: 104px;
  396. div {
  397. height: 100%;
  398. a,
  399. .item-content-a {
  400. white-space:nowrap;
  401. display: block;
  402. // width: 120px;
  403. height: 20px;
  404. line-height: 20px;
  405. font-size: 0.87rem;
  406. font-weight: 400;
  407. color: #4a596c;
  408. padding-bottom: 5px;
  409. cursor: pointer;
  410. &:hover{
  411. color: #006dc9;
  412. }
  413. }
  414. ul {
  415. display: flex;
  416. justify-content: flex-start;
  417. flex-wrap: wrap;
  418. width: 200px;
  419. li {
  420. &:nth-child(even){
  421. a{
  422. width: 80px;
  423. }
  424. }
  425. &:nth-child(odd){
  426. a{
  427. width: 120px;
  428. }
  429. }
  430. a {
  431. display: inline-block;
  432. height: 20px;
  433. line-height: 20px;
  434. // font-size: 12px;
  435. font-size: 0.87rem;
  436. font-weight: 400;
  437. color: #4a596c;
  438. padding-bottom: 5px;
  439. cursor: pointer;
  440. }
  441. }
  442. }
  443. }
  444. }
  445. }
  446. }
  447. .goTop {
  448. width: 1.6cm;
  449. height: 1.6cm;
  450. position: fixed;
  451. z-index: 2;
  452. bottom: 2cm;
  453. right: 12px;
  454. cursor: pointer;
  455. img {
  456. width: 100%;
  457. }
  458. }
  459. }
  460. .footer-bottom {
  461. width: 100%;
  462. background-color: #f1f4f9;
  463. .footer-bottom-item {
  464. height: 56px;
  465. display: flex;
  466. justify-content: space-between;
  467. align-items: center;
  468. .footer-bottom-item-left {
  469. margin-left: 50px;
  470. a {
  471. cursor: pointer;
  472. img {
  473. width: 19px;
  474. height: 20px;
  475. margin-left: 24px;
  476. }
  477. }
  478. }
  479. .footer-bottom-item-right {
  480. font-size: 12px;
  481. font-weight: 400;
  482. color: #4a596c;
  483. }
  484. }
  485. }
  486. }
  487. </style>