当前位置:首页 > VUE

vue实现机构用户

2026-02-20 05:13:52VUE

Vue实现机构用户管理功能

环境准备 确保已安装Node.js和Vue CLI。使用以下命令创建Vue项目:

vue create organization-management
cd organization-management

安装必要依赖 Axios用于API请求,Element UI提供UI组件:

npm install axios element-ui

项目结构

src/
├── api/
│   └── organization.js    # API接口封装
├── components/
│   └── OrgDialog.vue      # 新增/编辑机构弹窗
├── views/
│   └── Organization.vue   # 机构管理主页面
├── router/
│   └── index.js           # 路由配置
└── store/
    └── modules/           # Vuex模块
        └── org.js

核心代码实现

API层封装 (organization.js)

vue实现机构用户

import axios from 'axios';

const api = {
  getOrgList(params) {
    return axios.get('/api/organizations', { params });
  },
  createOrg(data) {
    return axios.post('/api/organizations', data);
  },
  updateOrg(id, data) {
    return axios.put(`/api/organizations/${id}`, data);
  },
  deleteOrg(id) {
    return axios.delete(`/api/organizations/${id}`);
  }
};

export default api;

Vuex状态管理 (org.js)

const state = {
  orgList: [],
  pagination: {
    page: 1,
    pageSize: 10,
    total: 0
  }
};

const mutations = {
  SET_ORG_LIST(state, list) {
    state.orgList = list;
  },
  UPDATE_PAGINATION(state, pagination) {
    state.pagination = { ...state.pagination, ...pagination };
  }
};

const actions = {
  async fetchOrgList({ commit, state }) {
    const res = await api.getOrgList({
      page: state.pagination.page,
      size: state.pagination.pageSize
    });
    commit('SET_ORG_LIST', res.data.list);
    commit('UPDATE_PAGINATION', { total: res.data.total });
  }
};

export default {
  namespaced: true,
  state,
  mutations,
  actions
};

主页面组件 (Organization.vue)

vue实现机构用户

<template>
  <div class="org-container">
    <el-button type="primary" @click="showDialog">新增机构</el-button>

    <el-table :data="orgList" border>
      <el-table-column prop="name" label="机构名称"></el-table-column>
      <el-table-column prop="code" label="机构代码"></el-table-column>
      <el-table-column label="操作">
        <template v-slot="{row}">
          <el-button @click="editOrg(row)">编辑</el-button>
          <el-button @click="deleteOrg(row.id)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <el-pagination
      @current-change="handlePageChange"
      :page-size="pagination.pageSize"
      :total="pagination.total">
    </el-pagination>

    <org-dialog 
      v-if="dialogVisible"
      :visible.sync="dialogVisible"
      :formData="currentOrg"
      @submit="handleSubmit">
    </org-dialog>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';
import OrgDialog from '@/components/OrgDialog';

export default {
  components: { OrgDialog },
  computed: {
    ...mapState('org', ['orgList', 'pagination'])
  },
  methods: {
    ...mapActions('org', ['fetchOrgList']),
    showDialog() {
      this.currentOrg = {};
      this.dialogVisible = true;
    }
  },
  created() {
    this.fetchOrgList();
  }
};
</script>

表单验证处理

在机构表单组件中添加验证规则:

data() {
  return {
    rules: {
      name: [
        { required: true, message: '请输入机构名称', trigger: 'blur' },
        { min: 2, max: 50, message: '长度在2到50个字符', trigger: 'blur' }
      ],
      code: [
        { pattern: /^[A-Za-z0-9]+$/, message: '只能包含字母和数字' }
      ]
    }
  };
}

性能优化建议

  1. 表格数据分页加载,避免一次性请求大量数据
  2. 使用防抖处理搜索输入框的实时查询
  3. 对频繁访问的数据添加本地缓存
  4. 采用懒加载方式引入第三方组件库

常见问题解决方案

机构树形结构展示 使用递归组件实现多级机构展示:

<template>
  <div class="tree-node">
    <div @click="toggle">{{ node.name }}</div>
    <div v-show="expanded" v-for="child in node.children" :key="child.id">
      <org-tree :node="child"></org-tree>
    </div>
  </div>
</template>

<script>
export default {
  name: 'OrgTree',
  props: ['node'],
  data() {
    return { expanded: false };
  },
  methods: {
    toggle() {
      this.expanded = !this.expanded;
    }
  }
};
</script>

数据权限控制 在Vuex中实现基于角色的数据过滤:

// store/modules/user.js
const actions = {
  filterOrgList({ commit, rootState }, list) {
    if (rootState.user.role === 'admin') {
      return list;
    }
    return list.filter(item => item.visible === true);
  }
};

标签: 机构用户
分享给朋友:

相关文章

vue实现机构树

vue实现机构树

Vue 实现机构树 在 Vue 中实现机构树(组织结构树或树形结构)通常需要使用递归组件或第三方库。以下是几种常见的方法: 使用递归组件 递归组件是 Vue 中实现树形结构的常见方式。通过组件调用…

如何实现vue验证用户

如何实现vue验证用户

验证用户的基本流程 在Vue中验证用户通常涉及前端表单验证、后端API交互以及状态管理。以下是实现用户验证的常见方法。 前端表单验证 使用Vue的响应式特性和第三方库(如VeeValidate)对…

vue实现bpmn选择用户

vue实现bpmn选择用户

在Vue中实现BPMN用户选择功能 要在Vue项目中实现BPMN用户选择功能,需要结合BPMN.js库和自定义用户选择组件。以下是具体实现方法: 安装BPMN.js和相关依赖 确保项目中已安装bpm…

react页面如何获取用户id

react页面如何获取用户id

获取用户ID的方法 在React应用中获取用户ID通常涉及前端与后端的交互,以下是几种常见实现方式: 通过登录认证获取 用户登录后,后端通常会返回包含用户ID的令牌(如JWT)或会话信息。前端可将这…

php添加用户怎么实现

php添加用户怎么实现

创建用户表单 在HTML中设计一个用户注册表单,包含必要的字段如用户名、密码、邮箱等。表单的action属性指向处理用户添加的PHP脚本。 <form action="add_user.ph…

php实现用户个人主页

php实现用户个人主页

实现用户个人主页的基本步骤 创建数据库表存储用户信息,通常包括用户ID、用户名、邮箱、密码哈希、头像URL等字段。使用MySQL示例: CREATE TABLE users ( id IN…