Merge branch 'dev' into dev-dictionary

This commit is contained in:
XieYongHong 2023-10-08 16:41:21 +08:00
commit 5b0a9fe9ae
6 changed files with 121 additions and 25 deletions

View File

@ -17,7 +17,9 @@
isCheck isCheck
? { ? {
selectedRowKeys: _selectedRowKeys, selectedRowKeys: _selectedRowKeys,
onChange: onSelectChange, onSelect: onSelectChange,
onSelectAll: selectAll,
onSelectNone: ()=>_selectedRowKeys = []
} }
: false : false
" "
@ -708,10 +710,37 @@ const getActions = (
return actions; return actions;
}; };
const onSelectChange = (keys: string[]) => { const onSelectChange = (item: any,state: boolean) => {
_selectedRowKeys.value = [...keys]; const arr = new Set(_selectedRowKeys.value);
// console.log(item, state);
if (state) {
arr.add(item.id);
} else {
arr.delete(item.id);
}
_selectedRowKeys.value = [...arr.values()];
}; };
const selectAll = (selected: Boolean, selectedRows: any,changeRows:any) => {
if (selected) {
changeRows.map((i: any) => {
if (!_selectedRowKeys.value.includes(i.id)) {
_selectedRowKeys.value.push(i.id)
}
})
} else {
const arr = changeRows.map((item: any) => item.id)
const _ids: string[] = [];
_selectedRowKeys.value.map((i: any) => {
if (!arr.includes(i)) {
_ids.push(i)
}
})
_selectedRowKeys.value = _ids
}
}
const handleClick = (dt: any) => { const handleClick = (dt: any) => {
if (isCheck.value) { if (isCheck.value) {
if (_selectedRowKeys.value.includes(dt.id)) { if (_selectedRowKeys.value.includes(dt.id)) {

View File

@ -510,11 +510,17 @@ const beforeUpload: UploadProps['beforeUpload'] = (file) => {
reader.onload = (json) => { reader.onload = (json) => {
if(json.target?.result){ if(json.target?.result){
const data = JSON.parse(json.target?.result); const data = JSON.parse(json.target?.result);
Object.keys(data).forEach((i:any)=>{
const map = new Map()
data[i].forEach((item:any)=>(
map.set(item.id,item)
))
data[i] = [...map.values()]
})
let check = formModel.metadata === 'jetlinks' ? requiredCheck(data) : aliCheck(data) let check = formModel.metadata === 'jetlinks' ? requiredCheck(data) : aliCheck(data)
if(!check){ if(!check){
onlyMessage('操作成功!') onlyMessage('操作成功!')
formModel.import = json.target?.result; formModel.import = JSON.stringify(data);
} }
} else { } else {
onlyMessage('文件内容不能为空', 'error') onlyMessage('文件内容不能为空', 'error')

View File

@ -47,6 +47,18 @@
placeholder="请输入证书文件" placeholder="请输入证书文件"
/> />
</j-form-item> </j-form-item>
<j-form-item label="证书类型" v-bind="validateInfos.mode">
<j-radio-group v-model:value="formData.mode" button-style="solid">
<j-radio-button value="client" style="margin-right: 30px;" size="large">客户端</j-radio-button>
<j-radio-button value="server" size="large">服务端</j-radio-button>
</j-radio-group>
</j-form-item>
<j-form-item label="认证方式" v-if="formData.mode === 'client'" v-bind="validateInfos.authenticationMethod">
<j-radio-group button-style="solid" v-model:value="formData.authenticationMethod">
<j-radio-button value="single" style="margin-right: 30px;" size="large">单向认证</j-radio-button>
<j-radio-button value="binomial" size="large">双向认证</j-radio-button>
</j-radio-group>
</j-form-item>
<j-form-item <j-form-item
label="证书私钥" label="证书私钥"
v-bind="validateInfos['configs.key']" v-bind="validateInfos['configs.key']"
@ -112,6 +124,7 @@ import type { UploadChangeParam } from 'ant-design-vue';
import { save, update, queryDetail } from '@/api/link/certificate'; import { save, update, queryDetail } from '@/api/link/certificate';
import { FormDataType, TypeObjType } from '../type'; import { FormDataType, TypeObjType } from '../type';
import { onlyMessage } from '@/utils/comm'; import { onlyMessage } from '@/utils/comm';
import { cloneDeep } from 'lodash-es';
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -131,6 +144,8 @@ const formData = ref<FormDataType>({
key: '', key: '',
}, },
description: '', description: '',
mode:'server',
authenticationMethod:'single'
}); });
const { resetFields, validate, validateInfos } = useForm( const { resetFields, validate, validateInfos } = useForm(
@ -148,13 +163,25 @@ const { resetFields, validate, validateInfos } = useForm(
{ required: true, message: '请输入或上传文件', trigger: 'blur' }, { required: true, message: '请输入或上传文件', trigger: 'blur' },
], ],
description: [{ max: 200, message: '最多可输入200个字符' }], description: [{ max: 200, message: '最多可输入200个字符' }],
mode:[{ required: true, message: '请选择证书类型', trigger: 'blur' }],
authenticationMethod:[{ required: true, message: '请选择认证方式', trigger: 'blur' }]
}), }),
); );
const onSubmit = () => { const onSubmit = () => {
validate() validate()
.then(async (res) => { .then(async (res) => {
const params = toRaw(formData.value); let params:any = toRaw(formData.value);
if(formData.value.mode === 'client'){
if(formData.value.authenticationMethod === 'binomial'){
params.configs.trust = params.configs.cert
}else{
params.configs = {
key:formData.value.configs.key,
trust:formData.value.configs.cert
}
}
}
loading.value = true; loading.value = true;
const response = const response =
id === ':id' id === ':id'
@ -190,6 +217,12 @@ const detail = async (id: string) => {
const type = result.type.value as TypeObjType; const type = result.type.value as TypeObjType;
formData.value = { formData.value = {
...result, ...result,
configs:{
key:result.configs.key,
cert:result.configs?.cert ? result.configs?.cert : result.configs?.trust
},
mode: result.mode.value,
authenticationMethod: result.authenticationMethod.value,
type, type,
}; };
} }

View File

@ -13,7 +13,8 @@ export type FormDataType = {
}; };
id?: string; id?: string;
format?: string; format?: string;
mode?: object; mode?: object | string;
creatorId?: string; creatorId?: string;
createTime?: number; createTime?: number;
authenticationMethod: string;
}; };

View File

@ -268,7 +268,7 @@ onMounted(() => {
// )) // ))
// console.log(AllMenu); // console.log(AllMenu);
// //
treeData.value = handleSortsArr(systemMenu.value); treeData.value = handleSortsArr(AllMenu);
} }
}); });
}); });

View File

@ -21,7 +21,7 @@
/> />
</template> </template>
<j-collapse-panel <j-collapse-panel
v-for="item in dataSource" v-for="item in tabs"
:key="item.provider" :key="item.provider"
> >
<template #header> <template #header>
@ -36,7 +36,7 @@
:key="child.provider" :key="child.provider"
> >
<Item <Item
:data="data.find(i => i?.provider === child?.provider)" :data="child"
@refresh="onRefresh" @refresh="onRefresh"
:isLast="index === item.children?.length" :isLast="index === item.children?.length"
:provider="item.provider" :provider="item.provider"
@ -105,15 +105,42 @@ const dataMap = new Map();
const data = ref<any[]>([]); const data = ref<any[]>([]);
const tabs = ref<any[]>([])
const handleSearch = () => { const handleSearch = () => {
queryChannelConfig().then((resp) => { queryChannelConfig().then((resp) => {
if (resp.status === 200) { if (resp.status === 200) {
(resp?.result || []).map((item: any) => { // (resp?.result || []).map((item: any) => {
dataMap.set(item.provider, item); // dataMap.set(item.provider, item);
}); // });
data.value = Array.from(dataMap).map((item) => { // data.value = Array.from(dataMap).map((item) => {
return item?.[1]; // return item?.[1];
}); // });
const arr = dataSource
.map((item: any) => {
const _child = item.children.map((i: any) => {
const _item = (resp.result || []).find(
(t: any) => t?.provider === i?.provider,
);
return {
...i,
..._item,
};
});
return {
...item,
children: _child,
};
})
.filter((it: any) => {
return it.children.filter((lt: any) => lt?.id)?.length;
})
.map((item) => {
return {
...item,
children: item.children.filter((lt: any) => lt?.id),
};
});
tabs.value = arr
} }
}); });
}; };
@ -123,15 +150,15 @@ const onRefresh = () => {
} }
onMounted(() => { onMounted(() => {
dataMap.clear(); // dataMap.clear();
dataSource.forEach((item) => { // dataSource.forEach((item) => {
item.children.map((i) => { // item.children.map((i) => {
dataMap.set(i.provider, i); // dataMap.set(i.provider, i);
}); // });
}); // });
data.value = Array.from(dataMap).map((item) => { // data.value = Array.from(dataMap).map((item) => {
return item?.[1]; // return item?.[1];
}); // });
handleSearch(); handleSearch();
}); });
</script> </script>