提交代码

main
姜玉琦 2024-07-19 00:17:05 +08:00
parent 6e7ab962f2
commit 45ce30d5d0
6 changed files with 344 additions and 44 deletions

View File

@ -278,7 +278,7 @@ class MenuAPI {
meta: {
title: "算子程序管理",
icon: "oper",
hidden: false,
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,

View File

@ -16,6 +16,14 @@ const addTool=(data)=>{
data:data
});
}
//创建第三方工具链的参数
const addToolParams=(data)=>{
return request({
url: `/tool_chains/params`,
method: "post",
data:data
});
}
//获取第三方工具链的详细参数
const paramsInfo=(id)=>{
return request({
@ -45,6 +53,13 @@ const deleteTool=(id)=>{
method: "delete"
});
}
//删除第三方工具链的参数
const deleteToolParams=(id)=>{
return request({
url: `/tool_chains/params/${id}`,
method: "delete"
});
}
//获取第三方工具链的工作状态列表
const toolChains=(id)=>{
return request({
@ -64,10 +79,12 @@ const editTool=(id,data)=>{
export default {
paramsList,
addTool,
addToolParams,
paramsInfo,
toolStatusList,
unregistedList,
deleteTool,
deleteToolParams,
toolChains,
editTool
}

View File

@ -45,7 +45,7 @@
<el-table-column label="算子子类型" align="left" prop="oper_sub_type_name" width="180" />
<el-table-column label="算子说明" align="left" prop="operator_desc" />
<el-table-column label="创建时间" width="180" align="left" prop="create_time" />
<el-table-column label="操作" fixed="right" align="center" width="220">
<el-table-column label="操作" fixed="right" align="center" width="280">
<template #default="scope">
<el-button
text
@ -57,6 +57,9 @@
<el-button text type="primary" size="small" @click="handleDelete(scope.row.operator_id)"
><i-ep-delete />删除</el-button
>
<el-button text type="primary" size="small" @click="handlePushParams(scope.row)"
><i-ep-plus />添加算子程序</el-button
>
</template>
</el-table-column>
</el-table>
@ -69,11 +72,13 @@
@pagination="handleQuery"
/>
</el-card>
<paramDialog ref="paramDialogRef"></paramDialog>
</div>
</template>
<script setup lang="ts">
import OperatorApi from '@/api/operator'
import paramDialog from "../calculateParam/dialog.vue";
const router = useRouter();
@ -90,6 +95,7 @@ const queryParams = reactive({
operator_name:null,
oper_main_type:null
});
const paramDialogRef = ref(""); //
/** 查询 */
function handleQuery() {
@ -134,6 +140,11 @@ function handleDelete(id?: number) {
});
}
/** 添加算子程序 */
function handlePushParams(data){
paramDialogRef.value.show(data);
}
/** 查看算子 */
function handleDetail(operator_id?: number) {
router.push({path:"/operatorLibrary/calculateDetail",query:{id:operator_id}})

View File

@ -9,16 +9,34 @@
style="width: 20px; height: 20px"
/></template
>
<el-row>
<el-col :lg="12" :xs="24">
<el-form ref="formRef" v-loading="loading" label-width="100px" size="small">
<el-form ref="formRef" v-loading="loading" label-width="100px" size="small">
<el-row>
<el-col :span="24">
<el-form-item label="算子名称">{{ dataInfo.operator_name }}</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="算子主类型">
{{ dataInfo.oper_main_type_name }}</el-form-item
>
</el-col>
<el-col :span="12">
<el-form-item label="算子子类型">
{{ dataInfo.oper_sub_type_name }}</el-form-item
>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="创建人"> {{ dataInfo.user_name }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="创建时间"> {{ dataInfo.create_time }}</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="算子说明">
<el-input
v-model="dataInfo.operator_desc"
@ -28,39 +46,82 @@
type="textarea"
/>
</el-form-item>
<el-form-item label="创建人"> {{ dataInfo.user_name }}</el-form-item>
<el-form-item label="创建时间"> {{ dataInfo.create_time }}</el-form-item>
<el-form-item label="算子参数">
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="输入参数">
<el-input
v-model="dataInfo.parametersJson"
v-model="dataInfo.parametersInputs"
:disabled="true"
placeholder="请输入算子参数"
:rows="10"
placeholder="请填写输入参数"
:rows="8"
type="textarea"
/>
</el-form-item>
<!-- <el-form-item label="输出参数" prop="nickname33">
</el-col>
<el-col :span="12">
<el-form-item label="输出参数">
<el-input
v-model="dataInfo.usernamedd3"
v-model="dataInfo.parametersOutputs"
:disabled="true"
placeholder="请输入数据集名称"
:rows="3"
placeholder="请填写输出参数"
:rows="8"
type="textarea"
/>
</el-form-item> -->
</el-form>
</el-col>
<el-col :lg="12" :xs="24"> </el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-row style="padding: 10px 15px">
<el-col :lg="24" :xs="24">
<el-button type="primary" @click="handlePushParams"
><i-ep-plus />添加算子程序</el-button
>
<el-button type="primary" @click="handleDownloadPs"
><i-ep-download />文件例程下载</el-button
>
</el-col>
</el-row>
<el-card style="padding-bottom: 50px;">
<template #header
><svg-icon
icon-class="pause"
style="width: 20px; height: 20px"
/></template
>
<el-table :data="pageData" stripe v-loading="tableLoading">
<el-table-column label="程序适应硬件" align="left" prop="cmpt_hardware_type" />
<el-table-column label="程序版本" align="left" prop="program_version" />
<el-table-column label="创建时间" align="left" prop="create_time" />
<el-table-column label="上传用户" align="left" prop="user_name" />
<el-table-column label="操作" fixed="right" align="center">
<template #default="scope">
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"
><i-ep-delete />删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.page_num"
v-model:limit="queryParams.page_size"
@pagination="handleQuery"
/>
</el-card>
<el-card class="card-footer">
<el-button @click="closeBack"><i-ep-close /> </el-button>
</el-card>
<paramDialog ref="paramDialogRef"></paramDialog>
</div>
</template>
<script setup lang="ts">
import OperatorApi from "@/api/operator";
import paramDialog from "../calculateParam/dialog.vue";
const route = useRoute();
const router = useRouter();
@ -68,19 +129,70 @@ const loading = ref(false); // 加载状态
//
const dataInfo = ref({});
const queryParams = reactive({
page_num: 1,
page_size: 10,
operation_id: null,
});
const total = ref(0); //
const pageData = ref([]); //
const tableLoading = ref(false); //
const paramDialogRef = ref(""); //
/** 返回默认页面 */
function closeBack() {
router.push({ path: "/operatorLibrary/calculate" });
}
/** 删除算子程序 */
function handleDelete(program_id) {
ElMessageBox.confirm("确认删除算子程序?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(function () {
OperatorApi.deletePrograms(program_id).then((res) => {
ElMessage.success("删除成功");
handleQuery();
});
});
}
/** 查询算子程序 */
function handleQuery() {
tableLoading.value = true;
OperatorApi.getPrograms(queryParams)
.then((res) => {
pageData.value = res.data.data.program_list;
total.value = res.data.data.total;
})
.finally(() => {
tableLoading.value = false;
});
}
/** 添加算子程序 */
function handlePushParams(){
paramDialogRef.value.show(dataInfo.value);
}
/** 文件例程下载 */
function handleDownloadPs(){
ElMessage.error("【error】待提供");
}
/** 初始化数据 */
function initData() {
let id = route.query.id;
loading.value = true;
queryParams.operation_id = id;
handleQuery();
OperatorApi.findOne(id)
.then((res) => {
//JSON
res.data.data.parametersJson = JSON.stringify(res.data.data.parameters);
let parameters = res.data.data.parameters;
res.data.data.parametersInputs = JSON.stringify(parameters.inputs);
res.data.data.parametersOutputs = JSON.stringify(parameters.outputs);
dataInfo.value = res.data.data;
})
.finally(() => {

View File

@ -0,0 +1,154 @@
<template>
<div>
<el-dialog
:title="title"
v-model="open"
:loading="loading"
width="880px"
append-to-body
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="算子名称">
{{ form.operator_name }}
</el-form-item>
<el-form-item label="算子类型">
{{ form.oper_main_type_name
}}<el-tag effect="plain">
{{ form.oper_sub_type_name }}
</el-tag>
</el-form-item>
<el-form-item label="适配硬件" prop="cmpt_hardware_type">
<el-select
v-model="form.cmpt_hardware_type"
placeholder="请选择适配硬件类型"
style="width: 100%"
>
<el-option v-for="item in listOpt" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="程序版本" prop="program_version">
<el-input
v-model="form.program_version"
type="number"
placeholder="请输入程序版本"
/>
</el-form-item>
<el-form-item label="程序文件" prop="program_file_name">
<el-upload
v-model:file-list="fileList"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
ref="uploadRef"
class="upload-demo"
:on-exceed="handleFileExceed"
:on-change="handleFileChange"
:auto-upload="false"
:limit="1"
accept="application/x-tar"
>
<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">tar</strong> 的文件
</div>
</template>
</el-upload>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleSubmit"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="calculateParam">
import ConstApi from "@/api/const";
import OperatorApi from "@/api/operator";
const open = ref(false); //
const form = ref({}); //
const title = ref("添加算子程序"); //
const formRef = ref(ElForm); //
const loading = ref(false); //
const fileList = ref([]); //
const uploadRef = ref(""); //
//
let listOpt = ref([]);
//
const rules = reactive({
cmpt_hardware_type: [
{ required: true, message: "适配硬件不能为空", trigger: "change" },
],
program_version: [{ required: true, message: "程序版本不能为空", trigger: "blur" }],
program_file_name: [{ required: true, message: "程序文件不能为空", trigger: "blur" }],
});
/** 表单提交 */
const handleSubmit = useThrottleFn(() => {
formRef.value.validate((valid) => {
if (valid) {
loading.value = true;
OperatorApi.addPrograms(form)
.then((res) => {
if (res.data.code == 0) {
ElMessage.success("保存成功");
cancel();
}
})
.finally(() => {
loading.value = false;
});
}
});
}, 3000);
//
function handleFileChange(file) {
formRef.value.validateField("program_file_name");
}
//
function handleFileExceed() {
ElMessage.warning("已达到上传文件限制,请删除后继续上传!");
}
/** 返回默认页面 */
function cancel() {
open.value = false;
}
//
const initPageData = () => {
ConstApi.cmptHardwareType().then((res) => {
listOpt.value = res.data.data.cmpt_hardware_type_list || [];
});
};
/** 页面初始化 */
function show(data) {
initPageData();
form.value.operator_id = data.operator_id;
form.value.operator_name = data.operator_name;
form.value.oper_main_type_name = data.oper_main_type_name;
form.value.oper_sub_type_name = data.oper_sub_type_name;
open.value = true;
}
/** 子组件默认包含是私有 */
defineExpose({
show,
});
</script>
<style scoped lang="scss">
.el-tag--plain {
margin-left: 10px;
}
</style>

View File

@ -13,10 +13,7 @@
<el-row>
<el-col :lg="12" :xs="12">
<el-form-item label="工具链名称" prop="tool_name">
<el-input
v-model="baseForm.tool_name"
placeholder="请输入工具链名称"
/>
<el-input v-model="baseForm.tool_name" placeholder="请输入工具链名称" />
</el-form-item>
</el-col>
<el-col :lg="12" :xs="12">
@ -95,7 +92,7 @@
>
</el-col>
</el-row>
<el-card v-loading="loading">
<el-card v-loading="loading" style="padding-bottom: 50px;">
<template #header
><svg-icon
icon-class="pause"
@ -105,7 +102,7 @@
<el-table :data="pageData" style="width: 100%" stripe v-loading="queryLoading">
<el-table-column prop="params_name" label="运行参数名称" align="left" />
<el-table-column prop="params_desc" label="运行参数描述" align="left" />
<el-table-column prop="params_desc1" label="匹配模型网络名称" align="left" />
<el-table-column prop="modl_sub_type_name" label="适用模型类型" align="left" />
<el-table-column prop="user_name" label="创建用户" align="left" />
<el-table-column prop="create_time" label="创建时间" align="left" />
<el-table-column label="操作" fixed="right" align="center">
@ -197,8 +194,15 @@
v-loading="infoLoading"
>
<el-form label-width="108px">
<el-form-item label="适用模型类型">
{{dataInfo.modl_sub_type_name}}
</el-form-item>
<el-form-item label="运行参数名称">
<el-input v-model="dataInfo.params_name" disabled placeholder="请输入运行参数名称" />
<el-input
v-model="dataInfo.params_name"
disabled
placeholder="请输入运行参数名称"
/>
</el-form-item>
<el-form-item label="运行参数描述">
<el-input
@ -298,7 +302,7 @@ const handleSubmit = useThrottleFn(() => {
baseFormRef.value.validate((valid: any) => {
if (valid) {
loading.value = true;
ToolChainshApi.editTool(baseForm.tool_id,baseForm)
ToolChainshApi.editTool(baseForm.tool_id, baseForm)
.then((res) => {
if (res.data.code == 0) {
ElMessage.success("修改成功");
@ -317,17 +321,17 @@ const handleSubmitFile = useThrottleFn(() => {
formRef.value.validate((valid: any) => {
if (valid) {
ElMessage.error("缺少接口");
// formLoading.value = true;
// ToolChainshApi.editTool(baseForm.tool_id,baseForm)
// .then((res) => {
// if (res.data.code == 0) {
// ElMessage.success("");
// closeBack();
// }
// })
// .finally(() => {
// formLoading.value = false;
// });
formLoading.value = true;
ToolChainshApi.addToolParams(form)
.then((res) => {
if (res.data.code == 0) {
ElMessage.success("修改成功");
closeBack();
}
})
.finally(() => {
formLoading.value = false;
});
}
});
}, 3000);
@ -434,9 +438,11 @@ function handleDelete(row: { [key: string]: any }) {
cancelButtonText: "取消",
type: "warning",
}).then(function () {
ToolChainshApi.deleteTool(row.tool_id).then((res) => {
ElMessage.error("缺少接口");
handleQuery();
ToolChainshApi.deleteToolParams(row.params_id).then((res) => {
if (res.data.code == 0) {
ElMessage.success("删除运行参数成功");
handleQuery();
}
});
});
}
@ -453,7 +459,7 @@ function initData() {
.finally(() => {
loading.value = false;
});
handleQuery();
handleQuery();
}
/** 查询运行参数列表 */