From 9e2e0baeff46fb6ecfe21145f7250d67b13ca79e Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期一, 30 十二月 2024 17:35:54 +0800
Subject: [PATCH] 去掉空RecordForm

---
 src/views/model/mpk/file/MpkForm.vue |  183 ++++++++++++++++++++++++++++-----------------
 1 files changed, 115 insertions(+), 68 deletions(-)

diff --git a/src/views/model/mpk/file/MpkForm.vue b/src/views/model/mpk/file/MpkForm.vue
index ab9916f..8dfbae9 100644
--- a/src/views/model/mpk/file/MpkForm.vue
+++ b/src/views/model/mpk/file/MpkForm.vue
@@ -13,8 +13,23 @@
       >
         <el-divider content-position="left">模型信息</el-divider>
         <el-row :gutter="8">
-          <el-col :span="20">
-            <el-form-item label="模型名称" prop="pyName">
+          <el-col :span="12">
+            <el-form-item label="模型类型" prop="pyType">
+              <el-radio-group v-model="formData.pyType" @change="pyTypeChange">
+                <el-radio-button :disabled="actionType == 'edit'"
+                  v-for="dict in getDictOptions(DICT_TYPE.MODEL_TYPE)"
+                  :key="dict.label"
+                  :label="dict.value"
+                >
+                  {{ dict.label }}
+                </el-radio-button>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="8">
+          <el-col :span="12">
+            <el-form-item label="模型文件" prop="pyName">
               <el-input disabled v-model="formData.pyName" placeholder=""/>
             </el-form-item>
           </el-col>
@@ -26,75 +41,90 @@
               :action="importUrl"
               :auto-upload="true"
               :disabled="uploadLoading"
+              v-loading="uploadLoading"
               :before-upload="beforeUpload"
               :headers="uploadHeaders"
               :on-error="submitFormError"
               :on-success="submitFormSuccess"
-              accept=".pyd"
+              accept=".py"
             >
-              <el-button type="primary">
-                <Icon icon="ep:upload"/>
-                模型上传
-              </el-button>
+              <el-tooltip content="上传.py算法文件" placement="top" effect="light">
+                <el-button type="primary">
+                  <Icon icon="ep:upload"/>
+                  模型上传
+                </el-button>
+              </el-tooltip>
             </el-upload>
           </el-col>
         </el-row>
         <el-row :gutter="8">
           <el-col :span="12">
-            <el-form-item label="模型中文名称" prop="pyChineseName">
+            <el-form-item label="模型名称" prop="pyChineseName">
               <el-input v-model="formData.pyChineseName" placeholder=""/>
             </el-form-item>
           </el-col>
+
+        </el-row>
+        <el-row :gutter="8">
           <el-col :span="12">
-            <el-form-item label="模型类型" prop="pyType">
-              <el-select
-                v-model="formData.pyType"
-                placeholder="请选择"
-                @change="pyTypeChange"
-              >
+            <el-form-item label="包名" prop="pkgName">
+              <el-select v-model="formData.pkgName" clearable filterable placeholder="请选择包名">
                 <el-option
-                  v-for="dict in getDictOptions(DICT_TYPE.MODEL_TYPE)"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                />
+                  v-for="item in pkgNameList"
+                  :key="item.packName"
+                  :label="item.packName"
+                  :value="item.packName"
+                >
+                  <span style="float: left">{{ item.packName}}</span>
+                  <span
+                    style="
+                      float: right;
+                      color: var(--el-text-color-secondary);
+                      font-size: 13px;">
+                    {{ item.packDesc}}
+                  </span>
+                </el-option>
               </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="8">
           <el-col :span="12">
-            <el-form-item label="包名" prop="pkgName">
-              <el-input v-model="formData.pkgName" placeholder=""/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="模型路径" prop="pyModule">
-              <el-input v-model="formData.pyModule" placeholder=""/>
+            <el-form-item label="所属目录" prop="menuAndGroup">
+              <el-cascader
+                style="width: 100%;"
+                v-model="formData.menuAndGroup"
+                :options="treeData"
+                @change="handleChange"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="8">
           <el-col :span="12">
-            <el-form-item label="所属菜单" prop="menuName">
-              <el-input v-model="formData.menuName" placeholder=""/>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="所属组" prop="groupName">
-              <el-input v-model="formData.groupName" placeholder=""/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="8">
-          <el-col :span="12">
-            <el-form-item label="icon" prop="icon">
-              <el-input v-model="formData.icon" placeholder=""/>
+            <el-form-item label="图标" prop="icon">
+              <el-select v-model="formData.icon" clearable filterable placeholder="请选择图标">
+                <el-option
+                  v-for="item in iconList"
+                  :key="item.iconName"
+                  :label="item.iconName"
+                  :value="item.iconName"
+                >
+                  <span style="float: left">{{ item.iconName}}</span>
+                  <span
+                      style="
+                      float: right;
+                      color: var(--el-text-color-secondary);
+                      font-size: 13px;">
+                    <img :src="staticDir + 'SimtreeUnitImage/' + item.iconName" style="height: 24px;" :alt=" item.iconDesc" />
+                  </span>
+                </el-option>
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="20">
-          <el-col :span="24">
+          <el-col :span="12">
             <el-form-item label="备注" prop="remark">
               <el-input v-model="formData.remark" placeholder="" type="textarea"/>
             </el-form-item>
@@ -174,27 +204,13 @@
                   <el-table-column align="center" label="参数类型" prop="valueType"/>
                   <el-table-column align="center" label="最大值" prop="max"/>
                   <el-table-column align="center" label="最小值" prop="min"/>
-                  <!--                <el-table-column align="center" label="选项" width="50">-->
-                  <!--                  <template #default="props">-->
-                  <!--                    <div v-if="props.row.type === 'select'">-->
-                  <!--                      <el-popover placement="left" :width="400">-->
-                  <!--                        <template #reference>-->
-                  <!--                          <Icon icon="ep:more" />-->
-                  <!--                        </template>-->
-                  <!--                        <el-table width="50%" :data="props.row.settingSelects" border size="small">-->
-                  <!--                          <el-table-column align="center" label="key" prop="selectKey"/>-->
-                  <!--                          <el-table-column align="center" label="name" prop="name"/>-->
-                  <!--                        </el-table>-->
-                  <!--                      </el-popover>-->
-                  <!--                    </div>-->
-                  <!--                  </template>-->
-                  <!--                </el-table-column>-->
                   <el-table-column label="操作" fixed="right" header-align="center" align="center" width="100">
                     <template #default="scope">
                       <el-button
                         @click="updateSetting(scope.row)"
                         key="danger"
-                        type="danger"
+                        type="primary"
+                        :disabled="scope.row.settingKey === 'pyFile'"
                         link
                       >修改
                       </el-button>
@@ -202,6 +218,7 @@
                         @click="deleteSetting(props.row.methodSettings,scope.$index)"
                         key="danger"
                         type="danger"
+                        :disabled="scope.row.settingKey === 'pyFile'"
                         link
                       >删除
                       </el-button>
@@ -234,8 +251,11 @@
   <SettingForm ref="settingFormRef"/>
 </template>
 <script lang="ts" setup>
-  import {DICT_TYPE, getDictOptions} from '@/utils/dict'
+  import {DICT_TYPE, getDictOptions, getIntDictOptions} from '@/utils/dict'
   import * as MpkApi from '@/api/model/mpk/mpk'
+  import * as MpkIconApi from '@/api/model/mpk/icon'
+  import * as MpkPackApi from '@/api/model/mpk/pack'
+  import * as MpkMenuApi from '@/api/model/mpk/menu'
   import {FormRules} from 'element-plus'
   import {getAccessToken, getTenantId} from "@/utils/auth";
   import SettingForm from './SettingForm.vue'
@@ -244,12 +264,19 @@
   const {t} = useI18n() // 国际化
   const message = useMessage() // 消息弹窗
   const title = ref('') // 弹窗的标题
+  const actionType = ref('') // 操作类型
   const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
   const formType = ref('') // 表单的类型:create - 新增;update - 修改
   const route = useRoute() // 路由
   const router = useRouter();
 
-  /** settingForm弹窗 */
+  const staticDir = ref(import.meta.env.VITE_STATIC_DIR)
+
+  const treeData = ref([])
+  const iconList = ref([] as MpkIconApi.MpkIconVO)
+  const pkgNameList = ref([] as MpkPackApi.MpkPackVO)
+
+/** settingForm弹窗 */
   const settingFormRef = ref()
   // 添加setting
   const addSetting = (methodSettings) => {
@@ -259,6 +286,10 @@
   // 修改setting
   const updateSetting = (info) => {
     settingFormRef.value.open(info)
+  }
+  // 删除setting
+  const deleteSetting = (methodSettings,index) => {
+    methodSettings.splice(index, 1);
   }
 
   const methodExpandedRowKeys = ref([])
@@ -271,7 +302,7 @@
     pyChineseName: undefined,
     pyName: undefined,
     pkgName: undefined,
-    pyType: undefined,
+    pyType: 'predict',
     className: undefined,
     pyModule: undefined,
     icon: undefined,
@@ -280,6 +311,7 @@
     remark: undefined,
     modelMethods: [],
     filePath: undefined,
+    menuAndGroup: [],
   })
 
   const formRules = reactive<FormRules>({
@@ -298,11 +330,11 @@
     className: [
       {required: true, message: '类名不能为空', trigger: 'blur'}
     ],
-    pyModule: [
-      {required: true, message: '模型路径不能为空', trigger: 'blur'}
-    ],
-    menuName: [
+    menuAndGroup: [
       {required: true, message: '所属目录不能为空', trigger: 'blur'}
+    ],
+    icon: [
+      {required: true, message: 'icon不能为空', trigger: 'blur'}
     ],
   })
 
@@ -349,7 +381,7 @@
       pyName: undefined,
       pyChineseName: undefined,
       pkgName: undefined,
-      pyType: undefined,
+      pyType: 'predict',
       className: undefined,
       pyModule: undefined,
       icon: undefined,
@@ -360,6 +392,10 @@
       filePath: undefined
     }
     formRef.value?.resetFields()
+  }
+
+  const handleChange = function () {
+
   }
 
   const addRow = function () {
@@ -401,7 +437,7 @@
     }
     const data = response.data;
     formData.value.filePath = data.filePath
-    formData.value.pyName = data.fileName.replace('.pyd', '')
+    formData.value.pyName = data.fileName
     message.success('上传成功')
     uploadLoading.value = false
   }
@@ -409,18 +445,30 @@
   onMounted(async () => {
     const id = formData.value.id;
     const type = id ? 'edit' : 'create'
+    actionType.value = type
     title.value = t('action.' + type)
     formType.value = type
     resetForm()
+    pyTypeChange()
     // 修改时,设置数据
     if (id) {
       formLoading.value = true
       try {
+        debugger
         formData.value = await MpkApi.getMpk(id)
+        debugger
       } finally {
         formLoading.value = false
       }
     }
+
+    // 加载图标列表
+    iconList.value = await MpkIconApi.getList()
+
+    pkgNameList.value = await MpkPackApi.getList()
+
+    // 加载菜单,分组
+    treeData.value = await MpkMenuApi.getTree()
   })
 
   const pyTypeChange = () => {
@@ -431,7 +479,7 @@
           methodName: 'train',
           dataLength: 1,
           model: 0,
-          resultKey: undefined,
+          resultKey: 'result',
           methodSettings: []
         },
         {
@@ -444,7 +492,6 @@
           methodSettings: []
         }
       ]
-      debugger
     }else {
       formData.value.modelMethods = [
         {

--
Gitblit v1.9.3