fix: bug#10816、10814、10812、10789、10780、10775、等

This commit is contained in:
JiangQiming 2023-03-23 21:00:09 +08:00
parent f3c3ffe291
commit 004eb1fb2f
11 changed files with 100 additions and 14 deletions

View File

@ -11,3 +11,6 @@ export const addRelation_api = (data: object) => server.post(`/relation`, data);
export const editRelation_api = (data: object) => server.patch(`/relation`, data);
// 删除关系
export const delRelation_api = (id: string) => server.remove(`/relation/${id}`);
// 验证标识唯一性
export const validateField = (params: any) => server.get<any>(`/relation/_validate`, params);

View File

@ -8,7 +8,12 @@
visible
@cancel="emits('update:visible', false)"
>
<div>
<a-alert
message="只能分配有'共享'权限的资产数据"
type="warning"
show-icon
/>
<div style="margin-top: 5px;">
<span>资产权限</span>
<j-checkbox-group
v-model:value="form.permission"

View File

@ -27,6 +27,7 @@
v-if="treeData.length > 0"
:tree-data="treeData"
v-model:selected-keys="selectedKeys"
v-model:expandedKeys="expandedKeys"
:fieldNames="{ key: 'id' }"
>
<template #title="{ name, data }">
@ -105,6 +106,7 @@ const sourceTree = ref<any[]>([]); // 源数据
const treeMap = new Map(); // map
const treeData = ref<any[]>([]); //
const selectedKeys = ref<string[]>([]); //
const expandedKeys = ref<string[] | number[]>([]);
function getTree(cb?: Function) {
loading.value = true;
@ -149,6 +151,7 @@ const search = debounce(() => {
treeData.value = ArrayToTree(cloneDeep([...treeArray.values()]));
} else {
treeData.value = ArrayToTree(cloneDeep([...treeMap.values()]));
expandedKeys.value = [];
}
function dig(_data: any[]): any {

View File

@ -27,8 +27,13 @@
@cancelSelect="table.cancelSelect"
model="TABLE"
:defaultParams="{
pageSize: 10,
sorts: [{ name: 'createTime', order: 'desc' }],
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
/>
</div>
</j-modal>

View File

@ -16,6 +16,13 @@
}"
@cancelSelect="table.cancelSelect"
model="TABLE"
:defaultParams="{
pageSize: 10,
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
>
<template #headerTitle>
<PermissionButton

View File

@ -13,7 +13,14 @@
:request="getPermission_api"
model="TABLE"
:params="queryParams"
:defaultParams="{ sorts: [{ name: 'id', order: 'asc' }] }"
:defaultParams="{
pageSize: 10,
sorts: [{ name: 'id', order: 'asc' }],
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
>
<template #headerTitle>
<PermissionButton

View File

@ -49,13 +49,14 @@
<j-select
v-model:value="form.data.objectType"
:disabled="!!form.data.id"
@change="() => (form.data.targetType = undefined)"
@change="form.handleObjectTypeChange"
placeholder="请选择关联方"
>
<j-select-option
v-for="item in form.objectList"
:value="item.id"
>
{{ item.name }}.
{{ item.name }}
</j-select-option>
</j-select>
</j-form-item>
@ -69,6 +70,8 @@
<j-select
v-model:value="form.data.targetType"
:disabled="!!form.data.id"
@change="form.rules.checkUnique"
placeholder="请选择关联方"
>
<j-select-option
v-for="item in targetList"
@ -100,6 +103,7 @@ import {
getObjectList_api,
addRelation_api,
editRelation_api,
validateField,
} from '@/api/system/relationship';
import { dictItemType } from '../../DataSource/typing';
@ -130,15 +134,44 @@ const formRef = ref<FormInstance>();
const form = reactive({
data: props.data,
rules: {
checkRelation: (_rule: Rule, value: string): any => {
if (!value) return Promise.reject('');
else if (value.length > 64) return Promise.reject('');
/**
* 验证标识
* @param _rule
* @param value
*/
checkRelation: async (_rule: Rule, value: string) => {
const reg = new RegExp('^[0-9a-zA-Z_\\\\-]+$');
return reg.test(value)
? Promise.resolve()
: Promise.reject('标识只能由数字、字母、下划线、中划线组成');
if (!value) return Promise.reject('');
if (!reg.test(value))
return Promise.reject(
'标识只能由数字、字母、下划线、中划线组成',
);
return form.rules.checkUnique();
},
/**
* 验证标识唯一性
* @param value
*/
checkUnique: () => {
if (
!form.data.relation ||
!form.data.objectType ||
!form.data.targetType
)
return;
return new Promise(async (resolve, reject) => {
const { result } = await validateField({
relation: form.data.relation,
objectType: form.data.objectType,
targetType: form.data.targetType,
});
result.passed ? resolve('') : reject(result.reason);
});
},
},
handleObjectTypeChange: () => {
form.data.targetType = undefined;
form.rules.checkUnique();
},
objectList: [] as any[],
@ -169,7 +202,7 @@ form.getObjectList();
type formType = {
name: string;
relation: string;
objectType: string;
objectType: string | undefined;
targetType: string | undefined;
description: string;
id?: string;

View File

@ -14,8 +14,13 @@
model="TABLE"
:params="queryParams"
:defaultParams="{
pageSize: 10,
sorts: [{ name: 'createTime', order: 'desc' }],
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
>
<template #headerTitle>
<PermissionButton

View File

@ -18,6 +18,13 @@
}"
@cancelSelect="selectedRowKeys = []"
size="small"
:defaultParams="{
pageSize: 10,
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
>
<template #headerTitle>
<j-button type="primary" @click="dialogVisible = true">
@ -35,6 +42,9 @@
}"
></BadgeStatus>
</template>
<template #createTime="slotProps">
{{ dayjs(slotProps.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
<template #action="slotProps">
<j-space :size="16">
@ -66,6 +76,7 @@ import PermissionButton from '@/components/PermissionButton/index.vue';
import AddUserDialog from '../components/AddUserDialog.vue';
import { getUserByRole_api, unbindUser_api } from '@/api/system/role';
import { message } from 'jetlinks-ui-components';
import dayjs from 'dayjs';
const roleId = useRoute().params.id as string;
@ -93,6 +104,7 @@ const columns = [
search: {
type: 'date',
},
scopedSlots: true,
},
{
title: '状态',

View File

@ -28,6 +28,7 @@
placeholder="请输入说明"
allow-clear
:maxlength="200"
show-count
/>
</j-form-item>
</j-form>

View File

@ -14,11 +14,16 @@
model="TABLE"
:params="queryParams"
:defaultParams="{
pageSize: 10,
sorts: [
{ name: 'createTime', order: 'desc' },
{ name: 'id', order: 'desc' },
],
}"
:pagination="{
showSizeChanger: true,
pageSizeOptions: ['10', '20', '50', '100'],
}"
>
<template #headerTitle>
<PermissionButton
@ -99,7 +104,7 @@ const columns = [
},
},
{
title: '描述',
title: '说明',
key: 'description',
ellipsis: true,
dataIndex: 'description',