数据权限可直接修改关联表
权限配置提示
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
<BasicModal
|
<BasicModal
|
||||||
wrap-class-name="fixedHeight"
|
wrap-class-name="fixedHeight"
|
||||||
@register="registerModal"
|
@register="registerModal"
|
||||||
:title="t('选择数据库')"
|
:title="t('选择数据库表')"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
width="800px"
|
width="800px"
|
||||||
:fixedHeight="true"
|
:fixedHeight="true"
|
||||||
@ -45,6 +45,12 @@
|
|||||||
const selectedKeys = ref<string[] | number[]>([]);
|
const selectedKeys = ref<string[] | number[]>([]);
|
||||||
|
|
||||||
const emit = defineEmits(['success', 'register']);
|
const emit = defineEmits(['success', 'register']);
|
||||||
|
const props=defineProps({
|
||||||
|
forbidUncheck:{
|
||||||
|
type:Boolean,
|
||||||
|
default:true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const { createMessage } = useMessage();
|
const { createMessage } = useMessage();
|
||||||
const selectTableName = ref<string[]>([]);
|
const selectTableName = ref<string[]>([]);
|
||||||
@ -73,7 +79,7 @@
|
|||||||
rowSelection: {
|
rowSelection: {
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
getCheckboxProps: (record) => ({
|
getCheckboxProps: (record) => ({
|
||||||
disabled: selectTableName.value.includes(record.tableName),
|
disabled: props.forbidUncheck&&selectTableName.value.includes(record.tableName),
|
||||||
}),
|
}),
|
||||||
onChange: (selectedRowKeys) => {
|
onChange: (selectedRowKeys) => {
|
||||||
//搜索后会把原有选中项清空 所以需要进行存储
|
//搜索后会把原有选中项清空 所以需要进行存储
|
||||||
|
|||||||
@ -163,7 +163,31 @@
|
|||||||
<a-textarea v-model:value="formState.remark" :placeholder="t('请输入备注')" />
|
<a-textarea v-model:value="formState.remark" :placeholder="t('请输入备注')" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
|
||||||
|
<BasicTable @register="registerEffectTable">
|
||||||
|
<template #toolbar>
|
||||||
|
<a-button type="primary" @click="addEffectTable"> {{ t('添加生效数据库表') }} </a-button>
|
||||||
|
</template>
|
||||||
|
<template #bodyCell="{ column, text, record }">
|
||||||
|
<template v-if="column.dataIndex == 'action'">
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
icon: 'ant-design:delete-outlined',
|
||||||
|
color: 'error',
|
||||||
|
title: t('删除'),
|
||||||
|
popConfirm: {
|
||||||
|
title: t('是否确认删除'),
|
||||||
|
confirm: handleEffectTableDelete.bind(null, record),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
</BasicDrawer>
|
</BasicDrawer>
|
||||||
|
<SelectDatabase @register="registerModal" @success="handleSelectEffectTable" :forbidUncheck=false ></SelectDatabase>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, ref, computed, unref, reactive, h, watch, nextTick } from 'vue';
|
import { defineComponent, ref, computed, unref, reactive, h, watch, nextTick } from 'vue';
|
||||||
@ -184,6 +208,9 @@
|
|||||||
|
|
||||||
import { addAuth, updateAuth } from '/@/api/system/authorize';
|
import { addAuth, updateAuth } from '/@/api/system/authorize';
|
||||||
import { useI18n } from '/@/hooks/web/useI18n';
|
import { useI18n } from '/@/hooks/web/useI18n';
|
||||||
|
import {useModal} from "/@/components/Modal";
|
||||||
|
import {TableConfig} from "/@/model/generator/tableConfig";
|
||||||
|
import SelectDatabase from "/@/components/CreateCodeStep/src/components/SelectDatabase.vue";
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
export const formSchema: FormSchema[] = [
|
export const formSchema: FormSchema[] = [
|
||||||
{
|
{
|
||||||
@ -378,10 +405,12 @@
|
|||||||
}
|
}
|
||||||
const isCustom = ref<number>(0);
|
const isCustom = ref<number>(0);
|
||||||
const editableData = ref<DataItem[]>([]);
|
const editableData = ref<DataItem[]>([]);
|
||||||
|
const tableList=ref<DataItem[]>([]);
|
||||||
const selectUser = ref<boolean>(false);
|
const selectUser = ref<boolean>(false);
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'MenuDrawer',
|
name: 'AuthDrawer',
|
||||||
components: {
|
components: {
|
||||||
|
SelectDatabase,
|
||||||
BasicDrawer,
|
BasicDrawer,
|
||||||
BasicForm,
|
BasicForm,
|
||||||
TableAction,
|
TableAction,
|
||||||
@ -454,6 +483,8 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const [registerModal, { openModal }] = useModal();
|
||||||
|
|
||||||
const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
|
const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
|
||||||
labelWidth: 100,
|
labelWidth: 100,
|
||||||
schemas: formSchema,
|
schemas: formSchema,
|
||||||
@ -467,6 +498,9 @@
|
|||||||
pagination: false,
|
pagination: false,
|
||||||
striped: false,
|
striped: false,
|
||||||
useSearchForm: false,
|
useSearchForm: false,
|
||||||
|
formConfig:{
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
},
|
||||||
bordered: true,
|
bordered: true,
|
||||||
showIndexColumn: false,
|
showIndexColumn: false,
|
||||||
canResize: false,
|
canResize: false,
|
||||||
@ -484,6 +518,7 @@
|
|||||||
setDrawerProps({ confirmLoading: false });
|
setDrawerProps({ confirmLoading: false });
|
||||||
isUpdate.value = !!data?.isUpdate;
|
isUpdate.value = !!data?.isUpdate;
|
||||||
editableData.value = [];
|
editableData.value = [];
|
||||||
|
tableList.value = [];
|
||||||
const treeData = await getRoleAllList();
|
const treeData = await getRoleAllList();
|
||||||
const filterOption = (input: string, option: any) => {
|
const filterOption = (input: string, option: any) => {
|
||||||
return option.name.indexOf(input) >= 0;
|
return option.name.indexOf(input) >= 0;
|
||||||
@ -515,11 +550,50 @@
|
|||||||
setTableData(editableData.value);
|
setTableData(editableData.value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data.record.tableList?.forEach(function(table){
|
||||||
|
tableList.value.push({"tableName":table});
|
||||||
|
});
|
||||||
|
nextTick(() => {
|
||||||
|
setEffectTableData(tableList.value);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
isCustom.value = 0;
|
isCustom.value = 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const [registerEffectTable, { getDataSource:getEffectTableDataSource, setTableData:setEffectTableData }] = useTable({
|
||||||
|
title: '',
|
||||||
|
dataSource: tableList.value,
|
||||||
|
columns:[
|
||||||
|
{
|
||||||
|
title: t('生效数据库表名'),
|
||||||
|
dataIndex: 'tableName',
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
pagination: false,
|
||||||
|
striped: false,
|
||||||
|
useSearchForm: false,
|
||||||
|
formConfig:{
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
},
|
||||||
|
bordered: true,
|
||||||
|
showIndexColumn: true,
|
||||||
|
indexColumnProps:{
|
||||||
|
width:20,
|
||||||
|
},
|
||||||
|
canResize: false,
|
||||||
|
rowKey: 'tableName',
|
||||||
|
actionColumn: {
|
||||||
|
width: 80,
|
||||||
|
title: t('操作'),
|
||||||
|
dataIndex: 'action',
|
||||||
|
slots: { customRender: 'action' },
|
||||||
|
fixed: undefined,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
function handleCreate() {
|
function handleCreate() {
|
||||||
let dataSource: DataItem[] = getDataSource();
|
let dataSource: DataItem[] = getDataSource();
|
||||||
let obj = {
|
let obj = {
|
||||||
@ -533,6 +607,22 @@
|
|||||||
setTableData(dataSource);
|
setTableData(dataSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const selectTableName = computed(() =>
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
function addEffectTable(){
|
||||||
|
try {
|
||||||
|
openModal(true, { databaseId: "master", selectTableName: tableList.value.map((table)=>table.tableName) });
|
||||||
|
} catch (error) {}
|
||||||
|
}
|
||||||
|
function handleSelectEffectTable(selectRows: TableConfig[]){
|
||||||
|
tableList.value=[];
|
||||||
|
selectRows?.forEach(function(table){
|
||||||
|
tableList.value.push({"tableName":table.tableName});
|
||||||
|
});
|
||||||
|
setEffectTableData(tableList.value);
|
||||||
|
}
|
||||||
|
|
||||||
function changeFieldType(record: Recordable, option) {
|
function changeFieldType(record: Recordable, option) {
|
||||||
record.fieldValue = record.fieldType > 1 ? option.label : '';
|
record.fieldValue = record.fieldType > 1 ? option.label : '';
|
||||||
}
|
}
|
||||||
@ -550,6 +640,16 @@
|
|||||||
});
|
});
|
||||||
setTableData(editableData.value);
|
setTableData(editableData.value);
|
||||||
}
|
}
|
||||||
|
function handleEffectTableDelete(record: Recordable) {
|
||||||
|
const dataSource: DataItem[] = getEffectTableDataSource();
|
||||||
|
tableList.value = [];
|
||||||
|
dataSource.forEach((o) => {
|
||||||
|
if(o.tableName!=record.tableName){
|
||||||
|
tableList.value.push(o);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setEffectTableData(tableList.value);
|
||||||
|
}
|
||||||
|
|
||||||
const getTitle = computed(() => (!unref(isUpdate) ? t('新增数据权限') : t('编辑数据权限')));
|
const getTitle = computed(() => (!unref(isUpdate) ? t('新增数据权限') : t('编辑数据权限')));
|
||||||
|
|
||||||
@ -567,6 +667,7 @@
|
|||||||
} else {
|
} else {
|
||||||
values.remark = formState.remark;
|
values.remark = formState.remark;
|
||||||
}
|
}
|
||||||
|
values.tableList=getEffectTableDataSource()?.map(item=>item.tableName);
|
||||||
|
|
||||||
setDrawerProps({ confirmLoading: true });
|
setDrawerProps({ confirmLoading: true });
|
||||||
// TODO custom api
|
// TODO custom api
|
||||||
@ -602,9 +703,14 @@
|
|||||||
selectUser,
|
selectUser,
|
||||||
handleSubmit,
|
handleSubmit,
|
||||||
registerTable,
|
registerTable,
|
||||||
|
registerEffectTable,
|
||||||
|
addEffectTable,
|
||||||
|
handleSelectEffectTable,
|
||||||
|
registerModal,
|
||||||
handleCreate,
|
handleCreate,
|
||||||
changeFieldType,
|
changeFieldType,
|
||||||
handleDelete,
|
handleDelete,
|
||||||
|
handleEffectTableDelete,
|
||||||
t,
|
t,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@ -8,6 +8,9 @@
|
|||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
width="90%"
|
width="90%"
|
||||||
>
|
>
|
||||||
|
<template #title>
|
||||||
|
<div>APP功能授权<span style="color:red">(注意:修改角色权限会导致该角色所有用户自动登出,请谨慎操作!)</span></div>
|
||||||
|
</template>
|
||||||
<a-row :gutter="[16, 16]" class="h-full">
|
<a-row :gutter="[16, 16]" class="h-full">
|
||||||
<a-col :span="6">
|
<a-col :span="6">
|
||||||
<div class="text-base border-l-6 border-[#5e95ff] pl-3 h-5 leading-5 mb-3 ml-2">{{
|
<div class="text-base border-l-6 border-[#5e95ff] pl-3 h-5 leading-5 mb-3 ml-2">{{
|
||||||
|
|||||||
@ -8,6 +8,9 @@
|
|||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
width="90%"
|
width="90%"
|
||||||
>
|
>
|
||||||
|
<template #title>
|
||||||
|
<div>功能授权<span style="color:red">(注意:修改角色权限会导致该角色所有用户自动登出,请谨慎操作!)</span></div>
|
||||||
|
</template>
|
||||||
<a-row :gutter="[16, 16]" class="h-full">
|
<a-row :gutter="[16, 16]" class="h-full">
|
||||||
<a-col :span="6">
|
<a-col :span="6">
|
||||||
<div class="text-base border-l-6 border-[#5e95ff] pl-3 h-5 leading-5 mb-3 ml-2">{{
|
<div class="text-base border-l-6 border-[#5e95ff] pl-3 h-5 leading-5 mb-3 ml-2">{{
|
||||||
|
|||||||
Reference in New Issue
Block a user