当前位置: 首页 > news >正文

Vue进行前端开发流程

一、创建vue项目

创建vue项目:先进入要操作的目录下,注意本项目是用vue2开发的。

vue create vue项目名

二、项目开发

1.创建项目结构

 

2.开发功能模块

主入口App.vue

<template>
  <div class="boss-app">
    <Header />
    <main class="container">
      <section class="search-section">
        <div class="search-box">
          <input type="text" placeholder="搜索职位/公司/地点">
          <button class="search-btn">搜索</button>
        </div>
      </section>
      
      <JobCategory />
      
      <div class="content-wrap">
        <JobList />
        <CompanyList />
      </div>
    </main>
  </div>
</template>

<script setup>
import Header from './components/Header.vue'
import JobCategory from './components/JobCategory.vue'
import JobList from './components/JobList.vue'
import CompanyList from './components/CompanyList.vue'
</script>

<style scoped>
.boss-app {
  font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 15px;
}
.search-section {
  padding: 30px 0;
  text-align: center;
}
.search-box {
  display: flex;
  max-width: 800px;
  margin: 0 auto;
}
.search-box input {
  flex: 1;
  height: 48px;
  padding: 0 15px;
  border: 1px solid #00b4a6;
  border-radius: 4px 0 0 4px;
  font-size: 16px;
}
.search-btn {
  width: 120px;
  background: #00b4a6;
  color: white;
  border: none;
  border-radius: 0 4px 4px 0;
  font-size: 16px;
  cursor: pointer;
}
.content-wrap {
  display: flex;
  margin-top: 30px;
  gap: 20px;
}
</style>

顶部导航Header.vue

<template>
  <header class="boss-header">
    <div class="container">
      <div class="header-content">
        <div class="logo">
          <img src="../assets/logo.png" alt="BOSS直聘" width="120">
        </div>
        <nav class="main-nav">
          <a href="#" class="active">首页</a>
          <a href="#">职位</a>
          <a href="#">公司</a>
          <a href="#">APP</a>
          <a href="#">消息</a>
        </nav>
        <div class="user-actions">
          <a href="#">登录</a>
          <a href="#" class="register">注册</a>
        </div>
      </div>
    </div>
  </header>
</template>

<style scoped>
.boss-header {
  height: 60px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
.header-content {
  display: flex;
  align-items: center;
  height: 60px;
}
.logo {
  margin-right: 40px;
}
.main-nav {
  display: flex;
  gap: 30px;
}
.main-nav a {
  color: #333;
  text-decoration: none;
  font-size: 16px;
}
.main-nav a.active {
  color: #00b4a6;
  font-weight: bold;
}
.user-actions {
  margin-left: auto;
  display: flex;
  gap: 15px;
}
.register {
  color: #00b4a6;
  font-weight: bold;
}
</style>

职位分类JobCategory.vue

<template>
  <section class="job-category">
    <h2 class="section-title">热门职位</h2>
    <div class="category-list">
      <div v-for="category in categories" :key="category.id" class="category-item">
        <h3>{{ category.name }}</h3>
        <div class="tags">
          <span v-for="tag in category.tags" :key="tag">{{ tag }}</span>
        </div>
      </div>
    </div>
  </section>
</template>

<script setup>
const categories = [
  {
    id: 1,
    name: '技术',
    tags: ['Java', 'Python', '前端', '算法', '测试', '架构师']
  },
  {
    id: 2,
    name: '产品',
    tags: ['产品经理', '产品总监', '数据产品', '硬件产品']
  },
  {
    id: 3,
    name: '设计',
    tags: ['UI设计', '交互设计', '平面设计', '3D设计']
  }
]
</script>

<style scoped>
.job-category {
  margin-top: 20px;
}
.section-title {
  font-size: 20px;
  color: #333;
  margin-bottom: 15px;
}
.category-list {
  display: flex;
  gap: 30px;
}
.category-item {
  flex: 1;
  background: #f8f8f8;
  padding: 15px;
  border-radius: 4px;
}
.category-item h3 {
  font-size: 16px;
  margin-bottom: 10px;
  color: #333;
}
.tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.tags span {
  background: white;
  padding: 4px 10px;
  border-radius: 12px;
  font-size: 14px;
  color: #666;
  cursor: pointer;
}
.tags span:hover {
  color: #00b4a6;
}
</style>

 职位列表JobList

<template>
  <section class="job-list">
    <div class="list-header">
      <h2>推荐职位</h2>
      <a href="#">查看更多 ></a>
    </div>
    <ul class="jobs">
      <li v-for="job in jobs" :key="job.id" class="job-item">
        <div class="job-main">
          <h3>{{ job.title }}</h3>
          <p class="salary">{{ job.salary }}</p>
          <p class="company">{{ job.company }}</p>
          <div class="tags">
            <span v-for="tag in job.tags" :key="tag">{{ tag }}</span>
          </div>
        </div>
        <div class="job-extra">
          <p class="location">{{ job.location }}</p>
          <p class="time">{{ job.time }}</p>
        </div>
      </li>
    </ul>
  </section>
</template>

<script setup>
const jobs = [
  {
    id: 1,
    title: '高级前端开发工程师',
    salary: '25k-50k',
    company: '字节跳动',
    tags: ['Vue', 'React', 'TypeScript'],
    location: '北京·海淀区',
    time: '3分钟前'
  },
  {
    id: 2,
    title: 'Java架构师',
    salary: '40k-70k',
    company: '阿里巴巴',
    tags: ['Spring Cloud', '分布式', '高并发'],
    location: '杭州·余杭区',
    time: '1小时前'
  }
]
</script>

<style scoped>
.job-list {
  flex: 2;
}
.list-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 15px;
}
.list-header h2 {
  font-size: 18px;
  color: #333;
}
.jobs {
  list-style: none;
  padding: 0;
  margin: 0;
}
.job-item {
  padding: 20px;
  border: 1px solid #eee;
  border-radius: 4px;
  margin-bottom: 15px;
  display: flex;
  justify-content: space-between;
}
.job-item:hover {
  box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
.job-main h3 {
  font-size: 16px;
  margin: 0 0 8px 0;
  color: #333;
}
.salary {
  color: #ff6b00;
  font-weight: bold;
  margin: 0 0 8px 0;
}
.company {
  color: #666;
  margin: 0 0 10px 0;
}
.tags {
  display: flex;
  gap: 8px;
}
.tags span {
  background: #f0f7f6;
  color: #00b4a6;
  padding: 2px 8px;
  border-radius: 2px;
  font-size: 12px;
}
.job-extra {
  text-align: right;
}
.location, .time {
  color: #999;
  margin: 0;
  font-size: 12px;
}
</style>

公司列表CompanyList

<template>
  <section class="company-list">
    <div class="list-header">
      <h2>热门公司</h2>
      <a href="#">查看更多 ></a>
    </div>
    <ul class="companies">
      <li v-for="company in companies" :key="company.id" class="company-item">
        <div class="company-logo">
          <img :src="company.logo" :alt="company.name">
        </div>
        <div class="company-info">
          <h3>{{ company.name }}</h3>
          <p class="industry">{{ company.industry }}</p>
          <p class="scale">{{ company.scale }}</p>
          <div class="jobs">
            <span v-for="job in company.hotJobs" :key="job">{{ job }}</span>
          </div>
        </div>
      </li>
    </ul>
  </section>
</template>

<script setup>
const companies = [
  {
    id: 1,
    name: '腾讯科技',
    logo: 'https://via.placeholder.com/60',
    industry: '互联网',
    scale: '10000人以上',
    hotJobs: ['前端开发', '产品经理', '数据分析']
  },
  {
    id: 2,
    name: '字节跳动',
    logo: 'https://via.placeholder.com/60',
    industry: '互联网',
    scale: '10000人以上',
    hotJobs: ['算法工程师', '运营总监', '测试开发']
  }
]
</script>

<style scoped>
.company-list {
  flex: 1;
}
.companies {
  list-style: none;
  padding: 0;
  margin: 0;
}
.company-item {
  padding: 15px;
  border: 1px solid #eee;
  border-radius: 4px;
  margin-bottom: 15px;
  display: flex;
  gap: 15px;
}
.company-item:hover {
  box-shadow: 0 2px 10px rgba(0,0,0,0.05);
}
.company-logo img {
  width: 60px;
  height: 60px;
  border-radius: 4px;
  object-fit: cover;
}
.company-info h3 {
  font-size: 16px;
  margin: 0 0 5px 0;
  color: #333;
}
.industry, .scale {
  color: #666;
  margin: 0 0 5px 0;
  font-size: 13px;
}
.jobs {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 8px;
}
.jobs span {
  background: #f0f7f6;
  color: #00b4a6;
  padding: 2px 8px;
  border-radius: 2px;
  font-size: 12px;
}
</style>

三、运行项目

 在终端输入

npm install
npm run serve

       本项目只是实现一个简单的静态网页,后续再完善一下功能。

 

 

相关文章:

  • 图解Java运行机制-JVM、JRE、JDK区别
  • 方法的重写
  • ubuntu安装openWebUI和Dify【自用详细版】
  • 【多源BFS】01 矩阵 / 飞地的数量 / 地图中的最高点 / 地图分析 / 腐烂的苹果
  • 01-JVM 内存模型与 GC 原理
  • 蓝桥杯-蓝桥幼儿园(并查集)
  • 采用小程序远程控制LED灯亮灭
  • 数据库中的数组: MySQL与StarRocks的数组操作解析
  • Pytorch的安装和使用
  • 深入解析 Jenkins Agent 的 .jnlp 启动文件
  • MuJoCo 仿真 + TOPPRA 最优时间轨迹规划!机械臂运动效率拉满(附代码)
  • 小刚说C语言刷题——第18讲 循环之while和do-while语句
  • 深入理解Spring IoCDI
  • Pandas 库
  • Streamlit性能优化:缓存与状态管理实战
  • Elasticsearch:加快 HNSW 图的合并速度
  • 自己搭建cesium应用程序
  • 河道违建检测数据集VOC+YOLO格式223张1类别
  • spdlog C++日志库使用教程
  • 试剂SYBR 14核酸染料在染色时的操作步骤(说明)
  • 巴基斯坦称对印精准打击造成设施损坏和人员伤亡
  • 冯德莱恩:欧美贸易谈判前不会前往美国会见特朗普
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 九家企业与上海静安集中签约,投资额超10亿元
  • 中国德国商会报告:76%在华德企受美国关税影响,但对华投资战略依然稳固
  • 多地跟进官宣下调公积金贷款利率,最低降至2.1%