fix: bug#19069

* fix: bug#19041

* fix: bug#19069
This commit is contained in:
XieYongHong 2023-10-19 10:54:21 +08:00 committed by GitHub
parent 6f59a150d3
commit 283baa6816
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 108 deletions

View File

@ -133,13 +133,13 @@
</p> </p>
</div> </div>
<j-form-item <j-form-item
:name="['configuration', 'requsetTimeout']" :name="['configuration', 'requestTimeout']"
:rules="LeftTreeRules.requsetTimeout" :rules="LeftTreeRules.requestTimeout"
> >
<j-input-number <j-input-number
style="width: 100%" style="width: 100%"
placeholder="请输入请求超时时间配置" placeholder="请输入请求超时时间配置"
v-model:value="formData.configuration.requsetTimeout" v-model:value="formData.configuration.requestTimeout"
addon-after="ms" addon-after="ms"
:max="60000" :max="60000"
:min="2000" :min="2000"
@ -257,7 +257,7 @@ const formData = ref({
type: 'LowerFrequency', type: 'LowerFrequency',
endian: 'BIG', endian: 'BIG',
endianIn: 'BIG', endianIn: 'BIG',
requsetTimeout: 2000, requestTimeout: 2000,
inheritBreakerSpec: { inheritBreakerSpec: {
type: 'LowerFrequency', type: 'LowerFrequency',
} }

View File

@ -170,7 +170,7 @@ export const LeftTreeRules = {
endianIn: [ endianIn: [
{ required: true, message: '请选择单字高低位切换', trigger: 'blur' }, { required: true, message: '请选择单字高低位切换', trigger: 'blur' },
], ],
requsetTimeout:[ requestTimeout:[
{ pattern: /^\d+$/, message:'请输入2000-60000的正整数',trigger: 'change'} { pattern: /^\d+$/, message:'请输入2000-60000的正整数',trigger: 'change'}
] ]
}; };

View File

@ -145,7 +145,10 @@ const visible = ref<boolean>(false);
const modalForm = reactive<modalState>({ const modalForm = reactive<modalState>({
host: '0.0.0.0', 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) { if (!value) {
return Promise.reject('请输入公网地址'); return Promise.reject('请输入公网地址');
} else { } else {
if (!testIpv4_6(value)) { if (!testIpv4_6(value) && !regDomain.test(value)) {
return Promise.reject('请输入正确的公网地址'); return Promise.reject('请输入正确的公网地址');
} }
return Promise.resolve(); return Promise.resolve();

View File

@ -4,91 +4,56 @@
<j-card> <j-card>
<j-row :gutter="[24, 24]" style="padding: 24px"> <j-row :gutter="[24, 24]" style="padding: 24px">
<j-col :span="12"> <j-col :span="12">
<j-form <j-form class="form" layout="vertical" :model="formData" name="basic" :label-col="{ span: 8 }"
class="form" :wrapper-col="{ span: 24 }" autocomplete="off" ref="formRef">
layout="vertical" <j-form-item label="证书标准" name="type"
:model="formData" :rules="[{ required: true, message: '请选择证书标准', trigger: 'blur' }]">
name="basic"
:label-col="{ span: 8 }"
:wrapper-col="{ span: 24 }"
autocomplete="off"
>
<j-form-item
label="证书标准"
v-bind="validateInfos.type"
>
<j-radio-group v-model:value="formData.type"> <j-radio-group v-model:value="formData.type">
<j-radio-button <j-radio-button class="form-radio-button" value="common">
class="form-radio-button" <img :src="getImage('/certificate.png')" />
value="common"
>
<img
:src="getImage('/certificate.png')"
/>
</j-radio-button> </j-radio-button>
</j-radio-group> </j-radio-group>
</j-form-item> </j-form-item>
<j-form-item <j-form-item label="证书名称" name="name" :rules="[
label="证书名称" { required: true, message: '请输入证书名称', trigger: 'blur' },
v-bind="validateInfos.name" { max: 64, message: '最多可输入64个字符' },
> ]">
<j-input <j-input placeholder="请输入证书名称" v-model:value="formData.name" />
placeholder="请输入证书名称"
v-model:value="formData.name"
/>
</j-form-item> </j-form-item>
<j-form-item <j-form-item label="证书文件" :name="['configs','cert']" :rules="[
label="证书文件" { required: true, message: '请输入或上传文件', trigger: 'blur' },
v-bind="validateInfos['configs.cert']" ]">
> <CertificateFile name="cert" v-model:modelValue="formData.configs.cert"
<CertificateFile placeholder="请输入证书文件" />
name="cert"
v-model:modelValue="formData.configs.cert"
placeholder="请输入证书文件"
/>
</j-form-item> </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-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-button value="server" size="large">服务端</j-radio-button>
</j-radio-group> </j-radio-group>
</j-form-item> </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-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="single" style="margin-right: 30px;" size="large">单向认证</j-radio-button>
<j-radio-button value="binomial" size="large">双向认证</j-radio-button> <j-radio-button value="binomial" size="large">双向认证</j-radio-button>
</j-radio-group> </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>
<j-form-item <j-form-item label="说明" name="description" :rules="[{ max: 200, message: '最多可输入200个字符' }]">
label="证书私钥" <j-textarea placeholder="请输入说明" v-model:value="formData.description" :maxlength="200"
v-bind="validateInfos['configs.key']" :rows="3" showCount />
>
<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> </j-form-item>
<j-form-item> <j-form-item>
<j-button <j-button v-if="view === 'false'" class="form-submit" html-type="submit" type="primary"
v-if="view === 'false'" @click.prevent="onSubmit" :loading="loading">保存</j-button>
class="form-submit"
html-type="submit"
type="primary"
@click.prevent="onSubmit"
:loading="loading"
>保存</j-button
>
</j-form-item> </j-form-item>
</j-form> </j-form>
</j-col> </j-col>
@ -131,8 +96,9 @@ const route = useRoute();
const view = route.query.view as string; const view = route.query.view as string;
const id = route.params.id 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 fileLoading = ref(false);
const loading = ref(false); const loading = ref(false);
@ -148,28 +114,25 @@ const formData = ref<FormDataType>({
authenticationMethod: 'single' authenticationMethod: 'single'
}); });
const { resetFields, validate, validateInfos } = useForm( // const rules = {
formData, // type: [{ required: true, message: '', trigger: 'blur' }],
reactive({ // name: [
type: [{ required: true, message: '请选择证书标准', trigger: 'blur' }], // { required: true, message: '', trigger: 'blur' },
name: [ // { max: 64, message: '64' },
{ required: true, message: '请输入证书名称', trigger: 'blur' }, // ],
{ max: 64, message: '最多可输入64个字符' }, // 'configs.cert': [
], // { required: true, message: '', trigger: 'blur' },
'configs.cert': [ // ],
{ required: true, message: '请输入或上传文件', trigger: 'blur' }, // 'configs.key': [
], // { required: true, message: '', trigger: 'blur' },
'configs.key': [ // ],
{ required: true, message: '请输入或上传文件', trigger: 'blur' }, // description: [{ max: 200, message: '200' }],
], // mode:[{ required: true, message: '', trigger: 'blur' }],
description: [{ max: 200, message: '最多可输入200个字符' }], // authenticationMethod:[{ required: true, message: '', trigger: 'blur' }]
mode:[{ required: true, message: '请选择证书类型', trigger: 'blur' }], // );
authenticationMethod:[{ required: true, message: '请选择认证方式', trigger: 'blur' }]
}),
);
const onSubmit = () => { const onSubmit = () => {
validate() formRef.value.validate()
.then(async (res) => { .then(async (res) => {
let params: any = toRaw(formData.value); let params: any = toRaw(formData.value);
if (formData.value.mode === 'client') { if (formData.value.mode === 'client') {
@ -177,7 +140,7 @@ const onSubmit = () => {
params.configs.trust = params.configs.cert params.configs.trust = params.configs.cert
} else { } else {
params.configs = { params.configs = {
key:formData.value.configs.key, // key:formData.value.configs.key,
trust: formData.value.configs.cert trust: formData.value.configs.cert
} }
} }
@ -239,6 +202,7 @@ detail(id);
width: 148px; width: 148px;
height: 80px; height: 80px;
padding: 0; padding: 0;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;