Pārlūkot izejas kodu

Merge branch 'master' of http://39.98.38.2:13000/dumingliang/sh-model-platform

ZhuDeKang 6 mēneši atpakaļ
vecāks
revīzija
15301a4c3a

+ 34 - 1
ruoyi-ui/src/api/register/regCom.js

@@ -46,7 +46,13 @@ export function getModelFile(data) {
 export function getModelDetail(id) {
   return request.get(`/model/info/${id}`);
 }
-
+// export function getModelDetail(data) {
+//   return request({
+//     url: "/model/params/allList",
+//     method: 'get',
+//     params:data
+//   });
+// }
 export function updateModel(data) {
   return request({
     url: '/model/info',
@@ -54,3 +60,30 @@ export function updateModel(data) {
     data: data
   })
 }
+export function getParamsList(query) {
+  return request({
+    url: '/model/params/allList',
+    method: 'get',
+    params: query
+  })
+}
+export function changePar(data) {
+  return request({
+    url: "/model/params/addList",
+    method: 'post',
+    data:data
+  });
+}
+export function delAllPar(id) {
+  return request({
+    url: '/model/params/' + id,
+    method: 'delete'
+  })
+}
+export function getModelParList(query) {
+  return request({
+    url: '/model/pargroup/allList',
+    method: 'get',
+    params: query
+  })
+}

BIN
ruoyi-ui/src/assets/images/backDia.jpg


+ 0 - 1
ruoyi-ui/src/utils/request.js

@@ -148,5 +148,4 @@ export function download(url, params, filename, config) {
     downloadLoadingInstance.close();
   })
 }
-
 export default service

+ 340 - 71
ruoyi-ui/src/views/register/componentReg/index.vue

@@ -1,22 +1,23 @@
 <template>
   <div style="width: 100%;padding-top: 1%;" :style="{'height':heightAll+'px'}">
     <div style="display: flex;width: 100%;margin-left: 1%;justify-content: space-between;">
-      <div style="display: flex;width: 40%;">
+      <div style="display: flex;width: 35%;">
         <div style="display: flex;width: 100%;align-items: center;">
             <div>
                 模型名称:
             </div>
             <el-input v-model="name" style="width:50%;margin-left: 1%;" placeholder="" />
         </div>
-        <div style="display: flex;width: 100%;align-items: center;margin-left: 1%;">
+        <div style="display: flex;width: 100%;align-items: center;margin-left:-15%;">
             <div>
-                提供单位:
+                模型归属单位:
             </div>
             <el-input v-model="mdUnit" style="width: 50%;margin-left: 1%;" placeholder="" />
         </div>
+        <el-button type="primary" style="margin-left: -10%;" @click="getModelListTable" :icon="Search">查询</el-button>
       </div>
         <div style="display: flex;align-items: center;margin-right: 3%;">
-            <el-button type="primary" style="margin-left: 5%;" @click="getModelListTable" :icon="Search">查询</el-button>
+            
             <el-button type="primary" style="margin-left:5%;" @click="reg" icon="Plus">注册</el-button>
         </div>
     </div>
@@ -28,41 +29,31 @@
         :header-cell-style="{height: heightAll*0.01+'px',}"
         :row-style="{ fontSize: '16px',textAlign:'center'}"
         border >
-        <el-table-column type="index" label="序号" width="80"></el-table-column>
-        <el-table-column prop="name" label="模型名称">
-
+        <el-table-column type="index" label="序号" width="80">
+          <template #default="{ $index }">
+            <div style="text-align: center;">
+              {{ $index + 1 }}
+            </div>
+          </template>
         </el-table-column>
-        <el-table-column prop="className" label="模型类型" width="160"/>
-        <el-table-column prop="mdUnit" label="开发语言" width="160"/>
-        <el-table-column prop="registrant" label="部署环境" width="100"/>
-        <el-table-column prop="status" label="测试状态" width="140">
-            <template #default="scope">
-              <el-button v-if="scope.row.st1=='1'" type="success" plain>测试完成</el-button>
-              <el-button v-if="scope.row.st1=='2'" type="danger" plain>测试失败</el-button>
-              <el-button v-if="scope.row.st1=='3'" type="" plain>不支持</el-button>
-            </template>
+        <el-table-column prop="name" label="模型名称">
         </el-table-column>
-        <el-table-column prop="st1" label="开发单位" width="140">
-            <template #default="scope">
-              <el-button v-if="scope.row.st2=='1'" type="success" plain>测试完成</el-button>
-              <el-button v-if="scope.row.st2=='2'" type="danger" plain>测试失败</el-button>
-              <el-button v-if="scope.row.st2=='3'" type="" plain>暂无评价</el-button>
-            </template>
+        <el-table-column prop="enname" label="英文名称">
         </el-table-column>
-        <el-table-column prop="isApproved" label="是否发布" width="140">
-            <template #default="scope">
-              <el-button v-if="scope.row.st3=='1'" type="success" plain>已发布</el-button>
-              <el-button v-if="scope.row.st3=='2'" type="danger" plain>未发布</el-button>
-            </template>
+        <el-table-column prop="className" label="模型类型" width="160"/>
+        <el-table-column prop="mdUnit" label="模型单位" width="160"/>
+        <el-table-column prop="mdContact" label="联系方式" width="100"/>
+        <el-table-column prop="status" label="模型状态" width="140">
         </el-table-column>
         <el-table-column prop="modifyBy" label="发布时间" width="170"/>
         <el-table-column prop="version" label="版本" width="120"/>
-        <el-table-column prop="address" label="操作" width="200">
+        <el-table-column prop="address" label="操作" width="250">
             <template #default="scope">
                 <div style="display: flex;justify-content: space-between;width: 100%;">
                     <el-button type="primary" @click="showEdit(scope.row)" size="mini" text style="margin-left: 0%;">编辑</el-button>
                     <!-- <el-button type="danger" text size="mini" style="margin-left: -5%;" @click="handleDelete(scope.row)">注销</el-button> -->
                     <el-button @click="showDe(scope.row)" type="primary" text size="mini" style="margin-left: 0%;">查看</el-button>
+                    <el-button @click="showPei(scope.row)" type="warning" text size="mini" style="margin-left: 0%;">配置</el-button>
                     <el-button type="danger" @click="delModel(scope.row)" text size="mini" style="margin-left: 0%;">删除</el-button>
                 </div>
             </template>
@@ -100,28 +91,32 @@
                   </el-row>
                   <el-row :gutter="48">
                     <el-col :span="8">
-                      <el-form-item label="接口分类:" prop="" style="">
+                      <el-form-item label="模型类型:" prop="" style="">
                         <div style="display: flex;width: 100%;justify-content: space-between;">
-                          <el-select
-                          v-model="formJi.type"
-                          
-                              style="width: 100%;margin-left: 0%;"
-                          >
-                              <el-option
-                              v-for="item in optionsType"
-                              :key="item.value"
-                              :label="item.label"
-                              :value="item.value"
-                              />
-                          </el-select>
+                          <el-input placeholder="如水利模型、排水模型、供水模型、海洋模型" v-model="formJi.type" style="width: 100%;" resize="none"/>
                         </div>
                       </el-form-item>
                     </el-col>
                   </el-row>
                   <el-row :gutter="48">
-                    <el-col :span="8">
+                    <el-col :span="24">
                       <el-form-item label="开发语言:">
-                          <el-input  v-model="formJi.devlang" style="width: 100%;" resize="none"/>
+                          <el-radio-group v-model="formJi.devlang" class="custom-radio-group" style="width: 100%;">
+                            <el-radio label="java" size="large">java</el-radio>
+                            <el-radio label="nodeJs" size="large">nodeJs</el-radio>
+                            <el-radio label="python" size="large">python</el-radio>
+                            <el-radio label="c/c++" size="large">c/c++</el-radio>
+                            <el-radio label="1" size="large">
+                              <div class="custom-input-wrapper">
+                                <span>其它</span>
+                                <el-input 
+                                  v-model="elseLan"
+                                  class="underline-input"
+                                  v-show="isElse"
+                                />
+                              </div>
+                            </el-radio>
+                            </el-radio-group>
                       </el-form-item>
                     </el-col>
                   </el-row>
@@ -143,7 +138,7 @@
               <el-form size="mini" :key="tableKey" style="margin-top: 0%;width: 98%;"  :model="formJi" label-position="right"  label-width="120px" :rules="rulesJi">
                 <el-row :gutter="48">
                       <el-col :span="11">
-                        <el-form-item label="提供单位:" prop="" style="">
+                        <el-form-item label="模型归属单位:" prop="" style="">
                             <div style="display: flex;width: 100%;justify-content: space-between;">
                               <el-input  v-model="formJi.mdUnit" style="width: 100%;"/>
                             </div>
@@ -282,7 +277,7 @@
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
-                          <el-form-item label="CPU核数:" prop="" style="">
+                          <el-form-item label="CPU核数:" prop="" style="">
                             <div style="display: flex;width: 100%;" >
                                 <el-input-number
                                   v-model="formJi.envCpuNum"
@@ -437,8 +432,8 @@
             </span>
             </template>
         </el-dialog>
-        <el-dialog  v-model="dialogVisibleDe" title="" width="50%" @close="" destroy-on-close :key="tableKey">
-          <el-descriptions title="基本信息" :column="3" style="margin-top: 0%;margin-left: 1%;">
+        <el-dialog  v-model="dialogVisibleDe" title="" width="50%" @close="" destroy-on-close class="custom-dialog-bg">
+          <el-descriptions title="基本信息" :column="3" style="margin-top: 0%;margin-left: 1%;background: transparent;">
             <el-descriptions-item label="模型名称:">{{formJi.name}}</el-descriptions-item>
             <el-descriptions-item label="英文名:">{{formJi.enname}}</el-descriptions-item>
             <el-descriptions-item label="版本号:">{{formJi.version}}</el-descriptions-item>
@@ -447,8 +442,8 @@
             <el-descriptions-item label="简介:" span="3">{{formJi.intro}}</el-descriptions-item>
           </el-descriptions>
           <el-divider style="margin-top: 0%;"/>
-          <el-descriptions title="单位" :column="2" style="margin-top: 1%;margin-left: 1%;">
-            <el-descriptions-item label="提供单位:">{{formJi.mdUnit}}</el-descriptions-item>
+          <el-descriptions title="单位" :column="2" style="margin-top: 1%;margin-left: 1%;background-color: transparent;">
+            <el-descriptions-item label="模型归属单位:">{{formJi.mdUnit}}</el-descriptions-item>
             <el-descriptions-item label="联系方式:">{{formJi.mdContact}}</el-descriptions-item>
             <el-descriptions-item label="技术支持单位:">{{formJi.devUnit}}</el-descriptions-item>
             <el-descriptions-item label="联系方式:">{{formJi.devContact}}</el-descriptions-item>
@@ -456,18 +451,18 @@
           <el-tabs
             v-model="activeName"
             type="card"
-            style="margin-top: 1%;"
+            style="margin-top: 1%;background-color: transparent;"
           >
-            <el-tab-pane label="部署情况" name="first">
-              <el-descriptions title="" :column="2" style="margin-top: 0%;margin-left: 1%;">
-                <el-descriptions-item label="服务器IP:">{{formJi.deployIp}}</el-descriptions-item>
+            <el-tab-pane label="部署情况" name="first" style="background-color: transparent;">
+              <el-descriptions title="" :column="3" style="margin-top: 0%;margin-left: 1%;background-color: transparent;">
+                <el-descriptions-item label="服务器IP:" span="2">{{formJi.deployIp}}</el-descriptions-item>
                 <el-descriptions-item label="端口:">{{formJi.deployPort}}</el-descriptions-item>
-                <el-descriptions-item label="部署位置:">{{formJi.deployDir}}</el-descriptions-item>
+                <el-descriptions-item label="部署位置:" span="2">{{formJi.deployDir}}</el-descriptions-item>
                 <el-descriptions-item label="服务访问地址:">{{formJi.mirrorImageUrl}}</el-descriptions-item>
-                <el-descriptions-item label="服务器运行命令:">{{formJi.mdRunCmd}}</el-descriptions-item>
-                <el-descriptions-item label="操作系统:">{{formJi.envOs}}</el-descriptions-item>
-                <el-descriptions-item label="运行架构:">{{formJi.evnArmX86}}</el-descriptions-item>
-                <el-descriptions-item label="硬盘:">
+                <el-descriptions-item label="服务器运行命令:" span="3">{{formJi.mdRunCmd}}</el-descriptions-item>
+                <el-descriptions-item label="操作系统:" span="2">{{formJi.envOs}}</el-descriptions-item>
+                <el-descriptions-item label="运行架构:" span="3">{{formJi.evnArmX86}}</el-descriptions-item>
+                <el-descriptions-item label="硬盘:" span="">
                   {{formJi.envDisk + 'G'}}
                 </el-descriptions-item>
                 <el-descriptions-item label="CPU核心数:">
@@ -487,27 +482,137 @@
             </el-tab-pane>
             <el-tab-pane label="输入" name="second">
               <el-descriptions title="" :column="2" style="margin-top: 0%;margin-left: 1%;">
-                <el-descriptions-item label="输入文档:">
-                  
+                <el-descriptions-item label="输入文档:" span="2">
+                  <el-link type="primary"  @click="downIn">{{formJi.mdInName}}</el-link>
                 </el-descriptions-item>
                 <el-descriptions-item label="说明:">{{formJi.mdInNote}}</el-descriptions-item>
               </el-descriptions>
             </el-tab-pane>
             <el-tab-pane label="输出" name="third">
               <el-descriptions title="" :column="2" style="margin-top: 0%;margin-left: 1%;">
-                <el-descriptions-item label="输出文档:">
-                  
+                <el-descriptions-item label="输出文档:" span="2">
+                  <el-link type="primary" @click="downOut">{{formJi.mdOutName}}</el-link>
                 </el-descriptions-item>
                 <el-descriptions-item label="说明:">{{formJi.mdOutNote}}</el-descriptions-item>
               </el-descriptions>
             </el-tab-pane>
           </el-tabs>
         </el-dialog>
+        <el-dialog  @close="clearForm" v-model="dialogVisiblePei" width="70%" title="参数配置">
+          <el-tabs v-model="activeName" type="border-card">
+            <el-tab-pane label="基本信息" name="first">
+              <el-descriptions title="" :column="3" style="margin-top: 0%;margin-left: 1%;background: transparent;">
+                <el-descriptions-item label="模型名称:">{{formJi.name}}</el-descriptions-item>
+                <el-descriptions-item label="英文名:">{{formJi.enname}}</el-descriptions-item>
+                <el-descriptions-item label="版本号:">{{formJi.version}}</el-descriptions-item>
+                <el-descriptions-item label="接口分类:">{{formJi.type}}</el-descriptions-item>
+                <el-descriptions-item label="开发语言:"  span="2">{{formJi.devlang}}</el-descriptions-item>
+                <el-descriptions-item label="简介:" span="3">{{formJi.intro}}</el-descriptions-item>
+              </el-descriptions>
+              <el-divider style="margin-top: 0%;"/>
+              <el-descriptions title="" :column="2" style="margin-top: 1%;margin-left: 1%;background-color: transparent;">
+                <el-descriptions-item label="模型归属单位:">{{formJi.mdUnit}}</el-descriptions-item>
+                <el-descriptions-item label="联系方式:">{{formJi.mdContact}}</el-descriptions-item>
+                <el-descriptions-item label="技术支持单位:">{{formJi.devUnit}}</el-descriptions-item>
+                <el-descriptions-item label="联系方式:">{{formJi.devContact}}</el-descriptions-item>
+              </el-descriptions>
+            </el-tab-pane>
+            <el-tab-pane label="模型参数" style="height: 50vh;">
+              <div style="display: flex;justify-content: space-between;margin-right: 2%;align-items: center;">
+                <div style="display: flex;align-items: center;">
+                  <el-checkbox v-model="checked1" label="参数是否分组" size="large"  />
+                  <el-button  @click="addCan" style="margin-left: 10%;" type="success" size="mini" plain v-if="checked1">新增分组</el-button>
+                </div>
+                <div style="display: flex;justify-content: flex-end;margin-right: 1%;">
+                  <el-button  @click="addCan" style="margin-left: 5%;" type="success" size="mini" plain>新增参数</el-button>
+                  <el-button  @click="delAllCan" style="margin-top: 0%;" type="danger" size="mini" plain>删除</el-button>
+                </div>
+              </div>
+              <div style="display: flex;">
+              <div v-show="checked1" style="flex:1;margin-top:1%;width: 10%;background-color: #F2F6FC;height:45vh;">
+               <el-tree   :expand-on-click-node="false" ref="treeRef" :filter-node-method="filterNode" :current-node-key="currentNodeKey" class="treeLeft" :data="groupTreeData" @node-click="handleNodeClick" node-key="id" style="margin-top: 10%;background-color: transparent;" default-expand-all :key="valueKet">
+                  
+              </el-tree>
+              </div>
+              <div style="width: 90%;flex: 1;">
+                <el-table 
+              style="margin-top: 1%;width: 100%;margin-left: 1%;"
+              :data="tableDataCan" 
+              :cell-style="{ textAlign: 'center',padding:'3px 0px' }"
+              :header-cell-style="{ textAlign: 'center', }"
+              :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center'  }"
+              border >
+                  <el-table-column prop="parName" label="*参数英文名">
+                    <template #default="scope" style="width: 120%;">
+                        <el-input  v-model="scope.row.parEnname" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parName" label="*参数名称">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parName" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parType" label="*参数类型" >
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parType" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parLine" label="行号">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parLine" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="维度">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parDimen" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="表达式">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parExpr" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="*默认值">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parDefVal" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="参数范围">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parRange" style="width: 120%;margin-left: -10%;"/>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="版本号">
+                    <template #default="scope">
+                        <el-input  v-model="scope.row.parVersion" style="width: 120%;margin-left: -10%;"/>
+                    </template> 
+                  </el-table-column>
+                  <el-table-column prop="parNote" label="操作" width="85">
+                    <template #default="scope">
+                        <el-button type="danger" @click="delCan(scope.$index)" text size="mini" style="margin-left: 0%;">删除</el-button>
+                    </template> 
+                  </el-table-column>
+              </el-table>
+              </div>
+              </div>
+            </el-tab-pane>
+            <el-tab-pane label="模型状态">Role</el-tab-pane>
+            <el-tab-pane label="Task">Task</el-tab-pane>
+          </el-tabs>
+          <template #footer>
+          <span class="dialog-footer">
+              <el-button @click="dialogVisiblePei = false">取消</el-button>
+              <el-button type="primary" @click="saveChangePar">
+                提交
+              </el-button>
+          </span>
+          </template>
+        </el-dialog >
     </div>
   </div>
 </template>
 <script   setup>
-import { getModelList,addModel,delMdid,getModelDetail,updateModel,modelFile } from "@/api/register/regCom";
+import { getModelList,addModel,delMdid,getModelDetail,updateModel,modelFile,getParamsList,changePar,delAllPar,getModelParList } from "@/api/register/regCom";
 import { ref, onMounted, onUnmounted, nextTick } from 'vue';
 import { Search } from '@element-plus/icons-vue'
 import {
@@ -524,12 +629,16 @@ const { proxy } = getCurrentInstance();
 const dragTableRef = ref()
 const dialogVisible = ref(false)
 const dialogVisibleDe = ref(false)
+const dialogVisiblePei = ref(false)
 const active = ref(0)
 const isEdit = ref(true)
 const name = ref('')
 const isAdd = ref(true)
 const mdUnit = ref('')
-
+const isElse = ref(false)
+const elseLan = ref('')
+const tableDataCan = ref([])
+const groupTreeData = ref([])
 const formJi = ref({
   name:'',
   version:'',
@@ -548,11 +657,11 @@ const formJi = ref({
   mdRunCmd:'',
   envOs:'',
   envDisk:'',
-  envGpuMem:'',
+  envGpuMem:'11',
   evnArmX86:'',
   envCpuNum:'',
   envGpuType:'',
-  envGpuNum:'',
+  envGpuNum:'2',
   envMem:'',
   mdInNote:'',
   mdOutNote:''
@@ -603,6 +712,7 @@ const tableData3 = ref([
   { date1:'水库', date2:'', date3:'single', date4:'基于水文响应' },
   { date1:'雨量站', date2:'', date3:'single', date4:'基于水文响应' }
 ]);
+const checked1 = ref(false)
 const tableData1= [{date1:'初始状态',
   date2:'sts',
   date3:'数据项',
@@ -691,17 +801,89 @@ const handleChange = (file, files) => {
 const handleChange1 = (file, files) => {
   fileList1.value = files;
 };
+function delAllCan(){
+  
+  proxy.$modal.confirm('是否确认删除所有参数?').then(function () {
+    return delAllPar(parForm.value.mdid);
+  }).then(() => {
+    tableDataCan.value = []
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+function saveChangePar(){
+  tableDataCan.value.forEach((item, index, array) => { 
+      item.mdid = parForm.value.mdid
+      item.parGroup = 'def'
+      item.parCate = 'int'
+  })
+  changePar(tableDataCan.value).then(res=>{
+    if(res.code===200){
+      proxy.$modal.msgSuccess("修改成功");
+      dialogVisiblePei.value = false
+      getModelListTable()
+    }
+  })
+}
+async function showPei(row){
+  dialogVisiblePei.value = true
+  var par = {
+    mdid:row.mdid
+  }
+  await getModelParList(par).then(res=>{
+    groupTreeData.value = res.data
+    groupTreeData.value.forEach((item, index, array) => { 
+      item.label = item.parGroupName
+      item.value = item.parGroupCode
+    })
+  })
+  await getModelDetail(row.mdid).then(res=>{
+    parForm.value = res.data
+    formJi.value = res.data
+  })
+  
+  await getParamsList(par).then(res=>{
+    tableDataCan.value = res.data
+  }) 
+  
+}
+function delCan(index){
+  tableDataCan.value.splice(index, 1)
+}
 function showDe(row){
   dialogVisibleDe.value = true
   getModelDetail(row.mdid).then(res=>{
     parForm.value = res.data
     formJi.value = res.data
+    if(formJi.value.devlang!=='java'&&formJi.value.devlang!=='nodeJs'&&formJi.value.devlang!=='python'&&formJi.value.devlang!=='c/c++'){
+      isElse.value = true
+      formJi.value.devlang = 1
+    }
   })
 }
+function addCan(){
+  tableDataCan.value.push({
+    mdid:parForm.value.mdid
+  })
+}
+function downOut(){
+  var url = window.location.host + formJi.value.mdOutFile
+  console.log(url)
+  const link = document.createElement('a');
+  link.href = 'http://' + url.toString();
+  link.download = formJi.value.mdOutName; // 自定义文件名(可选)
+  document.body.appendChild(link);
+  link.click();
+  document.body.removeChild(link);
+}
 function downIn(){
-  var url = formJi.value.mdInName
+  var url = window.location.host + formJi.value.mdInFile
   console.log(url)
-  proxy.download(url,formJi.value.mdInFile);
+  const link = document.createElement('a');
+  link.href = 'http://' + url.toString();
+  link.download = formJi.value.mdInName; // 自定义文件名(可选)
+  document.body.appendChild(link);
+  link.click();
+  document.body.removeChild(link);
 }
 function delModel(row){
   proxy.$modal.confirm('是否确认删除?').then(function () {
@@ -717,25 +899,30 @@ async function showEdit(row){
   await nextTick()
   getModelDetail(row.mdid).then(res=>{
     formJi.value = res.data
+    if(formJi.value.devlang!=='java'&&formJi.value.devlang!=='nodeJs'&&formJi.value.devlang!=='python'&&formJi.value.devlang!=='c/c++'){
+      console.log(formJi.value.devlang)
+      isElse.value = true
+      formJi.value.devlang = '1'
+    }
   })
 }
 async function subEdit(){
   if(fileList.value.length>0&&fileList1.value.length===0){
-    console.log(1)
     await proxy.$refs["uploadRef"].submit();
   }
   else if(fileList.value.length>0&&fileList.value.length===0){
-    console.log(11)
     await proxy.$refs["uploadRef1"].submit();
   }
   else if(fileList.value.length>0&&fileList.value.length>0){
-    console.log(111)
     await proxy.$refs["uploadRef1"].submit();
     await proxy.$refs["uploadRef"].submit();
   }
   else{
     await formRefJi.value.validate((valid) => {
       if(valid){
+        if(formJi.value.devlang==='1'){
+          formJi.value.devlang = elseLan.value
+        }
           updateModel(formJi.value).then(res=>{
           if(res.code===200){
             proxy.$modal.msgSuccess("修改成功");
@@ -751,6 +938,9 @@ async function submit(){
   formRefJi.value.validate((valid) => {
     console.log(formJi.value,valid)
     if(valid){
+        if(formJi.value.devlang==='1'){
+          formJi.value.devlang = elseLan.value
+        }
         addModel(formJi.value).then(res=>{
         if(res.code===200){
           proxy.$modal.msgSuccess("新增成功");
@@ -766,6 +956,9 @@ async function handleFileSuccess1(response, file, fileList){
   formJi.value.mdOutName = response.fileName
   await formRefJi.value.validate((valid) => {
     if(valid){
+        if(formJi.value.devlang==='1'){
+          formJi.value.devlang = elseLan.value
+        }
         updateModel(formJi.value).then(res=>{
         if(res.code===200){
           proxy.$modal.msgSuccess("修改成功");
@@ -781,6 +974,9 @@ async function handleFileSuccess(response, file, fileList){
   formJi.value.mdInName = response.fileName
   await formRefJi.value.validate((valid) => {
     if(valid){
+        if(formJi.value.devlang==='1'){
+          formJi.value.devlang = elseLan.value
+        }
         updateModel(formJi.value).then(res=>{
         if(res.code===200){
           proxy.$modal.msgSuccess("修改成功");
@@ -792,6 +988,8 @@ async function handleFileSuccess(response, file, fileList){
   });
 };
 function clearForm(){
+  tableDataCan.value = []
+  activeName.value = 'first'
   fileList.value = []
   fileList1.value = []
   formJi.value = {
@@ -844,6 +1042,77 @@ const seledMo = ['primary','plain','plain','plain','plain','plain','plain']
 
 </script>
 <style scoped>
+:deep(.treeLeft) .el-tree-node__content {
+  display: flex !important;
+  height: 28px;                  /* 按设计稿调整高度 */
+  align-items: center;
+  padding-top: 0 !important;
+}
+:deep(.treeLeft) .el-tree-node__content:hover {
+  background-color: #e9e9eb;
+}
+:deep(.treeLeft) .el-tree-node__content:active {
+    background-color: rgka(69,157,255,0.1) !important;
+  }
+
+  /* 选中态(Active) */
+:deep(.treeLeft) .el-tree-node.is-current > .el-tree-node__content {
+    background-color: #c6e2ff !important;
+  }
+
+.tabs-wrapper {
+  position: relative; /* 确保内容层在伪元素上方 */
+  z-index: 1; /* 关键:高于背景图 */
+}
+
+.tabs-wrapper :deep(.el-tabs),
+.tabs-wrapper :deep(.el-tabs__content) {
+  background-color: red !important; 
+}
+:deep(.el-tabs){
+  background-color: transparent !important;
+}
+:deep(.el-tabs__content){
+  background-color: transparent !important; 
+}
+:deep(.custom-dialog-bg) {
+  z-index: 1000;
+  background-image: url('@/assets/images/backDia.jpg') !important; 
+  background-position-x: left;
+  background-position-y: bottom;
+  background-size: initial;
+  background-repeat: repeat-x;
+  background-attachment: initial;
+  background-origin: initial;
+  background-clip: initial;
+  background-color: rgb(255, 255, 255);
+}
+:deep(.custom-dialog-bg .el-dialog__header) {
+  
+}
+:deep(.custom-dialog-bg .el-dialog__body) {
+  
+  color: #ecf0f1 !important; ; /* 内容文字颜色 */
+}
+/* 横向排列单选框标签和输入框 */
+.custom-input-wrapper {
+  display: flex;
+  align-items: center;
+  gap: 10px; /* 调整间距 */
+}
+
+/* 输入框仅显示底部横线 */
+.underline-input :deep(.el-input__wrapper) {
+  padding: 0;
+  box-shadow: none !important;
+  border-bottom: 1px solid #dcdfe6; /* 横线颜色 */
+  border-radius: 0;
+  background: transparent;
+}
+.underline-input :deep(.el-input__inner) {
+  height: 24px;
+  padding: 0 5px;
+}
 :deep(.el-table__body tr:hover > td) {
   background-color: #eaf7ff !important;
 }

+ 5 - 0
ruoyi-ui/vite.config.js

@@ -35,6 +35,11 @@ export default defineConfig(({mode, command}) => {
             host: '0.0.0.0',
             open: true,
             proxy: {
+                  '/profile/upload': {
+                    target: env.VITE_DEV_PATH,
+                    changeOrigin: true,
+                    rewrite: (p) => p.replace(/^\/profile\/upload/, '/profile/upload')
+                },
                 // // https://cn.vitejs.dev/config/#server-proxy
                 // https://cn.vitejs.dev/config/#server-proxy
                 '/sh-api': {