Jelajahi Sumber

feat: 数据增广页面

Rmengdi 9 bulan lalu
induk
melakukan
37aba63c0e

+ 17 - 0
src/api/modules/demo/data.ts

@@ -12,6 +12,15 @@ export const getFormSelectsApi = (query: { field: string }) => {
   return http.get<string[]>('/demo/data/getFromSelects', query, { loading: false })
 }
 
+/**
+ * @name 提交
+ * @param id id
+ * @returns returns
+ */
+export const amplifyApi = (data: any) => {
+  return http.post<any>(`/demo/data/amplify`, data, { loading: false })
+}
+
 /**
  * @name 查询数据管理详细
  * @param id id
@@ -21,6 +30,14 @@ export const getDataApi = (id: string | number) => {
   return http.get<any>(`/demo/data/${id}`)
 }
 
+/**
+ * @name 查询数据批次号
+ * @returns returns
+ */
+export const batchListDataApi = () => {
+  return http.get<any>(`/demo/data/batchList`)
+}
+
 /**
  * @name 新增数据管理
  * @param data data

+ 2 - 2
src/routers/modules/routerData.json

@@ -31,7 +31,7 @@
       }
     },
     {
-      "path": "/amplify",
+      "path": "/data/amplify",
       "name": "amplify",
       "component": "demo/data/amplify",
       "hidden": true,
@@ -42,7 +42,7 @@
         "full": false,
         "affix": false,
         "noCache": false,
-        "activeMenu": "/index"
+        "activeMenu": "/demo/data"
       }
     },
     {

+ 103 - 1270
src/views/demo/data/amplify.vue

@@ -1,1295 +1,128 @@
 <template>
-  <div class="createTask-bigBox">
-    <dv-border-box1 ref="borderRef" style="width: 80%; height: calc(100% - 20px); margin: 0 auto">
-      <div class="createTask-container">
-        <h3 class="title" style="margin-top: 0">{{ title }}</h3>
-        <!-- <h4 class="title2" v-if="pageIndex === 4">训练算法</h4> -->
-        <div v-for="(item, index) in formItems" :key="index" class="createTask-main">
-          <ProForm ref="proFormRef" :items-options="item.items" :form-options="_options" :model="item.model" class="proform">
-            <template #selectTask>
-              <el-tree
-                style="max-width: 600px"
-                ref="selectTaskTreeRef"
-                :default-checked-keys="formItem.selectTask"
-                :default-expanded-keys="formItem.selectTask"
-                :props="defaultProps"
-                :check-on-click-node="true"
-                :data="data1"
-                node-key="id"
-                show-checkbox
-                @check="
-                  (click, checked) => {
-                    changeTree(click, checked)
-                  }
-                "
-              />
-            </template>
-            <template #proTable="{}">
-              <el-tabs
-                tab-position="left"
-                v-model="activeName"
-                style="min-height: 450px"
-                class="demo-tabs"
-                :before-leave="beforeTabLeave"
-                @tab-click="handleClick"
-              >
-                <el-tab-pane label="数据" name="one">
-                  <div class="table-box">
-                    <ProTable
-                      ref="proTable"
-                      row-key="id"
-                      :columns="dataColumns"
-                      :request-api="listDataApi"
-                      :tool-button="false"
-                      :init-param="initParam1"
-                      height="45vh"
-                    >
-                    </ProTable>
-                  </div>
-                </el-tab-pane>
-              </el-tabs>
-            </template>
-            <template #operation="{}">
-              <div class="footBtn">
-                <el-button class="btn back" v-if="pageIndex === 1" @click="onReturn()"> 返回 </el-button>
-                <el-button class="btn back" v-else @click="onBack()"> 上一步 </el-button>
-                <el-button
-                  class="btn add"
-                  type="primary"
-                  v-if="(pageIndex === 2 || pageIndex === 6 || pageIndex === 10) && model.taskType === '1'"
-                  style="margin-left: -15px"
-                  @click="addNewData()"
-                >
-                  增加新一组数据
-                </el-button>
-                <el-button
-                  class="btn add"
-                  style="margin-left: -15px"
-                  v-if="(pageIndex === 5 || pageIndex === 9 || pageIndex === 13) && model.taskType === '2'"
-                  @click="onAdd(pageIndex)"
-                >
-                  增加算法
-                </el-button>
-                <el-button class="btn next" type="success" @click="nextBtnText === '提交' ? onSubmit() : onNext()">
-                  {{ nextBtnText }}
-                </el-button>
-              </div>
-            </template>
-          </ProForm>
-        </div>
-      </div>
-    </dv-border-box1>
-  </div>
-</template>
-<script setup lang="tsx" name="createTask">
-import { ref, ComputedRef, computed, watch, reactive } from 'vue'
-import ProForm from '@/components/ProForm/index.vue'
-import { useRouter } from 'vue-router'
-import { getModelApi, getAlgorithmApi, createTaskApi } from '@/api/modules/taais/task'
-import ProTable from '@/components/ProTable/index.vue'
-import { ColumnProps, ProTableInstance } from '@/components/ProTable/interface'
-import { listDataApi } from '@/api/modules/demo/data'
-import { ElMessage, ElTree } from 'element-plus'
-import type { TabsPaneContext } from 'element-plus'
-const activeName = ref('one')
-let tabTwo = ref(true)
-let tabThree = ref(true)
-let tabFour = ref(true)
-let initParam1 = reactive({ type: 1 })
-let initParam2 = reactive({ type: 2 })
-let initParam3 = reactive({ type: 3 })
-let initParam4 = reactive({ type: 4 })
-const proTable = ref<ProTableInstance>()
-let model = ref({
-  taskType: '2'
-})
+  <div class="amplify-container">
+    <div class="amplify-main">
+      <ProForm :items-options="items" :model="model"> </ProForm>
+      <el-container>
+        <el-table :data="batchDataList" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange">
+          <el-table-column type="selection"> </el-table-column>
+          <el-table-column prop="batchNum" label="所有批次"> </el-table-column>
+          <el-table-column prop="batchSize" label="数量"> </el-table-column>
+        </el-table>
 
-let formItem = reactive({
-  taskName: '',
-  selectTask: [2, 5] as any,
-  trainDataSelect: [] as any[],
-  trainDataEnhancement: {
-    algorithmId: null,
-    params: []
-  },
-  trainDataExpansion: {
-    algorithmId: null,
-    modelId: null,
-    params: []
-  },
-  train: [{}],
-  testDataSelect: [] as any[],
-  testDataEnhancement: {
-    algorithmId: null,
-    modelId: null,
-    params: []
-  },
-  testDataExpansion: {
-    algorithmId: null,
-    modelId: null,
-    params: []
-  },
-  test: [{}],
-  reasoningDataSelect: [] as any[],
-  reasoningDataEnhancement: {
-    algorithmId: null,
-    modelId: null,
-    params: []
-  },
-  reasoningDataExpansion: {
-    algorithmId: null,
-    modelId: null,
-    params: []
-  },
-  reasoning: [{}]
-})
-let prevTreeData = ref([3])
-const router = useRouter()
-let subSystem, selectTrainAgloId, selectTestAgloId, selectReasoningAgloId
-const trainActiveTab = ref()
-const testActiveTab = ref()
-const reasoningActiveTab = ref()
-let pageIndex = ref<number>(1)
-const selectTaskTreeRef = ref<InstanceType<typeof ElTree>>()
+        <el-container style=" display: flex; flex-direction: column; justify-content: center;margin: 0 30px">
+          <el-button type="primary" icon="ArrowRightBold" :disabled="!canSelect" @click="clickSelectData"></el-button>
+          <el-container style="height: 10px"></el-container>
+          <el-button type="primary" icon="ArrowLeftBold" :disabled="!canDeselect" @click="clickDeselectData"></el-button>
+        </el-container>
 
-let title = ref('数据扩增任务')
-let nextBtnText = ref('下一步')
-const data1 = [
-  {
-    id: 98,
-    label: '训练',
-    disabled: true,
-    children: [
-      {
-        id: 2,
-        label: '训练数据选择',
-        children: []
-      },
-      {
-        id: 3,
-        label: '训练数据增广',
-        children: []
-      },
-      {
-        id: 5,
-        label: '训练',
-        children: []
-      }
-    ]
-  },
-  {
-    id: 99,
-    label: '验证',
-    disabled: true,
-    children: [
-      {
-        id: 6,
-        label: '验证数据选择',
-        children: []
-      },
-      {
-        id: 9,
-        label: '验证',
-        children: []
-      }
-    ]
-  },
-  {
-    id: 100,
-    label: '测试',
-    disabled: true,
-    children: [
-      {
-        id: 10,
-        label: '测试数据选择',
-        children: []
-      },
-      {
-        id: 13,
-        label: '测试',
-        children: []
-      }
-    ]
-  }
-]
-
-const dataColumns = reactive<ColumnProps<any>[]>([
-  { type: 'selection', fixed: 'left', width: 70 },
-  {
-    prop: 'name',
-    label: '名称',
-    width: 120
-  },
-  {
-    prop: 'dataType',
-    label: '数据类型',
-    width: 120
-  },
-  {
-    prop: 'fileType',
-    label: '文件类型',
-    width: 120
-  },
-  {
-    prop: 'batchNum',
-    label: '批次号',
-    search: {
-      el: 'input',
-      defaultValue: ''
-    },
-    width: 120
-  },
-  {
-    prop: 'objectType',
-    label: '目标类型',
-    search: {
-      el: 'input',
-      defaultValue: ''
-    },
-    width: 120
-  },
-  {
-    prop: 'objectSubtype',
-    label: '目标子类型',
-    search: {
-      el: 'input',
-      defaultValue: ''
-    },
-    width: 120
-  },
+        <el-table :data="selectedBatchDataList" tooltip-effect="dark" style="width: 100%" @selection-change="handleDeselectionChange">
+          <el-table-column type="selection"> </el-table-column>
+          <el-table-column prop="batchNum" label="已选批次"> </el-table-column>
+          <el-table-column prop="batchSize" label="数量"> </el-table-column>
+        </el-table>
+      </el-container>
+    </div>
 
-  {
-    prop: 'scene',
-    label: '场景',
-    width: 120
-  },
-  {
-    prop: 'dataSource',
-    label: '数据源',
-    width: 120
-  },
-  {
-    prop: 'gatherTime',
-    label: '采集时间',
-    width: 120
-  },
-  {
-    prop: 'gatherSpot',
-    label: '采集地点',
-    width: 120
-  },
-  {
-    prop: 'increment',
-    label: '扩增方式',
-    width: 120
-  }
-])
-const defaultProps = {
-  children: 'children',
-  label: 'label'
-}
-const _options: ComputedRef<ProForm.FormOptions> = computed(() => {
-  const form = {
-    labelWidth: 120,
-    hasFooter: true,
-    disabled: false,
-    showSubmitButton: false
-  }
-  return Object.assign(form)
-})
-
-let items = reactive<ProForm.ItemsOptions[]>([
-  // 1
-  {
-    label: '任务名称',
-    prop: 'taskName',
-    span: 12,
-    rules: [{ required: true, message: '请输入任务名称' }],
-    show: () => {
-      return pageIndex.value === 1 ? true : false
-    },
-    compOptions: {
-      elTagName: 'input',
-      clearable: true,
-      placeholder: '请输入任务名称',
-      onChange: val => {
-        formItem.taskName = val
-      }
-    }
-  },
-  // 2  6  10
-  {
-    label: '',
-    hideLabelSuffix: true,
-    labelWidth: '0px',
-    prop: 'proTable',
-    show: () => {
-      return pageIndex.value === 2 || pageIndex.value === 6 || pageIndex.value === 10 ? true : false
-    },
-    compOptions: {
-      elTagName: 'slot'
-    }
-  },
-  // 3
-  {
-    label: '选择增广算法',
-    prop: 'trainEnhanceAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择增广算法' }],
-    show: () => {
-      return pageIndex.value === 3 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.trainDataEnhancement.algorithmId = val
-        // agloChange('trainEnhanceModel', val)
-        // getAgloParams(4, 'trainDataEnhancement', 3, val)
-        getAlgorithmApi(4, subSystem).then(res => {
-          res.data.forEach(item => {
-            if (item.id === val) {
-              const params = eval('(' + item.parameterConfig + ')')
-              formItem['trainDataEnhancement'].params = params
-              addForm(params, 3, 'trainDataEnhancement')
-            }
-          })
-        })
-      }
-    }
-  },
-  // {
-  //   label: '选择增广模型',
-  //   prop: 'trainEnhanceModel',
-  //   span: 14,
-  //   rules: [{ required: true, message: '选择增广模型' }],
-  //   show: () => {
-  //     return pageIndex.value === 3 ? true : false
-  //   },
-  //   compOptions: {
-  //     elTagName: 'select',
-  //     labelKey: 'modelName',
-  //     valueKey: 'id',
-  //     enum: null,
-  //     onChange: val => {
-  //       getAgloParams(4, 'trainDataEnhancement', 3, val)
-  //     }
-  //   }
-  // },
-  // 4
-  {
-    label: '选择扩充算法',
-    prop: 'trainExpansionAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择扩充算法' }],
-    show: () => {
-      return pageIndex.value === 4 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.trainDataExpansion.algorithmId = val
-        agloChange('trainExpansionModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择扩充模型',
-    prop: 'trainExpansionModel',
-    span: 14,
-    rules: [{ required: true, message: '选择扩充模型' }],
-    show: () => {
-      return pageIndex.value === 4 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        getAgloParams(5, 'trainDataExpansion', 4, val)
-      }
-    }
-  },
-  // 5
-  {
-    label: '选择训练算法',
-    prop: 'trainAlgo',
-    span: 14,
-    rules: [{ required: true, message: '请选择训练算法' }],
-    show: () => {
-      return pageIndex.value === 5 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        selectTrainAgloId = val
-        formItem.train[0]['algorithmId'] = val
-        agloChange('trainModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择训练模型',
-    prop: 'trainModel',
-    span: 14,
-    rules: [{ required: true, message: '请选择训练模型' }],
-    show: () => {
-      return pageIndex.value === 5 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      // enum: () => getModelApi(1),
-      enum: null,
-      onChange: val => {
-        getAlgorithmApi(1, subSystem).then(res => {
-          res.data.forEach(item => {
-            if (item.id === selectTrainAgloId) {
-              const params = eval('(' + item.parameterConfig + ')')
-              formItem.train[0]['modelId'] = val
-              formItem.train[0]['params'] = params
-              // (参数信息,第几页,数组名称)
-              addForm(params, 5, 'train[0]')
-            }
-          })
-        })
-      }
-    }
-  },
-  // 7
-  {
-    label: '选择增强算法',
-    prop: 'testEnhanceAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择增强算法' }],
-    show: () => {
-      return pageIndex.value === 7 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.testDataEnhancement['algorithmId'] = val
-        agloChange('testEnhanceModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择增强模型',
-    prop: 'testEnhanceModel',
-    span: 14,
-    rules: [{ required: true, message: '选择增强模型' }],
-    show: () => {
-      return pageIndex.value === 7 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        if (val === 1) {
-          return
-        } else {
-          getAgloParams(4, 'testDataEnhancement', 7, val)
-        }
-      }
-    }
-  },
-  // 8
-  {
-    label: '选择扩充算法',
-    prop: 'testExpansionAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择扩充算法' }],
-    show: () => {
-      return pageIndex.value === 8 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.testDataExpansion['algorithmId'] = val
-        agloChange('testExpansionModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择扩充模型',
-    prop: 'testExpansionModel',
-    span: 14,
-    rules: [{ required: true, message: '选择扩充模型' }],
-    show: () => {
-      return pageIndex.value === 8 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        if (val === 1) {
-          return
-        } else {
-          getAgloParams(5, 'testDataExpansion', 8, val)
-        }
-      }
-    }
-  },
-  // 9
-  {
-    label: '选择验证算法',
-    prop: 'testAlgo',
-    span: 14,
-    rules: [{ required: true, message: '请选择验证算法' }],
-    show: () => {
-      return pageIndex.value === 9 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        selectTestAgloId = val
-        formItem.test[0]['algorithmId'] = val
-        agloChange('testModel', val, true)
-      }
-    }
-  },
-  {
-    label: '选择验证模型',
-    prop: 'testModel',
-    span: 14,
-    rules: [{ required: true, message: '请选择验证模型' }],
-    show: () => {
-      return pageIndex.value === 9 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        // getAgloParams(1, 'test[0]', 9, val, 0)
-        getAlgorithmApi(2, subSystem).then(res => {
-          res.data.forEach(item => {
-            if (item.id === selectTestAgloId) {
-              const params = eval('(' + item.parameterConfig + ')')
-              formItem.test[0]['modelId'] = val
-              formItem.test[0]['params'] = params
-              // (参数信息,第几页,数组名称)
-              addForm(params, 9, 'test[0]')
-            }
-          })
-        })
-      }
-    }
-  },
-  // 11
-  {
-    label: '选择增强算法',
-    prop: 'reasoningEnhanceAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择增强算法' }],
-    show: () => {
-      return pageIndex.value === 11 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.reasoningDataEnhancement['algorithmId'] = val
-        agloChange('reasoningEnhanceModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择增强模型',
-    prop: 'reasoningEnhanceModel',
-    span: 14,
-    rules: [{ required: true, message: '选择增强模型' }],
-    show: () => {
-      return pageIndex.value === 11 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        if (val === 1) {
-          return
-        } else {
-          getAgloParams(4, 'reasoningDataEnhancement', 11, val)
-        }
-      }
-    }
-  },
-  // 12
-  {
-    label: '选择扩充算法',
-    prop: 'reasoningExpansionAlgo',
-    span: 14,
-    rules: [{ required: true, message: '选择扩充算法' }],
-    show: () => {
-      return pageIndex.value === 12 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        formItem.reasoningDataExpansion['algorithmId'] = val
-        agloChange('reasoningExpansionModel', val, false)
-      }
-    }
-  },
-  {
-    label: '选择扩充模型',
-    prop: 'reasoningExpansionModel',
-    rules: [{ required: true, message: '选择扩充模型' }],
-    span: 14,
-    show: () => {
-      return pageIndex.value === 12 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        if (val === 1) {
-          return
-        } else {
-          getAgloParams(5, 'reasoningDataExpansion', 12, val)
-        }
-      }
-    }
-  },
-  // 13
-  {
-    label: '选择测试算法',
-    prop: 'reasoningAlgo',
-    span: 14,
-    rules: [{ required: true, message: '请选择测试算法' }],
-    show: () => {
-      return pageIndex.value === 13 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'algorithmName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        selectReasoningAgloId = val
-        formItem.reasoning[0]['algorithmId'] = val
-        agloChange('reasoningModel', val, true)
-      }
-    }
-  },
-  {
-    label: '选择测试模型',
-    prop: 'reasoningModel',
-    span: 14,
-    rules: [{ required: true, message: '请选择测试模型' }],
-    show: () => {
-      return pageIndex.value === 13 ? true : false
-    },
-    compOptions: {
-      elTagName: 'select',
-      labelKey: 'modelName',
-      valueKey: 'id',
-      enum: null,
-      onChange: val => {
-        getAlgorithmApi(3, subSystem).then(res => {
-          res.data.forEach(item => {
-            if (item.id === selectReasoningAgloId) {
-              const params = eval('(' + item.parameterConfig + ')')
-              formItem.reasoning[0]['modelId'] = val
-              formItem.reasoning[0]['params'] = params
-              // (参数信息,第几页,数组名称)
-              addForm(params, 13, 'reasoning[0]')
-            }
-          })
-        })
-      }
-    }
-  }
-])
-// let formItemsTemp2 = ref([
-//   {
-//     items,
-//     model: model.value
-//   }
-// ])
-// let formItemsTemp7 = ref([
-//   {
-//     items,
-//     model: model.value
-//   }
-// ])
-let formItems = ref([
-  {
-    items,
-    model: model.value
-  }
-])
-let addTrainAgloIndex = 1
-let addTestAgloIndex = 1
-let addReasoningAgloIndex = 1
-const proFormRef = ref<InstanceType<typeof ProForm> | null>(null)
-// 增加训练算法
-const onAdd = pageNum => {
-  let arrayName, agloIndex, type, name
-  switch (pageNum) {
-    case 5:
-      arrayName = 'train'
-      agloIndex = addTrainAgloIndex
-      type = 1
-      name = '训练'
-      break
-    case 9:
-      arrayName = 'test'
-      agloIndex = addTestAgloIndex
-      type = 2
-      name = '验证'
-      break
-    case 13:
-      arrayName = 'reasoning'
-      agloIndex = addReasoningAgloIndex
-      type = 3
-      name = '测试'
-      break
-    default:
-      break
-  }
-  const formEl = proFormRef.value![0].proFormRef
-  if (!formEl) return
-  formEl.validate(valid => {
-    if (valid) {
-      if (agloIndex >= 4) {
-        ElMessage.warning('最多选择四种算法,已选择了四种')
-        return
-      }
-      getAlgorithmApi(type, subSystem).then(res1 => {
-        formItems.value[0].items.push({
-          label: `选择${name}算法`,
-          prop: `${arrayName}Aglo${agloIndex}`,
-          span: 14,
-          rules: [{ required: true, message: `请选择${name}算法` }],
-          show: () => {
-            return pageIndex.value === pageNum ? true : false
-          },
-          compOptions: {
-            elTagName: 'select',
-            labelKey: 'algorithmName',
-            valueKey: 'id',
-            enum: res1.data,
-            onChange: agloId => {
-              formItem[`${arrayName}`].push({})
-              if (!formItem[`${arrayName}`][`${agloIndex}`]['algorithmId']) {
-                formItem[`${arrayName}`][`${agloIndex}`]['algorithmId'] = agloId
-                getModelApi(agloId).then(res2 => {
-                  if (type === 2 || type === 3) {
-                    res2.data.unshift({
-                      algorithmId: null,
-                      id: 1,
-                      modelAddress: null,
-                      modelName: '基于训练生成的模型'
-                    })
-                  }
-                  formItems.value[0].items.push({
-                    label: `选择${name}模型`,
-                    prop: `${arrayName}Model${agloIndex}`,
-                    span: 14,
-                    rules: [{ required: true, message: `请选择${name}模型` }],
-                    show: () => {
-                      return pageIndex.value === pageNum ? true : false
-                    },
-                    compOptions: {
-                      elTagName: 'select',
-                      labelKey: 'modelName',
-                      valueKey: 'id',
-                      enum: res2.data,
-                      onChange: modelId => {
-                        res1.data.forEach(agloItem => {
-                          if (agloItem.id === agloId) {
-                            const params = eval('(' + agloItem.parameterConfig + ')')
-                            formItem[`${arrayName}`][`${agloIndex}`]['modelId'] = modelId
-                            formItem[`${arrayName}`][`${agloIndex}`]['params'] = params
-                            addForm(params, pageNum, `${arrayName}[${agloIndex}]`)
-                          }
-                        })
-                      }
-                    }
-                  })
-                })
-              } else {
-                formItem[`${arrayName}`].splice(-1, 1)
-                formItem[`${arrayName}`][`${agloIndex}`]['algorithmId'] = agloId
-                const column = formItems.value[0].items.find(column => column.prop === `${arrayName}Model${agloIndex}`)
-                if (column) {
-                  getModelApi(agloId).then(newRes => {
-                    column.compOptions.enum = newRes.data
-                  })
-                }
-              }
-            }
-          }
-        })
-      })
-      if (pageNum === 5) addTrainAgloIndex++
-      if (pageNum === 9) addTestAgloIndex++
-      if (pageNum === 13) addReasoningAgloIndex++
-    }
+    <el-footer>
+      <el-button class="submit" type="primary" @click="handleSubmit">提交</el-button>
+    </el-footer>
+  </div>
+</template>
+<script setup lang="tsx" name="amplify">
+import { reactive, ref, computed, onMounted } from 'vue'
+import ProForm from '@/components/ProForm/index.vue'
+import { batchListDataApi, amplifyApi } from '@/api/modules/demo/data'
+import { getDictsApi } from '@/api/modules/system/dictData'
+let model = {
+  taskName: 'ssss',
+  transfer: null
+}
+let batchDataList = ref(reactive([] as any[]))
+let selectedBatchDataList = ref(reactive([] as any[]))
+let tempSelectedBatchDataList = ref(reactive([] as any[]))
+let tempDeselectedBatchDataList = ref(reactive([] as any[]))
+let parameList = ref(reactive([] as any[]))
+onMounted(() => {
+  batchListDataApi().then(res => {
+    batchDataList.value = reactive(res.data)
   })
-}
-// 增加新数据
-const addNewData = () => {
-  switch (activeName.value) {
-    case 'one':
-      const table0Ref = proTable.value![0]
-      if (table0Ref.tableData.length === 0) {
-        ElMessage.warning('请正确选择该组数据')
-      } else {
-        tabTwo.value = false
-        activeName.value = 'two'
-      }
-      break
-    case 'two':
-      const table1Ref = proTable.value![1]
-      if (table1Ref.tableData.length === 0) {
-        ElMessage.warning('请正确选择该组数据')
-      } else {
-        tabThree.value = false
-        activeName.value = 'three'
-      }
-      break
-    case 'three':
-      const table2Ref = proTable.value![2]
-      if (table2Ref.tableData.length === 0) {
-        ElMessage.warning('请正确选择该组数据')
-      } else {
-        tabFour.value = false
-        activeName.value = 'four'
-      }
-      break
-    default:
-      break
-  }
-}
-// 增加表单事件
-const addForm = (params, index, arrayName) => {
-  params.forEach(item => {
-    let i = formItems.value[0].items.length
-    formItems.value[0].items.push({
-      label: item.name,
-      prop: `task${i}`,
-      span: 12,
-      rules: [
-        { required: item.required, message: `${item.name}不能为空` },
-        { pattern: new RegExp(`${item.validate}`), message: item.prompt }
-      ],
-      show: () => {
-        return pageIndex.value === index ? true : false
-      },
-      compOptions: {
-        elTagName: 'input',
-        clearable: true,
-        placeholder: item.prompt,
-        onChange: val1 => {
-          let label = item.name
-          if (arrayName.includes(']')) {
-            // 截取数组和下标
-            let array = arrayName.slice(0, -3)
-            let index = arrayName.slice(-2, -1)
-            const item = formItem[`${array}`][`${index}`]['params'].find(item => item.name === label)
-            if (item) {
-              item.value = val1
-            }
-          } else {
-            const item1 = formItem[`${arrayName}`]['params'].find(item => item.name === label)
-            if (item1) {
-              item1.value = val1
-            }
-          }
+  getDictsApi('expand_data_params').then(res => {
+    parameList.value = reactive(JSON.parse(res.data[0].remark))
+    parameList.value.forEach(item => {
+      items.push({
+        label: item.name,
+        prop: item.agName,
+        span: 12,
+        rules: [{ required: item.required, message: '不能为空' }],
+        compOptions: {
+          elTagName: 'input',
+          clearable: true,
+          placeholder: '请输入..'
         }
-      }
+      })
+      model[`${item.agName}`] = item.defaultValue
     })
-    formItems.value[0].model[`task${i}`] = item.defaultValue
   })
+})
+const handleSelectionChange = data => {
+  tempSelectedBatchDataList.value = reactive(data)
 }
-const agloChange = (propName, agloId, flag) => {
-  const Column = formItems.value[0].items.find(column => column.prop === propName)
-  if (Column) {
-    getModelApi(agloId).then(res => {
-      Column.compOptions.enum = res.data as any[]
-      if (flag) {
-        Column.compOptions.enum.unshift({
-          algorithmId: null,
-          id: 1,
-          modelAddress: null,
-          modelName: '基于训练生成的模型'
-        })
-      }
-    })
-  }
+const canSelect = computed(() => {
+  return tempSelectedBatchDataList.value.length > 0
+})
+const handleDeselectionChange = data => {
+  tempDeselectedBatchDataList.value = reactive(data)
 }
-const getAlgo = (propName, type) => {
-  const column = formItems.value[0].items.find(column => column.prop === propName)
-  if (column) {
-    getAlgorithmApi(type, subSystem).then(res => {
-      column.compOptions.enum = res.data as any[]
-    })
+const clickSelectData = () => {
+  let set = new Set()
+  for (let i = 0; i < tempSelectedBatchDataList.value.length; i++) {
+    set.add(tempSelectedBatchDataList.value[i].batchNum)
+    selectedBatchDataList.value.push(tempSelectedBatchDataList.value[i])
   }
-}
-// 算法类型:1-5、算法类型名称:如训练数据增强、页码、模型Id、模型的参数下标
-const getAgloParams = (agloType, agloTypeName, page, modelId) => {
-  const algoId = formItem[agloTypeName].algorithmId
-  getAlgorithmApi(agloType, subSystem).then(res => {
-    res.data.forEach(item => {
-      if (item.id === algoId) {
-        const params = eval('(' + item.parameterConfig + ')')
-        formItem[agloTypeName].modelId = modelId
-        formItem[agloTypeName].params = params
-        // (参数信息,第几页,数组名称)
-        addForm(params, page, agloTypeName)
-      }
-    })
-  })
-}
-// 返回按钮
-const onReturn = () => {
-  router.push(`/index`)
-}
-let flag = ref<number>(0) //跳转到日志页面的flag,0为训练日志、1为推理日志
-// 下一步
-const onNext = () => {
-  const formEl = proFormRef.value![0].proFormRef
-  if (!formEl) return
-  formEl.validate(valid => {
-    if (valid) {
-      if (formItem.selectTask.length === 0 && pageIndex.value === 1) {
-        ElMessage.warning('请选择任务')
-        return
-      }
-      if (pageIndex.value === 2 || pageIndex.value === 6 || pageIndex.value === 10) {
-        let dataName, flag
-        if (pageIndex.value === 2) dataName = 'trainDataSelect'
-        else if (pageIndex.value === 6) dataName = 'testDataSelect'
-        else if (pageIndex.value === 10) dataName = 'reasoningDataSelect'
-        switch (activeName.value) {
-          case 'one':
-            flag = 0
-            break
-          case 'two':
-            flag = 1
-            break
-          case 'three':
-            flag = 2
-            break
-          case 'false':
-            flag = 3
-            break
-          default:
-            break
-        }
-        formItem[dataName] = []
-        for (let i = 0; i <= flag; i++) {
-          if (proTable.value![i].tableData.length === 0) {
-            ElMessage.warning('数据存在空集,请正确选择数据')
-            return
-          }
-          let obj = proTable.value![i].searchParam
-          for (let key in obj) {
-            if (obj.hasOwnProperty(key) && obj[key] === '') {
-              delete obj[key]
-            }
-          }
-          formItem[dataName].push({
-            conditionSelected: true,
-            condition: proTable.value![i].searchParam
-          })
-        }
-        activeName.value = 'one'
-        tabTwo.value = true
-        tabThree.value = true
-        tabFour.value = true
-      }
-      if (pageIndex.value === formItem.selectTask[formItem.selectTask.length - 2]) {
-        nextBtnText.value = '提交'
-      }
-      if (pageIndex.value === formItem.selectTask[formItem.selectTask.length - 1]) {
-        console.log('flag.value', flag.value)
-        return
-        // router.push({ path: `/logPage/${flag.value}`, query: { type: 1 } })
-      }
-
-      pageIndex.value = formItem.selectTask[formItem.selectTask.findIndex(page => page === pageIndex.value) + 1]
+  let newArray = [] as any[]
+  for (let i = 0; i < batchDataList.value.length; i++) {
+    if (!set.has(batchDataList.value[i].batchNum)) {
+      newArray.push(batchDataList.value[i])
     }
-  })
-}
-// 上一步
-const onBack = () => {
-  nextBtnText.value = '下一步'
-  if (pageIndex.value === formItem.selectTask[0]) {
-    pageIndex.value = 1
-    return
   }
-  pageIndex.value = formItem.selectTask[formItem.selectTask.findIndex(page => page === pageIndex.value) - 1]
+  batchDataList.value = reactive(newArray)
 }
-const changeTree = (newVal, allVal) => {
-  const newId = newVal.id
-  const dependencyMap = new Map([
-    [
-      [3, 4, 2, 5],
-      [2, 5]
-    ], // 如果包含3或4,则添加2和5
-    [
-      [7, 8, 6, 9],
-      [6, 9]
-    ],
-    [
-      [11, 12, 10, 13],
-      [10, 13]
-    ]
-  ])
-  const updateCheckedKeys = keysSet => {
-    prevTreeData.value = Array.from(keysSet)
-    selectTaskTreeRef.value![0].setCheckedKeys(Array.from(keysSet), false)
+const canDeselect = computed(() => {
+  return tempDeselectedBatchDataList.value.length > 0
+})
+const clickDeselectData = () => {
+  let set = new Set()
+  for (let i = 0; i < tempDeselectedBatchDataList.value.length; i++) {
+    set.add(tempDeselectedBatchDataList.value[i].batchNum)
+    batchDataList.value.push(tempDeselectedBatchDataList.value[i])
   }
-
-  if (!allVal.checkedKeys.includes(newId)) {
-    if (newId === 2 || newId === 5) {
-      const data = delNumber(2, 5, allVal.checkedKeys)
-      updateCheckedKeys(new Set(data))
-    } else if (newId === 6 || newId === 9) {
-      const data = delNumber(6, 9, allVal.checkedKeys)
-      updateCheckedKeys(new Set(data))
-    } else if (newId === 10 || newId === 13) {
-      const data = delNumber(10, 13, allVal.checkedKeys)
-      updateCheckedKeys(new Set(data))
-    }
-  } else {
-    for (const [keysToCheck, keysToAdd] of dependencyMap.entries()) {
-      if (keysToCheck.includes(newId)) {
-        const keysSet = new Set([...allVal.checkedKeys, ...keysToAdd])
-        updateCheckedKeys(keysSet)
-        break
-      }
+  let newArray = [] as any[]
+  for (let i = 0; i < selectedBatchDataList.value.length; i++) {
+    if (!set.has(selectedBatchDataList.value[i].batchNum)) {
+      newArray.push(selectedBatchDataList.value[i])
     }
   }
-
-  formItem.selectTask = selectTaskTreeRef.value![0].getCheckedKeys().filter(item => item < 90)
-}
-// 树组件去除节点函数
-const delNumber = (start, end, dataList) => {
-  return dataList.filter(number => !(number >= start && number <= end)).sort((a, b) => a - b)
+  selectedBatchDataList.value = reactive(newArray)
 }
-const onSubmit = () => {
-  findParams(formItem)
-  createTaskApi(formItem).then(res => {
-    console.log('createTask', res)
-    // const taskId=res
-    router.push({ path: `/task/subtask/`, query: { id: res.data } })
+const handleSubmit = () => {
+  amplifyApi(selectedBatchDataList.value).then(res => {
+    console.log(res)
   })
 }
-const findParams = obj => {
-  for (const key in obj) {
-    if (obj[key] !== null && typeof obj[key] === 'object') {
-      // 如果值是数组,则遍历数组中的每个元素
-      if (Array.isArray(obj[key])) {
-        obj[key].forEach(item => {
-          if (item.params) {
-            item.params.forEach(paramItem => {
-              if (!paramItem.value) {
-                paramItem.value = paramItem.defaultValue
-              }
-            })
-            item.params = JSON.stringify(item.params)
-          }
-          if (item.condition) {
-            item.condition = JSON.stringify(item.condition)
-          }
-        })
-      } else {
-        // 如果值是对象
-        if (obj[key]['params']) {
-          obj[key]['params'].forEach(paramItem => {
-            if (!paramItem.value) {
-              paramItem.value = paramItem.defaultValue
-            }
-          })
-          obj[key]['params'] = JSON.stringify(obj[key]['params'])
-        }
-        if (obj[key]['condition']) {
-          obj[key]['condition'] = JSON.stringify(obj[key]['condition'])
-        }
-      }
-    }
-  }
-}
-const beforeTabLeave = (activeName, oldActiveName) => {
-  let dataSelect1
-  if (pageIndex.value === 2) {
-    dataSelect1 = 'trainDataSelect'
-  } else if (pageIndex.value === 6) {
-    dataSelect1 = 'testDataSelect'
-  } else if (pageIndex.value === 10) {
-    dataSelect1 = 'reasoningDataSelect'
-  }
-
-  switch (oldActiveName) {
-    case 'one':
-      Object.assign(initParam1, formItem[dataSelect1]?.[0]?.condition)
-      break
-    case 'two':
-      Object.assign(initParam2, formItem[dataSelect1]?.[1]?.condition)
-      break
-    case 'three':
-      Object.assign(initParam3, formItem[dataSelect1]?.[2]?.condition)
-      break
-    case 'four':
-      Object.assign(initParam4, formItem[dataSelect1]?.[3]?.condition)
-      break
-    default:
-      break
-  }
-}
-const handleClick = (tab: TabsPaneContext) => {
-  let dataSelect
-  if (pageIndex.value === 2) {
-    dataSelect = 'trainDataSelect'
-    trainActiveTab.value = tab
-  } else if (pageIndex.value === 6) {
-    dataSelect = 'testDataSelect'
-    testActiveTab.value = tab
-  } else if (pageIndex.value === 10) {
-    dataSelect = 'reasoningDataSelect'
-    reasoningActiveTab.value = tab
-  }
-  const tabName = tab.paneName
-  switch (tabName) {
-    case 'one':
-      const data1 = formItem[dataSelect]?.[0]?.condition
-      console.log('data1', data1)
-      updateDefaultValue(data1?.objectType, data1?.objectSubtype, data1?.batchNum)
-      break
-    case 'two':
-      const data2 = formItem[dataSelect]?.[1]?.condition
-      console.log('data2', data2)
-      updateDefaultValue(data2?.objectType, data2?.objectSubtype, data2?.batchNum)
-      break
-    case 'three':
-      const data3 = formItem[dataSelect]?.[2]?.condition
-      console.log('data3', data3)
-      updateDefaultValue(data3?.objectType, data3?.objectSubtype, data3?.batchNum)
-      break
-    case 'four':
-      const data4 = formItem[dataSelect]?.[3]?.condition
-      updateDefaultValue(data4?.objectType, data4?.objectSubtype, data4?.batchNum)
-      break
-    default:
-      break
-  }
-}
-const updateDefaultValue = (objectType, objectSubtype, batchNum) => {
-  dataColumns.map(column => {
-    if (column.prop === 'objectType') {
-      column.search!.defaultValue = objectType
-    } else if (column.prop === 'objectSubtype') {
-      column.search!.defaultValue = objectSubtype
-    } else if (column.prop === 'batchNum') {
-      column.search!.defaultValue = batchNum
-    }
-  })
-}
-watch(
-  () => pageIndex.value,
-  value => {
-    switch (value) {
-      case 1:
-        title.value = '数据扩增:添加任务名称'
-        nextBtnText.value = '下一步'
-        break
-      case 2:
-        title.value = '训练数据选择'
-        if (trainActiveTab.value) {
-          handleClick(trainActiveTab.value)
-        }
-        break
-      case 3:
-        title.value = '训练数据增广'
-        getAlgo('trainEnhanceAlgo', 4)
-        break
-      case 4:
-        title.value = '训练数据扩充'
-        getAlgo('trainExpansionAlgo', 5)
-        break
-      case 5:
-        title.value = '训练算法选择'
-        getAlgo('trainAlgo', 1)
-        break
-      case 6:
-        title.value = '验证数据选择'
-        if (testActiveTab.value) {
-          handleClick(testActiveTab.value)
-        }
-        break
-      case 7:
-        title.value = '测试数据增强'
-        getAlgo('testEnhanceAlgo', 4)
-        break
-      case 8:
-        title.value = '测试数据扩充'
-        getAlgo('testExpansionAlgo', 5)
-        break
-      case 9:
-        title.value = '验证算法选择'
-        getAlgo('testAlgo', 2)
-        break
-      case 10:
-        title.value = '测试数据选择'
-        if (reasoningActiveTab.value) {
-          handleClick(reasoningActiveTab.value)
-        }
-        break
-      case 11:
-        title.value = '推理数据增强'
-        getAlgo('reasoningEnhanceAlgo', 4)
-        break
-      case 12:
-        title.value = '推理数据扩充'
-        getAlgo('reasoningExpansionAlgo', 5)
-        nextBtnText.value = '下一步'
-        break
-      case 13:
-        title.value = '测试算法选择'
-        getAlgo('reasoningAlgo', 3)
-        break
-      default:
-        break
+let items: ProForm.ItemsOptions[] = reactive([
+  {
+    label: '任务名称',
+    prop: 'taskName',
+    span: 14,
+    // labelWidth: '90px',
+    rules: [{ required: true, message: '请输入任务名称' }],
+    compOptions: {
+      elTagName: 'input',
+      clearable: true,
+      placeholder: '请输入用户名'
     }
   }
-)
+])
 </script>
 <style scoped lang="scss">
 @import './index.scss';

+ 16 - 152
src/views/demo/data/index.scss

@@ -1,161 +1,25 @@
-.home-container {
+.amplify-container {
   width: 100%;
   height: 100%;
-  min-height: 550px;
-  :deep(.card) {
-    padding: 60px 65px 60px 85px;
-  }
-}
-:deep(::-webkit-scrollbar) {
-  display: none;
-}
-
-// :deep(.card) {
-//   width: 100%;
-//   height: 100%;
-//   background-image: url('../../../assets/taaisImg/53bg.png');
-//   background-repeat: no-repeat;
-//   background-size: 100% 100%;
+  padding-top: 50px;
 
-//   // color: black;
-// }
-:deep(.el-table) {
-  // --el-table-border-color: transparent;
-  --el-table-border-color: #bdbdbe7b;
-
-  // --el-table-border: none;
-  --el-table-text-color: #bdbdbe;
-  --el-table-header-text-color: #bdbdbe;
-  --el-table-row-hover-bg-color: transparent;
-  --el-table-current-row-bg-color: transparent;
-  --el-table-header-bg-color: transparent;
-  --el-table-bg-color: transparent;
-  --el-table-tr-bg-color: transparent;
-
-  // --el-table-expanded-cell-bg-color: transparent;
-}
-.bigBox,
-.createTask-bigBox {
-  width: 100%;
-  height: 100%;
-  overflow: hidden;
-  background-image: url('../../../assets/taaisImg/53bg.png');
-  background-repeat: no-repeat;
-  background-size: 100% 100%;
-}
-.createTask-bigBox {
-  :deep(.el-transfer-panel__item) {
-    height: 60px;
-  }
-  .title {
-    margin: 20px;
-  }
-  .title2 {
-    text-align: center;
-  }
-
-  // .btn {
-  //   position: absolute;
-  //   bottom: 20px;
-  // }
-  .back {
-    left: 100px;
-  }
-  .next {
-    right: 100px;
-  }
-  .add {
-    left: 450px;
-  }
-}
-%box-basic {
-  width: 90%;
-  padding: 20px;
-  margin: 0 auto;
-}
-.createTask-container {
-  position: relative;
-  width: 90%;
-  height: 85%;
-  padding: 20px;
-  margin: 0 auto;
-  margin-top: 1%;
-  overflow: hidden;
-  .footBtn {
-    position: fixed;
-    bottom: 4%;
-    left: 10%;
-    display: flex;
-    justify-content: space-evenly;
-    width: 86%;
-  }
-  .createTask-main {
-    height: 100%;
-    overflow: hidden;
+  // position: relative;
+  .amplify-main {
+    width: 80%;
+    height: calc(100% - 50px);
+    margin: 0 auto;
     overflow-y: scroll;
   }
-}
-.logPage-container {
-  @extend %box-basic;
-
-  position: relative;
-  width: 90%;
-  .btn {
-    margin-top: 20px;
-
-    // margin-left: 100px;
-  }
-  .prev {
-    position: absolute;
-    left: 150px;
-  }
-  .next {
+  .el-footer {
     position: absolute;
-    right: 150px;
-  }
-  .log {
-    width: 90%;
-    height: 65vh; /* 根据需要调整 */
-    padding: 10px;
-
-    // padding-bottom: 80px;
-    margin-left: 50px;
-    overflow-y: auto;
-    font-family: 'Courier New', monospace;
-    color: #4aff84;
-    background-color: #1e1e1e;
-  }
-  .p {
-    padding-left: 10px;
-    margin-bottom: 5px;
-    border-left: 3px solid #4aff84;
-  }
-}
-:deep(.dv-border-box-1 .border-box-content) {
-  text-align: left;
-}
-.trainResult-container {
-  @extend %box-basic;
-
-  width: 90%;
-  padding: 3px 20px;
-  .table {
-    position: relative;
-    width: 100%;
-    height: 70vh;
-    margin-top: -15px;
-    .btn {
-      margin-top: 10px;
-      margin-left: 50px;
+    bottom: 0;
+    left: 50%;
+    height: 50px;
+    .submit {
+      right: 0;
     }
-    .next {
-      position: absolute;
-      right: 150px;
-    }
-  }
-  :deep(th.el-table__cell),
-  :deep(td.el-table__cell) {
-    // 设置position 使得 子元素不与其产生新的层叠关系
-    position: static;
   }
 }
+::-webkit-scrollbar {
+  display: none;
+}

+ 1 - 1
src/views/demo/data/index.vue

@@ -156,7 +156,7 @@ const batchAdd = () => {
 
 const router = useRouter()
 const dataAmplify = () => {
-  router.push(`/amplify`)
+  router.push(`/data/amplify`)
 }
 
 const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)