AIManage/src/views/simulationEvaluation/components/addStep3.vue

191 lines
5.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-card style="margin-top:12px" class="simulation-add-add-step31">
<template #header>已选择模型</template>
<el-row class="model-info">
<el-col :span="8">
<span>模型名称:</span>
<span>{{ modelInfo.model_name }}</span>
</el-col>
<el-col :span="8">
<span>模型类型:</span>
<span>{{ modelInfo.modl_net_type }}</span>
</el-col>
<el-col :span="8">
<span>互联名称:</span>
<span>{{ modelInfo.connection_name }}</span>
</el-col>
</el-row>
<div class="param-file">
<span class="sp-label">推理参数文件:</span>
<span class="sp-form">
<el-upload ref="uploadRef" class="upload-demo upload-demo-1" :on-change="handleFileChange"
:on-remove="handleFileRemove" :on-exceed="handleFileExceed" :auto-upload="false" :limit="1"
accept="application/json">
<el-button type="primary"><el-icon class="el-icon--upload"> <i-ep-upload-filled />
</el-icon></el-button>
<template #tip>
<div class="el-upload__tip">
请上传大小不超过 <strong style="color: red">10M</strong>格式为
<strong style="color: red">json</strong> 的文件
</div>
</template>
</el-upload>
<JsonEditorVue v-if="info.file" class="json-editor" v-model="info.jsonData" :modeList="['code']"
language="zh-CN" :expanded-on-start="true" @change="updateJson"></JsonEditorVue>
</span>
</div>
</el-card>
</template>
<script setup>
import 'jsoneditor'
import JsonEditorVue from 'json-editor-vue3'
const emit = defineEmits(["change"]);
const info = reactive({
jsonData: {},
file: null
})
const props = defineProps({
modelInfo: {
type: Object,
require: true,
default: null,
},
});
const uploadRef = ref();
function handleFileChange(file) {
if (typeof FileReader === "undefined") {
this.$message({
type: "info",
message: "您的浏览器不支持文件读取。",
});
return;
}
uploadFile(file).then((res) => {
if (isJSON(res, true)) {
if (info.file) {
ElMessageBox.confirm("确认是替换当前编辑的内容?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(function () {
info.jsonData = JSON.parse(res);
emit("change",info.jsonData)
});
} else {
info.jsonData = JSON.parse(res);
emit("change",info.jsonData)
}
info.file = file;
uploadRef.value.clearFiles();
}
});
}
/** 解析json */
function isJSON(str, showMsg) {
try {
// 尝试解析输入的字符串
JSON.parse(str);
if (showMsg) {
ElMessage.success("JSON文件解析成功");
}
return true;
// 成功解析
} catch (error) {
// 解析失败
if (showMsg) {
ElMessage.error("JSON文件解析失败");
}
return false;
}
}
function updateJson(val) {
info.jsonData = val;
}
// 文件读取
function uploadFile(file) {
return new Promise(function (resolve, reject) {
let reader = new FileReader();
reader.readAsArrayBuffer(file.raw);
reader.onload = function (e) {
var ints = new Uint8Array(e.target.result); //要使用读取的内容所以将读取内容转化成Uint8Array
let snippets = new TextDecoder("UTF-8").decode(ints); //二进制缓存区内容转化成中文(即也就是读取到的内容)
resolve(snippets);
};
});
}
function handleFileRemove() {
debugger
}
function handleFileExceed() {
}
function checkForm() {
if (info.file) {
return info.jsonData
} else {
ElMessage.error("请选择推理参数文件!");
return null
}
}
const returnData = (d) => {
if(d){
info.jsonData=d;
info.file=true;
}
}
defineExpose({
checkForm,
returnData
})
</script>
<style lang="scss" scoped>
.model-info {
font-size: 12px;
color: #666;
}
</style>
<style lang="scss">
.simulation-add-add-step31 {
.param-file {
margin-top: 20px;
display: flex;
.sp-label {
display: block;
width: 120px;
font-weight: bold;
color: #666;
font-size: 16px;
}
.sp-form {
display: block;
flex-grow: 1;
}
.json-editor {
height: 45vh;
.jsoneditor-modes {
display: none;
}
.full-screen {
right: 10px !important;
}
.jsoneditor-poweredBy {
display: none;
}
.jsoneditor-menu {
background-color: #409eff;
}
}
}
}
</style>