引言

随着前端技术的发展,Vue.js 已经成为了构建用户界面的首选框架之一。在这个教程中,我们将通过一个实际的部门管理系统项目,帮助初学者和有经验的前端开发者轻松上手 Vue.js。我们将从项目搭建、功能实现到代码优化,一步步解析如何使用 Vue.js 开发一个完整的部门管理系统。

1. 项目搭建

1.1 环境准备

首先,确保你已经安装了 Node.js 和 npm。然后,通过以下命令创建一个新的 Vue.js 项目:

vue create dept-management-system
cd dept-management-system

1.2 安装依赖

项目创建后,我们需要安装一些必要的依赖,如 Vue Router 和 Vuex:

npm install vue-router vuex axios

1.3 目录结构

以下是项目的基本目录结构:

dept-management-system/
├── src/
│   ├── assets/
│   ├── components/
│   │   ├── DeptList.vue
│   │   ├── DeptForm.vue
│   │   └── ...
│   ├── router/
│   │   └── index.js
│   ├── store/
│   │   └── index.js
│   ├── App.vue
│   ├── main.js
│   └── ...

2. 功能实现

2.1 路由配置

src/router/index.js 中配置路由:

import Vue from 'vue';
import Router from 'vue-router';
import DeptList from '@/components/DeptList';
import DeptForm from '@/components/DeptForm';

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      name: 'dept-list',
      component: DeptList
    },
    {
      path: '/add',
      name: 'dept-add',
      component: DeptForm
    },
    {
      path: '/edit/:id',
      name: 'dept-edit',
      component: DeptForm
    }
  ]
});

2.2 Vuex 状态管理

src/store/index.js 中配置 Vuex:

import Vue from 'vue';
import Vuex from 'vuex';
import deptList from '@/services/dept';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    depts: []
  },
  mutations: {
    setDepts(state, depts) {
      state.depts = depts;
    }
  },
  actions: {
    fetchDepts({ commit }) {
      deptList.getDepts().then(depts => {
        commit('setDepts', depts);
      });
    }
  }
});

2.3 组件开发

2.3.1 DeptList.vue

src/components/DeptList.vue 中实现部门列表组件:

<template>
  <div>
    <h1>部门列表</h1>
    <table>
      <thead>
        <tr>
          <th>部门名称</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="dept in depts" :key="dept.id">
          <td>{{ dept.name }}</td>
          <td>
            <router-link :to="{ name: 'dept-edit', params: { id: dept.id } }">编辑</router-link>
            <button @click="deleteDept(dept.id)">删除</button>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      depts: []
    };
  },
  created() {
    this.fetchDepts();
  },
  methods: {
    fetchDepts() {
      this.$store.dispatch('fetchDepts');
    },
    deleteDept(id) {
      // 实现删除部门逻辑
    }
  }
};
</script>

2.3.2 DeptForm.vue

src/components/DeptForm.vue 中实现部门表单组件:

<template>
  <div>
    <h1>部门表单</h1>
    <form @submit.prevent="submitForm">
      <input type="text" v-model="dept.name" placeholder="部门名称" />
      <button type="submit">保存</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dept: {
        name: ''
      }
    };
  },
  methods: {
    submitForm() {
      // 实现表单提交逻辑
    }
  }
};
</script>

2.4 API 接口

在 `src/services/de