CINXE.COM
Interclean2026 - 会邦 Matchexpo
<!DOCTYPE html> <html> <head> <title>Interclean2026 - 会邦 Matchexpo</title> <meta charset="utf-8"/> <meta http-equiv="Cache-Control" content="max-age=31536000"/> <meta http-equiv="Pragma" content="max-age=31536000"/> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" /> <!-- Meta Pixel Code --> <script> !function (f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1041230296873208'); fbq('track', 'PageView'); </script> <noscript> <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1041230296873208&ev=PageView&noscript=1" /> </noscript> <!-- End Meta Pixel Code --> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2834372922206562" crossorigin="anonymous"></script> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-B0EZSHLW6R"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-B0EZSHLW6R'); </script> <meta name="keywords" content=""/> <meta name="description" content="IntercleanThe world's leading trade show for cleaning and hygiene professionalsWhen: 14-17 April 2026Where: Amsterdam &nbsp; The NetherlandsThis May, Interclean Amsterdam returns with a combination of professional content, immersive experiences and exciting entertainment that you can't miss! Interclean is pushing boundaries! See you next time, from 14-17 April 2026, when Amsterdam will once again be the city of cleaning and hygiene.About InnovationInterclean Amsterdam is the professional cleaning and hygiene trade show, offering the most complete overview of innovative products and solutions as well as proven and evidence-based innovations from around the world.World-leading exhibitorsMeet the market leaders and game-changers in the industry. At Interclean Amsterdam, cleaning and hygiene professionals and exhibiting companies from all over the world come together to network.A Variety of ActivitiesLearn and be inspired by experts from around the world in drama classes on our three stages, live demonstrations in our outdoor demo area, the Robotics Arena, and more.Photos:"/> <meta property="og:image" content="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d815374a53.ico"/> <link rel="shortcut icon" href="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d815374a53.ico" type="image/x-icon"/> <script> var ai_chat_url = 'https://ai.starify.cn'; let screen_width = screen.availWidth let white_list = ['/live-stream', '/mobile', '/invite-', '/community', '/supply-demand', '/job', '/city-plan-form'] //过滤白名单-是否进入 /mobile let is_pass = true //是否通过白名单筛选 white_list.forEach(item => { if (location.pathname.indexOf(item) !== -1) { is_pass = false } }) resizeInitWindow() window.addEventListener('resize', () => { resizeInitWindow() }) function resizeInitWindow() { if (window.screen.availWidth < 992) { document.querySelector('html').style.fontSize = ((screen_width / 375) * 62.5) + '%' if (is_pass) { if ((location.pathname.indexOf('/expo') > -1 || location.pathname.indexOf('/news') > -1 || location.pathname.indexOf('/live') > -1 || location.pathname.indexOf('/homepage') > -1)) { //跳转到对应的移动端页面 location.href = '/mobile' + location.pathname } else { //没有相关页面关键词跳转到移动端首页 location.href = '/mobile/index' } } } else { document.querySelector('html').style.fontSize = ((screen_width / 1920) * 62.5) + '%' } } </script> <script src="/common/js-config?v=8.8"></script> <!-- 导入 Vue 3 --> <script src="/assets/lib/jquery-1.11.1.min.js"></script> <script src="/assets/lib/vue@next.js"></script> <script src="/assets/lib/vue-i18n.global.min.js"></script> <script src="/lang/i18n.js?v=8.8"></script> <script src="/lang/module/en-us.js?v=8.8"></script> <script src="/lang/module/en-us-all.min.js?v=8.8"></script> <script src="/assets/lib/axios.min.js"></script> <!-- 导入组件库 --> <script src="/assets/lib/element-plus.js"></script> <!-- 导入压缩js库 --> <script src="/assets/utils/utils-all.min.js?v=8.8"></script> <script src="/assets/chatgpt-icon/iconfont.js?v=8.8"></script> <link href="/assets/iconfont/iconfont.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/element/index-rem.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/community/recommendUser.css" rel="stylesheet" type="text/css"/> <link href="/assets/css/index.css" rel="stylesheet" type="text/css"/> <link href="/assets/css/index/all.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/chatgpt-icon/iconfont.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/layout/common.css?v=8.8" rel="stylesheet" type="text/css"/> <script src="/assets/lib/viewer.js"></script> <link href="/assets/css/expo/expoDetails.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/lib/viewer.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/detailsAboutInfo/detailsAboutInfo.css?v=8.8" rel="stylesheet" type="text/css"/> <link href="/assets/css/layout.css?v=8.8" rel="stylesheet" type="text/css"/> </head> <body data-lang="en-us" > <div id="loadingBox" class="loading_container"> <div class="boxes"> <div class="box"> <div></div> <div></div> <div></div> <div></div> </div> <div class="box"> <div></div> <div></div> <div></div> <div></div> </div> <div class="box"> <div></div> <div></div> <div></div> <div></div> </div> <div class="box"> <div></div> <div></div> <div></div> <div></div> </div> </div> </div> <div class="container_body"> <div class="head_container"> <div style=""> <div class="head" id="headBox" > <div class="head_logo aichat_logo" v-if="isAiChatBot"> <svg class="icon svg-icon" aria-hidden="true"> <use xlink:href="#icon-jiqi"></use> </svg> <span>星光GPT大师</span> </div> <a class="head_logo" href="/" v-else> <svg class="icon_en svg-icon" aria-hidden="true"> <use xlink:href="#ic_Matchpages"></use> </svg> </a> <div class="head_menu" style="display: none" > <div class="el-row"> <div class="el-col-3" > <a class="nav_item" href="/"> Home </a> </div> <div class="el-col-3" > <a class="nav_item" href="/news"> News </a> </div> <div class="el-col-5" > <a class="nav_item" href="/expo"> Events & Fairs </a> </div> <div class="el-col-4"> <a class="nav_item" href="/community/dynamic"> Community </a> </div> <div class="el-col-4"> <a class="nav_item" href="/courses"> Curriculum </a> </div> </div> </div> <div class="head_user" v-if="isAiChatBot"> <div class="head_item"> <a class="none_token" v-if="!$config.apiToken" @click="toRoute('/register')"> Register </a> <span class="none_token">{{ baseUserInfo.curr_enterprise_name }}</span> <div class="user_avatar_box"> <img :src="baseUserInfo.curr_enterprise_logo ? $config.ossDomain + baseUserInfo.curr_enterprise_logo : $config.defaultLogo"/> </div> </div> </div> <div class="head_user" v-cloak v-show="!isAiChatBot"> <div class="head_item"> <div class="el-input el-input--large el-input--prefix w-50 m-2"> <!-- input --><!-- prepend slot --><!--v-if--> <div class="el-input__wrapper"> <!-- prefix slot --> <span class="el-input__prefix" @click="toSearchPage()"> <span class="el-input__prefix-inner"> <i class="icon iconfont ic_search"></i> </span> </span> <input class="el-input__inner" type="text" autocomplete="off" id="head_search"> <!-- suffix slot --><!--v-if--> </div> <!-- append slot --><!--v-if--> </div> </div> <div class="head_item"> <el-dropdown> <div class="fast_box"> <span class="iconfont ic_publish1"></span> <span>Quick publish</span> </div> <template #dropdown> <el-dropdown-menu> <el-dropdown-item @click="toPublishRoute('/event/expo-plan')"> <div class="fast_box_item"> <img src="/assets/image/svg/ic_events.svg"> Launch Exhibition </div> </el-dropdown-item> <el-dropdown-item @click="toPublishRoute('/components/news')"> <div class="fast_box_item"> <img src="/assets/image/svg/ic_earth.svg"> Release information </div> </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> </div> <div class="head_item" @click="toNotification('/notification')"> <span class="iconfont ic_notice"></span> <i class="notice_point" v-if="notificationData && notificationData.all_count > 0"><span>{{ notificationData.all_count > 99 ? 99 : notificationData.all_count }}</span></i> </div> <div class="head_item"> <a class="none_token" id="loginBtn" v-if="!$config.apiToken" @click="toRoute('/login')"> Sign in </a> </div> <div class="head_item" style="margin-left:0" > <a class="none_token" v-if="!$config.apiToken" @click="toRoute('/register')"> Register </a> <mtp-user-dropdown @update-user-info="updateUserInfo" v-else> <div class="user_avatar_box"> <img :src="baseUserInfo.curr_enterprise_logo ? $config.ossDomain + baseUserInfo.curr_enterprise_logo : $config.defaultLogo"/> </div> </mtp-user-dropdown> </div> <div class="head_item" v-cloak> <el-popover placement="bottom" :width="250" trigger="hover"> <template #reference> <span class="el-dropdown-link language-dropdown" v-cloak> <span class="iconfont ic_language icon_language"></span> <span>{{ locale.label }}</span> </span> </template> <div class="website-lang"> <div v-for="(website, i) in languages" :key="'web-' + i"> <div class="title">{{ website.name }}</div> <div class="site-languages"> <div class="language" :class="(language.site == currSite && language.value == currLanguage) ? 'selected' : ''" v-for="(language, j) in website.list" :key="'opt-' + j" @click="handleLang(language)" v-cloak> {{ language.label }} </div> </div> </div> </div> </el-popover> </div> </div> <div class="login_dialog"> <el-dialog :append-to-body="true" v-model="LoginDialogVisible" width="52%"> <div> <login-right :success-url="successUrl" @closepopup="closepopup"></login-right> </div> </el-dialog> </div> <el-dialog custom-class="guide_dialog" v-model="showGuideDialog" append-to-body> <div v-if="guideInfo.guide_type === 'new_clue'"> <div class="module_title"> Congratulations </div> <div class="module_desc"> <p v-html="guideInfo.get"></p> </div> <div class="module_btn"> <div @click="routeTo('clue')">View Now</div> </div> </div> <div v-else> <div class="module_title"> Congratulations </div> <div class="module_image"> <img :src="guideInfo.img"> </div> <div class="module_desc"> <p v-html="guideInfo.get"></p> </div> <div class="module_tips"> <p v-html="'('+ guideInfo.source +')'"></p> </div> <div class="module_btn"> <div v-if="guideInfo.type" @click="routeTo(guideInfo.type)">Go publish</div> </div> </div> </el-dialog> </div> <script src="/assets/js/UserDropdown/UserDropdown.js"></script> <script> let head_box = initVue({ name:'headBox', data() { return { showGuideDialog: false, guideInfo: {}, baseUserInfo: {}, currSite: 'overseas', currLanguage: 'en-us', locale: { 'label': 'English', 'value': 'en-us' }, languages: this.$config.languages, locales: this.$config.locales, notificationData: {}, successUrl: '', LoginDialogVisible: false, isAiChatBot: false } }, methods: { initAichatbotType() { if(location.origin === ai_chat_url) { this.isAiChatBot = true } else { this.isAiChatBot = false } }, updateUserInfo(data) { this.baseUserInfo = data }, routeTo(type) { this.showGuideDialog = false if (type && type === 'news') { this.routeCenter('/components/news') return } if (type && type === 'expo') { this.routeCenter('/components/activity') return } if (type && type === 'Live') { this.routeCenter('/components/live') return } if (type && type === 'achievement') { window.open('/achievement') return } if (type && type === 'clue') { this.routeCenter('/clue/clue-list') return } }, routeCenter(path) { let apiToken = this.$config.apiToken if (apiToken) { var homeUrl = encodeURIComponent(path) let centerUrl = this.$config.publishDomain + '/#/auth-login/' + apiToken + '?redirect=' + homeUrl window.open(centerUrl, '_blank') } }, getGuidPerMissionData() { mtpRequest({ url: '/api/user/guide-permission', method: 'get', }).then(res => { this.guideInfo = res.data if (res.data.get) { this.showGuideDialog = true } }) let interval = setInterval(() => { if (!this.showGuideDialog) { clearInterval(interval) interval = null this.getGuidPerMissionData() } }, 10000) }, getNotificationData() { mtpRequest({ url: '/api/user/get-all-notification-data', method: 'get', }).then((res) => { if (res.ret === 0) { this.notificationData = res.data } }) }, handleLang(lang) { this.currSite = lang.site this.currLanguage = lang.value let url = this.$config.siteDomain[lang.site]+ '?lang=' + lang.value this.$i18n.setLocale(lang.value) location.href = url }, toNotification(url) { if (this.$config.apiToken) { window.open(url,'_blank') } else { this.LoginDialogVisible=true this.successUrl= url } }, toPublishRoute(url) { if (this.$config.apiToken) { var homeUrl = encodeURIComponent(url) let centerUrl = this.$config.publishDomain + '/#/auth-login/' + this.$config.apiToken + '?redirect=' + homeUrl window.open(centerUrl, '_blank') } else { this.LoginDialogVisible=true this.successUrl='reloadPage' } }, closepopup(){ this.LoginDialogVisible = false this.successUrl='' }, toSearchPage(param) { const url = new URL(window.location.href) let pathname = url.pathname let pathnameArr = pathname.split('/') pathname = pathnameArr[1] if (param) { window.open('/globalSearch?val='+param + '&from=' + pathname,'_self') } else { window.open('/globalSearch?from=' + pathname,'_self') } }, toRoute(url) { if (location.search) { let params = location.search.replace('?','&') window.open( url + '?redirect=' + location.pathname + params,'_self') } else { window.open( url + '?redirect=' + location.pathname,'_self') } }, }, created() { this.locales.forEach(v => { if (v.value === this.$i18n.getLocale()) { this.locale = v return false } }) this.initAichatbotType() }, mounted() { this.$nextTick(()=>{ showLoginDialog((res)=>{ if (res) { this.successUrl = res } else { this.successUrl = 'closeLoginPopup' } this.LoginDialogVisible = true }) if (this.$config.apiToken) { this.getNotificationData() this.getGuidPerMissionData() } else { this.$loading.completeLoading() } document.getElementById('head_search').addEventListener('keyup',(event)=>{ if (event.keyCode === 13) { let val = document.getElementById('head_search').value if (val) { this.toSearchPage(val) } else { this.toSearchPage() } } }) }) }, }, "#headBox",['loginRight','mtpUserDropdown']); </script> </div> </div> <div class="body_container " id="app"> <div class="navbar_left" style="display: " > <div id="nav_container"> <a class="chat_gpt_box" href="/aichatbot"> <span class="gpt_i"> <svg class="icon svg-icon" aria-hidden="true"> <use xlink:href="#icon-jiqi"></use> </svg> </span> <span v-if="$config.siteName === 'inside'" class="gpt_title">AI大师</span> <span v-else class="gpt_title">AI Master</span> <span class="icon_list"> <i class="iconfont ic_fire"></i> <i class="iconfont ic_fire"></i> <i class="iconfont ic_fire"></i> </span> </a> <div class="nav_container" > <div class="nav_list"> <a class="nav_item" :class="moduleName === 'index' ? 'active' : '' " href="/"> <div class="iconfont_tag"><span class="iconfont ic_home"></span></div> <span>Home</span> </a> <a class="nav_item" :class="moduleName === 'news' ? 'active' : '' " href="/news"> <div class="iconfont_tag"> <span class="iconfont ic_news"></span> </div> <span>News</span> </a> <a class="nav_item" :class="moduleName === 'expo' ? 'active' : '' " href="/expo"> <div class="iconfont_tag"> <span class="iconfont ic_events"></span> </div> <span>Events & Fairs</span> </a> <a class="nav_item" :class="moduleName === 'business-travel' ? 'active' : '' " href="/business-travel"> <div class="iconfont_tag"> <span class="iconfont ic_expert"></span> </div> <span>Business travel</span> </a> <a class="nav_item" :class="moduleName === 'supply-demand' ? 'active' : '' " href="/supply-demand"> <div class="iconfont_tag"> <span class="iconfont ic_FunnelPlotOutlined"></span> </div> <span>Supply & Demand</span> </a> <a class="nav_item" href="/community/dynamic"> <div class="iconfont_tag"> <span class="iconfont ic_Community"></span> </div> <span>Community</span> </a> <a class="nav_item" href="https://www.starify.cn/" target="_blank"> <div class="iconfont_tag"> <span class="iconfont ic_Starify"></span> </div> <span>Marketing tools</span> </a> <a v-show="seeMore" class="nav_item" :class="moduleName === 'special' ? 'active' : '' " href="/community/topics"> <div class="iconfont_tag"> <svg class="icon" aria-hidden="true"> <use xlink:href="#ic_ic_thematic"></use> </svg> </div> <span>Topics</span> </a> <a v-show="seeMore" class="nav_item" :class="moduleName === 'group' ? 'active' : '' " href="/community/group"> <div class="iconfont_tag"> <svg class="icon" aria-hidden="true"> <use xlink:href="#ic_ic_group"></use> </svg> </div> <span>Group</span> </a> <div v-show="!seeMore" class="nav_item see_more" @click="handleSeeMore"> <div class="iconfont_tag"> <span class="iconfont ic_down_line"></span> </div> <span>See more</span> </div> <div v-show="seeMore" class="nav_item see_more" @click="handleSeeMore"> <div class="iconfont_tag"> <span class="iconfont ic_up"></span> </div> <span>fold</span> </div> <div class="divide_box"></div> <a class="nav_item" @click="toPublishRoute('/homepage')"> <div class="iconfont_tag"> <span class="iconfont ic_publish1"></span> </div> <span>Publishing Center</span> </a> <div class="divide_box"></div> <a class="nav_item" :class="moduleName === 'achievement' ? 'active' : '' " @click="toRouteWeb('/achievement')"> <div class="iconfont_tag"><span class="iconfont ic_honor"></span></div> <span>Exhibition record</span> </a> <a class="nav_item" :class="moduleName === 'order' ? 'active' : '' " @click="toRouteWeb('/order')"> <div class="iconfont_tag"> <span class="iconfont ic_order"></span> </div> <span>My order</span> </a> <a class="nav_item" :class="moduleName === 'userCenter' ? 'active' : '' " @click="toRouteWeb('/userCenter')"> <div class="iconfont_tag"> <span class="iconfont ic_collect"></span> </div> <span>My collection</span> </a> <a class="nav_item" :class="moduleName === 'column' ? 'active' : '' " @click="toRouteWeb('/column')"> <div class="iconfont_tag"> <span class="iconfont ic_column"></span> </div> <span>Column setting</span> </a> </div> </div> <div class="nav_btn_list"> <a class="nav_btn_item" @click="toRouteWeb('/achievement?show_create=1','open')"> <span> <div class="ic_honor1 iconfont"></div> Add exhibition plan now </span> </a> <a class="nav_btn_item" @click="toRouteWeb('/achievement?show_create=2','open')"> <span> <div class="ic_h1 iconfont"></div> Add exhibition records at any time </span> </a> <a class="nav_btn_item" href="/city-plan-form"> <span> <div class="ic_h1 iconfont"></div> City Affiliate programme </span> </a> </div> <div class="nav_image_list"> <a v-if="$i18n.getLocale() ==='en-us'" href="https://www.starify.cn/" target="_blank"><img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0712/6690c31879f19.png" class="invited_img"></a> <a v-else-if="$i18n.getLocale() ==='zh-tw'" href="https://www.starify.cn/" target="_blank"><img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0712/6690c317f1df5.png" class="invited_img"></a> <a v-else href="https://www.starify.cn/" target="_blank"><img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0712/6690c3175d81b.png" class="invited_img"></a> </div> </div> <script> let nav_container = initVue({ name:'nav_container', data() { return { isHoverNavbar:false, moduleName:'index', seeMore: false } }, methods:{ handleSeeMore() { if (this.seeMore === false) { this.seeMore = true } else { this.seeMore = false } }, getUrlParam() { if (window.location.pathname) { if (window.location.pathname.indexOf('index') > -1 || window.location.pathname === '/') { this.moduleName = 'index' } else if (window.location.pathname.indexOf('news') > -1) { this.moduleName = 'news' } else if (window.location.pathname.indexOf('expo') > -1) { this.moduleName = 'expo' } else if (window.location.pathname.indexOf('live') > -1) { this.moduleName = 'live' } else if(window.location.pathname.indexOf('achievement') > -1) { this.moduleName = 'achievement' } else if(window.location.pathname.indexOf('order') > -1) { this.moduleName = 'order' } else if(window.location.pathname.indexOf('userCenter') > -1) { this.moduleName = 'userCenter' } else if(window.location.pathname.indexOf('media') > -1) { this.moduleName = 'media' } else if(window.location.pathname.indexOf('supply-demand') > -1) { this.moduleName = 'supply-demand' }else if(window.location.pathname.indexOf('courses') > -1) { this.moduleName = 'courses' } else if(window.location.pathname.indexOf('column') > -1) { this.moduleName = 'column' } else if(window.location.pathname.indexOf('meeting-with-expert') > -1) { this.moduleName = 'meeting-with-expert' }else if(window.location.pathname.indexOf('servicefinder') > -1) { this.moduleName = 'servicefinder' }else if(window.location.pathname.indexOf('business-travel') > -1) { this.moduleName = 'business-travel' }else if(window.location.pathname.indexOf('shop-store') > -1) { this.moduleName = 'shop-store' }else if(window.location.pathname.indexOf('company') > -1) { this.moduleName = 'company' } else { this.moduleName = 'other' } } }, toRouteWeb(url,type) { if (url === '/invitation') { window.open(url,'_blank') return false } if (this.$config.apiToken) { if (type) { window.open(url,'_blank') } else { window.location.href = url } } else { $('#headBox').trigger('loginDialog',url) } }, toPublishRoute(url) { var homeUrl = encodeURIComponent(url) if (this.$config.apiToken) { let centerUrl = this.$config.publishDomain + '/#/auth-login/' + this.$config.apiToken + '?redirect=' + homeUrl window.open(centerUrl, '_blank') } else { let centerUrl = this.$config.publishDomain + '/#/?redirect=' + homeUrl $('#headBox').trigger('loginDialog',centerUrl) } }, }, mounted() { this.$nextTick(()=>{ //更新token的val getUserEvent((res)=>{ if (res) { this.$config.apiToken = res this.$login.setToken(res) } }) }) this.getUrlParam() window.onscroll = ()=>{ if (window.scrollY > 0) { this.isHoverNavbar = true } else { this.isHoverNavbar = false } } } }, "#nav_container"); </script> </div> <div class="app_container"> <div style="display: none"> </div> <script> //推广code let spread_code = getUrlParam('spread_code') if (spread_code) { mtqCookie.set('spreadCode', spread_code,{ domain: '.' + masterDomain, path: '/' }) } ToMobileRouter() </script> <div class="expo_detail_container" id="expo_detail" data-expo-id="2993" v-loading="loading"> <div class="el-row" v-show="loadComplete"> <div class="el-col-18"> <div class="expo_body"> <div class="expo_main shadow_box"> <div class="expo_head"> <div class="head_process"><a href="/">Home</a> > <a href="/expo">Exhibition</a> > Interclean2026</div> </div> <div class="expo_main_content"> <div class="expo_title"> <div>Interclean2026</div> <div class="enjoy_list"> <span class="iconfont ic_Facebook" @click="shareUrl('facebook')"></span> <span class="iconfont ic_twitter" @click="shareUrl('twitter')"></span> <span class="iconfont ic_linkedin" @click="shareUrl('linkedin')"></span> <span class="iconfont ic_pinterest" @click="shareUrl('pinterest')"></span> <span class="iconfont ic_link" @click="shareUrl"></span> <span class="expo_collect" @click="collectionAct" :class="expoDetail.is_collection ? 'active' : ''"> <div class="iconfont ic_star"></div> </span> </div> </div> <div class="expo_info"><span class="iconfont ic_phone"></span>+31 20 549 1212</div> <div class="expo_info"> <span class="iconfont ic_clockC"></span> <span> Event time: 2026-04-14 ~ 2026-04-17 </span> <span style="padding-left: 30px"> Location:Netherlands.Amsterdam.Amsterdam </span> </div> <div class="expo_info"> <span class="iconfont ic_environ"></span>Detailed address: </div> <div class="expo_image"> <el-image :preview-src-list="['https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c8d805966.png']" src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c8d805966.png" onerror="this.src= '/assets/image/img_default.svg'"></el-image> <div class="activity_count_time"> <div class="clock" id="clock"> <div class="clock_title" v-show="expoDetail.active_status === 0"> The exhibition has been conducted: </div> <div class="clock_title" v-show="expoDetail.active_status === 1"> Distance from start time: </div> <div class="clock_title" v-show="expoDetail.active_status === 2"> The exhibition is over </div> <div> <div class="time_contain" v-if="expoDetail.active_status !== 2"> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="time_title">Day</div> <div style="margin-right: 10px"></div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="time_title">Time</div> <div style="margin-right: 10px"></div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="flip down"> <div class="digital front iconfont ic_n_0"></div> <div class="digital back iconfont ic_n_1"></div> </div> <div class="time_title">Branch</div> </div> <div class="time_contain" v-if="expoDetail.active_status === 2 && $i18n.getLocale() === 'en-us'"> {{ expoDetail.end_date.mouth }} {{ new Date(expoDetail.end_time).format('dd') }}, {{ expoDetail.end_date.year }} </div> <div class="time_contain" v-else-if="expoDetail.active_status === 2"> <div class="flip down" v-for="(item,index) in expoDetail.end_date.year" :key="index"> <div class="digital front iconfont" :class="'ic_n_' + item"></div> </div> <div class="time_title">Year</div> <div style="margin-right: 10px"></div> <div class="flip down" v-for="(item,index) in new Date(expoDetail.end_time).format('MM')" :key="index"> <div class="digital front iconfont" :class="'ic_n_' + item"></div> </div> <div class="time_title">Month</div> <div style="margin-right: 10px"></div> <div class="flip down" v-for="(item,index) in new Date(expoDetail.end_time).format('dd')" :key="index"> <div class="digital front iconfont" :class="'ic_n_' + item"></div> </div> <div class="time_title">Day</div> </div> </div> </div> </div> </div> <div class="expo_ticket_list" v-if="expoDetail.tickets && expoDetail.tickets[isActiveIndex]"> <div class="ticket_label">Event ticket type:</div> <div class="ticket_list_box"> <div class="ticket_list el-row"> <div class="el-col-6" v-for="(item,index) in expoDetail.tickets" @click="selectTicket(index)"> <div class="ticket_item" :class="index == isActiveIndex ? 'active' : ''" v-cloak> <div class="ticket_price" v-if="item['preferential_type'] == 1"> <span>{{ $i18n.numberFormat(item['preferential_discount']) }}</span> <span class="preferential_discount">({{ $i18n.numberFormat(item['price']) }})</span> </div> <div class="ticket_price" v-else-if="item['preferential_type'] == 2"> <span class="preferential_discount" v-show="item.preferential_num <= ticketAmount">{{ $i18n.numberFormat(item['preferential_discount']) }}</span> <span>{{ $i18n.numberFormat(item['price']) }}</span> </div> <div class="ticket_price" v-else> {{ $i18n.numberFormat(item['price']) }} </div> <div class="ticket_name">{{ item['name'] }}</div> </div> </div> </div> <div class="ticket_desc" v-cloak> {{ expoDetail['tickets'][isActiveIndex]['name'] }} - Explain: {{ expoDetail['tickets'][isActiveIndex]['description'] }} </div> </div> </div> </div> <div class="expo_main_option"> <div class="option_line_first"> <div class="ticket_amount" v-if="expoDetail['tickets'] && expoDetail['tickets'][isActiveIndex]"> <span class="ticket_amount_label">Number of tickets booked:</span> <el-input-number v-model="ticketAmount" :min="1" :max="expoDetail['tickets'][isActiveIndex]['tickets_left_count'] > 0 ? expoDetail['tickets'][isActiveIndex]['tickets_left_count'] : 99" @change="changeTicket"></el-input-number> <span v-if="expoDetail['tickets'][isActiveIndex] && expoDetail['tickets'][isActiveIndex]['is_limit'] == 1" v-cloak> {{ $t('activity.surplus',{num:expoDetail['tickets'][isActiveIndex]['tickets_left_count']}) }} </span> </div> <div class="expo_btn_list" v-if="expoDetail.tickets && expoDetail.tickets[isActiveIndex]"> <div class="expo_btn" v-if="expoDetail.is_booth_apply && ticketStatus !== 4 && ticketStatus !== 5" @click="applyStand"> Booth booking </div> <div v-if="ticketStatus === 0 || ticketStatus === 6" class="expo_btn" @click="applyExpo" :class="expoDetail.tickets[isActiveIndex].is_limit === 1 && expoDetail.tickets[isActiveIndex].tickets_left_count === 0 ? 'disabled_btn' : '' "> <span v-show="ticketStatus === 6">Sign up again</span> <span v-show="ticketStatus === 0"> Sign up now </span> </div> <div class="expo_btn" :class="ticketStatus === 3 && showOrder ? 'disabled_btn_hover' : 'disabled_btn'" @mouseover="showOrder = true" @mouseout="showOrder = false" v-if="ticketStatus === 1 || ticketStatus === 2 || ticketStatus === 3 || ticketStatus === 4 || ticketStatus === 5" v-cloak> <span v-if="ticketStatus === 1">{{ ticketStartTime }}</span> <span v-else-if="ticketStatus === 2">Registration is closed</span> <span v-else-if="ticketStatus === 3 && !showOrder">Registered</span> <span v-else-if="ticketStatus === 3 && showOrder" @click="openMyOrder('/order')">View order</span> <span v-else-if="ticketStatus === 4">Temporarily Closed</span> <span v-else-if="ticketStatus === 5">Registration is closed</span> </div> </div> </div> </div> </div> <div class="expo_desc"> <div class="expo_desc_head"> <span class="iconfont ic_schedule"></span> Exhibition details </div> <div class="expo_desc_box shadow_box"> <div class="expo_desc_body"> <p><span style="font-size: 24pt; color: #843fa1;"><strong>Interclean</strong></span></p> <p><strong><span style="font-size: 16pt;">The world's leading trade show for cleaning and hygiene professionals</span></strong></p> <p><span style="font-size: 16pt;"><strong>When: </strong>14-17 April 2026</span></p> <p><span style="font-size: 16pt;"><strong>Where:</strong> Amsterdam The Netherlands</span></p> <p><span style="font-size: 16pt;">This May, Interclean Amsterdam returns with a combination of professional content, immersive experiences and exciting entertainment that you can't miss! Interclean is pushing boundaries! See you next time, from 14-17 April 2026, when Amsterdam will once again be the city of cleaning and hygiene.</span></p> <p><strong><span style="font-size: 16pt;">About Innovation</span></strong></p> <p><span style="font-size: 16pt;">Interclean Amsterdam is the professional cleaning and hygiene trade show, offering the most complete overview of innovative products and solutions as well as proven and evidence-based innovations from around the world.</span></p> <p><strong><span style="font-size: 16pt;">World-leading exhibitors</span></strong></p> <p><span style="font-size: 16pt;">Meet the market leaders and game-changers in the industry. At Interclean Amsterdam, cleaning and hygiene professionals and exhibiting companies from all over the world come together to network.</span></p> <p><strong><span style="font-size: 16pt;">A Variety of Activities</span></strong></p> <p><span style="font-size: 16pt;">Learn and be inspired by experts from around the world in drama classes on our three stages, live demonstrations in our outdoor demo area, the Robotics Arena, and more.</span></p> <div class="entry-content"> <div class="entry-content"> <div class="entry-content"> <p><strong><span style="font-size: 16pt;"><img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c3c9d8c5c.png" alt="微信图片_20240806143340.png " /></span></strong></p> <p><strong><span style="font-size: 16pt;">Photos:</span></strong></p> <p><span style="font-size: 16pt;"><img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c44d220c4.webp" alt="innovations-720x400.webp " width="1000" /></span></p> <p><span style="font-size: 16pt;"><img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c44c74525.webp" alt="exhibitors-720x400.webp " width="1000" /></span></p> <p><span style="font-size: 16pt;"><img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c4975251d.png" alt="programme-720x400.webp " width="1000" /></span></p> </div> </div> </div> <div class="author_status"> </div> <div class="detail_footer"> <el-dropdown> <div class="enjoy_btn"> <span class="iconfont ic_Share"></span> <span>Share</span> </div> <template #dropdown> <el-dropdown-menu> <el-dropdown-item @click="shareUrl('facebook')"> Share to Facebook </el-dropdown-item> <el-dropdown-item @click="shareUrl('twitter')"> Share to twitter </el-dropdown-item> <el-dropdown-item @click="shareUrl('linkedin')"> Share to LinkedIn </el-dropdown-item> <el-dropdown-item @click="shareUrl('pinterest')"> Share to pinterest </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> <div class="collection_btn" @click="collectionAct()"> <span class="iconfont ic_star" v-if="expoDetail.is_collection"></span> <span class="iconfont ic_starL" v-else></span> <span v-cloak>Collection{{ expoDetail.collections > 0 ? expoDetail.collections : '' }}</span> </div> <div class="collection_btn" style="margin-left: 30px" v-show="!expoDetail.is_thumbs_up" @click="isExpoThumbsUP(expoDetail)"><i class="iconfont ic_like"></i>Give the thumbs-up</div> <div class="collection_btn" style="margin-left: 30px" v-show="expoDetail.is_thumbs_up" @click="isExpoThumbsUP(expoDetail)"><i class="iconfont ic_likeC"></i>Liked</div> </div> </div> <div class="refund_contain" v-show="expoDetail.refund_tip"> <div class="refund_title"> <svg class="icon svg-icon" aria-hidden="true"> <use xlink:href="#ic_warning"></use> </svg> Refund instructions </div> <div class="refund_desc" v-cloak>{{ expoDetail.refund_tip }}</div> </div> </div> </div> <div class="expo_desc"> <div class="refund_contain shadow_box"> <div class="refund_title"> Warm reminder </div> <div class="refund_desc"> The title, price, details and other information of the goods/services displayed on the Matchexpo platform (including website, client, etc.) are provided by the actual service provider. If users have any questions about the title, price, details and other information of goods/services, they can directly communicate with the service provider for confirmation; For other questions, please refer to the council official </div> </div> </div> <div class="expo_desc"> </div> <div> <div style="display: none"> 0 </div> <div class="ad_container ad_container_0"> <div class="ad_list details_bottom base_ad owl-carousel"> </div> </div> </div> <div class="expo_desc"> <div id="activity_exhibitor" v-loading="activityExhibitorListLoading"> <div class="expo_desc_head"> <span class="iconfont ic_schedule"></span> Exhibitor List </div> <div class="activity_exhibitor_container shadow_box" data-page="1" data-total="100"> <div class="activity_exhibitor_index"> <div class="activity_exhibitor_list"> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/centralcarta.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_0"> <span>Centralcarta</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/centralcarta.html" target="_blank" class="exhibitor_name"> Centralcarta <div class="iti__flag iti__it"></div> </a> <div class="describe"><div class="shortdescription"> <br> AFH Tissue paper producer <br><br> </div> <div> Founded in 1990, Centralcarta is an integrated tissue company which has been operating as a producer of a complete range of disposable tissue and nonwoven products, both in the Away-from-Home, HO.RE.CA. and consumer market. <br>Centralcarta's products are studied to meet even the most complex and specific requirement. <br><br> </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>10.304</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/casa-kiriko-sl.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_1"> <span>CASA KIRIKO SL</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/casa-kiriko-sl.html" target="_blank" class="exhibitor_name"> CASA KIRIKO SL <div class="iti__flag iti__es"></div> </a> <div class="describe"><div class="shortdescription"> <br> CLEANING SOLUTIONS MANUFACTURER <br><br> </div> <div> Casa Kiriko, a company with 60 years of experience, specialists in the manufacturing of liquid detergents, household cleaning and Cosmetics. We offer a comprehensive quality solution, environmental and best practices certification for the development, production and clean room for the production of cosmetic products (gel, shampoo and hand soap). Domestic, professional and industrial lines, Kiriko and Unik Professional with more than 130 references in total. Moreover, we can customize products, not only Priv </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>13.506</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/cartindustria-eurocarta-s-r-l.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_2"> <span>Cartindustria Eurocarta S.r.l.</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/cartindustria-eurocarta-s-r-l.html" target="_blank" class="exhibitor_name"> Cartindustria Eurocarta S.r.l. <div class="iti__flag iti__it"></div> </a> <div class="describe"><div class="shortdescription"> <br> Tissue Converting Company <br><br> </div> <div> With an over 40years production experience, we work on providing the best solutions for the A.F.H. market: from pure pulp products through mixed qualities, up to the ecological ones. Cartindustria Eurocarta's products range includes V,Z,W fold Handtowels, industrial wipers, medical rolls and toilet papers. </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>12.601</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/cartiere-carrara.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_3"> <span>Cartiere Carrara</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/cartiere-carrara.html" target="_blank" class="exhibitor_name"> Cartiere Carrara <div class="iti__flag iti__it"></div> </a> <div class="describe"><div class="shortdescription"> <br> Tissue Producer specilized in AfH products <br><br> </div> <div></div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>10.303</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/carpet-cleaner-industries-cci-gmbh.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_4"> <span>Carpet Cleaner Industries CCI GmbH</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/carpet-cleaner-industries-cci-gmbh.html" target="_blank" class="exhibitor_name"> Carpet Cleaner Industries CCI GmbH <div class="iti__flag iti__at"></div> </a> <div class="describe"><div class="shortdescription"> <br> Carpet Cleaner <br><br> </div> <div> Carpet Cleaner Industries CCI GmbH is a family business with tradition: founded 1990 by Erwin Ladinig, today the company is European leader in the production of systems for ecological cleaning of textile surfaces, machines and cleanser. The heart is a special dry cleaning compound for carpets which consist of 99 % organic, natural raw material. With the unique Carpet Cleaner System only soiled areas must be cleaned and so money, time and lots of water can be saved. </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>03.113</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/carod-sl.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_5"> <span>CAROD SL</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/carod-sl.html" target="_blank" class="exhibitor_name"> CAROD SL <div class="iti__flag iti__es"></div> </a> <div class="describe"><div class="shortdescription"> <br> Machinery manufacturer <br><br> </div> <div> Manufacturer of professional cleaning machines, industrial applications of engines, power generation and motor pumps </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>05.426</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/cappah-international.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_6"> <span>Cappah International</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/cappah-international.html" target="_blank" class="exhibitor_name"> Cappah International <div class="iti__flag iti__nl"></div> </a> <div class="describe"><div class="shortdescription"> <br> Quality Cleaning Products Manufacturer <br><br> </div> <div> Cappah - a major brand name in Europe for supplying Kentucky Mops, Dust Mops, Wet Mops, Bonnet Pads and other cleaning products. Since from it's inception in 1994, customers have chosen CAPPAH for quality dust control and cleaning supplies at right price. </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>05.310</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/cangnan-shengfeng-cotton-products-co-ltd.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_0"> <span>CANGNAN SHENGFENG COTTON PRODUCTS CO.,LTD</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/cangnan-shengfeng-cotton-products-co-ltd.html" target="_blank" class="exhibitor_name"> CANGNAN SHENGFENG COTTON PRODUCTS CO.,LTD <div class="iti__flag iti__cn"></div> </a> <div class="describe"><div class="shortdescription"> <br> Professional mop manufacturer <br><br> </div> <div> Shengfeng was founded in 1998,and has been engaged in manufacturing and exporting various mops, mop heads, yarns, etc. for more than 20 years. Our products are widely used for hotel, community cleaning, waiting room, stadium all such large public places,as well as for household cleaning. <br>With more than 20 years of combined experience in manufacturing and exporting cleaning products, we are committed to give you fast service, good price,and high quality for operating your business well. </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>05.529</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/calvatis-gmbh.html" target="_blank" class="exhibitor_logo bg_w"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0814/66bc49a4c3e75.png" /> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/calvatis-gmbh.html" target="_blank" class="exhibitor_name"> Calvatis GmbH </a> <div class="describe"><p class="MuiTypography-root MuiTypography-body1 text-editor-left">Calvatis GmbH is a worldwide leading private owned manufacturer of detergents and disinfectants designed for industrial applications. We offer our business partners individual and high-quality onestop hygiene concepts. Our well known calgonit-branded product portfolio is worldwide marketed since 1929. Across the years the name „calgonit“ has anchored in the mind of people and is associated like no other brand with cleanliness and hygiene.</p> <p class="MuiTypography-root MuiTypography-body1 text-editor-left">Our main business segments are global Hygiene Consulting and Management for the Beverage, Food and Milk processing industry, Agriculture, Catering</p> <p class="MuiTypography-root MuiTypography-body1 text-editor-left">as well as Cleaning Services, Water Treatment, Equipment and Plant Engineering.</p> <p class="MuiTypography-root MuiTypography-body1 text-editor-left">Our exceptional high degree of specialisation sets Calvatis Group apart from other competitors enabling us to submit each client a perfectly tailored</p> <p class="MuiTypography-root MuiTypography-body1 text-editor-left">solution covering a customised, well concerted mix of chemicals, engineering and services.</p> <p class="MuiTypography-root MuiTypography-body1 text-editor-left">Innovative product development, creative engineering, efficiency and sustainability are the major focus of our business.</p></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>07.311B</div> <div class="action_box"> </div> </div> </div> </div> </div> <div class="activity_exhibitor_item"> <div class="activity_exhibitor_item_main"> <div class="item_header"> <a href="https://matchexpo.com/company/caddy-clean-scandinavia-ab.html" target="_blank" class="exhibitor_logo bg_w"> <div class="exhibitor_logo bg_2"> <span>Caddy Clean Scandinavia AB</span> </div> </a> <div class="exhibitor_name_box"> <a href="https://matchexpo.com/company/caddy-clean-scandinavia-ab.html" target="_blank" class="exhibitor_name"> Caddy Clean Scandinavia AB <div class="iti__flag iti__se"></div> </a> <div class="describe"><div class="shortdescription"> <br><br><br> </div> <div> Manufacturer of the batteryoperated scrubbing machine Caddy Clean. </div></div> <div class="booth_number"><i class="iconfont ic_Vector"></i>02.403</div> <div class="action_box"> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div v-if="activityExhibitorListParams.total > 0" class="page_list" id="activity_exhibitor_page"> <el-pagination background layout="prev, pager, next" :total="activityExhibitorListParams.total" :current-page="activityExhibitorListParams.page" @current-change="getActivityExhibitorListData" :page-size="10"/> </div> <div v-else> <div class="el-empty" style="width: 100%; display: none" v-show="emptyIndex"> <div class="el-empty__image" style="width: 120px; height: 120px"><image src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d815e9f218.png"></image> </div> <div class="el-empty__bottom">No results found</div> <div class="el-empty__description"> <p>Try another keyword?</p> </div> </div> </div> <el-dialog v-model="exhibitorForm.visible" :title="exhibitorForm.title" width="40%" center="true"> <el-form ref="exhibitorForm" :model="exhibitorForm.form" :rules="exhibitorForm.rules" class="submit_form" label-position="top"> <el-row class="form_row"> <el-col :span="11"> <el-form-item label="Full name" prop="user_name" required> <el-input v-model="exhibitorForm.form.user_name" placeholder="Please enter your name"></el-input> </el-form-item> </el-col> <el-col :span="11"> <el-form-item label="Corporate name" prop="company_name"> <el-input v-model="exhibitorForm.form.company_name" placeholder="Please enter your company name"></el-input> </el-form-item> </el-col> <el-col :span="11" :xs="24"> <el-form-item class="get_phone_item" label="Cell-phone number" prop="phone" required> <el-input v-model="exhibitorForm.form.phone" placeholder="Please enter your mobile number"></el-input> </el-form-item> </el-col> <el-col :span="11" :xs="24"> <el-form-item class="phone_box" prop="valid_code" label="Verification Code"> <el-input v-model="exhibitorForm.form.valid_code" placeholder="Please enter the verification code"></el-input> <span class="get_qrcode_btn" @click="getValidCode" v-show="!verificationShow"> Get verification code</span> <span class="get_qrcode_btn count_time" v-show="verificationShow">{{ time_count }}</span> </el-form-item> </el-col> </el-row> <el-row class="form_row"> <el-col :span="11"> <el-form-item label="Company email" prop="company_email" required> <el-input v-model="exhibitorForm.form.company_email" placeholder="Please enter your company email address"></el-input> </el-form-item> </el-col> <el-col :span="11"> <el-form-item label="Company size " prop="company_size"> <el-select v-model="exhibitorForm.form.company_size" placeholder="Please enter the size of your company"> <el-option :value="1" label="1-10 people"></el-option> <el-option :value="2" label="11-50 people"></el-option> <el-option :value="3" label="51-100 people"></el-option> <el-option :value="4" label="101-1000 people"></el-option> <el-option :value="5" label="1000+ people"></el-option> </el-select> </el-form-item> </el-col> </el-row> <el-row class="form_row"> <el-col :span="24"> <el-form-item label="City" prop="address"> <el-input v-model="exhibitorForm.form.address" placeholder="Please enter your city"></el-input> </el-form-item> </el-col> </el-row> <el-col :span="24"> <el-form-item lprop="company_introduce" label="Company introduction"> <el-input type="textarea" :rows="3" v-model="exhibitorForm.form.company_introduce" placeholder="Current main business, past products, industries, types, quantities, etc. covered by customer resources"></el-input> </el-form-item> </el-col> <el-col :span="24"> <el-form-item prop="company_type"> <el-radio v-model="exhibitorForm.form.company_type" :label="1">Selling products and services</el-radio> <el-radio v-model="exhibitorForm.form.company_type" :label="2">Supply and demand products and services</el-radio> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="Please fill in your detailed requirements" prop="content"> <el-input type="textarea" :rows="3" v-model="exhibitorForm.form.content" placeholder="What products/services do you need to sell or purchase, product service introductions, etc"></el-input> </el-form-item> </el-col> </el-form> <template #footer> <span class="dialog-footer"> <el-button type="primary" @click="saveExhibitorForm" size="large">Contact exhibitors</el-button> </span> </template> </el-dialog> </div> <div> <div style="display: none"> 0 </div> <div class="ad_container ad_container_0"> </div> </div> <mtp-comment :comment-option="commentOption"></mtp-comment> <div class="expo_desc"> </div> <div class="expo_desc"> <div class="expo_desc_head"> <img lazyload="true" data-original="/assets/image/svg/ic_heart.svg"> Pages you might like </div> <div class="lick_about_homepage"> <a class="homepage_item" href="https://www.matchexpo.com/page/pg633fdea7964d8.html" target="_blank"> <div class="homepage_logo"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/hbr_uploads/143051ba97b06a95aeb325ca71dffdd2.jpg"> </div> <div class="homepage_title"> Haier </div> <div class="homepage_desc"> </div> </a> <a class="homepage_item" href="https://www.matchexpo.com/page/pg633fdea78ec0d.html" target="_blank"> <div class="homepage_logo"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2021/1214/61b7fc8c6b416.jpg"> </div> <div class="homepage_title"> Retail Channel </div> <div class="homepage_desc"> </div> </a> <a class="homepage_item" href="https://www.matchexpo.com/page/pg633fdea7c57d4.html" target="_blank"> <div class="homepage_logo"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/hbr_uploads/8c1160a49dafb31efbe165bc9abca46b.jpg"> </div> <div class="homepage_title"> Rum21 </div> <div class="homepage_desc"> </div> </a> <a class="homepage_item" href="https://www.matchexpo.com/page/fespa-mexico.html" target="_blank"> <div class="homepage_logo"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/0604/647c305cce8e4.jpg"> </div> <div class="homepage_title"> FESPA Mexico </div> <div class="homepage_desc"> An unparalleled celebration where professionals from the printing industry will be able to meet with colleagues and exhibitors to find new approaches in large format digital printing, textile printing, screen printing, sublimation, garment decoration and signage. </div> </a> </div> </div> <div class="expo_desc"> <div class="expo_desc_head"> <img lazyload="true" data-original="/assets/image/svg/ic_topic.svg"> Today's topic </div> <div class="topic_today_list"> <a class="topic_item" href="https://www.matchexpo.com/news/CHINAPLAS-2022-国际橡塑展:巴斯夫智造新未来.html" target="_blank"> <div class="topic_image"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0221/621356a30d596.jpg"> </div> <div class="topic_info"> <div class="topic_title"> CHINAPLAS 2022 国际橡塑展:巴斯夫智造新未来 </div> <div class="topic_option"> <div class="topic_time"> 2 Last year </div> <div class="topic_data"> <div><i class="iconfont ic_view"></i>7,93</div> <div><i class="iconfont ic_like"></i>393</div> <div><i class="iconfont ic_mes"></i>1</div> </div> </div> </div> </a> <a class="topic_item" href="https://www.matchexpo.com/news/百事公司再捐100万美元,助力乡村儿童营养健康.html" target="_blank"> <div class="topic_image"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2021/1210/61b31ba5799d1.jpg"> </div> <div class="topic_info"> <div class="topic_title"> 百事公司再捐100万美元,助力乡村儿童营养健康 </div> <div class="topic_option"> <div class="topic_time"> 3 Last year </div> <div class="topic_data"> <div><i class="iconfont ic_view"></i>3,686</div> <div><i class="iconfont ic_like"></i>109</div> <div><i class="iconfont ic_mes"></i>1</div> </div> </div> </div> </a> <a class="topic_item" href="https://www.matchexpo.com/news/pg633fdea4e410f.html" target="_blank"> <div class="topic_image"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2021/1216/61bab59189772.jpg"> </div> <div class="topic_info"> <div class="topic_title"> 万物互联2021——智慧人居场景应用高峰论坛圆满落幕 </div> <div class="topic_option"> <div class="topic_time"> 2 Last year </div> <div class="topic_data"> <div><i class="iconfont ic_view"></i>1,29</div> <div><i class="iconfont ic_like"></i>35</div> <div><i class="iconfont ic_mes"></i>0</div> </div> </div> </div> </a> </div> </div> <div class="expo_desc"> <div style="display: none"> 0 </div> <div class="ad_container ad_container_0"> </div> </div> </div> </div> <div class="el-col-6" style="display: flex;justify-content: center"> <div class="blog_list_container"> <div class="news_author_box"> <div class="author"> <a class="author_image" href="https://matchexpo.com/page/interclean.html"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c6ead3715.png" onerror="this.src= 'https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2021/1221/61c174a200a51.png'"> </a> <div class="author_info"> <a class="author_name" href="https://matchexpo.com/page/interclean.html">Interclean</a> </div> </div> <div class="author_option_status"> <div class="author_status"> <div class="authentication_tag enterprise"> <svg class="icon" aria-hidden="true"> <use xlink:href="#ic_businessV"></use> </svg> <span>Enterprise</span> </div> </div> <div class="author_option" v-if="expoDetail.sponsor && baseUserInfo && 11819 !== baseUserInfo.curr_enterprise_id"> <div class="option_btn" v-if="expoDetail.sponsor.is_account_concern" class="isfollow" @click.stop="enterpriseOptData(1,11819,1000138)"> Followed </div> <div class="option_btn" class="follow" v-else @click.stop="enterpriseOptData(0,11819,1000138)"> Follow </div> </div> </div> <div class="recently"> <div class="recently_head"><span></span> Recent content </div> <div class="recently_body"> <div class="recently_list"> <a class="recently_item" href="https://www.matchexpo.com/expo/interclean-shanghai-2024.html" target="_self"> <div class="recently_title">Interclean Shanghai 2024</div> <div class="recently_date">Just</div> </a> </div> </div> </div> </div> <div style="display: none"> 0 </div> <div class="ad_container ad_container_0"> </div> <div class="user_recommend_box" id="user_recommend"> <div class="group_title user_title"> <div> <i class="iconfont ic_other"></i> <span>People who may be interested</span> </div> <div class="hot_search_option" @click="$friend.getRecommendUserList()"><span class="iconfont ic_sync"></span>Change it</div> </div> <div id="hot_tag_box"> <div class="module_list" data-last-page="1675" style="display: flex;flex-direction: column"> <div class="module_item" data-id="1021406" data-current-page="1"> <div class="module_avatar"> <span>用</span> </div> <div class="group_title user_title"> <div> <div class="user_name">用*4</div> </div> <div class="user_company"> </div> </div> <div> <div class="user_friend_btn" data-user-id="1021406" data-friend-applying="0" data-action="0"> <div class="add_friend" > + Friends </div> <div class="cancel_friend" style="display: none;" > <i class="ic_check iconfont"></i> Requested </div> </div> </div> </div> <div class="module_item" data-id="1021401" data-current-page="1"> <div class="module_avatar"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0912/66e2b36e87a09.jpeg"/> </div> <div class="group_title user_title"> <div> <div class="user_name">株*社</div> </div> <div class="user_company">株式会社 海事プレス社 </div> </div> <div> <div class="user_friend_btn" data-user-id="1021401" data-friend-applying="0" data-action="0"> <div class="add_friend" > + Friends </div> <div class="cancel_friend" style="display: none;" > <i class="ic_check iconfont"></i> Requested </div> </div> </div> </div> <div class="module_item" data-id="1021400" data-current-page="1"> <div class="module_avatar"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0912/66e2b36aeaf22.jpeg"/> </div> <div class="group_title user_title"> <div> <div class="user_name">株*社</div> </div> <div class="user_company">株式会社 日本海事新聞社 </div> </div> <div> <div class="user_friend_btn" data-user-id="1021400" data-friend-applying="0" data-action="0"> <div class="add_friend" > + Friends </div> <div class="cancel_friend" style="display: none;" > <i class="ic_check iconfont"></i> Requested </div> </div> </div> </div> <div class="module_item" data-id="1021399" data-current-page="1"> <div class="module_avatar"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0912/66e2b36797c7b.jpeg"/> </div> <div class="group_title user_title"> <div> <div class="user_name">有*業</div> </div> <div class="user_company">有限会社 有田牧畜産業 </div> </div> <div> <div class="user_friend_btn" data-user-id="1021399" data-friend-applying="0" data-action="0"> <div class="add_friend" > + Friends </div> <div class="cancel_friend" style="display: none;" > <i class="ic_check iconfont"></i> Requested </div> </div> </div> </div> <div class="module_item" data-id="1021398" data-current-page="1"> <div class="module_avatar"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0912/66e2b3626d25e.jpeg"/> </div> <div class="group_title user_title"> <div> <div class="user_name">J*e</div> </div> <div class="user_company">Ji Pu Tea House </div> </div> <div> <div class="user_friend_btn" data-user-id="1021398" data-friend-applying="0" data-action="0"> <div class="add_friend" > + Friends </div> <div class="cancel_friend" style="display: none;" > <i class="ic_check iconfont"></i> Requested </div> </div> </div> </div> </div> </div> </div> <div class="hot_news_list"> <div class="hot_news_head"> <img src="" lazyload="true" data-original="/assets/image/svg/ic_gobal.svg"> <span>Exhibitions you may be interested in</span> </div> <div class="hot_news_body"> <div class="nav_blog_list"> <a class="blog_item" href="https://www.matchexpo.com/expo/interclean2026.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0806/66b1c8d805966.png"> </div> <div class="blog_info"> <div class="blog_title">Interclean2026</div> <div class="blog_desc"> </div> </div> </a> <a class="blog_item" href="https://www.matchexpo.com/expo/interclean-shanghai-2024.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2024/0809/66b5b25c53f37.png"> </div> <div class="blog_info"> <div class="blog_title">Interclean Shanghai 2024</div> <div class="blog_desc"> </div> </div> </a> </div> </div> </div> <div class="hot_news_list"> <div class="hot_news_head"> <img src="" lazyload="true" data-original="/assets/image/svg/ic_new.svg"> <span>Latest information</span> </div> <div class="hot_news_body"> <div class="nav_blog_list"> <a class="blog_item" href="https://www.matchexpo.com/news/central-alliance-carries-out-orkney-ground-investigation.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/1225/6588fde5dc1b9.png"> </div> <div class="blog_info"> <div class="blog_title">Central Alliance carries out Orkney ground investigation</div> <div class="blog_desc"> </div> </div> </a> <a class="blog_item" href="https://www.matchexpo.com/news/kansai-joins-floating-offshore-wind-project-in-norway.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/1225/6588fdbb4a334.png"> </div> <div class="blog_info"> <div class="blog_title">Kansai joins floating offshore wind project in Norway</div> <div class="blog_desc"> </div> </div> </a> <a class="blog_item" href="https://www.matchexpo.com/news/alerion-agrees-35-mw-wind-project-in-wales.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/1225/6588fd4d7c367.png"> </div> <div class="blog_info"> <div class="blog_title">Alerion agrees 35 MW wind project in Wales</div> <div class="blog_desc"> </div> </div> </a> <a class="blog_item" href="https://www.matchexpo.com/news/havfram-wind-signs-contract-with-rwe-for-nordseecluster-offshore-wind-projects.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/1225/6588fc63be638.jpg"> </div> <div class="blog_info"> <div class="blog_title">Havfram Wind signs contract with RWE for Nordseecluster offshore wind projects</div> <div class="blog_desc"> </div> </div> </a> <a class="blog_item" href="https://www.matchexpo.com/news/dla-piper-advises-on-sale-of-nys-ter-wind-farm-cluster.html" target="_self"> <div class="blog_image"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2023/1225/6588fa728d295.png"> </div> <div class="blog_info"> <div class="blog_title">DLA Piper advises on sale of Nysäter wind farm cluster</div> <div class="blog_desc"> </div> </div> </a> </div> </div> </div> <div style="display: none"> 0 </div> <div class="ad_container ad_container_0"> </div> </div> </div> <el-dialog v-model="shareWechat" title="Wechat sharing" width="20%"> <div class="qrcode_we" ref="qrcode_we2"></div> </el-dialog> </div> <div class="login_dialog"> <el-dialog :append-to-body="true" v-model="LoginDialogVisible" width="52%" > <div> <login-right :success-url="successUrl" @closepopup="closepopup"></login-right> </div> </el-dialog> </div> </div> </div> <div class="navbar_right" style="display: " > <div class="right_navbar_container" id="right_navbar_container"> <div class="navbar_list"> <el-popover popper-class="right_nav_item" placement="left" :width="100" trigger="click"> <template #reference> <div class="navbar_item"> <el-tooltip class="item" effect="dark" placement="left-start"> <template #content>Matchexporen service number, scan it</template> <span class="iconfont ic_servise"></span> </el-tooltip> </div> </template> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d815ddd9af.png" src=""> <span style="color: var(--font-color-third); font-size: 12px; display: block; text-align: center">Matchexporen service number, scan it</span> </el-popover> <el-popover popper-class="right_nav_item" placement="left" :width="100" trigger="click"> <template #reference> <div class="navbar_item"> <el-tooltip class="item" effect="dark" placement="left-start"> <template #content>Global exhibition registration: add official account</template> <span class="iconfont ic_Qrcode"></span> </el-tooltip> </div> </template> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d8161532ac.png" src=""> <span style="color: var(--font-color-third); font-size: 12px; display: block; text-align: center">Global exhibition registration: add official account</span> </el-popover> <div class="navbar_item" @click="showFeedback"> <el-tooltip class="item" effect="dark" content="If you find any problems, please let us know." placement="left-start"> <span class="iconfont ic_opinion"></span> </el-tooltip> </div> <div class="navbar_item" @click="scrollToTop"> <span class="iconfont ic_top"></span> </div> </div> <div class="feedback_dialog"> <el-dialog :append-to-body="true" v-model="dialogVisible" title="Feedback" width="40%" > <div class="feedback_dialog_line"> <el-form ref="feedback" :model="feedback" :rules="feedbackRules" label-width="180px"> <el-form-item label="User:"> <el-input v-model="feedback.user_name" :maxlength="50" show-word-limit placeholder="Please enter your name"> </el-input> </el-form-item> <el-form-item label="Corporate name:"> <el-input v-model="feedback.company_name" :maxlength="100" show-word-limit placeholder="Please enter your company name"> </el-input> </el-form-item> <el-form-item label="Email:" prop="email" required> <el-input v-model="feedback.email" placeholder="Please enter your email address"> </el-input> </el-form-item> <el-form-item label="Description:" prop="content" required> <el-input v-model="feedback.content" :rows="4" :maxlength="240" show-word-limit type="textarea" placeholder="Please enter your suggestion"> </el-input> </el-form-item> <el-form-item labe="Image" prop="pic"> <el-upload :class="{disabled:isFeedbackPicMax}" :action="img_upload_url" :headers="upload_params" list-type="picture-card" multiple :limit="3" :on-success="handleSuccess" :before-upload="beforeAvatarUpload" :on-remove="handleRemove" :on-change="handleChange"> <div class="el-upload__text">Upload screenshot</div> </el-upload> </el-form-item> </el-form> </div> <template #footer> <span class="dialog-footer"> <el-button @click="dialogVisible = false" round>Cancel</el-button> <el-button type="primary" @click="submitFeedback()" v-loading="saveLoading" round>Submit</el-button> </span> </template> </el-dialog> </div> </div> <script> let right_navbar_container = initVue({ name:'right_navbar_container', data() { const valiEmail = (rule, value, callback) => { // 邮箱验证 if (!isEmail(value)) { callback(new Error('The email format is incorrect. Please enter the correct email')) } else { callback() } } return { isFeedbackPicMax: false, dialogVisible:false, feedbackPicDialogVisible:false, feedbackValue:'', saveLoading:false, img_upload_url: this.$config.uploadUrl, upload_params: { 'api-token': this.$config.apiToken, }, dialogImageUrl: '', feedback: { content: '', user_name: '', company_name: '', email: '', pic: [] }, feedbackRules :{ content: [ { required: true, message: 'Please enter your suggestion', trigger: 'blur', }, ], email: [ { required: true, message: 'Please enter your email address', trigger: 'blur', }, { validator: valiEmail, trigger: ['blur', 'change'], }, ] }, baseUserInfo: {}, } }, methods:{ scrollToTop() { window.scrollTo(0,1000) }, submitFeedback() { this.$refs.feedback.validate(valid => { if (valid) { let params = this.feedback this.saveLoading = true mtpRequest({ url:'/api/user/feedback', method: 'post', data:params }).then(res=>{ if (res.ret === 0) { this.saveLoading = false this.$message.success('Feedback submitted successfully') this.dialogVisible = false } }).finally(() => { this.saveLoading = false }) } else { return false } }) }, showFeedback() { if (this.$config.apiToken) { this.dialogVisible = true } else { $('#headBox').trigger('loginDialog','reloadPage') } }, getUserInfo() { this.$nextTick(()=>{ //获取用户信息 getHeadUserInfo((res)=>{ this.baseUserInfo = res this.feedback.user_name = res.nick_name this.feedback.company_name = res.curr_enterprise_name this.feedback.email = res.email }) }) /*mtpRequest({ url: '/api/user/base-account', method: 'post', }).then(res=>{ this.baseUserInfo = res.data this.feedback.user_name = res.data.nick_name this.feedback.company_name = res.data.curr_enterprise_name this.feedback.email = res.data.email })*/ }, CutFeedbackValue(){ this.feedbackValue=this.$utils.cutByte(this.feedbackValue,240,'') }, handleRemove(file, fileList) { const index = this.feedback.pic.indexOf(file.file) this.feedback.pic.splice(index, 1) if (fileList.length < 3) { this.isFeedbackPicMax = false } }, handleSuccess(response) { this.feedback.pic.push(response.file) }, handleChange(file, fileList) { if (fileList.length >= 3) { this.isFeedbackPicMax = true } }, beforeAvatarUpload(file) { const isImage = /^image\/.*$/.test(file.type) const isLt2M = file.size / 1024 / 1024 < 2 if (!isImage) { this.$message.error('Image format error') } if (!isLt2M && isImage) { this.$message.error('Image size cannot exceed 2M') } return isImage && isLt2M } }, mounted() { this.$nextTick(()=>{ //更新token的val getUserEvent((res)=>{ if (res) { this.$config.apiToken = res this.$login.setToken(res) } }) }) this.getUserInfo() }, },"#right_navbar_container"); </script> </div> </div> <div> <div style=""> <div id="bottom_container"> <div class="bottom_head"></div> <div class="bottom" > <div class="bottom_main"> <div class="bottom_left"> <a class="bottom_logo" href="/"> <svg class="icon_en svg-icon" aria-hidden="true"> <use xlink:href="#ic_Matchpages"></use> </svg> </a> <div class="bottom_desc"> Matchexpo is an exhibition community platform for event & fair community in China, serving the essential functions of exhibitions, events, fairs, assisting ticket sales, visitor registration and booth reservation, allowing organizers to create, share, find and participate in activities, creating community space for organizers and exhibitors, finding their partners and helping them expand<br> </div> </div> <div class="bottom_center"> <div class="bottom_list"> <div class="bottom_line"> <a class="bottom_item" href="/contact-us">Contact Us</a> <a class="bottom_item" href="/user-agreement">User Agreement</a> <a class="bottom_item" href="/about-us">About Us</a> <a class="bottom_item" href="/price">Member Price</a> </div> <div class="bottom_line"> <a class="bottom_item" href="/copyright-notice">Copyright notice</a> <a class="bottom_item" href="/privacy-policy">Privacy Policy</a> <a class="bottom_item" href="/our-mission">Our Mission</a> </div> <div class="bottom_line"> <a class="bottom_item" href="/certification-specification">Certification specification</a> <a class="bottom_item" :href="helpUrl">Help Center</a> <a class="bottom_item" href="/advertisement">Advertising cooperation</a> </div> <div class="bottom_line"> <a class="bottom_item" href="/integrity-report">Integrity Report</a> <a class="bottom_item" href="/cooperative-partner">Cooperative partners</a> <a class="bottom_item" href="/link">Links</a> </div> <div class="bottom_line"> <a class="bottom_item" href="/channel">Channel Cooperation</a> <div class="bottom_item" @click="toHomepage('/certification/enterprise')">Enterprise certification</div> <a class="bottom_item" href="/invitation">Invite friends</a> </div> </div> </div> <div class="bottom_right"> <div class="bottom_qrcode_list"> <div class="bottom_qrcode"> <img src="" lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d8161532ac.png"> <span>Follow official account</span> </div> <div class="bottom_qrcode"> <img lazyload="true" data-original="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d815ddd9af.png" src=""> <span>Online support</span> </div> </div> <div class="platform_list"> <div class="platform_item" style="background:#1877F2"> <i class="iconfont ic_facebook1" ></i> </div> <div class="platform_item" style="background:#1DA1F2"> <i class="iconfont ic_twitter1"></i> </div> <div class="platform_item" style="background: #2867B2"> <i class="iconfont ic_linkedin1"></i> </div> <div class="platform_item" style="background: #FF0000"> <i class="iconfont ic_youtube" ></i> </div> <div class="platform_item" style="background: #F00073"> <i class="iconfont ic_instagram"></i> </div> <div class="platform_item" style="background: #E60023"> <i class="iconfont ic_pinterest1" ></i> </div> </div> </div> </div> </div> <div class="bottom_text"> <div> <span>Matchexpo: Event Marketing Platform </span> <span @click="handleLang('overseas', 'en-us')">International</span> - <span @click="handleLang('overseas', 'zh-tw')">Chinese Traditional</span> - <span @click="handleLang('inside', 'zh-cn')">Chinese Simplified</span> </div> | <a href="https://www.matchpages.cn/" target="_blank"> <span>Matchpages Web Builder</span> </a> | <a href="https://www.starify.cn/" target="_blank"> <span>Starify omni-Channel Chatbot</span> </a> </div> <div class="copyright"> 2019-2022。 Matchexpo | Wuhan Matchexpo Technology Co., Ltd. All rights reserved. <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d8153bd984.png" /> <span style="margin-right: 4px">鄂ICP备2022017323号 </span> </a> <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=42018502006493" target="_blank"> <img src="https://matchexpo.obs.cn-north-1.myhuaweicloud.com/common/2022/0830/630d812ede0c6.gif" class="icon_public_security" /> <span>鄂公网安备 42018502006493</span> </a> <div> Room 03, Floor 3, Building 4, Gezhouba Sun City, No. 40, Gaoxin 4th Road, Donghu New Technology Development Zone, Wuhan </div> </div> <script src="https://oss.starify.cn/prod/starigy/w_chat/install/js/5fd0a346-23e4-8052-fd6c-999f94c6f1b4.js" async></script> <div style="display: none"> <el-menu :default-active="activeIndex" :collapse="isCollapse" class="el-menu-vertical-demo"> <el-sub-menu index="Enterprise Certification4"> <template #title> <span>Enterprise Certification</span> </template> <el-menu-item index="Modify certification9" data-route="https://matchexpo.com/help/modify-certification.html" @click="routeTo('https://matchexpo.com/help/modify-certification.html')"> Modify certification </el-menu-item> <el-menu-item index="Certification fee8" data-route="https://matchexpo.com/help/certification-fee.html" @click="routeTo('https://matchexpo.com/help/certification-fee.html')"> Certification fee </el-menu-item> <el-menu-item index="Certification method7" data-route="https://matchexpo.com/help/certification-method.html" @click="routeTo('https://matchexpo.com/help/certification-method.html')"> Certification method </el-menu-item> <el-menu-item index="Certification conditions6" data-route="https://matchexpo.com/help/certification-conditions.html" @click="routeTo('https://matchexpo.com/help/certification-conditions.html')"> Certification conditions </el-menu-item> <el-menu-item index="Certification naming5" data-route="https://matchexpo.com/help/certification-naming.html" @click="routeTo('https://matchexpo.com/help/certification-naming.html')"> Certification naming </el-menu-item> <el-menu-item index="Certification introduction4" data-route="https://matchexpo.com/help/certification-introduction.html" @click="routeTo('https://matchexpo.com/help/certification-introduction.html')"> Certification introduction </el-menu-item> </el-sub-menu> </el-menu> </div> </div> <script> let bottom_container = initVue({ name:'bottomContainer', data() { return { url:'', helpUrl:'' } }, methods: { getHelpUrl() { this.$nextTick(()=>{ let list = document.querySelectorAll('#bottom_container .el-menu-item') let arr = [] list.forEach(item=>{ if (item.getAttribute('data-route')) { arr.push(item.getAttribute('data-route')) } }) if (arr.length > 0) { this.helpUrl = arr[0] } else { this.helpUrl = '/help' } }) }, toBottomPage(url) { window.open('/bottom#' + url,'_self') }, toHomepage(url) { var homeUrl = encodeURIComponent(url) if (this.$config.apiToken) { let centerUrl = this.$config.publishDomain + '/#/auth-login/' + this.$config.apiToken + '?redirect=' + homeUrl window.open(centerUrl, '_blank') } else { let centerUrl = this.$config.publishDomain + '?redirect=' + homeUrl $('#headBox').trigger('loginDialog',centerUrl) } }, handleLang(site, value) { let url = this.$config.siteDomain[site]+ '?lang=' + value this.$i18n.setLocale(value) location.href = url } }, mounted() { this.$nextTick(()=>{ //更新token的val getUserEvent((res)=>{ if (res) { this.$config.apiToken = res this.$login.setToken(res) } }) this.getHelpUrl() }) }, }, "#bottom_container"); </script> </div> </div> </div> <script> //移除loading效果 let loading_box = document.getElementById("loadingBox") function completeLoading() { if (loading_box) { loading_box.style.opacity = '0'; setTimeout(() => { if (document.querySelector('.container_body')) { document.querySelector('.container_body').style.opacity = '1'; } document.getElementById("loadingBox").style.display = "none"; }, 400) } } //初始化loading效果 function initLoading() { document.getElementById("loadingBox").style.display = ""; document.getElementById("loadingBox").style.opacity = '1'; } $(() => { setTimeout(() => { lazyload() }, 100) document.addEventListener('scroll', () => { lazyload() }, {passive: true}) setInterval(() => { lazyload() }, 1000) function lazyload() { var viewHeight = document.body.clientHeight //可视区域的高度 //获取所有要进行懒加载的图片 const lazyloadImg = document.querySelectorAll('img[data-original][lazyload]') lazyloadImg.forEach(item => { let rect = item.getBoundingClientRect()//获取每一个img元素的宽高以及距离视口顶部的距离 if (rect.top <= viewHeight && rect.top > -rect.height) { item.src = item.dataset.original item.removeAttribute('data-original') item.removeAttribute('lazyload') if (!item.onerror) { item.onerror = () => { item.src = '/assets/image/img_default.svg' } } item.style.opacity = 1 } }) } }) function getActiveTag() { let tag = document.querySelector('.active_tag') let tag_index = 0 document.querySelectorAll('.left_nav_list .nav_item').forEach((item, index) => { if (JSON.stringify(item.classList).indexOf('active') > -1) { tag_index = index } }) if (document.querySelector('.left_nav_list .active')) { let top = document.querySelector('.left_nav_list .active').offsetTop tag.style.top = parseInt(top) + 'px' tag.style.opacity = 1 } } /*判断是否禁用cookie*/ if (!(navigator.cookieEnabled && typeof window.localStorage !== 'undefined')) { ElementPlus.ElMessage({ message: 'Please allow all cookies in your browser settings and try again', type: 'warning', }) } /*获取站点*/ function returnSiteName() { window.siteName = 'overseas'; return 'overseas' } returnSiteName() /*数字转中文*/ function NumberToChinese(num) { var chnNumChar = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine']; var chnUnitSection = ['', '0k', 'Billion', 'Trillion', 'Billion'] var chnUnitChar = ['', 'Ten', 'Hundred', 'Thousand'] function SectionToChinese(section) { // 节内转换算法 var strIns = '', chnStr = ''; var unitPos = 0; var zero = true; while (section > 0) { var v = section % 10; if (v === 0) { if (!zero) { zero = true; chnStr = chnNumChar[v] + chnStr; } } else { zero = false; strIns = chnNumChar[v]; strIns += chnUnitChar[unitPos]; chnStr = strIns + chnStr; } unitPos++; section = Math.floor(section / 10); } return chnStr; } // 转换算法主函数 var unitPos = 0; var strIns = '', chnStr = ''; var needZero = false; if (num === 0) { return chnNumChar[0]; } while (num > 0) { var section = num % 10000; if (needZero) { chnStr = chnNumChar[0] + chnStr; } strIns = SectionToChinese(section); strIns += (section !== 0) ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr = strIns + chnStr; needZero = (section < 1000) && (section > 0); num = Math.floor(num / 10000); unitPos++; } return chnStr; } /*日期转化*/ function getWeekDay(time) { time = new Date(time) var dayarray = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") var montharray = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December") var year = time.getYear() if (year < 1000) year += 1900 var day = time.getDay() var month = time.getMonth() var daym = time.getDate() if (daym < 10) daym = "0" + daym var hours = time.getHours() var minutes = time.getMinutes() var seconds = time.getSeconds() var dn = "AM" if (hours >= 12) dn = "PM" if (hours > 12) { hours = hours - 12 } if (hours == 0) hours = 12 if (minutes <= 9) minutes = "0" + minutes if (seconds <= 9) seconds = "0" + seconds return dayarray[day] + ", " + montharray[month] + "" + daym + ", " + year + " " + hours + ":" + minutes + ":" + seconds + " " + dn } /*判断单位缩写*/ function formatNumber(number) { let lang = 'en-us'; let length = (number + '').length; //数字长度 let str = number + ''; if (lang === 'en-us') { if (length > 9) { //亿单位 str = (number / 1000000000).toFixed(1) + 'Billion' } else if (length > 6) { //万单位 str = (number / 1000000).toFixed(1) + 'Million' } else if (length > 3) { //千单位 str = (number / 1000).toFixed(1) + 'Thousand' } else { return number; } return str; } else { if (length > 8) { //亿单位 str = (number / 100000000).toFixed(1) + 'Hundred million' } else if (length > 4) { //万单位 str = (number / 10000).toFixed(1) + '0k' } else if (length > 3) { //千单位 str = (number / 1000).toFixed(1) + 'Thousand' } else { return number; } return str; } } /*时间转化*/ function timeTran(theTime) { let nowTime = new Date().getTime(); let dur = (nowTime - new Date(theTime).getTime()) / 1000; if (dur <= 60) { return 'Just'; } else if (dur <= 3600) { let number = parseInt(dur / 60) let s = (number > 1 ? 's' : '') return number + ' Minutes ago'.replace('{s}', s) } else if (dur <= 86400) { let number = parseInt(dur / 3600) let s = (number > 1 ? 's' : '') return number + ' Hours ago'.replace('{s}', s) } else if (dur <= 86400 * 30) { let number = parseInt(dur / 86400) let s = (number > 1 ? 's' : '') return number + ' Days ago'.replace('{s}', s) } else if (dur <= 86400 * 30 * 12) { let number = parseInt(dur / (86400 * 30)) let s = (number > 1 ? 's' : '') return number + ' Months ago'.replace('{s}', s) } else { let number = parseInt(dur / (86400 * 30 * 12)) let s = (number > 1 ? 's' : '') return number + ' Last year'.replace('{s}', s) } } // 记录访问referrer var referrer = document.referrer var user_referrer = window.localStorage.getItem('user_referrer') if (!user_referrer) { user_referrer = [] } else { user_referrer = JSON.parse(user_referrer) } if (typeof referrer === 'string' && user_referrer.length < 20) { var recorded = 0 user_referrer.forEach(item => { if (item == referrer) { recorded = 1 } }) if (recorded === 0) { user_referrer.push(referrer) window.localStorage.setItem('user_referrer', JSON.stringify(user_referrer)) } } </script> <script src="/assets/js/component/comment/comment.js?v=8.8"></script> <script> function Flipper(config) { // 时间翻牌默认配置 this.config = { // 时钟模块的节点 node: null, // 初始前牌文字 frontText: ' ic_n_0', // 初始后牌文字 backText: 'ic_n_1', // 翻转动画时间(毫秒,与翻转动画CSS 设置的animation-duration时间要一致) duration: 500, } // 节点的原本class,与html对应,方便后面添加/删除新的class this.nodeClass = { flip: 'flip', front: 'digital front iconfont', back: 'digital back iconfont', } // 覆盖默认配置 Object.assign(this.config, config) // 定位前后两个牌的DOM节点 this.frontNode = this.config.node.querySelector('.front') this.backNode = this.config.node.querySelector('.back') // 是否处于翻牌动画过程中(防止动画未完成就进入下一次翻牌) this.isFlipping = false // 初始化 this._init() } Flipper.prototype = { constructor: Flipper, // 初始化 _init: function () { // 设置初始牌面字符 this._setFront(this.config.frontText) this._setBack(this.config.backText) }, // 设置前牌文字 _setFront: function (className) { this.frontNode.setAttribute( 'class', this.nodeClass.front + ' ' + className ) }, // 设置后牌文字 _setBack: function (className) { this.backNode.setAttribute('class', this.nodeClass.back + ' ' + className) }, _flip: function (type, front, back) { // 如果处于翻转中,则不执行 if (this.isFlipping) { return false } // 设置翻转状态为true this.isFlipping = true // 设置前牌文字 this._setFront(front) // 设置后牌文字 this._setBack(back) // 根据传递过来的type设置翻转方向 let flipClass = this.nodeClass.flip if (type === 'down') { flipClass += ' down' } else { flipClass += ' up' } // 添加翻转方向和执行动画的class,执行翻转动画 this.config.node.setAttribute('class', flipClass + ' go') // 根据设置的动画时间,在动画结束后,还原class并更新前牌文字 setTimeout(() => { // 还原class this.config.node.setAttribute('class', flipClass) // 设置翻转状态为false this.isFlipping = false // 将前牌文字设置为当前新的数字,后牌因为被前牌挡住了,就不用设置了。 this._setFront(back) }, this.config.duration) }, // 下翻牌 flipDown: function (front, back) { this._flip('down', front, back) }, // 上翻牌 flipUp: function (front, back) { this._flip('up', front, back) }, } let expo_detail = initVue({ name:'expoDetail', data() { return { expoId:0, loadComplete:true, pageId: '34120', preview: '0', loading:false, expoDetail:{}, baseUserInfo:{}, isActiveIndex: 0, ticketAmount:1, ticketStatus:0, showOrder: false, attentionText:'Paid attention to', //动态改变关注文案 ticketCountList:[], //门票购买记录 ticketStartTime:'', //显示门票时间 time_str: '', shareWechat:false, aboutHomepageList:[], successUrl:'', LoginDialogVisible:false, monthEnglish: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Spt","Oct","Nov","Dec"], exhibitorForm: { visible: false, title: '', form: { activity_id: 0, activity_exhibitor_id: 0, user_name: '', company_name: '', phone: '', valid_code: '', company_email: '', company_size: '', address: '', company_introduce: '', company_type: 1, content: '' }, rules: { user_name: [ { required: true, message: "Please enter your name", trigger: ['blur', 'change'] } ], company_name: [ { required: true, message: "Please enter your company name", trigger: ['blur', 'change'] } ], phone: [ { required: true, message: "Please enter your mobile number", trigger: ['blur', 'change'] } ], valid_code: [ { required: true, message: "Please enter the verification code", trigger: ['blur', 'change'] } ], company_email: [ { required: true, message: "Please enter your company email address", trigger: ['blur', 'change'] }, { type: 'email', message: "The email format is incorrect. Please enter the correct email", trigger: ['blur', 'change'] } ], company_size: [ { required: true, message: "Please enter the size of your company", trigger: ['blur', 'change'] } ], address: [ { required: true, message: "Please enter your city", trigger: ['blur', 'change'] } ], company_introduce: [ { required: true, message: "Please fill in the company introduction", trigger: ['blur', 'change'] } ], content: [ { required: true, message: "Please fill in your detailed requirements", trigger: ['blur', 'change'] } ] } }, time_count: '', //获取验证码倒计时 timer: '', //判断倒计时是否结束 verificationShow: false, commentOption: { url:'/api/activity/comment', data_url:'/api/activity/comment-list', getListParams:{ activity_id: 2993 }, commentParams:{ activity_id: 2993, } }, activityExhibitorListParams: { blade: 'activity-exhibitor', view_file: 'expo.components.activityExhibitorList', page: 1, page_size: 10, total: 0, activity_id: '2993', }, activityExhibitorListLoading: false }; }, methods:{ getActivityExhibitorListData(e) { if (e) { this.activityExhibitorListParams.page = e this.currentPage = e document.querySelector('#activity_exhibitor').scrollIntoView(true) window.scrollBy(0, -100); } let params = this.activityExhibitorListParams this.activityExhibitorListLoading = true mtpRequest({ url: '/blade', method: 'get', params }).then(res=>{ if (res.ret === 0) { let dom_list = document.querySelector('#activity_exhibitor') if (res.data === '') { //没数据 dom_list.innerHTML = '' this.activityExhibitorListParams.total = 0 } else { dom_list.innerHTML = res.data this.activityExhibitorListParams.total = document.querySelector('#activity_exhibitor .activity_exhibitor_container').getAttribute('data-total') ?? 0 this.activityExhibitorListParams.total = parseInt(this.activityExhibitorListParams.total) } } this.activityExhibitorListLoading = false }) }, initImageView() { //初始化图片预览插件 let list = document.querySelectorAll('.expo_desc_body img') console.log(list) list.forEach(item=>{ new Viewer(item, { url: 'src' }); }) }, initOwl() { let owl = $('.details_bottom.owl-carousel') if (owl) { owl.owlCarousel({ margin: 10, items: 4, // animateOut: 'fadeOut', nav: true, autoplay: true, loop: false, dots:false }) } }, isExpoThumbsUP(item) { if (!this.$config.apiToken) { $('#headBox').trigger('loginDialog','reloadPage') } else { let params = { record_id: '2993', record_type: 1, } if (item.is_thumbs_up === 0) { mtpRequest({ url: '/api/user/thumbs-up', method: 'post', data:params }).then(res=>{ if (res.ret === 0) { this.$message.success('Like success'); item.is_thumbs_up = 1 } }) } else { mtpRequest({ url: '/api/user/cancel-thumbs-up', method: 'post', data:params }).then(res=>{ if (res.ret === 0) { this.$message.success('Like canceled'); item.is_thumbs_up = 0 } }) } } }, getRandom(){ return Math.round(Math.random()*20+20); }, setExpoNotice() { let timer = '' setTime(this) getExpoNotice(this) function setTime(that) { let random_time = that.getRandom() * 1000 timer = setTimeout(()=>{ getExpoNotice(that,'1') },random_time) } function getExpoNotice(that,type) { mtpRequest({ url:'/api/activity/active-data', method:'get', params:{ activity_id:that.expoId } }).then(res=>{ if (res.data[0]) { that.$message.Notification({message: '<span class="notice_message"><i class="iconfont ic_jinggao"></i>' +res.data[0] + '</span>',position:'top-right',dangerouslyUseHTMLString: true,offset:100}) } if (res.data[1]) { setTimeout(()=>{ that.$message.Notification({message: '<span class="notice_message"><i class="iconfont ic_jinggao"></i>' +res.data[1] + '</span>',position:'top-right',dangerouslyUseHTMLString: true,offset:170}) },1000) } if (type || timer) { clearTimeout(timer) timer = '' setTime(that) } }) } }, attentionAboutHomepage(cancel,id,index) { if (!this.$config.apiToken) { $('#headBox').trigger('loginDialog','reloadPage') } else { //相关企业关注 mtpRequest({ url: '/api/network/enterprise-collection-opt', method: 'get', params: { enterprise_id: id, cancel: cancel, } }).then(res => { if (res.ret === 0) { if (cancel === 0) { this.aboutHomepageList[index].is_account_concern = 1 if (this.aboutHomepageList[index].enterprise_id === this.expoDetail.enterprise_id) { this.expoDetail.sponsor.is_account_concern = 1 } } else { this.aboutHomepageList[index].is_account_concern = 0 if (this.aboutHomepageList[index].enterprise_id === this.expoDetail.enterprise_id) { this.expoDetail.sponsor.is_account_concern = 0 } } } }) } }, getAboutHomePage() { mtpRequest({ url:'/api/activity/related-enterprise', method:'get', params:{ activity_id:this.expoId, page:1, } }).then(res=>{ if (res.ret === 0) { this.aboutHomepageList = res.data } }) }, initIndexOwl() { let owl = $('.author_about_user_list') if (owl) { owl.owlCarousel({ margin: 10, items: 4, animateOut: 'fadeOut', // nav: true, dots:false, loop: false, }) } let about_homepage = $('.owl-carousel.about_homepage_list') if (about_homepage) { about_homepage.owlCarousel({ margin: 10, items: 4, animateOut: 'fadeOut', nav: true, dots:false, loop: false, }) } // 参展商 /*let activity_exhibitor = $('.owl-carousel.activity_exhibitor_list') if (activity_exhibitor) { activity_exhibitor.owlCarousel({ margin: 10, items: 6, animateOut: 'fadeOut', nav: true, dots:false, loop: false, }) }*/ }, openMyOrder(url) { if (this.$config.apiToken) { window.open(url,'_blank') } else { this.LoginDialogVisible=true this.successUrl='closeLoginPopup' } }, closepopup(){ this.LoginDialogVisible=false this.successUrl='' if (this.$config.apiToken) { this.getUserInfo() } }, showShare() { this.shareWechat = true this.$nextTick(()=>{ this.creatQrCode() }) }, shareUrl(type) { if (type && type === 'facebook') { mpshare_facebook(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) } else if (type && type === 'twitter') { mpshare_twitter(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) } else if (type && type === 'linkedin') { mpshare_linkedin(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) } else if (type && type === 'pinterest') { mpshare_pinterest(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) } else { const input = document.createElement('input'); input.setAttribute('readonly', 'readonly'); // 设置为只读, 防止在 ios 下拉起键盘 // input.setAttribute('value', value); // textarea 不能用此方式赋值, 否则无法复制内容 input.value = window.location.origin +'/expo/' + this.expoDetail.activity_id; document.body.appendChild(input); input.setSelectionRange(0, 9999); // 防止 ios 下没有全选内容而无法复制 input.select(); document.execCommand('copy'); document.body.removeChild(input); this.$message.success('Share link copied successfully') } }, handleMouseover(cancel) { if (cancel === 1) { this.attentionText = 'Followed' } else { this.attentionText = 'Paid attention to' } }, applyStand() { let params = { form_id: this.expoDetail.form_id, ticket_index: this.isActiveIndex, } localStorage.setItem('standApply'+this.expoDetail.activity_id,JSON.stringify(params)) window.open('/stand-apply?activity_id=' + this.expoDetail.activity_id,'_self') }, applyExpo() { /*if (!this.$config.apiToken) { this.LoginDialogVisible=true this.successUrl='closeLoginPopup' } else { }*/ if ( !( this.expoDetail.form_info && this.expoDetail.form_info.form_items && this.expoDetail.form_info.form_items.length > 0 ) ) { this.$message.error('The data of the exhibition is abnormal. Please report to the customer service for inspection') return false } if ( this.expoDetail.tickets[this.isActiveIndex] && this.expoDetail.tickets[this.isActiveIndex].is_limit === 1 && this.expoDetail.tickets[this.isActiveIndex].tickets_left_count === 0 ) { ElementPlus.ElMessage({ message: 'Tickets have been sold out', type: 'error', }) return false } if ( this.expoDetail.tickets[this.isActiveIndex] && this.expoDetail.tickets[this.isActiveIndex].is_limit === 1 && this.expoDetail.tickets[this.isActiveIndex].tickets_left_count < this.ticketAmount ) { ElementPlus.ElMessage({ message: 'Tickets purchased cannot be greater than the remaining tickets', type: 'error', }) return false } let pay_max = this.expoDetail.tickets[this.isActiveIndex].purchase_max_num if (this.ticketCountList && this.ticketCountList[this.baseUserInfo.curr_enterprise_id]) { let ticket_item = this.ticketCountList[this.baseUserInfo.curr_enterprise_id] let ticket_id = this.expoDetail.tickets[this.isActiveIndex].id // 剩余可报名数量 if (ticket_item && ticket_item.tickets[ticket_id]) { let limit_num = pay_max - ticket_item.tickets[ticket_id].count > 0 ? pay_max - ticket_item.tickets[ticket_id].count : 0 if (limit_num !== 0 && this.ticketAmount > limit_num ) { this.$message.warning('This identity exceeds the purchase limit') return false } } else { if (pay_max && this.ticketAmount > pay_max) { this.$message.warning('This identity exceeds the purchase limit') return false } } } else { if (pay_max && this.ticketAmount > pay_max ) { this.$message.warning('This identity exceeds the purchase limit') return false } } let params = { form_id: this.expoDetail.form_id, amount: this.ticketAmount, ticket_index: this.isActiveIndex, } localStorage.setItem('activity'+this.expoDetail.activity_id,JSON.stringify(params)) window.location.href = '/apply?activity_id=' + this.expoDetail.activity_id + '&amount=' + params.amount + '&ticket_index=' + params.ticket_index + '&form_id=' + params.form_id }, scrollToComment() { let scrollHeight = document.getElementById('news_comment_box').offsetTop window.scrollTo(scrollHeight-200,500) }, scrollToTop() { window.scrollTo(0,500) }, selectTicket(index) { this.isActiveIndex = index this.judgeActivityStatus() }, getUserInfo() { mtpRequest({ url: '/api/user/base-account', method: 'post', }).then(res=>{ this.baseUserInfo = res.data this.getTicketCountData() }) }, getExpoDetail() { let params = { id:this.expoId, preview: this.preview } this.loading = true mtpRequest({ url: '/api/activity/expo-detail', method: 'get', params }).then(res=>{ if (res.ret === 0) { this.loading = false this.expoDetail = res.data if (this.expoDetail.active_status === 0) { this.setExpoNotice() this.setCountTime(this.expoDetail.now_time,this.expoDetail.start_time,this.expoDetail.active_status) } if (this.expoDetail.active_status === 1) { this.setExpoNotice() this.setCountTime(this.expoDetail.start_time,this.expoDetail.now_time,this.expoDetail.active_status) } this.expoDetail.start_date = this.returnDate(this.expoDetail.start_time) this.expoDetail.end_date = this.returnDate(this.expoDetail.end_time) this.loadComplete = true this.$nextTick(()=>{ this.initImageView() this.creatQrCode() this.judgeActivityStatus() }) } }) }, mpShareQzone() { mpshare_qzone(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) }, mpShareWeibo() { mpshare_weibo(window.location.origin+'/expo/' + this.expoDetail.activity_id,this.expoDetail.name) }, creatQrCode() { if (this.$refs['qrcode_we'] && this.expoDetail.activity_id) { this.$refs['qrcode_we'].innerHTML = '' //生成二维码 new QRCode(this.$refs['qrcode_we'], { text: location.origin + '/mobile' + location.pathname, width: 150, height: 150, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H, }) } if (this.$refs['qrcode_we2'] && this.expoDetail.activity_id) { this.$refs['qrcode_we2'].innerHTML = '' //生成二维码 new QRCode(this.$refs['qrcode_we2'], { text: location.origin + '/mobile' + location.pathname, width: 150, height: 150, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H, }) } }, collectionAct() { //展会收藏 if (!this.$config.apiToken) { $('#headBox').trigger('loginDialog','reloadPage') } else { let params = {id: this.expoId} mtpRequest({ url: '/api/activity/collection', method: 'post', data:params }).then((res) => { if (res.ret === 0) { if (this.expoDetail.is_collection === 0) { this.$message.success('Event collection succeeded') this.expoDetail.is_collection = 1 this.expoDetail.collections += 1 } else { this.$message.success('Collection cancelled') this.expoDetail.is_collection = 0 this.expoDetail.collections -= 1 } } }) } }, isThumbsUP(item) { if (!this.$config.apiToken) { $('#headBox').trigger('loginDialog','reloadPage') } else { let params = { record_id: item.id, record_type: 3, } if (item.is_thumbs_up === 0) { mtpRequest({ url: '/api/user/thumbs-up', method: 'post', data:params }).then(res=>{ if (res.ret === 0) { ElementPlus.ElMessage({ message: 'Like success', type: 'success', }) item.is_thumbs_up = 1 item.thumbs_up_count = item.thumbs_up_count + 1 } }) } else { mtpRequest({ url: '/api/user/cancel-thumbs-up', method: 'post', data:params }).then(res=>{ if (res.ret === 0) { ElementPlus.ElMessage({ message: 'Like canceled', type: 'success', }) item.is_thumbs_up = 0 item.thumbs_up_count = item.thumbs_up_count - 1 } }) } } }, setCountTime(start_time,now_time,active_status) { var that = this let clock = document.getElementById('clock') if (!clock) { return false } let flips = clock.querySelectorAll('.flip') let flipObjs = [] let time_result = that.countTime( new Date(start_time).getTime() - new Date(now_time).getTime() ) let next_result = that.countTime( new Date(start_time).getTime() - new Date(now_time).getTime() + 60000 ) let nextTimeStr = next_result.d + '' + next_result.h + next_result.m let nowTimeStr = time_result.d + '' + time_result.h + time_result.m let flipList = document.getElementsByClassName('flip') if (nextTimeStr[7] && flipObjs.length < 8) { let node = flipList[0].cloneNode(true) document .getElementsByClassName('time_contain')[0] .insertBefore(node, flipList[0]) flips = clock.querySelectorAll('.flip') } for (let i = 0; i < flips.length; i++) { // 创建6个Flipper实例,初始化并存入flipObjs flipObjs.push( new Flipper({ // 每个Flipper实例按数组顺序与翻板DOM的顺序一一对应 node: flips[i], // 按数组顺序取时间字符串对应位置的数字 frontText: 'ic_n_' + nowTimeStr[i], backText: 'ic_n_' + nextTimeStr[i], }) ) } let now_result_time= new Date(start_time).getTime() - new Date(now_time).getTime() + 60000 let next_result_time = new Date(start_time).getTime() - new Date(now_time).getTime() var setTime = setInterval(function () { let now_result,next_result if (now_result_time && now_result_time > 1000) { if (active_status === 1) { now_result_time -= 1000 } else { now_result_time += 1000 } now_result = that.countTime(now_result_time) } if (next_result_time && next_result_time > 1000) { if (active_status === 1) { next_result_time -= 1000 } else { next_result_time += 1000 } next_result = that.countTime(next_result_time) } let nextTimeStr = next_result.d + '' + next_result.h + next_result.m let nowTimeStr = now_result.d + '' + now_result.h + now_result.m if (that.time_str === '') { that.time_str = nowTimeStr } // 将当前时间和下一秒时间逐位对比 for (let i = 0; i < flipObjs.length; i++) { // 如果前后数字没有变化,则直接跳过,不翻牌 if (that.time_str[i] === nowTimeStr[i]) { continue } // 传递前后牌的数字,进行向下翻牌动画 flipObjs[i].flipDown( 'ic_n_' + nowTimeStr[i], 'ic_n_' + nextTimeStr[i] ) that.time_str = '' } if (nowTimeStr === '0000000') { clearInterval(setTime) } }, 1000) }, countTime(countTime) { let d = parseInt(countTime / 86400000) let h = parseInt((countTime - 86400000 * d) / 3600000) let m = parseInt((countTime - 86400000 * d - h * 3600000) / 60000) d = d > 0 ? d : 0 h = h > 0 ? h : 0 m = m > 0 ? m : 0 if (d >= 0 && d < 10) { d = '00' + d } if (d < 100 && d >= 10) { d = '0' + d } if (h >= 0 && h < 10) { h = '0' + h } if (m >= 0 && m < 10) { m = '0' + m } return { d: d, h: h, m: m, } }, returnDate(time) { let year = new Date(time).format('yyyy') let mouth = new Date(time).format('MM-dd') let hours = new Date(time).format('hh:mm') if (this.$i18n.getLocale() == 'en-us') { mouth = this.monthEnglish[new Date(time).getMonth()]; } return { year:year, mouth:mouth, hours:hours, } }, getTicketCountData() { // 获取活动订单购买状况 let params = { activity_id:this.expoId } mtpRequest({ url: '/api/activity/ticket-count', method: 'get', params }).then(res=>{ if (res.ret === 0) { this.ticketCountList = res.data this.judgeActivityStatus() } }) }, enterpriseOptData(cancel) { if (this.$config.apiToken) { if (this.baseUserInfo.curr_enterprise_id) { let params params = { enterprise_id: this.expoDetail.enterprise_id, cancel: cancel, } mtpRequest({ url: '/api/network/enterprise-collection-opt', method: 'get', params }).then(res=>{ if (res.ret === 0) { if (cancel === 0) { this.expoDetail.sponsor.is_account_concern = 1 } else { this.expoDetail.sponsor.is_account_concern = 0 } } }) } } else { this.LoginDialogVisible=true this.successUrl='closeLoginPopup' } }, changeTicket() { this.judgeActivityStatus() }, judgeActivityStatus() { let now_time = this.expoDetail.now_time let tickets = this.expoDetail.tickets let tickets_item; if (tickets && tickets[this.isActiveIndex]) { tickets_item = tickets[this.isActiveIndex] } else { return false } //ticketStatus: 0 正常 1 门票报名时间还没到 2 门票报名过期了 3报名了 4已暂停 5展会时间过期了 6再次报名 if (tickets_item.tickets_left_count === 0) { // 门票已售罄--截至报名 this.ticketStatus = 5 } else if ( tickets_item.end_date && now_time && new Date(tickets_item.end_date).getTime() < new Date(now_time).getTime() ) { // 门票过期 this.ticketStatus = 2 } else if (tickets_item.start_date && new Date(tickets_item.start_date).getTime() > new Date(now_time).getTime() ) { // 门票未开始 this.ticketStatus = 1 } else if (this.expoDetail.ticket_status === 1) { // 门票暂停售票 this.ticketStatus = 4 } else if ( new Date(this.expoDetail.end_time).getTime() < new Date(now_time).getTime() ) { // 展会已结束 this.ticketStatus = 5 } else if (this.ticketCountList && this.baseUserInfo && this.baseUserInfo['curr_enterprise_id']) { let ticket_item = this.ticketCountList[this.baseUserInfo['curr_enterprise_id']] let ticket_id = tickets_item.id let pay_max = tickets_item.purchase_max_num // let pay_min = ticket_item.purchase_min_num if ( ticket_item && ticket_item.tickets && ticket_item.tickets[ticket_id] && ticket_item.tickets[ticket_id].count > 0){ if (pay_max && pay_max > ticket_item.tickets[ticket_id].count) { // 再报名 this.ticketStatus = 6 } else { // 已报过名 this.ticketStatus = 3 } if (!pay_max) { this.ticketStatus = 6 } } else { // 正常售票 this.ticketStatus = 0 } } else { // 正常售票 this.ticketStatus = 0 } this.returnTicketTime() }, returnTicketTime() { if (this.expoDetail.tickets[this.isActiveIndex]) { this.ticketStartTime = new Date( new Date( this.expoDetail.tickets[this.isActiveIndex].start_date ).getTime() ).format('Yyyy MM DD HH: mm') + 'Start selling tickets' } }, // 显示提交参展商表单 showExhibitorForm(id, activity_id, name) { this.exhibitorForm.visible = true this.exhibitorForm.form.activity_id = activity_id this.exhibitorForm.form.activity_exhibitor_id = id this.exhibitorForm.title = "Contact" + name }, saveExhibitorForm() { if (!this.exhibitorForm.form.valid_code) { this.$message.error("Please enter the verification code") return } this.$refs['exhibitorForm'].validate((valid) => { if (valid) { mtpRequest({ url: '/api/activity/exhibitor-form', method: 'post', data: this.exhibitorForm.form }).then(res=>{ if (res.ret === 0) { this.$message.success("Submitted successfully") this.exhibitorForm.visible = false } }) } else { console.log('error submit!!'); return false; } }); }, getValidCode() { if (!this.exhibitorForm.form.phone) { this.$message.warning("Please enter your mobile number") return } var params = {} params.phone = this.exhibitorForm.form.phone params.country_code = '86' this.verificationCount() mtpRequest({ url: '/api/user/get-phone-code', method: 'post', data:params }).then((res) => { if (res.ret === 0) { this.$message.success('The verification code was sent successfully. Please check it') } }) }, verificationCount() { //验证码倒计时 const TIME_COUNT = 60 if (!this.timer) { this.time_count = TIME_COUNT this.verificationShow = true this.timer = setInterval(() => { if (this.time_count > 0 && this.time_count <= TIME_COUNT) { this.time_count-- } else { this.verificationShow = false clearInterval(this.timer) this.timer = '' } }, 1000) } }, }, mounted() { if (document.getElementById('expo_detail')) { this.expoId = document.getElementById('expo_detail').getAttribute('data-expo-id') this.getExpoDetail() } this.getAboutHomePage() this.$nextTick(()=>{ this.initIndexOwl() this.initOwl() }) if (this.$config.apiToken) { this.getUserInfo() } this.$nextTick(() => { if (document.querySelector('#activity_exhibitor .activity_exhibitor_container')) { this.activityExhibitorListParams.total = document.querySelector('#activity_exhibitor .activity_exhibitor_container').getAttribute('data-total') ?? 0 this.activityExhibitorListParams.total = parseInt(this.activityExhibitorListParams.total) } }) }, },"#expo_detail",['mtpComment']) //页面停留时长 let stayTime let expoId = '2993' window.onload = ()=>{ stayTime = new Date().getTime() } window.onbeforeunload = ()=>{ if (stayTime && stayTime > 0) { let stayTimes = new Date().getTime() - stayTime stayTime = 0 let params = { expo_id: expoId, stay_time: stayTimes } mtpRequest({ url: '/api/timeline/views', method: 'post', data: params }).then(res => { }) } } </script> </body> </html>