插件窝 干货文章 Vue 3如何构建复杂的审批表单?

Vue 3如何构建复杂的审批表单?

表单 Router const Vue 550    来源:    2025-03-20

在Vue 3中构建复杂的审批表单可以通过以下步骤实现。我们将使用Vue 3的组合式API(Composition API)来管理表单的状态和逻辑,并结合Vue Router和Vuex(或Pinia)来处理路由和状态管理。

1. 项目初始化

首先,确保你已经安装了Vue CLI并创建了一个新的Vue 3项目。

npm install -g @vue/cli
vue create approval-form
cd approval-form

2. 安装依赖

安装必要的依赖,如Vue Router和Pinia(或Vuex)。

npm install vue-router@next pinia

3. 创建路由

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

import { createRouter, createWebHistory } from 'vue-router';
import ApprovalForm from '../views/ApprovalForm.vue';

const routes = [
  {
    path: '/',
    name: 'ApprovalForm',
    component: ApprovalForm,
  },
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
});

export default router;

4. 创建表单组件

src/views/ApprovalForm.vue中创建审批表单组件。

<template>
  <div>
    <h1>审批表单</h1>
    <form @submit.prevent="submitForm">
      <div v-for="(field, index) in formFields" :key="index">
        <label :for="field.id">{{ field.label }}</label>
        <input
          v-if="field.type === 'text'"
          :type="field.type"
          :id="field.id"
          v-model="formData[field.id]"
        />
        <select
          v-else-if="field.type === 'select'"
          :id="field.id"
          v-model="formData[field.id]"
        >
          <option v-for="option in field.options" :key="option" :value="option">
            {{ option }}
          </option>
        </select>
        <!-- 其他类型的输入字段 -->
      </div>
      <button type="submit">提交</button>
    </form>
  </div>
</template>

<script>
import { ref } from 'vue';
import { useStore } from 'pinia';

export default {
  setup() {
    const store = useStore();
    const formFields = [
      { id: 'name', label: '姓名', type: 'text' },
      { id: 'department', label: '部门', type: 'select', options: ['IT', 'HR', 'Finance'] },
      // 其他字段
    ];
    const formData = ref({});

    const submitForm = () => {
      store.submitApproval(formData.value);
      // 提交后的逻辑,如跳转到确认页面
    };

    return {
      formFields,
      formData,
      submitForm,
    };
  },
};
</script>

5. 创建状态管理

src/stores/approvalStore.js中创建Pinia store。

import { defineStore } from 'pinia';

export const useApprovalStore = defineStore('approval', {
  state: () => ({
    approvals: [],
  }),
  actions: {
    submitApproval(formData) {
      this.approvals.push(formData);
      // 这里可以添加提交到后端的逻辑
    },
  },
});

6. 在main.js中配置Pinia

src/main.js中配置Pinia。

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { createPinia } from 'pinia';

const app = createApp(App);
app.use(router);
app.use(createPinia());
app.mount('#app');

7. 表单验证

可以使用VeeValidate或自定义验证逻辑来验证表单输入。

import { ref } from 'vue';

export default {
  setup() {
    const formData = ref({});
    const errors = ref({});

    const validateForm = () => {
      errors.value = {};
      if (!formData.value.name) {
        errors.value.name = '姓名不能为空';
      }
      // 其他验证逻辑
      return Object.keys(errors.value).length === 0;
    };

    const submitForm = () => {
      if (validateForm()) {
        // 提交表单
      }
    };

    return {
      formData,
      errors,
      submitForm,
    };
  },
};

8. 表单提交后的处理

在表单提交后,可以跳转到确认页面或显示成功消息。

import { useRouter } from 'vue-router';

export default {
  setup() {
    const router = useRouter();

    const submitForm = () => {
      // 提交表单逻辑
      router.push({ name: 'Confirmation' });
    };

    return {
      submitForm,
    };
  },
};

9. 测试和调试

使用Vue Devtools进行调试,确保表单逻辑和状态管理正常工作。

10. 部署

完成开发后,使用npm run build构建项目并部署到服务器。

通过以上步骤,你可以在Vue 3中构建一个复杂的审批表单。根据实际需求,你可以进一步扩展和优化表单的功能和用户体验。