fix(接口调试): 插件 path 参数不传&代码编辑器语言大写
This commit is contained in:
parent
aaf93702e1
commit
f50ed1b36a
|
@ -76,8 +76,6 @@
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
import useAppStore from '@/store/modules/app';
|
import useAppStore from '@/store/modules/app';
|
||||||
|
|
||||||
import { RequestConditionScriptLanguage } from '@/enums/apiEnum';
|
|
||||||
|
|
||||||
import debounce from 'lodash-es/debounce';
|
import debounce from 'lodash-es/debounce';
|
||||||
|
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
|
@ -86,7 +84,7 @@
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
scriptLanguage?: Language | RequestConditionScriptLanguage;
|
scriptLanguage?: Language;
|
||||||
enableRadioSelected?: boolean; // 是否单选开启
|
enableRadioSelected?: boolean; // 是否单选开启
|
||||||
okText?: string;
|
okText?: string;
|
||||||
checkedId?: string; // 单选时默认选中的id
|
checkedId?: string; // 单选时默认选中的id
|
||||||
|
|
|
@ -43,12 +43,10 @@
|
||||||
import { useVModel } from '@vueuse/core';
|
import { useVModel } from '@vueuse/core';
|
||||||
import { Message } from '@arco-design/web-vue';
|
import { Message } from '@arco-design/web-vue';
|
||||||
|
|
||||||
import { Language } from '@/components/pure/ms-code-editor/types';
|
import { Language, LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
|
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
import { RequestConditionScriptLanguage } from '@/enums/apiEnum';
|
|
||||||
|
|
||||||
import type { CommonScriptMenu } from './types';
|
import type { CommonScriptMenu } from './types';
|
||||||
import { getCodeTemplate, SCRIPT_MENU } from './utils';
|
import { getCodeTemplate, SCRIPT_MENU } from './utils';
|
||||||
|
|
||||||
|
@ -56,7 +54,7 @@
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
expand: boolean;
|
expand: boolean;
|
||||||
languagesType: Language | RequestConditionScriptLanguage;
|
languagesType: Language;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
|
@ -73,11 +71,11 @@
|
||||||
const innerLanguageType = useVModel(props, 'languagesType', emit);
|
const innerLanguageType = useVModel(props, 'languagesType', emit);
|
||||||
|
|
||||||
const languages = [
|
const languages = [
|
||||||
{ text: 'beanshellJSR223', value: RequestConditionScriptLanguage.BEANSHELL_JSR233 },
|
{ text: 'beanshellJSR223', value: LanguageEnum.BEANSHELL_JSR233 },
|
||||||
{ text: 'beanshell', value: RequestConditionScriptLanguage.BEANSHELL },
|
{ text: 'beanshell', value: LanguageEnum.BEANSHELL },
|
||||||
{ text: 'python', value: RequestConditionScriptLanguage.PYTHON },
|
{ text: 'python', value: LanguageEnum.PYTHON },
|
||||||
{ text: 'groovy', value: RequestConditionScriptLanguage.GROOVY },
|
{ text: 'groovy', value: LanguageEnum.GROOVY },
|
||||||
{ text: 'javascript', value: RequestConditionScriptLanguage.JAVASCRIPT },
|
{ text: 'javascript', value: LanguageEnum.JAVASCRIPT },
|
||||||
];
|
];
|
||||||
|
|
||||||
function expandedHandler() {
|
function expandedHandler() {
|
||||||
|
@ -127,7 +125,7 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (innerLanguageType.value !== 'beanshell' && innerLanguageType.value !== 'groovy') {
|
if (innerLanguageType.value !== LanguageEnum.BEANSHELL && innerLanguageType.value !== LanguageEnum.GROOVY) {
|
||||||
if (
|
if (
|
||||||
obj.title === t('api_test.request.processor.code_add_report_length') ||
|
obj.title === t('api_test.request.processor.code_add_report_length') ||
|
||||||
obj.title === t('api_test.request.processor.code_hide_report_length')
|
obj.title === t('api_test.request.processor.code_hide_report_length')
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
:width="expandMenu ? '100%' : '68%'"
|
:width="expandMenu ? '100%' : '68%'"
|
||||||
height="460px"
|
height="460px"
|
||||||
theme="vs"
|
theme="vs"
|
||||||
:language="(innerLanguagesType as Language)"
|
:language="innerLanguagesType"
|
||||||
:read-only="false"
|
:read-only="false"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
:show-theme-change="false"
|
:show-theme-change="false"
|
||||||
|
@ -86,14 +86,13 @@
|
||||||
import useAppStore from '@/store/modules/app';
|
import useAppStore from '@/store/modules/app';
|
||||||
|
|
||||||
import type { CommonScriptItem } from '@/models/projectManagement/commonScript';
|
import type { CommonScriptItem } from '@/models/projectManagement/commonScript';
|
||||||
import { RequestConditionScriptLanguage } from '@/enums/apiEnum';
|
|
||||||
|
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
showType: 'commonScript' | 'executionResult'; // 执行类型
|
showType: 'commonScript' | 'executionResult'; // 执行类型
|
||||||
language: Language | RequestConditionScriptLanguage;
|
language: Language;
|
||||||
code: string;
|
code: string;
|
||||||
enableRadioSelected?: boolean;
|
enableRadioSelected?: boolean;
|
||||||
executionResult?: string; // 执行结果
|
executionResult?: string; // 执行结果
|
||||||
|
@ -104,7 +103,7 @@
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'update:language', value: Language | RequestConditionScriptLanguage): void;
|
(e: 'update:language', value: Language): void;
|
||||||
(e: 'update:code', value: string): void;
|
(e: 'update:code', value: string): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Language } from '@/components/pure/ms-code-editor/types';
|
import { Language, LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
|
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
|
@ -500,19 +500,19 @@ function jsCode(requestObj) {
|
||||||
|
|
||||||
export function getCodeTemplate(language: Language | RequestConditionScriptLanguage, requestObj: any) {
|
export function getCodeTemplate(language: Language | RequestConditionScriptLanguage, requestObj: any) {
|
||||||
switch (language) {
|
switch (language) {
|
||||||
case 'groovy':
|
case LanguageEnum.GROOVY:
|
||||||
return groovyCode(requestObj);
|
return groovyCode(requestObj);
|
||||||
case 'python':
|
case LanguageEnum.PYTHON:
|
||||||
return pythonCode(requestObj);
|
return pythonCode(requestObj);
|
||||||
case 'beanshell':
|
case LanguageEnum.BEANSHELL:
|
||||||
return javaCode(requestObj);
|
return javaCode(requestObj);
|
||||||
case 'nashornScript':
|
case LanguageEnum.NASHORNSCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
case 'rhinoScript':
|
case LanguageEnum.RHINOSCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
case 'javascript':
|
case LanguageEnum.JAVASCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
case 'beanshell-jsr233':
|
case LanguageEnum.BEANSHELL_JSR233:
|
||||||
return javaCode(requestObj);
|
return javaCode(requestObj);
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
|
|
|
@ -459,14 +459,14 @@ export const mockFunctions: MockParamItem[] = [
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'concatconcat',
|
label: 'concat',
|
||||||
value: 'concatconcat',
|
value: 'concat',
|
||||||
desc: 'ms.paramsInput.concatconcatDesc',
|
desc: 'ms.paramsInput.concatDesc',
|
||||||
inputGroup: [
|
inputGroup: [
|
||||||
{
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
value: '',
|
value: '',
|
||||||
label: 'ms.paramsInput.concatconcat',
|
label: 'ms.paramsInput.concat',
|
||||||
placeholder: 'ms.paramsInput.commonPlaceholder',
|
placeholder: 'ms.paramsInput.commonPlaceholder',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
@ -166,7 +166,7 @@
|
||||||
</template>
|
</template>
|
||||||
</a-form>
|
</a-form>
|
||||||
<div
|
<div
|
||||||
v-if="paramForm.type === 'mock'"
|
v-if="paramSettingType === 'mock'"
|
||||||
class="mb-[16px] flex items-center gap-[16px] bg-[var(--color-text-n9)] p-[5px_8px]"
|
class="mb-[16px] flex items-center gap-[16px] bg-[var(--color-text-n9)] p-[5px_8px]"
|
||||||
>
|
>
|
||||||
<div class="text-[var(--color-text-3)]">{{ t('ms.paramsInput.preview') }}</div>
|
<div class="text-[var(--color-text-3)]">{{ t('ms.paramsInput.preview') }}</div>
|
||||||
|
|
|
@ -137,8 +137,8 @@ export default {
|
||||||
'ms.paramsInput.substrDesc': 'Starting and ending',
|
'ms.paramsInput.substrDesc': 'Starting and ending',
|
||||||
'ms.paramsInput.substrStartPlaceholder': 'Starting value',
|
'ms.paramsInput.substrStartPlaceholder': 'Starting value',
|
||||||
'ms.paramsInput.substrEndPlaceholder': 'Ending value',
|
'ms.paramsInput.substrEndPlaceholder': 'Ending value',
|
||||||
'ms.paramsInput.concatconcat': 'String to end with',
|
'ms.paramsInput.concat': 'String to end with',
|
||||||
'ms.paramsInput.concatconcatDesc': 'Ending string',
|
'ms.paramsInput.concatDesc': 'Ending string',
|
||||||
'ms.paramsInput.lconcatDesc': 'Starting string',
|
'ms.paramsInput.lconcatDesc': 'Starting string',
|
||||||
'ms.paramsInput.lconcat': 'The string to start with',
|
'ms.paramsInput.lconcat': 'The string to start with',
|
||||||
'ms.paramsInput.sha1Desc': 'SHA1 encryption',
|
'ms.paramsInput.sha1Desc': 'SHA1 encryption',
|
||||||
|
|
|
@ -129,8 +129,8 @@ export default {
|
||||||
'ms.paramsInput.substrDesc': '起止',
|
'ms.paramsInput.substrDesc': '起止',
|
||||||
'ms.paramsInput.substrStartPlaceholder': '起始值',
|
'ms.paramsInput.substrStartPlaceholder': '起始值',
|
||||||
'ms.paramsInput.substrEndPlaceholder': '结束值',
|
'ms.paramsInput.substrEndPlaceholder': '结束值',
|
||||||
'ms.paramsInput.concatconcat': '要作为结尾的字符串',
|
'ms.paramsInput.concat': '要作为结尾的字符串',
|
||||||
'ms.paramsInput.concatconcatDesc': '结尾字符串',
|
'ms.paramsInput.concatDesc': '结尾字符串',
|
||||||
'ms.paramsInput.lconcatDesc': '开头字符串',
|
'ms.paramsInput.lconcatDesc': '开头字符串',
|
||||||
'ms.paramsInput.lconcat': '要作为开头的字符串',
|
'ms.paramsInput.lconcat': '要作为开头的字符串',
|
||||||
'ms.paramsInput.sha1Desc': 'sha1 加密',
|
'ms.paramsInput.sha1Desc': 'sha1 加密',
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
name: 'MonacoEditor',
|
name: 'MonacoEditor',
|
||||||
props: editorProps,
|
props: editorProps,
|
||||||
emits: ['update:modelValue', 'change'],
|
emits: ['update:modelValue', 'change'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit, slots }) {
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
// 编辑器实例,每次调用组件都会创建独立的实例
|
// 编辑器实例,每次调用组件都会创建独立的实例
|
||||||
let editor: monaco.editor.IStandaloneCodeEditor;
|
let editor: monaco.editor.IStandaloneCodeEditor;
|
||||||
|
@ -138,14 +138,14 @@
|
||||||
// 如果传入了语言种类数组,则过滤选项
|
// 如果传入了语言种类数组,则过滤选项
|
||||||
if (props.languages.includes(e)) {
|
if (props.languages.includes(e)) {
|
||||||
return {
|
return {
|
||||||
label: e,
|
label: e.toLowerCase(),
|
||||||
value: e,
|
value: e,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
label: e,
|
label: e.toLowerCase(),
|
||||||
value: e,
|
value: e,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
@ -172,7 +172,9 @@
|
||||||
props.showThemeChange ||
|
props.showThemeChange ||
|
||||||
props.showLanguageChange ||
|
props.showLanguageChange ||
|
||||||
props.showCharsetChange ||
|
props.showCharsetChange ||
|
||||||
props.showFullScreen
|
props.showFullScreen ||
|
||||||
|
slots.leftTitle ||
|
||||||
|
slots.rightTitle
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
|
@ -259,7 +261,7 @@
|
||||||
watch(
|
watch(
|
||||||
() => props.language,
|
() => props.language,
|
||||||
(newValue) => {
|
(newValue) => {
|
||||||
monaco.editor.setModelLanguage(editor.getModel()!, newValue);
|
monaco.editor.setModelLanguage(editor.getModel()!, newValue.toLowerCase()); // 设置语言,语言 ENUM 是大写的,但是 monaco 需要小写
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -5,25 +5,25 @@ export type Theme = 'vs' | 'hc-black' | 'vs-dark' | CustomTheme;
|
||||||
export type FoldingStrategy = 'auto' | 'indentation';
|
export type FoldingStrategy = 'auto' | 'indentation';
|
||||||
export type RenderLineHighlight = 'all' | 'line' | 'none' | 'gutter';
|
export type RenderLineHighlight = 'all' | 'line' | 'none' | 'gutter';
|
||||||
export const LanguageEnum = {
|
export const LanguageEnum = {
|
||||||
PLAINTEXT: 'plaintext' as const,
|
PLAINTEXT: 'PLAINTEXT' as const,
|
||||||
JAVASCRIPT: 'javascript' as const,
|
JAVASCRIPT: 'JAVASCRIPT' as const,
|
||||||
TYPESCRIPT: 'typescript' as const,
|
TYPESCRIPT: 'TYPESCRIPT' as const,
|
||||||
CSS: 'css' as const,
|
CSS: 'CSS' as const,
|
||||||
LESS: 'less' as const,
|
LESS: 'LESS' as const,
|
||||||
SASS: 'sass' as const,
|
SASS: 'SASS' as const,
|
||||||
HTML: 'html' as const,
|
HTML: 'HTML' as const,
|
||||||
SQL: 'sql' as const,
|
SQL: 'SQL' as const,
|
||||||
JSON: 'json' as const,
|
JSON: 'JSON' as const,
|
||||||
JAVA: 'java' as const,
|
JAVA: 'JAVA' as const,
|
||||||
PYTHON: 'python' as const,
|
PYTHON: 'PYTHON' as const,
|
||||||
XML: 'xml' as const,
|
XML: 'XML' as const,
|
||||||
YAML: 'yaml' as const,
|
YAML: 'YAML' as const,
|
||||||
SHELL: 'shell' as const,
|
SHELL: 'SHELL' as const,
|
||||||
BEANSHELL: 'beanshell' as const,
|
BEANSHELL: 'BEANSHELL' as const,
|
||||||
BEANSHELL_JSR233: 'beanshell-jsr233' as const,
|
BEANSHELL_JSR233: 'BEANSHELL_JSR233' as const,
|
||||||
GROOVY: 'groovy' as const,
|
GROOVY: 'GROOVY' as const,
|
||||||
NASHORNSCRIPT: 'nashornScript' as const,
|
NASHORNSCRIPT: 'NASHORNSCRIPT' as const,
|
||||||
RHINOSCRIPT: 'rhinoScript' as const,
|
RHINOSCRIPT: 'RHINOSCRIPT' as const,
|
||||||
} as const;
|
} as const;
|
||||||
export type Language = (typeof LanguageEnum)[keyof typeof LanguageEnum];
|
export type Language = (typeof LanguageEnum)[keyof typeof LanguageEnum];
|
||||||
export interface Options {
|
export interface Options {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
import { Language } from '@/components/pure/ms-code-editor/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
RequestAssertionCondition,
|
RequestAssertionCondition,
|
||||||
RequestAuthType,
|
RequestAuthType,
|
||||||
RequestBodyFormat,
|
RequestBodyFormat,
|
||||||
RequestConditionProcessor,
|
RequestConditionProcessor,
|
||||||
RequestConditionScriptLanguage,
|
|
||||||
RequestContentTypeEnum,
|
RequestContentTypeEnum,
|
||||||
RequestExtractEnvType,
|
RequestExtractEnvType,
|
||||||
RequestExtractExpressionEnum,
|
RequestExtractExpressionEnum,
|
||||||
|
@ -23,8 +24,6 @@ import {
|
||||||
export type ConditionType = RequestConditionProcessor;
|
export type ConditionType = RequestConditionProcessor;
|
||||||
// 断言-匹配条件规则
|
// 断言-匹配条件规则
|
||||||
export type RequestAssertionConditionType = RequestAssertionCondition;
|
export type RequestAssertionConditionType = RequestAssertionCondition;
|
||||||
// 前后置条件-脚本语言类型
|
|
||||||
export type RequestConditionScriptLanguageType = RequestConditionScriptLanguage;
|
|
||||||
// 响应时间信息
|
// 响应时间信息
|
||||||
export interface ResponseTiming {
|
export interface ResponseTiming {
|
||||||
dnsLookupTime: number;
|
dnsLookupTime: number;
|
||||||
|
@ -157,7 +156,7 @@ export interface ScriptCommonConfig {
|
||||||
script: string; // 脚本内容
|
script: string; // 脚本内容
|
||||||
scriptId: string; // 脚本id
|
scriptId: string; // 脚本id
|
||||||
scriptName: string; // 脚本名称
|
scriptName: string; // 脚本名称
|
||||||
scriptLanguage: RequestConditionScriptLanguageType; // 脚本语言
|
scriptLanguage: Language; // 脚本语言
|
||||||
params: KeyValueParam[]; // 公共脚本参数
|
params: KeyValueParam[]; // 公共脚本参数
|
||||||
}
|
}
|
||||||
// 断言-响应体断言
|
// 断言-响应体断言
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
@confirm="applyBatchParams"
|
@confirm="applyBatchParams"
|
||||||
>
|
>
|
||||||
<template #title>
|
<template #title>
|
||||||
|
<div>
|
||||||
{{ t('common.batchAdd') }}
|
{{ t('common.batchAdd') }}
|
||||||
<a-tooltip position="right">
|
<a-tooltip position="right">
|
||||||
<icon-exclamation-circle
|
<icon-exclamation-circle
|
||||||
|
@ -17,25 +18,23 @@
|
||||||
size="16"
|
size="16"
|
||||||
/>
|
/>
|
||||||
<template #content>
|
<template #content>
|
||||||
|
<div>{{ t('apiTestDebug.batchAddParamsTip1') }}</div>
|
||||||
<div>{{ t('apiTestDebug.batchAddParamsTip2') }}</div>
|
<div>{{ t('apiTestDebug.batchAddParamsTip2') }}</div>
|
||||||
<div>{{ t('apiTestDebug.batchAddParamsTip3') }}</div>
|
<div>{{ t('apiTestDebug.batchAddParamsTip3') }}</div>
|
||||||
</template>
|
</template>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="flex h-full">
|
<div class="flex h-full">
|
||||||
<MsCodeEditor
|
<MsCodeEditor
|
||||||
v-if="showBatchAddParamDrawer"
|
v-if="showBatchAddParamDrawer"
|
||||||
v-model:model-value="batchParamsCode"
|
v-model:model-value="batchParamsCode"
|
||||||
class="flex-1"
|
class="flex-1"
|
||||||
theme="MS-text"
|
theme="vs"
|
||||||
height="100%"
|
height="100%"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
|
:show-theme-change="false"
|
||||||
>
|
>
|
||||||
<template #title>
|
|
||||||
<div class="text-[12px] leading-[16px] text-[var(--color-text-4)]">
|
|
||||||
{{ t('apiTestDebug.batchAddParamsTip') }}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</MsCodeEditor>
|
</MsCodeEditor>
|
||||||
</div>
|
</div>
|
||||||
</MsDrawer>
|
</MsDrawer>
|
||||||
|
@ -85,7 +84,7 @@
|
||||||
const tempObj: Record<string, any> = {}; // 同名参数去重,保留最新的
|
const tempObj: Record<string, any> = {}; // 同名参数去重,保留最新的
|
||||||
for (let i = 0; i < arr.length; i++) {
|
for (let i = 0; i < arr.length; i++) {
|
||||||
const [key, value] = arr[i].split(':');
|
const [key, value] = arr[i].split(':');
|
||||||
if (key) {
|
if (key || value) {
|
||||||
tempObj[key.trim()] = {
|
tempObj[key.trim()] = {
|
||||||
id: new Date().getTime() + i,
|
id: new Date().getTime() + i,
|
||||||
...props.defaultParamItem,
|
...props.defaultParamItem,
|
||||||
|
|
|
@ -51,7 +51,8 @@
|
||||||
<MsCodeEditor
|
<MsCodeEditor
|
||||||
v-model:model-value="scriptEx"
|
v-model:model-value="scriptEx"
|
||||||
class="flex-1"
|
class="flex-1"
|
||||||
theme="MS-text"
|
theme="vs"
|
||||||
|
:language="LanguageEnum.BEANSHELL"
|
||||||
width="500px"
|
width="500px"
|
||||||
height="388px"
|
height="388px"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
|
@ -127,7 +128,7 @@
|
||||||
<div v-show="commonScriptShowType === 'scriptContent'" class="h-[calc(100%-76px)]">
|
<div v-show="commonScriptShowType === 'scriptContent'" class="h-[calc(100%-76px)]">
|
||||||
<MsCodeEditor
|
<MsCodeEditor
|
||||||
v-model:model-value="condition.script"
|
v-model:model-value="condition.script"
|
||||||
theme="MS-text"
|
theme="vs"
|
||||||
height="100%"
|
height="100%"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
:show-theme-change="false"
|
:show-theme-change="false"
|
||||||
|
@ -380,18 +381,14 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const scriptEx = ref(`2023-12-04 11:19:28 INFO 9026fd6a 1-1 Thread started: 9026fd6a 1-1
|
const scriptEx = ref(`// 这里可以输入脚本注释
|
||||||
2023-12-04 11:19:28 ERROR 9026fd6a 1-1 Problem in JSR223 script JSR223Sampler, message: {}
|
value = vars.get("variable_name");
|
||||||
In file: inline evaluation of: prev.getResponseCode() import java.net.URI; import org.apache.http.client.method . . . '' Encountered "import" at line 2, column 1.
|
result = "variable_name".equals(value);
|
||||||
in inline evaluation of: prev.getResponseCode() import java.net.URI; import org.apache.http.client.method . . . '' at line number 2
|
if (!result){
|
||||||
javax.script.ScriptException '' at line number 2
|
msg = "assertion [" + value + " == 'variable_name']: false;";
|
||||||
javax.script.ScriptException '' at line number 2
|
AssertionResult.setFailureMessage(msg);
|
||||||
javax.script.ScriptException '' at line number 2
|
AssertionResult.setFailure(true);
|
||||||
javax.script.ScriptException '' at line number 2
|
}`);
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException
|
|
||||||
org.apache.http.client.method . . . '' at line number 2
|
|
||||||
`);
|
|
||||||
const { copy, isSupported } = useClipboard();
|
const { copy, isSupported } = useClipboard();
|
||||||
|
|
||||||
function copyScriptEx() {
|
function copyScriptEx() {
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useVModel } from '@vueuse/core';
|
import { useVModel } from '@vueuse/core';
|
||||||
|
|
||||||
|
import { LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
import conditionContent from './content.vue';
|
import conditionContent from './content.vue';
|
||||||
import conditionList from './list.vue';
|
import conditionList from './list.vue';
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
import { ConditionType, ExecuteConditionProcessor } from '@/models/apiTest/debug';
|
import { ConditionType, ExecuteConditionProcessor } from '@/models/apiTest/debug';
|
||||||
import { RequestConditionProcessor, RequestConditionScriptLanguage } from '@/enums/apiEnum';
|
import { RequestConditionProcessor } from '@/enums/apiEnum';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
list: ExecuteConditionProcessor[];
|
list: ExecuteConditionProcessor[];
|
||||||
|
@ -94,19 +95,6 @@
|
||||||
emit('change');
|
emit('change');
|
||||||
}
|
}
|
||||||
|
|
||||||
const scriptEx = ref(`2023-12-04 11:19:28 INFO 9026fd6a 1-1 Thread started: 9026fd6a 1-1
|
|
||||||
2023-12-04 11:19:28 ERROR 9026fd6a 1-1 Problem in JSR223 script JSR223Sampler, message: {}
|
|
||||||
In file: inline evaluation of: prev.getResponseCode() import java.net.URI; import org.apache.http.client.method . . . '' Encountered "import" at line 2, column 1.
|
|
||||||
in inline evaluation of: prev.getResponseCode() import java.net.URI; import org.apache.http.client.method . . . '' at line number 2
|
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException '' at line number 2
|
|
||||||
javax.script.ScriptException
|
|
||||||
org.apache.http.client.method . . . '' at line number 2
|
|
||||||
`);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加条件
|
* 添加条件
|
||||||
*/
|
*/
|
||||||
|
@ -120,9 +108,9 @@ org.apache.http.client.method . . . '' at line number 2
|
||||||
scriptName: t('apiTestDebug.preconditionScriptName'),
|
scriptName: t('apiTestDebug.preconditionScriptName'),
|
||||||
enableCommonScript: false,
|
enableCommonScript: false,
|
||||||
enable: true,
|
enable: true,
|
||||||
script: scriptEx.value,
|
script: '',
|
||||||
scriptId: '',
|
scriptId: '',
|
||||||
scriptLanguage: RequestConditionScriptLanguage.BEANSHELL,
|
scriptLanguage: LanguageEnum.BEANSHELL,
|
||||||
params: [],
|
params: [],
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -134,7 +122,7 @@ org.apache.http.client.method . . . '' at line number 2
|
||||||
// enable: true,
|
// enable: true,
|
||||||
// sqlSource: {
|
// sqlSource: {
|
||||||
// scriptName: '',
|
// scriptName: '',
|
||||||
// script: scriptEx,
|
// script: '',
|
||||||
// storageType: 'column',
|
// storageType: 'column',
|
||||||
// params: [],
|
// params: [],
|
||||||
// },
|
// },
|
||||||
|
|
|
@ -312,7 +312,7 @@
|
||||||
height="300px"
|
height="300px"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
>
|
>
|
||||||
<template #title>
|
<template #rightTitle>
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<div class="text-[var(--color-text-1)]">
|
<div class="text-[var(--color-text-1)]">
|
||||||
{{ t('apiTestDebug.quickInputParamsTip') }}
|
{{ t('apiTestDebug.quickInputParamsTip') }}
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
:language="currentCodeLanguage"
|
:language="currentCodeLanguage"
|
||||||
>
|
>
|
||||||
<template #title>
|
<template #rightTitle>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<div class="text-[12px] leading-[16px] text-[var(--color-text-4)]">
|
<div class="text-[12px] leading-[16px] text-[var(--color-text-4)]">
|
||||||
{{ t('apiTestDebug.batchAddParamsTip') }}
|
{{ t('apiTestDebug.batchAddParamsTip') }}
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
v-model:model-value="requestVModel.url"
|
v-model:model-value="requestVModel.url"
|
||||||
:max-length="255"
|
:max-length="255"
|
||||||
:placeholder="t('apiTestDebug.urlPlaceholder')"
|
:placeholder="t('apiTestDebug.urlPlaceholder')"
|
||||||
|
allow-clear
|
||||||
@change="handleUrlChange"
|
@change="handleUrlChange"
|
||||||
/>
|
/>
|
||||||
</a-input-group>
|
</a-input-group>
|
||||||
|
@ -49,7 +50,7 @@
|
||||||
<div class="ml-[16px]">
|
<div class="ml-[16px]">
|
||||||
<a-dropdown-button
|
<a-dropdown-button
|
||||||
:button-props="{ loading: requestVModel.executeLoading }"
|
:button-props="{ loading: requestVModel.executeLoading }"
|
||||||
:disabled="requestVModel.executeLoading"
|
:disabled="requestVModel.executeLoading || (isHttpProtocol && !requestVModel.url)"
|
||||||
class="exec-btn"
|
class="exec-btn"
|
||||||
@click="execute"
|
@click="execute"
|
||||||
@select="execute"
|
@select="execute"
|
||||||
|
@ -64,14 +65,26 @@
|
||||||
</a-doption>
|
</a-doption>
|
||||||
</template>
|
</template>
|
||||||
</a-dropdown-button>
|
</a-dropdown-button>
|
||||||
<a-dropdown v-if="props.isDefinition" @select="handleSelect">
|
<a-dropdown
|
||||||
<a-button type="secondary">{{ t('common.save') }}</a-button>
|
v-if="props.isDefinition"
|
||||||
|
:loading="saveLoading || (isHttpProtocol && !requestVModel.url)"
|
||||||
|
@select="handleSelect"
|
||||||
|
>
|
||||||
|
<a-button type="secondary">
|
||||||
|
{{ t('common.save') }}
|
||||||
|
</a-button>
|
||||||
<template #content>
|
<template #content>
|
||||||
<a-doption value="save">{{ t('common.save') }}</a-doption>
|
<a-doption value="save">{{ t('common.save') }}</a-doption>
|
||||||
<a-doption value="saveAsCase">{{ t('apiTestManagement.saveAsCase') }}</a-doption>
|
<a-doption value="saveAsCase">{{ t('apiTestManagement.saveAsCase') }}</a-doption>
|
||||||
</template>
|
</template>
|
||||||
</a-dropdown>
|
</a-dropdown>
|
||||||
<a-button v-else type="secondary" :loading="saveLoading" @click="handleSaveShortcut">
|
<a-button
|
||||||
|
v-else
|
||||||
|
type="secondary"
|
||||||
|
:disabled="isHttpProtocol && !requestVModel.url"
|
||||||
|
:loading="saveLoading"
|
||||||
|
@click="handleSaveShortcut"
|
||||||
|
>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
{{ t('common.save') }}
|
{{ t('common.save') }}
|
||||||
<div class="text-[var(--color-text-4)]">(<icon-command size="14" />+S)</div>
|
<div class="text-[var(--color-text-4)]">(<icon-command size="14" />+S)</div>
|
||||||
|
@ -84,6 +97,7 @@
|
||||||
v-model:model-value="requestVModel.name"
|
v-model:model-value="requestVModel.name"
|
||||||
:max-length="255"
|
:max-length="255"
|
||||||
:placeholder="t('apiTestManagement.apiNamePlaceholder')"
|
:placeholder="t('apiTestManagement.apiNamePlaceholder')"
|
||||||
|
allow-clear
|
||||||
@change="handleActiveDebugChange"
|
@change="handleActiveDebugChange"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -612,7 +626,7 @@
|
||||||
const saveModalVisible = ref(false);
|
const saveModalVisible = ref(false);
|
||||||
const saveModalForm = ref({
|
const saveModalForm = ref({
|
||||||
name: '',
|
name: '',
|
||||||
path: requestVModel.value.url || '',
|
path: requestVModel.value.url,
|
||||||
moduleId: 'root',
|
moduleId: 'root',
|
||||||
});
|
});
|
||||||
const saveModalFormRef = ref<FormInstance>();
|
const saveModalFormRef = ref<FormInstance>();
|
||||||
|
@ -772,6 +786,7 @@
|
||||||
...saveModalForm.value,
|
...saveModalForm.value,
|
||||||
protocol: requestVModel.value.protocol,
|
protocol: requestVModel.value.protocol,
|
||||||
method: isHttpProtocol.value ? requestVModel.value.method : requestVModel.value.protocol,
|
method: isHttpProtocol.value ? requestVModel.value.method : requestVModel.value.protocol,
|
||||||
|
path: requestVModel.value.url || undefined,
|
||||||
});
|
});
|
||||||
requestVModel.value.id = res.id;
|
requestVModel.value.id = res.id;
|
||||||
requestVModel.value.isNew = false;
|
requestVModel.value.isNew = false;
|
||||||
|
@ -779,6 +794,7 @@
|
||||||
requestVModel.value.unSaved = false;
|
requestVModel.value.unSaved = false;
|
||||||
requestVModel.value.name = saveModalForm.value.name;
|
requestVModel.value.name = saveModalForm.value.name;
|
||||||
requestVModel.value.label = saveModalForm.value.name;
|
requestVModel.value.label = saveModalForm.value.name;
|
||||||
|
requestVModel.value.url = saveModalForm.value.path;
|
||||||
saveLoading.value = false;
|
saveLoading.value = false;
|
||||||
saveModalVisible.value = false;
|
saveModalVisible.value = false;
|
||||||
done(true);
|
done(true);
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
:language="responseLanguage"
|
:language="responseLanguage"
|
||||||
theme="vs"
|
theme="vs"
|
||||||
height="100%"
|
height="100%"
|
||||||
:languages="['json', 'html', 'xml', 'plaintext']"
|
:languages="[LanguageEnum.JSON, LanguageEnum.HTML, LanguageEnum.XML, LanguageEnum.PLAINTEXT]"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
:show-theme-change="false"
|
:show-theme-change="false"
|
||||||
show-language-change
|
show-language-change
|
||||||
|
@ -150,6 +150,7 @@
|
||||||
|
|
||||||
import MsButton from '@/components/pure/ms-button/index.vue';
|
import MsButton from '@/components/pure/ms-button/index.vue';
|
||||||
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
||||||
|
import { LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
import MsIcon from '@/components/pure/ms-icon-font/index.vue';
|
import MsIcon from '@/components/pure/ms-icon-font/index.vue';
|
||||||
import type { Direction } from '@/components/pure/ms-split-box/index.vue';
|
import type { Direction } from '@/components/pure/ms-split-box/index.vue';
|
||||||
import MsBaseTable from '@/components/pure/ms-table/base-table.vue';
|
import MsBaseTable from '@/components/pure/ms-table/base-table.vue';
|
||||||
|
@ -246,15 +247,15 @@
|
||||||
const responseLanguage = computed(() => {
|
const responseLanguage = computed(() => {
|
||||||
const { contentType } = props.response.requestResults[0].responseResult;
|
const { contentType } = props.response.requestResults[0].responseResult;
|
||||||
if (contentType.includes('json')) {
|
if (contentType.includes('json')) {
|
||||||
return 'json';
|
return LanguageEnum.JSON;
|
||||||
}
|
}
|
||||||
if (contentType.includes('html')) {
|
if (contentType.includes('html')) {
|
||||||
return 'html';
|
return LanguageEnum.HTML;
|
||||||
}
|
}
|
||||||
if (contentType.includes('xml')) {
|
if (contentType.includes('xml')) {
|
||||||
return 'xml';
|
return LanguageEnum.XML;
|
||||||
}
|
}
|
||||||
return 'plaintext';
|
return LanguageEnum.PLAINTEXT;
|
||||||
});
|
});
|
||||||
const responseEditorRef = ref<InstanceType<typeof MsCodeEditor>>();
|
const responseEditorRef = ref<InstanceType<typeof MsCodeEditor>>();
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
v-model:model-value="curlCode"
|
v-model:model-value="curlCode"
|
||||||
theme="MS-text"
|
theme="MS-text"
|
||||||
height="100%"
|
height="100%"
|
||||||
language="plaintext"
|
:language="LanguageEnum.PLAINTEXT"
|
||||||
:show-theme-change="false"
|
:show-theme-change="false"
|
||||||
:show-full-screen="false"
|
:show-full-screen="false"
|
||||||
>
|
>
|
||||||
|
@ -84,6 +84,7 @@
|
||||||
|
|
||||||
import MsCard from '@/components/pure/ms-card/index.vue';
|
import MsCard from '@/components/pure/ms-card/index.vue';
|
||||||
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
||||||
|
import { LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
import MsDrawer from '@/components/pure/ms-drawer/index.vue';
|
import MsDrawer from '@/components/pure/ms-drawer/index.vue';
|
||||||
import MsEditableTab from '@/components/pure/ms-editable-tab/index.vue';
|
import MsEditableTab from '@/components/pure/ms-editable-tab/index.vue';
|
||||||
import { TabItem } from '@/components/pure/ms-editable-tab/types';
|
import { TabItem } from '@/components/pure/ms-editable-tab/types';
|
||||||
|
|
|
@ -33,8 +33,9 @@ export default {
|
||||||
'apiTestDebug.encodeTip1': 'On: Use encoding',
|
'apiTestDebug.encodeTip1': 'On: Use encoding',
|
||||||
'apiTestDebug.encodeTip2': 'Off: No encoding is used',
|
'apiTestDebug.encodeTip2': 'Off: No encoding is used',
|
||||||
'apiTestDebug.apply': 'Apply',
|
'apiTestDebug.apply': 'Apply',
|
||||||
'apiTestDebug.batchAddParamsTip': 'Writing format: parameter name: parameter value; such as nama: natural',
|
'apiTestDebug.batchAddParamsTip1':
|
||||||
'apiTestDebug.batchAddParamsTip2': 'Multiple records are separated by newlines.',
|
'Writing format: parameter name: parameter value; such as nama:natural, multiple records separated by newline',
|
||||||
|
'apiTestDebug.batchAddParamsTip2': 'Added as string type by default; file type parameters cannot be edited here',
|
||||||
'apiTestDebug.batchAddParamsTip3':
|
'apiTestDebug.batchAddParamsTip3':
|
||||||
'Parameter names in batch addition are repeated. By default, the last data is the latest data.',
|
'Parameter names in batch addition are repeated. By default, the last data is the latest data.',
|
||||||
'apiTestDebug.quickInputParamsTip': 'Support Mock/JMeter/Json/Text/String, etc.',
|
'apiTestDebug.quickInputParamsTip': 'Support Mock/JMeter/Json/Text/String, etc.',
|
||||||
|
|
|
@ -33,8 +33,8 @@ export default {
|
||||||
'apiTestDebug.encodeTip1': '开启:使用编码',
|
'apiTestDebug.encodeTip1': '开启:使用编码',
|
||||||
'apiTestDebug.encodeTip2': '关闭:不使用编码',
|
'apiTestDebug.encodeTip2': '关闭:不使用编码',
|
||||||
'apiTestDebug.apply': '应用',
|
'apiTestDebug.apply': '应用',
|
||||||
'apiTestDebug.batchAddParamsTip': '书写格式:参数名:参数值;如 nama:natural',
|
'apiTestDebug.batchAddParamsTip1': '书写格式:参数名:参数值;如 nama:natural,多条记录以换行分隔',
|
||||||
'apiTestDebug.batchAddParamsTip2': '多条记录以换行分隔;',
|
'apiTestDebug.batchAddParamsTip2': '默认添加为 string 类型;file 类型参数无法在此编辑',
|
||||||
'apiTestDebug.batchAddParamsTip3': '批量添加里的参数名重复,默认以最后一条数据为最新数据',
|
'apiTestDebug.batchAddParamsTip3': '批量添加里的参数名重复,默认以最后一条数据为最新数据',
|
||||||
'apiTestDebug.quickInputParamsTip': '支持Mock/JMeter/Json/Text/String等',
|
'apiTestDebug.quickInputParamsTip': '支持Mock/JMeter/Json/Text/String等',
|
||||||
'apiTestDebug.descPlaceholder': '请输入内容',
|
'apiTestDebug.descPlaceholder': '请输入内容',
|
||||||
|
|
|
@ -77,6 +77,7 @@
|
||||||
|
|
||||||
import MsButton from '@/components/pure/ms-button/index.vue';
|
import MsButton from '@/components/pure/ms-button/index.vue';
|
||||||
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
import MsCodeEditor from '@/components/pure/ms-code-editor/index.vue';
|
||||||
|
import { LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
import MsDrawer from '@/components/pure/ms-drawer/index.vue';
|
import MsDrawer from '@/components/pure/ms-drawer/index.vue';
|
||||||
import MsBaseTable from '@/components/pure/ms-table/base-table.vue';
|
import MsBaseTable from '@/components/pure/ms-table/base-table.vue';
|
||||||
import type { MsTableColumn } from '@/components/pure/ms-table/type';
|
import type { MsTableColumn } from '@/components/pure/ms-table/type';
|
||||||
|
@ -86,7 +87,7 @@
|
||||||
import { getCommonScriptDetail } from '@/api/modules/project-management/commonScript';
|
import { getCommonScriptDetail } from '@/api/modules/project-management/commonScript';
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
import type { AddOrUpdateCommonScript, ParamsRequestType } from '@/models/projectManagement/commonScript';
|
import type { AddOrUpdateCommonScript } from '@/models/projectManagement/commonScript';
|
||||||
import { TableKeyEnum } from '@/enums/tableEnum';
|
import { TableKeyEnum } from '@/enums/tableEnum';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -223,7 +224,7 @@
|
||||||
projectId: '',
|
projectId: '',
|
||||||
params: '',
|
params: '',
|
||||||
script: '',
|
script: '',
|
||||||
type: 'beanshell',
|
type: LanguageEnum.BEANSHELL,
|
||||||
result: '',
|
result: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Language } from '@/components/pure/ms-code-editor/types';
|
import { Language, LanguageEnum } from '@/components/pure/ms-code-editor/types';
|
||||||
|
|
||||||
import { useI18n } from '@/hooks/useI18n';
|
import { useI18n } from '@/hooks/useI18n';
|
||||||
|
|
||||||
|
@ -507,17 +507,17 @@ function jsCode(requestObj) {
|
||||||
|
|
||||||
export function getCodeTemplate(language: Language, requestObj: any) {
|
export function getCodeTemplate(language: Language, requestObj: any) {
|
||||||
switch (language) {
|
switch (language) {
|
||||||
case 'groovy':
|
case LanguageEnum.GROOVY:
|
||||||
return groovyCode(requestObj);
|
return groovyCode(requestObj);
|
||||||
case 'python':
|
case LanguageEnum.PYTHON:
|
||||||
return pythonCode(requestObj);
|
return pythonCode(requestObj);
|
||||||
case 'beanshell':
|
case LanguageEnum.BEANSHELL:
|
||||||
return javaCode(requestObj);
|
return javaCode(requestObj);
|
||||||
case 'nashornScript':
|
case LanguageEnum.NASHORNSCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
case 'rhinoScript':
|
case LanguageEnum.RHINOSCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
case 'javascript':
|
case LanguageEnum.JAVASCRIPT:
|
||||||
return jsCode(requestObj);
|
return jsCode(requestObj);
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
|
|
|
@ -195,7 +195,7 @@
|
||||||
<!-- TODO:代码编辑器懒加载 -->
|
<!-- TODO:代码编辑器懒加载 -->
|
||||||
<div v-show="form.addType === 'multiple'">
|
<div v-show="form.addType === 'multiple'">
|
||||||
<MsCodeEditor v-model:model-value="editorContent" width="100%" height="400px" theme="MS-text">
|
<MsCodeEditor v-model:model-value="editorContent" width="100%" height="400px" theme="MS-text">
|
||||||
<template #title>
|
<template #rightTitle>
|
||||||
<a-form-item
|
<a-form-item
|
||||||
:label="t('system.resourcePool.batchAddResource')"
|
:label="t('system.resourcePool.batchAddResource')"
|
||||||
asterisk-position="end"
|
asterisk-position="end"
|
||||||
|
|
Loading…
Reference in New Issue