提交 64acf552 编写于 作者: kadycui's avatar kadycui 💻

ADD: 角色管理

上级 f401a183
import axios from '@/axios'
export function getRoleList(page) {
return axios.get(`/admin/role/${page}`)
}
export function createRole(data) {
return axios.post("/admin/role", data)
}
export function updateRole(id, data) {
return axios.post("/admin/role/" + id, data)
}
export function deleteRole(id) {
return axios.post(`/admin/role/${id}/delete`)
}
export function updateRoleStatus(id, status){
return axios.post(`/admin/role/${id}/update_status`, {status})
}
\ No newline at end of file
......@@ -48,7 +48,6 @@
<script setup>
import { ref, reactive, computed } from "vue"
import {
getNoticeList,
createNotice,
......@@ -88,8 +87,8 @@ const {
} = useInitForm(
{
form: {
"title": "",
"content": ""
title: "",
content: ""
},
rules: {
title: [
......
<template>
<el-card shadow="never" class="border-0">
<!-- 新增 | 刷新 -->
<ListHeader @create="handleCreate" @refresh="getData" />
<el-table :data="tableData" stripe style="width: 100%"
element-loading-text="加载中..."
element-loading-spinner="el-icon-loading"
v-loading="loading">
<el-table-column prop="name" label="角色名称" />
<el-table-column prop="desc" label="角色描述" />
<el-table-column label="状态" width="120">
<template #default="{ row }">
<el-switch :modelValue="row.status" :active-value="1" :inactive-value="0" :loading="row.statusLoading"
:disabled="row.super == 1" @change="handleStatusChange($event, row)">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作" width="180" align="center">
<template #default="scope">
<el-button type="primary" size="small" text @click="handleEdit(scope.row)">修改</el-button>
<el-popconfirm title="是否删除此角色?" confirm-button-text="确认" cancel-button-text="取消"
@confirm="handleDelete(scope.row.id)">
<template #reference>
<el-button text type="primary" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div class="flex items-center justify-center mt-5">
<el-pagination background layout="prev,pager, next" :total="total" :current-page="currentPage"
:page-size="limit" @current-change="getData" />
</div>
<FormDrawer ref="formDrawerRef" :title="drawerTitle" @submit="handleSubmit">
<el-form :model="form" ref="formRef" :rules="rules" label-width="80px" :inline="false">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" placeholder="角色名称"></el-input>
</el-form-item>
<el-form-item label="角色描述" prop="desc">
<el-input v-model="form.desc" placeholder="描述内容" type="textarea" :rows="5"></el-input>
</el-form-item>
<el-form-item label="角色状态" prop="status">
<el-switch v-model="form.status" :active-value="1" :inactive-value="0" >
</el-switch>
</el-form-item>
</el-form>
</FormDrawer>
</el-card>
</template>
<script setup>
import {
getRoleList,
createRole,
updateRole,
deleteRole,
updateRoleStatus
} from "@/api/role"
import FormDrawer from "@/components/FormDrawer.vue"
import ListHeader from "@/components/ListHeader.vue"
import { useInitTable, useInitForm } from "@/composables/useCommon.js"
const {
tableData,
loading,
currentPage,
total,
limit,
getData,
handleDelete,
handleStatusChange
} = useInitTable({
getList: getRoleList,
delete: deleteRole,
updateStatus:updateRoleStatus
})
const {
formDrawerRef,
formRef,
form,
rules,
drawerTitle,
handleSubmit,
handleCreate,
handleEdit
} = useInitForm(
{
form: {
name: "",
desc: "",
status:1
},
rules: {
name: [
{
required: true,
message: '角色名称不能为空',
trigger: 'blur'
}
],
},
getData,
update: updateRole,
create: createRole
})
</script>
\ No newline at end of file
......@@ -17,6 +17,7 @@ import SettingList from '@/pages/setting/base.vue'
import CouponList from '@/pages/coupon/list.vue'
import ManagerList from '@/pages/manager/list.vue'
import AccessList from '@/pages/access/list.vue'
import RoleList from '@/pages/role/list.vue'
......@@ -187,6 +188,13 @@ const asyncRoutes = [{
title: "菜单权限管理"
}
},{
path: "/role/list",
name: "/role/list",
component: RoleList,
meta: {
title: "角色管理"
}
}]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册