From a266ece06a2a4c906e5377d3417962fa3760aef6 Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期三, 29 六月 2022 18:31:53 +0800
Subject: [PATCH] 'lct'
---
src/views/system/role/index.vue | 73 +----
src/api/role/index.ts | 14 +
src/views/system/department/component/deptDialog.vue | 12
src/router/backEnd.ts | 2
src/views/system/department/index.vue | 8
src/stores/userInfo.ts | 3
/dev/null | 242 ------------------
src/views/system/menu/index.vue | 29 +
src/views/system/role/component/roleDialog.vue | 151 +++++++++++
src/utils/debounce.ts | 25 +
src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue | 153 +++++++++++
src/api/menu/index.ts | 14
src/views/login/component/account.vue | 2
src/api/productionDevice/index.ts | 34 ++
14 files changed, 432 insertions(+), 330 deletions(-)
diff --git a/src/api/menu/index.ts b/src/api/menu/index.ts
index 2af998a..a8e0864 100644
--- a/src/api/menu/index.ts
+++ b/src/api/menu/index.ts
@@ -28,12 +28,12 @@
data:value
});
},
- // getMenuTest: (params?: string) => {
- // return request({
- // url: '/gitee/lyt-top/vue-next-admin-images/raw/master/menu/testMenu.json',
- // method: 'get',
- // params,
- // });
- // },
+ deleteMenu: (value?: object) => {
+ return request({
+ url: `/menu/del`,
+ method: 'post',
+ data:value,
+ });
+ },
};
}
diff --git a/src/api/productionDevice/index.ts b/src/api/productionDevice/index.ts
new file mode 100644
index 0000000..275a254
--- /dev/null
+++ b/src/api/productionDevice/index.ts
@@ -0,0 +1,34 @@
+import request from '/@/utils/request'
+
+export function productionDeviceApi() {
+ return {
+ getProductionDeviceList: (data: object) => {
+ return request({
+ url: `/prevent/device/select/getDevicePage`,
+ method: 'post',
+ data:data
+ });
+ },
+ addProductionDevice: (data: object) => {
+ return request({
+ url: `/prevent/device/insert/saveDevice`,
+ method: 'post',
+ data:data
+ });
+ },
+ modProductionDevice: (data: object) => {
+ return request({
+ url: `/prevent/device/update/updateDevice`,
+ method: 'post',
+ data:data
+ });
+ },
+ deleteProductionDevice: (data: object) => {
+ return request({
+ url: `/prevent/device/delete/deleteDevice`,
+ method: 'post',
+ data:data
+ });
+ },
+ }
+}
diff --git a/src/api/role/index.ts b/src/api/role/index.ts
index 137195d..1d1ac38 100644
--- a/src/api/role/index.ts
+++ b/src/api/role/index.ts
@@ -8,5 +8,19 @@
method: 'post',
});
},
+ addRole: (data: object) => {
+ return request({
+ url: `/role/add`,
+ method: 'post',
+ data:data
+ });
+ },
+ modRole: (data: object) => {
+ return request({
+ url: `/role/mod`,
+ method: 'post',
+ data:data
+ });
+ },
};
}
diff --git a/src/router/backEnd.ts b/src/router/backEnd.ts
index 5cb3d0d..c109d30 100644
--- a/src/router/backEnd.ts
+++ b/src/router/backEnd.ts
@@ -29,7 +29,7 @@
export async function initBackEndControlRoutes() {
if (window.nextLoading === undefined) NextLoading.start();
if (!Session.get('token')) return false;
- const res = await getBackEndControlRoutes(Session.get('projectId'));
+ const res = await getBackEndControlRoutes(Session.get('projectId') === null ? '' : Session.get('projectId'));
useRequestOldRoutes().setRequestOldRoutes(JSON.parse(JSON.stringify(res.data.data)));
dynamicRoutes[0].children = await backEndComponent(res.data.data);
await setAddRoute();
diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts
index 1408dfa..9714aab 100644
--- a/src/stores/userInfo.ts
+++ b/src/stores/userInfo.ts
@@ -21,9 +21,8 @@
}),
actions: {
async setUserInfos(value: any) {
- debugger
this.userInfos.userName = value.username
- this.userInfos.uid = value.id
+ this.userInfos.uid = value.uid
this.userInfos.roles = value.role
// const userName = Cookies.get('userName');
// // 模拟数据
diff --git a/src/utils/debounce.ts b/src/utils/debounce.ts
new file mode 100644
index 0000000..e6f754d
--- /dev/null
+++ b/src/utils/debounce.ts
@@ -0,0 +1,25 @@
+import { App } from 'vue'
+
+export function preventClick(app: App){
+ app.directive('debounce', {
+ mounted(el, binding) {
+ let timer : NodeJS.Timeout | null = null
+ el.addEventListener('click', () => {
+ debugger
+ let firstClick: Boolean = !timer;
+ if(firstClick){
+ binding.value
+ }
+ if(timer){
+ clearTimeout(timer)
+ }
+ timer = setTimeout(() => {
+ timer = null
+ if(!firstClick){
+ binding.value
+ }
+ },3000);
+ })
+ }
+ })
+}
diff --git a/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue
index b562500..76f4724 100644
--- a/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue
+++ b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue
@@ -1,13 +1,150 @@
<template>
- <div>1</div>
+ <div class="system-role-container">
+ <el-card shadow="hover">
+ <div class="system-user-search mb15">
+ <el-input size="default" placeholder="请输入角色名称" style="max-width: 180px"> </el-input>
+ <el-button size="default" type="primary" class="ml10" @click="handleSearch">
+ <el-icon>
+ <ele-Search />
+ </el-icon>
+ 查询
+ </el-button>
+ <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')">
+ <el-icon>
+ <ele-FolderAdd />
+ </el-icon>
+ 新增角色
+ </el-button>
+ </div>
+ <el-table :data="productionDeviceData.data" style="width: 100%">
+ <el-table-column type="index" label="序号" width="60" />
+ <el-table-column prop="produceDeviceName" label="生产装置名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="depName" label="所属部门" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="riskLevel" label="风险等级" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="depName" label="区域位置" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="status" label="状态" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="gtmCreate" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="lastEditByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="gtmCreate" label="最后修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="150">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="onOpenDialogRef('新增','')">新增</el-button>
+ <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button>
+ <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+ <roleDialog ref="roleDialogRef" @refreshRoleList="initRoleTableData"/>
+ </div>
</template>
-<script>
- export default {
- name: "index"
+<script lang="ts">
+ import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
+ import { ElMessageBox, ElMessage } from 'element-plus';
+ import roleDialog from '/@/views/system/role/component/roleDialog.vue';
+ import {productionDeviceApi} from "/@/api/productionDevice";
+
+ // 定义接口来定义对象的类型
+ interface TableData {
+ roleName: string;
+ roleSign: string;
+ describe: string;
+ sort: number;
+ status: boolean;
+ createTime: string;
}
+ interface TableDataState {
+ productionDeviceData: {
+ data: Array<TableData>;
+ total: number;
+ loading: boolean;
+ params: {
+ pageIndex: number;
+ pageSize: number;
+ riskLevel:number;
+ status:number;
+ depName:string;
+ location:string;
+ produceDeviceName:string;
+ };
+ };
+ }
+
+ export default defineComponent({
+ name: 'productionDevice',
+ components: { roleDialog },
+ setup() {
+ const roleDialogRef = ref();
+ const state = reactive<TableDataState>({
+ productionDeviceData: {
+ data: [],
+ total: 0,
+ loading: false,
+ params: {
+ pageIndex: 1,
+ pageSize: 10,
+ riskLevel:1,
+ status:1,
+ depName:"",
+ location:"",
+ produceDeviceName:""
+ },
+ },
+ });
+ // 初始化表格数据
+ const initProductionDeviceTableData = async () => {
+ let res = await productionDeviceApi().getProductionDeviceList(state.productionDeviceData.params)
+ if(res.data.code === '200'){
+ state.productionDeviceData.data = res.data.data;
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ };
+ // 打开新增角色弹窗
+ const onOpenDialogRef = (type: string, value: any) => {
+ roleDialogRef.value.openDialog(type, value);
+ };
+ // 删除角色
+ const onRowDel = (row: any) => {
+ ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.roleName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }).then(() => {
+ ElMessage.success('删除成功');
+ }).catch(() => {});
+ };
+ const handleSearch = () => {
+ initProductionDeviceTableData()
+ }
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.productionDeviceData.param.pageSize = val;
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.productionDeviceData.param.pageNum = val;
+ };
+ // 页面加载时
+ onMounted(() => {
+ initProductionDeviceTableData();
+ });
+ return {
+ onRowDel,
+ roleDialog,
+ handleSearch,
+ roleDialogRef,
+ onOpenDialogRef,
+ initProductionDeviceTableData,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state),
+ };
+ },
+ });
</script>
-
-<style scoped>
-
-</style>
diff --git a/src/views/login/component/account.vue b/src/views/login/component/account.vue
index 7dea861..08b28f0 100644
--- a/src/views/login/component/account.vue
+++ b/src/views/login/component/account.vue
@@ -101,7 +101,7 @@
userInfo.setUserInfos(res.data.data)
Session.set('token', res.data.data.accessToken);
Session.set('projectId','');
- Session.set('uid',res.data.data.id);
+ Session.set('uid',res.data.data.uid);
await initBackEndControlRoutes();
signInSuccess();
}else{
diff --git a/src/views/system/department/component/deptDialog.vue b/src/views/system/department/component/deptDialog.vue
index 2006116..b1df6b5 100644
--- a/src/views/system/department/component/deptDialog.vue
+++ b/src/views/system/department/component/deptDialog.vue
@@ -90,8 +90,8 @@
struct:[]
}
}else{
- state.title = '编辑部门'
- state.departmentForm = value
+ state.title = '修改部门'
+ state.departmentForm = JSON.parse(JSON.stringify(value))
}
};
// 关闭弹窗
@@ -113,11 +113,11 @@
if(res.data.code === '200'){
ElMessage({
type:'success',
- message:'菜单新增成功',
+ message:'部门新增成功',
duration:2000
})
closeDialog();
- context.emit('getMenuList')
+ context.emit('getDepartmentList')
}else{
ElMessage({
type:'warning',
@@ -129,11 +129,11 @@
if(res.data.code === '200'){
ElMessage({
type:'success',
- message:'菜单修改成功',
+ message:'部门修改成功',
duration:2000
})
closeDialog();
- context.emit('getMenuList')
+ context.emit('getDepartmentList')
}else{
ElMessage({
type:'warning',
diff --git a/src/views/system/department/component/editDept.vue b/src/views/system/department/component/editDept.vue
deleted file mode 100644
index 7b16f44..0000000
--- a/src/views/system/department/component/editDept.vue
+++ /dev/null
@@ -1,179 +0,0 @@
-<template>
- <div class="system-edit-dept-container">
- <el-dialog title="修改部门" v-model="isShowDialog" width="769px">
- <el-form :model="ruleForm" size="default" label-width="90px">
- <el-row :gutter="35">
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="上级部门">
- <el-cascader
- :options="deptData"
- :props="{ checkStrictly: true, value: 'deptName', label: 'deptName' }"
- placeholder="请选择部门"
- clearable
- class="w100"
- v-model="ruleForm.deptLevel"
- >
- <template #default="{ node, data }">
- <span>{{ data.deptName }}</span>
- <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
- </template>
- </el-cascader>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="部门名称">
- <el-input v-model="ruleForm.deptName" placeholder="请输入部门名称" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="负责人">
- <el-input v-model="ruleForm.person" placeholder="请输入负责人" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="手机号">
- <el-input v-model="ruleForm.phone" placeholder="请输入手机号" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="邮箱">
- <el-input v-model="ruleForm.email" placeholder="请输入" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="排序">
- <el-input-number v-model="ruleForm.sort" :min="0" :max="999" controls-position="right" placeholder="请输入排序" class="w100" />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="部门状态">
- <el-switch v-model="ruleForm.status" inline-prompt active-text="启" inactive-text="禁"></el-switch>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="部门描述">
- <el-input v-model="ruleForm.describe" type="textarea" placeholder="请输入部门描述" maxlength="150"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="onCancel" size="default">取 消</el-button>
- <el-button type="primary" @click="onSubmit" size="default">修 改</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, onMounted, defineComponent } from 'vue';
-
-// 定义接口来定义对象的类型
-interface TableDataRow {
- deptName: string;
- createTime: string;
- status: boolean;
- sort: number;
- describe: string;
- id: number;
- children?: TableDataRow[];
-}
-interface RuleFormState {
- deptLevel: Array<string>;
- deptName: string;
- person: string;
- phone: string | number;
- email: string;
- sort: number;
- status: boolean;
- describe: string;
-}
-interface DeptSate {
- isShowDialog: boolean;
- ruleForm: RuleFormState;
- deptData: Array<TableDataRow>;
-}
-
-export default defineComponent({
- name: 'systemEditDept',
- setup() {
- const state = reactive<DeptSate>({
- isShowDialog: false,
- ruleForm: {
- deptLevel: [], // 上级部门
- deptName: '', // 部门名称
- person: '', // 负责人
- phone: '', // 手机号
- email: '', // 邮箱
- sort: 0, // 排序
- status: true, // 部门状态
- describe: '', // 部门描述
- },
- deptData: [], // 部门数据
- });
- // 打开弹窗
- const openDialog = (row: RuleFormState) => {
- row.deptLevel = ['vueNextAdmin'];
- row.person = 'lyt';
- row.phone = '12345678910';
- row.email = 'vueNextAdmin@123.com';
- state.ruleForm = row;
- state.isShowDialog = true;
- };
- // 关闭弹窗
- const closeDialog = () => {
- state.isShowDialog = false;
- };
- // 取消
- const onCancel = () => {
- closeDialog();
- };
- // 新增
- const onSubmit = () => {
- closeDialog();
- };
- // 初始化部门数据
- const initTableData = () => {
- state.deptData.push({
- deptName: 'vueNextAdmin',
- createTime: new Date().toLocaleString(),
- status: true,
- sort: Math.random(),
- describe: '顶级部门',
- id: Math.random(),
- children: [
- {
- deptName: 'IT外包服务',
- createTime: new Date().toLocaleString(),
- status: true,
- sort: Math.random(),
- describe: '总部',
- id: Math.random(),
- },
- {
- deptName: '资本控股',
- createTime: new Date().toLocaleString(),
- status: true,
- sort: Math.random(),
- describe: '分部',
- id: Math.random(),
- },
- ],
- });
- };
- // 页面加载时
- onMounted(() => {
- initTableData();
- });
- return {
- openDialog,
- closeDialog,
- onCancel,
- onSubmit,
- ...toRefs(state),
- };
- },
-});
-</script>
diff --git a/src/views/system/department/index.vue b/src/views/system/department/index.vue
index e5e0505..ca69129 100644
--- a/src/views/system/department/index.vue
+++ b/src/views/system/department/index.vue
@@ -20,7 +20,6 @@
:data="tableData.data"
style="width: 100%"
row-key="id"
- default-expand-all
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column prop="name" label="部门名称" show-overflow-tooltip> </el-table-column>
@@ -34,7 +33,7 @@
</el-table-column>
</el-table>
</el-card>
- <deptDialog ref="deptDialog" />
+ <deptDialog ref="deptDialog" @getDepartmentList="initTableData"/>
</div>
</template>
@@ -87,8 +86,8 @@
}
};
// 打开新增菜单弹窗
- const onOpenDeptDialog = (type: string,value: any) => {
- deptDialog.value.openDialog(type,value,state.tableData.data);
+ const onOpenDeptDialog = (type: string, value: any) => {
+ deptDialog.value.openDialog(type, value, state.tableData.data);
};
// 删除当前行
const onTabelRowDel = (row: TableDataRow) => {
@@ -106,6 +105,7 @@
});
return {
deptDialog,
+ initTableData,
onOpenDeptDialog,
onTabelRowDel,
...toRefs(state),
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index 46b65b0..1fc2094 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -56,7 +56,7 @@
<template #default="scope">
<el-button size="small" text type="primary" @click="onOpenMenuDialog('新增')">新增</el-button>
<el-button size="small" text type="primary" @click="onOpenMenuDialog('修改',scope.row)">修改</el-button>
-<!-- <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button>-->
+ <el-button size="small" text type="primary" @click="deleteMenu(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -77,12 +77,14 @@
import pinia from "/@/stores";
import {dynamicRoutes} from "/@/router/route";
import {useUserInfo} from "/@/stores/userInfo";
+ import {initBackEndControlRoutes} from "/@/router/backEnd";
export default defineComponent({
name: 'systemMenu',
components: { menuDialog },
setup() {
const menuDialog = ref();
+ const storesRoutesList = useRoutesList();
const state = reactive({
projectId:'1',
menuData:[],
@@ -109,21 +111,34 @@
};
// 打开编辑菜单弹窗
// 删除当前行
- const onTabelRowDel = (row: RouteRecordRaw) => {
+ const deleteMenu = (row: any) => {
ElMessageBox.confirm(`此操作将永久删除路由:${row.path}, 是否继续?`, '提示', {
confirmButtonText: '删除',
cancelButtonText: '取消',
type: 'warning',
- }).then(() => {
- ElMessage.success('删除成功');
+ }).then(async () => {
+ let res = await useMenuApi().deleteMenu({id:row.id})
+ if(res.data.code ==='200'){
+ ElMessage({
+ type:'success',
+ duration:2000,
+ message:'删除成功'
+ })
+ await getMenuList()
+ if(Session.get('projectId') == state.projectId) await initBackEndControlRoutes()
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
}).catch(() => {});
};
const getMenuList = async () => {
let res = await useMenuApi().getMenuAdmin(state.projectId)
if(res.data.code === '200'){
state.menuTableData = res.data.data
- // const storesRoutesList = useRoutesList(pinia);
- // storesRoutesList.setRoutesList(res.data.data);
+ if(Session.get('projectId') == state.projectId) await initBackEndControlRoutes()
}else{
ElMessage({
type:'warning',
@@ -138,7 +153,7 @@
getMenuList,
menuDialog,
onOpenMenuDialog,
- onTabelRowDel,
+ deleteMenu,
...toRefs(state),
};
},
diff --git a/src/views/system/role/component/addRole.vue b/src/views/system/role/component/addRole.vue
deleted file mode 100644
index adb0e83..0000000
--- a/src/views/system/role/component/addRole.vue
+++ /dev/null
@@ -1,240 +0,0 @@
-<template>
- <div class="system-add-role-container">
- <el-dialog title="新增角色" v-model="isShowDialog" width="769px">
- <el-form :model="ruleForm" size="default" label-width="90px">
- <el-row :gutter="35">
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色名称">
- <el-input v-model="ruleForm.roleName" placeholder="请输入角色名称" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色标识">
- <template #label>
- <el-tooltip effect="dark" content="用于 `router/route.ts` meta.roles" placement="top-start">
- <span>角色标识</span>
- </el-tooltip>
- </template>
- <el-input v-model="ruleForm.roleSign" placeholder="请输入角色标识" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="排序">
- <el-input-number v-model="ruleForm.sort" :min="0" :max="999" controls-position="right" placeholder="请输入排序" class="w100" />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色状态">
- <el-switch v-model="ruleForm.status" inline-prompt active-text="启" inactive-text="禁"></el-switch>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="角色描述">
- <el-input v-model="ruleForm.describe" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="菜单权限">
- <el-tree :data="menuData" :props="menuProps" show-checkbox class="menu-data-tree" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="onCancel" size="default">取 消</el-button>
- <el-button type="primary" @click="onSubmit" size="default">新 增</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent } from 'vue';
-
-// 定义接口来定义对象的类型
-interface MenuDataTree {
- id: number;
- label: string;
- children?: MenuDataTree[];
-}
-interface RoleState {
- isShowDialog: boolean;
- ruleForm: {
- roleName: string;
- roleSign: string;
- sort: number;
- status: boolean;
- describe: string;
- };
- menuData: Array<MenuDataTree>;
- menuProps: {
- children: string;
- label: string;
- };
-}
-
-export default defineComponent({
- name: 'systemAddRole',
- setup() {
- const state = reactive<RoleState>({
- isShowDialog: false,
- ruleForm: {
- roleName: '', // 角色名称
- roleSign: '', // 角色标识
- sort: 0, // 排序
- status: true, // 角色状态
- describe: '', // 角色描述
- },
- menuData: [],
- menuProps: {
- children: 'children',
- label: 'label',
- },
- });
- // 打开弹窗
- const openDialog = () => {
- state.isShowDialog = true;
- getMenuData();
- };
- // 关闭弹窗
- const closeDialog = () => {
- state.isShowDialog = false;
- };
- // 取消
- const onCancel = () => {
- closeDialog();
- };
- // 新增
- const onSubmit = () => {
- closeDialog();
- };
- // 获取菜单结构数据
- const getMenuData = () => {
- state.menuData = [
- {
- id: 1,
- label: '系统管理',
- children: [
- {
- id: 11,
- label: '菜单管理',
- children: [
- {
- id: 111,
- label: '菜单新增',
- },
- {
- id: 112,
- label: '菜单修改',
- },
- {
- id: 113,
- label: '菜单删除',
- },
- {
- id: 114,
- label: '菜单查询',
- },
- ],
- },
- {
- id: 12,
- label: '角色管理',
- children: [
- {
- id: 121,
- label: '角色新增',
- },
- {
- id: 122,
- label: '角色修改',
- },
- {
- id: 123,
- label: '角色删除',
- },
- {
- id: 124,
- label: '角色查询',
- },
- ],
- },
- {
- id: 13,
- label: '用户管理',
- children: [
- {
- id: 131,
- label: '用户新增',
- },
- {
- id: 132,
- label: '用户修改',
- },
- {
- id: 133,
- label: '用户删除',
- },
- {
- id: 134,
- label: '用户查询',
- },
- ],
- },
- ],
- },
- {
- id: 2,
- label: '权限管理',
- children: [
- {
- id: 21,
- label: '前端控制',
- children: [
- {
- id: 211,
- label: '页面权限',
- },
- {
- id: 212,
- label: '页面权限',
- },
- ],
- },
- {
- id: 22,
- label: '后端控制',
- children: [
- {
- id: 221,
- label: '页面权限',
- },
- ],
- },
- ],
- },
- ];
- };
- return {
- openDialog,
- closeDialog,
- onCancel,
- onSubmit,
- ...toRefs(state),
- };
- },
-});
-</script>
-
-<style scoped lang="scss">
-.system-add-role-container {
- .menu-data-tree {
- width: 100%;
- border: 1px solid var(--el-border-color);
- border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
- padding: 5px;
- }
-}
-</style>
diff --git a/src/views/system/role/component/editRole.vue b/src/views/system/role/component/editRole.vue
deleted file mode 100644
index fc6fe29..0000000
--- a/src/views/system/role/component/editRole.vue
+++ /dev/null
@@ -1,242 +0,0 @@
-<template>
- <div class="system-edit-role-container">
- <el-dialog title="修改角色" v-model="isShowDialog" width="769px">
- <el-form :model="ruleForm" size="default" label-width="90px">
- <el-row :gutter="35">
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色名称">
- <el-input v-model="ruleForm.roleName" placeholder="请输入角色名称" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色标识">
- <template #label>
- <el-tooltip effect="dark" content="用于 `router/route.ts` meta.roles" placement="top-start">
- <span>角色标识</span>
- </el-tooltip>
- </template>
- <el-input v-model="ruleForm.roleSign" placeholder="请输入角色标识" clearable></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="排序">
- <el-input-number v-model="ruleForm.sort" :min="0" :max="999" controls-position="right" placeholder="请输入排序" class="w100" />
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
- <el-form-item label="角色状态">
- <el-switch v-model="ruleForm.status" inline-prompt active-text="启" inactive-text="禁"></el-switch>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="角色描述">
- <el-input v-model="ruleForm.describe" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="菜单权限">
- <el-tree :data="menuData" :props="menuProps" :default-checked-keys="[112, 113]" node-key="id" show-checkbox class="menu-data-tree" />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="onCancel" size="default">取 消</el-button>
- <el-button type="primary" @click="onSubmit" size="default">修 改</el-button>
- </span>
- </template>
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent } from 'vue';
-
-// 定义接口来定义对象的类型
-interface MenuDataTree {
- id: number;
- label: string;
- children?: MenuDataTree[];
-}
-interface DialogRow {
- roleName: string;
- roleSign: string;
- sort: number;
- status: boolean;
- describe: string;
-}
-interface RoleState {
- isShowDialog: boolean;
- ruleForm: DialogRow;
- menuData: Array<MenuDataTree>;
- menuProps: {
- children: string;
- label: string;
- };
-}
-
-export default defineComponent({
- name: 'systemEditRole',
- setup() {
- const state = reactive<RoleState>({
- isShowDialog: false,
- ruleForm: {
- roleName: '', // 角色名称
- roleSign: '', // 角色标识
- sort: 0, // 排序
- status: true, // 角色状态
- describe: '', // 角色描述
- },
- menuData: [],
- menuProps: {
- children: 'children',
- label: 'label',
- },
- });
- // 打开弹窗
- const openDialog = (row: DialogRow) => {
- state.ruleForm = row;
- state.isShowDialog = true;
- getMenuData();
- };
- // 关闭弹窗
- const closeDialog = () => {
- state.isShowDialog = false;
- };
- // 取消
- const onCancel = () => {
- closeDialog();
- };
- // 新增
- const onSubmit = () => {
- closeDialog();
- };
- // 获取菜单结构数据
- const getMenuData = () => {
- state.menuData = [
- {
- id: 1,
- label: '系统管理',
- children: [
- {
- id: 11,
- label: '菜单管理',
- children: [
- {
- id: 111,
- label: '菜单新增',
- },
- {
- id: 112,
- label: '菜单修改',
- },
- {
- id: 113,
- label: '菜单删除',
- },
- {
- id: 114,
- label: '菜单查询',
- },
- ],
- },
- {
- id: 12,
- label: '角色管理',
- children: [
- {
- id: 121,
- label: '角色新增',
- },
- {
- id: 122,
- label: '角色修改',
- },
- {
- id: 123,
- label: '角色删除',
- },
- {
- id: 124,
- label: '角色查询',
- },
- ],
- },
- {
- id: 13,
- label: '用户管理',
- children: [
- {
- id: 131,
- label: '用户新增',
- },
- {
- id: 132,
- label: '用户修改',
- },
- {
- id: 133,
- label: '用户删除',
- },
- {
- id: 134,
- label: '用户查询',
- },
- ],
- },
- ],
- },
- {
- id: 2,
- label: '权限管理',
- children: [
- {
- id: 21,
- label: '前端控制',
- children: [
- {
- id: 211,
- label: '页面权限',
- },
- {
- id: 212,
- label: '页面权限',
- },
- ],
- },
- {
- id: 22,
- label: '后端控制',
- children: [
- {
- id: 221,
- label: '页面权限',
- },
- ],
- },
- ],
- },
- ];
- };
- return {
- openDialog,
- closeDialog,
- onCancel,
- onSubmit,
- ...toRefs(state),
- };
- },
-});
-</script>
-
-<style scoped lang="scss">
-.system-edit-role-container {
- .menu-data-tree {
- width: 100%;
- border: 1px solid var(--el-border-color);
- border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
- padding: 5px;
- }
-}
-</style>
diff --git a/src/views/system/role/component/roleDialog.vue b/src/views/system/role/component/roleDialog.vue
new file mode 100644
index 0000000..9470bf4
--- /dev/null
+++ b/src/views/system/role/component/roleDialog.vue
@@ -0,0 +1,151 @@
+<template>
+ <div class="system-add-role-container">
+ <el-dialog :title="title" v-model="isShowRoleDialog" width="769px">
+ <el-form :model="roleForm" size="default" label-width="90px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="角色名称">
+ <el-input v-model="roleForm.name" placeholder="请输入角色名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+ <el-form-item label="角色标识">
+ <el-input v-model="roleForm.code" placeholder="请输入角色标识" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="角色描述">
+ <el-input v-model="roleForm.info" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowRoleDialog = !isShowRoleDialog" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default">{{ buttonName }}</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { ElMessage } from 'element-plus';
+import { reactive, toRefs, defineComponent } from 'vue';
+import {departmentApi} from "/@/api/department";
+import {useRoleApi} from "/@/api/role";
+
+// 定义接口来定义对象的类型
+interface MenuDataTree {
+ id: number;
+ label: string;
+ children?: MenuDataTree[];
+}
+interface RoleState {
+ title:string,
+ buttonName:string,
+ isShowRoleDialog: boolean;
+ roleForm: {
+ name: string;
+ code: string;
+ info: string;
+ };
+ menuData: Array<MenuDataTree>;
+ menuProps: {
+ children: string;
+ label: string;
+ };
+}
+
+export default defineComponent({
+ name: 'systemAddRole',
+ setup(prop,context) {
+ const state = reactive<RoleState>({
+ isShowRoleDialog: false,
+ title:'',
+ buttonName:'',
+ roleForm: {
+ name: '', // 角色名称
+ code: '', // 角色标识
+ info: '', // 排序
+ },
+ menuData: [],
+ menuProps: {
+ children: 'children',
+ label: 'label',
+ },
+ });
+ // 打开弹窗
+ const openDialog = (type: string, value: any) => {
+ state.isShowRoleDialog = true;
+ if(type === '新增'){
+ state.title = '新增角色'
+ state.buttonName = '新增'
+ state.roleForm = {
+ name:'',
+ code:'',
+ info:'',
+ }
+ }else{
+ state.title = '修改角色'
+ state.buttonName = '修改'
+ state.roleForm = JSON.parse(JSON.stringify(value))
+ }
+ };
+ // 新增
+ const onSubmit = async () => {
+ if(state.title === '新增角色'){
+ let res = await useRoleApi().addRole(state.roleForm)
+ if(res.data.code === '200'){
+ ElMessage({
+ type:'success',
+ message:'角色新增成功',
+ duration:2000
+ })
+ state.isShowRoleDialog = false
+ context.emit('refreshRoleList')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ }else{
+ let res = await useRoleApi().modRole(state.roleForm)
+ if(res.data.code === '200'){
+ ElMessage({
+ type:'success',
+ message:'角色修改成功',
+ duration:2000
+ })
+ state.isShowRoleDialog = false
+ context.emit('refreshRoleList')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ }
+ };
+ // 获取菜单结构数据
+ return {
+ onSubmit,
+ openDialog,
+ ...toRefs(state),
+ };
+ },
+});
+</script>
+
+<style scoped lang="scss">
+.system-add-role-container {
+ .menu-data-tree {
+ width: 100%;
+ border: 1px solid var(--el-border-color);
+ border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
+ padding: 5px;
+ }
+}
+</style>
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 93ec4b2..b05db16 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -9,7 +9,7 @@
</el-icon>
查询
</el-button>
- <el-button size="default" type="success" class="ml10" @click="onOpenAddRole">
+ <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')">
<el-icon>
<ele-FolderAdd />
</el-icon>
@@ -20,48 +20,25 @@
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="name" label="角色名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="code" label="角色标识" show-overflow-tooltip></el-table-column>
- <el-table-column prop="sort" label="排序" show-overflow-tooltip></el-table-column>
- <el-table-column prop="status" label="角色状态" show-overflow-tooltip>
- <template #default="scope">
- <el-tag type="success" v-if="scope.row.status">启用</el-tag>
- <el-tag type="info" v-else>禁用</el-tag>
- </template>
- </el-table-column>
<el-table-column prop="info" label="角色描述" show-overflow-tooltip></el-table-column>
<el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
- <el-table-column label="操作" width="100">
+ <el-table-column label="操作" width="150">
<template #default="scope">
- <el-button :disabled="scope.row.roleName === '超级管理员'" size="small" text type="primary" @click="onOpenEditRole(scope.row)"
- >修改</el-button
- >
- <el-button :disabled="scope.row.roleName === '超级管理员'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ <el-button size="small" text type="primary" @click="onOpenDialogRef('新增','')">新增</el-button>
+ <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button>
+ <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
- <el-pagination
- @size-change="onHandleSizeChange"
- @current-change="onHandleCurrentChange"
- class="mt15"
- :pager-count="5"
- :page-sizes="[10, 20, 30]"
- v-model:current-page="tableData.param.pageNum"
- background
- v-model:page-size="tableData.param.pageSize"
- layout="total, sizes, prev, pager, next, jumper"
- :total="tableData.total"
- >
- </el-pagination>
</el-card>
- <AddRole ref="addRoleRef" />
- <EditRole ref="editRoleRef" />
+ <roleDialog ref="roleDialogRef" @refreshRoleList="initRoleTableData"/>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
-import AddRole from '/@/views/system/role/component/addRole.vue';
-import EditRole from '/@/views/system/role/component/editRole.vue';
+import roleDialog from '/@/views/system/role/component/roleDialog.vue';
import {useRoleApi} from "/@/api/role";
// 定义接口来定义对象的类型
@@ -87,10 +64,9 @@
export default defineComponent({
name: 'systemRole',
- components: { AddRole, EditRole },
+ components: { roleDialog },
setup() {
- const addRoleRef = ref();
- const editRoleRef = ref();
+ const roleDialogRef = ref();
const state = reactive<TableDataState>({
tableData: {
data: [],
@@ -103,7 +79,7 @@
},
});
// 初始化表格数据
- const initTableData = async () => {
+ const initRoleTableData = async () => {
let res = await useRoleApi().getRoleList()
if(res.data.code === '200'){
state.tableData.data = res.data.data;
@@ -113,15 +89,10 @@
message:res.data.msg
})
}
-
};
// 打开新增角色弹窗
- const onOpenAddRole = () => {
- addRoleRef.value.openDialog();
- };
- // 打开修改角色弹窗
- const onOpenEditRole = (row: Object) => {
- editRoleRef.value.openDialog(row);
+ const onOpenDialogRef = (type: string, value: any) => {
+ roleDialogRef.value.openDialog(type, value);
};
// 删除角色
const onRowDel = (row: any) => {
@@ -129,14 +100,12 @@
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
- })
- .then(() => {
+ }).then(() => {
ElMessage.success('删除成功');
- })
- .catch(() => {});
+ }).catch(() => {});
};
const handleSearch = () => {
- initTableData()
+ initRoleTableData()
}
// 分页改变
const onHandleSizeChange = (val: number) => {
@@ -148,17 +117,17 @@
};
// 页面加载时
onMounted(() => {
- initTableData();
+ initRoleTableData();
});
return {
- addRoleRef,
- editRoleRef,
- onOpenAddRole,
- onOpenEditRole,
onRowDel,
+ roleDialog,
+ handleSearch,
+ roleDialogRef,
+ onOpenDialogRef,
+ initRoleTableData,
onHandleSizeChange,
onHandleCurrentChange,
- handleSearch,
...toRefs(state),
};
},
--
Gitblit v1.9.2