You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
393 lines
10 KiB
393 lines
10 KiB
2 months ago
|
<template>
|
||
|
<div class="app-container">
|
||
|
<el-row :gutter="10" class="mb8">
|
||
|
<el-form :inline="true" :model="queryForm" >
|
||
|
<el-form-item label="对象类型">
|
||
|
<el-select v-model="queryForm.objType" placeholder="请选择对象类型" style="width: 180px" clearable>
|
||
|
<el-option label="角色" value="0" />
|
||
|
<el-option label="用户" value="1" />
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
<el-form-item label="对象名称">
|
||
|
<el-input v-model="queryForm.objName" placeholder="请输入对象名称" style="width: 180px" clearable />
|
||
|
</el-form-item>
|
||
|
|
||
|
<el-form-item>
|
||
|
<el-button type="primary" icon="Search" @click="handleSearch">搜索</el-button>
|
||
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||
|
</el-form-item>
|
||
|
</el-form>
|
||
|
</el-row>
|
||
|
|
||
|
<el-row :gutter="10" class="mb8">
|
||
|
<el-col :span="1.5">
|
||
|
<el-button type="primary" plain icon="Plus" @click="openAddDialog">新增</el-button>
|
||
|
</el-col>
|
||
|
<el-col :span="1.5">
|
||
|
<el-button
|
||
|
type="success"
|
||
|
plain
|
||
|
icon="Edit"
|
||
|
:disabled="selectedRows.length !== 1"
|
||
|
@click="openEditDialog(selectedRows[0])"
|
||
|
>修改</el-button>
|
||
|
</el-col>
|
||
|
<el-col :span="1.5">
|
||
|
<el-button
|
||
|
type="danger"
|
||
|
plain
|
||
|
icon="Delete"
|
||
|
:disabled="selectedRows.length === 0"
|
||
|
@click="deleteSelected"
|
||
|
>删除</el-button>
|
||
|
</el-col>
|
||
|
</el-row>
|
||
|
|
||
|
<el-table
|
||
|
v-loading="loading"
|
||
|
:data="permList"
|
||
|
@selection-change="handleSelectionChange"
|
||
|
style="width: 100%"
|
||
|
border
|
||
|
stripe
|
||
|
>
|
||
|
<el-table-column type="selection" width="55" />
|
||
|
<el-table-column prop="bizName" label="业务域" />
|
||
|
<el-table-column prop="objType" label="对象类型">
|
||
|
<template #default="{ row }">
|
||
|
{{ row.objType === '0' || row.objType === 0 ? '角色' : '用户' }}
|
||
|
</template>
|
||
|
</el-table-column> <el-table-column prop="objName" label="对象名称" />
|
||
|
<el-table-column prop="isStop" label="是否停用">
|
||
|
<template #default="{ row }">
|
||
|
<el-tag :type="row.isStop? 'success' : 'info'">
|
||
|
{{ row.isStop ? '运行' : '停用' }}
|
||
|
</el-tag>
|
||
|
</template>
|
||
|
</el-table-column>
|
||
|
<el-table-column prop="secLevelSummary" label="安全等级" />
|
||
|
<el-table-column prop="createBy" label="创建者" />
|
||
|
<el-table-column prop="createTime" label="创建时间" width="180" />
|
||
|
<el-table-column prop="updateBy" label="更新者" />
|
||
|
<el-table-column prop="updateTime" label="更新时间" width="180" />
|
||
|
</el-table>
|
||
|
|
||
|
<pagination
|
||
|
v-show="total > 0"
|
||
|
:total="total"
|
||
|
v-model:page="queryForm.pageNum"
|
||
|
v-model:limit="queryForm.pageSize"
|
||
|
@pagination="getList"
|
||
|
/>
|
||
|
|
||
|
<el-dialog
|
||
|
:title="title"
|
||
|
v-model="open"
|
||
|
width="600px"
|
||
|
append-to-body
|
||
|
:before-close="handleClose"
|
||
|
>
|
||
|
<el-form
|
||
|
ref="permFormRef"
|
||
|
:model="form"
|
||
|
:rules="rules"
|
||
|
label-width="130px"
|
||
|
size="small"
|
||
|
>
|
||
|
<el-form-item label="业务域" prop="bizOnum">
|
||
|
<el-select
|
||
|
v-model="form.bizOnum"
|
||
|
:multiple="isAddMode"
|
||
|
placeholder="请选择业务域"
|
||
|
filterable
|
||
|
clearable
|
||
|
>
|
||
|
<el-option
|
||
|
v-for="dict in bizOnumList"
|
||
|
:key="dict.onum"
|
||
|
:label="dict.bizName"
|
||
|
:value="dict.onum"
|
||
|
></el-option>
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
<el-form-item label="对象类型" prop="objType">
|
||
|
<el-select v-model="form.objType" placeholder="请选择对象类型" @change="changeMetaSecurityObj"
|
||
|
>
|
||
|
<el-option label="角色" value="0" />
|
||
|
<el-option label="用户" value="1" />
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
<!-- @change="handleObjValueChange" -->
|
||
|
|
||
|
<el-form-item label="对象名称" prop="objName">
|
||
|
<el-select
|
||
|
v-model="form.objName"
|
||
|
placeholder="请选择"
|
||
|
maxlength="30"
|
||
|
>
|
||
|
<el-option
|
||
|
v-for="dict in userOrRoleList"
|
||
|
:key="dict.id"
|
||
|
:label="dict.name"
|
||
|
:value="dict.name"
|
||
|
></el-option>
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
|
||
|
<el-form-item label="是否停用" prop="isStop">
|
||
|
<el-select v-model="form.isStop" placeholder="请选择状态">
|
||
|
<el-option label="运行" :value=true />
|
||
|
<el-option label="停用" :value=false />
|
||
|
</el-select>
|
||
|
</el-form-item>
|
||
|
</el-form>
|
||
|
|
||
|
<template #footer>
|
||
|
<el-button @click="open = false">取消</el-button>
|
||
|
<el-button type="primary" @click="submitForm">保存</el-button>
|
||
|
</template>
|
||
|
</el-dialog>
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script setup>
|
||
|
import { ref, reactive, onMounted } from 'vue'
|
||
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
||
|
import {
|
||
|
listBizPermiConfig,
|
||
|
addBizPermiConfig,
|
||
|
updateBizPermiConfig,
|
||
|
listBizConfigAll,
|
||
|
delBizPermiConfig
|
||
|
} from '@/api/metadataConfig/metadataConfig'
|
||
|
import { listUser} from "@/api/system/user";
|
||
|
import { listRole} from "@/api/system/role";
|
||
|
const queryForm = reactive({
|
||
|
objType: '',
|
||
|
objName: '',
|
||
|
pageNum: 1,
|
||
|
pageSize: 10
|
||
|
})
|
||
|
|
||
|
const permList = ref([])
|
||
|
const total = ref(0)
|
||
|
const loading = ref(false)
|
||
|
const open = ref(false)
|
||
|
const title = ref('')
|
||
|
// const handleObjValueChange = (selectedValues) => {
|
||
|
// // 根据当前对象类型获取对应的列表
|
||
|
// const sourceList = form.value.objType === '0'
|
||
|
// ? userList.value
|
||
|
// : roleList.value;
|
||
|
|
||
|
// // 转换选中的值为名称数组
|
||
|
// const names = selectedValues.map(value => {
|
||
|
// const item = sourceList.find(item => item.id === value);
|
||
|
// return item ? item.name : '';
|
||
|
// });
|
||
|
// }
|
||
|
const roleList = ref([]);
|
||
|
const userList = ref([]);
|
||
|
const userOrRoleList = ref([]);
|
||
|
const bizOnumList = ref([]);
|
||
|
function getRoleOrUserList() {
|
||
|
listRole().then(response => {
|
||
|
response.rows.forEach(item => {
|
||
|
roleList.value.push({id:item.roleId.toString(),name:item.roleName})
|
||
|
});
|
||
|
});
|
||
|
listUser().then(response => {
|
||
|
response.rows.forEach(item => {
|
||
|
userList.value.push({id:item.userId.toString(),name:item.nickName})
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
const permFormRef = ref(null)
|
||
|
|
||
|
const form = reactive({
|
||
|
onum: null,
|
||
|
bizOnum: null,
|
||
|
objType: '',
|
||
|
objName: '',
|
||
|
isStop: null
|
||
|
})
|
||
|
function changeMetaSecurityObj(data){
|
||
|
form.objName=""
|
||
|
if(data=="1"){
|
||
|
userOrRoleList.value=userList.value
|
||
|
|
||
|
}else {
|
||
|
userOrRoleList.value=roleList.value
|
||
|
|
||
|
}
|
||
|
}
|
||
|
const rules = {
|
||
|
bizOnum: [{ required: true, message: '请输入业务域', trigger: 'blur' }],
|
||
|
objType: [{ required: true, message: '请选择对象类型', trigger: 'change' }],
|
||
|
objName: [{ required: true, message: '请输入对象名称', trigger: 'blur' }],
|
||
|
isStop: [{ required: true, message: '请选择状态', trigger: 'change' }]
|
||
|
}
|
||
|
|
||
|
const selectedRows = ref([])
|
||
|
|
||
|
function handleSelectionChange(val) {
|
||
|
selectedRows.value = val
|
||
|
}
|
||
|
|
||
|
async function getList() {
|
||
|
loading.value = true
|
||
|
try {
|
||
|
const res = await listBizPermiConfig(queryForm)
|
||
|
permList.value = res.rows || []
|
||
|
total.value = res.total || 0
|
||
|
} catch (error) {
|
||
|
ElMessage.error('获取列表失败,请重试')
|
||
|
} finally {
|
||
|
loading.value = false
|
||
|
}
|
||
|
}
|
||
|
async function getBizList() {
|
||
|
loading.value = true
|
||
|
try {
|
||
|
const res = await listBizConfigAll()
|
||
|
bizOnumList.value = res.data || []
|
||
|
console.log(bizOnumList,"ssss")
|
||
|
} catch (error) {
|
||
|
ElMessage.error('获取业务域列表失败,请重试')
|
||
|
} finally {
|
||
|
loading.value = false
|
||
|
}
|
||
|
}
|
||
|
function resetQuery() {
|
||
|
queryForm.objType = ''
|
||
|
queryForm.objName = ''
|
||
|
queryForm.pageNum = 1
|
||
|
getList()
|
||
|
}
|
||
|
|
||
|
function handleSearch() {
|
||
|
queryForm.pageNum = 1
|
||
|
getList()
|
||
|
}
|
||
|
const isAddMode = ref(true)
|
||
|
|
||
|
function openAddDialog() {
|
||
|
isAddMode.value = true
|
||
|
|
||
|
title.value = '新增业务域权限配置'
|
||
|
Object.assign(form, {
|
||
|
onum: null,
|
||
|
bizOnum: [],
|
||
|
objType: '',
|
||
|
objName: '',
|
||
|
isStop: null
|
||
|
})
|
||
|
open.value = true
|
||
|
}
|
||
|
|
||
|
function openEditDialog(row) {
|
||
|
if (!row) {
|
||
|
ElMessage.warning('请选择一条记录进行编辑')
|
||
|
return
|
||
|
}
|
||
|
isAddMode.value = false
|
||
|
|
||
|
title.value = '编辑业务域权限配置'
|
||
|
Object.assign(form, row)
|
||
|
|
||
|
if(form.objType=="0"){
|
||
|
userOrRoleList.value=roleList.value
|
||
|
}else{
|
||
|
userOrRoleList.value=userList.value
|
||
|
}
|
||
|
open.value = true
|
||
|
}
|
||
|
|
||
|
function submitForm() {
|
||
|
permFormRef.value.validate(async (valid) => {
|
||
|
if (!valid) return
|
||
|
|
||
|
try {
|
||
|
if (title.value.includes('新增')) {
|
||
|
const submitData = {
|
||
|
bizOnumList: form.bizOnum, // 传递数组
|
||
|
objType: form.objType,
|
||
|
objName: form.objName,
|
||
|
isStop: form.isStop,
|
||
|
}
|
||
|
await addBizPermiConfig(submitData)
|
||
|
ElMessage.success('新增成功')
|
||
|
} else {
|
||
|
const submitData = {
|
||
|
onum: form.onum, // 传递数组
|
||
|
bizOnum: form.bizOnum, // 传递数组
|
||
|
objType: form.objType,
|
||
|
objName: form.objName,
|
||
|
isStop: form.isStop,
|
||
|
}
|
||
|
await updateBizPermiConfig(submitData)
|
||
|
ElMessage.success('编辑成功')
|
||
|
}
|
||
|
open.value = false
|
||
|
getList()
|
||
|
} catch (error) {
|
||
|
ElMessage.error('操作失败,请重试')
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function deleteRow(onum) {
|
||
|
ElMessageBox.confirm('确定删除该条记录吗?', '提示', { type: 'warning' })
|
||
|
.then(async () => {
|
||
|
try {
|
||
|
await delBizPermiConfig(onum)
|
||
|
ElMessage.success('删除成功')
|
||
|
getList()
|
||
|
} catch (error) {
|
||
|
ElMessage.error('删除失败,请重试')
|
||
|
}
|
||
|
})
|
||
|
.catch(() => {})
|
||
|
}
|
||
|
|
||
|
function deleteSelected() {
|
||
|
if (selectedRows.value.length === 0) {
|
||
|
ElMessage.warning('请至少选择一条记录删除')
|
||
|
return
|
||
|
}
|
||
|
const onumStr = selectedRows.value.map(row => row.onum).join(',')
|
||
|
ElMessageBox.confirm(`确定删除选中的 ${selectedRows.value.length} 条记录吗?`, '提示', { type: 'warning' })
|
||
|
.then(async () => {
|
||
|
try {
|
||
|
await delBizPermiConfig(onumStr)
|
||
|
ElMessage.success('删除成功')
|
||
|
getList()
|
||
|
} catch (error) {
|
||
|
ElMessage.error('删除失败,请重试')
|
||
|
}
|
||
|
})
|
||
|
.catch(() => {})
|
||
|
}
|
||
|
|
||
|
function handleClose(done) {
|
||
|
permFormRef.value.resetFields()
|
||
|
done()
|
||
|
}
|
||
|
|
||
|
onMounted(() => {
|
||
|
getList()
|
||
|
getRoleOrUserList();
|
||
|
getBizList();
|
||
|
|
||
|
})
|
||
|
</script>
|
||
|
|
||
|
<style scoped>
|
||
|
.app-container {
|
||
|
padding: 20px;
|
||
|
}
|
||
|
.mb8 {
|
||
|
margin-bottom: 8px;
|
||
|
}
|
||
|
</style>
|