建立公司角色页面的基本结构
**目标
**建立公司页面的基本结构
根据以上的结构,我们采用element-ui的组件实现
src/views/setting/index.vue
<template> <div class="dashboard-container"> <div class="app-container"> <el-card> <el-tabs> <!-- 放置页签 --> <el-tab-pane label="角色管理"> <!-- 新增角色按钮 --> <el-row style="height:60px"> <el-button icon="el-icon-plus" size="small" type="primary" >新增角色</el-button> </el-row> <!-- 表格 --> <el-table border=""> <el-table-column label="序号" width="120" /> <el-table-column label="角色名称" width="240" /> <el-table-column label="描述" /> <el-table-column label="操作"> <el-button size="small" type="success">分配权限</el-button> <el-button size="small" type="primary">编辑</el-button> <el-button size="small" type="danger">删除</el-button> </el-table-column> </el-table> <!-- 分页组件 --> <el-row type="flex" justify="center" align="middle" style="height: 60px"> <!-- 分页组件 --> <el-pagination layout="prev,pager,next" /> </el-row> </el-tab-pane> <el-tab-pane label="公司信息"> <el-alert title="对公司名称、公司地址、营业执照、公司地区的更新,将使得公司资料被重新审核,请谨慎修改" type="info" show-icon :closable="false" /> <el-form label-width="120px" style="margin-top:50px"> <el-form-item label="公司名称"> <el-input disabled style="width:400px" /> </el-form-item> <el-form-item label="公司地址"> <el-input disabled style="width:400px" /> </el-form-item> <el-form-item label="邮箱"> <el-input disabled style="width:400px" /> </el-form-item> <el-form-item label="备注"> <el-input type="textarea" :rows="3" disabled style="width:400px" /> </el-form-item> </el-form> </el-tab-pane>
</el-tabs> </el-card> </div> </div> </template>
|
提交代码
**本节任务
**建立公司页面的基本结构
读取公司角色信息
**目标
**: 封装公司角色请求,读取公司角色信息
读取角色列表数据
首先,封装读取角色的信息的请求 src/api/setting.js
export function getRoleList(params) { return request({ url: '/sys/role', params }) }
|
params是查询参数,里面需要携带分页信息
然后,在页面中调用接口获取数据,绑定表格数据 src/views/setting/index.vue
import { getRoleList } from '@/api/setting' export default { data() { return { list: [], page: { page: 1, pagesize: 10, total: 0 } } }, created() { this.getRoleList() }, methods: { async getRoleList() { const { total, rows } = await getRoleList(this.page) this.page.total = total this.list = rows }, changePage(newPage) { this.page.page = newPage this.getRoleList() } } }
|
绑定表格数据
<el-table border="" :data="list"> <el-table-column align="center" type="index" label="序号" width="120" /> <el-table-column align="center" prop="name" label="名称" width="240" /> <el-table-column align="center" prop="description" label="描述" /> <el-table-column align="center" label="操作"> <el-button size="small" type="success">分配权限</el-button> <el-button size="small" type="primary">编辑</el-button> <el-button size="small" type="danger">删除</el-button> </el-table-column>
</el-table>
|
绑定分页数据
<!-- 放置分页组件 --> <el-row type="flex" justify="center" align="middle" style="height:60px"> <el-pagination :current-page="page.page" :page-size="page.pagesize" :total="page.total" layout="prev, pager, next" @current-change="changePage" /> </el-row>
|
读取公司信息数据
第二个tab页,我们同样需要读取数据
封装读取公司信息的api src/api/setting.js
export function getCompanyInfo(companyId) { return request({ url: `/company/${companyId}` }) }
|
绑定公司表单数据
<el-form label-width="120px" style="margin-top:50px"> <el-form-item label="公司名称"> <el-input v-model="formData.name" disabled style="width:400px" /> </el-form-item> <el-form-item label="公司地址"> <el-input v-model="formData.companyAddress" disabled style="width:400px" /> </el-form-item> <el-form-item label="邮箱"> <el-input v-model="formData.mailbox" disabled style="width:400px" /> </el-form-item> <el-form-item label="备注"> <el-input v-model="formData.remarks" type="textarea" :rows="3" disabled style="width:400px" /> </el-form-item> </el-form>
|
请求中的companyId来自哪里?它来自我们登录成功之后的用户资料,所以我们需要在该组件中使用vuex数据
src/store/getters.js
companyId: state => state.user.userInfo.companyId // 建立对于user模块的companyId的快捷访问 computed: { ...mapGetters(['companyId']) },
|
初始化时调用接口
async getCompanyInfo() { this.formData = await getCompanyInfo(this.companyId) } created() { this.getRoleList() this.getCompanyInfo() },
|
提交代码
**本节任务
**读取公司角色信息
删除角色功能
目标
实现删除角色的功能
封装删除角色的api
export function deleteRole(id) { return request({ url: `/sys/role/${id}`, method: 'delete' }) }
|
删除功能实现
async deleteRole(id) { try { await this.$confirm('确认删除该角色吗') await deleteRole(id) this.getRoleList() this.$message.success('删除角色成功') } catch (error) { console.log(error) } }
|
删除按钮注册事件
<!-- 作用域插槽 --> <template slot-scope="{ row }"> <el-button size="small" type="success">分配权限</el-button> <el-button size="small" type="primary">编辑</el-button> <el-button size="small" type="danger" @click="deleteRole(row.id)">删除</el-button> </template>
|
提交代码
编辑角色功能
**目标
**: 实现编辑角色的功能
封装编辑接口,新建编辑弹层
封装编辑角色的功能api
export function updateRole(data) { return request({ url: `/sys/role/${data.id}`, data, method: 'put' }) }
export function getRoleDetail(id) { return request({ url: `/sys/role/${id}` }) }
|
定义编辑弹层数据
showDialog: false,
roleForm: {}, rules: { name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }] },
|
编辑弹层结构
<el-dialog title="编辑弹层" :visible="showDialog" @close="btnCancel"> <el-form ref="roleForm" :model="roleForm" :rules="rules" label-width="120px"> <el-form-item label="角色名称" prop="name"> <el-input v-model="roleForm.name" /> </el-form-item> <el-form-item label="角色描述"> <el-input v-model="roleForm.description" /> </el-form-item> </el-form> <!-- 底部 --> <el-row slot="footer" type="flex" justify="center"> <el-col :span="6"> <el-button size="small" @click="btnCancel">取消</el-button> <el-button size="small" type="primary" @click="btnOK">确定</el-button> </el-col> </el-row> </el-dialog>
|
实现编辑功能,为新增功能留口
编辑功能实现(为新增功能留口)
async editRole(id) { this.roleForm = await getRoleDetail(id) this.showDialog = true }, async btnOK() { try { await this.$refs.roleForm.validate() if (this.roleForm.id) { await updateRole(this.roleForm) } else { } this.getRoleList() this.$message.success('操作成功') this.showDialog = false } catch (error) { console.log(error) } },
|
编辑按钮注册事件
<el-button size="small" type="primary" @click="editRole(row.id)">编辑</el-button>
|
提交代码
新增角色功能
**目标
**实现新增角色功能
封装新增角色功能api
export function addRole(data) { return request({ url: '/sys/role', data, method: 'post' }) }
|
新增功能实现和编辑功能合并(处理关闭)
async btnOK() { try { await this.$refs.roleForm.validate() if (this.roleForm.id) { await updateRole(this.roleForm) } else { await addRole(this.roleForm) } this.getRoleList() this.$message.success('操作成功') this.showDialog = false } catch (error) { console.log(error) } }, btnCancel() { this.roleForm = { name: '', description: '' } this.$refs.roleForm.resetFields() this.showDialog = false }
|
新增按钮注册事件
<el-button type="primary" size="small" @click="showDialog = true">新增角色</el-button>
|
提交代码
本节任务
新增角色功能
总结
我们完成了公司中角色管理的部分,但是并没有完成分配权限的部分,该部门会在权限设计和管理的部门重点提及