一.增
步骤:
1.定义api
2.导入api
3.点击新增的时候弹出dialog框
4.在全局表单验证通过后
(1)调用api接口
(2)提示新增成功
(3)刷新父级列表的数据
(4)重置表单,重置验证规则
二.删
步骤:
1.定义删除的api
2.导入api
3.在点击的时候弹出$confrim框。
4.点击确定的时候调用api
5.提示删除成功。
6.回到第一页。
注意:如果不回到第一页会出现Bug。
三.改
步骤:
1.打开弹窗
2.回显数据
a.当前行数据包含所有数据,只需要传递(深拷贝)过去
b.当前行数据不包含所有数据,调用接口获取完整数据回显。
3.定义一个变量用于区分场景
分场景处理:
(1).标题
(2).表单验证
(3).分场景调用接口
定义编辑api
导入
调用
关闭弹窗
四.查
步骤:
1.定义接口的api
2.导入api
3.点击打开弹窗
4.调用api,提示调用成功
5.刷新列表数据
6.重置规则,重置表单验证
五.代码
api/setting.js
import request from '@/utils/request'
// 获取所有角色列表
export function sysRole(params) {
return request({
url: '/sys/role',
params
})
}
// 获取企业信息
export function company(id) {
return request({
url: `/company/${id}`
})
}
// 新增角色
export function sysRolePost(data) {
return request({
url: `/sys/role`,
method: 'post',
data
})
}
// 删除角色
export function sysRoleDelete(id) {
return request({
url: `/sys/role/` + id,
method: 'DELETE'
})
}
// 编辑角色
export function sysRolePut(data) {
return request({
url: `/sys/role/` + data.id,
method: 'put'
})
}
index.vue
<template>
<div class="setting">
<el-card>
<el-tabs>
<el-tab-pane label="角色管理" lazy>
<el-button
type="primary"
size="small"
@click="addClick"
>+新增角色</el-button>
<el-table :data="list">
<!-- 数据绑定data -->
<!-- label表示标题 -->
<!-- prop='对应的字段名' -->
<!-- 自定义列 -->
<!-- <template>
<div v-slot="{$index:索引}:row:当前行数据">
</div>
</template> -->
<el-table-column label="序号" type="index">
<template v-slot="{ $index }">
<div>
{{ (page.page - 1) * page.pagesize + $index + 1 }}
</div>
</template>
</el-table-column>
<el-table-column label="角色名" prop="name" />
<el-table-column label="描述" prop="description" />
<el-table-column label="操作">
<!-- row当前行的数据 -->
<template v-slot="{ row }">
<div>
<el-button type="text">分配权限</el-button>
<!-- 1.打开弹窗 -->
<!-- 2.回显数据 -->
<!-- 当前行数据 包含所有数据 只需要传过去-->
<!-- 3.定义变量区分场景 -->
<!-- 1.标题 -->
<!-- 2.表单验证 -->
<!-- 3.分场景调用接口 -->
<!-- 定义编辑api -->
<!-- 导入 -->
<el-button type="text" @click="edit(row)">修改</el-button>
<el-button type="text" @click="del(row)">删除</el-button>
</div>
</template>
</el-table-column>
</el-table>
<div class="page">
<!-- current-page当前页 -->
<!-- page-sizes 页容量 默认页容量一定要在页容量中存在-->
<!-- layout布局 -->
<el-pagination
style="text-align: right"
:current-page="page.page"
:page-sizes="[1, 10, 100, 200, 300, 400]"
:page-size="page.pagesize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
<el-tab-pane label="公司信息" lazy>
<Info />
</el-tab-pane>
</el-tabs>
</el-card>
<Add ref="add" />
</div>
</template>
<script>
import { sysRole, sysRoleDelete } from '@/api/setting.js'
import Add from './components/add.vue'
export default {
name: '',
components: {
Info: () => import('./components/info.vue'),
Add
},
data() {
return {
list: [],
page: {
page: 1, // 默认页码
pagesize: 10, // 每页条数
total: 100
}
}
},
created() {
this.getData()
},
methods: {
// 页码改变
handleSizeChange(size) {
this.page.pagesize = size
// 页容量回到第一页
this.page.page = 1
this.getData()
console.log(size)
},
// 页容量改变
handleCurrentChange(page) {
this.page.page = page
this.getData()
console.log(page)
},
// 获取列表
async getData() {
const res = await sysRole(this.page)
// 存储分页总数
this.page.total = res.data.total
// 存储列表数据
this.list = res.data.rows
console.log(res.data.rows, '返回的数据')
},
// 新增按钮的点击
addClick() {
// 打开弹窗
this.$refs.add.isShow = true
this.$refs.add.mode = 'add'
},
// 删除事件
del(row) {
console.log(row)
this.$confirm('你确定要删除该角吗?', '提示')
.then(async() => {
await sysRoleDelete(row.id)
// 提示信息
this.$message.success('删除成功')
// 刷新列表数据回到第一页
this.handleCurrentChange(1)
})
.catch(() => {})
},
// 修改
edit(row) {
this.$refs.add.isShow = true
// 回显数据
this.$refs.add.form = JSON.parse(JSON.stringify(row))
this.$refs.add.mode = 'edit'
}
}
}
</script>
<style scoped></style>
add.vue(弹窗)
<template>
<div class="">
<el-dialog
:visible="isShow"
:title="{ add: '新增角色', edit: '编辑角色' }[mode]"
@close="closeEvent"
>
<el-form ref="form" label-width="100px" :rules="rules" :model="form">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" />
</el-form-item>
<el-form-item label="角色描述" prop="description">
<el-input v-model="form.description" />
</el-form-item>
</el-form>
<template>
<div style="text-align: center">
<el-button @click="closeEvent">取消</el-button>
<el-button type="primary" @click="submit">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
import { sysRolePost, sysRolePut } from '@/api/setting'
export default {
name: '',
model: {
prop: 'isShow'
},
// props: {
// isShow: {
// type: Boolean,
// default: false
// }
// },
data() {
return {
mode: 'add', // 默认 新增 edit 编辑
isShow: false,
form: {
name: '', // 角色名称
description: '' // 角色描述
},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
description: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
methods: {
closeEvent() {
// 子传递父值,将其变为false
this.isShow = false
// 重置表单
this.$refs.form.resetFields
this.form = {
name: '',
description: ' '
}
},
// 确定按钮
submit() {
this.$refs.form.validate(async(result) => {
if (result) {
if (this.mode === 'add') {
await sysRolePost(this.form)
// 关闭页面
this.$message.success('新增成功')
} else {
await sysRolePut(this.form)
this.$message.success('编辑成功')
}
this.closeEvent()
// 刷新父级列表的数据
// 组件的ref拿到的是add组件的实例对象
}
})
}
}
}
</script>
<style scoped></style>
?孔子曰:"学而不思则罔,思而不学则殆"这句话的意思是一味读书而不思考,就会因为不能深刻理解书本的意义而不能合理有效利用书本的知识,甚至会陷入迷茫。而如果一味空想而不去进行实实在在地学习和钻研,则终究是沙上建塔,一无所得。
|