index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. <template>
  2. <main>
  3. <MainVisual />
  4. <section class="main--content--wrap">
  5. <div class="main--container">
  6. <div class="title--wrap mb-[40px]">
  7. <h3 class="green--title">Brand Story</h3>
  8. <p class="sub--title">
  9. 연간 4억톤 이상 폐기물이 버려져<br />
  10. 우리의 지구 환경에 많은 악영향을 주고 있습니다.
  11. </p>
  12. <h2>
  13. 그린웨일글로벌은 자연물질을 <br class="mobile" />플라스틱으로 생성하여
  14. <br />환경오염을 방지하는 신개념 <br class="mobile" />친환경 미래를 만들어 갈
  15. 것입니다.
  16. </h2>
  17. </div>
  18. <div class="content--wrap">
  19. <div class="img--card--wrap">
  20. <div class="card">
  21. <img src="/img/main--card1.png" alt="그린웨일글로벌" />
  22. </div>
  23. <div class="card">
  24. <img src="/img/main--card2.png" alt="그린웨일글로벌" />
  25. </div>
  26. <div class="card">
  27. <img src="/img/main--card3.png" alt="그린웨일글로벌" />
  28. </div>
  29. </div>
  30. <div class="black--btn--wrap">
  31. <NuxtLink class="black--btn" to="/company/intro"
  32. >더보기<i class="ico"></i
  33. ></NuxtLink>
  34. </div>
  35. </div>
  36. </div>
  37. </section>
  38. <section class="main--content--wrap bg--type white--txt">
  39. <div class="main--container">
  40. <div class="title--wrap mb-[40px]">
  41. <h3 class="green--title">Technology</h3>
  42. <h2>
  43. 그린웨일글로벌은 <br />자연에서 얻은 바이오매스를 <br class="mobile" />독자적
  44. 기술로 친환경 소재로 바꾸어, <br />생분해성·재활용·바이오 플라스틱을 통해
  45. <br />지구를 지키는 미래를 만들어갑니다.
  46. </h2>
  47. </div>
  48. <div class="content--wrap">
  49. <div class="square--card--wrap">
  50. <dl class="card">
  51. <dt>Ecoist®-Terra</dt>
  52. <dd>자연으로 돌아가는 플라스틱</dd>
  53. </dl>
  54. <dl class="card">
  55. <dt>Ecoist®-Revo</dt>
  56. <dd>되살아나는 플라스틱</dd>
  57. </dl>
  58. <dl class="card">
  59. <dt>Ecoist®-Nova</dt>
  60. <dd>새로운 세대의 바이오 폴리머</dd>
  61. </dl>
  62. <dl class="card">
  63. <dt>Ecoist®-Boost</dt>
  64. <dd>강화 & 성능 향상</dd>
  65. </dl>
  66. <dl class="card">
  67. <dt>Halastic®</dt>
  68. <dd>세계 최초 할랄 인증 친환경 바이오플라스틱</dd>
  69. </dl>
  70. </div>
  71. <div class="black--btn--wrap">
  72. <NuxtLink class="black--btn blur--type" to="/technology/facilities"
  73. >더보기<i class="ico"></i
  74. ></NuxtLink>
  75. </div>
  76. </div>
  77. </div>
  78. </section>
  79. <section class="main--content--wrap black--type white--txt">
  80. <div class="main--container">
  81. <div class="title--wrap mb-[60px]">
  82. <h3 class="green--title">The Numbers</h3>
  83. <h2>전세계가 한마음으로 <br />친환경 미래를 위해 노력하고 있습니다.</h2>
  84. </div>
  85. <div class="content--wrap">
  86. <div class="number--card--wrap">
  87. <div class="card">
  88. <i class="ico"></i>
  89. <div class="card--title">
  90. <p class="circle">플라스틱 감축</p>
  91. <div class="number--wrap">
  92. <span class="number">-80</span>
  93. <span class="percent">%</span>
  94. </div>
  95. <p class="sub--txt">
  96. Plastic pollution reduced <br />by 2040 <br />(UNEP)
  97. </p>
  98. </div>
  99. <ul class="card--desc">
  100. <li>
  101. <span class="nation">KR</span>
  102. <p class="txt">
  103. <strong>-50%</strong> <span>Plastic Usage by 2030</span>
  104. </p>
  105. </li>
  106. <li>
  107. <span class="nation">EU</span>
  108. <p class="txt">
  109. <strong>100%</strong> <span>recycled plastic packaging by 2030</span
  110. ><br />
  111. <strong>100%</strong> <span>recycled plastic packaging by 2030</span>
  112. </p>
  113. </li>
  114. <li>
  115. <span class="nation">US</span>
  116. <p class="txt">
  117. <strong>-25%</strong>
  118. <span>Single Use Plastic Packaging by 2032</span>
  119. </p>
  120. </li>
  121. </ul>
  122. </div>
  123. <div class="card">
  124. <i class="ico"></i>
  125. <div class="card--title">
  126. <p class="circle">온실가스 감축</p>
  127. <div class="number--wrap">
  128. <span class="number">-100</span>
  129. <span class="percent">%</span>
  130. </div>
  131. <p class="sub--txt">
  132. GHG emissions by 2050 <br />compared to 2010 levels <br />(UN IPCC
  133. report)
  134. </p>
  135. </div>
  136. <ul class="card--desc">
  137. <li>
  138. <span class="nation">KR</span>
  139. <p class="txt">
  140. <strong>-40%</strong> <span>by 2030 (vs. 2018)</span>
  141. <strong>-100%</strong> <span>by 2050</span>
  142. </p>
  143. </li>
  144. <li>
  145. <span class="nation">EU</span>
  146. <p class="txt">
  147. <strong>-55%</strong> <span>by 2030 (vs. 1990)</span>
  148. <strong>-100%</strong> <span>by 2050</span>
  149. </p>
  150. </li>
  151. <li>
  152. <span class="nation">US</span>
  153. <p class="txt">
  154. <strong>-48%</strong> <span>by 2030 (vs. 1990)</span>
  155. <strong>-100%</strong> <span>by 2045</span>
  156. </p>
  157. </li>
  158. </ul>
  159. </div>
  160. <div class="card">
  161. <i class="ico"></i>
  162. <div class="card--title">
  163. <p class="circle">재활용 촉진</p>
  164. <div class="number--wrap">
  165. <span class="number">42</span>
  166. <span class="percent">%</span>
  167. </div>
  168. <p class="sub--txt">
  169. Recycled possibly <br />by 2040 <br />(OECD scenario)
  170. </p>
  171. </div>
  172. <ul class="card--desc">
  173. <li>
  174. <span class="nation">KR</span>
  175. <p class="txt"><strong>70%</strong> <span>by 2030</span></p>
  176. </li>
  177. <li>
  178. <span class="nation">EU</span>
  179. <p class="txt">
  180. <strong>77%</strong> <span>bottles collected by 2025,</span>
  181. <strong>90%</strong> <span>by 2029 Bottles with</span>
  182. <strong>25%</strong> <span>recycled plastic by 2025, </span
  183. ><strong>30%</strong> <span>by 2030</span>
  184. </p>
  185. </li>
  186. <li>
  187. <span class="nation">US</span>
  188. <p class="txt">
  189. <strong>65%</strong> <span>single use plastic recycled by 2032</span
  190. ><br />
  191. <span>All packaging</span> <strong>100%</strong>
  192. <span>recycled or compostable</span>
  193. </p>
  194. </li>
  195. </ul>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. </section>
  201. <ItemSlide />
  202. <MarqueeContent />
  203. <section class="main--content--wrap">
  204. <div class="main--container">
  205. <div class="title--wrap mb-[40px]">
  206. <h3 class="green--title">News</h3>
  207. <h2>그린웨일글로벌과 관련한 <br />최신 소식을 확인하세요.</h2>
  208. </div>
  209. <div class="content--wrap">
  210. <div class="news--card--wrap">
  211. <a
  212. v-for="news in displayNews"
  213. :key="news.id"
  214. :href="news.link"
  215. target="_blank"
  216. rel="noopener noreferrer"
  217. class="news"
  218. >
  219. <h4 class="news--title">{{ news.title }}</h4>
  220. <!-- <p class="news--cont">뉴스 내용이 없어서 주석 처리</p> -->
  221. <span class="news--date">{{ news.date }}</span>
  222. </a>
  223. </div>
  224. <div class="black--btn--wrap">
  225. <NuxtLink class="black--btn" to="/media/news"
  226. >더보기<i class="ico"></i
  227. ></NuxtLink>
  228. </div>
  229. </div>
  230. </div>
  231. </section>
  232. <div class="pop_wrap">
  233. <div class="pop" id="pop1" v-show="popupStates.pop1">
  234. <a href="https://youtu.be/1yR2c0gD-0o" target="_blank"
  235. ><img src="/img/pop04.jpg" alt=""
  236. /></a>
  237. <div class="pop_footer">
  238. <p>
  239. <input type="checkbox" id="pop1Close" @change="closePopupOneDay('pop1')" />
  240. <label for="pop1Close">오늘하루열지않기</label>
  241. </p>
  242. <a href="#" class="pop_close" @click.prevent="closePopup('pop1')">닫기X</a>
  243. </div>
  244. </div>
  245. <div class="pop" id="pop2" v-show="popupStates.pop2">
  246. <div class="pop_footer">
  247. <p>
  248. <input type="checkbox" id="pop2Close" @change="closePopupOneDay('pop2')" />
  249. <label for="pop2Close">오늘하루열지않기</label>
  250. </p>
  251. <a href="#" class="pop_close" @click.prevent="closePopup('pop2')">닫기X</a>
  252. </div>
  253. </div>
  254. <div class="pop" id="pop3" v-show="popupStates.pop3">
  255. <div class="pop_footer">
  256. <p>
  257. <input type="checkbox" id="pop3Close" @change="closePopupOneDay('pop3')" />
  258. <label for="pop3Close">오늘하루열지않기</label>
  259. </p>
  260. <a href="#" class="pop_close" @click.prevent="closePopup('pop3')">닫기X</a>
  261. </div>
  262. </div>
  263. </div>
  264. </main>
  265. </template>
  266. <script setup>
  267. import { ref, computed, onMounted } from "vue";
  268. const newsData = ref([]);
  269. // 팝업 상태 관리
  270. const popupStates = ref({
  271. pop1: false,
  272. pop2: false,
  273. pop3: false,
  274. });
  275. // 쿠키 관련 함수들
  276. const setCookie = (name, value, days) => {
  277. const expires = new Date();
  278. expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
  279. document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/`;
  280. };
  281. const getCookie = (name) => {
  282. const nameEQ = name + "=";
  283. const ca = document.cookie.split(";");
  284. for (let i = 0; i < ca.length; i++) {
  285. let c = ca[i];
  286. while (c.charAt(0) === " ") c = c.substring(1, c.length);
  287. if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
  288. }
  289. return null;
  290. };
  291. // 팝업 닫기 함수
  292. const closePopup = (popupId) => {
  293. popupStates.value[popupId] = false;
  294. };
  295. // 하루 동안 팝업 닫기 함수
  296. const closePopupOneDay = (popupId) => {
  297. setCookie(popupId, "1", 1);
  298. popupStates.value[popupId] = false;
  299. };
  300. // 팝업 초기화 함수
  301. const initPopups = () => {
  302. // 각 팝업의 쿠키 상태를 확인하여 표시 여부 결정
  303. Object.keys(popupStates.value).forEach((popupId) => {
  304. if (getCookie(popupId) === "1") {
  305. popupStates.value[popupId] = false; // 쿠키가 있으면 숨김
  306. }
  307. // 쿠키가 없으면 초기값 유지
  308. });
  309. };
  310. // API에서 뉴스 데이터 가져오기 (최신 3개만)
  311. const fetchNewsList = async () => {
  312. try {
  313. const response = await $postForm(`/board_list/media`, {
  314. boardId: "news",
  315. page: 1,
  316. searchKind: "",
  317. searchKeyword: "",
  318. });
  319. if (response && response.success && response.list) {
  320. const newData = response.list.slice(0, 3).map((item, index) => {
  321. return {
  322. id: index + 1,
  323. title: item.title,
  324. date: item.regdate,
  325. link: item.etc1 || "#", // etc1 필드에 외부 링크 저장
  326. };
  327. });
  328. newsData.value = newData;
  329. } else {
  330. console.error("뉴스 데이터 로드 실패");
  331. }
  332. } catch (error) {
  333. console.error("뉴스 데이터 로드 중 오류:", error);
  334. }
  335. };
  336. // 표시할 뉴스 데이터 (최대 3개)
  337. const displayNews = computed(() => {
  338. return newsData.value.length > 0
  339. ? newsData.value
  340. : [
  341. {
  342. id: 1,
  343. title: "뉴스 데이터를 불러오는 중입니다...",
  344. date: "2025.01.01",
  345. link: "#",
  346. },
  347. ];
  348. });
  349. // 컴포넌트 마운트 시 데이터 로드 및 팝업 초기화
  350. onMounted(() => {
  351. fetchNewsList();
  352. initPopups();
  353. });
  354. </script>