init : 初始化仓库

This commit is contained in:
2024-08-18 22:21:18 +08:00
commit 934b3b7b74
366 changed files with 55148 additions and 0 deletions

View File

@@ -0,0 +1,293 @@
<template>
<el-steps
v-if="!isSpecial"
style="max-width: 2000px; margin-top: 5px"
:active="4"
simple
align-center
>
<el-step title="查看数据源" />
<el-step title="输入模拟数据作为入参" />
<el-step title="执行代码" />
<el-step title="下方查看结果" />
</el-steps>
<el-form ref="queryForm" class="query-form" :model="queryParams">
<el-row :gutter="20">
<el-col :span="16">
<div class="code-editor">
<java-code-edit
v-if="codeType !== 'JAVA_SCRIPT'"
v-model="codeData"
:editor-placeholder="'请输入Java代码'"
:editor-height="500"
:tab-size="2"
/>
<js-code-edit
v-else
v-model="codeData"
:editor-placeholder="'请输入JavaScript代码'"
:editor-height="500"
:tab-size="2"
/>
</div>
</el-col>
<el-col :span="8">
<el-row>
<el-col :span="12" v-for="(item, index) in mappings">
<el-form-item :label="item.mappingValue + ':'" prop="mappingKey">
<el-input
placeholder="请输入查询参数"
v-model="mappings[index].userInput"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label="查询结果:"
prop="operParam"
class="json-viewer-father"
v-if="isSpecial"
>
<span
class="expand"
@click="
isExpandVisible = true;
expandData = mockData;
"
v-if="isExpandBtnVisible"
>展开</span
>
<div class="json-viewer">
<json-viewer
:value="mockData"
:expand-depth="100"
style="width: 100%; height: 300px"
></json-viewer>
</div>
</el-form-item>
<el-form-item prop="mockData" v-if="!isSpecial">
<el-input
v-model="queryParams.mockData"
placeholder="请输入模拟数据源"
:rows="20"
type="textarea"
clearable
>
</el-input>
</el-form-item>
<el-button type="primary" @click="handleSave">保存代码</el-button>
<el-button type="primary" @click="handleExecute">模拟执行</el-button>
<el-button type="primary" @click="handleSourceData" v-if="!isSpecial"
>查看数据源</el-button
>
<el-button type="primary" @click="handleSourceData" v-if="isSpecial"
>查询数据源</el-button
>
</el-col>
<el-col class="preview-bottom">
<el-row>
<el-col :span="16">
输出
<span
style="color: #49c4ff; cursor: pointer"
@click="
isExpandVisible = true;
expandData = resPreviewData;
"
>展开</span
>
<json-viewer
class="bottom-printf"
:value="resPreviewData"
:expand-depth="105"
copyable
sort
></json-viewer>
</el-col>
<el-col :span="8">
控制台
<el-input
v-model="errorPreviewData"
:rows="10"
style="color: red"
disabled
type="textarea"
clearable
>
</el-input>
</el-col>
</el-row>
</el-col>
</el-row>
</el-form>
<el-dialog title="数据展开" v-model="isExpandVisible">
<json-viewer
:value="expandData"
:expand-depth="100"
style="width: 100%"
></json-viewer
></el-dialog>
</template>
<script setup>
/**
* @author: JimTT
* @description: 适配器设计
*/
import JsonViewer from "vue-json-viewer";
import JavaCodeEdit from "@/components/codeEdit/JavaCodeEdit.vue";
import JsCodeEdit from "@/components/codeEdit/JsCodeEdit.vue";
import { ElMessage } from "element-plus";
import {
getMockData,
getSpecialDetail,
executeCode,
savaCode,
} from "@/api/custom-query/adapter";
import { useRouter } from "vue-router";
const isExpandBtnVisible = ref(false);
const isExpandVisible = ref(false);
const unencryptedPortalId = ref(null);
const mockData = ref();
const codeData = ref(null);
const resPreviewData = ref();
const errorPreviewData = ref();
const expandData = ref(null);
const router = useRouter();
const isSpecial = router.currentRoute.value.query.special;
const portalId = router.currentRoute.value.query.portalId;
const queryParams = ref({});
const mappings = ref([]);
const codeType = ref(null);
// 获取专用适配器详情
const getSpecialDetails = async () => {
const { code, data } = await getSpecialDetail(portalId);
if (code === 1000) {
mappings.value = data.mappings;
unencryptedPortalId.value = data.portalId;
codeData.value = data.dataAdapter.code;
codeType.value = data.dataAdapter.type;
}
};
getSpecialDetails();
// 保存
const handleSave = async () => {
try {
const { code } = await savaCode({
code: codeData.value,
portalId: unencryptedPortalId.value,
});
if (code === 1000) {
ElMessage.success("保存成功");
}
} catch (err) {
console.log(err);
}
};
// 执行
const handleExecute = async () => {
let params = [];
mappings.value.forEach((item) => {
params.push({
key: item.mappingKey,
value: item.userInput,
});
});
let mockParams = {
code: codeData.value,
params,
portalId: unencryptedPortalId.value,
};
try {
const { code, data } = await executeCode(mockParams);
if (code === 1000) {
if (data.success) {
resPreviewData.value = data.result;
errorPreviewData.value = data.console;
} else {
errorPreviewData.value = data.console;
resPreviewData.value = data.result;
}
}
} catch (err) {
console.log(err);
}
};
// 查看资源
const handleSourceData = async () => {
let params = [];
mappings.value.forEach((item) => {
params.push({
key: item.mappingKey,
value: item.userInput,
});
});
const res = await getMockData({
params,
portalId: unencryptedPortalId.value,
});
if (res.code === 1000) {
isExpandBtnVisible.value = true;
mockData.value = res.data;
}
};
</script>
<style scoped lang="scss">
.data-preview {
width: 98%;
margin: 10px auto;
display: flex;
justify-content: space-between;
.copy {
color: #418dff;
cursor: pointer;
}
}
.preview-bottom {
max-height: 255px;
.bottom-preview {
max-height: 255px;
}
.bottom-printf {
max-height: 255px;
overflow-y: auto;
}
}
.json-viewer-father {
position: relative;
.json-viewer {
height: 305px;
overflow: auto;
}
.expand {
display: block;
position: absolute;
color: #49c4ff;
top: 270px;
left: -50px;
z-index: 999;
cursor: pointer;
}
}
::v-deep .v-codemirror .cm-focused {
outline: none;
}
::v-deep .jv-container.jv-light .jv-item.jv-undefined {
display: none;
}
::v-deep .el-textarea.is-disabled .el-textarea__inner {
color: red;
background-color: #fff;
}
</style>