fix(系统管理): 修改项目和系统插件bug&统一字符长度

This commit is contained in:
xinxin.wu 2024-01-31 21:04:53 +08:00 committed by 刘瑞斌
parent 567a626998
commit 047e4d0936
90 changed files with 679 additions and 194 deletions

View File

@ -14,7 +14,6 @@
v-model:model-value="condition.name" v-model:model-value="condition.name"
:placeholder="t('apiTestDebug.preconditionScriptNamePlaceholder')" :placeholder="t('apiTestDebug.preconditionScriptNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
size="small" size="small"
@press-enter="isShowEditScriptNameInput = false" @press-enter="isShowEditScriptNameInput = false"
@blur="isShowEditScriptNameInput = false" @blur="isShowEditScriptNameInput = false"

View File

@ -12,6 +12,8 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { defineModel } from 'vue';
import { statusCodeOptions } from '@/components/pure/ms-advance-filter/index'; import { statusCodeOptions } from '@/components/pure/ms-advance-filter/index';
import paramsTable, { type ParamTableColumn } from '@/views/api-test/components/paramTable.vue'; import paramsTable, { type ParamTableColumn } from '@/views/api-test/components/paramTable.vue';

View File

@ -55,7 +55,7 @@
v-model="element[model.filed]" v-model="element[model.filed]"
class="flex-1" class="flex-1"
:placeholder="t(model.placeholder || '')" :placeholder="t(model.placeholder || '')"
:max-length="model.maxLength || 250" :max-length="model.maxLength || 255"
allow-clear allow-clear
/> />
<a-input-number <a-input-number
@ -102,7 +102,7 @@
v-model="element[child.filed]" v-model="element[child.filed]"
:class="child.className" :class="child.className"
:placeholder="t(child.placeholder || '')" :placeholder="t(child.placeholder || '')"
:max-length="child.maxLength || 250" :max-length="child.maxLength || 255"
allow-clear allow-clear
/> />
<a-select <a-select

View File

@ -1,5 +1,11 @@
<template> <template>
<a-modal v-model:visible="showBatchModal" title-align="start" class="ms-modal-upload ms-modal-medium"> <a-modal
v-model:visible="showBatchModal"
:mask-closable="false"
:mask="true"
title-align="start"
class="ms-modal-upload ms-modal-medium"
>
<template #title> <template #title>
{{ batchTitle }} {{ batchTitle }}
<div class="text-[var(--color-text-4)]"> <div class="text-[var(--color-text-4)]">

View File

@ -34,6 +34,7 @@
:placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')" :placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
/> />
<div class="folder"> <div class="folder">
<div :class="getFolderClass('all')" @click="setActiveFolder('all')"> <div :class="getFolderClass('all')" @click="setActiveFolder('all')">

View File

@ -20,6 +20,7 @@
</div> </div>
<a-input <a-input
v-model:model-value="moduleKeyword" v-model:model-value="moduleKeyword"
:max-length="255"
:placeholder="t('project.commonScript.folderSearchPlaceholder')" :placeholder="t('project.commonScript.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"

View File

@ -17,12 +17,7 @@
:label="t('project.commonScript.publicScriptName')" :label="t('project.commonScript.publicScriptName')"
:rules="[{ required: true, message: t('project.commonScript.publicScriptNameNotEmpty') }]" :rules="[{ required: true, message: t('project.commonScript.publicScriptNameNotEmpty') }]"
> >
<a-input <a-input v-model="form.name" :max-length="255" :placeholder="t('project.commonScript.pleaseEnterScriptName')" />
v-model="form.name"
:max-length="255"
show-word-limit
:placeholder="t('project.commonScript.pleaseEnterScriptName')"
/>
</a-form-item> </a-form-item>
<a-form-item field="status" :label="t('project.commonScript.scriptEnabled')"> <a-form-item field="status" :label="t('project.commonScript.scriptEnabled')">
<a-select v-model="form.status" class="max-w-[396px]" :placeholder="t('project.commonScript.scriptEnabled')"> <a-select v-model="form.status" class="max-w-[396px]" :placeholder="t('project.commonScript.scriptEnabled')">
@ -36,10 +31,11 @@
:placeholder="t('system.organization.descriptionPlaceholder')" :placeholder="t('system.organization.descriptionPlaceholder')"
allow-clear allow-clear
:auto-size="{ minRows: 1 }" :auto-size="{ minRows: 1 }"
:max-length="1000"
/> />
</a-form-item> </a-form-item>
<a-form-item field="tags" :label="t('project.commonScript.tags')"> <a-form-item field="tags" :label="t('project.commonScript.tags')">
<a-input-tag v-model="form.tags" :placeholder="t('project.commonScript.enterContentAddTags')" allow-clear /> <MsTagsInput v-model:modelValue="form.tags"></MsTagsInput>
</a-form-item> </a-form-item>
<a-form-item field="inputParameters" :label="t('project.commonScript.inputParams')"> <a-form-item field="inputParameters" :label="t('project.commonScript.inputParams')">
<paramTable <paramTable

View File

@ -3,6 +3,7 @@
v-model:model-value="moduleKeyword" v-model:model-value="moduleKeyword"
:placeholder="t('project.fileManagement.folderSearchPlaceholder')" :placeholder="t('project.fileManagement.folderSearchPlaceholder')"
allow-clear allow-clear
:max-length="255"
class="mb-[16px]" class="mb-[16px]"
></a-input> ></a-input>
<a-spin class="min-h-[400px] w-full" :loading="loading"> <a-spin class="min-h-[400px] w-full" :loading="loading">

View File

@ -4,6 +4,7 @@
:placeholder="t('project.fileManagement.folderSearchPlaceholder')" :placeholder="t('project.fileManagement.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[8px]" class="mb-[8px]"
:max-length="255"
></a-input> ></a-input>
<a-spin class="h-full w-full" :loading="loading"> <a-spin class="h-full w-full" :loading="loading">
<MsList <MsList

View File

@ -10,6 +10,7 @@
v-else-if="group.type === 'input'" v-else-if="group.type === 'input'"
v-model:model-value="innerForm[`${paramKey}${index + 1}`]" v-model:model-value="innerForm[`${paramKey}${index + 1}`]"
:placeholder="t(group.placeholder || '')" :placeholder="t(group.placeholder || '')"
:max-length="255"
/> />
<a-radio-group <a-radio-group
v-else-if="group.type === 'radio'" v-else-if="group.type === 'radio'"
@ -35,6 +36,7 @@
v-model:model-value="innerForm[`${paramKey}${index + 1}`]" v-model:model-value="innerForm[`${paramKey}${index + 1}`]"
:placeholder="t(group.placeholder || '')" :placeholder="t(group.placeholder || '')"
class="ms-params-input-inputAppendSelect" class="ms-params-input-inputAppendSelect"
:max-length="255"
> >
<template #prepend> <template #prepend>
<a-select <a-select

View File

@ -128,7 +128,6 @@
v-model:model-value="timeForm.desc" v-model:model-value="timeForm.desc"
:max-length="64" :max-length="64"
:placeholder="t('ms.personal.accessKeyDescPlaceholder')" :placeholder="t('ms.personal.accessKeyDescPlaceholder')"
show-word-limit
/> />
</a-form-item> </a-form-item>
</a-form> </a-form>

View File

@ -27,7 +27,6 @@
v-model:modelValue="baseInfoForm.name" v-model:modelValue="baseInfoForm.name"
:placeholder="t('ms.personal.namePlaceholder')" :placeholder="t('ms.personal.namePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
/> />
</a-form-item> </a-form-item>
<a-form-item <a-form-item

View File

@ -21,6 +21,7 @@
v-model:model-value="apiConfig.userUrl" v-model:model-value="apiConfig.userUrl"
:placeholder="t('ms.personal.apiLocalExecutionPlaceholder')" :placeholder="t('ms.personal.apiLocalExecutionPlaceholder')"
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
@press-enter="testApi" @press-enter="testApi"
></a-input> ></a-input>
<div class="config-card-footer"> <div class="config-card-footer">
@ -65,6 +66,7 @@
v-model:model-value="uiConfig.userUrl" v-model:model-value="uiConfig.userUrl"
:placeholder="t('ms.personal.uiLocalExecutionPlaceholder')" :placeholder="t('ms.personal.uiLocalExecutionPlaceholder')"
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
@press-enter="testUi" @press-enter="testUi"
></a-input> ></a-input>
<div class="config-card-footer"> <div class="config-card-footer">

View File

@ -25,6 +25,7 @@
<a-input <a-input
v-model="form.name" v-model="form.name"
class="w-[243px]" class="w-[243px]"
:max-length="255"
:placeholder="t('system.userGroup.pleaseInputUserGroupName')" :placeholder="t('system.userGroup.pleaseInputUserGroupName')"
allow-clear allow-clear
@press-enter="handleBeforeOk" @press-enter="handleBeforeOk"

View File

@ -81,7 +81,7 @@
class="w-full" class="w-full"
allow-clear allow-clear
:disabled="!item.dataIndex" :disabled="!item.dataIndex"
:max-length="60" :max-length="255"
/> />
<MsTagsInput <MsTagsInput
v-else-if="item.type === FilterType.TAGS_INPUT" v-else-if="item.type === FilterType.TAGS_INPUT"
@ -97,7 +97,7 @@
class="w-full" class="w-full"
allow-clear allow-clear
:disabled="!item.dataIndex" :disabled="!item.dataIndex"
:max-length="60" :max-length="255"
/> />
<MsSelect <MsSelect
v-else-if="item.type === FilterType.SELECT" v-else-if="item.type === FilterType.SELECT"
@ -150,8 +150,7 @@
minRows: 1, minRows: 1,
maxRows: 1, maxRows: 1,
}" }"
show-word-limit :max-length="1000"
:max-length="512"
/> />
<a-radio-group <a-radio-group
v-else-if="item.type === FilterType.RADIO" v-else-if="item.type === FilterType.RADIO"

View File

@ -40,6 +40,7 @@
ref="inputRef" ref="inputRef"
v-model.trim="addTagInput" v-model.trim="addTagInput"
size="mini" size="mini"
:max-length="255"
:error="!!tagInputError" :error="!!tagInputError"
@keyup.enter="handleAddTag(item)" @keyup.enter="handleAddTag(item)"
@blur="handleAddTag(item)" @blur="handleAddTag(item)"

View File

@ -3,6 +3,7 @@
:value="props.modelValue" :value="props.modelValue"
:placeholder="t('project.menu.pleaseInputJiraKey')" :placeholder="t('project.menu.pleaseInputJiraKey')"
v-bind="attrs" v-bind="attrs"
:max-length="255"
@change="(v: string) => emit('update:modelValue', v)" @change="(v: string) => emit('update:modelValue', v)"
@blur="handleBlur" @blur="handleBlur"
/> />

View File

@ -1,7 +1,7 @@
<template> <template>
<a-input <a-input
v-model="inputValue" v-model="inputValue"
:max-length="250" :max-length="255"
:type="isShowPassword ? 'password' : 'text'" :type="isShowPassword ? 'password' : 'text'"
:placeholder="placeholder" :placeholder="placeholder"
style="width: 100%" style="width: 100%"

View File

@ -41,7 +41,7 @@
<a-textarea <a-textarea
v-if="props.fieldConfig?.isTextArea" v-if="props.fieldConfig?.isTextArea"
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength" :max-length="props.fieldConfig?.maxLength || 1000"
:auto-size="{ maxRows: 4 }" :auto-size="{ maxRows: 4 }"
:placeholder="props.fieldConfig?.placeholder" :placeholder="props.fieldConfig?.placeholder"
class="w-[245px]" class="w-[245px]"
@ -52,7 +52,7 @@
<a-input <a-input
v-else v-else
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="50" :max-length="255"
:placeholder="props.fieldConfig?.placeholder" :placeholder="props.fieldConfig?.placeholder"
class="w-[245px]" class="w-[245px]"
@press-enter="handleConfirm" @press-enter="handleConfirm"

View File

@ -132,6 +132,7 @@
" "
ref="currentInputRef" ref="currentInputRef"
v-model="record[item.dataIndex as string]" v-model="record[item.dataIndex as string]"
:max-length="255"
@blur="handleEditInputBlur(record, item.dataIndex as string, true)" @blur="handleEditInputBlur(record, item.dataIndex as string, true)"
@keydown.enter="handleEditInputBlur(record, item.dataIndex as string, false)" @keydown.enter="handleEditInputBlur(record, item.dataIndex as string, false)"
/> />

View File

@ -1,25 +1,31 @@
<template> <template>
<a-input-tag <div class="w-full">
v-model:model-value="innerModelValue" <a-input-tag
v-model:input-value="innerInputValue" v-model:model-value="innerModelValue"
:placeholder="t(props.placeholder || 'ms.tagsInput.tagsInputPlaceholder')" v-model:input-value="innerInputValue"
:allow-clear="props.allowClear" :error="isError"
:retain-input-value="props.retainInputValue" :placeholder="t(props.placeholder || 'ms.tagsInput.tagsInputPlaceholder')"
:unique-value="props.uniqueValue" :allow-clear="props.allowClear"
:max-tag-count="props.maxTagCount" :retain-input-value="props.retainInputValue"
@press-enter="tagInputEnter" :unique-value="props.uniqueValue"
@blur="tagInputBlur" :max-tag-count="props.maxTagCount"
> @press-enter="tagInputEnter"
<template v-if="props.customPrefix" #prefix> @blur="tagInputBlur"
<slot name="prefix"></slot> >
</template> <template v-if="props.customPrefix" #prefix>
<template v-if="props.customTag" #tag="{ data }"> <slot name="prefix"></slot>
<slot name="tag" :data="data"></slot> </template>
</template> <template v-if="props.customTag" #tag="{ data }">
<template v-if="props.customSuffix" #suffix> <slot name="tag" :data="data"></slot>
<slot name="suffix"></slot> </template>
</template> <template v-if="props.customSuffix" #suffix>
</a-input-tag> <slot name="suffix"></slot>
</template>
</a-input-tag>
<span v-if="isError" class="ml-[1px] text-[12px] text-[rgb(var(--danger-6))]">{{
t('common.tagInputMaxLength', { number: props.maxLength })
}}</span>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -41,11 +47,13 @@
customTag?: boolean; customTag?: boolean;
customSuffix?: boolean; customSuffix?: boolean;
maxTagCount?: number; maxTagCount?: number;
maxLength?: number;
}>(), }>(),
{ {
retainInputValue: true, retainInputValue: true,
uniqueValue: true, uniqueValue: true,
allowClear: true, allowClear: true,
maxLength: 64,
} }
); );
const emit = defineEmits(['update:modelValue', 'update:inputValue', 'change']); const emit = defineEmits(['update:modelValue', 'update:inputValue', 'change']);
@ -56,6 +64,11 @@
const innerInputValue = ref(props.inputValue); const innerInputValue = ref(props.inputValue);
const tagsLength = ref(0); // tagstag const tagsLength = ref(0); // tagstag
const isError = computed(
() =>
(innerInputValue.value || '').length > props.maxLength ||
innerModelValue.value.some((item) => item.length > props.maxLength)
);
watch( watch(
() => props.modelValue, () => props.modelValue,
(val) => { (val) => {
@ -105,7 +118,12 @@
} }
function tagInputBlur() { function tagInputBlur() {
if (innerInputValue.value && innerInputValue.value.trim() !== '' && validateUniqueValue()) { if (
innerInputValue.value &&
innerInputValue.value.trim() !== '' &&
validateUniqueValue() &&
(innerInputValue.value || '').trim().length <= props.maxLength
) {
innerModelValue.value.push(innerInputValue.value.trim()); innerModelValue.value.push(innerInputValue.value.trim());
innerInputValue.value = ''; innerInputValue.value = '';
tagsLength.value += 1; tagsLength.value += 1;
@ -113,9 +131,12 @@
} }
function tagInputEnter() { function tagInputEnter() {
if (validateUniqueValue()) { if (validateUniqueValue() && (innerInputValue.value || '').trim().length <= props.maxLength) {
innerInputValue.value = ''; innerInputValue.value = '';
tagsLength.value += 1; tagsLength.value += 1;
} else {
innerModelValue.value = innerModelValue.value.filter((item: any) => item.length <= props.maxLength);
innerInputValue.value = '';
} }
} }
</script> </script>

View File

@ -63,6 +63,7 @@ export default {
'common.setting': 'Setting', 'common.setting': 'Setting',
'common.resetDefault': 'Reset default', 'common.resetDefault': 'Reset default',
'common.tagPlaceholder': 'Add tag and press Enter to end', 'common.tagPlaceholder': 'Add tag and press Enter to end',
'common.tagInputMaxLength': 'The tag must not exceed {number} characters',
'common.batchModify': 'Batch Edit', 'common.batchModify': 'Batch Edit',
'common.batchAdd': 'Batch Add', 'common.batchAdd': 'Batch Add',
'common.pleaseSelect': 'please choose', 'common.pleaseSelect': 'please choose',

View File

@ -65,6 +65,7 @@ export default {
'common.setting': '设置', 'common.setting': '设置',
'common.resetDefault': '恢复默认', 'common.resetDefault': '恢复默认',
'common.tagPlaceholder': '添加标签回车结束', 'common.tagPlaceholder': '添加标签回车结束',
'common.tagInputMaxLength': '标签不得超过 {number} 个字符',
'common.batchModify': '批量修改', 'common.batchModify': '批量修改',
'common.batchAdd': '批量添加', 'common.batchAdd': '批量添加',
'common.pleaseInput': '请输入', 'common.pleaseInput': '请输入',

View File

@ -14,13 +14,24 @@ const ProjectManagement: AppRouteRecordRaw = {
order: 7, order: 7,
hideChildrenInMenu: true, hideChildrenInMenu: true,
roles: [ roles: [
'PROJECT_USER:READ', 'SYSTEM_PARAMETER_SETTING_BASE:READ',
'PROJECT_TEMPLATE:READ', 'PROJECT_TEMPLATE:READ',
'PROJECT_FILE_MANAGEMENT:READ', 'PROJECT_FILE_MANAGEMENT:READ',
'PROJECT_MESSAGE:READ', 'PROJECT_MESSAGE:READ',
'PROJECT_CUSTOM_FUNCTION:READ', 'PROJECT_CUSTOM_FUNCTION:READ',
'PROJECT_LOG:READ', 'PROJECT_LOG:READ',
'PROJECT_ENVIRONMENT:READ', 'PROJECT_ENVIRONMENT:READ',
// 菜单管理
'PROJECT_APPLICATION_WORKSTATION:READ',
'PROJECT_APPLICATION_TEST_PLAN:READ',
'PROJECT_APPLICATION_BUG:READ',
'PROJECT_APPLICATION_CASE:READ',
'PROJECT_APPLICATION_API:READ',
'PROJECT_APPLICATION_UI:READ',
'PROJECT_APPLICATION_PERFORMANCE_TEST:READ',
// 菜单管理
'PROJECT_USER:READ',
'PROJECT_GROUP:READ',
], ],
}, },
children: [ children: [
@ -32,7 +43,20 @@ const ProjectManagement: AppRouteRecordRaw = {
redirect: '/project-management/permission/basicInfo', redirect: '/project-management/permission/basicInfo',
meta: { meta: {
locale: 'menu.projectManagement.projectPermission', locale: 'menu.projectManagement.projectPermission',
roles: ['PROJECT_USER:READ'], roles: [
'SYSTEM_PARAMETER_SETTING_BASE:READ',
// 菜单管理
'PROJECT_APPLICATION_WORKSTATION:READ',
'PROJECT_APPLICATION_TEST_PLAN:READ',
'PROJECT_APPLICATION_BUG:READ',
'PROJECT_APPLICATION_CASE:READ',
'PROJECT_APPLICATION_API:READ',
'PROJECT_APPLICATION_UI:READ',
'PROJECT_APPLICATION_PERFORMANCE_TEST:READ',
// 菜单管理
'PROJECT_USER:READ',
'PROJECT_GROUP:READ',
],
isTopMenu: true, isTopMenu: true,
}, },
children: [ children: [
@ -43,7 +67,7 @@ const ProjectManagement: AppRouteRecordRaw = {
component: () => import('@/views/project-management/projectAndPermission/basicInfos/index.vue'), component: () => import('@/views/project-management/projectAndPermission/basicInfos/index.vue'),
meta: { meta: {
locale: 'project.permission.basicInfo', locale: 'project.permission.basicInfo',
roles: ['SYSTEM_PARAMETER_SETTING_BASE:READ'], roles: ['*'],
}, },
}, },
// 菜单管理 // 菜单管理
@ -81,7 +105,7 @@ const ProjectManagement: AppRouteRecordRaw = {
component: () => import('@/views/project-management/projectAndPermission/member/index.vue'), component: () => import('@/views/project-management/projectAndPermission/member/index.vue'),
meta: { meta: {
locale: 'project.permission.member', locale: 'project.permission.member',
roles: ['*'], roles: ['PROJECT_USER:READ'],
}, },
}, },
// 用户组 // 用户组

View File

@ -16,7 +16,6 @@
v-model:model-value="condition.name" v-model:model-value="condition.name"
:placeholder="t('apiTestDebug.preconditionScriptNamePlaceholder')" :placeholder="t('apiTestDebug.preconditionScriptNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
size="small" size="small"
@press-enter="isShowEditScriptNameInput = false" @press-enter="isShowEditScriptNameInput = false"
@blur="isShowEditScriptNameInput = false" @blur="isShowEditScriptNameInput = false"
@ -136,7 +135,6 @@
v-model:model-value="condition.desc" v-model:model-value="condition.desc"
:placeholder="t('apiTestDebug.commonPlaceholder')" :placeholder="t('apiTestDebug.commonPlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
/> />
</div> </div>
<div class="mb-[16px] flex w-full items-center bg-[var(--color-text-n9)] p-[12px]"> <div class="mb-[16px] flex w-full items-center bg-[var(--color-text-n9)] p-[12px]">
@ -184,6 +182,7 @@
<div class="mb-[8px] text-[var(--color-text-1)]">{{ t('apiTestDebug.storageByCol') }}</div> <div class="mb-[8px] text-[var(--color-text-1)]">{{ t('apiTestDebug.storageByCol') }}</div>
<a-input <a-input
v-model:model-value="condition.sqlSource.storageByCol" v-model:model-value="condition.sqlSource.storageByCol"
:max-length="255"
:placeholder="t('apiTestDebug.storageByColPlaceholder', { a: '{id_1}', b: '{username_1}' })" :placeholder="t('apiTestDebug.storageByColPlaceholder', { a: '{id_1}', b: '{username_1}' })"
/> />
</div> </div>
@ -191,6 +190,7 @@
<div class="mb-[8px] text-[var(--color-text-1)]">{{ t('apiTestDebug.storageByResult') }}</div> <div class="mb-[8px] text-[var(--color-text-1)]">{{ t('apiTestDebug.storageByResult') }}</div>
<a-input <a-input
v-model:model-value="condition.sqlSource.storageByResult" v-model:model-value="condition.sqlSource.storageByResult"
:max-length="255"
:placeholder="t('apiTestDebug.storageByResultPlaceholder', { a: '${result}' })" :placeholder="t('apiTestDebug.storageByResultPlaceholder', { a: '${result}' })"
/> />
</div> </div>
@ -243,6 +243,7 @@
<a-input <a-input
v-model:model-value="record.expression" v-model:model-value="record.expression"
class="ms-params-input" class="ms-params-input"
:max-length="255"
@input="handleExpressionChange" @input="handleExpressionChange"
@change="handleExpressionChange" @change="handleExpressionChange"
> >

View File

@ -35,6 +35,7 @@
<div class="form-input-wrapper"> <div class="form-input-wrapper">
<a-input <a-input
v-model:model-value="expressionForm.expression" v-model:model-value="expressionForm.expression"
:max-length="255"
:placeholder="t('apiTestDebug.regularExpressionPlaceholder', { ex: '/<title>(.*?)</title>/' })" :placeholder="t('apiTestDebug.regularExpressionPlaceholder', { ex: '/<title>(.*?)</title>/' })"
class="flex-1" class="flex-1"
/> />
@ -53,6 +54,7 @@
<div class="form-input-wrapper"> <div class="form-input-wrapper">
<a-input <a-input
v-model:model-value="expressionForm.expression" v-model:model-value="expressionForm.expression"
:max-length="255"
:placeholder="t('apiTestDebug.JSONPathPlaceholder')" :placeholder="t('apiTestDebug.JSONPathPlaceholder')"
class="flex-1" class="flex-1"
/> />
@ -71,6 +73,7 @@
<div class="form-input-wrapper"> <div class="form-input-wrapper">
<a-input <a-input
v-model:model-value="expressionForm.expression" v-model:model-value="expressionForm.expression"
:max-length="255"
:placeholder="t('apiTestDebug.XPathPlaceholder')" :placeholder="t('apiTestDebug.XPathPlaceholder')"
class="flex-1" class="flex-1"
/> />

View File

@ -11,6 +11,7 @@
<a-input <a-input
ref="inputRef" ref="inputRef"
v-model:model-value="innerValue" v-model:model-value="innerValue"
:max-length="255"
class="param-input" class="param-input"
@input="(val) => emit('input', val)" @input="(val) => emit('input', val)"
@change="(val) => emit('change', val)" @change="(val) => emit('change', val)"

View File

@ -42,6 +42,7 @@
v-model:model-value="record[columnConfig.dataIndex as string]" v-model:model-value="record[columnConfig.dataIndex as string]"
:placeholder="t('apiTestDebug.paramNamePlaceholder')" :placeholder="t('apiTestDebug.paramNamePlaceholder')"
class="param-input" class="param-input"
:max-length="255"
@input="(val) => addTableLine(val, 'name')" @input="(val) => addTableLine(val, 'name')"
/> />
</a-popover> </a-popover>
@ -107,6 +108,7 @@
v-model:model-value="record.value" v-model:model-value="record.value"
class="param-input" class="param-input"
:placeholder="t('apiTestDebug.commonPlaceholder')" :placeholder="t('apiTestDebug.commonPlaceholder')"
:max-length="255"
@input="(val) => addTableLine(val, 'value')" @input="(val) => addTableLine(val, 'value')"
/> />
</a-popover> </a-popover>
@ -274,8 +276,7 @@
<a-textarea <a-textarea
v-model:model-value="quickInputDescValue" v-model:model-value="quickInputDescValue"
:placeholder="t('apiTestDebug.descPlaceholder')" :placeholder="t('apiTestDebug.descPlaceholder')"
:max-length="255" :max-length="1000"
show-word-limit
></a-textarea> ></a-textarea>
</a-modal> </a-modal>
</template> </template>

View File

@ -13,6 +13,7 @@
v-model:model-value="authForm.account" v-model:model-value="authForm.account"
:placeholder="t('apiTestDebug.commonPlaceholder')" :placeholder="t('apiTestDebug.commonPlaceholder')"
class="w-[450px]" class="w-[450px]"
:max-length="255"
/> />
</a-form-item> </a-form-item>
<a-form-item :label="t('apiTestDebug.password')"> <a-form-item :label="t('apiTestDebug.password')">

View File

@ -24,12 +24,7 @@
/> />
<div v-else-if="format === RequestBodyFormat.BINARY"> <div v-else-if="format === RequestBodyFormat.BINARY">
<div class="mb-[16px] flex justify-between gap-[8px] bg-[var(--color-text-n9)] p-[12px]"> <div class="mb-[16px] flex justify-between gap-[8px] bg-[var(--color-text-n9)] p-[12px]">
<a-input <a-input v-model:model-value="innerParams.binaryDesc" :placeholder="t('common.desc')" :max-length="255" />
v-model:model-value="innerParams.binaryDesc"
:placeholder="t('common.desc')"
:max-length="255"
show-word-limit
/>
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<a-switch v-model:model-value="innerParams.binarySend" class="mr-[8px]" size="small" type="line"></a-switch> <a-switch v-model:model-value="innerParams.binarySend" class="mr-[8px]" size="small" type="line"></a-switch>

View File

@ -36,6 +36,7 @@
</a-select> </a-select>
<a-input <a-input
v-model:model-value="activeDebug.url" v-model:model-value="activeDebug.url"
:max-length="255"
:placeholder="t('apiTestDebug.urlPlaceholder')" :placeholder="t('apiTestDebug.urlPlaceholder')"
@change="handleActiveDebugChange" @change="handleActiveDebugChange"
/> />

View File

@ -37,6 +37,7 @@
<a-form-item :label="t('apiTestDebug.certificateAlias')"> <a-form-item :label="t('apiTestDebug.certificateAlias')">
<a-input <a-input
v-model:model-value="settingForm.certificateAlias" v-model:model-value="settingForm.certificateAlias"
:max-length="255"
:placeholder="t('apiTestDebug.commonPlaceholder')" :placeholder="t('apiTestDebug.commonPlaceholder')"
class="w-[450px]" class="w-[450px]"
/> />

View File

@ -25,7 +25,7 @@
<a-textarea <a-textarea
v-if="props.fieldConfig?.isTextArea" v-if="props.fieldConfig?.isTextArea"
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength" :max-length="props.fieldConfig?.maxLength || 1000"
:auto-size="{ maxRows: 4 }" :auto-size="{ maxRows: 4 }"
:placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')" :placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')"
class="w-[245px]" class="w-[245px]"
@ -35,7 +35,7 @@
<a-input <a-input
v-else v-else
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength || 50" :max-length="props.fieldConfig?.maxLength || 255"
:placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')" :placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')"
class="w-[245px]" class="w-[245px]"
@press-enter="beforeConfirm(undefined)" @press-enter="beforeConfirm(undefined)"

View File

@ -68,7 +68,7 @@
:rules="[{ required: true }]" :rules="[{ required: true }]"
> >
<template v-if="valueMode === 'tag'"> <template v-if="valueMode === 'tag'">
<a-input-tag v-model:model-value="form.value" :disabled="!form.attribute" /> <MsTagsInput v-model:modelValue="form.value" :disabled="!form.attribute"></MsTagsInput>
</template> </template>
<template v-else-if="valueMode === 'user_selector'"> <template v-else-if="valueMode === 'user_selector'">
<MsUserSelector <MsUserSelector
@ -124,6 +124,7 @@
import { type FormInstance, Message, type ValidatedError } from '@arco-design/web-vue'; import { type FormInstance, Message, type ValidatedError } from '@arco-design/web-vue';
import { BatchActionQueryParams } from '@/components/pure/ms-table/type'; import { BatchActionQueryParams } from '@/components/pure/ms-table/type';
import MsTagsInput from '@/components/pure/ms-tags-input/index.vue';
import { MsUserSelector } from '@/components/business/ms-user-selector'; import { MsUserSelector } from '@/components/business/ms-user-selector';
import { UserRequestTypeEnum } from '@/components/business/ms-user-selector/utils'; import { UserRequestTypeEnum } from '@/components/business/ms-user-selector/utils';

View File

@ -127,7 +127,7 @@
<!-- 自定义字段结束 --> <!-- 自定义字段结束 -->
<div class="baseItem"> <div class="baseItem">
<span class="label"> {{ t('bugManagement.detail.tag') }}</span> <span class="label"> {{ t('bugManagement.detail.tag') }}</span>
<a-input-tag v-model:model-value="detailInfo.tag" /> <MsTagsInput v-model:modelValue="detailInfo.tag"></MsTagsInput>
</div> </div>
<div class="baseItem"> <div class="baseItem">
<span class="label"> {{ t('bugManagement.detail.creator') }}</span> <span class="label"> {{ t('bugManagement.detail.creator') }}</span>
@ -165,6 +165,7 @@
import MsIcon from '@/components/pure/ms-icon-font/index.vue'; import MsIcon from '@/components/pure/ms-icon-font/index.vue';
import MsSplitBox from '@/components/pure/ms-split-box/index.vue'; import MsSplitBox from '@/components/pure/ms-split-box/index.vue';
import type { MsPaginationI } from '@/components/pure/ms-table/type'; import type { MsPaginationI } from '@/components/pure/ms-table/type';
import MsTagsInput from '@/components/pure/ms-tags-input/index.vue';
import { CommentInput } from '@/components/business/ms-comment'; import { CommentInput } from '@/components/business/ms-comment';
import { CommentParams } from '@/components/business/ms-comment/types'; import { CommentParams } from '@/components/business/ms-comment/types';
import MsDetailDrawer from '@/components/business/ms-detail-drawer/index.vue'; import MsDetailDrawer from '@/components/business/ms-detail-drawer/index.vue';

View File

@ -29,7 +29,7 @@
:rules="[{ required: true, message: t('bugManagement.edit.nameIsRequired') }]" :rules="[{ required: true, message: t('bugManagement.edit.nameIsRequired') }]"
:placeholder="t('bugManagement.edit.pleaseInputBugName')" :placeholder="t('bugManagement.edit.pleaseInputBugName')"
> >
<a-input v-model="form.title" :max-length="255" show-word-limit /> <a-input v-model="form.title" :max-length="255" />
</a-form-item> </a-form-item>
<a-form-item field="description" :label="t('bugManagement.edit.content')"> <a-form-item field="description" :label="t('bugManagement.edit.content')">
<MsRichText v-model:raw="form.description" /> <MsRichText v-model:raw="form.description" />
@ -100,7 +100,7 @@
:form-rule="formRules" :form-rule="formRules"
/> />
<a-form-item field="tag" :label="t('bugManagement.tag')"> <a-form-item field="tag" :label="t('bugManagement.tag')">
<a-input-tag <MsTagsInput
v-model:model-value="form.tag" v-model:model-value="form.tag"
:placeholder="t('bugManagement.edit.tagPlaceholder')" :placeholder="t('bugManagement.edit.tagPlaceholder')"
allow-clear allow-clear
@ -143,6 +143,7 @@
import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue'; import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue';
import { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types'; import { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types';
import MsRichText from '@/components/pure/ms-rich-text/MsRichText.vue'; import MsRichText from '@/components/pure/ms-rich-text/MsRichText.vue';
import MsTagsInput from '@/components/pure/ms-tags-input/index.vue';
import FileList from '@/components/pure/ms-upload/fileList.vue'; import FileList from '@/components/pure/ms-upload/fileList.vue';
import MsUpload from '@/components/pure/ms-upload/index.vue'; import MsUpload from '@/components/pure/ms-upload/index.vue';
import { MsFileItem } from '@/components/pure/ms-upload/types'; import { MsFileItem } from '@/components/pure/ms-upload/types';

View File

@ -27,6 +27,7 @@
<a-textarea <a-textarea
v-if="record.showExpected" v-if="record.showExpected"
v-model="record.expected" v-model="record.expected"
:max-length="1000"
size="mini" size="mini"
:auto-size="true" :auto-size="true"
class="w-max-[267px]" class="w-max-[267px]"

View File

@ -24,7 +24,7 @@
<div> <div>
<a-input-search <a-input-search
v-model="searchParams.keyword" v-model="searchParams.keyword"
:max-length="250" :max-length="255"
:placeholder="t('project.member.searchMember')" :placeholder="t('project.member.searchMember')"
allow-clear allow-clear
@search="searchHandler" @search="searchHandler"

View File

@ -35,11 +35,7 @@
asterisk-position="end" asterisk-position="end"
:rules="[{ required: true, message: t('caseManagement.featureCase.PleaseInputTags') }]" :rules="[{ required: true, message: t('caseManagement.featureCase.PleaseInputTags') }]"
> >
<a-input-tag <MsTagsInput v-model:modelValue="form.tags" allow-clear></MsTagsInput>
v-model="form.tags"
:placeholder="t('caseManagement.featureCase.pleaseEnterInputTags')"
allow-clear
/>
</a-form-item> </a-form-item>
<MsFormCreate ref="formCreateRef" v-model:api="fApi" v-model:form-item="formItem" :form-rule="formRules" /> <MsFormCreate ref="formCreateRef" v-model:api="fApi" v-model:form-item="formItem" :form-rule="formRules" />
@ -56,6 +52,7 @@
import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue'; import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue';
import type { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types'; import type { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types';
import type { BatchActionQueryParams } from '@/components/pure/ms-table/type'; import type { BatchActionQueryParams } from '@/components/pure/ms-table/type';
import MsTagsInput from '@/components/pure/ms-tags-input/index.vue';
import { batchEditAttrs, getCaseDefaultFields } from '@/api/modules/case-management/featureCase'; import { batchEditAttrs, getCaseDefaultFields } from '@/api/modules/case-management/featureCase';
import { useI18n } from '@/hooks/useI18n'; import { useI18n } from '@/hooks/useI18n';

View File

@ -13,7 +13,6 @@
v-model="form.name" v-model="form.name"
:max-length="255" :max-length="255"
:placeholder="t('system.orgTemplate.caseNamePlaceholder')" :placeholder="t('system.orgTemplate.caseNamePlaceholder')"
show-word-limit
allow-clear allow-clear
></a-input> ></a-input>
</a-form-item> </a-form-item>
@ -208,7 +207,7 @@
:form-rule="formRules" :form-rule="formRules"
/> />
<a-form-item field="tags" :label="t('system.orgTemplate.tags')"> <a-form-item field="tags" :label="t('system.orgTemplate.tags')">
<a-input-tag v-model="form.tags" :placeholder="t('formCreate.PleaseEnter')" allow-clear /> <MsTagsInput v-model:model-value="form.tags" />
</a-form-item> </a-form-item>
</a-form> </a-form>
</div> </div>
@ -250,6 +249,7 @@
import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue'; import MsFormCreate from '@/components/pure/ms-form-create/ms-form-create.vue';
import type { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types'; import type { FormItem, FormRuleItem } from '@/components/pure/ms-form-create/types';
import MsRichText from '@/components/pure/ms-rich-text/MsRichText.vue'; import MsRichText from '@/components/pure/ms-rich-text/MsRichText.vue';
import MsTagsInput from '@/components/pure/ms-tags-input/index.vue';
import MsFileList from '@/components/pure/ms-upload/fileList.vue'; import MsFileList from '@/components/pure/ms-upload/fileList.vue';
import MsUpload from '@/components/pure/ms-upload/index.vue'; import MsUpload from '@/components/pure/ms-upload/index.vue';
import type { MsFileItem } from '@/components/pure/ms-upload/types'; import type { MsFileItem } from '@/components/pure/ms-upload/types';

View File

@ -20,7 +20,7 @@
:rules="[{ required: true, message: t('bugManagement.edit.nameIsRequired') }]" :rules="[{ required: true, message: t('bugManagement.edit.nameIsRequired') }]"
:placeholder="t('bugManagement.edit.pleaseInputBugName')" :placeholder="t('bugManagement.edit.pleaseInputBugName')"
> >
<a-input v-model="form.title" :max-length="255" show-word-limit /> <a-input v-model="form.title" :max-length="255" />
</a-form-item> </a-form-item>
<a-form-item :label="t('bugManagement.edit.content')"> <a-form-item :label="t('bugManagement.edit.content')">
<MsRichText v-model:raw="form.description" /> <MsRichText v-model:raw="form.description" />

View File

@ -28,7 +28,6 @@
<a-input <a-input
v-model="modelForm.demandName" v-model="modelForm.demandName"
:max-length="255" :max-length="255"
show-word-limit
:placeholder="t('caseManagement.featureCase.pleaseEnterTitle')" :placeholder="t('caseManagement.featureCase.pleaseEnterTitle')"
/> />
</a-form-item> </a-form-item>

View File

@ -46,7 +46,7 @@
> >
<a-input-search <a-input-search
v-model="platformKeyword" v-model="platformKeyword"
:max-length="250" :max-length="255"
:placeholder="t('project.member.searchMember')" :placeholder="t('project.member.searchMember')"
allow-clear allow-clear
class="mx-[8px] w-[240px]" class="mx-[8px] w-[240px]"

View File

@ -14,6 +14,7 @@
:placeholder="t('caseManagement.featureCase.searchTip')" :placeholder="t('caseManagement.featureCase.searchTip')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
/> />
<div class="folder"> <div class="folder">
<div :class="getFolderClass('all')" @click="setActiveFolder('all')"> <div :class="getFolderClass('all')" @click="setActiveFolder('all')">

View File

@ -5,6 +5,7 @@
:placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')" :placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
/> />
<div class="folder"> <div class="folder">
<div :class="getFolderClass('all')" @click="setActiveFolder('all')"> <div :class="getFolderClass('all')" @click="setActiveFolder('all')">

View File

@ -24,6 +24,7 @@
<a-input <a-input
v-model:model-value="confirmReviewName" v-model:model-value="confirmReviewName"
:placeholder="t('caseManagement.caseReview.deleteReviewPlaceholder')" :placeholder="t('caseManagement.caseReview.deleteReviewPlaceholder')"
:max-length="255"
/> />
<template #footer> <template #footer>
<div class="flex items-center justify-end"> <div class="flex items-center justify-end">

View File

@ -5,6 +5,7 @@
:placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')" :placeholder="t('caseManagement.caseReview.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
/> />
<div v-if="!props.isModal" class="folder"> <div v-if="!props.isModal" class="folder">
<div :class="getFolderClass('all')" @click="setActiveFolder('all')"> <div :class="getFolderClass('all')" @click="setActiveFolder('all')">

View File

@ -25,7 +25,7 @@
<a-textarea <a-textarea
v-if="props.fieldConfig?.isTextArea" v-if="props.fieldConfig?.isTextArea"
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength" :max-length="props.fieldConfig?.maxLength || 1000"
:auto-size="{ maxRows: 4 }" :auto-size="{ maxRows: 4 }"
:placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')" :placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')"
class="w-[245px]" class="w-[245px]"
@ -35,7 +35,7 @@
<a-input <a-input
v-else v-else
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength || 50" :max-length="props.fieldConfig?.maxLength || 255"
:placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')" :placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')"
class="w-[245px]" class="w-[245px]"
@press-enter="beforeConfirm(undefined)" @press-enter="beforeConfirm(undefined)"

View File

@ -15,7 +15,6 @@
v-model:modelValue="reviewForm.name" v-model:modelValue="reviewForm.name"
:placeholder="t('caseManagement.caseReview.reviewNamePlaceholder')" :placeholder="t('caseManagement.caseReview.reviewNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
/> />
</a-form-item> </a-form-item>
<a-form-item field="desc" :label="t('caseManagement.caseReview.desc')"> <a-form-item field="desc" :label="t('caseManagement.caseReview.desc')">
@ -23,7 +22,6 @@
v-model:modelValue="reviewForm.desc" v-model:modelValue="reviewForm.desc"
:placeholder="t('caseManagement.caseReview.descPlaceholder')" :placeholder="t('caseManagement.caseReview.descPlaceholder')"
:max-length="1000" :max-length="1000"
show-word-limit
/> />
</a-form-item> </a-form-item>
<a-form-item field="folderId" :label="t('caseManagement.caseReview.belongModule')"> <a-form-item field="folderId" :label="t('caseManagement.caseReview.belongModule')">

View File

@ -26,7 +26,7 @@
:validate-trigger="['change', 'blur']" :validate-trigger="['change', 'blur']"
hide-label hide-label
> >
<a-input v-model="userInfo.username" :placeholder="t('login.form.userName.placeholder')" /> <a-input v-model="userInfo.username" :max-length="255" :placeholder="t('login.form.userName.placeholder')" />
</a-form-item> </a-form-item>
<a-form-item <a-form-item
class="login-form-item" class="login-form-item"

View File

@ -1,3 +1,377 @@
<template> Performance Test is waiting for development </template> <template>
<div> <MsFormCreate :rule="rule" :option="options" /> </div
></template>
<script setup></script> <script setup>
import MsFormCreate from '@/components/pure/ms-form-create/formCreate.vue';
const rule = ref([
{
type: 'input',
field: 'name',
title: '名称',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
{
type: 'input',
field: 'comments',
title: '描述',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
{
type: 'el-divider',
props: {
contentPosition: 'left',
},
wrap: {
show: false,
},
native: false,
children: ['目标Server配置'],
_fc_drag_tag: 'el-divider',
hidden: false,
display: true,
},
{
type: 'FcRow',
children: [
{
type: 'col',
props: {
span: 12,
},
children: [
{
type: 'input',
field: 'serverIp',
title: 'IP',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
{
type: 'input',
field: 'connTimeout',
title: '连接超时时间',
info: '',
props: {
type: 'number',
},
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 12,
},
children: [
{
type: 'input',
field: 'port',
title: 'Port',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
{
type: 'input',
field: 'resTimeout',
title: '响应超时时间',
info: '',
props: {
type: 'number',
},
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'row',
hidden: false,
display: true,
},
{
type: 'FcRow',
children: [
{
type: 'col',
props: {
span: 5,
},
children: [
{
type: 'input',
field: 'soLinger',
title: 'SO LINGER',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 5,
},
children: [
{
type: 'input',
field: 'eolByte',
title: 'EOL',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 5,
},
children: [
{
type: 'checkbox',
field: 'closeConnection',
title: '关闭连接',
info: '',
effect: {
fetch: '',
},
options: [
{
label: '',
value: '',
},
],
_fc_drag_tag: 'checkbox',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 5,
},
children: [
{
type: 'checkbox',
field: 'reUseConnection',
title: 'Re-use',
info: '',
effect: {
fetch: '',
},
options: [
{
label: '',
value: '',
},
],
_fc_drag_tag: 'checkbox',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 4,
},
children: [
{
type: 'checkbox',
field: 'noDelay',
title: '无延迟',
info: '',
effect: {
fetch: '',
},
options: [
{
label: '',
value: '',
},
],
_fc_drag_tag: 'checkbox',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'row',
hidden: false,
display: true,
},
{
type: 'input',
field: 'request',
title: '发送内容',
info: '',
props: {
type: 'textarea',
},
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
{
type: 'el-divider',
props: {
contentPosition: 'left',
},
wrap: {
show: false,
},
native: false,
children: ['客户端或登录配置'],
_fc_drag_tag: 'el-divider',
hidden: false,
display: true,
},
{
type: 'FcRow',
children: [
{
type: 'col',
props: {
span: 8,
},
children: [
{
type: 'select',
field: 'classname',
title: '客户端类名',
info: '',
effect: {
fetch: '',
},
options: [
{
value: 'TCPClientImpl',
label: 'TCPClientImpl',
},
{
value: 'BinaryTCPClientImpl',
label: 'BinaryTCPClientImpl',
},
{
value: 'LengthPrefixedBinaryTCPClientImpl',
label: 'LengthPrefixedBinaryTCPClientImpl',
},
],
_fc_drag_tag: 'select',
hidden: false,
display: true,
$required: '',
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 8,
},
children: [
{
type: 'input',
field: 'username',
title: '用户名',
info: '',
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
{
type: 'col',
props: {
span: 8,
},
children: [
{
type: 'input',
field: 'password',
title: '密码',
info: '',
props: {
type: 'password',
},
_fc_drag_tag: 'input',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'col',
hidden: false,
display: true,
},
],
_fc_drag_tag: 'row',
hidden: false,
display: true,
},
]);
const options = {
form: {
labelPosition: 'right',
size: 'small',
labelWidth: '00px',
hideRequiredAsterisk: false,
showMessage: true,
inlineMessage: false,
},
submitBtn: true,
resetBtn: false,
};
</script>

View File

@ -12,7 +12,6 @@
> >
<a-input <a-input
v-model="form.name" v-model="form.name"
show-word-limit
:max-length="255" :max-length="255"
class="w-[732px]" class="w-[732px]"
:placeholder="t('project.environmental.group.envGroupPlaceholder')" :placeholder="t('project.environmental.group.envGroupPlaceholder')"
@ -24,7 +23,13 @@
field="description" field="description"
:label="t('project.environmental.group.desc')" :label="t('project.environmental.group.desc')"
> >
<a-textarea v-model="form.description" auto-size class="w-[732px]" :placeholder="t('common.pleaseInput')" /> <a-textarea
v-model="form.description"
:max-length="1000"
auto-size
class="w-[732px]"
:placeholder="t('common.pleaseInput')"
/>
</a-form-item> </a-form-item>
</a-form> </a-form>
<paramsTable <paramsTable

View File

@ -11,7 +11,6 @@
> >
<a-input <a-input
v-model="form.name" v-model="form.name"
show-word-limit
:max-length="255" :max-length="255"
class="w-[732px]" class="w-[732px]"
:placeholder="t('project.environmental.envNamePlaceholder')" :placeholder="t('project.environmental.envNamePlaceholder')"

View File

@ -27,6 +27,7 @@
class="w-[243px]" class="w-[243px]"
:placeholder="t('system.userGroup.pleaseInputUserGroupName')" :placeholder="t('system.userGroup.pleaseInputUserGroupName')"
allow-clear allow-clear
:max-length="255"
@press-enter="handleBeforeOk" @press-enter="handleBeforeOk"
@keyup.esc="handleCancel" @keyup.esc="handleCancel"
/> />

View File

@ -37,6 +37,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { defineModel } from 'vue';
import { type FileItem, Message } from '@arco-design/web-vue'; import { type FileItem, Message } from '@arco-design/web-vue';
import MsUpload from '@/components/pure/ms-upload/index.vue'; import MsUpload from '@/components/pure/ms-upload/index.vue';

View File

@ -43,6 +43,7 @@
</template> </template>
<script lang="ts" async setup> <script lang="ts" async setup>
import { defineModel } from 'vue';
import { TableData } from '@arco-design/web-vue'; import { TableData } from '@arco-design/web-vue';
import MsButton from '@/components/pure/ms-button/index.vue'; import MsButton from '@/components/pure/ms-button/index.vue';

View File

@ -14,6 +14,7 @@
<a-input <a-input
v-model="form.hostname" v-model="form.hostname"
class="w-[100%]" class="w-[100%]"
:max-length="255"
:placeholder="t('project.environmental.http.hostNamePlaceholder')" :placeholder="t('project.environmental.http.hostNamePlaceholder')"
> >
<template #prefix> <template #prefix>
@ -72,6 +73,7 @@
<a-input <a-input
v-model="form.hostname" v-model="form.hostname"
class="w-[100%]" class="w-[100%]"
:max-length="255"
:placeholder="t('project.environmental.http.pathPlaceholder')" :placeholder="t('project.environmental.http.pathPlaceholder')"
> >
<template #prefix> <template #prefix>

View File

@ -46,13 +46,7 @@
asterisk-position="end" asterisk-position="end"
:rules="[{ required: true, message: t('project.environmental.database.usernameIsRequire') }]" :rules="[{ required: true, message: t('project.environmental.database.usernameIsRequire') }]"
> >
<a-input <a-input v-model="form.username" :max-length="255" allow-clear :placeholder="t('common.pleaseInput')" />
v-model="form.username"
:max-length="255"
show-word-limit
allow-clear
:placeholder="t('common.pleaseInput')"
/>
</a-form-item> </a-form-item>
<a-form-item field="password" :label="t('project.environmental.database.password')"> <a-form-item field="password" :label="t('project.environmental.database.password')">
<a-input-password <a-input-password
@ -102,7 +96,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed, ref } from 'vue'; import { computed, defineModel, ref } from 'vue';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import { driverOptionFun, validateDatabaseEnv } from '@/api/modules/project-management/envManagement'; import { driverOptionFun, validateDatabaseEnv } from '@/api/modules/project-management/envManagement';

View File

@ -4,6 +4,7 @@
:placeholder="t('project.fileManagement.folderSearchPlaceholder')" :placeholder="t('project.fileManagement.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[16px]" class="mb-[16px]"
:max-length="255"
></a-input> ></a-input>
<a-spin class="min-h-[400px] w-full" :loading="loading"> <a-spin class="min-h-[400px] w-full" :loading="loading">
<MsTree <MsTree

View File

@ -25,7 +25,7 @@
<a-textarea <a-textarea
v-if="props.fieldConfig?.isTextArea" v-if="props.fieldConfig?.isTextArea"
v-model:model-value="form.field" v-model:model-value="form.field"
:max-length="props.fieldConfig?.maxLength" :max-length="props.fieldConfig?.maxLength || 1000"
:auto-size="{ maxRows: 4 }" :auto-size="{ maxRows: 4 }"
:placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')" :placeholder="props.fieldConfig?.placeholder || t('project.fileManagement.namePlaceholder')"
class="w-[245px]" class="w-[245px]"

View File

@ -232,7 +232,7 @@
<a-input <a-input
v-model:model-value="storageForm.branch" v-model:model-value="storageForm.branch"
:placeholder="t('project.fileManagement.gitBranchPlaceholder')" :placeholder="t('project.fileManagement.gitBranchPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item <a-form-item
@ -245,7 +245,7 @@
<a-input <a-input
v-model:model-value="storageForm.path" v-model:model-value="storageForm.path"
:placeholder="t('project.fileManagement.gitFilePathPlaceholder')" :placeholder="t('project.fileManagement.gitFilePathPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub :text="t('project.fileManagement.gitFilePathSub')" :show-fill-icon="false" /> <MsFormItemSub :text="t('project.fileManagement.gitFilePathSub')" :show-fill-icon="false" />
</a-form-item> </a-form-item>

View File

@ -4,6 +4,7 @@
:placeholder="t('project.fileManagement.folderSearchPlaceholder')" :placeholder="t('project.fileManagement.folderSearchPlaceholder')"
allow-clear allow-clear
class="mb-[8px]" class="mb-[8px]"
:max-length="255"
></a-input> ></a-input>
<a-spin class="h-full w-full" :loading="loading"> <a-spin class="h-full w-full" :loading="loading">
<MsList <MsList
@ -68,7 +69,6 @@
:max-length="255" :max-length="255"
:placeholder="t('project.fileManagement.storageNamePlaceholder')" :placeholder="t('project.fileManagement.storageNamePlaceholder')"
allow-clear allow-clear
show-word-limit
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item :label="t('project.fileManagement.storagePlatform')" field="platform" asterisk-position="end"> <a-form-item :label="t('project.fileManagement.storagePlatform')" field="platform" asterisk-position="end">
@ -122,7 +122,7 @@
> >
<a-input <a-input
v-model:model-value="activeStorageForm.userName" v-model:model-value="activeStorageForm.userName"
:max-length="250" :max-length="255"
:placeholder="t('project.fileManagement.storageUsernamePlaceholder')" :placeholder="t('project.fileManagement.storageUsernamePlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>

View File

@ -133,9 +133,8 @@
> >
<a-input <a-input
v-model:model-value="robotForm.name" v-model:model-value="robotForm.name"
:max-length="250" :max-length="255"
:placeholder="t('project.messageManagement.namePlaceholder')" :placeholder="t('project.messageManagement.namePlaceholder')"
show-word-limit
allow-clear allow-clear
></a-input> ></a-input>
</a-form-item> </a-form-item>
@ -206,6 +205,7 @@
> >
<a-input <a-input
v-model:model-value="robotForm.appKey" v-model:model-value="robotForm.appKey"
:max-length="255"
:placeholder="t('project.messageManagement.appKeyPlaceholder')" :placeholder="t('project.messageManagement.appKeyPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -219,6 +219,7 @@
> >
<a-input <a-input
v-model:model-value="robotForm.appSecret" v-model:model-value="robotForm.appSecret"
:max-length="255"
:placeholder="t('project.messageManagement.appSecretPlaceholder')" :placeholder="t('project.messageManagement.appSecretPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -239,6 +240,7 @@
> >
<a-input <a-input
v-model:model-value="robotForm.webhook" v-model:model-value="robotForm.webhook"
:max-length="255"
:placeholder=" :placeholder="
t( t(
robotForm.platform === 'CUSTOM' robotForm.platform === 'CUSTOM'

View File

@ -75,8 +75,7 @@
v-model:model-value="subject" v-model:model-value="subject"
:placeholder="t('project.messageManagement.titlePlaceholder')" :placeholder="t('project.messageManagement.titlePlaceholder')"
:auto-size="{ minRows: 3, maxRows: 3 }" :auto-size="{ minRows: 3, maxRows: 3 }"
:max-length="64" :max-length="1000"
show-word-limit
:disabled="saveLoading" :disabled="saveLoading"
@focus="focusTarget = 'subject'" @focus="focusTarget = 'subject'"
/> />
@ -86,9 +85,8 @@
ref="templateInputRef" ref="templateInputRef"
v-model:model-value="template" v-model:model-value="template"
class="h-[calc(100%-156px)]" class="h-[calc(100%-156px)]"
:max-length="500" :max-length="1000"
auto-size auto-size
show-word-limit
:disabled="saveLoading" :disabled="saveLoading"
@focus="focusTarget = 'template'" @focus="focusTarget = 'template'"
@blur="focusTarget = null" @blur="focusTarget = null"

View File

@ -17,10 +17,10 @@
asterisk-position="end" asterisk-position="end"
:rules="[{ required: true, message: t('project.basicInfo.projectNameTip') }]" :rules="[{ required: true, message: t('project.basicInfo.projectNameTip') }]"
> >
<a-input v-model="form.name" allow-clear :max-length="250" /> <a-input v-model="form.name" allow-clear :max-length="255" />
</a-form-item> </a-form-item>
<a-form-item field="description" :label="t('project.basicInfo.Description')" asterisk-position="end"> <a-form-item field="description" :label="t('project.basicInfo.Description')" asterisk-position="end">
<a-textarea v-model="form.description" allow-clear auto-size /> <a-textarea v-model="form.description" :max-length="1000" allow-clear auto-size />
</a-form-item> </a-form-item>
</a-form> </a-form>
</div> </div>

View File

@ -16,7 +16,7 @@
<div> <div>
<a-input-search <a-input-search
v-model="searchParams.keyword" v-model="searchParams.keyword"
:max-length="250" :max-length="255"
:placeholder="t('project.member.searchMember')" :placeholder="t('project.member.searchMember')"
allow-clear allow-clear
@search="searchHandler" @search="searchHandler"

View File

@ -1,7 +1,7 @@
export default { export default {
'project.member.addMember': '添加成员', 'project.member.addMember': '添加成员',
'project.member.updateMember': '更新成员', 'project.member.updateMember': '更新成员',
'project.member.searchMember': '通过名称或邮箱搜索搜索', 'project.member.searchMember': '通过名称或邮箱搜索',
'project.member.remove': '移除', 'project.member.remove': '移除',
'project.member.edit': '编辑', 'project.member.edit': '编辑',
'project.member.add': '添加', 'project.member.add': '添加',

View File

@ -109,6 +109,7 @@
> >
<a-input <a-input
v-model:model-value="quickCreateForm.name" v-model:model-value="quickCreateForm.name"
:max-length="255"
:placeholder="t('project.projectVersion.versionNamePlaceholder')" :placeholder="t('project.projectVersion.versionNamePlaceholder')"
class="w-[262px]" class="w-[262px]"
/> />

View File

@ -30,14 +30,13 @@
v-model:model-value="templateForm.name" v-model:model-value="templateForm.name"
:placeholder="t('system.orgTemplate.templateNamePlaceholder')" :placeholder="t('system.orgTemplate.templateNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
class="max-w-[732px]" class="max-w-[732px]"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end"> <a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end">
<a-textarea <a-textarea
v-model="templateForm.remark" v-model="templateForm.remark"
:max-length="255" :max-length="1000"
:placeholder="t('system.orgTemplate.resDescription')" :placeholder="t('system.orgTemplate.resDescription')"
:auto-size="{ :auto-size="{
maxRows: 1, maxRows: 1,
@ -90,7 +89,6 @@
v-model="defectForm.name" v-model="defectForm.name"
:max-length="255" :max-length="255"
:placeholder="t('system.orgTemplate.defectNamePlaceholder')" :placeholder="t('system.orgTemplate.defectNamePlaceholder')"
show-word-limit
allow-clear allow-clear
></a-input> ></a-input>
<MsFormItemSub :text="t('system.orgTemplate.defectNameTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.orgTemplate.defectNameTip')" :show-fill-icon="false" />

View File

@ -388,7 +388,9 @@
const getLinkList = async () => { const getLinkList = async () => {
if (lastOrganizationId) { if (lastOrganizationId) {
userGroupOptions.value = await getGlobalUserGroup(lastOrganizationId.value); userGroupOptions.value = await getGlobalUserGroup(lastOrganizationId.value);
projectOptions.value = await getProjectList(lastOrganizationId.value); if (hasAnyPermission(['ORGANIZATION_PROJECT:READ'])) {
projectOptions.value = await getProjectList(lastOrganizationId.value);
}
} }
}; };
onBeforeMount(() => { onBeforeMount(() => {

View File

@ -62,6 +62,7 @@
<a-form-item field="description" :label="t('system.organization.description')"> <a-form-item field="description" :label="t('system.organization.description')">
<a-textarea <a-textarea
v-model="form.description" v-model="form.description"
:max-length="1000"
:placeholder="t('system.organization.descriptionPlaceholder')" :placeholder="t('system.organization.descriptionPlaceholder')"
allow-clear allow-clear
:auto-size="{ minRows: 1 }" :auto-size="{ minRows: 1 }"

View File

@ -7,7 +7,7 @@
<a-input-search <a-input-search
v-model="keyword" v-model="keyword"
:placeholder="t('organization.service.searchService')" :placeholder="t('organization.service.searchService')"
:max-length="250" :max-length="255"
allow-clear allow-clear
@search="searchHandler" @search="searchHandler"
@press-enter="searchHandler" @press-enter="searchHandler"

View File

@ -23,15 +23,14 @@
> >
<a-input <a-input
v-model="form.name" v-model="form.name"
show-word-limit :max-length="255"
:max-length="8"
:placeholder="t('system.orgTemplate.stateNameDescription')" :placeholder="t('system.orgTemplate.stateNameDescription')"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end"> <a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end">
<a-textarea <a-textarea
v-model:model-value="form.remark" v-model:model-value="form.remark"
:max-length="250" :max-length="1000"
:placeholder="t('system.config.auth.descPlaceholder')" :placeholder="t('system.config.auth.descPlaceholder')"
allow-clear allow-clear
></a-textarea> ></a-textarea>

View File

@ -24,13 +24,12 @@
v-model:model-value="fieldForm.name" v-model:model-value="fieldForm.name"
:placeholder="t('system.orgTemplate.fieldNamePlaceholder')" :placeholder="t('system.orgTemplate.fieldNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end"> <a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end">
<a-textarea <a-textarea
v-model="fieldForm.remark" v-model="fieldForm.remark"
:max-length="255" :max-length="1000"
:placeholder="t('system.orgTemplate.resDescription')" :placeholder="t('system.orgTemplate.resDescription')"
:auto-size="{ :auto-size="{
maxRows: 1, maxRows: 1,

View File

@ -30,14 +30,13 @@
v-model:model-value="templateForm.name" v-model:model-value="templateForm.name"
:placeholder="t('system.orgTemplate.templateNamePlaceholder')" :placeholder="t('system.orgTemplate.templateNamePlaceholder')"
:max-length="255" :max-length="255"
show-word-limit
class="max-w-[732px]" class="max-w-[732px]"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end"> <a-form-item field="remark" :label="t('system.orgTemplate.description')" asterisk-position="end">
<a-textarea <a-textarea
v-model="templateForm.remark" v-model="templateForm.remark"
:max-length="255" :max-length="1000"
:placeholder="t('system.orgTemplate.resDescription')" :placeholder="t('system.orgTemplate.resDescription')"
:auto-size="{ :auto-size="{
maxRows: 1, maxRows: 1,
@ -90,7 +89,6 @@
v-model="defectForm.name" v-model="defectForm.name"
:max-length="255" :max-length="255"
:placeholder="t('system.orgTemplate.defectNamePlaceholder')" :placeholder="t('system.orgTemplate.defectNamePlaceholder')"
show-word-limit
allow-clear allow-clear
></a-input> ></a-input>
<MsFormItemSub :text="t('system.orgTemplate.defectNameTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.orgTemplate.defectNameTip')" :show-fill-icon="false" />

View File

@ -10,6 +10,7 @@
<template #apiFieldId="{ record }"> <template #apiFieldId="{ record }">
<a-input <a-input
v-model="record.apiFieldId" v-model="record.apiFieldId"
:max-length="255"
class="min-w-[200px] max-w-[300px]" class="min-w-[200px] max-w-[300px]"
:placeholder="t('system.orgTemplate.apiInputPlaceholder')" :placeholder="t('system.orgTemplate.apiInputPlaceholder')"
allow-clear allow-clear

View File

@ -100,6 +100,7 @@
minRows: 3, minRows: 3,
}" }"
:rules="[{ required: true }]" :rules="[{ required: true }]"
:max-length="1000"
></a-textarea> ></a-textarea>
</a-form-item> </a-form-item>
</a-row> </a-row>

View File

@ -71,7 +71,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.name" v-model:model-value="activeAuthForm.name"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.namePlaceholder')" :placeholder="t('system.config.auth.namePlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -79,7 +79,7 @@
<a-form-item :label="t('system.config.auth.desc')" field="description" asterisk-position="end"> <a-form-item :label="t('system.config.auth.desc')" field="description" asterisk-position="end">
<a-textarea <a-textarea
v-model:model-value="activeAuthForm.description" v-model:model-value="activeAuthForm.description"
:max-length="250" :max-length="1000"
:placeholder="t('system.config.auth.descPlaceholder')" :placeholder="t('system.config.auth.descPlaceholder')"
allow-clear allow-clear
></a-textarea> ></a-textarea>
@ -99,7 +99,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.casUrl" v-model:model-value="activeAuthForm.configuration.casUrl"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>' })" :placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>' })"
allow-clear allow-clear
></a-input> ></a-input>
@ -113,7 +113,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.loginUrl" v-model:model-value="activeAuthForm.configuration.loginUrl"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/login' })" :placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/login' })"
allow-clear allow-clear
></a-input> ></a-input>
@ -128,7 +128,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.redirectUrl" v-model:model-value="activeAuthForm.configuration.redirectUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<meteresphere-endpoint>/sso/callback/cas/suthld', url: 'http://<meteresphere-endpoint>/sso/callback/cas/suthld',
@ -146,7 +146,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.validateUrl" v-model:model-value="activeAuthForm.configuration.validateUrl"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/serviceValidate' })" :placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/serviceValidate' })"
allow-clear allow-clear
></a-input> ></a-input>
@ -163,7 +163,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.authUrl" v-model:model-value="activeAuthForm.configuration.authUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/auth', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/auth',
@ -181,7 +181,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.tokenUrl" v-model:model-value="activeAuthForm.configuration.tokenUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/token', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/token',
@ -199,7 +199,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.userInfoUrl" v-model:model-value="activeAuthForm.configuration.userInfoUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/userinfo', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/userinfo',
@ -217,7 +217,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.redirectUrl" v-model:model-value="activeAuthForm.configuration.redirectUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<metersphere-endpoint>/sso/callback or http://<metersphere-endpoint>/sso/callback/authld', url: 'http://<metersphere-endpoint>/sso/callback or http://<metersphere-endpoint>/sso/callback/authld',
@ -235,7 +235,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.clientId" v-model:model-value="activeAuthForm.configuration.clientId"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.clientIdPlaceholder')" :placeholder="t('system.config.auth.clientIdPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -249,7 +249,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.secret" v-model:model-value="activeAuthForm.configuration.secret"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.clientSecretPlaceholder')" :placeholder="t('system.config.auth.clientSecretPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -263,7 +263,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.logoutUrl" v-model:model-value="activeAuthForm.configuration.logoutUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>/auth/realms/<metersphere>/protocol/openid-connect/logout', url: 'http://<keyclock>/auth/realms/<metersphere>/protocol/openid-connect/logout',
@ -275,7 +275,7 @@
<a-form-item :label="t('system.config.auth.loginUrl')" field="configuration.loginUrl" asterisk-position="end"> <a-form-item :label="t('system.config.auth.loginUrl')" field="configuration.loginUrl" asterisk-position="end">
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.loginUrl" v-model:model-value="activeAuthForm.configuration.loginUrl"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/login' })" :placeholder="t('system.config.auth.commonUrlPlaceholder', { url: 'http://<casurl>/login' })"
allow-clear allow-clear
></a-input> ></a-input>
@ -292,7 +292,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.authUrl" v-model:model-value="activeAuthForm.configuration.authUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/auth', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/auth',
@ -310,7 +310,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.tokenUrl" v-model:model-value="activeAuthForm.configuration.tokenUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/token', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/token',
@ -328,7 +328,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.userInfoUrl" v-model:model-value="activeAuthForm.configuration.userInfoUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/userinfo', url: 'http://<keyclock>auth/realms/<metersphere>/protocol/openid-connect/userinfo',
@ -346,7 +346,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.redirectUrl" v-model:model-value="activeAuthForm.configuration.redirectUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<meteresphere-endpoint>/sso/callback/cas/suthld', url: 'http://<meteresphere-endpoint>/sso/callback/cas/suthld',
@ -364,7 +364,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.clientId" v-model:model-value="activeAuthForm.configuration.clientId"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.clientIdPlaceholder')" :placeholder="t('system.config.auth.clientIdPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -378,7 +378,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.secret" v-model:model-value="activeAuthForm.configuration.secret"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.clientSecretPlaceholder')" :placeholder="t('system.config.auth.clientSecretPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -392,7 +392,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.mapping" v-model:model-value="activeAuthForm.configuration.mapping"
:max-length="250" :max-length="255"
placeholder="{'userid':'login','username':'name','email':'email'}" placeholder="{'userid':'login','username':'name','email':'email'}"
allow-clear allow-clear
></a-input> ></a-input>
@ -404,7 +404,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.logoutUrl" v-model:model-value="activeAuthForm.configuration.logoutUrl"
:max-length="250" :max-length="255"
:placeholder=" :placeholder="
t('system.config.auth.commonUrlPlaceholder', { t('system.config.auth.commonUrlPlaceholder', {
url: 'http://<keyclock>/auth/realms/<metersphere>/protocol/openid-connect/logout', url: 'http://<keyclock>/auth/realms/<metersphere>/protocol/openid-connect/logout',
@ -416,7 +416,7 @@
<a-form-item :label="t('system.config.auth.linkRange')" field="configuration.scope" asterisk-position="end"> <a-form-item :label="t('system.config.auth.linkRange')" field="configuration.scope" asterisk-position="end">
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.scope" v-model:model-value="activeAuthForm.configuration.scope"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.linkRangePlaceholder')" :placeholder="t('system.config.auth.linkRangePlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -424,7 +424,7 @@
<a-form-item :label="t('system.config.auth.loginUrl')" field="configuration.loginUrl" asterisk-position="end"> <a-form-item :label="t('system.config.auth.loginUrl')" field="configuration.loginUrl" asterisk-position="end">
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.loginUrl" v-model:model-value="activeAuthForm.configuration.loginUrl"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.commonUrlPlaceholder')" :placeholder="t('system.config.auth.commonUrlPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -441,7 +441,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.url" v-model:model-value="activeAuthForm.configuration.url"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.LDAPUrlPlaceholder')" :placeholder="t('system.config.auth.LDAPUrlPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -456,7 +456,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.dn" v-model:model-value="activeAuthForm.configuration.dn"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.DNPlaceholder')" :placeholder="t('system.config.auth.DNPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -470,7 +470,7 @@
> >
<a-input-password <a-input-password
v-model:model-value="activeAuthForm.configuration.password" v-model:model-value="activeAuthForm.configuration.password"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.LDAPPasswordPlaceholder')" :placeholder="t('system.config.auth.LDAPPasswordPlaceholder')"
allow-clear allow-clear
autocomplete="new-password" autocomplete="new-password"
@ -485,7 +485,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.ou" v-model:model-value="activeAuthForm.configuration.ou"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.OUPlaceholder')" :placeholder="t('system.config.auth.OUPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -500,7 +500,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.filter" v-model:model-value="activeAuthForm.configuration.filter"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.userFilterPlaceholder')" :placeholder="t('system.config.auth.userFilterPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -515,7 +515,7 @@
> >
<a-input <a-input
v-model:model-value="activeAuthForm.configuration.mapping" v-model:model-value="activeAuthForm.configuration.mapping"
:max-length="250" :max-length="255"
:placeholder="t('system.config.auth.LDAPPropertyMapPlaceholder')" :placeholder="t('system.config.auth.LDAPPropertyMapPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -550,7 +550,7 @@
<a-input <a-input
v-model:model-value="LDAPForm.username" v-model:model-value="LDAPForm.username"
:placeholder="t('system.config.auth.testLoginNamePlaceholder')" :placeholder="t('system.config.auth.testLoginNamePlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item <a-form-item

View File

@ -85,7 +85,7 @@
> >
<a-input <a-input
v-model:model-value="baseInfoForm.url" v-model:model-value="baseInfoForm.url"
:max-length="250" :max-length="255"
:placeholder="t('system.config.baseInfo.pageUrlPlaceholder')" :placeholder="t('system.config.baseInfo.pageUrlPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -94,7 +94,7 @@
<a-form-item v-xpack :label="t('system.config.prometheus')" field="prometheusHost" asterisk-position="end"> <a-form-item v-xpack :label="t('system.config.prometheus')" field="prometheusHost" asterisk-position="end">
<a-input <a-input
v-model:model-value="baseInfoForm.prometheusHost" v-model:model-value="baseInfoForm.prometheusHost"
:max-length="250" :max-length="255"
:placeholder="t('system.config.baseInfo.prometheusPlaceholder')" :placeholder="t('system.config.baseInfo.prometheusPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -124,7 +124,7 @@
> >
<a-input <a-input
v-model:model-value="emailConfigForm.host" v-model:model-value="emailConfigForm.host"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.hostPlaceholder')" :placeholder="t('system.config.email.hostPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -138,7 +138,7 @@
> >
<a-input <a-input
v-model:model-value="emailConfigForm.port" v-model:model-value="emailConfigForm.port"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.portPlaceholder')" :placeholder="t('system.config.email.portPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -152,7 +152,7 @@
> >
<a-input <a-input
v-model:model-value="emailConfigForm.account" v-model:model-value="emailConfigForm.account"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.accountPlaceholder')" :placeholder="t('system.config.email.accountPlaceholder')"
autocomplete="off" autocomplete="off"
allow-clear allow-clear
@ -161,7 +161,7 @@
<a-form-item :label="t('system.config.email.password')" field="password" asterisk-position="end"> <a-form-item :label="t('system.config.email.password')" field="password" asterisk-position="end">
<a-input-password <a-input-password
v-model:model-value="emailConfigForm.password" v-model:model-value="emailConfigForm.password"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.passwordPlaceholder')" :placeholder="t('system.config.email.passwordPlaceholder')"
autocomplete="new-password" autocomplete="new-password"
allow-clear allow-clear
@ -170,7 +170,7 @@
<a-form-item :label="t('system.config.email.from')" field="from" asterisk-position="end"> <a-form-item :label="t('system.config.email.from')" field="from" asterisk-position="end">
<a-input <a-input
v-model:model-value="emailConfigForm.from" v-model:model-value="emailConfigForm.from"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.fromPlaceholder')" :placeholder="t('system.config.email.fromPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>
@ -184,7 +184,7 @@
> >
<a-input <a-input
v-model:model-value="emailConfigForm.recipient" v-model:model-value="emailConfigForm.recipient"
:max-length="250" :max-length="255"
:placeholder="t('system.config.email.recipientPlaceholder')" :placeholder="t('system.config.email.recipientPlaceholder')"
allow-clear allow-clear
></a-input> ></a-input>

View File

@ -193,7 +193,7 @@
<a-input <a-input
v-model:model-value="pageConfig.slogan" v-model:model-value="pageConfig.slogan"
:placeholder="t('system.config.page.sloganPlaceholder')" :placeholder="t('system.config.page.sloganPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub :text="t('system.config.page.sloganTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.config.page.sloganTip')" :show-fill-icon="false" />
</a-form-item> </a-form-item>
@ -201,7 +201,7 @@
<a-input <a-input
v-model:model-value="pageConfig.title" v-model:model-value="pageConfig.title"
:placeholder="t('system.config.page.titlePlaceholder')" :placeholder="t('system.config.page.titlePlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub :text="t('system.config.page.titleTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.config.page.titleTip')" :show-fill-icon="false" />
</a-form-item> </a-form-item>
@ -307,7 +307,7 @@
<a-input <a-input
v-model:model-value="pageConfig.platformName" v-model:model-value="pageConfig.platformName"
:placeholder="t('system.config.page.platformNamePlaceholder')" :placeholder="t('system.config.page.platformNamePlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub :text="t('system.config.page.platformNameTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.config.page.platformNameTip')" :show-fill-icon="false" />
</a-form-item> </a-form-item>
@ -315,7 +315,7 @@
<a-input <a-input
v-model:model-value="pageConfig.helpDoc" v-model:model-value="pageConfig.helpDoc"
:placeholder="t('system.config.page.helpDocPlaceholder')" :placeholder="t('system.config.page.helpDocPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub :text="t('system.config.page.helpDocTip')" :show-fill-icon="false" /> <MsFormItemSub :text="t('system.config.page.helpDocTip')" :show-fill-icon="false" />
</a-form-item> </a-form-item>

View File

@ -76,6 +76,7 @@
class="filter-item" class="filter-item"
:placeholder="t('system.log.operateNamePlaceholder')" :placeholder="t('system.log.operateNamePlaceholder')"
allow-clear allow-clear
:max-length="255"
> >
<template #prefix> <template #prefix>
{{ t('system.log.operateName') }} {{ t('system.log.operateName') }}

View File

@ -27,7 +27,7 @@
> >
<a-input <a-input
v-model="form.name" v-model="form.name"
allow-clear :max-length="255"
:placeholder="t('system.organization.organizationNamePlaceholder')" :placeholder="t('system.organization.organizationNamePlaceholder')"
/> />
</a-form-item> </a-form-item>
@ -45,6 +45,7 @@
:placeholder="t('system.organization.descriptionPlaceholder')" :placeholder="t('system.organization.descriptionPlaceholder')"
:auto-size="{ minRows: 1 }" :auto-size="{ minRows: 1 }"
style="resize: vertical" style="resize: vertical"
:max-length="1000"
/> />
</a-form-item> </a-form-item>
</a-form> </a-form>

View File

@ -25,7 +25,7 @@
:label="t('system.project.name')" :label="t('system.project.name')"
:rules="[{ required: true, message: t('system.project.projectNameRequired') }]" :rules="[{ required: true, message: t('system.project.projectNameRequired') }]"
> >
<a-input v-model="form.name" :placeholder="t('system.project.projectNamePlaceholder')" /> <a-input v-model="form.name" :max-length="255" :placeholder="t('system.project.projectNamePlaceholder')" />
</a-form-item> </a-form-item>
<a-form-item <a-form-item
required required
@ -65,6 +65,7 @@
<a-form-item field="description" :label="t('system.organization.description')"> <a-form-item field="description" :label="t('system.organization.description')">
<a-textarea <a-textarea
v-model="form.description" v-model="form.description"
:max-length="1000"
:placeholder="t('system.organization.descriptionPlaceholder')" :placeholder="t('system.organization.descriptionPlaceholder')"
allow-clear allow-clear
:auto-size="{ minRows: 1 }" :auto-size="{ minRows: 1 }"

View File

@ -9,13 +9,14 @@
</a-col> </a-col>
<a-col :span="5" :offset="9"> <a-col :span="5" :offset="9">
<a-select v-model="searchKeys.scene" @change="searchHandler"> <a-select v-model="searchKeys.scene" @change="searchHandler">
<a-option value="">{{ t('system.plugin.all') }}</a-option>
<a-option v-for="item of sceneList" :key="item.value" :value="item.value">{{ t(item.label) }}</a-option> <a-option v-for="item of sceneList" :key="item.value" :value="item.value">{{ t(item.label) }}</a-option>
</a-select> </a-select>
</a-col> </a-col>
<a-col :span="5"> <a-col :span="5">
<a-input-search <a-input-search
v-model="searchKeys.name" v-model="searchKeys.name"
:max-length="250" :max-length="255"
:placeholder="t('system.plugin.searchPlugin')" :placeholder="t('system.plugin.searchPlugin')"
allow-clear allow-clear
@search="searchHandler" @search="searchHandler"
@ -70,11 +71,19 @@
</a-table-column> </a-table-column>
<a-table-column :title="t('system.plugin.tableColumnsOrg')" :width="300"> <a-table-column :title="t('system.plugin.tableColumnsOrg')" :width="300">
<template #cell="{ record }"> <template #cell="{ record }">
<MsTagGroup :tag-list="record.organizations || []" type="primary" theme="outline" /> <MsTagGroup
v-if="(record.organizations || []).length"
:tag-list="record.organizations || []"
type="primary"
theme="outline"
/>
<MsTag v-else type="primary" theme="outline">
{{ t('system.plugin.allOrganize') }}
</MsTag>
</template> </template>
</a-table-column> </a-table-column>
<a-table-column <a-table-column
:title="t('system.plugin.tableColumnsDescription')" :title="t('system.plugin.tableColumnsJar')"
:ellipsis="true" :ellipsis="true"
:tooltip="true" :tooltip="true"
data-index="fileName" data-index="fileName"
@ -145,6 +154,14 @@
<icon-down class="text-[rgb(var(--primary-6))]" :style="{ 'font-size': '12px' }" /> <icon-down class="text-[rgb(var(--primary-6))]" :style="{ 'font-size': '12px' }" />
</span> </span>
</template> </template>
<template #empty>
<div class="flex w-full items-center justify-center p-[8px] text-[var(--color-text-4)]">
{{ t('system.plugin.tableNoData') }}
<MsButton v-permission="['SYSTEM_PLUGIN:READ+ADD']" class="ml-[8px]" @click="uploadPlugin">{{
t('system.plugin.uploadPlugin')
}}</MsButton>
</div>
</template>
</a-table> </a-table>
</div> </div>
<div class="ms-footerNum" <div class="ms-footerNum"
@ -180,6 +197,7 @@
import MsButton from '@/components/pure/ms-button/index.vue'; import MsButton from '@/components/pure/ms-button/index.vue';
import MsTableMoreAction from '@/components/pure/ms-table-more-action/index.vue'; import MsTableMoreAction from '@/components/pure/ms-table-more-action/index.vue';
import type { ActionsItem } from '@/components/pure/ms-table-more-action/types'; import type { ActionsItem } from '@/components/pure/ms-table-more-action/types';
import MsTag from '@/components/pure/ms-tag/ms-tag.vue';
import MsTagGroup from '@/components/pure/ms-tag/ms-tag-group.vue'; import MsTagGroup from '@/components/pure/ms-tag/ms-tag-group.vue';
import scriptDetailDrawer from './scriptDetailDrawer.vue'; import scriptDetailDrawer from './scriptDetailDrawer.vue';
import TableExpand from './tableExpand.vue'; import TableExpand from './tableExpand.vue';
@ -225,10 +243,6 @@
const detailYaml = ref(''); const detailYaml = ref('');
const { openModal } = useModal(); const { openModal } = useModal();
const sceneList = ref([ const sceneList = ref([
{
label: 'system.plugin.all',
value: '',
},
{ {
label: 'system.plugin.interfaceTest', label: 'system.plugin.interfaceTest',
value: 'API_PROTOCOL', value: 'API_PROTOCOL',

View File

@ -7,7 +7,7 @@
<a-input <a-input
v-model="form.name" v-model="form.name"
:placeholder="t('system.plugin.defaultJarNameTip')" :placeholder="t('system.plugin.defaultJarNameTip')"
:max-length="250" :max-length="255"
allow-clear allow-clear
/> />
</a-form-item> </a-form-item>
@ -40,7 +40,12 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item field="description" :label="t('system.plugin.description')" asterisk-position="end"> <a-form-item field="description" :label="t('system.plugin.description')" asterisk-position="end">
<a-textarea v-model="form.description" :placeholder="t('system.plugin.pluginDescription')" allow-clear /> <a-textarea
v-model="form.description"
:max-length="1000"
:placeholder="t('system.plugin.pluginDescription')"
allow-clear
/>
</a-form-item> </a-form-item>
</a-form> </a-form>
</div> </div>

View File

@ -7,16 +7,21 @@
<a-form-item field="pluginName" :label="t('system.plugin.name')" asterisk-position="end"> <a-form-item field="pluginName" :label="t('system.plugin.name')" asterisk-position="end">
<a-input <a-input
v-model="form.name" v-model="form.name"
:max-length="250" :max-length="255"
:placeholder="t('system.plugin.defaultJarNameTip')" :placeholder="t('system.plugin.defaultJarNameTip')"
allow-clear allow-clear
/> />
<span class="absolute right-0 top-1 flex items-center"> <span class="absolute right-0 top-1 flex items-center">
<span class="float-left text-[rgb(var(--primary-5))]">{{ t('system.plugin.getPlugin') }}</span> <span class="float-left text-[rgb(var(--primary-5))]">{{ t('system.plugin.getPlugin') }}</span>
<a-tooltip :content="t('system.plugin.infoTip')" position="bottom"> <a-tooltip position="bottom">
<span class="float-right ml-1 mt-[2px]"> <span class="float-right ml-1 mt-[2px]">
<IconQuestionCircle class="h-[16px] w-[16px] text-[--color-text-4]" /> <IconQuestionCircle
class="h-[16px] w-[16px] text-[--color-text-4] hover:text-[rgb(var(--primary-5))]"
/>
</span> </span>
<template #content>
<span @click="openGithub">{{ t('system.plugin.infoTip') }}</span>
</template>
</a-tooltip> </a-tooltip>
</span> </span>
</a-form-item> </a-form-item>
@ -31,7 +36,8 @@
>{{ t('system.plugin.allOrganize') }} >{{ t('system.plugin.allOrganize') }}
<span class="float-right mx-1 mt-[1px]"> <span class="float-right mx-1 mt-[1px]">
<a-tooltip :content="t('system.plugin.allOrganizeTip')" position="top"> <a-tooltip :content="t('system.plugin.allOrganizeTip')" position="top">
<IconQuestionCircle class="h-[16px] w-[16px] text-[--color-text-4]" <IconQuestionCircle
class="h-[16px] w-[16px] text-[--color-text-4] hover:text-[rgb(var(--primary-5))]"
/></a-tooltip> </span /></a-tooltip> </span
></a-radio> ></a-radio>
<a-radio :value="false">{{ t('system.plugin.theOrganize') }}</a-radio> <a-radio :value="false">{{ t('system.plugin.theOrganize') }}</a-radio>
@ -54,7 +60,12 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item field="describe" :label="t('system.plugin.description')" asterisk-position="end"> <a-form-item field="describe" :label="t('system.plugin.description')" asterisk-position="end">
<a-textarea v-model="form.description" :placeholder="t('system.plugin.pluginDescription')" allow-clear /> <a-textarea
v-model="form.description"
:max-length="1000"
:placeholder="t('system.plugin.pluginDescription')"
allow-clear
/>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-row> </a-row>
@ -74,14 +85,15 @@
<div class="flex justify-between"> <div class="flex justify-between">
<div class="flex flex-row items-center justify-center"> <div class="flex flex-row items-center justify-center">
<a-switch v-model="form.enable" size="small" type="line" /> <a-switch v-model="form.enable" size="small" type="line" />
<span class="ml-2">{{ t('system.plugin.pluginStatus') }}</span>
<a-tooltip> <a-tooltip>
<template #content> <template #content>
<div class="text-sm">{{ t('system.plugin.statusEnableTip') }}</div> <div class="text-sm">{{ t('system.plugin.statusEnableTip') }}</div>
<div class="text-sm">{{ t('organization.service.statusDisableTip') }}</div>
</template> </template>
<div class="mx-1 flex h-[32px] items-center"> <div class="mx-1 flex h-[32px] items-center">
<span class="mr-1">{{ t('system.plugin.pluginStatus') }}</span>
<span class="mt-[2px]" <span class="mt-[2px]"
><IconQuestionCircle class="h-[16px] w-[16px] text-[rgb(var(--primary-5))]" ><IconQuestionCircle class="h-[16px] w-[16px] text-[--color-text-4] hover:text-[rgb(var(--primary-5))]"
/></span> /></span>
</div> </div>
</a-tooltip> </a-tooltip>
@ -218,6 +230,10 @@
watchEffect(() => { watchEffect(() => {
fileName.value = fileList.value[0]?.name as string; fileName.value = fileList.value[0]?.name as string;
}); });
function openGithub() {
window.open('https://github.com/metersphere');
}
</script> </script>
<style scoped lang="less"> <style scoped lang="less">

View File

@ -27,6 +27,8 @@ export default {
'system.plugin.defaultJarNameTip': 'The default is the package name', 'system.plugin.defaultJarNameTip': 'The default is the package name',
'system.plugin.appOrganize': 'Application Organization', 'system.plugin.appOrganize': 'Application Organization',
'system.plugin.description': 'Description', 'system.plugin.description': 'Description',
'system.plugin.tableColumnsJar': 'jar',
'system.plugin.tableNoData': 'No data, please',
'system.plugin.pluginDescription': 'Please describe the plug-in', 'system.plugin.pluginDescription': 'Please describe the plug-in',
'system.plugin.supportFormat': 'Only JAR format files are supported and the file size does not exceed 50M', 'system.plugin.supportFormat': 'Only JAR format files are supported and the file size does not exceed 50M',
'system.plugin.interfaceTestDescribe': 'Plug-ins for protocol classes recommend choosing an interface test', 'system.plugin.interfaceTestDescribe': 'Plug-ins for protocol classes recommend choosing an interface test',

View File

@ -27,6 +27,8 @@ export default {
'system.plugin.defaultJarNameTip': '默认为包名', 'system.plugin.defaultJarNameTip': '默认为包名',
'system.plugin.appOrganize': '应用组织', 'system.plugin.appOrganize': '应用组织',
'system.plugin.description': '描述', 'system.plugin.description': '描述',
'system.plugin.tableColumnsJar': 'jar',
'system.plugin.tableNoData': '暂无数据,请',
'system.plugin.pluginDescription': '请对该插件进行描述', 'system.plugin.pluginDescription': '请对该插件进行描述',
'system.plugin.supportFormat': '只支持JAR格式文件文件大小不超过50M', 'system.plugin.supportFormat': '只支持JAR格式文件文件大小不超过50M',
'system.plugin.interfaceTestDescribe': '协议类的插件建议选择接口测试', 'system.plugin.interfaceTestDescribe': '协议类的插件建议选择接口测试',
@ -44,7 +46,7 @@ export default {
'system.plugin.updateTitle': '更新插件({name}', 'system.plugin.updateTitle': '更新插件({name}',
'system.plugin.selectOrganizeTip': '请选择组织', 'system.plugin.selectOrganizeTip': '请选择组织',
'system.plugin.selectOrganization': '选择组织', 'system.plugin.selectOrganization': '选择组织',
'system.plugin.infoTip': '跳转至Github下载插件', 'system.plugin.infoTip': '跳转至 GitHub 下载插件',
'system.plugin.getPlugin': '获取开源插件', 'system.plugin.getPlugin': '获取开源插件',
'system.plugin.afterSecond': '秒后回到插件列表', 'system.plugin.afterSecond': '秒后回到插件列表',
'system.plugin.uploadSuccess': '上传成功!', 'system.plugin.uploadSuccess': '上传成功!',
@ -61,7 +63,7 @@ export default {
'system.plugin.enablePluginSuccess': '启用成功', 'system.plugin.enablePluginSuccess': '启用成功',
'system.plugin.disablePluginContent': '项目无法与该平台集成且该平台默认模版不可用,谨慎操作!', 'system.plugin.disablePluginContent': '项目无法与该平台集成且该平台默认模版不可用,谨慎操作!',
'system.plugin.alertDescribe': 'system.plugin.alertDescribe':
'MeterSphere V2.10 LTS 版本支持 DevOps、API 导入、请求、项目管理、协议类型的插件,具体支持插件请', 'MeterSphere v2.10 LTS 版本支持 DevOps、API 导入、请求、项目管理、协议 类型的插件,具体支持插件请',
'system.plugin.viewTable': '查看表格', 'system.plugin.viewTable': '查看表格',
'system.plugin.downAddress': '更多开源插件,请在此下载', 'system.plugin.downAddress': '更多开源插件,请在此下载',
'system.plugin.goDownload': '去下载', 'system.plugin.goDownload': '去下载',
@ -79,7 +81,7 @@ export default {
'system.plugin.uploadCompSource': '企业版', 'system.plugin.uploadCompSource': '企业版',
'system.plugin.sizeExceedTip': '文件大小超出限制!', 'system.plugin.sizeExceedTip': '文件大小超出限制!',
'system.plugin.showScriptTitle': '查看脚本({name})', 'system.plugin.showScriptTitle': '查看脚本({name})',
'system.plugin.all': '全部', 'system.plugin.all': '全部应用场景',
'system.plugin.projectManagement': '项目管理', 'system.plugin.projectManagement': '项目管理',
'system.plugin.pluginStatus': '插件状态', 'system.plugin.pluginStatus': '插件状态',
'system.plugin.databaseDriver': '数据库驱动', 'system.plugin.databaseDriver': '数据库驱动',

View File

@ -18,21 +18,21 @@
<a-input <a-input
v-model:model-value="form.name" v-model:model-value="form.name"
:placeholder="t('system.resourcePool.namePlaceholder')" :placeholder="t('system.resourcePool.namePlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item :label="t('system.resourcePool.desc')" field="description" class="form-item"> <a-form-item :label="t('system.resourcePool.desc')" field="description" class="form-item">
<a-textarea <a-textarea
v-model:model-value="form.description" v-model:model-value="form.description"
:placeholder="t('system.resourcePool.descPlaceholder')" :placeholder="t('system.resourcePool.descPlaceholder')"
:max-length="250" :max-length="1000"
></a-textarea> ></a-textarea>
</a-form-item> </a-form-item>
<a-form-item :label="t('system.resourcePool.serverUrl')" field="serverUrl" class="form-item"> <a-form-item :label="t('system.resourcePool.serverUrl')" field="serverUrl" class="form-item">
<a-input <a-input
v-model:model-value="form.serverUrl" v-model:model-value="form.serverUrl"
:placeholder="t('system.resourcePool.rootUrlPlaceholder')" :placeholder="t('system.resourcePool.rootUrlPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item :label="t('system.resourcePool.orgRange')" field="orgType" class="form-item"> <a-form-item :label="t('system.resourcePool.orgRange')" field="orgType" class="form-item">
@ -84,14 +84,14 @@
<a-input <a-input
v-model:model-value="form.testResourceDTO.loadTestImage" v-model:model-value="form.testResourceDTO.loadTestImage"
:placeholder="t('system.resourcePool.mirrorPlaceholder')" :placeholder="t('system.resourcePool.mirrorPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
</a-form-item> </a-form-item>
<a-form-item :label="t('system.resourcePool.testHeap')" field="testResourceDTO.loadTestHeap" class="form-item"> <a-form-item :label="t('system.resourcePool.testHeap')" field="testResourceDTO.loadTestHeap" class="form-item">
<a-input <a-input
v-model:model-value="form.testResourceDTO.loadTestHeap" v-model:model-value="form.testResourceDTO.loadTestHeap"
:placeholder="t('system.resourcePool.testHeapPlaceholder')" :placeholder="t('system.resourcePool.testHeapPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<MsFormItemSub <MsFormItemSub
:text="t('system.resourcePool.testHeapExample', { heap: defaultHeap })" :text="t('system.resourcePool.testHeapExample', { heap: defaultHeap })"
@ -111,7 +111,7 @@
<a-input <a-input
v-model:model-value="form.testResourceDTO.uiGrid" v-model:model-value="form.testResourceDTO.uiGrid"
:placeholder="t('system.resourcePool.uiGridPlaceholder')" :placeholder="t('system.resourcePool.uiGridPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<div class="mt-[4px] text-[12px] leading-[16px] text-[var(--color-text-4)]"> <div class="mt-[4px] text-[12px] leading-[16px] text-[var(--color-text-4)]">
{{ t('system.resourcePool.uiGridExample', { grid: defaultGrid }) }} {{ t('system.resourcePool.uiGridExample', { grid: defaultGrid }) }}
@ -218,7 +218,7 @@
<a-input <a-input
v-model:model-value="form.testResourceDTO.ip" v-model:model-value="form.testResourceDTO.ip"
:placeholder="t('system.resourcePool.testResourceDTO.ipPlaceholder')" :placeholder="t('system.resourcePool.testResourceDTO.ipPlaceholder')"
:max-length="250" :max-length="255"
></a-input> ></a-input>
<div class="mt-[4px] text-[12px] leading-[16px] text-[var(--color-text-4)]"> <div class="mt-[4px] text-[12px] leading-[16px] text-[var(--color-text-4)]">
{{ t('system.resourcePool.testResourceDTO.ipSubTip', { ip: '100.0.0.100', domain: 'example.com' }) }} {{ t('system.resourcePool.testResourceDTO.ipSubTip', { ip: '100.0.0.100', domain: 'example.com' }) }}
@ -248,7 +248,7 @@
<a-input <a-input
v-model:model-value="form.testResourceDTO.namespace" v-model:model-value="form.testResourceDTO.namespace"
:placeholder="t('system.resourcePool.testResourceDTO.nameSpacesPlaceholder')" :placeholder="t('system.resourcePool.testResourceDTO.nameSpacesPlaceholder')"
:max-length="250" :max-length="255"
class="mr-[8px] flex-1" class="mr-[8px] flex-1"
></a-input> ></a-input>
<a-tooltip <a-tooltip
@ -273,7 +273,7 @@
<a-input <a-input
v-model:model-value="form.testResourceDTO.deployName" v-model:model-value="form.testResourceDTO.deployName"
:placeholder="t('system.resourcePool.testResourceDTO.deployNamePlaceholder')" :placeholder="t('system.resourcePool.testResourceDTO.deployNamePlaceholder')"
:max-length="250" :max-length="255"
class="mr-[8px] flex-1" class="mr-[8px] flex-1"
></a-input> ></a-input>
<a-tooltip <a-tooltip

View File

@ -2,7 +2,7 @@ export default {
'system.user.createUser': '创建用户', 'system.user.createUser': '创建用户',
'system.user.emailInvite': '邮箱邀请', 'system.user.emailInvite': '邮箱邀请',
'system.user.importUser': '导入用户', 'system.user.importUser': '导入用户',
'system.user.searchUser': '通过名称或邮箱搜索搜索', 'system.user.searchUser': '通过名称或邮箱搜索',
'system.user.editUser': '编辑', 'system.user.editUser': '编辑',
'system.user.resetPassword': '重置密码', 'system.user.resetPassword': '重置密码',
'system.user.disable': '禁用', 'system.user.disable': '禁用',