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

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

相关推荐
云边有个稻草人26 分钟前
【Web前端技术】第二节—HTML标签(上)
前端·html·html基本结构标签·html超链接标签·html中的注释和特殊字符·vscode的使用·vscode生成骨架标签
介si啥呀~29 分钟前
解决splice改变原数组的BUG(拷贝数据)
java·前端·bug
太阳花ˉ32 分钟前
BFC详解
前端
小满zs2 小时前
React-router v7 第五章(路由懒加载)
前端·react.js
Aotman_3 小时前
Vue el-from的el-form-item v-for循环表单如何校验rules(二)
前端·javascript·vue.js
BillKu4 小时前
Vue3父子组件数据双向绑定示例
javascript·vue.js·elementui
在无清风5 小时前
Java实现Redis
前端·windows·bootstrap
_一条咸鱼_6 小时前
Vue 配置模块深度剖析(十一)
前端·javascript·面试
yechaoa7 小时前
Widget开发实践指南
android·前端
前端切图仔0017 小时前
WebSocket 技术详解
前端·网络·websocket·网络协议