Commit 7a941171 authored by mxm-web-develop's avatar mxm-web-develop

update about

parent 84df138d
NODE_ENV=dev NODE_ENV=dev
VITE_FETCH_URL = http://localhost:3000 VITE_FETCH_URL = http://192.168.31.12:3000/
\ No newline at end of file \ No newline at end of file
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"ahooks": "^3.4.1", "ahooks": "^3.4.1",
"axios": "^0.27.2", "axios": "^0.27.2",
"gsap": "^3.10.4", "gsap": "^3.10.4",
"lodash": "^4.17.21",
"pixi-filters": "^4.1.6", "pixi-filters": "^4.1.6",
"pixi.js": "^6.4.2", "pixi.js": "^6.4.2",
"react": "^18.0.0", "react": "^18.0.0",
...@@ -28,6 +29,7 @@ ...@@ -28,6 +29,7 @@
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/line-clamp": "^0.4.0", "@tailwindcss/line-clamp": "^0.4.0",
"@types/lodash": "^4.14.182",
"@types/node": "^17.0.31", "@types/node": "^17.0.31",
"@types/react": "^18.0.0", "@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0", "@types/react-dom": "^18.0.0",
......
import { useCallback } from "react"; import { useCallback, useMemo } from "react";
import { CheckIcon,XIcon } from '@heroicons/react/solid' import { CheckIcon, XIcon } from "@heroicons/react/solid";
import { IProps } from "@/common/Iprops.interface";
interface ItemType { export interface ItemType {
module:string module: string;
service:string service: string;
function:string function: string;
dev:boolean dev: boolean;
test:boolean test: boolean;
} }
interface DetailsExceTableType extends IProps {
const data = [ data: ItemType[] | any;
{ }
module:'BAAS平台-前台功能', export const DetailsExceTable = (props: DetailsExceTableType) => {
service:'联盟链管理', const getData = useCallback(
function:'支持在用户自卑主机上(至少4台主机)部署联盟链,支持联盟链删除', (d: ItemType, index: number) => {
dev:true, const parent = (props.data as unknown as ItemType[])[index-1]
test:false, const res = (
}, <tr key={index + Math.random()}>
{ {Object.entries(d).map((v, i) => {
module:'BAAS平台-前台功能', if (v[0] !== "id") {
service:'联盟链管理', if (!parent) {
function:'支持已经存在的chain33联盟链导入BAAS系统', if (i === 3 || i === 4) {
dev:true, return (
test:true, <td
}, key={i + Math.random()}
{ className="border-l border-r border-b px-3 py-2"
module:'BAAS平台-前台功能', >
service:'联盟链管理', {v[1] ? (
function:'支持联盟的创建,联盟成员管理,支持多个不同联盟成员之间组成联盟链', <CheckIcon className="w-5 h-5 text-green-600" />
dev:true, ) : (
test:true, <XIcon className="w-5 h-5 text-red-600" />
}, )}
{ </td>
module:'BAAS平台-前台功能', );
service:'联盟链管理', }
function:'支持快速建链(联盟只有一家企业的特殊情况可以一键建链,省略中间的联盟操作', return (
dev:true, <td key={i + Math.random()} className="border-l border-r px-3 py-2">
test:true, {v[1]}
}, </td>
{ );
module:'BAAS平台-前台功能', } else {
service:'联盟链管理', if (i === 3 || i === 4) {
function:'支持查看联盟链所有节点,支持联盟链节点的增加和删除能力', return (
dev:true, <td
test:true, key={i + Math.random()}
}, className="border-l border-r border-b px-3 py-2"
{ >
module:'BAAS平台-前台功能', {v[1] ? (
service:'联盟链管理', <CheckIcon className="w-5 h-5 text-green-600" />
function:'支持修改节点权限(验证节点切换成共识节点或共识节点切换成验证节点)', ) : (
dev:true, <XIcon className="w-5 h-5 text-red-600" />
test:true, )}
}, </td>
{ );
module:'BAAS平台-前台功能', } else {
service:'联盟链管理', const type = v[0] as keyof ItemType;
function:'支持联盟链节点的监控(运行状态、同步状态、TPS、区块高度、CPU占用、内存占用、节点负载等信)', if (parent[type] === d[type]) {
dev:true, return (
test:true, <td
}, key={i + Math.random()}
{ className="border-l border-r px-3 py-2"
module:'BAAS平台-前台功能', ></td>
service:'联盟链管理', );
function:'支持联盟链各种指标的告警策略以及告警通知能力', } else {
dev:true, return (
test:true, <td
}, key={i + Math.random()}
{ className="border-l border-r border-t border-b px-3 py-2"
module:'BAAS平台-前台功能', >
service:'平行链管理', {d[type]}
function:'支持在用户自备主机上(至少1台主机)部署平行链,支持平行链删除', </td>
dev:true, );
test:true }
},
];
export const DetailsExceTable = () => {
const getData = useCallback((d:ItemType,index:number)=>{
const parent = data[index-1] as ItemType
const res = <tr key={index + Math.random()}>
{
Object.entries(d).map((v,i)=>{
if(!parent){
if(i===3 || i===4){
return <td key={i + Math.random()} className='border-l border-r border-b px-2'>
{v[1]?<CheckIcon className="w-5 h-5 text-green-600"/>:<XIcon className="w-5 h-5 text-red-600" />}
</td>
}
return <td key={i + Math.random()} className='border-l border-r'>{v[1]}</td>
}else{
if(i===3 || i===4){
return <td key={i + Math.random()} className='border-l border-r border-b px-2'>
{v[1]?<CheckIcon className="w-5 h-5 text-green-600"/>:<XIcon className="w-5 h-5 text-red-600" />}
</td>
}else{
const type = v[0] as keyof ItemType
if(parent[type] === d[type]){
return <td key={i + Math.random()} className='border-l border-r px-2'></td>
}else{
return <td key={i + Math.random()} className='border-l border-r border-t border-b px-2'>{d[type]}</td>
} }
} }
} }
})}
}) </tr>
} );
</tr> return res;
return res },
},[]) [props.data]
);
return ( return (
<table className="table-auto w-full"> <table className="table-auto w-full border bg-white/20 backdrop-blur-lg">
<thead className=' bg-black text-white'> <thead className=" bg-black text-white">
<tr className="text-left "> <tr className="text-left ">
<th className='w-2/12 py-3 px-2 border-r border-white rounded-tl-lg'>模块</th> <th className="w-2/12 py-3 px-2 border-r border-white rounded-tl-lg">
<th className='w-3/12 py-3 px-2 border-r border-white'>服务</th> 模块
<th className='w-5/12 py-3 px-2 border-r border-white'>功能项</th> </th>
<th className='w-1/12 py-3 px-2 border-r border-white'>企业版</th> <th className="w-3/12 py-3 px-2 border-r border-white">服务</th>
<th className='w-1/12 py-3 px-2 border-r border-white rounded-tr-lg'>企业版</th> <th className="w-5/12 py-3 px-2 border-r border-white">功能项</th>
</tr> <th className="w-1/12 py-3 px-2 border-r border-white">企业版本</th>
</thead> <th className="w-1/12 py-3 px-2 border-r border-white rounded-tr-lg">
<tbody> 开发版本
{ </th>
data.map((i,index)=>getData(i,index)) </tr>
} </thead>
</tbody> <tbody>
</table> {props.data &&
props.data.length &&
(props.data as unknown as ItemType[]).map((i, index) =>
getData(i, index)
)}
</tbody>
</table>
); );
}; };
...@@ -57,12 +57,10 @@ export const DetailScrollView = (props: ScrollViewType) => { ...@@ -57,12 +57,10 @@ export const DetailScrollView = (props: ScrollViewType) => {
return ( return (
<div <div
className="slide-vertical h-full w-full" className="slide-vertical h-full w-full"
> >
<div className="vertical-wrapper h-full overflow-hidden relative" ref={wrapRef}> <div className="vertical-wrapper h-full pt-40 pb-40 overflow-hidden relative" ref={wrapRef}>
{children} {children}
</div> </div>
</div> </div>
); );
}; };
...@@ -37,7 +37,7 @@ export default function StyledButton (props: StyledButtonType) { ...@@ -37,7 +37,7 @@ export default function StyledButton (props: StyledButtonType) {
},[colorIs]) },[colorIs])
return ( return (
<button <button
className={`text-sm py-2 rounded-full px-8`} className={`text-sm py-2 tracking-widest cursor-pointer rounded-full px-8`}
style={{ style={{
color:colorStyle.text, color:colorStyle.text,
backgroundColor:colorStyle.bgColor backgroundColor:colorStyle.bgColor
......
import { IProps } from "@/common/Iprops.interface";
interface VerticalTextType extends IProps{
text: string;
containerStyle?: string;
itemStyle?: string;
}
export const VerticalText = (props: VerticalTextType)=>{
const {text,containerStyle,itemStyle} = props;
const textArr = text.split('')
return(
<div className={`grid-cols-1 ${containerStyle}`}>
{
textArr&&textArr.map((i,index)=>(
<div className={itemStyle} key={index}>
{i}
</div>
))
}
</div>
)
}
\ No newline at end of file
...@@ -84,4 +84,24 @@ export const baasBalls = [ ...@@ -84,4 +84,24 @@ export const baasBalls = [
} }
] ]
export const detailsBalls=[] export const detailsBalls=[
\ No newline at end of file {
page: 0,
setting: [
{
size: "10%",
position: ["-50px", "75%"],
rotation: "210",
zIndex: "9999",
color: "white",
},
{
size: "20%",
align: "right",
position: ["8%", "45%"],
zIndex: "-1",
color: "blue",
},
]
}
]
\ No newline at end of file
...@@ -75,5 +75,27 @@ export const baasBg = [ ...@@ -75,5 +75,27 @@ export const baasBg = [
] ]
export const detailsBg = [ export const detailsBg = [
{
page:0,
config:[
{
size: ["60%","45%"],
position: ["10%", "35%"],
align:'left',
zIndex: "-99",
rotation:'180',
color: "cyan",
blur:'100px'
},
{
size:[ "80%",'45%'],
align: "left",
position: ["85px", "13%"],
rotation:'-0',
zIndex: "-180",
color: "blue",
blur:'150px'
}
]
}
] ]
\ No newline at end of file
...@@ -2,18 +2,10 @@ ...@@ -2,18 +2,10 @@
import axios,{ AxiosRequestConfig,AxiosInstance,AxiosPromise } from 'axios'; import axios,{ AxiosRequestConfig,AxiosInstance,AxiosPromise } from 'axios';
export const baseURL = import.meta.env.VITE_FETCH_URL
export const axiosRequestConfiguration: AxiosRequestConfig = {
baseURL,
responseType: 'json',
headers: {
'Content-Type': 'application/json',
},
};
export const initialization = (config: AxiosRequestConfig): AxiosInstance => { export const initialization = (config: AxiosRequestConfig): AxiosInstance => {
const axiosInstance = axios.create(config); const axiosInstance = axios.create(config)
return axiosInstance; return axiosInstance
}; };
// export default initialization; // export default initialization;
\ No newline at end of file
import { AxiosRequestConfig } from "axios";
import { initialization } from "./axios";
export const baseURL = import.meta.env.VITE_FETCH_URL
export const axiosRequestConfiguration: AxiosRequestConfig = {
baseURL,
responseType: 'json',
headers: {
'Content-Type': 'application/json',
},
};
const req = initialization(axiosRequestConfiguration)
export const fetchProduct =async (productId:string) =>{
const res=await req.get(`products/${productId}`)
if(res&&res.status==200){
return res.data
}else{
throw new Error('network went wrong')
}
}
export const getJobs = async(department?: string)=>{
let res
if(department){
res = await req.get(`jobs?department=${department}`)
}else{
res = await req.get(`jobs`)
}
if(res&&res.status==200){
return res.data
}else{
throw new Error('network went wrong')
}
}
\ No newline at end of file
...@@ -3,7 +3,6 @@ import {ajax} from "rxjs/ajax" ...@@ -3,7 +3,6 @@ import {ajax} from "rxjs/ajax"
import { map , catchError } from 'rxjs/operators' import { map , catchError } from 'rxjs/operators'
import axios,{ AxiosRequestConfig,AxiosInstance,AxiosPromise } from 'axios'; import axios,{ AxiosRequestConfig,AxiosInstance,AxiosPromise } from 'axios';
import { axiosRequestConfiguration, initialization } from './axios';
// export const baseURL = import.meta.env.VITE_FETCH_URL // export const baseURL = import.meta.env.VITE_FETCH_URL
...@@ -15,6 +14,7 @@ import { axiosRequestConfiguration, initialization } from './axios'; ...@@ -15,6 +14,7 @@ import { axiosRequestConfiguration, initialization } from './axios';
// }, // },
// }; // };
const axiosInstance = (options: AxiosRequestConfig)=> initialization(Object.assign(axiosRequestConfiguration,options))(options) // export const axiosInstance:AxiosInstance = (options?: AxiosRequestConfig)=> initialization(Object.assign(axiosRequestConfiguration,options))(options?options:{})
...@@ -10,7 +10,7 @@ interface AppContianerType extends IProps{ ...@@ -10,7 +10,7 @@ interface AppContianerType extends IProps{
export const AppContianer=(props:AppContianerType)=>{ export const AppContianer=(props:AppContianerType)=>{
const {children,bgColor,className} = props const {children,bgColor,className} = props
return( return(
<div className={`px-28 relative w-full ${className}`}> <div className={` px-28 labtop:px-[16rem] relative w-full ${className}`}>
{children} {children}
</div> </div>
) )
......
...@@ -8,16 +8,19 @@ ...@@ -8,16 +8,19 @@
@layer components{ @layer components{
.hero-title{ .hero-title{
@apply text-[78px] labtop:text-[68px] sreen:text-[90px] tracking-wider font-bold font-galano leading-[90px] @apply text-theme-dark text-[78px] labtop:text-[68px] screen:text-[90px] tracking-wider font-bold font-galano leading-[90px]
} }
.sub-title-cn{ .sub-title-cn{
@apply text-[16px] labtop:text-[26px] sreen:text-[30px] tracking-wide font-mono font-bold sreen:py-3 py-1 @apply text-theme-dark text-[16px] labtop:text-[26px] screen:text-[30px] tracking-wide font-mono font-bold screen:py-3 py-1
} }
.content-title-cn{ .content-title-cn{
@apply text-[22px] labtop:text-[22px] sreen:text-[24px] tracking-wide font-mono font-bold py-3 @apply text-theme-dark text-[22px] labtop:text-[22px] screen:text-[24px] tracking-wide font-mono font-bold py-3
}
.content-sub-title-cn{
@apply text-theme-dark text-[14px] labtop:text-[16px] tracking-wide font-mono font-bold py-3
} }
.normal-text{ .normal-text{
@apply text-[12px] labtop:text-[14px] sreen:text-[14px] tracking-wide font-mono font-normal py-3 @apply opacity-80 text-[12px] labtop:text-[14px] screen:text-[14px] tracking-wide font-mono font-normal
} }
.des-cn{ .des-cn{
@apply font-mono font-light @apply font-mono font-light
...@@ -27,7 +30,7 @@ ...@@ -27,7 +30,7 @@
} }
.featuresGrid{ .featuresGrid{
@apply grid grid-cols-2 w-10/12 gap-y-[1rem] gap-x-[1rem] sreen:gap-y-[5rem] sreen:gap-x-[10rem] @apply grid grid-cols-2 w-full labtop:w-10/12 gap-y-[1rem] gap-x-[3.5rem] screen:gap-y-[5rem] screen:gap-x-[10rem]
} }
} }
......
import { IProps } from "@/common/Iprops.interface"
import { Job } from "@/service/types"
interface HireScrollBoardType extends IProps {
list: Job[],
onJobIdChange: (id: string) => void
}
export const HireBoard = (props: HireScrollBoardType) => {
const handleHireClick = (jobId: string) => {
props.onJobIdChange(jobId)
}
return (
<div className=" grid grid-cols-2 gap-y-6 gap-x-6">
{
props.list.map((item, index) => {
return (
<div key={index}
onClick={() => handleHireClick(item.id!)}
className=" pl-2 pr-5 hover:bg-white/30 hover:backdrop-blur-md cursor-pointer border-2 border-transparent hover:border-yellow-100">
<div>{item.title}</div>
<div>{item.diploma}</div>
<div>{item.location}</div>
</div>
)
})
}
</div>
)
}
\ No newline at end of file
import { useAsyncState } from "@/common/hooks"
import { IProps } from "@/common/Iprops.interface"
import { getJobsById } from "@/service/api"
import { Job } from "@/service/types"
import { useEffect, useState } from "react"
interface HireDetailType extends IProps {
jobId: string
}
export const HireDetail = (props: HireDetailType) => {
/* get detail */
const [jobDetail,setJobDetail] = useAsyncState({} as Job)
useEffect(()=>{
const getDetail = async ()=>{
const detail = await getJobsById(props.jobId)
setJobDetail(detail)
}
getDetail()
},[])
const goToHire = (id: string) => {
console.log(id);
}
return (
<div>
{jobDetail &&
<div>
<div >
{jobDetail.title}
<button type="button" className=" ml-10 px-5 py-2 bg-black text-white" onClick={() => goToHire(jobDetail.id!)}>我要应聘</button>
</div>
<div>{jobDetail.diploma}</div>
<div>{jobDetail.location}</div>
<div>
<div>岗位描述</div>
<div>{jobDetail.requirments}</div>
</div>
<div>
<div>岗位要求</div>
<div>
{jobDetail.demands}
</div>
</div>
</div>
}
</div>
)
}
\ No newline at end of file
import { IProps } from "@/common/Iprops.interface" import { IProps } from "@/common/Iprops.interface";
import { AppContianer } from "@/layouts/AppContianer" import { AppContianer } from "@/layouts/AppContianer";
import { useEffect, useMemo, useState } from "react" import { useEffect, useMemo, useState } from "react";
import { hireNav } from './context' import { hireNav } from "./context";
import { HireDetail } from "./HireDetail" import { differenceBy as _differenceBy } from "lodash";
import { HireBoard } from "./HireBoard" import { ChevronRightIcon,ChevronLeftIcon } from "@heroicons/react/solid";
import { getJobsByDept } from "@/service/api"
import { useAsyncState } from "@/common/hooks"
import { Job } from "@/service/types"
interface JoinUsType extends IProps {
import { getJobsByDept } from "@/service/api";
import { useAsyncState } from "@/common/hooks";
import { Job } from "@/service/types";
import { getJobs } from "@/fetch/dataFetch";
import StyledButton from "@/components/StyledButton";
interface DataGridType extends IProps {
data: any[];
doSetSelecteItem: (id: string) => any;
} }
interface DtailContainerType extends IProps {
interface HireNavType extends IProps { data: any;
onCurrentItemChanges: (curr: string) => void, doCancelSelecteItem: (id: undefined) => any;
hireList: typeof hireNav
} }
const HireNav = (props: HireNavType) => { const DataGrid = (props: DataGridType) => {
const [currentNav, setCurrentNav] = useState<string>('技术部门') const { data, doSetSelecteItem,className } = props;
const handleItemClick = (text: string) => {
setCurrentNav(text)
props.onCurrentItemChanges(text)
}
return ( return (
<div> <div className={`grid grid-cols-2 labtop:grid-cols-3 gap-11 ${className}`}>
{ {data?.map((i, index) => (
props.hireList.map((item, index) => { <div
return ( key={index}
<div key={index} onClick={() => doSetSelecteItem(i.id)}
onClick={() => handleItemClick(item.text)} className="job-item min-w-[300px] cursor-pointer flex items-center justify-between gap-x-3 border px-5 py-2"
className={`py-5 my-5 cursor-pointer ${currentNav === item.text ? ' text-gray-800 font-semibold' : ' text-gray-500'}`} >{item.text}</div> >
) <div>
}) <div className="content-title-cn">{i.title}</div>
} <div className='normal-text'>{i.diploma}</div>
<div className='normal-text'>{i.location}</div>
</div>
<div>
<ChevronRightIcon className="w-5 h-5"></ChevronRightIcon>
</div>
</div>
))}
</div> </div>
) );
} };
const DtailContainer = (props: DtailContainerType) => {
const { doCancelSelecteItem, data,className } = props;
return (
<div className={className}>
<div className={`flex hover:text-theme-blue items-center`}>
<ChevronLeftIcon className='w-5 h-5'></ChevronLeftIcon>
<div
onClick={() => doCancelSelecteItem(undefined)}
className=" cursor-pointer "
>
返回
</div>
</div>
<div className='py-3'>
<div className='flex justify-between'>
<div className='sub-title-cn'> {data.title}</div>
<StyledButton text='我要应聘' color="black"></StyledButton>
</div>
<div>{data.diploma}</div>
<div>{data.location}</div>
</div>
<div className='py-3'>
<div className='content-sub-title-cn'>岗位描述</div>
<div className="flex-col normal-text">
{data.requirments.split(";").map((i: string, index: number) => (
<div key={index}> - {i}</div>
))}
</div>
</div>
<div className='py-3'>
<div className='content-sub-title-cn'>岗位要求</div>
<div className="flex-col normal-text">
{data.demands.split(";").map((i: string, index: number) => (
<div key={index}> - {i}</div>
))}
</div>
</div>
</div>
);
};
export const JoinUs = () => { export const JoinUs = () => {
/* handle nav switch */ const [data, setData] = useState<any[]>();
const [current, setCurrent] = useState(hireNav[0].text) const [selecteData, setSelecteData] = useState<any[]>();
const handleNavChanges = async(curr: string) => { const [activedDepartment, setActivedDepartment] = useState("技术部门");
setCurrent(curr) const [selecteItem, setSelecteItem] = useState<string | undefined>();
await setJobList(getJobsByDept(curr))
setJobId(undefined)
}
/* handle click to see detail */
const [jobId, setJobId] = useState<string>()
const handleHireClick = (id: string) => {
setJobId(id)
}
/* handle go back */
const goBack = () => {
setJobId(undefined)
}
/* fetch jobs */
const [jobList, setJobList] = useAsyncState([])
useEffect(() => { useEffect(() => {
const fetchData = async () => { (async () => {
const res = await getJobsByDept('技术部门'); const res = await getJobs();
await setJobList(res); setData(res);
}; })();
fetchData();
}, []); }, []);
useEffect(() => {
(async () => {
const res = await getJobs(activedDepartment);
setSelecteData(res);
})();
}, [activedDepartment]);
const departments = useMemo(() => {
if (data) {
return data.reduce((list, item) => {
if (list.includes(item["department"])) {
return list;
} else {
list.push(item["department"]);
return list;
}
}, []);
} else {
return [];
}
}, [data]);
const selectedItem = useMemo(() => {
return data?.filter((i) => i.id === selecteItem)[0];
}, [selecteItem]);
return ( return (
<AppContianer> <>
<div className=" pt-16 flex justify-between"> <div className="py-12">
<div className="left"> <div className="hero-title">Join us</div>
<HireNav hireList={hireNav} onCurrentItemChanges={(curr) => { handleNavChanges(curr) }} /> <div className="sub-title-cn">加入我们</div>
</div> </div>
<div className="right w-9/12"> <div className="h-full w-full flex gap-x-16">
<div className="header"> <div className='min-w-[100px]'>
<div className=" text-6xl font-bold">Join Us</div> <div className="flex-col">
<div className=" text-4xl font-bold">加入我们</div>
</div>
<div> {departments.map((i: string) => (
{ <div
jobId ? key={i}
<div> onClick={() => {
<button type="button" onClick={goBack} >返回</button> selecteItem ? "" : setActivedDepartment(i);
<HireDetail jobId={jobId} /> }}
</div> className={`item cursor-pointer my-5 ${
: <HireBoard list={jobList} onJobIdChange={(jobId) => { handleHireClick(jobId) }} /> activedDepartment !== i ? "text-gray-500" : "text-black"
} }`}
</div> >
{i}
</div>
))}
</div>
</div> </div>
<div className="flex-col w-full">
{selecteItem ? (
<DtailContainer
className="min-h-[520px] w-7/12 labtop:w-6/12 screen:w-5/12"
doCancelSelecteItem={setSelecteItem}
data={selectedItem}
></DtailContainer>
) : (
<DataGrid
className='w-10/12 labtop:w-11/12 screen:w-5/12'
data={selecteData ? selecteData : []}
doSetSelecteItem={setSelecteItem}
></DataGrid>
)}
</div>
</div> </div>
</AppContianer> </>
) );
} };
\ No newline at end of file
...@@ -11,89 +11,6 @@ interface MemorabiliaType extends IProps { ...@@ -11,89 +11,6 @@ interface MemorabiliaType extends IProps {
} }
interface MemoCardType extends IProps {
year: string,
month: string,
event: string
}
const memorabilias = [
{
year: '2022',
month: '07',
event: 'any'
},
{
year: '2022',
month: '06',
event: 'any'
},
{
year: '2022',
month: '05',
event: 'any'
},
{
year: '2022',
month: '04',
event: 'any'
},
{
year: '2022',
month: '03',
event: 'any'
},
{
year: '2022',
month: '02',
event: 'any'
},
{
year: '2022',
month: '01',
event: 'any'
},
{
year: '2022',
month: '04',
event: 'any'
},
{
year: '2022',
month: '04',
event: 'any'
},
{
year: '2022',
month: '04',
event: 'any'
},
{
year: '2022',
month: '07',
event: 'any'
},
{
year: '2022',
month: '06',
event: 'any'
},
{
year: '2022',
month: '05',
event: 'any'
},
]
const MemoCard = (props: MemoCardType) => {
return (
<div className=" h-60 bg-black text-white">
<div>{props.year}</div>
<div>{props.month}</div>
<div>{props.event}</div>
</div>
)
}
const initBScroll = (el: HTMLElement) => { const initBScroll = (el: HTMLElement) => {
const res = new BScroll(el, { const res = new BScroll(el, {
...@@ -111,139 +28,10 @@ const initBScroll = (el: HTMLElement) => { ...@@ -111,139 +28,10 @@ const initBScroll = (el: HTMLElement) => {
}; };
export const Memorabilia = () => { export const Memorabilia = () => {
//init scroll
BScroll.use(Slide)
const wrapRef = useRef<HTMLDivElement>(null);
const [scrollObj, setScrollObj] = useState<BScrollConstructor<{}>>();
const [currentPageIndex, setCurrentPageIndex] = useState(0)
useEffect(() => {
const scrollEl = initBScroll(wrapRef.current as HTMLDivElement)
setScrollObj(scrollEl)
return () => {
scrollObj?.destroy();
};
}, [wrapRef])
//handle slide will change
useEffect(() => {
const page = scrollObj?.plugins['slide'].pages.currentPage
page &&
setCurrentPageIndex((prevState: number) => {
if (prevState !== page.pageY) {
return page.pageX
}
return prevState
})
scrollObj?.on('slideWillChange', (page: any) => {
setCurrentPageIndex((prevState: number) => {
if (prevState !== page.pageX) {
return page.pageX
}
return prevState
})
})
}, [scrollObj])
//handle button to change slide
const [isMobile, setIsMobile] = useState({ matches: window.innerWidth > 640 ? true : false })
const [isTable, setIsTable] = useState({ matches: window.innerWidth > 961 ? true : false })
const [isLaptop, setIsLaptop] = useState({ matches: window.innerWidth > 1921 ? true : false })
useEffect(() => {
const queryMobile = window.matchMedia('(min-width:640px)')
queryMobile.addListener((e)=>setIsMobile({matches:e.matches}))
const queryTable = window.matchMedia('(min-width:961px)')
queryTable.addListener((e)=>setIsTable({matches:e.matches}))
const queryLaptop = window.matchMedia('(min-width:1921px)')
queryLaptop.addListener((e)=>setIsLaptop({matches:e.matches}))
return () => {
queryMobile.removeListener(setIsMobile)
queryTable.removeListener(setIsTable)
queryLaptop.removeListener(setIsLaptop)
}
},[])
const ITEMS_PER_PAGE = useMemo(() => {
if (isLaptop && isLaptop.matches) return 10
else if (isTable && isTable.matches) return 6
else if (isMobile && isMobile.matches) return 4
else return 2
}, [isLaptop,isTable,isMobile])
const ITEMS_PER_ROW = 2
const COLS_TOTAL = Math.ceil(ITEMS_PER_PAGE / ITEMS_PER_ROW)
const PAGE_TOTAL = memorabilias.length % ITEMS_PER_PAGE ? Math.floor(memorabilias.length / ITEMS_PER_PAGE) + 1 : memorabilias.length / ITEMS_PER_PAGE
const currentList = useMemo(() => {
const start = currentPageIndex * ITEMS_PER_PAGE
return memorabilias.slice(start, start + ITEMS_PER_PAGE)
}, [currentPageIndex])
const handlePageMove = (type: string) => {
if (type == 'pre') {
scrollObj!.prev()
}
else if (type == 'next') {
scrollObj!.next()
}
}
//memorabilias list
const listStyle = ((index: number) => {
const distance = 500 - 347
return {
marginTop: `${(distance / (COLS_TOTAL - 1) * index) / 16}rem`
}
})
const gridStyle = {
gridTemplateColumns: `repeat(${COLS_TOTAL}, minmax(0, 1fr))`
}
const list = (memorabilias: MemoCardType[]) => {
let arr = [] as Array<any>
for (var i = 0; i < memorabilias.length; i = i + 2) {
if (i !== memorabilias.length - 1) {
arr.push(
<div key={i} style={listStyle(i)} className="">
<MemoCard month={memorabilias[i].month} year={memorabilias[i].year} event={memorabilias[i].event} />
<div className=" mt-5">
<MemoCard month={memorabilias[i + 1].month} year={memorabilias[i + 1].year} event={memorabilias[i + 1].event} />
</div>
</div>
)
} else {
arr.push(
<div key={i} style={listStyle(i)}>
<MemoCard month={memorabilias[i].month} year={memorabilias[i].year} event={memorabilias[i].event} />
</div>
)
}
}
return (
<div className={`grid gap-x-4 mx-4`} style={gridStyle}>{arr}</div>
)
}
return ( return (
<AppContianer> <AppContianer>
<div className=" mt-16"> <div>123</div>
<div className=" float-right">
<div>Memorabilias</div>
<div>——大事记</div>
</div>
<div className="flex">
<button type="button" className=" h-10 px-5 ml-20 bg-gray-50" onClick={() => handlePageMove('pre')}>pre</button>
<div className="slide-banner-wrapper w-9/12 table:w-11/12 overflow-hidden" ref={wrapRef}>
<div className="slide-banner-content whitespace-nowrap w-full">
{
Array(PAGE_TOTAL).fill('').map((page, index) => {
return (
<div key={index} className=" inline-block w-full h-full">{list(currentList)}</div>
)
})
}
</div>
</div>
<button type="button" className=" h-10 px-5 bg-gray-100 " onClick={() => handlePageMove('next')}>next</button>
</div>
</div>
</AppContianer > </AppContianer >
) )
} }
\ No newline at end of file
import { VerticalText } from "@/components/VerticalText"
import { AppContianer } from "@/layouts/AppContianer" import { AppContianer } from "@/layouts/AppContianer"
const imgList = [ const imgList = [
{ url: 'hhh' }, 'aliyun',
{ url: 'hhh' }, 'azure',
{ url: 'hhh' }, 'beijingBlockchainApplicationAssociation',
{ url: 'hhh' }, 'caict',
{ url: 'hhh' }, 'cfca',
{ url: 'hhh' }, 'chinaAsean',
'chinaAssociationOfSmallEnterprises',
'chinaMobile',
'chineseElectronics',
'hanzhouAssociationOfBlockchainTechnologyAndApplication',
'hljSciences',
'huaqiaoUniversity',
'huaweiyun',
'hubeiDesign',
'jinshanyun',
'midea',
'shanghaijiaotong',
'southwestUniversity',
'stateGrid',
'TrustedBlockchainInitiatives',
'xiamenUnibersity',
'zhejiangBlockChainTechnologyApplicationAssociation',
'zhejiangDigitalEconomySociaty',
'zheshangAsset'
] ]
export const Partners = () => { export const Partners = () => {
return ( return (
<AppContianer> <AppContianer className='h-full'>
<div className="flex mt-16 "> <div className="flex h-full">
<div className=" grid grid-cols-4 w-3/4"> <div className='center w-10/12 flex items-center justify-center h-full'>
{imgList.map((img, index) => { <div className='grid grid-cols-4 gap-5 -translate-y-10'>
return ( {
<img src={img.url} key={index} /> imgList.map(i=> <img key={i} src={`/imgs/${i}.png`}></img>)
) }
})} </div>
</div> </div>
<div className="flex w-1/4 justify-end relative z-[1002]"> <div className="right w-2/12 z-[200000] pl-[3rem]">
<div className=" mx-0 mt-4 w-16 text-5xl">合作伙伴</div> <div className='flex pt-16'>
<div className=" mx-0 mt-0 break-words w-1 px-6 text-7xl items-start">Partners</div> <VerticalText text='合作伙伴' containerStyle="sub-title-cn py-5 px-5"/>
<VerticalText text='Partners' containerStyle="hero-title mt-6" itemStyle=" rotate-90 -my-[2.7rem]"/>
</div>
</div> </div>
</div> </div>
</AppContianer> </AppContianer>
) )
} }
\ No newline at end of file
...@@ -8,12 +8,14 @@ import { Contact } from "./Contact"; ...@@ -8,12 +8,14 @@ import { Contact } from "./Contact";
import { Partners } from "./Partners"; import { Partners } from "./Partners";
import { Memorabilia } from "./Memorabilia"; import { Memorabilia } from "./Memorabilia";
import { JoinUs } from "./JoinUs"; import { JoinUs } from "./JoinUs";
import { baasBalls } from "@/config/ballSetting";
import { baasBg } from "@/config/bgSetting";
const Description = () => { const Description = () => {
return ( return (
<div className="w-full"> <div className="w-full">
<div className="text-3xl mb-16 ">链上复杂美 上链不复杂</div> <div className="text-3xl mb-16 ">链上复杂美 上链不复杂</div>
<div className="paragraph max-w-[860px] min-w-[650px] tracking-wide leading-7 flex-col gap-y-4"> <div className="paragraph tracking-wide leading-7 flex-col gap-y-4">
<div> <div>
公司成立于2008年,2013年启动区块链、智能合约的研发与创新,2014年申请区块链发明专利:钱包找回功能。已累计申请了400多项区块链技术的发明专利,2019年据德温特专利家族统计,复杂美区块链发明专利排名位于全球第三,仅次于阿里巴巴和IBM。 公司成立于2008年,2013年启动区块链、智能合约的研发与创新,2014年申请区块链发明专利:钱包找回功能。已累计申请了400多项区块链技术的发明专利,2019年据德温特专利家族统计,复杂美区块链发明专利排名位于全球第三,仅次于阿里巴巴和IBM。
</div> </div>
...@@ -84,69 +86,47 @@ export default function About(props: any) { ...@@ -84,69 +86,47 @@ export default function About(props: any) {
zIndex: "1001", zIndex: "1001",
color: "blue", color: "blue",
}, },
] ],
}; };
return ( return (
<ScrollView> <ScrollView>
<div className="vertival-content "> <div className="vertival-content ">
<PageLayout> <PageLayout
<BallAnime config={demo.config}> ballConfig={baasBalls[1].setting}
<AppContianer> gradientConfig={baasBg[1].config}
<div className="flex py-10 mt-16"> >
<div className="left w-[34%] min-w-[520px] max-w-[560px]"> <AppContianer className="h-full -translate-y-[5rem]">
<img src={AboutImg} /> <div className="flex gap-x-[12rem] w-full h-full items-center">
</div> <div className="left w-4/12 screen:w-3/12 ">
<div className="right px-[10%] mt-8"> <img src={AboutImg} />
<Description></Description>
</div>
</div> </div>
</AppContianer> <div className="right w-8/12 screen:w-9/12 mt-8">
</BallAnime> <Description></Description>
</PageLayout> </div>
</div>
<PageLayout> </AppContianer>
<BallAnime config={demo.config2}>
<Memorabilia />
</BallAnime>
</PageLayout>
<PageLayout>
<BallAnime config={demo.config2}>
<AppContianer>
<div>patent</div>
</AppContianer>
</BallAnime>
</PageLayout> </PageLayout>
<PageLayout ballConfig={baasBalls[1].setting}
<PageLayout> gradientConfig={baasBg[1].config}>
<BallAnime config={demo.config2}> <Memorabilia />
<AppContianer>
<div>Honor</div>
</AppContianer>
</BallAnime>
</PageLayout> </PageLayout>
<PageLayout> <PageLayout ballConfig={baasBalls[1].setting}
<BallAnime config={demo.config2}> gradientConfig={baasBg[1].config}>
<AppContianer> <AppContianer>
<JoinUs/> <JoinUs />
</AppContianer> </AppContianer>
</BallAnime>
</PageLayout> </PageLayout>
<PageLayout> <PageLayout ballConfig={baasBalls[1].setting}
<BallAnime config={demo.config2}> gradientConfig={baasBg[1].config}>
<Contact /> <Contact />
</BallAnime>
</PageLayout> </PageLayout>
<PageLayout ballConfig={baasBalls[1].setting}
<PageLayout> gradientConfig={baasBg[1].config}>
<BallAnime config={demo.config2}> <Partners />
<Partners />
</BallAnime>
</PageLayout> </PageLayout>
</div> </div>
</ScrollView> </ScrollView>
......
...@@ -42,8 +42,8 @@ export const Advantages = (props: AdvantagesType)=>{ ...@@ -42,8 +42,8 @@ export const Advantages = (props: AdvantagesType)=>{
return( return(
<AppContianer> <AppContianer className='h-full'>
<div className="flex gap-x-[5rem]"> <div className="flex h-full items-center gap-x-[10vw] -translate-y-[15vh]">
<div className="left"> <div className="left">
<div className="sub-title-cn"> <div className="sub-title-cn">
功能特点 功能特点
......
import { IProps } from "@/common/Iprops.interface" import { IProps } from "@/common/Iprops.interface"
import { DetailsExceTable } from "@/components/DetailsExceTable" import { DetailsExceTable, ItemType } from "@/components/DetailsExceTable"
import { DetailScrollView } from "@/components/DtailScrollView" import { DetailScrollView } from "@/components/DtailScrollView"
import { detailsBalls } from "@/config/ballSetting"
import { detailsBg } from "@/config/bgSetting"
import { fetchProduct } from "@/fetch/dataFetch"
import { AppContianer } from "@/layouts/AppContianer" import { AppContianer } from "@/layouts/AppContianer"
import { PageLayout } from "@/layouts/PageLayout" import { PageLayout } from "@/layouts/PageLayout"
import { playGround } from "@/rxjs" import { playGround } from "@/rxjs"
import { useEffect } from "react" import { useEffect, useState } from "react"
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
interface DetailsType extends IProps{ interface DetailsType extends IProps{
...@@ -13,21 +16,27 @@ interface DetailsType extends IProps{ ...@@ -13,21 +16,27 @@ interface DetailsType extends IProps{
export const Details = (props:DetailsType)=>{ export const Details = (props:DetailsType)=>{
const {id} = useParams() const {id} = useParams()
playGround const [products,setProducts] = useState()
useEffect(()=>{
if(id){
(async ()=>{
const res = await fetchProduct(String(Number(id)+1))
const products = res[0].products
setProducts(products)
})()
}
},[id])
return( return(
// <DetailScrollView>
<PageLayout ballConfig={[]}> <PageLayout ballConfig={detailsBalls[0].setting} gradientConfig={detailsBg[0].config} className='overflow-y-scroll'>
<DetailScrollView> <AppContianer>
<AppContianer > <div>
<div className="h-[48px]"></div>
<div className=" overflow-y-hidden "> <DetailsExceTable data={products} />
<DetailsExceTable /> <div className="h-[260px]"></div>
</div>
</div> </AppContianer>
</AppContianer>
</DetailScrollView>
</PageLayout> </PageLayout>
// </DetailScrollView>
) )
} }
...@@ -41,9 +41,9 @@ export const Features = (props: FeaturesType)=>{ ...@@ -41,9 +41,9 @@ export const Features = (props: FeaturesType)=>{
return( return(
<AppContianer> <AppContianer className='h-full'>
<div className="flex"> <div className="flex items-center h-full">
<div className="left w-8/12 py-16"> <div className="left w-8/12 h-full py-16">
<div className="hero-title"> <div className="hero-title">
Functional Functional
<div className='clip-title'> <div className='clip-title'>
...@@ -54,11 +54,11 @@ export const Features = (props: FeaturesType)=>{ ...@@ -54,11 +54,11 @@ export const Features = (props: FeaturesType)=>{
功能特点 功能特点
</div> </div>
<div className='des-cn'>一键部署多样化区块链网络</div> <div className='des-cn'>一键部署多样化区块链网络</div>
<div className='flex relative justify-end pt-[10vh]'> <div className='flex relative justify-end pt-[5rem]'>
<FeaturesGrid></FeaturesGrid> <FeaturesGrid></FeaturesGrid>
</div> </div>
</div> </div>
<div className="right py-16 w-4/12 px-[10%]"> <div className="right py-16 h-full w-4/12 px-[10%]">
<div className="flex-col justify-center "> <div className="flex-col justify-center ">
<div className='max-w-[320px] min-w-[280px]'> <div className='max-w-[320px] min-w-[280px]'>
<div className='content-title-cn'>弹性扩展</div> <div className='content-title-cn'>弹性扩展</div>
......
export const HeroBaas = () => {
return (
export const HeroBaas =()=>{ <div className="w-screen h-full flex-col items-center justify-center translate-y-[20vh] table:-translate-y-[2vh]
labtop:-translate-y-[3vh]">
return( <div
<div className="w-screen h-full flex-col items-center justify-center translate-y-[15vh] table:translate-y-[1vh]"> className="hero-baas
<div className="hero-baas
w-full w-full
table:w-[120%] table:text-[29vw] text-[22vw] text-center table:text-left font-galano table:-translate-x-[2%] p-0 font-[500] ">Baas33</div> table:w-[120%] table:text-[29vw] text-[22vw] text-center table:text-left font-galano table:-translate-x-[2%] p-0 font-[500] "
<div className="text-center table:-translate-y-[10vh] flex justify-center gap-x-20 sub-title-cn"> >
<div>高效</div> Baas33
<div>稳定</div> </div>
<div>低成本</div> <div className="text-center table:-translate-y-[10vh] flex justify-center gap-x-20 sub-title-cn">
<div>安装便捷</div> <div>高效</div>
</div> <div>稳定</div>
<div>低成本</div>
<div>安装便捷</div>
</div>
</div> </div>
) );
};
}
\ No newline at end of file
import { IProps } from "@/common/Iprops.interface"; import { IProps } from "@/common/Iprops.interface";
import { VerticalText } from "@/components/VerticalText";
import { AppContianer } from "@/layouts/AppContianer"; import { AppContianer } from "@/layouts/AppContianer";
import { CheckIcon } from '@heroicons/react/solid' import { CheckIcon } from '@heroicons/react/solid'
import { useNavigate} from 'react-router-dom' import { useNavigate} from 'react-router-dom'
interface ServiceType extends IProps{ interface ServiceType extends IProps{
} }
interface VerticalTextType extends IProps{
text: string; // const VerticalText = (props: VerticalTextType)=>{
containerStyle?: string; // const {text,containerStyle,itemStyle} = props;
itemStyle?: string; // const textArr = text.split('')
} // return(
const VerticalText = (props: VerticalTextType)=>{ // <div className={`grid-cols-1 ${containerStyle}`}>
const {text,containerStyle,itemStyle} = props; // {
const textArr = text.split('') // textArr&&textArr.map((i,index)=>(
return( // <div className={itemStyle} key={index}>
<div className={`grid-cols-1 ${containerStyle}`}> // {i}
{ // </div>
textArr&&textArr.map((i,index)=>( // ))
<div className={itemStyle} key={index}> // }
{i} // </div>
</div> // )
)) // }
}
</div>
)
}
const ServiceList = ()=>{ const ServiceList = ()=>{
const navigate = useNavigate() const navigate = useNavigate()
const data =[ const data =[
...@@ -54,7 +51,7 @@ const ServiceList = ()=>{ ...@@ -54,7 +51,7 @@ const ServiceList = ()=>{
}) })
} }
return( return(
<div className=' px-8 grid grid-cols-3 gap-x-[3rem]'> <div className=' px-8 grid grid-cols-3 gap-x-[3rem] -translate-y-[5vh]'>
{ {
data.map((i,index)=>( data.map((i,index)=>(
<div key={index} className='relative py-8 px-10 <div key={index} className='relative py-8 px-10
...@@ -95,19 +92,17 @@ const ServiceList = ()=>{ ...@@ -95,19 +92,17 @@ const ServiceList = ()=>{
export const Service = (props: ServiceType)=>{ export const Service = (props: ServiceType)=>{
return( return(
<AppContianer className='h-full'> <AppContianer className='h-full'>
<div className="flex py-16 h-full"> <div className="flex h-full">
<div className='center w-10/12 flex items-center justify-center h-full'>
<div className='center w-10/12 flex items-center justify-center h-full'> <ServiceList />
<ServiceList /> </div>
</div> <div className="right w-2/12 z-[200000] pl-[3rem]">
<div className="right w-2/12 z-[200000] pl-[3rem]"> <div className='flex pt-16'>
<div className='flex'> <VerticalText text='服务版本' containerStyle="sub-title-cn py-5 px-5"/>
<VerticalText text='服务版本' containerStyle="sub-title-cn py-5 px-5"/> <VerticalText text='service' containerStyle="hero-title mt-6" itemStyle=" rotate-90 -my-[2.7rem]"/>
<VerticalText text='service' containerStyle="hero-title mt-6" itemStyle=" rotate-90 -my-[1.6rem]"/> </div>
</div> </div>
</div> </div>
</div>
</AppContianer> </AppContianer>
) )
......
...@@ -24,16 +24,16 @@ export default function Baas33 () { ...@@ -24,16 +24,16 @@ export default function Baas33 () {
<div className="vertival-content"> <div className="vertival-content">
<PageLayout ballConfig={baasBalls[0].setting}> <PageLayout ballConfig={baasBalls[0].setting}>
<> <>
<AppContianer> <AppContianer className='z-[999999]'>
<div className="translate-y-[8vh]"> <div className="translate-y-[8vh]">
<div className=" text-4xl font-mono tracking-widest font-medium">复杂美区块链开放服务平台</div> <div className=" text-4xl font-mono tracking-widest font-medium">复杂美区块链开放服务平台</div>
<div className="flex gap-x-5 mt-5"> <div className="flex gap-x-5 mt-5 ">
<StyledButton text='开发者实验室' color="black"></StyledButton> <StyledButton text='开发者实验室' color="black"></StyledButton>
<StyledButton text='开发者文档' color="black"></StyledButton> <StyledButton text='开发者文档' color="black"></StyledButton>
<StyledButton text='一键搭建' color="red"></StyledButton> <StyledButton text='一键搭建' color="red"></StyledButton>
</div> </div>
</div> </div>
</AppContianer> </AppContianer>
<div className="w-full"> <div className="w-full">
<HeroBaas></HeroBaas> <HeroBaas></HeroBaas>
</div> </div>
......
...@@ -78,7 +78,7 @@ export default function Chain33() { ...@@ -78,7 +78,7 @@ export default function Chain33() {
</div> </div>
</div> </div>
</PageLayout> </PageLayout>
<PageLayout className=" bg-[#084DFF]"> {/* <PageLayout className=" bg-[#084DFF]">
<AppContianer> <AppContianer>
<div className="flex justify-between gap-x-10"> <div className="flex justify-between gap-x-10">
<HeroItem heroTitle="高" order={1} subtitle="高效" content="Chain33区块链中,交易在主链上共识并存储。多条平行链同时处理交易效率大大提升。"></HeroItem> <HeroItem heroTitle="高" order={1} subtitle="高效" content="Chain33区块链中,交易在主链上共识并存储。多条平行链同时处理交易效率大大提升。"></HeroItem>
...@@ -88,7 +88,7 @@ export default function Chain33() { ...@@ -88,7 +88,7 @@ export default function Chain33() {
<HeroItem heroTitle="高" order={5} subtitle="高效" content="Chain33区块链中,交易在主链上共识并存储。多条平行链同时处理交易效率大大提升。"></HeroItem> <HeroItem heroTitle="高" order={5} subtitle="高效" content="Chain33区块链中,交易在主链上共识并存储。多条平行链同时处理交易效率大大提升。"></HeroItem>
</div> </div>
</AppContianer> </AppContianer>
</PageLayout> </PageLayout> */}
</div> </div>
</ScrollView> </ScrollView>
......
...@@ -9,13 +9,14 @@ module.exports = withAnimations({ ...@@ -9,13 +9,14 @@ module.exports = withAnimations({
galano:['Galano','system-ui'] galano:['Galano','system-ui']
}, },
colors:{ colors:{
'theme-blue':'#084DFD' 'theme-blue':'#084DFD',
"theme-dark":'#24374E'
}, },
screens:{ screens:{
'moblie':"640px", 'moblie':"640px",
'table':"961px", 'table':"961px",
"labtop":"1520px", "labtop":"1520px",
"sreen":"2881px", "screen":"2881px",
} }
}, },
}, },
......
...@@ -723,6 +723,11 @@ ...@@ -723,6 +723,11 @@
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3"
integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==
"@types/lodash@^4.14.182":
version "4.14.182"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
"@types/node@^17.0.31": "@types/node@^17.0.31":
version "17.0.31" version "17.0.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
...@@ -840,11 +845,7 @@ arg@^5.0.1: ...@@ -840,11 +845,7 @@ arg@^5.0.1:
asynckit@^0.4.0: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
=======
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
autoprefixer@^10.4.7: autoprefixer@^10.4.7:
...@@ -861,11 +862,7 @@ autoprefixer@^10.4.7: ...@@ -861,11 +862,7 @@ autoprefixer@^10.4.7:
axios@^0.27.2: axios@^0.27.2:
version "0.27.2" version "0.27.2"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
=======
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
dependencies: dependencies:
follow-redirects "^1.14.9" follow-redirects "^1.14.9"
...@@ -947,11 +944,7 @@ color-name@^1.1.4: ...@@ -947,11 +944,7 @@ color-name@^1.1.4:
combined-stream@^1.0.8: combined-stream@^1.0.8:
version "1.0.8" version "1.0.8"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
=======
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
...@@ -997,11 +990,7 @@ defined@^1.0.0: ...@@ -997,11 +990,7 @@ defined@^1.0.0:
delayed-stream@~1.0.0: delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
=======
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
detective@^5.2.0: detective@^5.2.0:
...@@ -1206,20 +1195,12 @@ fill-range@^7.0.1: ...@@ -1206,20 +1195,12 @@ fill-range@^7.0.1:
follow-redirects@^1.14.9: follow-redirects@^1.14.9:
version "1.15.1" version "1.15.1"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
=======
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
form-data@^4.0.0: form-data@^4.0.0:
version "4.0.0" version "4.0.0"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
=======
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies: dependencies:
asynckit "^0.4.0" asynckit "^0.4.0"
...@@ -1389,20 +1370,12 @@ micromatch@^4.0.4: ...@@ -1389,20 +1370,12 @@ micromatch@^4.0.4:
mime-db@1.52.0: mime-db@1.52.0:
version "1.52.0" version "1.52.0"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
=======
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12: mime-types@^2.1.12:
version "2.1.35" version "2.1.35"
<<<<<<< HEAD
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
=======
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
>>>>>>> caf60b8a0235283f9c77d25e1cf48aa52731c7d2
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies: dependencies:
mime-db "1.52.0" mime-db "1.52.0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment