st-comp 0.0.215 → 0.0.217
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/CustomFunction.cjs +8 -1
- package/es/CustomFunction.js +532 -381
- package/es/FactorWarning.cjs +1 -1
- package/es/FactorWarning.js +28 -28
- package/es/Kline.cjs +1 -1
- package/es/Kline.js +10 -10
- package/es/KlineBasic.cjs +1 -1
- package/es/KlineBasic.js +18 -18
- package/es/KlineConfig.cjs +1 -1
- package/es/KlineConfig.js +15 -15
- package/es/KlineNew.cjs +1 -1
- package/es/KlineNew.js +9 -9
- package/es/KlinePlus.cjs +1 -1
- package/es/KlinePlus.js +11 -11
- package/es/Pagination.cjs +1 -1
- package/es/Pagination.js +13 -13
- package/es/PasswordPrompt.cjs +1 -1
- package/es/PasswordPrompt.js +2 -2
- package/es/Table.cjs +1 -1
- package/es/Table.js +29 -29
- package/es/User.cjs +1 -1
- package/es/User.js +18 -18
- package/es/VarSelectDialog.cjs +1 -1
- package/es/VarSelectDialog.js +17 -17
- package/es/VarietyAutoComplete.cjs +1 -1
- package/es/VarietyAutoComplete.js +22 -22
- package/es/VarietySearch.cjs +19 -12
- package/es/VarietySearch.js +1823 -1738
- package/es/VarietyTextCopy.cjs +1 -1
- package/es/VarietyTextCopy.js +9 -9
- package/es/VirtualTable.cjs +1 -1
- package/es/VirtualTable.js +5 -5
- package/es/{_initCloneObject-eaef9418.js → _initCloneObject-4f4401b6.js} +2 -2
- package/es/{_initCloneObject-52b6a510.cjs → _initCloneObject-6429d105.cjs} +1 -1
- package/es/{config-provider-a584d81e.cjs → config-provider-285ead82.cjs} +1 -1
- package/es/{config-provider-b16efd62.js → config-provider-e1736401.js} +3 -3
- package/es/{dropdown-071c5d7e.cjs → dropdown-6ba4a93d.cjs} +1 -1
- package/es/{dropdown-a59bba73.js → dropdown-73ca08ef.js} +2 -2
- package/es/{el-autocomplete-ba808eb6.js → el-autocomplete-2180fc5c.js} +5 -5
- package/es/{el-autocomplete-a07e9439.cjs → el-autocomplete-aeb7da33.cjs} +1 -1
- package/es/{el-button-eec58cff.cjs → el-button-0dbb2d4a.cjs} +1 -1
- package/es/{el-button-c95adb85.js → el-button-e8b725f0.js} +3 -3
- package/es/{el-checkbox-c25236a6.cjs → el-checkbox-b8c558ca.cjs} +1 -1
- package/es/{el-checkbox-7421ccd3.js → el-checkbox-df0def51.js} +3 -3
- package/es/{el-dialog-41ab8417.js → el-dialog-4330c5bd.js} +4 -4
- package/es/{el-dialog-ae86edb8.cjs → el-dialog-5028c704.cjs} +1 -1
- package/es/{el-form-item-c53c374d.js → el-form-item-b816e9f3.js} +5 -5
- package/es/{el-form-item-c3fe189b.cjs → el-form-item-f7e8255e.cjs} +1 -1
- package/es/{el-input-7fd293af.cjs → el-input-2e9268ac.cjs} +1 -1
- package/es/{el-input-2f75c4ba.js → el-input-bd1ce1e9.js} +4 -4
- package/es/{el-input-number-5193fe6d.js → el-input-number-088d2c66.js} +4 -4
- package/es/{el-input-number-22e21d16.cjs → el-input-number-153a3742.cjs} +1 -1
- package/es/{el-loading-cfd86c15.cjs → el-loading-03240202.cjs} +1 -1
- package/es/{el-loading-f6022062.js → el-loading-d0dac75f.js} +1 -1
- package/es/{el-menu-item-17dc717e.cjs → el-menu-item-b843f5ee.cjs} +1 -1
- package/es/{el-menu-item-7e881203.js → el-menu-item-c7202455.js} +4 -4
- package/es/{el-message-e544a8f5.js → el-message-290a93ff.js} +5 -5
- package/es/{el-message-5e6a6be9.cjs → el-message-3d8d9810.cjs} +1 -1
- package/es/{el-message-box-a93d2f6a.js → el-message-box-7a952ec7.js} +9 -9
- package/es/{el-message-box-c10adb52.cjs → el-message-box-aafae7ee.cjs} +1 -1
- package/es/{el-overlay-9e34965f.cjs → el-overlay-ab0b3c66.cjs} +1 -1
- package/es/{el-overlay-09ad71cd.js → el-overlay-f72f3f3d.js} +3 -3
- package/es/{el-popconfirm-70a976bf.cjs → el-popconfirm-a4a50f14.cjs} +1 -1
- package/es/{el-popconfirm-81dcd202.js → el-popconfirm-bdcb65fe.js} +4 -4
- package/es/{el-popper-b4f97157.js → el-popper-b0ef8ed3.js} +1 -1
- package/es/{el-popper-b6c99b28.cjs → el-popper-b37ec1ef.cjs} +1 -1
- package/es/{el-segmented-b868d074.js → el-segmented-d0a61f41.js} +2 -2
- package/es/{el-segmented-f8fce9ac.cjs → el-segmented-f505fd25.cjs} +1 -1
- package/es/{el-select-d8d91db1.cjs → el-select-91145989.cjs} +1 -1
- package/es/{el-select-95627997.js → el-select-d63dc0f6.js} +8 -8
- package/es/{el-table-column-c974cb96.cjs → el-table-column-4dae58f0.cjs} +1 -1
- package/es/{el-table-column-376cd907.js → el-table-column-5ad33084.js} +9 -9
- package/es/{el-tag-66cab138.js → el-tag-2da70fa3.js} +2 -2
- package/es/{el-tag-a33c4b22.cjs → el-tag-891b703d.cjs} +1 -1
- package/es/{el-text-c20a9f48.cjs → el-text-cfd2f326.cjs} +1 -1
- package/es/{el-text-ac60d0f2.js → el-text-d42a3be4.js} +1 -1
- package/es/{index-d91dc23f.js → index-0902dd2e.js} +2 -2
- package/es/{index-1f7d4f70.js → index-23d35abc.js} +1 -1
- package/es/{index-9b9ef5dd.cjs → index-25bc46bb.cjs} +1 -1
- package/es/{index-844bdd85.js → index-5108cae0.js} +2 -2
- package/es/{index-a871c3eb.js → index-598d418b.js} +92 -111
- package/es/{index-c108567d.cjs → index-6c252a43.cjs} +1 -1
- package/es/{index-f967d6c1.cjs → index-7a26fd8b.cjs} +1 -1
- package/es/index-7a85500c.cjs +1 -0
- package/es/{index-57672682.js → index-af3c738f.js} +2 -2
- package/es/{index-e5566b94.js → index-b99c0c42.js} +1 -1
- package/es/{index-88546436.js → index-d6a848ac.js} +2 -2
- package/es/{index-f3562b52.cjs → index-d7928b14.cjs} +1 -1
- package/es/{index-11547a0c.cjs → index-eb3ca89a.cjs} +1 -1
- package/es/{index-298075cf.cjs → index-f50a50b3.cjs} +1 -1
- package/es/style.css +1 -1
- package/es/{use-form-common-props-fd9b61a0.cjs → use-form-common-props-3b387353.cjs} +1 -1
- package/es/{use-form-common-props-815d48a6.js → use-form-common-props-b995a440.js} +12 -12
- package/es/{use-global-config-30d7d8ce.cjs → use-global-config-2a4156cd.cjs} +1 -1
- package/es/{use-global-config-b5e9d3d5.js → use-global-config-e20aee8c.js} +2 -2
- package/es/{validator-764a9db0.js → validator-6d23708b.js} +1 -1
- package/es/{validator-1b8a6128.cjs → validator-7dacff4f.cjs} +1 -1
- package/es/{zh-cn-e963c628.js → zh-cn-7530f035.js} +1 -1
- package/es/{zh-cn-90317f62.cjs → zh-cn-a3c3833a.cjs} +1 -1
- package/lib/bundle.js +1 -1
- package/lib/bundle.umd.cjs +206 -192
- package/lib/{index-5f11e3e4.js → index-aaac0bd7.js} +25107 -24891
- package/lib/{python-e8c63eb9.js → python-7949f78c.js} +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/packages/CustomFunction/components/ManageDialog.vue +779 -0
- package/packages/CustomFunction/index.vue +17 -482
- package/packages/VarietyAutoComplete/index.vue +1 -1
- package/packages/VarietySearch/components/FactorScreen/index.vue +126 -27
- package/es/index-098c2447.cjs +0 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { ref,
|
|
3
|
-
import
|
|
2
|
+
import { ref, inject, onMounted, watch, reactive } from "vue";
|
|
3
|
+
import ManageDialog from "./components/ManageDialog.vue";
|
|
4
4
|
|
|
5
5
|
const { request } = inject("stConfig"); // 组件库全局配置
|
|
6
|
-
const
|
|
7
|
-
const stVarSelectDialogRef = ref(null);
|
|
6
|
+
const ManageDialogRef = ref(null);
|
|
8
7
|
|
|
9
8
|
const emit = defineEmits(["insert"]);
|
|
10
9
|
const props = defineProps({
|
|
@@ -16,22 +15,6 @@ const customFunctionId = ref(null);
|
|
|
16
15
|
const customFunctionName = ref("");
|
|
17
16
|
const customFunctionOptions = ref([]);
|
|
18
17
|
|
|
19
|
-
const visible = ref(false);
|
|
20
|
-
const ruleForm = reactive({
|
|
21
|
-
id: null,
|
|
22
|
-
funcName: "",
|
|
23
|
-
funcExpression: "",
|
|
24
|
-
});
|
|
25
|
-
const submitLoading = ref(false);
|
|
26
|
-
|
|
27
|
-
const testVisible = ref(false);
|
|
28
|
-
const testLoading = ref(false);
|
|
29
|
-
const testResult = reactive({
|
|
30
|
-
result: null,
|
|
31
|
-
detail: "",
|
|
32
|
-
code: "",
|
|
33
|
-
});
|
|
34
|
-
|
|
35
18
|
// 自定义函数: 获取选项
|
|
36
19
|
const getCustomFunctionOptions = async () => {
|
|
37
20
|
const { body } = await request.post("/common/qt/querySearchFunctions");
|
|
@@ -53,56 +36,6 @@ const handleChange = (value) => {
|
|
|
53
36
|
customFunctionId.value = null;
|
|
54
37
|
}
|
|
55
38
|
};
|
|
56
|
-
// 自定义函数: 删除选项
|
|
57
|
-
const handleDelete = async (item) => {
|
|
58
|
-
await request.post("/common/qt/deleteSearchFunctionById", { id: item.id });
|
|
59
|
-
getCustomFunctionOptions();
|
|
60
|
-
};
|
|
61
|
-
// 自定义函数: 新建, 编辑, 复制
|
|
62
|
-
const handleAddOrEdit = (item, isCopy) => {
|
|
63
|
-
switch (Boolean(item)) {
|
|
64
|
-
// 新建
|
|
65
|
-
case false: {
|
|
66
|
-
Object.assign(ruleForm, {
|
|
67
|
-
id: null,
|
|
68
|
-
funcName: "",
|
|
69
|
-
funcExpression: "",
|
|
70
|
-
});
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
// 编辑
|
|
74
|
-
case true: {
|
|
75
|
-
Object.assign(ruleForm, {
|
|
76
|
-
id: item.id,
|
|
77
|
-
funcName: item.funcName,
|
|
78
|
-
funcExpression: item.funcExpression,
|
|
79
|
-
});
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (isCopy) {
|
|
84
|
-
ruleForm.id = null;
|
|
85
|
-
ruleForm.funcName = `${ruleForm.funcName}-复制`;
|
|
86
|
-
}
|
|
87
|
-
visible.value = true;
|
|
88
|
-
};
|
|
89
|
-
// 自定义函数: 保存
|
|
90
|
-
const handleSubmit = async () => {
|
|
91
|
-
try {
|
|
92
|
-
submitLoading.value = true;
|
|
93
|
-
ruleForm.funcExpression = stMonacoEditorRef.value.getValue();
|
|
94
|
-
// 校验
|
|
95
|
-
if (!ruleForm.funcName) return ElMessage.error("函数名称不可为空");
|
|
96
|
-
if (!ruleForm.funcExpression) return ElMessage.error("函数内容不可为空");
|
|
97
|
-
// 调用接口
|
|
98
|
-
await request.post("/common/qt/saveOrUpdateSearchFunction", ruleForm);
|
|
99
|
-
ElMessage.success("操作成功");
|
|
100
|
-
visible.value = false;
|
|
101
|
-
await getCustomFunctionOptions();
|
|
102
|
-
} finally {
|
|
103
|
-
submitLoading.value = false;
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
39
|
// 自定义函数: 插入
|
|
107
40
|
const handleInsert = () => {
|
|
108
41
|
if (!customFunctionName.value) return ElMessage.error("请先选择自定义函数后, 再执行插入");
|
|
@@ -110,179 +43,19 @@ const handleInsert = () => {
|
|
|
110
43
|
emit("insert", funcName, funcExpression);
|
|
111
44
|
};
|
|
112
45
|
|
|
113
|
-
//
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
const matches = [];
|
|
117
|
-
let match;
|
|
118
|
-
|
|
119
|
-
while ((match = regex.exec(expression)) !== null) {
|
|
120
|
-
matches.push(match[1]);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return [...new Set(matches)];
|
|
124
|
-
};
|
|
125
|
-
// 替换函数变量
|
|
126
|
-
const replaceVariables = (expression, variableValues) => {
|
|
127
|
-
return expression.replace(/\$\{([^}]*)\}/g, (match, variableName) => {
|
|
128
|
-
return variableValues[variableName] !== undefined ? variableValues[variableName] : match;
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
// 生成函数变量key和value的输入框
|
|
132
|
-
const showVariableInputDialog = (variables) => {
|
|
133
|
-
return new Promise((resolve) => {
|
|
134
|
-
const formData = ref(
|
|
135
|
-
variables.reduce((obj, variable) => {
|
|
136
|
-
obj[variable] = "";
|
|
137
|
-
return obj;
|
|
138
|
-
}, {})
|
|
139
|
-
);
|
|
140
|
-
const errors = ref({});
|
|
141
|
-
|
|
142
|
-
// 验证函数
|
|
143
|
-
const validateForm = () => {
|
|
144
|
-
let isValid = true;
|
|
145
|
-
const newErrors = {};
|
|
146
|
-
|
|
147
|
-
variables.forEach((variable) => {
|
|
148
|
-
if (!formData.value[variable]?.trim()) {
|
|
149
|
-
newErrors[variable] = `请输入${variable}的值`;
|
|
150
|
-
isValid = false;
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
errors.value = newErrors;
|
|
155
|
-
return isValid;
|
|
156
|
-
};
|
|
157
|
-
// h语法表单组件
|
|
158
|
-
const FormComponent = {
|
|
159
|
-
setup() {
|
|
160
|
-
return () =>
|
|
161
|
-
h("div", [
|
|
162
|
-
h(
|
|
163
|
-
ElForm,
|
|
164
|
-
{
|
|
165
|
-
model: formData.value,
|
|
166
|
-
},
|
|
167
|
-
() =>
|
|
168
|
-
variables.map((variable) =>
|
|
169
|
-
h(
|
|
170
|
-
ElFormItem,
|
|
171
|
-
{
|
|
172
|
-
label: `${variable}: `,
|
|
173
|
-
prop: variable,
|
|
174
|
-
error: errors.value[variable],
|
|
175
|
-
"label-width": "90px",
|
|
176
|
-
},
|
|
177
|
-
() =>
|
|
178
|
-
h(ElInput, {
|
|
179
|
-
modelValue: formData.value[variable],
|
|
180
|
-
"onUpdate:modelValue": (val) => {
|
|
181
|
-
formData.value[variable] = val;
|
|
182
|
-
// 清除错误状态
|
|
183
|
-
if (errors.value[variable]) delete errors.value[variable];
|
|
184
|
-
},
|
|
185
|
-
placeholder: `请输入 ${variable} 的值`,
|
|
186
|
-
status: errors.value[variable] ? "error" : "",
|
|
187
|
-
})
|
|
188
|
-
)
|
|
189
|
-
)
|
|
190
|
-
),
|
|
191
|
-
]);
|
|
192
|
-
},
|
|
193
|
-
};
|
|
194
|
-
ElMessageBox({
|
|
195
|
-
title: "填写变量值用于接口测试",
|
|
196
|
-
message: h(FormComponent),
|
|
197
|
-
showCancelButton: true,
|
|
198
|
-
confirmButtonText: "确定",
|
|
199
|
-
cancelButtonText: "取消",
|
|
200
|
-
customClass: "variable-input-dialog",
|
|
201
|
-
beforeClose: async (action, instance, done) => {
|
|
202
|
-
if (action !== "confirm") {
|
|
203
|
-
resolve(false);
|
|
204
|
-
done();
|
|
205
|
-
}
|
|
206
|
-
await nextTick();
|
|
207
|
-
if (validateForm()) {
|
|
208
|
-
resolve({ ...formData.value });
|
|
209
|
-
done();
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
}).catch(() => resolve(false));
|
|
213
|
-
});
|
|
214
|
-
};
|
|
215
|
-
// 自定义函数: 测试
|
|
216
|
-
const handleTest = async () => {
|
|
217
|
-
try {
|
|
218
|
-
testLoading.value = true;
|
|
219
|
-
let testContent = stMonacoEditorRef.value.getValue();
|
|
220
|
-
if (!testContent) return ElMessage.error("函数内容不可为空");
|
|
221
|
-
// 检测函数中是否使用的变量语法, 如果包含, 需要用户二次输入对应的值, 将其替换后进行测试
|
|
222
|
-
if (/\$\{[^}]*\}/.test(testContent)) {
|
|
223
|
-
const variables = extractVariables(testContent);
|
|
224
|
-
const variableValues = await showVariableInputDialog(variables);
|
|
225
|
-
if (!variableValues) return;
|
|
226
|
-
testContent = replaceVariables(testContent, variableValues);
|
|
227
|
-
}
|
|
228
|
-
// 调用接口
|
|
229
|
-
const { body } = await request.post("/common/qt/testFactorSelect", { factorSelectExpr: testContent });
|
|
230
|
-
const { result, detail } = body;
|
|
231
|
-
Object.assign(testResult, { result, detail, code: testContent });
|
|
232
|
-
if (result === 1) {
|
|
233
|
-
ElMessage.success("测试通过");
|
|
234
|
-
} else {
|
|
235
|
-
ElMessage.error("测试未能通过");
|
|
236
|
-
testVisible.value = true;
|
|
237
|
-
}
|
|
238
|
-
} finally {
|
|
239
|
-
testLoading.value = false;
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
// 自定义函数: 日志明细
|
|
243
|
-
const handleTestLog = () => {
|
|
244
|
-
if (testResult.result === null) {
|
|
245
|
-
return ElMessage.warning("请先进行测试, 等待测试完成后可查看日志");
|
|
246
|
-
}
|
|
247
|
-
testVisible.value = true;
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
// 变量选择器: 打开
|
|
251
|
-
const handleOpenVarSelectDialog = () => {
|
|
252
|
-
stVarSelectDialogRef.value.open(stMonacoEditorRef.value);
|
|
46
|
+
// 窗口: 函数管理
|
|
47
|
+
const handleOpenManageDialog = () => {
|
|
48
|
+
ManageDialogRef.value.open();
|
|
253
49
|
};
|
|
254
50
|
|
|
255
51
|
onMounted(() => {
|
|
256
52
|
getCustomFunctionOptions();
|
|
257
53
|
});
|
|
258
|
-
watch(
|
|
259
|
-
() => visible.value,
|
|
260
|
-
(newValue) => {
|
|
261
|
-
switch (newValue) {
|
|
262
|
-
case true: {
|
|
263
|
-
nextTick(() => {
|
|
264
|
-
stMonacoEditorRef.value?.setValue(ruleForm.funcExpression);
|
|
265
|
-
stMonacoEditorRef.value?.resize();
|
|
266
|
-
});
|
|
267
|
-
// 重置测试结果
|
|
268
|
-
Object.assign(testResult, {
|
|
269
|
-
result: null,
|
|
270
|
-
detail: "",
|
|
271
|
-
});
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
case false: {
|
|
275
|
-
stVarSelectDialogRef.value.close();
|
|
276
|
-
break;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
);
|
|
281
54
|
</script>
|
|
282
55
|
|
|
283
56
|
<template>
|
|
284
57
|
<div class="custom-function">
|
|
285
|
-
<!--
|
|
58
|
+
<!-- 选择框 -->
|
|
286
59
|
<el-select
|
|
287
60
|
v-model="customFunctionName"
|
|
288
61
|
:size="size"
|
|
@@ -303,28 +76,10 @@ watch(
|
|
|
303
76
|
>
|
|
304
77
|
<div class="func-option">
|
|
305
78
|
<span>{{ item.funcName }}</span>
|
|
306
|
-
<div class="icons">
|
|
307
|
-
<el-icon @click.stop="handleAddOrEdit(item, true)">
|
|
308
|
-
<DocumentCopy />
|
|
309
|
-
</el-icon>
|
|
310
|
-
<el-icon @click.stop="handleAddOrEdit(item)">
|
|
311
|
-
<Edit />
|
|
312
|
-
</el-icon>
|
|
313
|
-
<el-popconfirm
|
|
314
|
-
:title="`确认是否删除?`"
|
|
315
|
-
confirm-button-text="确认"
|
|
316
|
-
cancel-button-text="取消"
|
|
317
|
-
@confirm="handleDelete(item)"
|
|
318
|
-
>
|
|
319
|
-
<template #reference>
|
|
320
|
-
<el-icon @click.stop="() => {}"> <Delete /> </el-icon>
|
|
321
|
-
</template>
|
|
322
|
-
</el-popconfirm>
|
|
323
|
-
</div>
|
|
324
79
|
</div>
|
|
325
80
|
</el-option>
|
|
326
81
|
</el-select>
|
|
327
|
-
<!--
|
|
82
|
+
<!-- 插入 -->
|
|
328
83
|
<el-button
|
|
329
84
|
type="primary"
|
|
330
85
|
:size="size"
|
|
@@ -332,148 +87,21 @@ watch(
|
|
|
332
87
|
>
|
|
333
88
|
插入
|
|
334
89
|
</el-button>
|
|
335
|
-
<!--
|
|
90
|
+
<!-- 管理 -->
|
|
336
91
|
<el-button
|
|
337
92
|
type="primary"
|
|
338
93
|
:size="size"
|
|
339
|
-
@click="
|
|
94
|
+
@click="handleOpenManageDialog()"
|
|
340
95
|
>
|
|
341
|
-
|
|
96
|
+
函数管理
|
|
342
97
|
</el-button>
|
|
343
98
|
|
|
344
|
-
<!-- 窗口:
|
|
345
|
-
<
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
append-to-body
|
|
351
|
-
draggable
|
|
352
|
-
overflow
|
|
353
|
-
:modal="false"
|
|
354
|
-
:modal-penetrable="true"
|
|
355
|
-
:show-close="false"
|
|
356
|
-
>
|
|
357
|
-
<template #header="{ titleId, titleClass }">
|
|
358
|
-
<div class="custom-header">
|
|
359
|
-
<div class="left">
|
|
360
|
-
<span
|
|
361
|
-
:id="titleId"
|
|
362
|
-
:class="titleClass"
|
|
363
|
-
>
|
|
364
|
-
{{ ruleForm.id ? "编辑自定义函数" : "新建自定义函数" }}
|
|
365
|
-
</span>
|
|
366
|
-
</div>
|
|
367
|
-
<!-- 变量选择器 + 关闭 -->
|
|
368
|
-
<div class="right">
|
|
369
|
-
<el-button
|
|
370
|
-
size="small"
|
|
371
|
-
type="primary"
|
|
372
|
-
@click="handleOpenVarSelectDialog"
|
|
373
|
-
>
|
|
374
|
-
变量选择器
|
|
375
|
-
</el-button>
|
|
376
|
-
<el-icon @click="visible = false"><Close /></el-icon>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
</template>
|
|
380
|
-
<!-- 函数名称 + 测试 -->
|
|
381
|
-
<div class="func-name">
|
|
382
|
-
<div class="left">
|
|
383
|
-
<span>函数名称:</span>
|
|
384
|
-
<el-input v-model="ruleForm.funcName" />
|
|
385
|
-
</div>
|
|
386
|
-
<div class="right">
|
|
387
|
-
<el-button
|
|
388
|
-
type="primary"
|
|
389
|
-
:loading="testLoading"
|
|
390
|
-
@click="handleTest"
|
|
391
|
-
>
|
|
392
|
-
测试
|
|
393
|
-
</el-button>
|
|
394
|
-
<el-button
|
|
395
|
-
:icon="Document"
|
|
396
|
-
@click="handleTestLog"
|
|
397
|
-
>
|
|
398
|
-
日志明细
|
|
399
|
-
</el-button>
|
|
400
|
-
</div>
|
|
401
|
-
</div>
|
|
402
|
-
<!-- 注意事项 -->
|
|
403
|
-
<div class="tip-box">Tip: 公式里可以使用变量, 变量名命名格式: ${变量名}, 后续可在应用函数时填写具体值, 系统会自动换算</div>
|
|
404
|
-
<!-- 内容 -->
|
|
405
|
-
<st-monacoEditor
|
|
406
|
-
ref="stMonacoEditorRef"
|
|
407
|
-
:language="'lua'"
|
|
408
|
-
style="width: 968px; height: 400px"
|
|
409
|
-
/>
|
|
410
|
-
<!-- 底部 -->
|
|
411
|
-
<template #footer>
|
|
412
|
-
<div class="dialog-footer">
|
|
413
|
-
<el-button
|
|
414
|
-
type="primary"
|
|
415
|
-
:loading="submitLoading"
|
|
416
|
-
@click="handleSubmit"
|
|
417
|
-
>
|
|
418
|
-
确定
|
|
419
|
-
</el-button>
|
|
420
|
-
</div>
|
|
421
|
-
</template>
|
|
422
|
-
</el-dialog>
|
|
423
|
-
<!-- 窗口: 日志明细 -->
|
|
424
|
-
<el-dialog
|
|
425
|
-
modal-class="log-dialog"
|
|
426
|
-
v-model="testVisible"
|
|
427
|
-
width="830"
|
|
428
|
-
align-center
|
|
429
|
-
append-to-body
|
|
430
|
-
draggable
|
|
431
|
-
overflow
|
|
432
|
-
:modal="false"
|
|
433
|
-
:modal-penetrable="true"
|
|
434
|
-
:show-close="false"
|
|
435
|
-
>
|
|
436
|
-
<template #header="{ titleId, titleClass }">
|
|
437
|
-
<div class="custom-header">
|
|
438
|
-
<div class="left">
|
|
439
|
-
<span
|
|
440
|
-
:id="titleId"
|
|
441
|
-
:class="titleClass"
|
|
442
|
-
>
|
|
443
|
-
日志明细
|
|
444
|
-
</span>
|
|
445
|
-
</div>
|
|
446
|
-
<!-- 关闭 -->
|
|
447
|
-
<div class="right">
|
|
448
|
-
<el-icon @click="testVisible = false"><Close /></el-icon>
|
|
449
|
-
</div>
|
|
450
|
-
</div>
|
|
451
|
-
</template>
|
|
452
|
-
<div class="content">
|
|
453
|
-
<!-- 代码 -->
|
|
454
|
-
<el-scrollbar
|
|
455
|
-
class="code"
|
|
456
|
-
height="600px"
|
|
457
|
-
>
|
|
458
|
-
<pre>{{ testResult.code }}</pre>
|
|
459
|
-
</el-scrollbar>
|
|
460
|
-
<!-- 分割线 -->
|
|
461
|
-
<el-divider direction="vertical" />
|
|
462
|
-
<!-- 日志 -->
|
|
463
|
-
<el-scrollbar height="600px">
|
|
464
|
-
<pre :class="testResult.result === 1 ? 'success-log' : 'error-log'">{{ testResult.result === 1 ? "测试通过 √" : testResult.detail }}</pre>
|
|
465
|
-
</el-scrollbar>
|
|
466
|
-
</div>
|
|
467
|
-
<!-- 底部 -->
|
|
468
|
-
<template #footer>
|
|
469
|
-
<div class="dialog-footer">
|
|
470
|
-
<el-button @click="testVisible = false"> 关闭 </el-button>
|
|
471
|
-
</div>
|
|
472
|
-
</template>
|
|
473
|
-
</el-dialog>
|
|
474
|
-
|
|
475
|
-
<!-- 变量选择器 -->
|
|
476
|
-
<st-varSelectDialog ref="stVarSelectDialogRef" />
|
|
99
|
+
<!-- 窗口: 函数管理 -->
|
|
100
|
+
<ManageDialog
|
|
101
|
+
ref="ManageDialogRef"
|
|
102
|
+
:data="customFunctionOptions"
|
|
103
|
+
@refreshData="getCustomFunctionOptions"
|
|
104
|
+
/>
|
|
477
105
|
</div>
|
|
478
106
|
</template>
|
|
479
107
|
|
|
@@ -503,96 +131,6 @@ watch(
|
|
|
503
131
|
align-items: center;
|
|
504
132
|
justify-content: space-between;
|
|
505
133
|
gap: 10px;
|
|
506
|
-
.icons {
|
|
507
|
-
display: flex;
|
|
508
|
-
align-items: center;
|
|
509
|
-
gap: 10px;
|
|
510
|
-
.el-icon {
|
|
511
|
-
cursor: pointer;
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
.tip-box {
|
|
516
|
-
box-sizing: border-box;
|
|
517
|
-
padding: 4px 0 4px 8px;
|
|
518
|
-
margin-bottom: 4px;
|
|
519
|
-
border-left: 6px solid var(--el-color-info);
|
|
520
|
-
background-color: var(--el-color-info-light-5);
|
|
521
|
-
}
|
|
522
|
-
.add-or-edit-dialog {
|
|
523
|
-
.custom-header {
|
|
524
|
-
display: flex;
|
|
525
|
-
align-items: center;
|
|
526
|
-
justify-content: space-between;
|
|
527
|
-
.left,
|
|
528
|
-
.right {
|
|
529
|
-
display: flex;
|
|
530
|
-
align-items: center;
|
|
531
|
-
gap: 10px;
|
|
532
|
-
}
|
|
533
|
-
.el-icon {
|
|
534
|
-
cursor: pointer;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
.func-name {
|
|
538
|
-
display: flex;
|
|
539
|
-
align-items: center;
|
|
540
|
-
justify-content: space-between;
|
|
541
|
-
margin-bottom: 10px;
|
|
542
|
-
.left {
|
|
543
|
-
display: flex;
|
|
544
|
-
align-items: center;
|
|
545
|
-
gap: 10px;
|
|
546
|
-
.el-input {
|
|
547
|
-
width: 300px;
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
.log-dialog {
|
|
553
|
-
.custom-header {
|
|
554
|
-
display: flex;
|
|
555
|
-
align-items: center;
|
|
556
|
-
justify-content: space-between;
|
|
557
|
-
.left,
|
|
558
|
-
.right {
|
|
559
|
-
display: flex;
|
|
560
|
-
align-items: center;
|
|
561
|
-
gap: 10px;
|
|
562
|
-
}
|
|
563
|
-
.el-icon {
|
|
564
|
-
cursor: pointer;
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
.content {
|
|
568
|
-
display: flex;
|
|
569
|
-
background-color: var(--el-color-black);
|
|
570
|
-
.el-scrollbar {
|
|
571
|
-
flex: 1;
|
|
572
|
-
box-sizing: border-box;
|
|
573
|
-
padding: 8px;
|
|
574
|
-
}
|
|
575
|
-
.el-divider {
|
|
576
|
-
margin: 0;
|
|
577
|
-
height: 616px;
|
|
578
|
-
}
|
|
579
|
-
.code {
|
|
580
|
-
color: var(--el-color-info);
|
|
581
|
-
}
|
|
582
|
-
.success-log {
|
|
583
|
-
color: var(--el-color-success);
|
|
584
|
-
}
|
|
585
|
-
.error-log {
|
|
586
|
-
color: var(--el-color-danger);
|
|
587
|
-
}
|
|
588
|
-
pre {
|
|
589
|
-
margin: 0;
|
|
590
|
-
line-height: 1.5;
|
|
591
|
-
white-space: pre-wrap;
|
|
592
|
-
word-break: break-all;
|
|
593
|
-
word-wrap: break-word;
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
134
|
}
|
|
597
135
|
</style>
|
|
598
136
|
|
|
@@ -603,7 +141,4 @@ watch(
|
|
|
603
141
|
transform: translateX(-50%) !important;
|
|
604
142
|
z-index: 10000 !important;
|
|
605
143
|
}
|
|
606
|
-
.variable-input-dialog {
|
|
607
|
-
width: 360px;
|
|
608
|
-
}
|
|
609
144
|
</style>
|
|
@@ -26,7 +26,7 @@ const fetchSuggestions = async (value, callback) => {
|
|
|
26
26
|
userId: getUserData("id"),
|
|
27
27
|
hotSearchFlag: 1,
|
|
28
28
|
};
|
|
29
|
-
const { body } = await stConfig.request.post("/common/qt/
|
|
29
|
+
const { body } = await stConfig.request.post("/common/qt/quickSearch", params);
|
|
30
30
|
const result = body.list.map(({ code, featureName }) => ({
|
|
31
31
|
label: `${code}\xa0\xa0\xa0${featureName}`,
|
|
32
32
|
value: code,
|