up
This commit is contained in:
@@ -1,26 +1,35 @@
|
|||||||
|
"use client";
|
||||||
import "@fortawesome/fontawesome-free/css/all.min.css";
|
import "@fortawesome/fontawesome-free/css/all.min.css";
|
||||||
import "@/styles/style.css";
|
import "@/styles/style.css";
|
||||||
import Header from "@/components/Header";
|
import Header from "@/components/Header";
|
||||||
import Footer from "@/components/Footer";
|
import Footer from "@/components/Footer";
|
||||||
|
import Head from "next/head";
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: Readonly<{
|
}: Readonly<{
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}>) {
|
}>) {
|
||||||
|
const handleBodyClick = () => {
|
||||||
|
const menu = document.getElementById("menu_product");
|
||||||
|
menu?.classList.remove("active");
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<html lang="vi">
|
<html lang="vi">
|
||||||
<meta charSet="utf-8" />
|
<Head>
|
||||||
<meta
|
<meta charSet="utf-8" />
|
||||||
name="viewport"
|
<meta
|
||||||
content="width=device-width, initial-scale=1.0, maximum-scale=1"
|
name="viewport"
|
||||||
/>
|
content="width=device-width, initial-scale=1.0, maximum-scale=1"
|
||||||
<meta httpEquiv="Content-Type" content="text/html; charset=UTF-8" />
|
/>
|
||||||
<title>Hurasoft</title>
|
<meta httpEquiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<link rel="icon" href="/image" />
|
<title>Hurasoft</title>
|
||||||
|
<link rel="icon" href="/image/favicon.png" />
|
||||||
|
</Head>
|
||||||
<body className="bg-white">
|
<body className="bg-white">
|
||||||
<Header />
|
<Header />
|
||||||
<main>{children}</main>
|
<main onClick={handleBodyClick}>{children}</main>
|
||||||
<Footer />
|
<Footer />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { format } from "date-fns";
|
|||||||
import { homePageEffect } from "@/effects/homeEffect";
|
import { homePageEffect } from "@/effects/homeEffect";
|
||||||
|
|
||||||
import { ArticlesData } from "../data/article";
|
import { ArticlesData } from "../data/article";
|
||||||
import { ArticlesType } from "../types/article";
|
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -1,109 +1,128 @@
|
|||||||
|
"use client";
|
||||||
|
import { useState } from "react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
|
|
||||||
export default function Header() {
|
export default function Header() {
|
||||||
|
// State để kiểm tra trạng thái của menu
|
||||||
|
const [menuActive, setMenuActive] = useState(false);
|
||||||
|
|
||||||
|
const handleMenuClick = () => {
|
||||||
|
setMenuActive(!menuActive); // Toggle trạng thái của menu
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header className="header">
|
<header>
|
||||||
<div className="container">
|
<div className="header">
|
||||||
<div className="content-header-main flex items-center justify-between">
|
<div className="container">
|
||||||
<Link href="/" className="logo">
|
<div className="content-header-main flex items-center justify-between">
|
||||||
<Image src="/images/logo.png" width={100} height={100} alt="logo" />
|
<Link href="/" className="logo">
|
||||||
</Link>
|
<Image
|
||||||
<div className="menu-right flex items-center">
|
src="/images/logo.png"
|
||||||
<div className="item">
|
width={100}
|
||||||
<Link href="/page/dich-vu.html" className="title">
|
height={100}
|
||||||
Sản phẩm
|
alt="logo"
|
||||||
</Link>
|
/>
|
||||||
<div className="hover-menu">
|
</Link>
|
||||||
<div className="item-menu">
|
<div className="menu-right flex items-center">
|
||||||
<div className="top">
|
<div
|
||||||
<div className="icon">
|
className={`item ${menuActive ? "active" : ""}`}
|
||||||
<Image
|
onClick={handleMenuClick}
|
||||||
src="/images/icon-hura8.png"
|
id="menu_product"
|
||||||
width={100}
|
>
|
||||||
height={16}
|
<div className="title">Sản phẩm</div>
|
||||||
alt="hura 8"
|
<div className={`hover-menu ${menuActive ? "active" : ""}`}>
|
||||||
/>
|
<div className="item-menu">
|
||||||
|
<div className="top">
|
||||||
|
<div className="icon">
|
||||||
|
<Image
|
||||||
|
src="/images/icon-hura8.png"
|
||||||
|
width={100}
|
||||||
|
height={16}
|
||||||
|
alt="hura 8"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<p className="txt line-clamp-4">
|
||||||
|
Tốt nhất cho hoạt động thương mại điện tử của doanh
|
||||||
|
nghiệp
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="txt line-clamp-4">
|
<a href="" className="more">
|
||||||
Tốt nhất cho hoạt động thương mại điện tử của doanh nghiệp
|
<i className="fa-solid fa-arrow-right"></i>
|
||||||
</p>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<a href="" className="more">
|
<div className="item-menu">
|
||||||
<i className="fa-solid fa-arrow-right"></i>
|
<div className="top">
|
||||||
</a>
|
<div className="icon">
|
||||||
</div>
|
<Image
|
||||||
<div className="item-menu">
|
src="/images/icon-xstore.png"
|
||||||
<div className="top">
|
width={100}
|
||||||
<div className="icon">
|
height={16}
|
||||||
<Image
|
alt="xstore"
|
||||||
src="/images/icon-xstore.png"
|
/>
|
||||||
width={100}
|
</div>
|
||||||
height={16}
|
<p className="txt line-clamp-4">
|
||||||
alt="xstore"
|
Bộ sản phẩm về quản lý đơn hàng, hàng tồn kho và khách
|
||||||
/>
|
hàng dành cho các doanh nghiệp vừa và nhỏ. Được bổ sung
|
||||||
|
với một POS thông minh.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="txt line-clamp-4">
|
<a href="" className="more">
|
||||||
Bộ sản phẩm về quản lý đơn hàng, hàng tồn kho và khách
|
<i className="fa-solid fa-arrow-right"></i>
|
||||||
hàng dành cho các doanh nghiệp vừa và nhỏ. Được bổ sung
|
</a>
|
||||||
với một POS thông minh.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<a href="" className="more">
|
<div className="item-menu">
|
||||||
<i className="fa-solid fa-arrow-right"></i>
|
<div className="top">
|
||||||
</a>
|
<div className="icon">
|
||||||
</div>
|
<Image
|
||||||
<div className="item-menu">
|
src="/images/icon-adman.png"
|
||||||
<div className="top">
|
width={100}
|
||||||
<div className="icon">
|
height={16}
|
||||||
<Image
|
alt="icon-adman"
|
||||||
src="/images/icon-adman.png"
|
/>
|
||||||
width={100}
|
</div>
|
||||||
height={16}
|
<p className="txt line-clamp-4">
|
||||||
alt="icon-adman"
|
Nền tảng tiếp thị toàn diện dành cho các chuyên gia.
|
||||||
/>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="txt line-clamp-4">
|
<a href="" className="more">
|
||||||
Nền tảng tiếp thị toàn diện dành cho các chuyên gia.
|
<i className="fa-solid fa-arrow-right"></i>
|
||||||
</p>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<a href="" className="more">
|
<div className="item-menu chatngay">
|
||||||
<i className="fa-solid fa-arrow-right"></i>
|
<div className="top">
|
||||||
</a>
|
<div className="icon">
|
||||||
</div>
|
<Image
|
||||||
<div className="item-menu chatngay">
|
src="/images/icon-chatngay.png"
|
||||||
<div className="top">
|
width={100}
|
||||||
<div className="icon">
|
height={16}
|
||||||
<Image
|
alt="icon-chatngay"
|
||||||
src="/images/icon-chatngay.png"
|
/>
|
||||||
width={100}
|
</div>
|
||||||
height={16}
|
<p className="txt line-clamp-4">
|
||||||
alt="icon-chatngay"
|
Giúp khách hàng đang truy cập website trò chuyện với bạn
|
||||||
/>
|
một cách đơn giản, nhanh chóng và thuận tiện.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="txt line-clamp-4">
|
<a href="" className="more">
|
||||||
Giúp khách hàng đang truy cập website trò chuyện với bạn
|
<i className="fa-solid fa-arrow-right"></i>
|
||||||
một cách đơn giản, nhanh chóng và thuận tiện.
|
</a>
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<a href="" className="more">
|
|
||||||
<i className="fa-solid fa-arrow-right"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<Link href="/job/page_job_introduction" className="item">
|
||||||
|
Tuyển dụng
|
||||||
|
</Link>
|
||||||
|
<Link href="/article" className="item">
|
||||||
|
Blog
|
||||||
|
</Link>
|
||||||
|
<Link href="/contact" className="item">
|
||||||
|
Liên hệ
|
||||||
|
</Link>
|
||||||
|
<Link href="javascript:void(0)" className="item">
|
||||||
|
<i className="icon_2024 global"></i>
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<Link href="/tuyen-dung" className="item">
|
|
||||||
Tuyển dụng
|
|
||||||
</Link>
|
|
||||||
<Link href="/tin-tuc" className="item">
|
|
||||||
Blog
|
|
||||||
</Link>
|
|
||||||
<Link href="/lien-he" className="item">
|
|
||||||
Liên hệ
|
|
||||||
</Link>
|
|
||||||
<Link href="javascript:void(0)" className="item">
|
|
||||||
<i className="icon_2024 global"></i>
|
|
||||||
</Link>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
80
src/data/job.ts
Normal file
80
src/data/job.ts
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import { JobType } from '../types/job';
|
||||||
|
|
||||||
|
export const JobData: JobType = {
|
||||||
|
"total": 4,
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"title": "Nh\u00e2n vi\u00ean ph\u00e1t tri\u1ec3n th\u1ecb tr\u01b0\u1eddng",
|
||||||
|
"summary": "",
|
||||||
|
"salary": "Th\u1ecfa thu\u1eadn",
|
||||||
|
"vacancy_num": 2,
|
||||||
|
"end_date": "31-12-2024",
|
||||||
|
"location": "H\u00e0 N\u1ed9i",
|
||||||
|
"visit": 0,
|
||||||
|
"create_time": 1731653302,
|
||||||
|
"last_update": 1733899503,
|
||||||
|
"counter": 1,
|
||||||
|
"image": {
|
||||||
|
"small": "",
|
||||||
|
"large": ""
|
||||||
|
},
|
||||||
|
"url": "\/job\/nhan-vien-phat-trien-thi-truong.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"title": "Nh\u00e2n vi\u00ean ch\u0103m s\u00f3c kh\u00e1ch h\u00e0ng",
|
||||||
|
"summary": "",
|
||||||
|
"salary": "7-12 tri\u1ec7u",
|
||||||
|
"vacancy_num": 2,
|
||||||
|
"end_date": "31-12-2024",
|
||||||
|
"location": "H\u00e0 N\u1ed9i",
|
||||||
|
"visit": 0,
|
||||||
|
"create_time": 1731653230,
|
||||||
|
"last_update": 1733899517,
|
||||||
|
"counter": 2,
|
||||||
|
"image": {
|
||||||
|
"small": "",
|
||||||
|
"large": ""
|
||||||
|
},
|
||||||
|
"url": "\/job\/nhan-vien-cham-soc-khach-hang.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"title": "L\u1eadp tr\u00ecnh vi\u00ean front-end",
|
||||||
|
"summary": "",
|
||||||
|
"salary": "Th\u1ecfa thu\u1eadn",
|
||||||
|
"vacancy_num": 2,
|
||||||
|
"end_date": "31-12-2024",
|
||||||
|
"location": "H\u00e0 N\u1ed9i",
|
||||||
|
"visit": 0,
|
||||||
|
"create_time": 1731652851,
|
||||||
|
"last_update": 1733899525,
|
||||||
|
"counter": 3,
|
||||||
|
"image": {
|
||||||
|
"small": "",
|
||||||
|
"large": ""
|
||||||
|
},
|
||||||
|
"url": "\/job\/lap-trinh-vien-front-end.html"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"title": "Thi\u1ebft k\u1ebf \u0111\u1ed3 h\u1ecda Website, Mobile (UX Designer)",
|
||||||
|
"summary": "",
|
||||||
|
"salary": "$500-1,000\/th\u00e1ng",
|
||||||
|
"vacancy_num": 1,
|
||||||
|
"end_date": "31-12-2024",
|
||||||
|
"location": "H\u00e0 N\u1ed9i",
|
||||||
|
"visit": 0,
|
||||||
|
"create_time": 1731652564,
|
||||||
|
"last_update": 1733899533,
|
||||||
|
"counter": 4,
|
||||||
|
"image": {
|
||||||
|
"small": "",
|
||||||
|
"large": ""
|
||||||
|
},
|
||||||
|
"url": "\/job\/thiet-ke-do-hoa-website-mobile-ux-designer.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
132
src/pages/contact.tsx
Normal file
132
src/pages/contact.tsx
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
import Layout from "@/app/layout";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
|
const Contact = () => {
|
||||||
|
const [isClient, setIsClient] = useState(false);
|
||||||
|
useEffect(() => {
|
||||||
|
setIsClient(true); // Chỉ set khi component đã mount trên client
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!isClient) {
|
||||||
|
return null; // Tránh render trên server
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div className="page-contact">
|
||||||
|
<div className="container">
|
||||||
|
<div className="content-page-contact flex justify-center">
|
||||||
|
<div className="contact-left">
|
||||||
|
<h1 className="title-contact">Liên hệ</h1>
|
||||||
|
<div className="note">
|
||||||
|
Đội ngũ hỗ trợ của Hurasoft luôn sẵn sàng hỗ trợ quý khách
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="list-info">
|
||||||
|
<div className="item">
|
||||||
|
<div className="icon">
|
||||||
|
<i className="icon_2024 map"></i>
|
||||||
|
</div>
|
||||||
|
<div className="txt">
|
||||||
|
Tầng 5 - Số 3,ngõ 18 Yên Lãng,Đống Đa, Hà Nội
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="item">
|
||||||
|
<div className="icon">
|
||||||
|
<i className="icon_2024 phone"></i>
|
||||||
|
</div>
|
||||||
|
<div className="txt d-flex align-items">
|
||||||
|
<a href="02422138068">02422.138.068</a>
|
||||||
|
<span>-</span>
|
||||||
|
<a href="tel:0904580181">0904.580.181</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="item">
|
||||||
|
<div className="icon">
|
||||||
|
<i className="icon_2024 email"></i>
|
||||||
|
</div>
|
||||||
|
<a href="mailto:hotro@hurasoft.com" className="txt">
|
||||||
|
hotro@hurasoft.com
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="contact-right">
|
||||||
|
<div className="box-form">
|
||||||
|
<b>Để lại lời nhắn</b>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Tên <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="name"
|
||||||
|
className="input-item"
|
||||||
|
id="js-contact-name"
|
||||||
|
placeholder="Nhập họ và tên"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Email <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="email"
|
||||||
|
className="input-item"
|
||||||
|
id="js-contact-email"
|
||||||
|
placeholder="hello@example.com..."
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Số điện thoại <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="phone"
|
||||||
|
className="input-item"
|
||||||
|
id="js-contact-tel"
|
||||||
|
placeholder="Nhập số điện thoại của bạn"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="item-form">
|
||||||
|
<label>website</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="web"
|
||||||
|
className="input-item"
|
||||||
|
id="js-contact-web"
|
||||||
|
placeholder="Nhập website của bạn"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="item-form">
|
||||||
|
<label>Nội dung</label>
|
||||||
|
<textarea
|
||||||
|
name="note"
|
||||||
|
id="js-contact-content"
|
||||||
|
className="input-item"
|
||||||
|
placeholder="Nhập nội dung"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="javascript:void(0)" className="btn btn-submit">
|
||||||
|
Gửi thông tin <i className="fa-solid fa-arrow-right-long"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Contact;
|
||||||
251
src/pages/job/detail.tsx
Normal file
251
src/pages/job/detail.tsx
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import Link from "next/link";
|
||||||
|
import Layout from "@/app/layout";
|
||||||
|
|
||||||
|
const Detail = () => {
|
||||||
|
const [activeTab, setActiveTab] = useState("#info");
|
||||||
|
const [isClient, setIsClient] = useState(false);
|
||||||
|
|
||||||
|
const showTab = (tab: string) => {
|
||||||
|
console.log(`Tab clicked: ${tab}`);
|
||||||
|
setActiveTab(tab);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsClient(true); // Chỉ set khi component đã mount trên client
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!isClient) {
|
||||||
|
return null; // Tránh render trên server
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div className="page-job detail">
|
||||||
|
<div className="container-job">
|
||||||
|
<h2 className="title">Nhân viên phát triển thị trường</h2>
|
||||||
|
<div className="content-job flex">
|
||||||
|
<div className="left-job">
|
||||||
|
<div className="item">
|
||||||
|
<p>Địa điểm</p>
|
||||||
|
<b>Hà Nội</b>
|
||||||
|
</div>
|
||||||
|
<div className="item">
|
||||||
|
<p>Hình thức làm việc</p>
|
||||||
|
<b>Toàn thời gian cố định</b>
|
||||||
|
</div>
|
||||||
|
<div className="item">
|
||||||
|
<p>Số lượng tuyển</p>
|
||||||
|
<b>7</b>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="right-job">
|
||||||
|
<div className="list-tab flex items-center">
|
||||||
|
<div
|
||||||
|
onClick={() => showTab("#info")}
|
||||||
|
data-id="#info"
|
||||||
|
className={`item-tab ${
|
||||||
|
activeTab === "#info" ? "active" : ""
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Chi tiết
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
onClick={() => showTab("#formjob")}
|
||||||
|
data-id="#formjob"
|
||||||
|
className={`item-tab ${
|
||||||
|
activeTab === "#formjob" ? "active" : ""
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Nộp hồ sơ
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className={`content-tab ${
|
||||||
|
activeTab === "#info" ? "active" : ""
|
||||||
|
}`}
|
||||||
|
id="info"
|
||||||
|
>
|
||||||
|
<b>Vị trí: Nhân viên phát triển thị trường</b>
|
||||||
|
|
||||||
|
<h2 className="title">Mô tả công việc</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Tìm kiếm khách hàng mới, tiếp cận khai thác Khách hàng tiềm
|
||||||
|
năng.
|
||||||
|
</li>
|
||||||
|
<li>Tư vấn khách hàng về sản phẩm, dịch vụ của công ty.</li>
|
||||||
|
<li>
|
||||||
|
Chốt hợp đồng khách hàng, triển khai quy trình làm việc với
|
||||||
|
khách hàng.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Hỗ trợ và chăm sóc khách hàng (tiềm năng, hiện tại, cũ) tạo
|
||||||
|
mối quan hệ với khách hàng.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Tiếp thu ý kiến khách hàng, phối hợp với các bộ phận khác để
|
||||||
|
khai thác tối đa lợi ích của dịch vụ, khách hàng.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Hoàn thành chỉ tiêu kinh doanh nhóm và chỉ tiêu cá nhân.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p> </p>
|
||||||
|
<h2 className="title">Yêu cầu ứng viên:</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Tốt nghiệp Cao Đẳng trở lên các trường đào tạo chuyên ngành
|
||||||
|
quản trị kinh doanh, CNTT hoặc các ngành liên quan.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Đặc biệt ưu tiên có kinh nghiệm làm việc ở các lĩnh vực kinh
|
||||||
|
doanh phần mềm, bán hàng, tư vấn, tiếp thị các sản phẩm về
|
||||||
|
CNTT là 1 lợi thế.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Có kỹ năng giao tiếp thuyết phục đàm phán tốt , năng động,
|
||||||
|
cải tiến, sáng tạo, chủ động trong công việc.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Tinh thần trách nhiệm trong công việc. Yêu thích công việc
|
||||||
|
kinh doanh và không ngừng học hỏi, sẵn sàng tiếp thu các
|
||||||
|
kiến thức mới.
|
||||||
|
</li>
|
||||||
|
<li>Có laptop, có phương tiện đi lại.</li>
|
||||||
|
</ul>
|
||||||
|
<p> </p>
|
||||||
|
<h2 className="title">Quyền lợi:</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Môi trường làm việc chuyên nghiệp, năng động, thân thiện
|
||||||
|
</li>
|
||||||
|
<li>Luôn được tiếp xúc với công nghệ và thử thách mới.</li>
|
||||||
|
<li>
|
||||||
|
Lương: Lương cứng + hoa hồng + phụ cấp xăng xe, điện thoại
|
||||||
|
</li>
|
||||||
|
<li>Thưởng theo ngày lễ, tết</li>
|
||||||
|
<li>
|
||||||
|
Được đào tạo kĩ năng mềm ( kỹ năng giao tiếp, xử lý tình
|
||||||
|
huống…..)
|
||||||
|
</li>
|
||||||
|
<li>Làm việc từ T2 – sáng T7</li>
|
||||||
|
<li>Đóng bảo hiểm theo quy định của Nhà nước</li>
|
||||||
|
<li>
|
||||||
|
Được hưởng đầy đủ các chế độ theo quy định của luật lao động
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Ứng viên vui lòng gửi hồ sơ cho chúng tôi qua email{" "}
|
||||||
|
<a href="mailto:info@hurasoft.com">info@hurasoft.com</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a
|
||||||
|
href="javascript:void(0)"
|
||||||
|
onClick={() => showTab("#formjob")}
|
||||||
|
className="btn apply-job"
|
||||||
|
>
|
||||||
|
Ứng tuyển ngay
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className={`content-tab ${
|
||||||
|
activeTab === "#formjob" ? "active" : ""
|
||||||
|
}`}
|
||||||
|
id="formjob"
|
||||||
|
>
|
||||||
|
<input type="hidden" id="js-job_id" value="13" />
|
||||||
|
<div className="item-upload d-flex flex-wrap align-items">
|
||||||
|
<div className="upload-left">
|
||||||
|
<div className="d-flex align-items">
|
||||||
|
<i className="fa-solid fa-cloud-arrow-up"></i>
|
||||||
|
<p className="name-up">Tải lên sơ yếu lý lịch</p>
|
||||||
|
</div>
|
||||||
|
<p className="gray">
|
||||||
|
Tải sơ yếu lý lịch của bạn lên đây để tự động điền các
|
||||||
|
thông tin chính.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="upload-right">
|
||||||
|
<input id="js-file-upload-id" type="hidden" value="" />
|
||||||
|
<div id="js-container-selector">
|
||||||
|
<a
|
||||||
|
id="js-select-file"
|
||||||
|
href="javascript:void(0);"
|
||||||
|
className="btn-upload d-block dz-clickable"
|
||||||
|
>
|
||||||
|
Upload file
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="pd-preview-file-upload">
|
||||||
|
<div id="js-file-uploaded-list"></div>
|
||||||
|
<div id="js-preview-file-upload"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Tên <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-item"
|
||||||
|
name="name"
|
||||||
|
id="js-user_name"
|
||||||
|
placeholder="Nhập họ và tên"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Email <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-item"
|
||||||
|
name="email"
|
||||||
|
id="js-user_email"
|
||||||
|
placeholder="Nhập địa chỉ email"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>
|
||||||
|
Số điện thoại <span>*</span>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
className="input-item"
|
||||||
|
name="phone"
|
||||||
|
id="js-user_mobile"
|
||||||
|
placeholder="Nhập số điện thoại"
|
||||||
|
/>
|
||||||
|
<div className="note-error"></div>
|
||||||
|
</div>
|
||||||
|
<div className="item-form">
|
||||||
|
<label>Thông tin bổ sung</label>
|
||||||
|
<span className="ghichu">
|
||||||
|
Vui lòng chia sẻ bất kỳ điều gì khác bạn muốn chúng tôi
|
||||||
|
biết, chẳng hạn như động lực của bạn khi ứng tuyển hoặc các
|
||||||
|
bối cảnh bổ sung liên quan đến hồ sơ của bạn.
|
||||||
|
</span>
|
||||||
|
<textarea
|
||||||
|
className="input-item"
|
||||||
|
name="messenger"
|
||||||
|
id="js-user_note"
|
||||||
|
placeholder="Nhập nội dung bổ sung"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
<a href="javascript:void(0)" className="btn btn-submit">
|
||||||
|
Nộp đơn <i className="fa-regular fa-paper-plane"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Detail;
|
||||||
46
src/pages/job/home.tsx
Normal file
46
src/pages/job/home.tsx
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
import Layout from "@/app/layout";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { JobData } from "@/data/job";
|
||||||
|
|
||||||
|
const Home = () => {
|
||||||
|
const [isClient, setIsClient] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsClient(true); // Chỉ set khi component đã mount trên client
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!isClient) {
|
||||||
|
return null; // Tránh render trên server
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div className="page-job list">
|
||||||
|
<div className="container-job">
|
||||||
|
<h2 className="title">Tuyển dụng</h2>
|
||||||
|
<div className="list-job">
|
||||||
|
{JobData.list.map((job) => (
|
||||||
|
<div className="item-job" key={job.id}>
|
||||||
|
<div className="job-left">
|
||||||
|
<Link href="/job/detail" className="name line-clamp-1">
|
||||||
|
{job.title}
|
||||||
|
</Link>
|
||||||
|
<div className="time">{job.end_date}</div>
|
||||||
|
</div>
|
||||||
|
<div className="job-right flex items-center">
|
||||||
|
<div className="localhost">{job.location}</div>
|
||||||
|
<Link href="/job/detail" className="more">
|
||||||
|
Ứng tuyển ngay <i className="fa-solid fa-angle-right"></i>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Home;
|
||||||
92
src/pages/job/page_job_introduction.tsx
Normal file
92
src/pages/job/page_job_introduction.tsx
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import Layout from "@/app/layout";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
|
const Job = () => {
|
||||||
|
const [isClient, setIsClient] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsClient(true); // Chỉ set khi component đã mount trên client
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!isClient) {
|
||||||
|
return null; // Tránh render trên server
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div className="page-job">
|
||||||
|
<div className="container-job">
|
||||||
|
<h1>Việc làm tại hurasoft</h1>
|
||||||
|
<div className="note">
|
||||||
|
Nếu bạn là người đam mê công nghệ và yêu thử thách, hãy gia nhập
|
||||||
|
cùng chúng tôi.
|
||||||
|
</div>
|
||||||
|
<Link href="/job/home" className="btn btn-job">
|
||||||
|
Xem các vị trí <i className="fa-solid fa-arrow-right"></i>
|
||||||
|
</Link>
|
||||||
|
|
||||||
|
<div className="content">
|
||||||
|
<Image
|
||||||
|
src="/images/image-page-job.png"
|
||||||
|
width={100}
|
||||||
|
height={100}
|
||||||
|
alt="job"
|
||||||
|
layout="responsive"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<h2>Đối tác tin cậy của doanh nghiệp</h2>
|
||||||
|
<p>
|
||||||
|
Hurasoft chuyên tư vấn và triển khai các giải pháp thương mại điện
|
||||||
|
tử tổng thể cho các doanh nghiệp từ khởi đầu kinh doanh đến quy mô
|
||||||
|
lớn. Thiết kế UX / UI, phát triển website app mobile, dịch vụ
|
||||||
|
marketing, các ứng dụng phần mềm & dịch vụ cơ sở hạ tầng chất
|
||||||
|
lượng. Những giải pháp mà chúng tôi thiết kế nhằm tăng tốc hiệu
|
||||||
|
quả & thúc đẩy tăng trưởng bền vững cho doanh nghiệp.
|
||||||
|
</p>
|
||||||
|
<h2>Mục tiêu của chúng tôi là giúp bạn bán hàng tốt hơn!</h2>
|
||||||
|
<p>
|
||||||
|
Chúng tôi hướng tới mục tiêu hỗ trợ bạn đạt được hiệu quả bán hàng
|
||||||
|
tối ưu nhất. Với sự tận tâm đồng hành trong từng bước phát triển,
|
||||||
|
đội ngũ chuyên gia giàu kinh nghiệm và kỹ thuật cao luôn sẵn sàng
|
||||||
|
đáp ứng nhu cầu của bạn. Uy tín được khẳng định qua việc cung cấp
|
||||||
|
dịch vụ cho nhiều doanh nghiệp lớn nhỏ trên toàn Việt Nam, chúng
|
||||||
|
tôi cam kết mang lại giải pháp phù hợp và bền vững để bạn tự tin
|
||||||
|
phát triển kinh doanh.
|
||||||
|
</p>
|
||||||
|
<h2>Văn hóa công ty</h2>
|
||||||
|
<p>
|
||||||
|
Chúng tôi cam kết đồng hành cùng khách hàng, coi mỗi vấn đề của
|
||||||
|
khách hàng là trách nhiệm của chính mình. Thấu hiểu khách hàng qua
|
||||||
|
các nghiên cứu chuyên sâu, phân tích và đánh giá chính xác, chúng
|
||||||
|
tôi mang đến các sản phẩm công nghệ thực sự hữu ích, chất lượng
|
||||||
|
vượt trội và giá cả hợp lý. Với tư duy đổi mới, tinh thần cam kết
|
||||||
|
và sự chủ động, chúng tôi không ngừng theo dõi, đề xuất giải pháp
|
||||||
|
sáng tạo để nâng tầm giá trị thương hiệu và trải nghiệm khách
|
||||||
|
hàng.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="content-form-job">
|
||||||
|
<Image
|
||||||
|
src="/images/image-form.png"
|
||||||
|
width={100}
|
||||||
|
height={100}
|
||||||
|
alt="form"
|
||||||
|
layout="responsive"
|
||||||
|
/>
|
||||||
|
<div className="title">
|
||||||
|
<h3>Sẵn sàng tham gia cùng chúng tôi?</h3>
|
||||||
|
<a href="/job/home" className="btn btn-job">
|
||||||
|
Xem các vị trí <i className="fa-solid fa-arrow-right"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Job;
|
||||||
7
src/pages/product.tsx
Normal file
7
src/pages/product.tsx
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
const Product: React.FC = () => {
|
||||||
|
return <></>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Product;
|
||||||
@@ -137,6 +137,7 @@ table {
|
|||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
position: relative;
|
position: relative;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.header .menu-right .item::before {
|
.header .menu-right .item::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -169,7 +170,11 @@ table {
|
|||||||
.header .menu-right .item:hover::after {
|
.header .menu-right .item:hover::after {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.header .menu-right .item:hover .hover-menu {
|
.header .menu-right .item.active .title {
|
||||||
|
color: var(--color-btn);
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.header .menu-right .item.active .hover-menu {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
@@ -538,14 +543,6 @@ table {
|
|||||||
width: 794px;
|
width: 794px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
.page-job .container-job h1 {
|
|
||||||
padding-bottom: 25px;
|
|
||||||
font-size: 48px;
|
|
||||||
font-weight: 700;
|
|
||||||
text-align: center;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: var(--color-title);
|
|
||||||
}
|
|
||||||
.page-job .container-job .note {
|
.page-job .container-job .note {
|
||||||
width: 408px;
|
width: 408px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@@ -605,9 +602,14 @@ table {
|
|||||||
margin: 20px 0 0 0;
|
margin: 20px 0 0 0;
|
||||||
}
|
}
|
||||||
.page-job .title {
|
.page-job .title {
|
||||||
font-size: 20px;
|
padding-top: 80px;
|
||||||
|
font-size: 38px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin-bottom: 20px;
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-title);
|
||||||
|
width: 450px;
|
||||||
|
margin: 0 auto 30px auto;
|
||||||
}
|
}
|
||||||
.page-job .title span {
|
.page-job .title span {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@@ -721,6 +723,14 @@ table {
|
|||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
.page-job .content-job .content-tab h2,
|
||||||
|
.page-job .content-job .content-tab h2,
|
||||||
|
.page-job .content-job .content-tab h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
text-align: left;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
.page-job .content-job .apply-job {
|
.page-job .content-job .apply-job {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -133,6 +133,7 @@ table {
|
|||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
position: relative;
|
position: relative;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
&::before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: "";
|
content: "";
|
||||||
@@ -167,6 +168,12 @@ table {
|
|||||||
&::after {
|
&::after {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
.title {
|
||||||
|
color: var(--color-btn);
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
.hover-menu {
|
.hover-menu {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
@@ -549,14 +556,7 @@ table {
|
|||||||
padding: 20px 10px;
|
padding: 20px 10px;
|
||||||
width: 794px;
|
width: 794px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
h1 {
|
|
||||||
padding-bottom: 25px;
|
|
||||||
font-size: 48px;
|
|
||||||
font-weight: 700;
|
|
||||||
text-align: center;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: var(--color-title);
|
|
||||||
}
|
|
||||||
.note {
|
.note {
|
||||||
width: 408px;
|
width: 408px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@@ -619,9 +619,14 @@ table {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
font-size: 20px;
|
padding-top: 80px;
|
||||||
|
font-size: 38px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin-bottom: 20px;
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-title);
|
||||||
|
width: 450px;
|
||||||
|
margin: 0 auto 30px auto;
|
||||||
span {
|
span {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
@@ -736,6 +741,14 @@ table {
|
|||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
h2,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
text-align: left;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.apply-job {
|
.apply-job {
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
27
src/types/job.ts
Normal file
27
src/types/job.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
export interface JobImage {
|
||||||
|
small: string; // Đường dẫn ảnh thu nhỏ
|
||||||
|
large: string; // Đường dẫn ảnh lớn
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface Job {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
summary: string;
|
||||||
|
salary: string;
|
||||||
|
vacancy_num: number;
|
||||||
|
end_date: string;
|
||||||
|
location: string;
|
||||||
|
visit: number;
|
||||||
|
create_time: number;
|
||||||
|
last_update: number;
|
||||||
|
counter: number;
|
||||||
|
image: JobImage; // Đối tượng ảnh
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface JobType {
|
||||||
|
total: number;
|
||||||
|
list: Job[];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user