createTask.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. <template>
  2. <div class="createTask-bigBox">
  3. <dv-border-box1 ref="borderRef" style="width: 1000px; height: 650px; margin: 0 auto">
  4. <div class="createTask-container">
  5. <h3 class="title">{{ title }}</h3>
  6. <h4 class="title2" v-if="pageIndex === 4">训练算法</h4>
  7. <div v-for="(item, index) in formItems" :key="index">
  8. <ProForm :items-options="item.items" :form-options="_options" :model="item.model" class="proform">
  9. <template #transfer1="{ formModel }">
  10. <el-transfer filterable v-model="formModel.transfer1" :data="transferImg1">
  11. <template #default="{ option }">
  12. <el-image
  13. style="width: 50px; height: 50px"
  14. :preview-src-list="[getImageUrl(option.label)]"
  15. :src="getImageUrl(option.label)"
  16. ></el-image>
  17. </template>
  18. </el-transfer>
  19. </template>
  20. <template #transfer2="{ formModel }">
  21. <el-transfer filterable v-model="formModel.transfer2" :data="transferImg2">
  22. <template #default="{ option }">
  23. <el-image
  24. style="width: 50px; height: 50px"
  25. :preview-src-list="[getImageUrl(option.label)]"
  26. :src="getImageUrl(option.label)"
  27. ></el-image>
  28. </template>
  29. </el-transfer>
  30. </template>
  31. <template #username1="{ formModel }">
  32. <el-input v-model="formModel.username1" />
  33. </template>
  34. </ProForm>
  35. </div>
  36. </div>
  37. <el-button class="btn back" v-if="pageIndex === 1" @click="onReturn()"> 返回 </el-button>
  38. <el-button class="btn back" v-else @click="onBack()"> 上一步 </el-button>
  39. <el-button class="btn add" style="margin-left: -15px" v-if="pageIndex === 4 || pageIndex === 7" @click="onAdd()">
  40. 增加
  41. </el-button>
  42. <el-button class="btn next" type="success" @click="onNext()"> {{ nextBtnText }} </el-button>
  43. </dv-border-box1>
  44. </div>
  45. </template>
  46. <script setup lang="tsx" name="createTask">
  47. import { ref, ComputedRef, computed, watch } from 'vue'
  48. import ProForm from '@/components/ProForm/index.vue'
  49. import { useRouter } from 'vue-router'
  50. import { getTransferImgList1, getTransferImgList2 } from '@/api/modules/taais/task'
  51. let model = ref({
  52. enhanceModel: '',
  53. pretreatmentModel: ''
  54. })
  55. const router = useRouter()
  56. let pageIndex = ref<number>(1)
  57. let title = ref('目标精准捕获任务选择')
  58. let nextBtnText = ref('下一步')
  59. const transferImg1 = getTransferImgList1()
  60. const transferImg2 = getTransferImgList2()
  61. const enumData = [
  62. {
  63. label: 'rtdetr',
  64. value: '1'
  65. },
  66. {
  67. label: 'yolov5',
  68. value: '2'
  69. },
  70. {
  71. label: 'yolov8',
  72. value: '3'
  73. }
  74. ]
  75. const enumDataModel = [
  76. {
  77. label: 'rtdetrModel',
  78. value: '1'
  79. },
  80. {
  81. label: 'yolov5Model',
  82. value: '2'
  83. },
  84. {
  85. label: 'yolov8Model',
  86. value: '3'
  87. }
  88. ]
  89. const data1 = [
  90. {
  91. label: '训练',
  92. children: [
  93. {
  94. label: '训练数据选择',
  95. children: []
  96. },
  97. {
  98. label: '训练数据预处理',
  99. children: []
  100. },
  101. {
  102. label: '训练',
  103. children: []
  104. }
  105. ]
  106. },
  107. {
  108. label: '推理',
  109. children: [
  110. {
  111. label: '推理数据选择',
  112. children: []
  113. },
  114. {
  115. label: '推理数据预处理',
  116. children: []
  117. },
  118. {
  119. label: '推理',
  120. children: []
  121. }
  122. ]
  123. }
  124. ]
  125. const defaultProps = {
  126. children: 'children',
  127. label: 'label'
  128. }
  129. const _options: ComputedRef<ProForm.FormOptions> = computed(() => {
  130. const form = {
  131. labelWidth: 120,
  132. hasFooter: true,
  133. disabled: false,
  134. showSubmitButton: false
  135. }
  136. return Object.assign(form)
  137. })
  138. let items: ProForm.ItemsOptions[] = [
  139. {
  140. formItemOptions: {
  141. label: '任务名称',
  142. prop: 'taskName',
  143. span: 12,
  144. show: () => {
  145. return pageIndex.value === 1 ? true : false
  146. }
  147. },
  148. compOptions: {
  149. elTagName: 'input',
  150. clearable: true,
  151. placeholder: '请输入任务名称'
  152. }
  153. },
  154. {
  155. formItemOptions: {
  156. label: '任务选择',
  157. prop: 'treeName',
  158. show: () => {
  159. return pageIndex.value === 1 ? true : false
  160. }
  161. },
  162. compOptions: {
  163. elTagName: 'tree',
  164. enum: data1,
  165. props: defaultProps,
  166. style: 'max-width: 600px',
  167. defaultExpandAll: true,
  168. showCheckbox: true
  169. }
  170. },
  171. {
  172. formItemOptions: {
  173. label: '选择训练数据',
  174. prop: 'transfer1',
  175. show: () => {
  176. return pageIndex.value === 2 ? true : false
  177. }
  178. },
  179. compOptions: {
  180. elTagName: 'slot',
  181. filterable: true
  182. }
  183. },
  184. {
  185. formItemOptions: {
  186. label: '增强算法',
  187. prop: 'enhanceAlgo',
  188. span: 14,
  189. show: () => {
  190. return pageIndex.value === 3 ? true : false
  191. }
  192. },
  193. compOptions: {
  194. elTagName: 'select',
  195. enum: enumData,
  196. onChange: val => {
  197. model.value.enhanceModel = val
  198. }
  199. }
  200. },
  201. {
  202. formItemOptions: {
  203. label: '增强模型',
  204. prop: 'enhanceModel',
  205. span: 14,
  206. show: () => {
  207. return pageIndex.value === 3 ? true : false
  208. }
  209. },
  210. compOptions: {
  211. elTagName: 'select',
  212. enum: enumDataModel
  213. }
  214. },
  215. {
  216. formItemOptions: {
  217. label: '参数1',
  218. prop: 'threeParameter1',
  219. span: 14,
  220. show: () => {
  221. return pageIndex.value === 3 ? true : false
  222. }
  223. },
  224. compOptions: {
  225. elTagName: 'input',
  226. clearable: true,
  227. placeholder: '请输入...'
  228. }
  229. },
  230. {
  231. formItemOptions: {
  232. label: '参数2',
  233. prop: 'threeParameter2',
  234. span: 14,
  235. show: () => {
  236. return pageIndex.value === 3 ? true : false
  237. }
  238. },
  239. compOptions: {
  240. elTagName: 'input',
  241. clearable: true,
  242. placeholder: '请输入...'
  243. }
  244. },
  245. {
  246. formItemOptions: {
  247. label: '参数3',
  248. prop: 'threeParameter3',
  249. span: 14,
  250. show: () => {
  251. return pageIndex.value === 3 ? true : false
  252. }
  253. },
  254. compOptions: {
  255. elTagName: 'input',
  256. clearable: true,
  257. placeholder: '请输入...'
  258. }
  259. },
  260. {
  261. formItemOptions: {
  262. label: '参数4',
  263. prop: 'threeParameter4',
  264. span: 14,
  265. show: () => {
  266. return pageIndex.value === 3 ? true : false
  267. }
  268. },
  269. compOptions: {
  270. elTagName: 'input',
  271. clearable: true,
  272. placeholder: '请输入...'
  273. }
  274. },
  275. {
  276. formItemOptions: {
  277. label: '训练算法',
  278. prop: 'trainAlgo',
  279. span: 14,
  280. show: () => {
  281. return pageIndex.value === 4 ? true : false
  282. }
  283. },
  284. compOptions: {
  285. elTagName: 'select',
  286. enum: enumData
  287. }
  288. },
  289. {
  290. formItemOptions: {
  291. label: '预训练模型权重文件路径',
  292. prop: 'fourParameter1',
  293. labelWidth: 180,
  294. span: 14,
  295. show: () => {
  296. return pageIndex.value === 4 ? true : false
  297. }
  298. },
  299. compOptions: {
  300. elTagName: 'input',
  301. clearable: true,
  302. placeholder: '请输入...'
  303. }
  304. },
  305. {
  306. formItemOptions: {
  307. label: '模型结构配置文件路径',
  308. prop: 'fourParameter2',
  309. labelWidth: 180,
  310. span: 14,
  311. show: () => {
  312. return pageIndex.value === 4 ? true : false
  313. }
  314. },
  315. compOptions: {
  316. elTagName: 'input',
  317. clearable: true,
  318. placeholder: '请输入...'
  319. }
  320. },
  321. {
  322. formItemOptions: {
  323. label: '训练轮数',
  324. prop: 'fourParameter3',
  325. labelWidth: 180,
  326. span: 14,
  327. show: () => {
  328. return pageIndex.value === 4 ? true : false
  329. }
  330. },
  331. compOptions: {
  332. elTagName: 'input',
  333. clearable: true,
  334. placeholder: '请输入...'
  335. }
  336. },
  337. {
  338. formItemOptions: {
  339. label: '余弦学习率调度器',
  340. prop: 'fourParameter4',
  341. labelWidth: 180,
  342. span: 14,
  343. show: () => {
  344. return pageIndex.value === 4 ? true : false
  345. }
  346. },
  347. compOptions: {
  348. elTagName: 'input',
  349. clearable: true,
  350. placeholder: '请输入...'
  351. }
  352. },
  353. {
  354. formItemOptions: {
  355. label: '选择推理数据',
  356. prop: 'transfer2',
  357. show: () => {
  358. return pageIndex.value === 5 ? true : false
  359. }
  360. },
  361. compOptions: {
  362. elTagName: 'slot',
  363. filterable: true
  364. }
  365. },
  366. {
  367. formItemOptions: {
  368. label: '预处理算法',
  369. prop: 'pretreatmentAlgo',
  370. span: 14,
  371. show: () => {
  372. return pageIndex.value === 6 ? true : false
  373. }
  374. },
  375. compOptions: {
  376. elTagName: 'select',
  377. enum: enumData,
  378. onChange: val => {
  379. model.value.pretreatmentModel = val
  380. }
  381. }
  382. },
  383. {
  384. formItemOptions: {
  385. label: '预处理模型',
  386. prop: 'pretreatmentModel',
  387. span: 14,
  388. show: () => {
  389. return pageIndex.value === 6 ? true : false
  390. }
  391. },
  392. compOptions: {
  393. elTagName: 'select',
  394. enum: enumDataModel
  395. }
  396. },
  397. {
  398. formItemOptions: {
  399. label: '参数1',
  400. prop: 'sixParameter1',
  401. span: 12,
  402. show: () => {
  403. return pageIndex.value === 6 ? true : false
  404. }
  405. },
  406. compOptions: {
  407. elTagName: 'input',
  408. clearable: true,
  409. placeholder: '请输入...'
  410. }
  411. },
  412. {
  413. formItemOptions: {
  414. label: '参数2',
  415. prop: 'sixParameter2',
  416. span: 12,
  417. show: () => {
  418. return pageIndex.value === 6 ? true : false
  419. }
  420. },
  421. compOptions: {
  422. elTagName: 'input',
  423. clearable: true,
  424. placeholder: '请输入...'
  425. }
  426. },
  427. {
  428. formItemOptions: {
  429. label: '参数3',
  430. prop: 'sixParameter3',
  431. span: 12,
  432. show: () => {
  433. return pageIndex.value === 6 ? true : false
  434. }
  435. },
  436. compOptions: {
  437. elTagName: 'input',
  438. clearable: true,
  439. placeholder: '请输入...'
  440. }
  441. },
  442. {
  443. formItemOptions: {
  444. label: '参数4',
  445. prop: 'sixParameter4',
  446. span: 12,
  447. show: () => {
  448. return pageIndex.value === 6 ? true : false
  449. }
  450. },
  451. compOptions: {
  452. elTagName: 'input',
  453. clearable: true,
  454. placeholder: '请输入...'
  455. }
  456. },
  457. {
  458. formItemOptions: {
  459. label: '推理算法',
  460. prop: 'inferAlgo',
  461. span: 14,
  462. show: () => {
  463. return pageIndex.value === 7 ? true : false
  464. }
  465. },
  466. compOptions: {
  467. elTagName: 'select',
  468. enum: enumData
  469. }
  470. },
  471. {
  472. formItemOptions: {
  473. label: '目标置信度阈值',
  474. prop: 'sevenParameter1',
  475. labelWidth: 180,
  476. span: 14,
  477. show: () => {
  478. return pageIndex.value === 7 ? true : false
  479. }
  480. },
  481. compOptions: {
  482. elTagName: 'input',
  483. clearable: true,
  484. placeholder: '请输入...'
  485. }
  486. },
  487. {
  488. formItemOptions: {
  489. label: '非极大值抑制的IoU阈值',
  490. prop: 'sevenParameter2',
  491. labelWidth: 180,
  492. span: 14,
  493. show: () => {
  494. return pageIndex.value === 7 ? true : false
  495. }
  496. },
  497. compOptions: {
  498. elTagName: 'input',
  499. clearable: true,
  500. placeholder: '请输入...'
  501. }
  502. },
  503. {
  504. formItemOptions: {
  505. label: '测试图片最大检测器数',
  506. prop: 'sevenParameter3',
  507. labelWidth: 180,
  508. span: 14,
  509. show: () => {
  510. return pageIndex.value === 7 ? true : false
  511. }
  512. },
  513. compOptions: {
  514. elTagName: 'input',
  515. clearable: true,
  516. placeholder: '请输入...'
  517. }
  518. },
  519. {
  520. formItemOptions: {
  521. label: '使用半精度推理(FP16)',
  522. prop: 'sevenParameter4',
  523. labelWidth: 180,
  524. span: 14,
  525. show: () => {
  526. return pageIndex.value === 7 ? true : false
  527. }
  528. },
  529. compOptions: {
  530. elTagName: 'input',
  531. clearable: true,
  532. placeholder: '请输入...'
  533. }
  534. }
  535. ]
  536. let formItemsTemp4 = ref([
  537. {
  538. items,
  539. model: model.value
  540. }
  541. ])
  542. let formItemsTemp7 = ref([
  543. {
  544. items,
  545. model: model.value
  546. }
  547. ])
  548. let formItems = ref([
  549. {
  550. items,
  551. model: model.value
  552. }
  553. ])
  554. // 增加训练算法
  555. const onAdd = () => {
  556. const data = {
  557. enhanceModel: '',
  558. pretreatmentModel: ''
  559. }
  560. formItems.value.push({
  561. items,
  562. model: data
  563. })
  564. }
  565. const getImageUrl = name => {
  566. return new URL(`../../../assets/taaisImg/${name}`, import.meta.url).href
  567. }
  568. const onReturn = () => {
  569. router.push(`/index`)
  570. }
  571. let flag = ref<number>(0) //跳转到日志页面的flag,0为训练日志、1为推理日志
  572. const onNext = () => {
  573. if (pageIndex.value === 7) {
  574. pageIndex.value = 1
  575. router.push({ path: `/logPage/${flag.value}`, query: { type: 1 } })
  576. } else {
  577. pageIndex.value++
  578. }
  579. }
  580. const onBack = () => {
  581. if (pageIndex.value === 1) return
  582. pageIndex.value--
  583. }
  584. watch(
  585. () => pageIndex.value,
  586. (value, oldValue) => {
  587. if (oldValue === 4) formItemsTemp4.value = formItems.value
  588. if (oldValue === 7) formItemsTemp7.value = formItems.value
  589. if (value === 4) formItems.value = formItemsTemp4.value
  590. if (value === 7) formItems.value = formItemsTemp7.value
  591. else {
  592. formItems.value = [
  593. {
  594. items,
  595. model: model.value
  596. }
  597. ]
  598. }
  599. 0
  600. switch (value) {
  601. case 1:
  602. title.value = '任务创建:目标精准捕获任务选择'
  603. nextBtnText.value = '下一步'
  604. break
  605. case 2:
  606. title.value = '任务创建:训练数据选择'
  607. break
  608. case 3:
  609. title.value = '任务创建:训练数据预处理'
  610. break
  611. case 4:
  612. title.value = '任务创建:训练参数设置'
  613. break
  614. case 5:
  615. title.value = '任务创建:推理数据选择'
  616. break
  617. case 6:
  618. title.value = '任务创建:推理数据预处理'
  619. nextBtnText.value = '下一步'
  620. break
  621. case 7:
  622. title.value = '任务创建:推理参数设置'
  623. nextBtnText.value = '提交'
  624. break
  625. default:
  626. break
  627. }
  628. }
  629. )
  630. </script>
  631. <style scoped lang="scss">
  632. @import './index.scss';
  633. </style>