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 editRelation_api = (data: object) => server.patch(`/relation`, data);
// 删除关系 // 删除关系
export const delRelation_api = (id: string) => server.remove(`/relation/${id}`); 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 visible
@cancel="emits('update:visible', false)" @cancel="emits('update:visible', false)"
> >
<div> <a-alert
message="只能分配有'共享'权限的资产数据"
type="warning"
show-icon
/>
<div style="margin-top: 5px;">
<span>资产权限</span> <span>资产权限</span>
<j-checkbox-group <j-checkbox-group
v-model:value="form.permission" v-model:value="form.permission"

View File

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

View File

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

View File

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

View File

@ -13,7 +13,14 @@
:request="getPermission_api" :request="getPermission_api"
model="TABLE" model="TABLE"
:params="queryParams" :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> <template #headerTitle>
<PermissionButton <PermissionButton

View File

@ -49,13 +49,14 @@
<j-select <j-select
v-model:value="form.data.objectType" v-model:value="form.data.objectType"
:disabled="!!form.data.id" :disabled="!!form.data.id"
@change="() => (form.data.targetType = undefined)" @change="form.handleObjectTypeChange"
placeholder="请选择关联方"
> >
<j-select-option <j-select-option
v-for="item in form.objectList" v-for="item in form.objectList"
:value="item.id" :value="item.id"
> >
{{ item.name }}. {{ item.name }}
</j-select-option> </j-select-option>
</j-select> </j-select>
</j-form-item> </j-form-item>
@ -69,6 +70,8 @@
<j-select <j-select
v-model:value="form.data.targetType" v-model:value="form.data.targetType"
:disabled="!!form.data.id" :disabled="!!form.data.id"
@change="form.rules.checkUnique"
placeholder="请选择关联方"
> >
<j-select-option <j-select-option
v-for="item in targetList" v-for="item in targetList"
@ -100,6 +103,7 @@ import {
getObjectList_api, getObjectList_api,
addRelation_api, addRelation_api,
editRelation_api, editRelation_api,
validateField,
} from '@/api/system/relationship'; } from '@/api/system/relationship';
import { dictItemType } from '../../DataSource/typing'; import { dictItemType } from '../../DataSource/typing';
@ -130,15 +134,44 @@ const formRef = ref<FormInstance>();
const form = reactive({ const form = reactive({
data: props.data, data: props.data,
rules: { 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_\\\\-]+$'); const reg = new RegExp('^[0-9a-zA-Z_\\\\-]+$');
if (!value) return Promise.reject('');
return reg.test(value) if (!reg.test(value))
? Promise.resolve() return Promise.reject(
: 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[], objectList: [] as any[],
@ -169,7 +202,7 @@ form.getObjectList();
type formType = { type formType = {
name: string; name: string;
relation: string; relation: string;
objectType: string; objectType: string | undefined;
targetType: string | undefined; targetType: string | undefined;
description: string; description: string;
id?: string; id?: string;

View File

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

View File

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

View File

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

View File

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