createTask.vue 13 KB

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