数据权限及组织架构

zzq
zzq 2024-06-11 16:18:01 +08:00
parent 70e26fd53d
commit 0c22f47787
8 changed files with 115 additions and 35 deletions

View File

@ -4,8 +4,8 @@ enum Api {
tableList = '/api/BaseDataAuthGetPageList/permission/data/page', tableList = '/api/BaseDataAuthGetPageList/permission/data/page',
getDetailData = '/api/BaseDataAuthGetEntity/permission/data', getDetailData = '/api/BaseDataAuthGetEntity/permission/data',
addData = '/api/BaseDataAuthAddForm/permission/data', addData = '/api/BaseDataAuthAddForm/permission/data',
editData = '/api/BaseDataAuthUpdateForm/permission/data', editData = '/api/BaseDataAuthUpdateForm/permission/data/',
delData = '/api/BaseDataAuthDeleteForm/permission/data', delData = '/api/BaseDataAuthDeleteForm/permission/data/',
} }
export const getTablesListData = (params?: AccountParams) => { export const getTablesListData = (params?: AccountParams) => {
return defHttp.get<AccountListGetResultModel>({ return defHttp.get<AccountListGetResultModel>({
@ -27,13 +27,13 @@ export const addTableData = (params?: AccountParams) => {
}; };
export const editTableData = (params?: AccountParams) => { export const editTableData = (params?: AccountParams) => {
return defHttp.post<AccountListGetResultModel>({ return defHttp.post<AccountListGetResultModel>({
url: Api.editData, url: Api.editData + params.id,
params, params,
}); });
}; };
export const delTableData = (params?: AccountParams) => { export const delTableData = (params?: AccountParams) => {
return defHttp.post<AccountListGetResultModel>({ return defHttp.post<AccountListGetResultModel>({
url: Api.delData, url: Api.delData + params.id,
params, params,
}); });
}; };

View File

@ -13,6 +13,7 @@ export interface AccountListItem {
* @description: Request list return value * @description: Request list return value
*/ */
export interface AccountParams { export interface AccountParams {
id: string;
key: string; key: string;
page: any; page: any;
limit: any; limit: any;

View File

@ -211,6 +211,9 @@
if (item.type == 'subTable') { if (item.type == 'subTable') {
item.columns = changeCloums(item.columns, tableData); item.columns = changeCloums(item.columns, tableData);
} }
if (item.columns) {
item.columns = changeCloums(item.columns, tableData);
}
if ( if (
item.component != 'CardGroup' && item.component != 'CardGroup' &&
item.component != 'Grid' && item.component != 'Grid' &&
@ -245,6 +248,9 @@
if (list.type == 'subTable') { if (list.type == 'subTable') {
list.columns = changeCloums(list.columns, tableData); list.columns = changeCloums(list.columns, tableData);
} }
if (list.columns) {
list.columns = changeCloums(list.columns, tableData);
}
if ( if (
list.component != 'CardGroup' && list.component != 'CardGroup' &&
list.component != 'Grid' && list.component != 'Grid' &&

View File

@ -47,6 +47,11 @@
try { try {
const values = await validate(); const values = await validate();
let query = values; let query = values;
if (query.id) {
query.id = Number(query.id);
} else {
query.id = 0;
}
// //
if (!unref(isUpdate)) { if (!unref(isUpdate)) {
const data = await addDept(query); const data = await addDept(query);

View File

@ -65,9 +65,9 @@ export const formGroupSchema: FormSchema[] = [
export const formSchema: FormSchema[] = [ export const formSchema: FormSchema[] = [
{ {
field: 'id', field: 'id',
label: '名称', label: '部门id',
component: 'Input', component: 'Input',
ifShow:false ifShow: true,
}, },
{ {
field: 'name', field: 'name',

View File

@ -26,7 +26,11 @@
<a-input v-model:value="formData.name" /> <a-input v-model:value="formData.name" />
</a-form-item> </a-form-item>
<a-form-item ref="title" label="对象类型" name="objectType"> <a-form-item ref="title" label="对象类型" name="objectType">
<a-radio-group v-model:value="formData.objectType" name="radioGroup"> <a-radio-group
v-model:value="formData.objectType"
name="radioGroup"
@change="radioObjectChange"
>
<a-radio value="2">角色</a-radio> <a-radio value="2">角色</a-radio>
<a-radio value="1">用户</a-radio> <a-radio value="1">用户</a-radio>
</a-radio-group> </a-radio-group>
@ -38,6 +42,14 @@
placeholder="请选择" placeholder="请选择"
:options="roleOptions" :options="roleOptions"
/> />
<a-select
v-if="formData.objectType == '1'"
v-model:value="formData.objectId"
show-search
placeholder="请选择"
:options="userOptions"
:filter-option="filterOption"
/>
</a-form-item> </a-form-item>
<div <div
style="margin: 0 25px 0 60px" style="margin: 0 25px 0 60px"
@ -56,6 +68,7 @@
v-model:value="item.f_FieldId" v-model:value="item.f_FieldId"
placeholder="请选择" placeholder="请选择"
:options="fieldOptions" :options="fieldOptions"
:field-names="{ label: 'label', value: 'key' }"
/> />
</div> </div>
<div> <div>
@ -121,24 +134,30 @@
MinusOutlined, MinusOutlined,
} from '@ant-design/icons-vue'; } from '@ant-design/icons-vue';
import { BasicForm, useForm } from '@/components/Form';
import { formSchema } from './index.data';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer'; import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
import { fun_GetPageList } from '@/api/demo/formModule';
import { getRoleListByPage } from '@/api/demo/system'; import { getRoleListByPage } from '@/api/demo/system';
import { getAccountList } from '@/api/demo/system';
import { fun_GetPageList } from '@/api/demo/formModule';
import { addTableData, editTableData } from '@/api/permission/data'; import { addTableData, editTableData } from '@/api/permission/data';
import { useMessage } from '@/hooks/web/useMessage';
const { createMessage } = useMessage();
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const filterOption = (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
const isUpdate = ref(true); const isUpdate = ref(true);
const labelCol = { span: 4 }; const labelCol = { span: 4 };
const wrapperCol = { span: 19 }; const wrapperCol = { span: 19 };
const formData: any = ref({ const formData: any = ref({
code: '', code: '',
codeName: '',
name: '', name: '',
objectId: '',
objectName: '',
objectType: '2', objectType: '2',
type: 2,
formula: { formula: {
formula: '', formula: '',
conditions: [], conditions: [],
@ -147,6 +166,7 @@
const formRef = ref(); const formRef = ref();
const codeOptions: any = ref([]); const codeOptions: any = ref([]);
const roleOptions: any = ref([]); const roleOptions: any = ref([]);
const userOptions: any = ref([]);
const fieldOptions: any = ref([]); const fieldOptions: any = ref([]);
const symbolOptions: any = ref([ const symbolOptions: any = ref([
{ label: '等于', value: '1' }, { label: '等于', value: '1' },
@ -161,13 +181,14 @@
{ label: '不包含于', value: '10' }, { label: '不包含于', value: '10' },
]); ]);
const fieldTypeOptions: any = ref([ const fieldTypeOptions: any = ref([
{ label: '文本', value: '1' }, { label: '文本(string)', value: '1' },
{ label: '登录者ID', value: '2' }, { label: '登录者ID', value: '2' },
{ label: '登录者账号', value: '3' }, { label: '登录者账号', value: '3' },
{ label: '登录者部门', value: '4' }, { label: '登录者部门', value: '4' },
{ label: '登录者部门及下属部门', value: '5' }, { label: '登录者部门及下属部门', value: '5' },
{ label: '登录者岗位', value: '6' }, { label: '登录者岗位', value: '6' },
{ label: '登录者角色', value: '7' }, { label: '登录者角色', value: '7' },
{ label: '文本int', value: '10' },
]); ]);
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
@ -175,9 +196,25 @@
isUpdate.value = !!data?.isUpdate; isUpdate.value = !!data?.isUpdate;
getCodeListData(); // getCodeListData(); //
getRoleListData(); // getRoleListData(); //
getUserListData(); //
if (unref(isUpdate)) { if (unref(isUpdate)) {
console.log('formData', formData);
formData.value = data.record; formData.value = data.record;
formData.value.objectType = data.record.objectType.toString();
formData.value.formula = JSON.parse(data.record.formula);
} else {
formData.value = {
code: '',
codeName: '',
name: '',
objectId: '',
objectName: '',
objectType: '2',
type: 2,
formula: {
formula: '',
conditions: [],
},
};
} }
}); });
const getTitle = computed(() => const getTitle = computed(() =>
@ -190,25 +227,25 @@
f_FieldValue: '', f_FieldValue: '',
f_Symbol: '1', f_Symbol: '1',
}; };
formData.formula.conditions.push(obj); formData.value.formula.conditions.push(obj);
} }
function delRoleClick(e) { function delRoleClick(e) {
console.log('1111', e); formData.value.formula.conditions.splice(e, 1);
formData.formula.conditions.splice(e, 1); }
function radioObjectChange() {
formData.value.objectId = '';
} }
function codeChange(e) { function codeChange(e) {
console.log('eee', e);
console.log('codeOptions', codeOptions.value);
codeOptions.value.forEach((item) => { codeOptions.value.forEach((item) => {
if (item.value == e) { if (item.value == e) {
fieldOptions.value = item.column; fieldOptions.value = item.column;
formData.formula.conditions = []; formData.value.formula.conditions = [];
} }
}); });
console.log('fieldOptions', fieldOptions)
} }
function getCodeListData() { function getCodeListData() {
fun_GetPageList().then((res: Recordable) => { fun_GetPageList().then((res: Recordable) => {
console.log('1111', res);
const arr: any = []; const arr: any = [];
if (res.items) { if (res.items) {
res.items.forEach((item) => { res.items.forEach((item) => {
@ -217,9 +254,11 @@
value: item.id, value: item.id,
column: JSON.parse(item.scheme).table.columns, column: JSON.parse(item.scheme).table.columns,
}); });
if (formData.value.code == item.id) {
fieldOptions.value = JSON.parse(item.scheme).table.columns;
}
}); });
} }
console.log('llllll', arr);
codeOptions.value = arr; codeOptions.value = arr;
}); });
} }
@ -230,13 +269,27 @@
res.items.forEach((item) => { res.items.forEach((item) => {
arr.push({ arr.push({
label: item.name, label: item.name,
value: item.id, value: item.id.toString(),
}); });
}); });
} }
roleOptions.value = arr; roleOptions.value = arr;
}); });
} }
function getUserListData() {
getAccountList({ page: 1, limit: 999999 }).then((res: Recordable) => {
const arr: any = [];
if (res.items) {
res.items.forEach((item) => {
arr.push({
label: item.name,
value: item.id.toString(),
});
});
}
userOptions.value = arr;
});
}
const rules = reactive({ const rules = reactive({
code: [{ required: true, message: '请选择功能', trigger: 'blur' }], code: [{ required: true, message: '请选择功能', trigger: 'blur' }],
@ -250,8 +303,19 @@
formRef.value formRef.value
.validate() .validate()
.then(() => { .then(() => {
console.log('values', formData, toRaw(formData));
const params = formData.value; const params = formData.value;
if (formData.value.objectType == '1') {
const objectObj = userOptions.value.filter((ele) => ele.value == params.objectId);
console.log('objectObj', objectObj);
params.objectName = objectObj[0].label;
} else {
const objectObj = roleOptions.value.filter((ele) => ele.value == params.objectId);
console.log('objectObj', objectObj);
params.objectName = objectObj[0].label;
}
const codeObj = codeOptions.value.filter((ele) => ele.value == params.code);
params.codeName = codeObj[0].label;
if (!unref(isUpdate)) { if (!unref(isUpdate)) {
addTableData(params).then((res: any) => { addTableData(params).then((res: any) => {
closeDrawer(); closeDrawer();

View File

@ -1,11 +1,12 @@
import { BasicColumn, FormSchema } from '@/components/Table'; import { BasicColumn, FormSchema } from '@/components/Table';
import { h } from 'vue'; import { h } from 'vue';
import { Tag } from 'ant-design-vue'; import { Tag } from 'ant-design-vue';
import { getRoleListByPage } from '@/api/demo/system';
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '编码', title: '编码',
dataIndex: 'code', dataIndex: 'codeName',
width: 120, width: 120,
}, },
{ {
@ -21,10 +22,11 @@ export const columns: BasicColumn[] = [
let color = ''; let color = '';
let text = ''; let text = '';
const formType = record.objectType; const formType = record.objectType;
if (formType === 2) { if (formType == 2 || formType == '2') {
color = 'green'; color = 'green';
text = '角色'; text = '角色';
} else if (formType === 1) { }
if (formType == 1 || formType == '1') {
color = 'yellow'; color = 'yellow';
text = '用户'; text = '用户';
} }
@ -33,7 +35,7 @@ export const columns: BasicColumn[] = [
}, },
{ {
title: '授权对象', title: '授权对象',
dataIndex: 'objectId', dataIndex: 'objectName',
width: 100, width: 100,
}, },
{ {
@ -44,10 +46,11 @@ export const columns: BasicColumn[] = [
let color = ''; let color = '';
let text = ''; let text = '';
const formType = record.type; const formType = record.type;
if (formType === 2) { if (formType == 2 || formType == '2') {
color = 'green'; color = 'green';
text = '自定义表单'; text = '自定义表单';
} else if (formType === 1) { }
if (formType == 1 || formType == '1') {
color = 'yellow'; color = 'yellow';
text = '普通'; text = '普通';
} }

View File

@ -30,7 +30,7 @@
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { nextTick, onMounted } from 'vue'; import { nextTick, onMounted, ref } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table'; import { BasicTable, useTable, TableAction } from '@/components/Table';
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
@ -40,6 +40,7 @@
// api // api
import { columns, searchFormSchema } from './index.data'; import { columns, searchFormSchema } from './index.data';
import { getTablesListData, getDetailsData, delTableData } from '@/api/permission/data'; import { getTablesListData, getDetailsData, delTableData } from '@/api/permission/data';
import { getRoleListByPage } from '@/api/demo/system';
const { createConfirm, createMessage } = useMessage(); const { createConfirm, createMessage } = useMessage();
@ -103,15 +104,15 @@
id: record.id, id: record.id,
}; };
createConfirm({ createConfirm({
iconType: 'info', iconType: 'warning',
title: '删除', title: '删除',
content: '确定要删除当前表单吗?', content: '确定要删除此条数据吗?',
onOk: async () => { onOk: async () => {
let result = await delTableData(query); let result = await delTableData(query);
if (result) { if (result) {
createMessage.success('表单删除成功!'); createMessage.success('删除成功!');
} else { } else {
createMessage.error('表单删除失败!'); createMessage.error('删除失败!');
} }
reload(); reload();
}, },