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

179 lines
5.0 KiB
Vue
Raw Normal View History

2024-09-15 16:27:31 +08:00
<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 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);
});
} else {
info.jsonData = JSON.parse(res);
}
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
}
}
defineExpose({
checkForm
})
</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>