guofei 2024-10-17 17:28:47 +08:00
commit 2f9f128f7d
49 changed files with 223 additions and 184 deletions

1
.gitignore vendored
View File

@ -12,7 +12,6 @@ deploy.js
# next.js # next.js
/.next/ /.next/
/out/
# production # production
/build /build

View File

@ -1,15 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
output: 'export', output: 'export',
async redirects() {
return [
{
source: '/',
destination: '/zh/home',
permanent: true,
},
];
},
}; };
export default nextConfig; export default nextConfig;

1
out/404.html 100644

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-2b1e5691dd2d9302.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@ -0,0 +1 @@
self.__SSG_MANIFEST=new Set(["\u002F[lang]\u002Fhome"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[958],{9238:function(e,t,n){Promise.resolve().then(n.bind(n,7168))},7168:function(e,t,n){"use strict";n.d(t,{default:function(){return c}});var r=n(881),s=n(6509),i=n(4149);function a(e){let{dict:t,lang:n}=e,[a,c]=(0,i.useState)(!1);return(0,r.jsx)(r.Fragment,{children:(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsxs)("div",{className:"flex items-center w-[129px] h-[28px] bg-[#EEF1F6] border-[1px] border-[#eeeeee] rounded-[3px] px-[10px] mt-[18px] cursor-pointer",onClick:()=>c(!a),children:[(0,r.jsx)("img",{src:"/common/earth.png",width:16.5,height:16.5,alt:"logo"}),(0,r.jsx)("div",{className:"flex-1 text-[14px] text-[#333333] mx-[9px]",children:null==t?void 0:t.lang}),(0,r.jsx)("img",{className:"transition-transform duration-300 transform rotate-0 ".concat(a&&"rotate-180"),src:"/common/arrow.png",width:10,height:5,alt:"logo"})]}),(0,r.jsx)(s.default,{href:"zh"===n?"/en/home.html":"/index.html",children:(0,r.jsx)("div",{className:"absolute ".concat(!a&&"hidden"," top-[30px] w-[129px] h-[28px] \n bg-[#EEF1F6] text-center transition-all duration-300 origin-top group-hover:block"),children:(0,r.jsx)("div",{className:"text-[14px] text-[#333333]",children:null==t?void 0:t.lang1})})})]})})}function c(e){let{dict:t,lang:n}=e,[c,l]=(0,i.useState)(t.home),o=[{name:t.home,href:"#home"},{name:t.services,href:"#service"},{name:t.caseGallery,href:"#case"},{name:t.contactUs,href:"#contact "}];return(0,r.jsx)(r.Fragment,{children:(0,r.jsxs)("div",{className:"flex items-center px-[20px] h-[80px] border-b-1 border-solid border-[#D8D8D8]",style:{borderBottom:"1px solid #D8D8D8"},children:[(0,r.jsx)("img",{src:"/common/logo.png",width:180,height:47,alt:"logo"}),(0,r.jsx)("div",{className:"flex flex-1 items-end h-[80px] mx-[13px]",children:o.map(e=>(0,r.jsx)(s.default,{href:e.href,children:(0,r.jsxs)("div",{className:"text-center cursor-pointer",onClick:()=>l(e.name),children:[(0,r.jsx)("div",{className:"my-[10px] w-[144px] text-[18px]",children:e.name}),c===e.name?(0,r.jsx)("img",{src:"/common/tab_checked.png",width:144,height:8,alt:""}):(0,r.jsx)("div",{className:"h-[8px]"})]})},e.name))}),(0,r.jsx)("div",{className:"",children:(0,r.jsx)(a,{dict:t,lang:n})})]})})}}},function(e){e.O(0,[509,985,330,744],function(){return e(e.s=9238)}),_N_E=e.O()}]);

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[409],{6325:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return n(9094)}])},9094:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}}),n(8806);let i=n(881);n(4149);let o={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},l={display:"inline-block"},r={display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},d={fontSize:14,fontWeight:400,lineHeight:"49px",margin:0};function s(){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("title",{children:"404: This page could not be found."}),(0,i.jsx)("div",{style:o,children:(0,i.jsxs)("div",{children:[(0,i.jsx)("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),(0,i.jsx)("h1",{className:"next-error-h1",style:r,children:"404"}),(0,i.jsx)("div",{style:l,children:(0,i.jsx)("h2",{style:d,children:"This page could not be found."})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},function(e){e.O(0,[985,330,744],function(){return e(e.s=6325)}),_N_E=e.O()}]);

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{62:function(e,a,_){Promise.resolve().then(_.t.bind(_,5418,23)),Promise.resolve().then(_.t.bind(_,2045,23)),Promise.resolve().then(_.t.bind(_,8226,23))},8226:function(){},2045:function(e){e.exports={style:{fontFamily:"'__geistMono_c3aa02', '__geistMono_Fallback_c3aa02'"},className:"__className_c3aa02",variable:"__variable_c3aa02"}},5418:function(e){e.exports={style:{fontFamily:"'__geistSans_1e4310', '__geistSans_Fallback_1e4310'"},className:"__className_1e4310",variable:"__variable_1e4310"}}},function(e){e.O(0,[473,985,330,744],function(){return e(e.s=62)}),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{3030:function(e,n,t){Promise.resolve().then(t.t.bind(t,1013,23)),Promise.resolve().then(t.t.bind(t,8073,23)),Promise.resolve().then(t.t.bind(t,1626,23)),Promise.resolve().then(t.t.bind(t,6102,23)),Promise.resolve().then(t.t.bind(t,4262,23)),Promise.resolve().then(t.t.bind(t,2609,23))}},function(e){var n=function(n){return e(e.s=n)};e.O(0,[985,330],function(){return n(39),n(3030)}),_N_E=e.O()}]);

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[888],{9452:function(n,_,u){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_app",function(){return u(4820)}])}},function(n){var _=function(_){return n(n.s=_)};n.O(0,[774,179],function(){return _(9452),_(6699)}),_N_E=n.O()}]);

View File

@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[820],{7022:function(n,_,u){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return u(3936)}])}},function(n){n.O(0,[888,774,179],function(){return n(n.s=7022)}),_N_E=n.O()}]);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u<e.length;u++){for(var n=e[u][0],r=e[u][1],o=e[u][2],c=!0,f=0;f<n.length;f++)i>=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o<i&&(i=o));if(c){e.splice(u--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);d.r(o);var u={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(function(t){u[t]=function(){return e[t]}});return u.default=function(){return e},d.d(o,u),o},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){},d.miniCssF=function(e){},d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",d.l=function(e,t,n,u){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var i,c,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var l=f[a];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+n){i=l;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,d.nc&&i.setAttribute("nonce",d.nc),i.setAttribute("data-webpack",o+n),i.src=d.tu(e)),r[e]=[t];var s=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.bind(null,i.onload),c&&document.head.appendChild(i)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===u&&(u={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(u=trustedTypes.createPolicy("nextjs#bundler",u))),u},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/_next/",i={272:0,473:0},d.f.j=function(e,t){var n=d.o(i,e)?i[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|473)$/.test(e))i[e]=0;else{var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),u=Error();d.l(o,function(t){if(d.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}}},d.O.j=function(e){return 0===i[e]},c=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],f=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)d.o(u,n)&&(d.m[n]=u[n]);if(c)var a=c(d)}for(e&&e(t);f<o.length;f++)r=o[f],d.o(i,r)&&i[r]&&i[r][0](),i[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),f.push=c.bind(null,f.push.bind(f))}();

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

BIN
out/common/logo.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

2
out/en/home.html 100644

File diff suppressed because one or more lines are too long

8
out/en/home.txt 100644

File diff suppressed because one or more lines are too long

BIN
out/favicon.ico 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
out/home/case_1.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

BIN
out/home/case_2.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
out/home/case_3.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

BIN
out/home/img_3.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

BIN
out/home/img_AB.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
out/home/qrcode.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

2
out/index.html 100644

File diff suppressed because one or more lines are too long

8
out/zh/home.txt 100644

File diff suppressed because one or more lines are too long

View File

@ -11,7 +11,9 @@
"dependencies": { "dependencies": {
"@emotion/react": "^11.13.3", "@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0", "@emotion/styled": "^11.13.0",
"@formatjs/intl-localematcher": "^0.5.5",
"@mui/material": "^6.1.3", "@mui/material": "^6.1.3",
"negotiator": "^0.6.3",
"next": "14.2.15", "next": "14.2.15",
"next-intl": "^3.21.1", "next-intl": "^3.21.1",
"react": "^18", "react": "^18",

View File

@ -14,9 +14,15 @@ importers:
'@emotion/styled': '@emotion/styled':
specifier: ^11.13.0 specifier: ^11.13.0
version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1) version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1)
'@formatjs/intl-localematcher':
specifier: ^0.5.5
version: 0.5.5
'@mui/material': '@mui/material':
specifier: ^6.1.3 specifier: ^6.1.3
version: 6.1.3(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 6.1.3(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react@18.3.1))(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
negotiator:
specifier: ^0.6.3
version: 0.6.3
next: next:
specifier: 14.2.15 specifier: 14.2.15
version: 14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 14.2.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)

View File

@ -44,168 +44,172 @@ export default async function Home (props: PropsType) {
{ img: '/home/case_3.png' }, { img: '/home/case_3.png' },
] ]
return <> return <>
<div className="min-w-[1440px]"> <div className='w-full'>
<Header dict={dict} lang={lang} /> <div className="w-[1440px] mx-auto">
<section id="home"> <Header dict={dict} lang={lang} />
<div className="w-full h-[770px] bg-[url('/home/img_header.png')] bg-right bg-no-repeat pt-[279px] pl-[172px]"> <section id="home">
<div <div className="w-full h-[770px] bg-[url('/home/img_header.png')] bg-right bg-no-repeat pt-[279px] pl-[172px]">
className="text-[46px] leading-[62px] w-[368px] text-center"
>
<div <div
className="font-black" className="text-[46px] leading-[62px] w-[368px] text-center"
style={{ >
'background': 'linear-gradient(106deg, #8EC2EA 0%, #4174ED 93%)', <div
'backgroundClip': 'text', className="font-black"
'WebkitTextFillColor': 'transparent' style={{
}}> 'background': 'linear-gradient(106deg, #8EC2EA 0%, #4174ED 93%)',
{dict.FocusingOnPlayableAds} 'backgroundClip': 'text',
</div> 'WebkitTextFillColor': 'transparent'
<div }}>
className="font-black" {dict.FocusingOnPlayableAds}
style={{
'background': 'linear-gradient(106deg, #8EC2EA 0%, #4174ED 93%)',
'backgroundClip': 'text',
'WebkitTextFillColor': 'transparent'
}}>
{dict.goOverseas}
</div>
</div>
</div>
</section>
<div className="w-full h-[428px] relative">
<img
src="/home/img_bg2.png"
width={745}
height={428}
alt=""
/>
<div className="absolute w-[770px] text-[32px] top-[184px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.customized }
</div>
</div>
<div className="w-full h-[403px] relative">
<img
className="absolute right-[0]"
src="/home/img_AB.png"
width={787}
height={403}
alt=""
/>
<div className="absolute w-[662px] text-[32px] top-[160px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.ABTesting}
</div>
<div className="absolute w-[680px] text-[32px] top-[204px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.iterateGameplay }
</div>
</div>
<div className="w-full h-[392px] relative">
<img
className="absolute"
src="/home/img_mutilan.png"
width={698}
height={392}
alt=""
/>
<div className="absolute w-[520px] text-[32px] top-[197px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.multiLanguage }
</div>
<div className="absolute w-[510px] text-[32px] top-[242px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.breakingGeographical }
</div>
</div>
<div className="w-full h-[317px] relative mt-[83px]">
<img
className="absolute right-[0]"
src="/home/img_Omnichannel.png"
width={742}
height={317}
alt=""
/>
<div className="absolute w-[680px] text-[32px] top-[124px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.allChannel }
</div>
<div className="absolute w-[680px] text-[32px] top-[169px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.expandInfluence }
</div>
</div>
<div className="w-full h-[317px] relative mt-[83px]">
<img
className="absolute"
src="/home/img_3.png"
width={881}
height={357}
alt=""
/>
<div className="absolute w-[610px] text-[32px] top-[100px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.lightweightDeployment }
</div>
<div className="absolute w-[600px] text-[32px] top-[145px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.simplifyProcess }
</div>
</div>
<section id="service">
<div className="w-full flex flex-col justify-center items-center mt-[98px]">
<div
className="leading-[34px] text-[36px] font-black w-[150px] mb-[11px]"
style={{
background: 'linear-gradient(90deg, #93BBE6 0%, #4C76E4 100%)',
backgroundClip: 'text',
WebkitTextFillColor: 'transparent'
}}
>{ dict.caseGallery }</div>
<div className="text-[19px] text-[#59676C]">{ dict.clickNow }</div>
</div>
</section>
<section id="case">
<div className="w-full px-[40px] flex flex-wrap justify-center gap-[50px] mt-[34px] mb-[83px]">
{
caseList.map((item: CaseType, index: number) => {
return <div key={'key'+index} className="cursor-pointer">
<img
className="hover:scale-[1.17] hover:shadow-[0px_0px_20px_8px_#0988FF] rounded-[60px]
transition ease-in-out duration-300"
src={item.img}
width={300}
height={300}
alt=""
/>
</div> </div>
}) <div
} className="font-black"
<div className="w-[300px] h-[300px] flex flex-col justify-center items-center style={{
text-[30px] text-[#3d3d3d] cursor-pointer rounded-[60px]" 'background': 'linear-gradient(106deg, #8EC2EA 0%, #4174ED 93%)',
style={{background: 'radial-gradient(61% 61% at 50% 50%, #FFFFFF 46%, #E1E1E1 100%)'}}> 'backgroundClip': 'text',
<div>{ dict.seeMore }</div> 'WebkitTextFillColor': 'transparent'
<div>{ dict.contactUs! }</div> }}>
{dict.goOverseas}
</div>
</div>
</div> </div>
</div> </section>
</section> <section id="service">
<section id="contact"> <div className="w-full h-[428px] relative">
<div className="w-full flex flex-col justify-center items-center mt-[98px] mb-[59px]"> <img
<div src="/home/img_bg2.png"
className="leading-[34px] text-[36px] font-black w-[150px] mb-[11px]" width={745}
style={{ height={428}
background: 'linear-gradient(90deg, #93BBE6 0%, #4C76E4 100%)', alt=""
backgroundClip: 'text',
WebkitTextFillColor: 'transparent' />
}} <div className="absolute w-[770px] text-[32px] top-[184px] right-[115px] text-[#333333] text-right font-semibold">
>{ dict.contactUs }</div> { dict.customized }
</div> </div>
<div className="w-full mb-[60px]"> </div>
<Form /> </section>
</div> <div className="w-full h-[403px] relative">
<div className="w-full flex justify-center text-[19px] text-[#59676C] mb-[99px]"> <img
{ dict.businessCooperation }info@soyootech.com className="absolute right-[0]"
</div> src="/home/img_AB.png"
width={787}
height={403}
alt=""
/>
<div className="absolute w-[662px] text-[32px] top-[160px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.ABTesting}
</div>
<div className="absolute w-[680px] text-[32px] top-[204px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.iterateGameplay }
</div>
</div>
<div className="w-full h-[392px] relative">
<img
className="absolute"
src="/home/img_mutilan.png"
width={698}
height={392}
alt=""
/>
<div className="absolute w-[520px] text-[32px] top-[197px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.multiLanguage }
</div>
<div className="absolute w-[510px] text-[32px] top-[242px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.breakingGeographical }
</div>
</div>
<div className="w-full h-[317px] relative mt-[83px]">
<img
className="absolute right-[0]"
src="/home/img_Omnichannel.png"
width={742}
height={317}
alt=""
/>
<div className="absolute w-[680px] text-[32px] top-[124px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.allChannel }
</div>
<div className="absolute w-[680px] text-[32px] top-[169px] left-[165px] text-[#333333] text-left font-semibold">
{ dict.expandInfluence }
</div>
</div>
<div className="w-full h-[317px] relative mt-[83px]">
<img
className="absolute"
src="/home/img_3.png"
width={881}
height={357}
alt=""
/>
<div className="absolute w-[610px] text-[32px] top-[100px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.lightweightDeployment }
</div>
<div className="absolute w-[600px] text-[32px] top-[145px] right-[115px] text-[#333333] text-right font-semibold">
{ dict.simplifyProcess }
</div>
</div>
<div className="w-full flex flex-col justify-center items-center mt-[98px]">
<div
className="leading-[34px] text-[36px] font-black w-[150px] mb-[11px]"
style={{
background: 'linear-gradient(90deg, #93BBE6 0%, #4C76E4 100%)',
backgroundClip: 'text',
WebkitTextFillColor: 'transparent'
}}
>{ dict.caseGallery }</div>
<div className="text-[19px] text-[#59676C]">{ dict.clickNow }</div>
</div>
<section id="case">
<div className="w-full px-[40px] flex flex-wrap justify-center gap-[50px] mt-[34px] mb-[83px]">
{
caseList.map((item: CaseType, index: number) => {
return <div key={'key'+index} className="cursor-pointer">
<img
className="hover:scale-[1.17] hover:shadow-[0px_0px_20px_8px_#0988FF] rounded-[60px]
transition ease-in-out duration-300"
src={item.img}
width={300}
height={300}
alt=""
/>
</div>
})
}
<div className="w-[300px] h-[300px] flex flex-col justify-center items-center
text-[30px] text-[#3d3d3d] cursor-pointer rounded-[60px]"
style={{background: 'radial-gradient(61% 61% at 50% 50%, #FFFFFF 46%, #E1E1E1 100%)'}}>
<div>{ dict.seeMore }</div>
<div>{ dict.contactUs1 }</div>
</div>
</div>
</section> </section>
<div> <section id="contact">
<Footer dict={dict} /> <div className="w-full flex flex-col justify-center items-center mt-[98px] mb-[59px]">
<div
className="leading-[34px] text-[36px] font-black w-[150px] mb-[11px]"
style={{
background: 'linear-gradient(90deg, #93BBE6 0%, #4C76E4 100%)',
backgroundClip: 'text',
WebkitTextFillColor: 'transparent'
}}
>{ dict.contactUs }</div>
</div>
<div className="w-full mb-[60px]">
<Form />
</div>
<div className="w-full flex justify-center text-[19px] text-[#59676C] pb-[52px] mb-[47px] border-b-1 border-solid border-[#D8D8D8]"
style={{ borderBottom: '1px solid #D8D8D8' }}
>
{ dict.businessCooperation }info@soyootech.com
</div>
</section>
<div>
<Footer dict={dict} />
</div>
</div> </div>
</div> </div>
</> </>

View File

@ -2,6 +2,7 @@
import Link from "next/link"; import Link from "next/link";
import { useState } from "react"; import { useState } from "react";
type NavType = { type NavType = {
name: string; name: string;
href: string; href: string;
@ -23,6 +24,7 @@ function SplitButton(props: {dict: Record<string, string>, lang: string}) {
/> />
<div className="flex-1 text-[14px] text-[#333333] mx-[9px]">{ dict?.lang }</div> <div className="flex-1 text-[14px] text-[#333333] mx-[9px]">{ dict?.lang }</div>
<img <img
className={`transition-transform duration-300 transform rotate-0 ${show && 'rotate-180'}`}
src="/common/arrow.png" src="/common/arrow.png"
width={10} width={10}
height={5} height={5}
@ -30,13 +32,12 @@ function SplitButton(props: {dict: Record<string, string>, lang: string}) {
/> />
</div> </div>
{ {
show && ( <Link href={lang === 'zh' ? '/en/home.html' : '/index.html'}>
<Link href={lang === 'en' ? '/zh/home' : '/en/home'}> <div className={`absolute ${!show && 'hidden'} top-[30px] w-[129px] h-[28px]
<div className="absolute top-[30px] w-[129px] h-[28px] bg-[#EEF1F6] text-center"> bg-[#EEF1F6] text-center transition-all duration-300 origin-top group-hover:block`}>
<div>{dict?.lang1}</div> <div className="text-[14px] text-[#333333]">{dict?.lang1}</div>
</div> </div>
</Link> </Link>
)
} }
</div> </div>
</> </>
@ -63,7 +64,9 @@ export default function Header(props: {dict: Record<string, string>, lang: strin
}, },
] ]
return (<> return (<>
<div className={"flex items-center px-[20px] h-[80px]"}> <div className={"flex items-center px-[20px] h-[80px] border-b-1 border-solid border-[#D8D8D8]"}
style={{ borderBottom: '1px solid #D8D8D8' }}
>
<img <img
src="/common/logo.png" src="/common/logo.png"
width={180} width={180}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -15,17 +15,11 @@ const geistMono = localFont({
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
title: "soyoo", title: "北京索游科技",
description: "Generated by create next app", description: "Generated by create next app",
}; };
function RootLayout({ children }:{ children: ReactNode } ): ReactElement { function RootLayout({ children }:{ children: ReactNode } ): ReactElement {
// const languages = navigator.languages;
// if(languages[0] === 'zh-CN') {
// redirect('/zh/home')
// } else {
// redirect('/en/home')
// }
return ( return (
<html lang="en"> <html lang="en">
<body <body

View File

@ -18,7 +18,7 @@
"simplifyProcess": "Simplify the user decision-making process, easy to track the progress of each stage", "simplifyProcess": "Simplify the user decision-making process, easy to track the progress of each stage",
"clickNow": "Click on the icon to experience it now", "clickNow": "Click on the icon to experience it now",
"seeMore": "Want to see more?", "seeMore": "Want to see more?",
"contactUs!": "Contact us!", "contactUs1": "Contact us!",
"businessCooperation": "Business Cooperation/Job Hunting:", "businessCooperation": "Business Cooperation/Job Hunting:",
"addWeChat": "Add WeChat to enjoy exclusive services", "addWeChat": "Add WeChat to enjoy exclusive services",
"emailContact": "Email Contact", "emailContact": "Email Contact",

View File

@ -18,7 +18,7 @@
"simplifyProcess": "简化用户决策流程,方便追踪各阶段进度", "simplifyProcess": "简化用户决策流程,方便追踪各阶段进度",
"clickNow": "点击图标 立即体验", "clickNow": "点击图标 立即体验",
"seeMore": "想看更多?", "seeMore": "想看更多?",
"contactUs!": "联系我们!", "contactUs1": "联系我们!",
"businessCooperation": "商务合作/求职:", "businessCooperation": "商务合作/求职:",
"addWeChat": "添加微信,享受专属服务", "addWeChat": "添加微信,享受专属服务",
"emailContact": "邮件联系", "emailContact": "邮件联系",