提交 a4198c6b authored 作者: 龙菲's avatar 龙菲

角色管理

上级 1c06d651
......@@ -88,6 +88,16 @@ export function upadateUser(data) {
})
}
// 删除用户
export function deleteUser(data) {
return request({
url: '/sys/user',
method: 'delete',
data
})
}
// 以用户行为统计排序分页查询资源
export function getListByPageSort(data) {
return request({
......@@ -106,3 +116,44 @@ export function getBarMap(params) {
})
}
// 增加角色
export function addRole(data) {
return request({
url: '/sys/role',
method: 'post',
data
})
}
// 修改角色
export function upadateRole(data) {
return request({
url: 'sys/role',
method: 'put',
data
})
}
// 删除角色
export function deleteRole(id) {
return request({
url: '/sys/role/'+id,
method: 'delete',
})
}
// 获取所有目录菜单树
export function getPermissionTreeAll(params) {
return request({
url: '/sys/permission/tree/all',
method: 'get',
params
})
}
export function getPermissionById(id) {
return request({
url: `/sys/permission/${id}`,
method: 'get',
})
}
import {
login,
logout,
getMenu
getMenu,
getPermissionTreeAll
} from '@/api/user'
import {
getToken,
......@@ -25,6 +26,7 @@ const getDefaultState = () => {
menu: getLocalMenu(),
name: '',
avatar: '',
permissionTree: []
}
}
......@@ -48,7 +50,10 @@ const mutations = {
},
SET_MENU: (state, menu) => {
state.menu = menu
}
},
SET_PERMISSION_TREE_ALL: (state, permissionTree) => {
state.permissionTree = permissionTree
},
}
const actions = {
......@@ -153,6 +158,19 @@ const actions = {
})
},
// 获取权限树所有
getPermissionTreeAll({
commit
}) {
return new Promise(resolve => {
getPermissionTreeAll().then(res => {
commit('SET_PERMISSION_TREE_ALL', res.data)
resolve(res.data)
}).catch(err => {
reject(err)
})
})
},
}
......
......@@ -8,6 +8,7 @@ export const title = [{
prop: "keyword",
label: "关键词",
columnAlign: 'center',
showOverFlowToolTip: true,
},
{
prop: "type",
......
......@@ -13,51 +13,16 @@
</div>
<div class="dialog-content">
<el-form :model="dialogForm" class="basic-info">
<el-form-item label="名称" :label-width="formLabelWidth">
<el-form-item label="角色名称" :label-width="formLabelWidth">
<el-input
v-model="dialogForm.name"
autocomplete="off"
placeholder="请输入文献名称"
placeholder="请输入角色名称"
></el-input>
</el-form-item>
<el-form-item label="作者" :label-width="formLabelWidth">
<el-input
v-model="dialogForm.authors"
autocomplete="off"
placeholder="请输入作者"
></el-input>
</el-form-item>
<el-form-item label="文献来源" :label-width="formLabelWidth">
<el-input
v-model="dialogForm.source"
autocomplete="off"
placeholder="请输入文献来源"
></el-input>
</el-form-item>
<el-form-item label="出版/发布日期" :label-width="formLabelWidth">
<el-date-picker
style="width: 100%"
v-model="dialogForm.date"
type="date"
placeholder="请选择出版/发布日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item label="状态" :label-width="formLabelWidth">
<el-switch v-model="status"> </el-switch>
</el-form-item>
<el-form-item label="文件" :label-width="formLabelWidth">
<ManualUploader
:files="files"
:fileLimit="1"
:fileSize="50"
listType="text"
:fileType="['pdf']"
ref="pdf"
/>
</el-form-item>
<el-form-item label="备注" :label-width="formLabelWidth">
<el-input
type="textarea"
......@@ -68,6 +33,15 @@
>
</el-input>
</el-form-item>
<el-form-item label="权限" :label-width="formLabelWidth">
<el-tree
:data="permissionTree"
show-checkbox
:props="props"
@check-change="handleCheckChange"
>
</el-tree>
</el-form-item>
</el-form>
</div>
<div class="dialog-footer">
......@@ -80,15 +54,9 @@
</template>
<script>
import { addLiterature, editLiterature } from "@/api/literature";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import { uploadFile } from "@/utils/file";
import { addRole, editRole, getPermissionTreeAll,getPermissionById } from "@/api/user";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
},
props: {
visible: {
type: Boolean,
......@@ -100,29 +68,27 @@ export default {
},
},
computed: {
...mapGetters(["userInfo"]),
title() {
if (this.dialogForm.literatureId) {
return "修改文献";
if (this.dialogForm.id) {
return "修改角色信息";
} else {
return "添加文献";
return "添加新角色";
}
},
},
watch: {
form: {
handler: function (value) {
debugger
let that = this;
that.dialogForm = JSON.parse(JSON.stringify(value));
// 编辑状态
if (that.dialogForm.literatureId) {
if (that.dialogForm.id) {
// 回填状态
that.status = Boolean(Number(that.dialogForm.status));
// 回填文件
if (that.dialogForm.files) {
that.files = that.dialogForm.files;
}
// let perm = await getPermissionById
that.getPer()
}
},
immediate: true,
......@@ -143,8 +109,21 @@ export default {
status: false,
files: [], //文献文件
dialogVisible: false,
permissionTree: [],
props: {
value: "id",
label: "title",
children: "children",
checkStrictly: true,
},
};
},
async created() {
let res = await getPermissionTreeAll();
this.permissionTree = res.data
console.log(this.permissionTree);
// console.log(res);
},
methods: {
handlePreview({ type, file }) {
console.log(type, file);
......@@ -160,30 +139,16 @@ export default {
async handleSubmit() {
let params = JSON.parse(JSON.stringify(this.dialogForm));
// 回填文件
let file = this.$refs.pdf.getFiles();
let formData = new FormData();
if (file[0].status == "ready") {
formData.append("files", file[0].raw);
let upLoadRes = await uploadFile(formData);
if (upLoadRes.code == 0) {
params.pdfFile = upLoadRes.data[0].fileId;
} else {
this.$message.error("上传失败!:" + upLoadRes.data.msg);
}
} else if (file[0].status == "success") {
params.pdfFile = file[0].fileId;
}
// 修改状态
params.status = this.status ? 1 : 0;
if (params.literatureId) {
let res = await editLiterature(params);
let res = await editRole(params);
if (res.code == 0) {
this.$message.success("修改成功!");
this.reload();
}
} else {
let res = await addLiterature(params);
let res = await addRole(params);
if (res.code == 0) {
this.$message.success("添加成功!");
this.reload();
......@@ -204,6 +169,16 @@ export default {
})
.catch((_) => {});
},
handleCheckChange(data, checked, indeterminate) {
console.log(data, checked, indeterminate);
},
async getPer(){
let res = await getPermissionById(this.dialogForm.id)
debugger
console.log(res);
}
},
};
</script>
......
......@@ -38,6 +38,14 @@
clearable
></el-input>
</el-form-item>
<el-form-item label="昵称" :label-width="formLabelWidth">
<el-input
v-model="dialogForm.nickName"
autocomplete="off"
placeholder="请输入昵称"
clearable
></el-input>
</el-form-item>
<el-form-item label="真实姓名" :label-width="formLabelWidth">
<el-input
v-model="dialogForm.realName"
......@@ -49,7 +57,7 @@
<el-form-item label="所属部门" :label-width="formLabelWidth">
<el-cascader
style="width: 100%"
v-model="dialogForm.deptNo"
v-model="dialogForm.deptId"
:options="orgTreeData"
:props="optionProps"
placeholder="请选择所属部门"
......@@ -113,6 +121,8 @@ export default {
if (that.dialogForm.id) {
// 回填状态
that.status = Boolean(Number(that.dialogForm.status));
// 回填部门
that.dialogForm.deptId = [that.dialogForm.deptId];
}
},
immediate: true,
......@@ -247,7 +257,11 @@ export default {
// 修改状态
params.status = this.status ? 1 : 0;
console.log(22, params);
return;
// return;
// 处理馆藏单位
if (params.deptId instanceof Array) {
params.deptId = params.deptId[params.deptId.length - 1];
}
if (params.id) {
let res = await upadateUser(params);
if (res.code == 0) {
......
......@@ -2,46 +2,82 @@
<div class="users app-container">
<el-row :gutter="16">
<el-col :span="6">
<el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" default-expand-all
:expand-on-click-node="false"></el-tree>
<el-tree
:data="treeData"
:props="defaultProps"
@node-click="handleNodeClick"
default-expand-all
:expand-on-click-node="false"
></el-tree>
</el-col>
<el-col :span="18">
<div class="top-bar">
<SearchBar :config="searchConfig" @search="search" @reset="reset" />
<el-button type="primary" @click.native="handleOperation({ type: 'add' })" icon="el-icon-s-promotion">
新增</el-button>
<el-button
type="primary"
@click.native="handleOperation({ type: 'add' })"
icon="el-icon-s-promotion"
>
新增</el-button
>
</div>
<TablePage :data="list.records" :tableTitle="tableTitle" :operates="tableOperates">
<TablePage
:data="list.records"
:tableTitle="tableTitle"
:operates="tableOperates"
>
<template v-slot:status="data">
<el-popconfirm :title="getStatusTitle(data.scope.status)" @onConfirm="handleChangeStatus(data.scope)">
<el-switch slot="reference" :value="Boolean(Number(data.scope.status))"></el-switch>
<el-popconfirm
:title="getStatusTitle(data.scope.status)"
@onConfirm="handleChangeStatus(data.scope)"
>
<el-switch
slot="reference"
:value="Boolean(Number(data.scope.status))"
></el-switch>
</el-popconfirm>
</template>
<template v-slot:operates="scope">
<TableOperation :operations="tableOperations" :rawData="scope.scope.row" @handleOperation="handleOperation">
<TableOperation
:operations="tableOperations"
:rawData="scope.scope.row"
@handleOperation="handleOperation"
>
</TableOperation>
</template>
</TablePage>
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="Number(list.current)" :page-sizes="[10, 20, 40, 50]" :page-size="Number(list.size)"
layout="total, sizes, prev, pager, next, jumper" :total="Number(list.total)" class="pagination">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="Number(list.current)"
:page-sizes="[10, 20, 40, 50]"
:page-size="Number(list.size)"
layout="total, sizes, prev, pager, next, jumper"
:total="Number(list.total)"
class="pagination"
>
</el-pagination>
</el-col>
</el-row>
<InfoEditDialog :visible="dialogVisible" :form="form" :orgTreeData="treeData" @handleClose="handleClose"
@refresh="loadListData" />
<InfoEditDialog
:visible="dialogVisible"
:form="form"
:orgTreeData="treeData"
@handleClose="handleClose"
@refresh="loadListData"
/>
</div>
</template>
<script>
import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue";
import SearchBar from "@/components/SearchBar";
import { title, operates, operations } from "./config";
import { getDeptTree, getUserList } from "@/api/user";
import InfoEditDialog from "./components/InfoEditDialog.vue";
export default {
import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue";
import SearchBar from "@/components/SearchBar";
import { title, operates, operations } from "./config";
import { getDeptTree, getUserList, deleteUser } from "@/api/user";
import InfoEditDialog from "./components/InfoEditDialog.vue";
export default {
components: {
TablePage,
TableOperation,
......@@ -61,12 +97,12 @@
getStatusTitle(status) {
return (status) => {
if (status) {
return '是否确定要弃用?'
return "是否确定要弃用?";
} else {
return '是否确定要启用?'
}
}
return "是否确定要启用?";
}
};
},
},
data() {
return {
......@@ -85,7 +121,7 @@
{
prop: "username",
type: "input",
label: "用户名",
label: "账号",
},
{
prop: "phone",
......@@ -100,11 +136,11 @@
password: "", //密码
phone: "", //手机号
realName: "", //真实姓名
deptNo: "",
deptId: "",
// sex:1,//1-男性 2-女性
status: 0,//启用状态
status: 0, //启用状态
},
dialogVisible: false
dialogVisible: false,
};
},
mounted() {
......@@ -178,11 +214,11 @@
this.dialogVisible = true;
break;
case "delete":
// let deleteRes = await deleteLt([row.literatureId]);
// if (deleteRes.code == 0) {
// this.$message.success("删除成功!");
// this.loadData();
// }
let deleteRes = await deleteUser([row.id]);
if (deleteRes.code == 0) {
this.$message.success("删除成功!");
this.loadListData();
}
break;
}
},
......@@ -194,22 +230,22 @@
};
},
},
};
};
</script>
<style lang="scss" scoped>
.top-bar {
.top-bar {
display: flex;
justify-content: space-between;
align-items: flex-end;
margin-bottom: 10px;
}
}
.pagination {
.pagination {
margin: 16px;
}
}
.el-button {
.el-button {
margin-bottom: 22px;
}
}
</style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论