parent
6f59a150d3
commit
283baa6816
|
@ -133,13 +133,13 @@
|
|||
</p>
|
||||
</div>
|
||||
<j-form-item
|
||||
:name="['configuration', 'requsetTimeout']"
|
||||
:rules="LeftTreeRules.requsetTimeout"
|
||||
:name="['configuration', 'requestTimeout']"
|
||||
:rules="LeftTreeRules.requestTimeout"
|
||||
>
|
||||
<j-input-number
|
||||
style="width: 100%"
|
||||
placeholder="请输入请求超时时间配置"
|
||||
v-model:value="formData.configuration.requsetTimeout"
|
||||
v-model:value="formData.configuration.requestTimeout"
|
||||
addon-after="ms"
|
||||
:max="60000"
|
||||
:min="2000"
|
||||
|
@ -257,7 +257,7 @@ const formData = ref({
|
|||
type: 'LowerFrequency',
|
||||
endian: 'BIG',
|
||||
endianIn: 'BIG',
|
||||
requsetTimeout: 2000,
|
||||
requestTimeout: 2000,
|
||||
inheritBreakerSpec: {
|
||||
type: 'LowerFrequency',
|
||||
}
|
||||
|
|
|
@ -170,7 +170,7 @@ export const LeftTreeRules = {
|
|||
endianIn: [
|
||||
{ required: true, message: '请选择单字高低位切换', trigger: 'blur' },
|
||||
],
|
||||
requsetTimeout:[
|
||||
requestTimeout:[
|
||||
{ pattern: /^\d+$/, message:'请输入2000-60000的正整数',trigger: 'change'}
|
||||
]
|
||||
};
|
||||
|
|
|
@ -145,7 +145,10 @@ const visible = ref<boolean>(false);
|
|||
const modalForm = reactive<modalState>({
|
||||
host: '0.0.0.0',
|
||||
});
|
||||
|
||||
const regDomain = new RegExp(
|
||||
// /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
||||
/^[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$/
|
||||
)
|
||||
/**
|
||||
* 校验官网地址
|
||||
*/
|
||||
|
@ -153,7 +156,7 @@ const validateUrl = async (_rule: Rule, value: string) => {
|
|||
if (!value) {
|
||||
return Promise.reject('请输入公网地址');
|
||||
} else {
|
||||
if (!testIpv4_6(value)) {
|
||||
if (!testIpv4_6(value) && !regDomain.test(value)) {
|
||||
return Promise.reject('请输入正确的公网地址');
|
||||
}
|
||||
return Promise.resolve();
|
||||
|
|
|
@ -4,91 +4,56 @@
|
|||
<j-card>
|
||||
<j-row :gutter="[24, 24]" style="padding: 24px">
|
||||
<j-col :span="12">
|
||||
<j-form
|
||||
class="form"
|
||||
layout="vertical"
|
||||
:model="formData"
|
||||
name="basic"
|
||||
:label-col="{ span: 8 }"
|
||||
:wrapper-col="{ span: 24 }"
|
||||
autocomplete="off"
|
||||
>
|
||||
<j-form-item
|
||||
label="证书标准"
|
||||
v-bind="validateInfos.type"
|
||||
>
|
||||
<j-form class="form" layout="vertical" :model="formData" name="basic" :label-col="{ span: 8 }"
|
||||
:wrapper-col="{ span: 24 }" autocomplete="off" ref="formRef">
|
||||
<j-form-item label="证书标准" name="type"
|
||||
:rules="[{ required: true, message: '请选择证书标准', trigger: 'blur' }]">
|
||||
<j-radio-group v-model:value="formData.type">
|
||||
<j-radio-button
|
||||
class="form-radio-button"
|
||||
value="common"
|
||||
>
|
||||
<img
|
||||
:src="getImage('/certificate.png')"
|
||||
/>
|
||||
<j-radio-button class="form-radio-button" value="common">
|
||||
<img :src="getImage('/certificate.png')" />
|
||||
</j-radio-button>
|
||||
</j-radio-group>
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
label="证书名称"
|
||||
v-bind="validateInfos.name"
|
||||
>
|
||||
<j-input
|
||||
placeholder="请输入证书名称"
|
||||
v-model:value="formData.name"
|
||||
/>
|
||||
<j-form-item label="证书名称" name="name" :rules="[
|
||||
{ required: true, message: '请输入证书名称', trigger: 'blur' },
|
||||
{ max: 64, message: '最多可输入64个字符' },
|
||||
]">
|
||||
<j-input placeholder="请输入证书名称" v-model:value="formData.name" />
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
label="证书文件"
|
||||
v-bind="validateInfos['configs.cert']"
|
||||
>
|
||||
<CertificateFile
|
||||
name="cert"
|
||||
v-model:modelValue="formData.configs.cert"
|
||||
placeholder="请输入证书文件"
|
||||
/>
|
||||
<j-form-item label="证书文件" :name="['configs','cert']" :rules="[
|
||||
{ required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
]">
|
||||
<CertificateFile name="cert" v-model:modelValue="formData.configs.cert"
|
||||
placeholder="请输入证书文件" />
|
||||
</j-form-item>
|
||||
<j-form-item label="证书类型" v-bind="validateInfos.mode">
|
||||
<j-form-item label="证书类型" name="mode"
|
||||
:rules="[{ required: true, message: '请选择证书类型', trigger: 'blur' }]">
|
||||
<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="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-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 label="证书私钥" v-if="formData.mode !== 'client'" :name="['configs','key']" :rules="[
|
||||
{ required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
]">
|
||||
<CertificateFile name="key" v-model:modelValue="formData.configs.key"
|
||||
placeholder="请输入证书私钥" />
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
label="证书私钥"
|
||||
v-bind="validateInfos['configs.key']"
|
||||
>
|
||||
<CertificateFile
|
||||
name="key"
|
||||
v-model:modelValue="formData.configs.key"
|
||||
placeholder="请输入证书私钥"
|
||||
/>
|
||||
</j-form-item>
|
||||
<j-form-item label="说明" name="description">
|
||||
<j-textarea
|
||||
placeholder="请输入说明"
|
||||
v-model:value="formData.description"
|
||||
:maxlength="200"
|
||||
:rows="3"
|
||||
showCount
|
||||
/>
|
||||
<j-form-item label="说明" name="description" :rules="[{ max: 200, message: '最多可输入200个字符' }]">
|
||||
<j-textarea placeholder="请输入说明" v-model:value="formData.description" :maxlength="200"
|
||||
:rows="3" showCount />
|
||||
</j-form-item>
|
||||
|
||||
<j-form-item>
|
||||
<j-button
|
||||
v-if="view === 'false'"
|
||||
class="form-submit"
|
||||
html-type="submit"
|
||||
type="primary"
|
||||
@click.prevent="onSubmit"
|
||||
:loading="loading"
|
||||
>保存</j-button
|
||||
>
|
||||
<j-button v-if="view === 'false'" class="form-submit" html-type="submit" type="primary"
|
||||
@click.prevent="onSubmit" :loading="loading">保存</j-button>
|
||||
</j-form-item>
|
||||
</j-form>
|
||||
</j-col>
|
||||
|
@ -131,8 +96,9 @@ const route = useRoute();
|
|||
const view = route.query.view as string;
|
||||
const id = route.params.id as string;
|
||||
|
||||
const useForm = Form.useForm;
|
||||
// const useForm = Form.useForm;
|
||||
|
||||
const formRef = ref()
|
||||
const fileLoading = ref(false);
|
||||
const loading = ref(false);
|
||||
|
||||
|
@ -144,49 +110,46 @@ const formData = ref<FormDataType>({
|
|||
key: '',
|
||||
},
|
||||
description: '',
|
||||
mode:'server',
|
||||
authenticationMethod:'single'
|
||||
mode: 'server',
|
||||
authenticationMethod: 'single'
|
||||
});
|
||||
|
||||
const { resetFields, validate, validateInfos } = useForm(
|
||||
formData,
|
||||
reactive({
|
||||
type: [{ required: true, message: '请选择证书标准', trigger: 'blur' }],
|
||||
name: [
|
||||
{ required: true, message: '请输入证书名称', trigger: 'blur' },
|
||||
{ max: 64, message: '最多可输入64个字符' },
|
||||
],
|
||||
'configs.cert': [
|
||||
{ required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
],
|
||||
'configs.key': [
|
||||
{ required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
],
|
||||
description: [{ max: 200, message: '最多可输入200个字符' }],
|
||||
mode:[{ required: true, message: '请选择证书类型', trigger: 'blur' }],
|
||||
authenticationMethod:[{ required: true, message: '请选择认证方式', trigger: 'blur' }]
|
||||
}),
|
||||
);
|
||||
// const rules = {
|
||||
// type: [{ required: true, message: '请选择证书标准', trigger: 'blur' }],
|
||||
// name: [
|
||||
// { required: true, message: '请输入证书名称', trigger: 'blur' },
|
||||
// { max: 64, message: '最多可输入64个字符' },
|
||||
// ],
|
||||
// 'configs.cert': [
|
||||
// { required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
// ],
|
||||
// 'configs.key': [
|
||||
// { required: true, message: '请输入或上传文件', trigger: 'blur' },
|
||||
// ],
|
||||
// description: [{ max: 200, message: '最多可输入200个字符' }],
|
||||
// mode:[{ required: true, message: '请选择证书类型', trigger: 'blur' }],
|
||||
// authenticationMethod:[{ required: true, message: '请选择认证方式', trigger: 'blur' }]
|
||||
// );
|
||||
|
||||
const onSubmit = () => {
|
||||
validate()
|
||||
formRef.value.validate()
|
||||
.then(async (res) => {
|
||||
let params:any = toRaw(formData.value);
|
||||
if(formData.value.mode === 'client'){
|
||||
if(formData.value.authenticationMethod === 'binomial'){
|
||||
let params: any = toRaw(formData.value);
|
||||
if (formData.value.mode === 'client') {
|
||||
if (formData.value.authenticationMethod === 'binomial') {
|
||||
params.configs.trust = params.configs.cert
|
||||
}else{
|
||||
} else {
|
||||
params.configs = {
|
||||
key:formData.value.configs.key,
|
||||
trust:formData.value.configs.cert
|
||||
// key:formData.value.configs.key,
|
||||
trust: formData.value.configs.cert
|
||||
}
|
||||
}
|
||||
}
|
||||
loading.value = true;
|
||||
const response =
|
||||
id === ':id'
|
||||
? await save(params).catch(() => {})
|
||||
: await update({ ...params, id }).catch(() => {});
|
||||
? await save(params).catch(() => { })
|
||||
: await update({ ...params, id }).catch(() => { });
|
||||
if (response?.status === 200) {
|
||||
onlyMessage('操作成功', 'success');
|
||||
router.push('/iot/link/certificate');
|
||||
|
@ -217,9 +180,9 @@ const detail = async (id: string) => {
|
|||
const type = result.type.value as TypeObjType;
|
||||
formData.value = {
|
||||
...result,
|
||||
configs:{
|
||||
key:result.configs.key,
|
||||
cert:result.configs?.cert ? result.configs?.cert : result.configs?.trust
|
||||
configs: {
|
||||
key: result.configs.key,
|
||||
cert: result.configs?.cert ? result.configs?.cert : result.configs?.trust
|
||||
},
|
||||
mode: result.mode.value,
|
||||
authenticationMethod: result.authenticationMethod.value,
|
||||
|
@ -239,6 +202,7 @@ detail(id);
|
|||
width: 148px;
|
||||
height: 80px;
|
||||
padding: 0;
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
|
Loading…
Reference in New Issue