home.vue 152 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459
  1. <template>
  2. <div class="common-layout">
  3. <el-container>
  4. <el-header>
  5. <myheader />
  6. </el-header>
  7. <el-main>
  8. <div class="main_container padding_gg">
  9. <div class="heder_tabs">
  10. <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
  11. <!-- 开始 -->
  12. <el-tab-pane label="首页" name="User">
  13. <!-- <router-link to="/"> </router-link> -->
  14. </el-tab-pane>
  15. <el-tab-pane label="问题设定" name="Role">
  16. <div class="imgzong Role">
  17. <!-- <div class="listitem lbg_color3 bkcolor3 ">
  18. <div class="threelist">
  19. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist" :key="'Role' + index"
  20. :class="{ activeOrange: active == 'Role' + index }"
  21. @click="clickgeometry($event, index, 'Role' + index, item.titlie)">
  22. <el-image :src="getImgPath(item.url)" fit="cover" />
  23. <span>{{ item.titlie }}</span>
  24. </div>
  25. </div>
  26. </div> -->
  27. <!-- <div class="item2 margr" @click="clickgeometry($event, index, 'Role-' + '2', undmodel)">
  28. <el-image :src="getImgPath('tow1.png')" fit="cover" />
  29. <span>{{ f4ce }}</span>
  30. <el-select v-model="f4ce" class="no-border headersele" :suffix-icon="CaretBottom">
  31. <el-option v-for="item in optiongroup1" :key="item.value" :label="item.label" :value="item.value">
  32. </el-option>
  33. </el-select>
  34. </div> -->
  35. <div class="listitem lbg_color3 bkcolor3 threelist">
  36. <div class="item2 margr" @click="clickgeometry($event, index, 'Role-' + '2', undmodel)">
  37. <el-image :src="getImgPath('tow1.png')" fit="cover" />
  38. <span>{{ f4ce }}</span>
  39. <el-select v-model="f4ce" class="no-border headersele" :suffix-icon="CaretBottom">
  40. <el-option v-for="item in optiongroup1" :key="item.value" :label="item.label" :value="item.value">
  41. </el-option>
  42. </el-select>
  43. </div>
  44. <div class="item2 margr" @click="clickgeometry($event, index, 'Role-' + '1', modelban)">
  45. <el-image :src="getImgPath('tow2.png')" fit="cover" />
  46. <span>{{ modelban }}</span>
  47. <el-select v-model="modelban" class="no-border headersele" :suffix-icon="CaretBottom">
  48. <el-option-group v-for="group in optiongroup" :key="group.label" :label="group.label">
  49. <el-option v-for="item in group.options" :key="item.value" :label="item.label"
  50. :value="item.value" />
  51. </el-option-group>
  52. </el-select>
  53. </div>
  54. <div class="item2 margr" @click="clickgeometry($event, index, 'Role-' + '2', undmodel)">
  55. <el-image :src="getImgPath('tow3.png')" fit="cover" />
  56. <span>{{ undmodel }}</span>
  57. <el-select v-model="undmodel" class="no-border headersele" :suffix-icon="CaretBottom">
  58. <el-option v-for="item in options4" :key="item.value" :label="item.label" :value="item.value">
  59. <div style="display: flex; align-items: center;">
  60. <img :src="item.icon" style="width: 20px; height: 20px; margin-right: 10px;" />
  61. <span>{{ item.label }}</span>
  62. </div>
  63. </el-option>
  64. </el-select>
  65. </div>
  66. </div>
  67. <!-- -->
  68. <div class="listitem lbg_color3 bkcolor3 ">
  69. <div class="threelist">
  70. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist1" :key="'Role1' + index"
  71. :class="{ activeOrange: active == 'Role1' + index }"
  72. @click="clickgeometry($event, index, 'Role1' + index, item.titlie)">
  73. <el-image :src="getImgPath(item.url)" fit="cover" />
  74. <span>{{ item.titlie }}</span>
  75. </div>
  76. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist11" :key="'Role11' + index"
  77. :class="{ activeOrange: active == 'Role11' + index }"
  78. @click="clickgeometry($event, index, 'Role11' + index, item.titlie)">
  79. <el-image :src="getImgPath(item.url)" fit="cover" />
  80. <el-color-picker v-model="color1" @change="colorpicker()"
  81. :class="{ 'is-show-panel': showTrigger }" />
  82. <span>{{ item.titlie }}</span>
  83. </div>
  84. </div>
  85. </div>
  86. <!-- -->
  87. <div class="listitem lbg_color3 bkcolor3 ">
  88. <div class="threelist">
  89. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist2" :key="'Role2' + index"
  90. :class="{ activeOrange: active == 'Role2' + index }"
  91. @click="clickgeometry($event, index, 'Role2' + index, item.titlie)">
  92. <el-image :src="getImgPath(item.url)" fit="cover" />
  93. <span>{{ item.titlie }}</span>
  94. </div>
  95. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist22" :key="'Role22' + index"
  96. :class="{ activeOrange: active == 'Role22' + index }"
  97. @click="clickgeometry($event, index, 'Role22' + index, item.titlie)">
  98. <el-image :src="getImgPath(item.url)" fit="cover" />
  99. <el-color-picker v-model="colortier" color-format="rgba" show-alpha @change="colorpickertier()"
  100. :class="{ 'is-show-panel': showTrigger }" />
  101. <span>{{ item.titlie }}</span>
  102. </div>
  103. </div>
  104. </div>
  105. <!-- -->
  106. <div class="listitem lbg_color3 bkcolor3 ">
  107. <div class="threelist">
  108. <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist3" :key="'Role3' + index"
  109. :class="{ activeOrange: active == 'Role3' + index }"
  110. @click="clickgeometry($event, index, 'Role3' + index, item.titlie)">
  111. <el-image :src="getImgPath(item.url)" fit="cover" />
  112. <span>{{ item.titlie }}</span>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </el-tab-pane>
  118. <el-tab-pane label="优化运行" name="Three">
  119. <div class="imgzong">
  120. <div class="listitem lbg_color3 bkcolor3 threelist">
  121. <div class="item2 floatitem" v-for="(item, index) in Threelist" :key="'Three-' + index"
  122. :class="{ activeOrange: active == 'Three-' + index }"
  123. @click="clickgeometry($event, index, 'Three-' + index, item.titlie)">
  124. <el-image :src="getImgPath(item.url)" fit="cover" />
  125. <span>{{ item.titlie }}</span>
  126. </div>
  127. </div>
  128. <!-- <div class="listitem lbg_color3 bkcolor3" v-for="(item, index) in Threelist1" :key="'Three1-' + index"
  129. :class="{ activeOrange: active == 'Three1' + index }"
  130. @click="clickgeometry($event, index, 'Three1' + index,item.titlie )">
  131. <div class="item2 ">
  132. <el-image :src="getImgPath(item.url)" fit="cover" />
  133. <span>{{ item.titlie }}</span>
  134. </div>
  135. </div> -->
  136. <div class="listitem lbg_color3 bkcolor3 ">
  137. <div class="threelist">
  138. <div class="item2 floatitem wentsd1" v-for="(item, index) in Threelist1" :key="'Three1' + index"
  139. :class="{ activeOrange: active == 'Three1' + index }"
  140. @click="clickgeometry($event, index, 'Three1' + index, item.titlie)">
  141. <el-image :src="getImgPath(item.url)" fit="cover" />
  142. <span>{{ item.titlie }}</span>
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. </el-tab-pane>
  148. <el-tab-pane label="可视化" name="Config">
  149. <div class="imgzong">
  150. <!-- <button @click="etImgPath()"></button> -->
  151. <div class="listitem lbg_color3 bkcolor3 threelist" v-for="(item, index) in question" :key="'Config-' + index"
  152. :class="{ activeOrange: active == 'Config-' + index }"
  153. @click="clickgeometry($event, index, 'Config-' + index, item.titlie)">
  154. <div class="item2 ">
  155. <el-image :src="getImgPath(item.url)" fit="cover" />
  156. <span>{{ item.titlie }}</span>
  157. </div>
  158. </div>
  159. </div>
  160. </el-tab-pane>
  161. <el-tab-pane label="数据库管理" name="Seven">
  162. <div class="imgzong">
  163. <div class="listitem lbg_color3 bkcolor3 threelist" v-for="(item, index) in Sevenlist" :key="'Seven' + index"
  164. :class="{ activeOrange: active == 'Seven' + index }"
  165. @click="clickgeometry($event, index, 'Seven' + index, item.titlie)">
  166. <div class="item2 ">
  167. <el-image :src="getImgPath(item.url)" fit="cover" />
  168. <span>{{ item.titlie }}</span>
  169. </div>
  170. </div>
  171. </div>
  172. </el-tab-pane>
  173. <el-tab-pane label="帮助" name="eight">
  174. <div class="imgzong">
  175. <div class="listitem lbg_color3 bkcolor3 threelist" v-for="(item, index) in eightlist" :key="'eight' + index"
  176. :class="{ activeOrange: active == 'eight' + index }"
  177. @click="clickgeometry($event, index, 'eight' + index, item.titlie)">
  178. <div class="item2 ">
  179. <el-image :src="getImgPath(item.url)" fit="cover" />
  180. <span>{{ item.titlie }}</span>
  181. </div>
  182. </div>
  183. </div>
  184. </el-tab-pane>
  185. </el-tabs>
  186. </div>
  187. <!-- 新建任务 -->
  188. <el-dialog v-model="dialog.newdialog" v-if="tabactive == '新建任务'" align-center :modal="false"
  189. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  190. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  191. class="dialog_class bgcolor tianjia">
  192. <template #header="{ titleId, titleClass }">
  193. <div class="my-header ">
  194. <el-image :src="getImgPath('s0.png')" fit="contain"></el-image>
  195. <h4 :id="titleId" :class="titleClass">新建任务</h4>
  196. </div>
  197. </template>
  198. <div>
  199. <el-form>
  200. <el-form-item label="任务编号:" :label-width="formLabelWidth6">
  201. <el-input v-model="name" maxlength="18"
  202. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  203. placeholder="请输入" />
  204. </el-form-item>
  205. <el-form-item label="任务名称:" :label-width="formLabelWidth6">
  206. <el-input v-model="name" maxlength="18"
  207. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  208. placeholder="请输入" />
  209. </el-form-item>
  210. <el-form-item label="任务类型:" :label-width="formLabelWidth6">
  211. <el-input v-model="name" maxlength="18"
  212. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  213. placeholder="请输入" />
  214. </el-form-item>
  215. <el-form-item label="备注:" :label-width="formLabelWidth6">
  216. <el-input v-model="name" maxlength="18" type="textarea"
  217. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  218. placeholder="请输入" />
  219. </el-form-item>
  220. </el-form>
  221. </div>
  222. <template #footer>
  223. <div class="dialog-footer">
  224. <el-button @click="dialog.newdialog = false">取消</el-button>
  225. <el-button type="primary" @click="dialog.newdialog = false">
  226. 确定
  227. </el-button>
  228. </div>
  229. </template>
  230. </el-dialog>
  231. <!-- 问题设定 -->
  232. <el-dialog v-model="dialog.setdialog" v-if="tabactive == '问题设定'" align-center :modal="false"
  233. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  234. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  235. class="dialog_class bgcolor tianjia">
  236. <template #header="{ titleId, titleClass }">
  237. <div class="my-header ">
  238. <el-image :src="getImgPath('q0.png')" fit="contain"></el-image>
  239. <h4 :id="titleId" :class="titleClass">问题设定</h4>
  240. </div>
  241. </template>
  242. <div class="numberinput">
  243. <el-form>
  244. <el-form-item label="目标函数个数:" :label-width="formLabelWidth1">
  245. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  246. </el-form-item>
  247. <el-form-item label="建立代理模型约束个数:" :label-width="formLabelWidth1">
  248. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  249. </el-form-item>
  250. <el-form-item label="不建立代理模型约束个数:" :label-width="formLabelWidth1">
  251. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  252. </el-form-item>
  253. </el-form>
  254. </div>
  255. <template #footer>
  256. <div class="dialog-footer">
  257. <el-button @click="dialog.setdialog = false">取消</el-button>
  258. <el-button type="primary" @click="dialog.setdialog = false">
  259. 确定
  260. </el-button>
  261. </div>
  262. </template>
  263. </el-dialog>
  264. <!-- 外形参数化 -->
  265. <el-dialog v-model="dialog.parameter" v-if="tabactive == 'Task-11'" align-center :modal="false"
  266. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  267. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  268. class="dialog_class bgcolor tianjia sel">
  269. <template #header="{ titleId, titleClass }">
  270. <div class="my-header ">
  271. <el-image :src="getImgPath('t0.png')" fit="contain"></el-image>
  272. <h4 :id="titleId" :class="titleClass">外形参数化</h4>
  273. </div>
  274. </template>
  275. <div class="numberinput">
  276. <el-form>
  277. <el-form-item label="参数化方法:" :label-width="formLabelWidth6">
  278. <el-select v-model="canshu" :suffix-icon="CaretBottom" placeholder="请选择">
  279. <el-option v-for="item in canshulist" :key="item.value" :label="item.label" :value="item.value">
  280. </el-option>
  281. </el-select>
  282. </el-form-item>
  283. </el-form>
  284. </div>
  285. <template #footer>
  286. <div class="dialog-footer">
  287. <el-button @click="dialog.parameter = false">取消</el-button>
  288. <el-button type="primary" @click="dialog.parameter = false">
  289. 确定
  290. </el-button>
  291. </div>
  292. </template>
  293. </el-dialog>
  294. <!-- 代理模型 -->
  295. <el-dialog v-model="dialog.agency" v-if="tabactive == '代理模型'" align-center :modal="false"
  296. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  297. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  298. class="dialog_class bgcolor tianjia sel">
  299. <template #header="{ titleId, titleClass }">
  300. <div class="my-header ">
  301. <el-image :src="getImgPath('t2.png')" fit="contain"></el-image>
  302. <h4 :id="titleId" :class="titleClass">代理模型</h4>
  303. </div>
  304. </template>
  305. <div class="numberinput">
  306. <el-form>
  307. <el-form-item label="代理模型类型:" :label-width="formLabelWidth2">
  308. <el-select v-model="agval" :suffix-icon="CaretBottom" placeholder="请选择">
  309. <el-option v-for="item in agelist" :key="item.value" :label="item.label" :value="item.value">
  310. </el-option>
  311. </el-select>
  312. </el-form-item>
  313. <el-form-item label="设计空间类型:" :label-width="formLabelWidth2">
  314. <el-select v-model="agval1" :suffix-icon="CaretBottom" placeholder="请选择">
  315. <el-option v-for="item in agelist1" :key="item.value" :label="item.label" :value="item.value">
  316. </el-option>
  317. </el-select>
  318. </el-form-item>
  319. <el-form-item label="试验设计方法:" :label-width="formLabelWidth2">
  320. <el-select v-model="agval2" :suffix-icon="CaretBottom" placeholder="请选择">
  321. <el-option v-for="item in agelist2" :key="item.value" :label="item.label" :value="item.value">
  322. </el-option>
  323. </el-select>
  324. </el-form-item>
  325. <el-form-item label="初始样本点数:" :label-width="formLabelWidth2">
  326. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  327. </el-form-item>
  328. </el-form>
  329. </div>
  330. <template #footer>
  331. <div class="dialog-footer">
  332. <el-button @click="dialog.agency = false">取消</el-button>
  333. <el-button type="primary" @click="dialog.agency = false">
  334. 确定
  335. </el-button>
  336. </div>
  337. </template>
  338. </el-dialog>
  339. <!-- 终止条件 -->
  340. <el-dialog v-model="dialog.enddialog" v-if="tabactive == '终止条件 '" align-center :modal="false"
  341. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  342. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  343. class="dialog_class bgcolor tianjia sel">
  344. <template #header="{ titleId, titleClass }">
  345. <div class="my-header ">
  346. <el-image :src="getImgPath('t4.png')" fit="contain"></el-image>
  347. <h4 :id="titleId" :class="titleClass">终止条件</h4>
  348. </div>
  349. </template>
  350. <div class="numberinput">
  351. <el-form>
  352. <el-form-item label="EI最小值:" :label-width="formLabelWidth1">
  353. <el-input v-model="name" maxlength="18"
  354. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  355. placeholder="请输入" />
  356. </el-form-item>
  357. <el-form-item label="目标函数收敛误差:" :label-width="formLabelWidth1">
  358. <el-input v-model="name" maxlength="18"
  359. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  360. placeholder="请输入" />
  361. </el-form-item>
  362. <el-form-item label="优化解收敛精度:" :label-width="formLabelWidth1">
  363. <el-input v-model="name" maxlength="18"
  364. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  365. placeholder="请输入" />
  366. </el-form-item>
  367. <el-form-item label="真实函数约束精度:" :label-width="formLabelWidth1">
  368. <el-input v-model="name" maxlength="18"
  369. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  370. placeholder="请输入" />
  371. </el-form-item>
  372. <el-form-item label="代理模型约束精度:" :label-width="formLabelWidth1">
  373. <el-input v-model="name" maxlength="18"
  374. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  375. placeholder="请输入" />
  376. </el-form-item>
  377. </el-form>
  378. </div>
  379. <template #footer>
  380. <div class="dialog-footer">
  381. <el-button @click="dialog.enddialog = false">取消</el-button>
  382. <el-button type="primary" @click="dialog.enddialog = false">
  383. 确定
  384. </el-button>
  385. </div>
  386. </template>
  387. </el-dialog>
  388. <!-- 优化算法 -->
  389. <!-- <el-dialog v-model="dialog.sufun" v-if="tabactive == '优化算法'" align-center :modal="false"
  390. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  391. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  392. class="dialog_class sel bgcolor tianjia sel">
  393. <template #header="{ titleId, titleClass }">
  394. <div class="my-header ">
  395. <el-image :src="getImgPath('Framem.png')" fit="contain"></el-image>
  396. <h4 :id="titleId" :class="titleClass">优化算法</h4>
  397. </div>
  398. </template>
  399. <div class="numberinput">
  400. <div>
  401. <el-form-item label="优化算法" :label-width="formLabelWidth1">
  402. <el-select v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
  403. <el-option v-for="item in yslist" :key="item.value" :label="item.label" :value="item.value">
  404. </el-option>
  405. </el-select>
  406. </el-form-item>
  407. <el-form-item label="种群规模:" :label-width="formLabelWidth1">
  408. <el-input-number v-model="youhua.popsize" :min="1" :max="10" controls-position="right" />
  409. </el-form-item>
  410. <el-form-item label="进化代数:" :label-width="formLabelWidth1">
  411. <el-input-number v-model="youhua.epoch" :min="1" :max="10" controls-position="right" />
  412. </el-form-item>
  413. <el-form-item label="交叉概率:" :label-width="formLabelWidth1">
  414. <el-input-number v-model="youhua.probcrossover" :min="1" :max="10" controls-position="right" />
  415. </el-form-item>
  416. <el-form-item label="变异概率:" :label-width="formLabelWidth1">
  417. <el-input-number v-model="youhua.probmut" :min="1" :max="10" controls-position="right" />
  418. </el-form-item>
  419. <el-form-item label="交叉算子:" :label-width="formLabelWidth1">
  420. <el-select v-model="youhua.proboperator" :suffix-icon="CaretBottom" placeholder="请选择">
  421. <el-option v-for="item in addlist2" :key="item.value" :label="item.label" :value="item.value">
  422. </el-option>
  423. </el-select>
  424. </el-form-item>
  425. <el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
  426. <el-input-number v-model="youhua.probscale" :min="1" :max="10" controls-position="right" />
  427. </el-form-item>
  428. <el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
  429. <el-select v-model="youhua.strategy" :suffix-icon="CaretBottom" placeholder="请选择">
  430. <el-option v-for="item in addlist3" :key="item.value" :label="item.label" :value="item.value">
  431. </el-option>
  432. </el-select>
  433. </el-form-item>
  434. <el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
  435. <el-select v-model="youhua.operator" :suffix-icon="CaretBottom" placeholder="请选择">
  436. <el-option v-for="item in addlist4" :key="item.value" :label="item.label" :value="item.value">
  437. </el-option>
  438. </el-select>
  439. </el-form-item>
  440. <el-form-item label="GPU" :label-width="formLabelWidth1">
  441. <el-select v-model="youhua.gpu" :suffix-icon="CaretBottom" placeholder="请选择">
  442. <el-option v-for="item in addlist8" :key="item.value" :label="item.label" :value="item.value">
  443. </el-option>
  444. </el-select>
  445. </el-form-item>
  446. </div>
  447. </div>
  448. <template #footer>
  449. <div class="dialog-footer">
  450. <el-button @click="dialog.sufun = false">取消</el-button>
  451. <el-button type="primary" @click="dialog.sufun = false">
  452. 确定
  453. </el-button>
  454. </div>
  455. </template>
  456. </el-dialog> -->
  457. <!-- 加点方法 -->
  458. <el-dialog v-model="dialog.addfun" v-if="tabactive == '加点方法'" align-center :modal="false"
  459. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  460. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="480"
  461. class="dialog_class sel bgcolor tianjia sel">
  462. <template #header="{ titleId, titleClass }">
  463. <div class="my-header ">
  464. <el-image :src="getImgPath('t3.png')" fit="contain"></el-image>
  465. <h4 :id="titleId" :class="titleClass">加点方法</h4>
  466. </div>
  467. </template>
  468. <div class="numberinput">
  469. <el-form>
  470. <el-form-item label="最大样本点数:" :label-width="formLabelWidth1">
  471. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  472. </el-form-item>
  473. <el-form-item label="加点准则:" :label-width="formLabelWidth1">
  474. <el-select v-model="addval" :suffix-icon="CaretBottom" placeholder="请选择">
  475. <el-option v-for="item in addlist" :key="item.value" :label="item.label" :value="item.value">
  476. </el-option>
  477. </el-select>
  478. </el-form-item>
  479. <el-form-item label="单次迭代新增样本点数:" :label-width="formLabelWidth1">
  480. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  481. </el-form-item>
  482. <el-form-item label="约束处理方法:" :label-width="formLabelWidth1">
  483. <el-select v-model="addval1" :suffix-icon="CaretBottom" placeholder="请选择">
  484. <el-option v-for="item in addlist1" :key="item.value" :label="item.label" :value="item.value">
  485. </el-option>
  486. </el-select>
  487. </el-form-item>
  488. </el-form>
  489. </div>
  490. <template #footer>
  491. <div class="dialog-footer">
  492. <el-button @click="dialog.addfun = false">取消</el-button>
  493. <el-button type="primary" @click="dialog.addfun = false">
  494. 确定
  495. </el-button>
  496. </div>
  497. </template>
  498. </el-dialog>
  499. <!-- 任务管理 -->
  500. <el-dialog v-model="dialog.task" v-if="tabactive == '任务管理'" align-center :modal="false"
  501. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  502. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="800px"
  503. class="dialog_class bgcolor tianjia">
  504. <template #header="{ titleId, titleClass }">
  505. <div class="my-header ">
  506. <el-image :src="getImgPath('s11.png')" fit="contain"></el-image>
  507. <h4 :id="titleId" :class="titleClass">任务管理</h4>
  508. </div>
  509. </template>
  510. <div>
  511. <el-table :data="tasktable" stripe style="width: 100%">
  512. <el-table-column prop="id" label="任务编号" />
  513. <el-table-column prop="name" label="任务名称" />
  514. <el-table-column prop="state" label="任务类型" />
  515. <el-table-column prop="time" label="备注" />
  516. </el-table>
  517. <div class="sev_ruwu sev">
  518. <div class="disflex">
  519. <el-form-item label="关键字:">
  520. <el-select v-model="seval4" :suffix-icon="CaretBottom" placeholder="请选择">
  521. <el-option v-for="item in sevlist" :key="item.value" :label="item.label" :value="item.value">
  522. </el-option>
  523. </el-select>
  524. </el-form-item>
  525. <el-input v-model="name" maxlength="18"
  526. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  527. placeholder="请输入" />
  528. <el-button class="btncolor">查询</el-button>
  529. <el-button class="btncolor">添加</el-button>
  530. <el-button class="btncolor">删除</el-button>
  531. <el-button class="btncolor">提交</el-button>
  532. </div>
  533. </div>
  534. </div>
  535. <template #footer>
  536. <div class="dialog-footer">
  537. <el-button @click="dialog.task = false">取消</el-button>
  538. <el-button type="primary" @click="dialog.task = false">
  539. 确定
  540. </el-button>
  541. </div>
  542. </template>
  543. </el-dialog>
  544. <!-- 任务检索 -->
  545. <el-dialog v-model="dialog.guanli" v-if="tabactive == '任务检索'" align-center :modal="false"
  546. :close-on-click-modal="true" :append-to-body="true" draggable :fullscreen="false"
  547. :modal-append-to-body="false" modal-class="summary-dlg" :before-close="handleClose" width="800px"
  548. class="dialog_class bgcolor tianjia">
  549. <template #header="{ titleId, titleClass }">
  550. <div class="my-header ">
  551. <el-image :src="getImgPath('s11.png')" fit="contain"></el-image>
  552. <h4 :id="titleId" :class="titleClass">任务检索</h4>
  553. </div>
  554. </template>
  555. <div>
  556. <div class="sev_ruwu">
  557. <div class="disflex">
  558. <el-form-item label="关键字:">
  559. <el-select v-model="seval4" :suffix-icon="CaretBottom" placeholder="请选择">
  560. <el-option v-for="item in sevlist" :key="item.value" :label="item.label" :value="item.value">
  561. </el-option>
  562. </el-select>
  563. </el-form-item>
  564. <el-input v-model="name" maxlength="18"
  565. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  566. placeholder="请输入关键字" />
  567. <el-checkbox class="magright" label="范围" v-model="checkbox" />
  568. <el-button class="btncolor">查询</el-button>
  569. </div>
  570. </div>
  571. <el-table :data="tasktable" stripe style="width: 100%">
  572. <el-table-column prop="id" label="任务编号" />
  573. <el-table-column prop="name" label="任务名称" />
  574. <el-table-column prop="state" label="任务类型" />
  575. <el-table-column prop="time" label="备注" />
  576. </el-table>
  577. </div>
  578. <template #footer>
  579. <div class="dialog-footer">
  580. <el-button @click="dialog.guanli = false">取消</el-button>
  581. <el-button type="primary" @click="dialog.guanli = false">
  582. 确定
  583. </el-button>
  584. </div>
  585. </template>
  586. </el-dialog>
  587. <!-- 优化器 -->
  588. <el-dialog v-model="dialog.optimizer" align-center :modal="false" :close-on-click-modal="false"
  589. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  590. :before-close="handleClose" width="430" class="dialog_class bgcolor tianjia sel">
  591. <template #header="{ titleId, titleClass }">
  592. <div class="my-header ">
  593. <el-image :src="getImgPath('t2.png')" fit="contain"></el-image>
  594. <h4 :id="titleId" :class="titleClass">优化器</h4>
  595. </div>
  596. </template>
  597. <div class="numberinput lefttext">
  598. <el-form>
  599. <span>代理模型</span>
  600. <el-form-item label="代理模型类型:" :label-width="formLabelWidth1">
  601. <el-select v-model="agval" :suffix-icon="CaretBottom" placeholder="请选择">
  602. <el-option v-for="item in agelist" :key="item.value" :label="item.label" :value="item.value">
  603. </el-option>
  604. </el-select>
  605. </el-form-item>
  606. <el-form-item label="设计空间类型:" :label-width="formLabelWidth1">
  607. <el-select v-model="agval1" :suffix-icon="CaretBottom" placeholder="请选择">
  608. <el-option v-for="item in agelist1" :key="item.value" :label="item.label" :value="item.value">
  609. </el-option>
  610. </el-select>
  611. </el-form-item>
  612. <el-form-item label="试验设计方法:" :label-width="formLabelWidth1">
  613. <el-select v-model="agval2" :suffix-icon="CaretBottom" placeholder="请选择">
  614. <el-option v-for="item in agelist2" :key="item.value" :label="item.label" :value="item.value">
  615. </el-option>
  616. </el-select>
  617. </el-form-item>
  618. <el-form-item label="初始样本点数:" :label-width="formLabelWidth1">
  619. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  620. </el-form-item>
  621. <span>加点准则</span>
  622. <el-form-item label="最大样本点数:" :label-width="formLabelWidth1">
  623. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  624. </el-form-item>
  625. <el-form-item label="加点准则:" :label-width="formLabelWidth1">
  626. <el-select v-model="addval" :suffix-icon="CaretBottom" placeholder="请选择">
  627. <el-option v-for="item in addlist" :key="item.value" :label="item.label" :value="item.value">
  628. </el-option>
  629. </el-select>
  630. </el-form-item>
  631. <el-form-item label="单次迭代新增样本点数:" :label-width="formLabelWidth1">
  632. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  633. </el-form-item>
  634. <el-form-item label="约束处理方法:" :label-width="formLabelWidth1">
  635. <el-select v-model="addval1" :suffix-icon="CaretBottom" placeholder="请选择">
  636. <el-option v-for="item in addlist1" :key="item.value" :label="item.label" :value="item.value">
  637. </el-option>
  638. </el-select>
  639. </el-form-item>
  640. <span>优化算法</span>
  641. <el-form-item label="优化算法:" :label-width="formLabelWidth1">
  642. <el-select v-model="ys" :suffix-icon="CaretBottom" placeholder="请选择">
  643. <el-option v-for="item in yslist" :key="item.value" :label="item.label" :value="item.value">
  644. </el-option>
  645. </el-select>
  646. </el-form-item>
  647. <el-form-item label="种群规模:" :label-width="formLabelWidth1">
  648. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  649. </el-form-item>
  650. <el-form-item label="最大迭代次数:" :label-width="formLabelWidth1">
  651. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  652. </el-form-item>
  653. <el-form-item label="交叉概率:" :label-width="formLabelWidth1">
  654. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  655. </el-form-item>
  656. <el-form-item label="变异概率:" :label-width="formLabelWidth1">
  657. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  658. </el-form-item>
  659. <el-form-item label="交叉算子:" :label-width="formLabelWidth1">
  660. <el-select v-model="addval2" :suffix-icon="CaretBottom" placeholder="请选择">
  661. <el-option v-for="item in addlist2" :key="item.value" :label="item.label" :value="item.value">
  662. </el-option>
  663. </el-select>
  664. </el-form-item>
  665. <el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
  666. <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
  667. </el-form-item>
  668. <el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
  669. <el-select v-model="addval3" :suffix-icon="CaretBottom" placeholder="请选择">
  670. <el-option v-for="item in addlist3" :key="item.value" :label="item.label" :value="item.value">
  671. </el-option>
  672. </el-select>
  673. </el-form-item>
  674. <el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
  675. <el-select v-model="addval4" :suffix-icon="CaretBottom" placeholder="请选择">
  676. <el-option v-for="item in addlist4" :key="item.value" :label="item.label" :value="item.value">
  677. </el-option>
  678. </el-select>
  679. </el-form-item>
  680. <el-form-item label="precision:" :label-width="formLabelWidth1">
  681. <el-select v-model="addval7" :suffix-icon="CaretBottom" placeholder="请选择">
  682. <el-option v-for="item in addlist7" :key="item.value" :label="item.label" :value="item.value">
  683. </el-option>
  684. </el-select>
  685. </el-form-item>
  686. <el-form-item label="GPU" :label-width="formLabelWidth1">
  687. <el-select v-model="addval8" :suffix-icon="CaretBottom" placeholder="请选择">
  688. <el-option v-for="item in addlist8" :key="item.value" :label="item.label" :value="item.value">
  689. </el-option>
  690. </el-select>
  691. </el-form-item>
  692. </el-form>
  693. </div>
  694. <template #footer>
  695. <div class="dialog-footer">
  696. <el-button @click="dialog.optimizer = false">取消</el-button>
  697. <el-button type="primary" @click="dialog.optimizer = false">
  698. 确定
  699. </el-button>
  700. </div>
  701. </template>
  702. </el-dialog>
  703. <!-- Xfiol改版后的 -->
  704. <el-dialog v-model="dialog.Xfiol" align-center :modal="false" :close-on-click-modal="false"
  705. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false"
  706. modal-class="summary-dlg2 summary-dlg" :before-close="handleClose" width="675"
  707. class="dialog_class bgcolor tianjia colortext sel">
  708. <template #header="{ titleId, titleClass }">
  709. <div class="my-header ">
  710. <el-image :src="getImgPath('xuek9.png')" fit="contain"></el-image>
  711. <h4 :id="titleId" :class="titleClass">Xfoil</h4>
  712. </div>
  713. </template>
  714. <Xfoil ref="Xfoilref"/>
  715. <template #footer>
  716. <div class="dialog-footer">
  717. <!-- <el-button type="info" @click="newxfoil">新建 </el-button> -->
  718. <el-button type="info" @click="dialog.Xfiol = false">取消</el-button>
  719. <el-button type="primary" @click="xfoilok();dialog.Xfiol = false">
  720. 确定
  721. </el-button>
  722. </div>
  723. </template>
  724. </el-dialog>
  725. <!-- 列表 -->
  726. <el-dialog v-model="dialog.listdialog" align-center :modal="false" :close-on-click-modal="false"
  727. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  728. :before-close="handleClose" width="537" class="dialog_style sel" style="max-height: 70%;">
  729. <template #header="{ titleId, titleClass }">
  730. <div class="my-header ">
  731. <h4 :id="titleId" :class="titleClass">列表</h4>
  732. </div>
  733. </template>
  734. <div>
  735. <ListSE />
  736. <!-- <el-form>
  737. <el-form-item label="设计集:" >
  738. <el-select v-model="listval" :suffix-icon="CaretBottom" placeholder="请选择">
  739. <el-option v-for="item in listoptions" :key="item.value" :label="item.label" :value="item.value">
  740. </el-option>
  741. </el-select>
  742. </el-form-item>
  743. <el-form-item label="选择要在表中显示的一个或者多个变量和响应" >
  744. </el-form-item>
  745. <el-card shadow="hover" style="width: 100%">
  746. <el-checkbox-group v-model="listcbval">
  747. <el-checkbox v-for="item in Listcheckbox" :key="item.value" :label="item.value" style="display: block">{{ item.label }}</el-checkbox>
  748. </el-checkbox-group>
  749. </el-card>
  750. </el-form> -->
  751. </div>
  752. <template #footer>
  753. <div class="dialog-footer">
  754. <el-button @click="dialog.listdialog = false">取消</el-button>
  755. <el-button type="primary" @click="dialog.listdialog = false">
  756. 确定
  757. </el-button>
  758. </div>
  759. </template>
  760. </el-dialog>
  761. <!-- 散点图 -->
  762. <el-dialog v-model="dialog.scatterdialog" align-center :modal="false" :close-on-click-modal="false"
  763. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  764. :before-close="handleClose" width="500" class="dialog_style bgcolor tianjia sel" style="max-height: 70%;">
  765. <template #header="{ titleId, titleClass }">
  766. <div class="my-header ">
  767. <h4 :id="titleId" :class="titleClass">散点图</h4>
  768. </div>
  769. </template>
  770. <div>
  771. <ListSE />
  772. </div>
  773. <template #footer>
  774. <div class="dialog-footer">
  775. <el-button @click="dialog.scatterdialog = false">取消</el-button>
  776. <el-button type="primary" @click="dialog.scatterdialog = false">
  777. 确定
  778. </el-button>
  779. </div>
  780. </template>
  781. </el-dialog>
  782. <!-- 折线图 -->
  783. <el-dialog v-model="dialog.echartLinedialog" align-center :modal="false" :close-on-click-modal="false"
  784. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  785. :before-close="handleClose" width="500" class="dialog_style bgcolor tianjia sel" style="max-height: 70%;">
  786. <template #header="{ titleId, titleClass }">
  787. <div class="my-header ">
  788. <h4 :id="titleId" :class="titleClass">折线图</h4>
  789. </div>
  790. </template>
  791. <div>
  792. <ListSE />
  793. </div>
  794. <template #footer>
  795. <div class="dialog-footer">
  796. <el-button @click="dialog.echartLinedialog = false">取消</el-button>
  797. <el-button type="primary" @click="dialog.echartLinedialog = false">
  798. 确定
  799. </el-button>
  800. </div>
  801. </template>
  802. </el-dialog>
  803. <!-- 帕雷托图 -->
  804. <el-dialog v-model="dialog.paretodialog" align-center :modal="false" :close-on-click-modal="false"
  805. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  806. :before-close="handleClose" width="500" class="dialog_style bgcolor tianjia sel" style="max-height: 70%;">
  807. <template #header="{ titleId, titleClass }">
  808. <div class="my-header ">
  809. <h4 :id="titleId" :class="titleClass">帕雷托图</h4>
  810. </div>
  811. </template>
  812. <div>
  813. <el-form>
  814. <el-form-item label="选择在X轴显示的一个变量和响应" >
  815. </el-form-item>
  816. <el-card>
  817. <el-checkbox-group v-model="paretocbval">
  818. <el-checkbox v-for="item in paretocheckbox" :key="item.value" :label="item.value" style="display: block">{{ item.label }}</el-checkbox>
  819. </el-checkbox-group>
  820. </el-card>
  821. <el-form-item label="选择在Y轴显示的一个变量和响应" >
  822. </el-form-item>
  823. <el-card shadow="hover" style="width: 100%">
  824. <el-checkbox-group v-model="paretocbval">
  825. <el-checkbox v-for="item in paretocheckbox" :key="item.value" :label="item.value" style="display: block">{{ item.label }}</el-checkbox>
  826. </el-checkbox-group>
  827. </el-card>
  828. </el-form>
  829. </div>
  830. <template #footer>
  831. <div class="dialog-footer">
  832. <el-button @click="dialog.paretodialog = false">取消</el-button>
  833. <el-button type="primary" @click="dialog.paretodialog = false">
  834. 确定
  835. </el-button>
  836. </div>
  837. </template>
  838. </el-dialog>
  839. <!-- 云图/等值线图 -->
  840. <el-dialog v-model="dialog.clouddialog" align-center :modal="false" :close-on-click-modal="false"
  841. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  842. :before-close="handleClose" width="800" class="dialog_style bgcolor tianjia sel cloudChart" style="height: 72%;">
  843. <template #header="{ titleId, titleClass }">
  844. <div class="my-header ">
  845. <h4 :id="titleId" :class="titleClass">云图/等值线显示</h4>
  846. </div>
  847. </template>
  848. <div>
  849. <div class="cloudbox">
  850. <el-row gutter="20">
  851. <el-col :span="2"></el-col>
  852. <el-col v-for="(item,index) in cloudbtnbox" :key="index" :span="4">
  853. <el-button style="width: 100%;" @click="openSeconddialog(item.btnname)">
  854. <el-image :src="getImgPath(item.url)" alt="img" fit="cover" style="width: 20px;margin-right: 4px;" />
  855. {{ item.btnname }}
  856. </el-button>
  857. </el-col>
  858. </el-row>
  859. </div>
  860. <cloudChart/>
  861. </div>
  862. </el-dialog>
  863. <!-- 云图二级弹窗 -->
  864. <el-dialog v-model="seconddialogshow"
  865. align-center
  866. :modal="false"
  867. :close-on-click-modal="false"
  868. :append-to-body="true"
  869. draggable
  870. :fullscreen="false"
  871. :modal-append-to-body="false"
  872. modal-class="summary-dlg"
  873. :before-close="handleClose"
  874. width="600"
  875. class="dialog_class bgcolor tianjia"
  876. >
  877. <template #header="{ titleId, titleClass }">
  878. <div class="my-header">
  879. <h4 :id="titleId" :class="titleClass">{{ cloudsedtitle }}</h4>
  880. </div>
  881. </template>
  882. <cloudsecond :activesd="activesd"/>
  883. <template #footer>
  884. <div class="dialog-footer">
  885. <el-button @click="seconddialogshow = false">取消</el-button>
  886. <el-button type="primary" @click="seconddialogshow = false">
  887. 确定
  888. </el-button>
  889. </div>
  890. </template>
  891. </el-dialog>
  892. <!-- 查看报告 -->
  893. <el-dialog v-model="dialog.lookover" align-center :modal="false" :close-on-click-modal="false"
  894. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlgPdf"
  895. :before-close="handleClose" width="580px" height="800px">
  896. <template #header="{ titleId, titleClass }">
  897. <div class="my-header ">
  898. <el-image :src="getImgPath('k8.png')" fit="contain"></el-image>
  899. <h4 :id="titleId" :class="titleClass">查看报告:</h4>
  900. </div>
  901. </template>
  902. <pdfReportView/>
  903. <!-- <div class="numberinput lefttext">
  904. <el-form>
  905. <el-image :src="getImgPath('baog.png')" fit="contain"></el-image>
  906. </el-form>
  907. </div> -->
  908. <template #footer>
  909. <div class="dialog-footer">
  910. <el-button @click="dialog.lookover = false">取消</el-button>
  911. <el-button type="primary" @click="dialog.lookover = false">
  912. 确定
  913. </el-button>
  914. </div>
  915. </template>
  916. </el-dialog>
  917. <!-- 导出报告 -->
  918. <el-dialog v-model="dialog.exportreport" align-center :modal="false" :close-on-click-modal="false"
  919. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  920. :before-close="handleClose" width="600" class="dialog_class bgcolor tianjia sel" style="max-height: 70%;">
  921. <template #header="{ titleId, titleClass }">
  922. <div class="my-header ">
  923. <h4 :id="titleId" :class="titleClass">导出报告:</h4>
  924. </div>
  925. </template>
  926. <Exreport />
  927. <template #footer>
  928. <div class="dialog-footer">
  929. <el-button @click="dialog.exportreport = false">取消</el-button>
  930. <el-button type="primary" @click="dialog.exportreport = false">
  931. 确定
  932. </el-button>
  933. </div>
  934. </template>
  935. </el-dialog>
  936. <!-- 气动分析Xfoil、ADflow -->
  937. <el-dialog v-model="dialog.XfAD" align-center :modal="false" :close-on-click-modal="false"
  938. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  939. :before-close="handleClose" width="860" class="dialog_class bgcolor tianjia sel colortext">
  940. <template #header="{ titleId, titleClass }">
  941. <div class="my-header ">
  942. <!-- <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image> -->
  943. <h4 :id="titleId" :class="titleClass">气动分析</h4>
  944. </div>
  945. </template>
  946. <div class="numberinput lefttext ">
  947. <el-form>
  948. <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick3">
  949. <el-tab-pane label="Xfoil" name="Xfoil">
  950. <Xfoil ref="Xfoilref"/>
  951. </el-tab-pane>
  952. <!-- ADflow -->
  953. <el-tab-pane label="ADflow" name="ADflow">
  954. <ADflow ref="ADflowref"/>
  955. </el-tab-pane>
  956. </el-tabs>
  957. </el-form>
  958. </div>
  959. <template #footer>
  960. <div class="dialog-footer">
  961. <el-button @click="dialog.XfAD = false">取消</el-button>
  962. <el-button type="primary" @click="getXfoilAdflowsave(activeadf);dialog.XfAD = false;">
  963. 确定
  964. </el-button>
  965. </div>
  966. </template>
  967. </el-dialog>
  968. <!-- CST -->
  969. <el-dialog v-model="dialog.CSTt" align-center :modal="false" :close-on-click-modal="false"
  970. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  971. :before-close="handleClose" width="840" class="dialog_class bgcolor colortext tianjia sel">
  972. <template #header="{ titleId, titleClass }">
  973. <div class="my-header ">
  974. <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image>
  975. <h4 :id="titleId" :class="titleClass">CST</h4>
  976. </div>
  977. </template>
  978. <csts ref="Cstref"/>
  979. <template #footer>
  980. <div class="dialog-footer">
  981. <el-button @click="dialog.CSTt = false">取消</el-button>
  982. <el-button type="primary" @click="cstok()">
  983. 确定
  984. </el-button>
  985. </div>
  986. </template>
  987. </el-dialog>
  988. <!-- FFD -->
  989. <el-dialog v-model="dialog.ffdt" align-center :modal="false" :close-on-click-modal="false"
  990. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  991. :before-close="handleClose" width="730" class="dialog_class bgcolor colortext tianjia sel">
  992. <template #header="{ titleId, titleClass }">
  993. <div class="my-header ">
  994. <el-image :src="getImgPath('ffd.png')" fit="contain"></el-image>
  995. <h4 :id="titleId" :class="titleClass">FFD</h4>
  996. </div>
  997. </template>
  998. <ffds ref="Ffdref"/>
  999. <template #footer>
  1000. <div class="dialog-footer">
  1001. <el-button @click="dialog.ffdt = false">取消</el-button>
  1002. <el-button type="primary" @click="ffdok()">
  1003. 确定
  1004. </el-button>
  1005. </div>
  1006. </template>
  1007. </el-dialog>
  1008. <!-- 气动分析CST、FFD -->
  1009. <el-dialog v-model="dialog.cstffd" align-center :modal="false" :close-on-click-modal="false"
  1010. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1011. :before-close="handleClose" width="1000" class="dialog_class bgcolor tianjia sel colortext">
  1012. <template #header="{ titleId, titleClass }">
  1013. <div class="my-header ">
  1014. <h4 :id="titleId" :class="titleClass">参数化</h4>
  1015. </div>
  1016. </template>
  1017. <div class="numberinput lefttext ">
  1018. <el-form>
  1019. <!-- CST -->
  1020. <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick2">
  1021. <el-tab-pane label="CST" name="CST">
  1022. <csts ref="Cstref"/>
  1023. </el-tab-pane>
  1024. <!-- FFD -->
  1025. <el-tab-pane label="FFD" name="FFD">
  1026. <ffds ref="Ffdref"/>
  1027. </el-tab-pane>
  1028. </el-tabs>
  1029. </el-form>
  1030. </div>
  1031. <template #footer>
  1032. <div class="dialog-footer">
  1033. <el-button @click="dialog.cstffd = false">取消</el-button>
  1034. <el-button type="primary" @click="getCstFfdsave(activeadf);dialog.cstffd = false">
  1035. 确定
  1036. </el-button>
  1037. </div>
  1038. </template>
  1039. </el-dialog>
  1040. <!-- TACS -->
  1041. <el-dialog v-model="dialog.Taxs" align-center :modal="false" :close-on-click-modal="false"
  1042. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1043. :before-close="handleClose" width="700" class="dialog_class bgcolor tianjia sel colortext ">
  1044. <template #header="{ titleId, titleClass }">
  1045. <div class="my-header ">
  1046. <!-- <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image> -->
  1047. <h4 :id="titleId" :class="titleClass">TACS</h4>
  1048. </div>
  1049. </template>
  1050. <TACS />
  1051. <template #footer>
  1052. <div class="dialog-footer">
  1053. <el-button @click="dialog.Taxs = false">取消</el-button>
  1054. <el-button type="primary">
  1055. 确定
  1056. </el-button>
  1057. </div>
  1058. </template>
  1059. </el-dialog>
  1060. <!-- 优化器 -->
  1061. <el-dialog v-model="dialog.optgroup" align-center :modal="false" :close-on-click-modal="false"
  1062. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1063. :before-close="handleClose" width="700" class="dialog_class bgcolor tianjia sel colortext">
  1064. <template #header="{ titleId, titleClass }">
  1065. <div class="my-header ">
  1066. <h4 :id="titleId" :class="titleClass">优化器</h4>
  1067. </div>
  1068. </template>
  1069. <div class="numberinput lefttext ">
  1070. <el-form>
  1071. <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick">
  1072. <!-- 代理优化器 -->
  1073. <el-tab-pane label="代理优化器" name="代理优化器">
  1074. <Doptimize ref='Doptimizeref'/>
  1075. </el-tab-pane>
  1076. <!-- 进步优化器 -->
  1077. <el-tab-pane label="进化优化器" name="进化优化器">
  1078. <Joptimize ref='Joptimizeref'/>
  1079. </el-tab-pane>
  1080. <!-- 梯度优化器 -->
  1081. <el-tab-pane label="梯度优化器" name="梯度优化器">
  1082. <Toptimize ref='Toptimizeref'/>
  1083. </el-tab-pane>
  1084. </el-tabs>
  1085. </el-form>
  1086. </div>
  1087. <template #footer>
  1088. <div class="dialog-footer">
  1089. <el-button @click="dialog.optgroup = false">取消</el-button>
  1090. <el-button type="primary" @click="getSave(activeadf);dialog.optgroup = false">
  1091. 确定
  1092. </el-button>
  1093. </div>
  1094. </template>
  1095. </el-dialog>
  1096. <!-- 单独的进步优化器 -->
  1097. <el-dialog v-model="dialog.jboptimizer" align-center :modal="false" :close-on-click-modal="false"
  1098. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1099. :before-close="handleClose" width="430" class="dialog_class bgcolor tianjia sel colortext">
  1100. <template #header="{ titleId, titleClass }">
  1101. <div class="my-header ">
  1102. <el-image :src="getImgPath('t2.png')" fit="contain"></el-image>
  1103. <h4 :id="titleId" :class="titleClass">优化算法:</h4>
  1104. </div>
  1105. </template>
  1106. <Joptimize ref='Joptimizeref'/>
  1107. <template #footer>
  1108. <div class="dialog-footer">
  1109. <el-button @click="dialog.jboptimizer = false">取消</el-button>
  1110. <el-button type="primary" @click="getaddsave(); dialog.jboptimizer = false">
  1111. 确定
  1112. </el-button>
  1113. </div>
  1114. </template>
  1115. </el-dialog>
  1116. <!-- 单独的代理优化器 -->
  1117. <el-dialog v-model="dialog.dboptimizer" align-center :modal="false" :close-on-click-modal="false"
  1118. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1119. :before-close="handleClose" width="530" class="dialog_class bgcolor tianjia sel colortext">
  1120. <template #header="{ titleId, titleClass }">
  1121. <div class="my-header ">
  1122. <!-- <el-image :src="getImgPath('t2.png')" fit="contain"></el-image> -->
  1123. <h4 :id="titleId" :class="titleClass">代理优化器</h4>
  1124. </div>
  1125. </template>
  1126. <Doptimize ref="Doptimizeref"/>
  1127. <template #footer>
  1128. <div class="dialog-footer">
  1129. <el-button @click="dialog.dboptimizer = false">取消</el-button>
  1130. <el-button type="primary" @click="getDaddsave(); dialog.dboptimizer = false">
  1131. 确定
  1132. </el-button>
  1133. </div>
  1134. </template>
  1135. </el-dialog>
  1136. <!-- 单独的梯度优化器 -->
  1137. <el-dialog v-model="dialog.tboptimizer" align-center :modal="false" :close-on-click-modal="false"
  1138. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1139. :before-close="handleClose" width="430" class="dialog_class bgcolor tianjia sel colortext">
  1140. <template #header="{ titleId, titleClass }">
  1141. <div class="my-header ">
  1142. <!-- <el-image :src="getImgPath('t2.png')" fit="contain"></el-image> -->
  1143. <h4 :id="titleId" :class="titleClass">梯度优化器:</h4>
  1144. </div>
  1145. </template>
  1146. <Toptimize ref="Toptimizeref"/>
  1147. <template #footer>
  1148. <div class="dialog-footer">
  1149. <el-button @click="dialog.tboptimizer = false">取消</el-button>
  1150. <el-button type="primary" @click="getTaddsave(); dialog.tboptimizer = false">
  1151. 确定
  1152. </el-button>
  1153. </div>
  1154. </template>
  1155. </el-dialog>
  1156. <!-- 单独的ADflow -->
  1157. <el-dialog v-model="dialog.isADflow" align-center :modal="false" :close-on-click-modal="false"
  1158. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1159. :before-close="handleClose" width="630" class="dialog_class bgcolor tianjia sel colortext">
  1160. <template #header="{ titleId, titleClass }">
  1161. <div class="my-header ">
  1162. <!-- <el-image :src="getImgPath('t2.png')" fit="contain"></el-image> -->
  1163. <h4 :id="titleId" :class="titleClass">ADflow</h4>
  1164. </div>
  1165. </template>
  1166. <ADflow ref="ADflowref"/>
  1167. <template #footer>
  1168. <div class="dialog-footer">
  1169. <el-button @click="dialog.isADflow = false">取消</el-button>
  1170. <el-button type="primary" @click=" adflowok();dialog.isADflow = false">
  1171. 确定
  1172. </el-button>
  1173. </div>
  1174. </template>
  1175. </el-dialog>
  1176. <!-- Python -->
  1177. <el-dialog v-model="dialog.Pythonshow" align-center :modal="false" :close-on-click-modal="false"
  1178. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1179. :before-close="handleClose" width="700" class="dialog_class bgcolor colortext tianjia sel">
  1180. <template #header="{ titleId, titleClass }">
  1181. <div class="my-header ">
  1182. <!-- <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image> -->
  1183. <h4 :id="titleId" :class="titleClass">Python</h4>
  1184. </div>
  1185. </template>
  1186. <div class="footerp" style="height:525px;padding:15px">
  1187. <div>
  1188. <!-- <el-input
  1189. v-model="textarea1"
  1190. style="width: 100%"
  1191. :autosize="{ minRows: 2, maxRows: 4 }"
  1192. type="textarea"
  1193. placeholder="Please input"
  1194. /> -->
  1195. <PythonEdit :value="textarea1" language="python" @change="handleEditorChange"/>
  1196. </div>
  1197. <div class="pythfoter">
  1198. <div class="span active" >
  1199. <el-image :src="xin" style="width: 25px;height: 25px;margin-right: 5px;"></el-image>
  1200. <span>信息栏 </span>
  1201. </div>
  1202. <el-input
  1203. v-model="textarea2"
  1204. style="width: 100%"
  1205. :autosize="{ minRows: 2, maxRows: 4 }"
  1206. type="textarea"
  1207. placeholder=""
  1208. />
  1209. </div>
  1210. </div>
  1211. <template #footer>
  1212. <div class="dialog-footer">
  1213. <el-button @click="dialog.Pythonshow = false">检查</el-button>
  1214. <el-button type="primary" @click="pythonSubmit(); dialog.Pythonshow = false">
  1215. 保存
  1216. </el-button>
  1217. </div>
  1218. </template>
  1219. </el-dialog>
  1220. <!-- FSI -->
  1221. <el-dialog v-model="dialog.fsidialog" align-center :modal="false" :close-on-click-modal="false"
  1222. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1223. :before-close="handleClose" width="670" class="dialog_class bgcolor tianjia sel colortext">
  1224. <template #header="{ titleId, titleClass }">
  1225. <div class="my-header ">
  1226. <!-- <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image> -->
  1227. <h4 :id="titleId" :class="titleClass">FUM to FEM</h4>
  1228. </div>
  1229. </template>
  1230. <FSI ref="Fsiref"/>
  1231. <template #footer>
  1232. <div class="dialog-footer">
  1233. <el-button @click="dialog.fsidialog = false">取消</el-button>
  1234. <el-button type="primary" @click=" dialog.fsidialog = false">
  1235. 确定
  1236. </el-button>
  1237. </div>
  1238. </template>
  1239. </el-dialog>
  1240. <!-- Flight -->
  1241. <el-dialog v-model="dialog.flightdialog" align-center :modal="false" :close-on-click-modal="false"
  1242. :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
  1243. :before-close="handleClose" width="630" class="dialog_class bgcolor tianjia sel colortext">
  1244. <template #header="{ titleId, titleClass }">
  1245. <div class="my-header ">
  1246. <!-- <el-image :src="getImgPath('xuek0.png')" fit="contain"></el-image> -->
  1247. <h4 :id="titleId" :class="titleClass">Flight</h4>
  1248. </div>
  1249. </template>
  1250. <Flight ref="Flightref"/>
  1251. <template #footer>
  1252. <div class="dialog-footer">
  1253. <el-button @click="dialog.flightdialog = false">取消</el-button>
  1254. <el-button type="primary" @click=" dialog.flightdialog = false">
  1255. 确定
  1256. </el-button>
  1257. </div>
  1258. </template>
  1259. </el-dialog>
  1260. <!-- 内容区 -->
  1261. <div class="main mianflex">
  1262. <!--left菜单栏 -->
  1263. <Sidebar ref="Sidebarref" />
  1264. <!-- 放图形 -->
  1265. <div class="main_container">
  1266. <div class="main_model">
  1267. <div class="jindutiao" v-show="progressshow">
  1268. <!-- <el-progress :text-inside="true" :stroke-width="26" :percentage="70" /> -->
  1269. <div class="demo-progress">
  1270. <el-progress :percentage="percentage" :stroke-width="15" :color="customColors">
  1271. <template #default="{ percentage }">
  1272. <span class="percentage-value">当前进度:{{ percentage }}%</span>
  1273. </template>
  1274. </el-progress>
  1275. <!-- <button @click="tbn">点我</button> -->
  1276. </div>
  1277. </div>
  1278. <div class="main_model" v-show='flowshow'>
  1279. <vuefindex ref="vuefval" @optimizerfalse="optimizerfalse($event)"></vuefindex>
  1280. </div>
  1281. <div class="maxh221">
  1282. <!-- 中间部分 -->
  1283. <!-- 列表监控 -->
  1284. <div class="conter_mian classtable " v-show="jiankong" style="width:100%; height: 100%;">
  1285. <el-table :data="tableDatalieb"
  1286. border
  1287. style=" overflow: auto; height: 100%;"
  1288. :header-cell-class-name="lbjkheaderCellClassName"
  1289. :key="tableKey"
  1290. >
  1291. <el-table-column type="index" label="编号" width="100"></el-table-column>
  1292. <el-table-column v-for="(header, index) in tableHeaders" :key="index" :prop="header.prop" show-overflow-tooltip
  1293. :label="header.label" >
  1294. </el-table-column>
  1295. </el-table>
  1296. </div>
  1297. <!-- 曲线监控 -->
  1298. <div class="conter_mian classtable " v-if="echartshow" style="width:100%; height: 100%;">
  1299. <!-- <el-form-item label="" >
  1300. <el-select v-model="quval" :suffix-icon="CaretBottom" placeholder="请选择">
  1301. <el-option v-for="item in quxian" :key="item.value" :label="item.label" :value="item.value">
  1302. </el-option>
  1303. </el-select>
  1304. </el-form-item> -->
  1305. <optmonitor ref="optmonitor1" :echartdata="echartdata" :selval="quval" :curvedata="curvedata" />
  1306. </div>
  1307. <!-- 过程监控 -->
  1308. <div class="conter_mian classtable conter_flex" v-if="echartshow2" style="width:100%; height: 100%;">
  1309. <div class="echart_left ech">
  1310. <processMonitor1 ref="processMonitor1ref" :echartdata="echartdata" :selval="quval" :curvedata="curvedata"/>
  1311. </div>
  1312. <div class="echart_right ech">
  1313. <processMonitor2 ref="processMonitor2ref" :echartdata="echartdata" :selval="quval" :curvedata="curvedata"/>
  1314. </div>
  1315. </div>
  1316. <!-- 可视化开始 -->
  1317. <div class="conter_mian classtable echartcont" v-show="echartzongshow">
  1318. <echartarea ref="arearef" v-show="areashow" :areashow="areashow"/>
  1319. <bargraph ref="bargraphref" v-show="bargraphshow" :bargraphshow="bargraphshow"/>
  1320. <echartLine ref="echartLineref" v-show="echartLineshow" :echartLineshow="echartLineshow"/>
  1321. <BarChart ref="BarChartref" v-show="BarChartshow" :BarChartshow="BarChartshow"/>
  1322. <scatter ref="scatterref" v-show="scattershow" :scattershow="scattershow"/>
  1323. <radar ref="radarref" v-show="radarshow" :radarshow="radarshow"/>
  1324. <pie ref="pieref" v-show="pieshow" :pieshow="pieshow" />
  1325. <pareto ref="paretoref" v-show="paretoshow" :paretoshow="paretoshow" />
  1326. </div>
  1327. <!-- 可视化结束 -->
  1328. <!-- 右侧边栏开始 -->
  1329. <!-- 结束 -->
  1330. </div>
  1331. <el-footer class="femFooter">
  1332. <div class="gooterpading">
  1333. <div class="footerTitle el-tag--primary">
  1334. <div>
  1335. <div class="span" v-for="(tab, index) in tabs" :key="index" :class="{ 'active': activeIndex === index }"
  1336. @click="xxclick(index)">
  1337. <el-image :src="tab.img" fit="contain"></el-image>
  1338. <span>{{ tab.name }} </span></div>
  1339. </div>
  1340. <div>
  1341. <!-- <li
  1342. class="exloadbox"
  1343. v-show="elodingfalse"
  1344. >
  1345. <span>正在求解中</span>
  1346. <i class="el-icon-loading"></i>
  1347. </li> -->
  1348. <!-- <li>
  1349. <span >清空</span>
  1350. </li> -->
  1351. <li>
  1352. <span @click="footerShows('foot')">&#9650;&#9660;</span>
  1353. </li>
  1354. </div>
  1355. </div>
  1356. <div v-if="footerShow">
  1357. <div class="footerTextBox" v-if="activeIndex == 0">
  1358. <el-input class="footerText" type="textarea" id="textarea_id" v-model="logs"></el-input>
  1359. </div>
  1360. <div class="youhualog" v-if="activeIndex == 1">
  1361. <ul>
  1362. <template v-for="(tab, index) in listli" :key="index">
  1363. <el-divider v-if="index !== 0" direction="vertical" class="custom-divider"></el-divider>
  1364. <li @click="issueclick(index)" :class="{ 'active2': activeIndex2 === index }">
  1365. <el-image v-if="activeIndex2 === index" :src="tab.isimg" fit="contain"></el-image>
  1366. <el-image v-else :src="tab.noimg" fit="contain"></el-image>
  1367. <span>{{ tab.name }}</span>
  1368. </li>
  1369. </template>
  1370. </ul>
  1371. <div class="footer-content">
  1372. <div class="eldesign classtable" v-if="activeIndex2 == 0">
  1373. <el-table :data="designtable" border style="width: 100%" height="100">
  1374. <el-table-column type="index" label="编号" width="70" />
  1375. <el-table-column prop="name" label="变量名称">
  1376. <template #default="{ row }">
  1377. <el-input v-model="row.name" @change="handleEdit(row)" />
  1378. </template>
  1379. </el-table-column>
  1380. <el-table-column prop="upper" label="上限值">
  1381. <template #default="{ row }">
  1382. <el-input type="text" v-model="row.upper"
  1383. @change="handleEdit(row)" />
  1384. </template>
  1385. </el-table-column>
  1386. <el-table-column prop="lower" label="下限值">
  1387. <template #default="{ row }">
  1388. <el-input v-model="row.lower"
  1389. @change="handleEdit(row)" />
  1390. </template>
  1391. </el-table-column>
  1392. <el-table-column prop="reference" label="基准值" >
  1393. <template #default="{ row }">
  1394. <el-input v-model="row.reference"
  1395. @change="handleEdit(row)" />
  1396. </template>
  1397. </el-table-column>
  1398. <el-table-column prop="remark" label="说明">
  1399. <template #default="{ row }">
  1400. <el-input v-model="row.remark" @change="handleEdit(row)" />
  1401. </template>
  1402. </el-table-column>
  1403. <!-- <el-table-column label="操作" width="140">
  1404. <template #default="scope">
  1405. <el-button size="small" type="danger"
  1406. @click.stop="sjdelete(scope.$index, scope.row)">删除</el-button>
  1407. </template>
  1408. </el-table-column> -->
  1409. </el-table>
  1410. </div>
  1411. <div class="elconstraint classtable" v-if="activeIndex2 == 1">
  1412. <el-table :data="tableData" border style="width: 100%" height="100">
  1413. <el-table-column type="index" label="编号" width="100" />
  1414. <el-table-column prop="name" label="约束名称">
  1415. <template #default="{ row }">
  1416. <el-input v-model="row.name" @change="handleEdit(row)" />
  1417. </template>
  1418. </el-table-column>
  1419. <!-- <el-table-column prop="con" label="约束关系">
  1420. <template v-slot="scope">
  1421. <el-select class="no-border " v-model.number="scope.row.con" :suffix-icon="CaretBottom"
  1422. placeholder="请选择">
  1423. <el-option v-for="item in options3" :key="item.value" :label="item.label"
  1424. :value="item.value">
  1425. </el-option>
  1426. </el-select>
  1427. </template>
  1428. </el-table-column> -->
  1429. <el-table-column prop="reference" label="约束基准值">
  1430. <template #default="{ row }">
  1431. <el-input v-model="row.reference"
  1432. @change="handleEdit(row)" />
  1433. </template>
  1434. </el-table-column>
  1435. <el-table-column prop="upper" label="上限值">
  1436. <template #default="{ row }">
  1437. <el-input v-model="row.upper"
  1438. @change="handleEdit(row)" />
  1439. </template>
  1440. </el-table-column>
  1441. <el-table-column prop="lower" label="下限值">
  1442. <template #default="{ row }">
  1443. <el-input v-model="row.lower"
  1444. @change="handleEdit(row)" />
  1445. </template>
  1446. </el-table-column>
  1447. <!-- <el-table-column label="操作" width="140">
  1448. <template #default="scope">
  1449. <el-button size="small" type="danger"
  1450. @click.stop="ysdelete(scope.$index, scope.row)">删除</el-button>
  1451. </template>
  1452. </el-table-column> -->
  1453. </el-table>
  1454. </div>
  1455. <div class="eloptimize classtable" v-if="activeIndex2 == 2">
  1456. <el-table :data="eloptimize" border style="width: 100%" height="100">
  1457. <el-table-column type="index" label="编号" width="70" />
  1458. <el-table-column prop="name" label="目标名称">
  1459. <template #default="{ row }">
  1460. <el-input v-model="row.name" />
  1461. </template>
  1462. </el-table-column>
  1463. <el-table-column prop="optdir" label="优化方向">
  1464. <template v-slot="scope">
  1465. <el-select class="no-border " v-model="scope.row.optdir" :suffix-icon="CaretBottom"
  1466. placeholder="请选择">
  1467. <el-option v-for="item in options1" :key="item.value" :label="item.label"
  1468. :value="item.value">
  1469. </el-option>
  1470. </el-select>
  1471. </template>
  1472. </el-table-column>
  1473. <el-table-column prop="weight" label="权重系数">
  1474. <template #default="{ row }">
  1475. <el-input v-model="row.weight"
  1476. @change="handleEdit(row)" />
  1477. </template>
  1478. </el-table-column>
  1479. <!-- <el-table-column prop="scaling" label="数据缩放">
  1480. <template v-slot="scope">
  1481. <el-checkbox :false-label="0" :true-label="1" v-model="scope.row.scaling" />
  1482. </template>
  1483. </el-table-column>
  1484. <el-table-column prop="factor" label="缩放因子">
  1485. <template #default="{ row }">
  1486. <el-input v-model.number="row.factor" oninput="value=value.replace(/^|[^0-9]/g,'')"
  1487. @change="handleEdit(row)" />
  1488. </template>
  1489. </el-table-column> -->
  1490. <el-table-column prop="reference" label="约束基准值">
  1491. <template #default="{ row }">
  1492. <el-input v-model="row.reference"
  1493. @change="handleEdit(row)" />
  1494. </template>
  1495. </el-table-column>
  1496. <el-table-column prop="remark" label="说明">
  1497. <template #default="{ row }">
  1498. <el-input v-model="row.remark" @change="handleEdit(row)" />
  1499. </template>
  1500. </el-table-column>
  1501. <!-- <el-table-column label="操作" width="140">
  1502. <template #default="scope">
  1503. <el-button size="small" type="danger"
  1504. @click.stop="mbdelete(scope.$index, scope.row)">删除</el-button>
  1505. </template>
  1506. </el-table-column> -->
  1507. </el-table>
  1508. </div>
  1509. </div>
  1510. <div class="dibu">
  1511. <div class="footer-add">
  1512. <div class="sev_ruwu">
  1513. <div class="disflex flexend">
  1514. <el-form-item label="新增变量数:" v-if="activeIndex2 === 0">
  1515. <el-input v-model="tableval" maxlength="18"
  1516. oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
  1517. />
  1518. </el-form-item>
  1519. <el-button class="btncolor" v-if="activeIndex2 === 0">导入</el-button>
  1520. <el-button class="btncolor" @click="onAddItem">新建</el-button>
  1521. <el-button class="btncolor" @click="onokItem">确定</el-button>
  1522. </div>
  1523. </div>
  1524. </div>
  1525. </div>
  1526. </div>
  1527. </div>
  1528. <div class="pading_foter">
  1529. </div>
  1530. </div>
  1531. </el-footer>
  1532. </div>
  1533. </div>
  1534. </div>
  1535. </div>
  1536. </el-main>
  1537. </el-container>
  1538. </div>
  1539. </template>
  1540. <script setup>
  1541. import { ref, onMounted, reactive, provide, nextTick } from "vue";
  1542. import { RouterView, RouterLink, useRouter, useRoute } from "vue-router"
  1543. import myheader from "@/components/header.vue"
  1544. import { request, uploadFile } from "@/utils/request";
  1545. import { ElMessage, ElButton, ElDialog, ElSelect } from 'element-plus'
  1546. import { Edit, CaretBottom } from '@element-plus/icons-vue'
  1547. // import '@/utils/flexible'
  1548. import s0 from "@/assets/img/s0.png"
  1549. import gc1 from "@/assets/img/gc1.png"
  1550. import gc2 from "@/assets/img/gc2.png"
  1551. import gc3 from "@/assets/img/gc3.png"
  1552. import wen from "@/assets/img/wen.png"
  1553. import q2 from "@/assets/img/q2.png"
  1554. import f21 from "@/assets/img/f21.png"
  1555. import f22 from "@/assets/img/f22.png"
  1556. import f41 from "@/assets/img/f41.png"
  1557. import xin from "@/assets/img/xin.png"
  1558. import xin2 from "@/assets/img/xin2.png"
  1559. import s from "@/assets/img/s.png"
  1560. import y from "@/assets/img/y.png"
  1561. import y2 from "@/assets/img/y2.png"
  1562. import nos from "@/assets/img/nos.png"
  1563. import zy from "@/assets/img/zy.png"
  1564. import zy2 from "@/assets/img/zy2.png"
  1565. import xuek10 from '@/assets/flowimg/xuek10.png'
  1566. import xuek11 from '@/assets/flowimg/xuek11.png'
  1567. import xuek12 from '@/assets/flowimg/xuek12.png'
  1568. import optmonitor from './echart/optimize_monitor.vue'
  1569. import processMonitor1 from "./echart/process-monitor1.vue"
  1570. import processMonitor2 from "./echart/process-monitor2.vue"
  1571. import echartindex from './echart/index.vue'
  1572. import sixtop from './echart/six_top.vue'
  1573. import sixbottom from './echart/six_bottom.vue'
  1574. import sixindex from './demo/index.vue'
  1575. import sixchine from './demo/chine.vue'
  1576. import vuefindex from './vuetree/index.vue'
  1577. import Sidebar from './vuetree/Sidebar.vue'
  1578. // 可视化echart
  1579. import echartarea from './echart/area.vue'
  1580. import bargraph from './echart/bargraph.vue'
  1581. import echartLine from './echart/echartLine.vue'
  1582. import BarChart from './echart/BarChart.vue'
  1583. import scatter from './echart/scatter.vue'
  1584. import radar from './echart/radar.vue'
  1585. import pie from './echart/pie.vue'
  1586. import pareto from './echart/pareto.vue'
  1587. import Doptimize from './titlecomponent/Doptimize.vue'
  1588. import Joptimize from './titlecomponent/Joptimize.vue'
  1589. import Toptimize from './titlecomponent/Toptimize.vue'
  1590. import ADflow from './titlecomponent/ADflow.vue'
  1591. import Xfoil from './titlecomponent/Xfoil.vue'
  1592. import csts from './titlecomponent/csts.vue'
  1593. import ffds from './titlecomponent/ffds.vue'
  1594. import cloudsecond from "./titlecomponent/Cloudsecond.vue";
  1595. import FSI from './titlecomponent/FSI.vue'
  1596. import Flight from './titlecomponent/Flight.vue'
  1597. import ListSE from "./titlecomponent/ListSE.vue";
  1598. import TACS from "./titlecomponent/TACS.vue";
  1599. import fileUploads from './components/fileuploads.vue'
  1600. import Exreport from "./titlecomponent/Exreport.vue";
  1601. import PythonEdit from '@/components/PythonEditor/index.vue'; // python编辑器
  1602. import pdfReportView from '@/components/pdfReportView/index.vue'; //报告查看
  1603. import cloudChart from './threejsView/index.vue'; // 云图
  1604. let Sidebarref = ref();
  1605. let resource=ref(0);
  1606. let cstnum=ref('');
  1607. let textarea2=ref()
  1608. let textarea1 = ref(`import os
  1609. import numpy as np
  1610. from surromdao.solver import BaseSolver
  1611. class Branin(BaseSolver):
  1612. def __init__(self, filename=os.path):
  1613. super().__init__(filename)
  1614. def compute(self, xdict):
  1615. x = np.zeros(2)
  1616. # x[0] = xdict['x1']
  1617. # x[1] = xdict['x2']`);
  1618. let Cstref = ref();
  1619. let Ffdref = ref();
  1620. let Xfoilref = ref();
  1621. let ADflowref = ref();
  1622. let Joptimizeref=ref();
  1623. let Doptimizeref=ref();
  1624. let Toptimizeref=ref();
  1625. let Fsiref=ref();
  1626. let Flightref=ref();
  1627. let f4ce = ref("优化问题组件");
  1628. let modelban = ref("学科分析组件");
  1629. let undmodel=ref('优化器组件');
  1630. let optiongroup1 = ref([
  1631. { label: '优化问题', value: '优化问题' }
  1632. ])
  1633. let options4 = ref([
  1634. { label: '进化优化器', value: '进化优化器', icon:xuek10 },
  1635. { label: '代理优化器', value: '代理优化器', icon:xuek11 },
  1636. { label: '梯度优化器', value: '梯度优化器', icon:xuek12 },
  1637. ])
  1638. let formLabelWidth3=ref(100)
  1639. let formLabelWidth200=ref(200)
  1640. let tablecstHeaders=ref([]);
  1641. let treeitem = ref({});
  1642. let treeitem2 = ref({});
  1643. let treeitem3 = ref({});
  1644. let percentage = ref(70);
  1645. let progressshow = ref(false);
  1646. let flowshow = ref(true);
  1647. let jiankong = ref(false);
  1648. let echartshow = ref(false);
  1649. let echartshow2 = ref(false);
  1650. let areashow = ref(false);
  1651. let echartLineshow = ref(false);
  1652. let BarChartshow = ref(false);
  1653. let bargraphshow = ref(false);
  1654. let scattershow = ref(false);
  1655. let radarshow = ref(false);
  1656. let pieshow = ref(false);
  1657. let paretoshow = ref(false);
  1658. let bargraphref = ref();
  1659. let echartLineref = ref();
  1660. let BarChartref = ref();
  1661. let radarref = ref();
  1662. let pieref = ref();
  1663. let paretoref = ref();
  1664. let scatterref = ref();
  1665. let echartzongshow = ref(false);
  1666. const router = useRouter();
  1667. const route = useRoute();
  1668. let youhua = ref({
  1669. algorithm: 'GA',
  1670. popsize: 100,
  1671. epoch: 100,
  1672. probcrossover: 0.1,
  1673. probmut: 0.1,
  1674. proboperator: 'SBX交叉',
  1675. probscale: 1,
  1676. strategy: '最佳保留策略',
  1677. operator: '倒位变异',
  1678. gpu: 'YES'
  1679. })
  1680. let echartdata = ref(null);
  1681. let optmonitor1 = ref();
  1682. let processMonitor1ref = ref()
  1683. let processMonitor2ref = ref()
  1684. let arearef = ref();
  1685. let tableHeaders = ref([
  1686. { label: '参数1', prop: 'value1' },
  1687. { label: '参数2', prop: 'value2' },
  1688. { label: '参数3', prop: 'value3' },
  1689. { label: '参数4', prop: 'value4' },
  1690. { label: '参数5', prop: 'value5' },
  1691. ])
  1692. let varsobj = ref({});
  1693. let valsobj = ref({});
  1694. let tabarr = ref([]);
  1695. let arrobj = ref([]);
  1696. let tableDatalieb = ref([
  1697. { value1: '0.00', value2: '0.00', value3:'0.00', value4:'0.00', value5:'0.00'},
  1698. { value1: '0.00', value2: '0.00', value3:'0.00', value4:'0.00', value5:'0.00'},
  1699. { value1: '0.00', value2: '0.00', value3:'0.00', value4:'0.00', value5:'0.00'},
  1700. { value1: '0.00', value2: '0.00', value3:'0.00', value4:'0.00', value5:'0.00'},
  1701. { value1: '0.00', value2: '0.00', value3:'0.00', value4:'0.00', value5:'0.00'},
  1702. ])
  1703. let curvedata = ref('');
  1704. let websock = ref(null);
  1705. let times = ref({
  1706. lockReconnect: false, //是否真正建立连接
  1707. timeout: 28 * 1000, //30秒一次心跳
  1708. timeoutObj: null, //心跳倒计时
  1709. serverTimeoutObj: null, //
  1710. timeoutnum: null, //断开重连倒计时
  1711. })
  1712. let input3=ref()
  1713. let eid = ref('');//进步优化器的eid
  1714. let logs = ref("");
  1715. let pid = ref("");
  1716. let fid = ref('');
  1717. let conid = ref('');
  1718. let tableval = ref();
  1719. let vuefval = ref();
  1720. let elodingfalse = ref(false);
  1721. let footerShow = ref(true);
  1722. let zhixing = ref('Rosenbrock');
  1723. let tabName = ref("one")
  1724. const tabs = [{
  1725. name:'信息栏',
  1726. img:xin,
  1727. },{
  1728. name:'优化问题',
  1729. img:xin2,
  1730. }]
  1731. const listli=[{
  1732. name:'设计变量',
  1733. noimg:nos,
  1734. isimg:s
  1735. },{
  1736. name:'约束条件',
  1737. noimg:y2,
  1738. isimg:zy2
  1739. },
  1740. {
  1741. name:'优化目标',
  1742. noimg:y,
  1743. isimg:zy
  1744. }
  1745. ]
  1746. const xfoil = ['输入', '执行', '输出'];
  1747. const newxfoil = ['输入参数', '输出参数', '中间参数'];
  1748. let srtable = ref([]);
  1749. let radio1=ref(0);
  1750. let srnewtable = ref([
  1751. {
  1752. date: '2016-05-04',
  1753. name: 'Aleyna Kutzner',
  1754. },
  1755. {
  1756. date: '2016-05-03',
  1757. name: 'Helen Jacobi',
  1758. },
  1759. ]);
  1760. let scnewtable = ref([
  1761. {
  1762. date: '2016-05-04',
  1763. name: 'Aleyna Kutzner',
  1764. con:-1
  1765. },
  1766. {
  1767. date: '2016-05-03',
  1768. name: 'Helen Jacobi',
  1769. con:1
  1770. },
  1771. ]);
  1772. let sctable = ref([]);
  1773. // let quxian=ref([{
  1774. // val:'1',name:"设计变量",
  1775. // val:'2',name:"约束条件",
  1776. // val:'3',name:"约束条件",
  1777. // }])
  1778. // let quval=ref('1')
  1779. let currentTab=ref(0);
  1780. // let tabslist = ref([
  1781. // { id: '0', name: '来流参数' },
  1782. // { id: '1', name: '设置参数' },
  1783. // { id: '2', name: '分析参数' },
  1784. // ])
  1785. let yslist = ref([
  1786. { label: 'GA', value: 'GA' },
  1787. { label: 'PSO', value: 'PSO' },
  1788. { label: 'NSGA2', value: 'NSGA2' },
  1789. ])
  1790. let lailiutable=ref([
  1791. {
  1792. data: 1,
  1793. name: '结构质量',
  1794. con:-1
  1795. },
  1796. {
  1797. data: 23,
  1798. name: 'KS失效',
  1799. con:1
  1800. },
  1801. {
  1802. data: 0.0,
  1803. name: '最大变形',
  1804. con: -1
  1805. }
  1806. ])
  1807. let quxian = ref([
  1808. { label: '设计变量', value: '设计变量' },
  1809. { label: '约束条件', value: '约束条件' },
  1810. { label: '目标函数', value: '目标函数' },
  1811. ])
  1812. let quval = ref("")
  1813. const activeIndex = ref(0);
  1814. const activeIndex2 = ref(0);
  1815. const activeIndex3 = ref(0);
  1816. const color1 = ref('');
  1817. const colortier = ref('rgba(16, 185, 129, 0.5)');
  1818. let showTrigger = ref(false);
  1819. let activeadf=ref('Xfoil');
  1820. const datatree = ref([
  1821. {
  1822. id: 1,
  1823. label: '工程',
  1824. children: [
  1825. {
  1826. id: '1-1',
  1827. label: '优化问题',
  1828. img: gc1,
  1829. },
  1830. {
  1831. id: '1-2',
  1832. label: '分析流程',
  1833. img: gc2,
  1834. },
  1835. {
  1836. id: '1-3',
  1837. label: '优化器',
  1838. img: gc3
  1839. },
  1840. ],
  1841. },
  1842. ])
  1843. let options1 = ref([
  1844. { label: '最大化', value: "-1" },
  1845. { label: '最小化', value: "1" },
  1846. ])
  1847. let options2 = ref([
  1848. { label: '升力系数', value: '升力系数' },
  1849. { label: '翼型面积', value: '翼型面积' },
  1850. ])
  1851. let options3 = ref([
  1852. { label: '大于', value: -1 },
  1853. { label: '小于', value: 1 },
  1854. ])
  1855. let shuxingopt = ref([
  1856. { label: '约束条件', value: -1 },
  1857. { label: '优化目标', value: 1 },
  1858. ])
  1859. let defaultExpandedArr = ref([]);
  1860. const defaultProps = {
  1861. children: 'children',
  1862. label: 'label',
  1863. }
  1864. let svarlist = ref('');
  1865. let conlist = ref('');
  1866. let funlist = ref('');
  1867. let looktext=ref('');
  1868. // treeData.value.forEach((item) => {
  1869. // defaultExpandedArr.value.push(item.id);
  1870. // });
  1871. const activeName = ref('Role')
  1872. const activeName1 = ref('message')
  1873. let active = ref('');
  1874. let tabactive = ref("");
  1875. let checkbox = ref(false)
  1876. let formLabelWidth6 = ref(100)
  1877. let formLabelWidth1 = ref(170)
  1878. let formLabelWidth2 = ref(130)
  1879. let canshu = ref();
  1880. let question = ref([
  1881. { url: 'kk1.png', titlie: "列表" },
  1882. { url: 'kk2.png', titlie: "散点图" },
  1883. { url: 'kk4.png', titlie: "折线图" },
  1884. { url: 'kk8.png', titlie: "帕雷托图" },
  1885. { url: 'kk3.png', titlie: "面积图" },
  1886. { url: 'kk5.png', titlie: "柱状图" },
  1887. { url: 'k3.png', titlie: "饼状图" },
  1888. { url: 'kk6.png', titlie: "横条图" },
  1889. { url: 'kk7.png', titlie: "雷达图" },
  1890. { url: 'kk9.png', titlie: "云图/等值线" },
  1891. { url: 'kk10.png', titlie: "查看报告" },
  1892. { url: 'kk11.png', titlie: "导出报告" },
  1893. ])
  1894. let roletion = ref([
  1895. { url: 'f41.png', titlie: "测试函数模板" },
  1896. { url: 'r1.png', titlie: "工程优化模板" },
  1897. { url: 'r2.png', titlie: "自定义" },
  1898. ])
  1899. let tasktion = ref([
  1900. { url: 't0.png', titlie: "外形参数化" },
  1901. ])
  1902. let Rolelist = ref([
  1903. { url: 'tow1.png', titlie: "优化问题组件" },
  1904. { url: 'tow2.png', titlie: "学科分析组件" },
  1905. { url: 'tow3.png', titlie: "优化器组件" },
  1906. ])
  1907. let Rolelist1 = ref([
  1908. { url: 'l1.png', titlie: "逻辑流连线" },
  1909. { url: 'l2.png', titlie: "数据流连线" },
  1910. ])
  1911. let Rolelist11 = ref([{ url: 'w6.png', titlie: "选择连线颜色" }])
  1912. let Rolelist2 = ref([
  1913. { url: 'cai1.png', titlie: "模块组合" },
  1914. { url: 'cai2.png', titlie: "模块拆分" },
  1915. ])
  1916. let Rolelist22 = ref([{ url: 'w9.png', titlie: "选择图框颜色" }])
  1917. let Rolelist3 = ref([
  1918. { url: 'w10.png', titlie: "添加注释" },
  1919. ])
  1920. let Threelist = ref([
  1921. { url: 'you1.png', titlie: "开始" },
  1922. { url: 'you2.png', titlie: "暂停" },
  1923. { url: 'you3.png', titlie: "续算" },
  1924. { url: 'tts.png', titlie: "结束" },
  1925. ])
  1926. let Threelist1 = ref([
  1927. { url: 'yh1.png', titlie: "列表监控" },
  1928. { url: 'yh2.png', titlie: "曲线监控" },
  1929. { url: 'yh3.png', titlie: "过程监控" },
  1930. ])
  1931. let Sevenlist = ref([
  1932. { url: 'rr2.png', titlie: '任务检索' },
  1933. { url: 'rr1.png', titlie: '任务管理' },
  1934. { url: 'rr3.png', titlie: '备份' },
  1935. ])
  1936. let eightlist = ref([
  1937. { url: 'e1.png', titlie: '用户手册' },
  1938. { url: 'e2.png', titlie: '帮助文档' },
  1939. { url: 'e3.png', titlie: '关于软件' },
  1940. ])
  1941. let canshulist = ref([
  1942. { label: 'CST参数化', value: 'CST参数化' },
  1943. { label: 'FFD参数化', value: 'FFD参数化' },
  1944. ])
  1945. let sevlist = ref([
  1946. { label: '任务编号', value: '任务编号' },
  1947. { label: '任务名称', value: '任务名称' },
  1948. { label: '任务类型', value: '任务类型' },
  1949. { label: '创建时间', value: '创建时间' },
  1950. ])
  1951. let seval4 = ref('任务名称');
  1952. let agelist = ref([
  1953. { label: 'Kriging模型', value: 'Kriging模型' },
  1954. { label: '相关函数类型', value: '相关函数类型' },
  1955. { label: '超参数优化方法', value: '超参数优化方法' },
  1956. { label: 'Hooke Jeeves方法循环次数', value: 'Hooke Jeeves方法循环次数' },
  1957. ])
  1958. let agval = ref("Kriging模型")
  1959. let agval1 = ref("固定设计空间")
  1960. let agval2 = ref("拉丁超立方")
  1961. let agelist1 = ref([
  1962. { label: '固定设计空间', value: '固定设计空间' },
  1963. ])
  1964. let agelist2 = ref([
  1965. { label: '拉丁超立方', value: '拉丁超立方' },
  1966. ])
  1967. let addval = ref("EI + MSP")
  1968. let addlist = ref([
  1969. { label: 'EI + MSP', value: 'EI + MSP' },
  1970. ])
  1971. let addval1 = ref("概率相乘法")
  1972. let addlist1 = ref([
  1973. { label: '概率相乘法', value: '概率相乘法' },
  1974. ])
  1975. let addval2 = ref("SBX交叉")
  1976. let addlist2 = ref([
  1977. { label: 'SBX交叉', value: 'SBX交叉' },
  1978. ])
  1979. let addval3 = ref("最佳保留策略")
  1980. let ys = ref("GA")
  1981. let addlist3 = ref([
  1982. { label: '最佳保留策略', value: '最佳保留策略' },
  1983. ])
  1984. let addval4 = ref("倒位变异")
  1985. let addlist4 = ref([
  1986. { label: '倒位变异', value: '倒位变异' },
  1987. ])
  1988. let addval7 = ref("1e-7")
  1989. let addlist7 = ref([
  1990. { label: '1e-7', value: '1e-7' },
  1991. ])
  1992. let addval8 = ref("NO")
  1993. let addlist8 = ref([
  1994. { label: 'YES', value: 'YES' },
  1995. { label: 'NO', value: 'NO' },
  1996. ])
  1997. let paretocbval = ref([])
  1998. let paretocheckbox = ref([
  1999. {label:'-cl',value:'-cl'},
  2000. {label:'cd',value:'cd'},
  2001. ])
  2002. let cloudbtnbox = ref([
  2003. {url:'meshFile.png',btnname:'文件选择'},
  2004. {url:'yu.png',btnname:'域'},
  2005. {url:'kk9.png',btnname:'云图'},
  2006. {url:'seka.png',btnname:'色卡'},
  2007. {url:'dengzx.png',btnname:'等值线'},
  2008. ])
  2009. let dialog = ref({
  2010. newdialog: false,
  2011. setdialog: false,
  2012. targetdialog: false,
  2013. design: false,
  2014. constraint: false,
  2015. parameter: false,
  2016. agency: false,
  2017. optimizer: false,
  2018. jboptimizer: false,
  2019. dboptimizer: false,
  2020. tboptimizer: false,
  2021. isADflow:false,
  2022. lookover:false,
  2023. exportreport:false,
  2024. Xfiol: false,
  2025. tidu:false,
  2026. CSTt:false,
  2027. ffdt:false,
  2028. XfAD:false,
  2029. cstffd:false,
  2030. Taxs:false,
  2031. enddialog: false,
  2032. addfun: false,
  2033. sufun: false,
  2034. task: false,
  2035. guanli: false,
  2036. optgroup:false,
  2037. Pythonshow:false,
  2038. listdialog:false,
  2039. scatterdialog:false,
  2040. echartLinedialog:false,
  2041. paretodialog:false,
  2042. clouddialog:false,
  2043. fsidialog:false,
  2044. flightdialog:false,
  2045. })
  2046. // let columns=ref[{
  2047. // columns: [
  2048. // { label: '上表面', prop: 'sbiao' },
  2049. // { label: '下表面', prop: 'xbiao' },
  2050. // // 动态添加更多列
  2051. // ]
  2052. // }]
  2053. let options = ref([
  2054. { label: '升阻比', value: '升阻比' },
  2055. { label: 'RCS', value: 'RCS' },
  2056. ])
  2057. let tasklist = ref([
  2058. { label: '气动', value: '气动' },
  2059. { label: '结构', value: '结构' },
  2060. { label: '隐身', value: '隐身' },
  2061. { label: '噪声', value: '噪声' },
  2062. ])
  2063. const optiongroup = [
  2064. {
  2065. label: '大飞机',
  2066. options: [
  2067. {
  2068. value: '气动优化',
  2069. label: '气动优化',
  2070. },
  2071. {
  2072. value: '气弹优化',
  2073. label: '气弹优化',
  2074. },
  2075. ],
  2076. },
  2077. {
  2078. label: '直升机',
  2079. options: [
  2080. {
  2081. value: '气动优化1',
  2082. label: '气动优化',
  2083. },
  2084. {
  2085. value: '气弹优化2',
  2086. label: '气弹优化',
  2087. },
  2088. {
  2089. value: '气动噪声优化',
  2090. label: '气动噪声优化',
  2091. },
  2092. ],
  2093. },
  2094. ]
  2095. const eloptimize = ref([])
  2096. const tableData = ref([])
  2097. const designtable = ref([])
  2098. const tasktable = ref([
  2099. // {
  2100. // id: "01",
  2101. // time: '2016-05-03',
  2102. // name: '升阻比',
  2103. // state: '增大',
  2104. // },
  2105. // {
  2106. // id: "02",
  2107. // time: '2016-05-03',
  2108. // name: '升阻比',
  2109. // state: '增大',
  2110. // },
  2111. ])
  2112. const customColors = [
  2113. { color: '#f56c6c', percentage: 20 },
  2114. { color: '#f56c6c', percentage: 40 },
  2115. { color: '#5cb87a', percentage: 60 },
  2116. { color: '#5cb87a', percentage: 80 },
  2117. { color: '#5cb87a', percentage: 100 },
  2118. ]
  2119. let name = ref("1")
  2120. let num = ref(1)
  2121. const getImgPath = (url) => {
  2122. return new URL(`../assets/img/${url}`, import.meta.url).href
  2123. }
  2124. onMounted(() => {
  2125. //console.log( Sidebarref.value.datatree);
  2126. setTimeout(function () {
  2127. init();
  2128. initWebSocket();
  2129. logsget();
  2130. // vuefval.value.getroter()
  2131. }, 1500);
  2132. // childfun();
  2133. });
  2134. const sjdelete = (index, row) => {
  2135. console.log(index);
  2136. designtable.value.splice(index, 1)
  2137. }
  2138. const ysdelete = (index, row) => {
  2139. tableData.value.splice(index, 1)
  2140. }
  2141. const mbdelete = (index, row) => {
  2142. eloptimize.value.splice(index, 1)
  2143. }
  2144. // 初始值
  2145. const init = () => {
  2146. pid.value = route.query.pid;
  2147. console.log(route.query.pid);
  2148. }
  2149. const handleClick = (tab, event) => {
  2150. console.log('标签页:',tab.props.name);
  2151. tabactive.value = tab.props.name;
  2152. if (tabactive.value == 'User') {
  2153. // vuefval.value.logToObject1();
  2154. router.replace({ path: '/' })
  2155. } else {
  2156. }
  2157. if (tabactive.value == 'Role') {
  2158. flowshow.value = true;
  2159. console.log(11111)
  2160. } else {
  2161. flowshow.value = false;
  2162. console.log(flowshow.value)
  2163. }
  2164. ifjiankong();
  2165. dialogcolse()
  2166. // 可视化标签页
  2167. if (tabactive.value == 'Config') {
  2168. echartzongshow.value = true;
  2169. // curveLine();
  2170. } else {
  2171. echartzongshow.value = false;
  2172. }
  2173. }
  2174. const validateInput = (row) => {
  2175. // 允许输入 None / none / 负数 / 小数
  2176. if (/^(none|None|-?\d*\.?\d*)$/.test(row.upper)) {
  2177. row.upper = row.upper; // 允许输入
  2178. } else {
  2179. row.upper = row.upper.slice(0, -1); // 删除最后输入的非法字符
  2180. }
  2181. }
  2182. const validateInput1 = (row) => {
  2183. // 允许输入 None / none / 小数
  2184. if (/^(none|None|\d*\.?\d*)$/.test(row.upper)) {
  2185. row.upper = row.upper; // 允许输入
  2186. } else {
  2187. row.upper = row.upper.slice(0, -1); // 删除最后输入的非法字符
  2188. }
  2189. }
  2190. //表格点击事件
  2191. const handleEdit = (row) => {
  2192. // console.log('编辑后的数据:', row);
  2193. // 在这里处理数据保存逻辑,例如发送请求到后端更新数据
  2194. };
  2195. const footerClick = (tab, event) => {
  2196. }
  2197. // 关闭所有弹窗
  2198. const dialogcolse = () => {
  2199. dialog.value.newdialog = false;
  2200. dialog.value.setdialog = false;
  2201. dialog.value.targetdialog = false;
  2202. dialog.value.design = false;
  2203. dialog.value.constraint = false;
  2204. dialog.value.parameter = false;
  2205. dialog.value.agency = false;
  2206. dialog.value.addfun = false;
  2207. dialog.value.sufun = false;
  2208. dialog.value.enddialog = false;
  2209. dialog.value.task = false;
  2210. dialog.value.guanli = false;
  2211. }
  2212. // Tree的点击事件
  2213. const handleNodeClick = (data) => {
  2214. console.log(data)
  2215. tabactive.value = data.label;
  2216. dialogbolen();
  2217. }
  2218. const optimizerfalse = (val) => {
  2219. console.log('双击',val);
  2220. if (val == '优化器') {
  2221. // dialog.value.optimizer = true;
  2222. activeadf.value='代理优化器';
  2223. initoptimize();
  2224. dialog.value.optgroup = true;
  2225. } else if (val == '参数化') {
  2226. activeadf.value='CST';
  2227. initcstffds();
  2228. dialog.value.cstffd = true;
  2229. }else if (val == '气动分析') {
  2230. activeadf.value='Xfoil'
  2231. intxfoiladflow();
  2232. dialog.value.XfAD = true;
  2233. } else if (val == '进化优化器') {
  2234. activeadf.value='进化优化器';
  2235. dialog.value.jboptimizer = true;
  2236. nextTick(() => {
  2237. // 确保 ref 已经初始化
  2238. if (Joptimizeref.value) {
  2239. // 调用 Joptimize 的 getoptimize 方法
  2240. Joptimizeref.value.getoptimize(pid.value);
  2241. }
  2242. });
  2243. } else if (val == '代理优化器') {
  2244. activeadf.value='代理优化器';
  2245. // dialog.value.optgroup = true;
  2246. dialog.value.dboptimizer = true;
  2247. nextTick(() => {
  2248. // 确保 ref 已经初始化
  2249. if (Doptimizeref.value) {
  2250. Doptimizeref.value.getDoptimize(pid.value);
  2251. }
  2252. });
  2253. }
  2254. // else if (val == 'Xfiol' || val == 'Rosenbrock') {
  2255. // importget();
  2256. // dialog.value.Xfiol = true;
  2257. // }
  2258. else if(val == '梯度优化器'){
  2259. activeadf.value='梯度优化器';
  2260. dialog.value.tboptimizer = true;
  2261. nextTick(() => {
  2262. // 确保 ref 已经初始化
  2263. if (Toptimizeref.value) {
  2264. Toptimizeref.value.getToptimize(pid.value);
  2265. }
  2266. });
  2267. }else if(val == 'CST'){
  2268. /// dialog.value.CSTt = true;
  2269. activeadf.value='CST';
  2270. dialog.value.CSTt = true;
  2271. nextTick(() => {
  2272. // 确保 ref 已经初始化
  2273. if (Cstref.value) {
  2274. Cstref.value.getcst(pid.value);
  2275. }
  2276. });
  2277. }else if(val == 'FFD'){
  2278. /// dialog.value.CSTt = true;
  2279. activeadf.value='FFD';
  2280. dialog.value.ffdt = true;
  2281. nextTick(() => {
  2282. // 确保 ref 已经初始化
  2283. if (Ffdref.value) {
  2284. Ffdref.value.getffds(pid.value);
  2285. }
  2286. });
  2287. }
  2288. else if(val == 'ADflow'){
  2289. // adfhandleClick();
  2290. activeadf.value='ADflow';
  2291. dialog.value.isADflow = true;
  2292. nextTick(() => {
  2293. // 确保 ref 已经初始化
  2294. if (ADflowref.value) {
  2295. ADflowref.value.getadflow(pid.value);
  2296. }
  2297. });
  2298. }else if(val == 'Xfoil'){
  2299. // activeadf.value='Xfiol';
  2300. dialog.value.Xfiol = true;
  2301. nextTick(() => {
  2302. // 确保 ref 已经初始化
  2303. if (Xfoilref.value) {
  2304. Xfoilref.value.getxfoil(pid.value);
  2305. }
  2306. });
  2307. }else if(val == 'TACS'){
  2308. dialog.value.Taxs = true;
  2309. }else if(val == '模版'){
  2310. dialog.value.optgroup = true;
  2311. activeadf.value='代理优化器';
  2312. }else if(val == 'Python'){
  2313. dialog.value.Pythonshow = true;
  2314. initPython();
  2315. }else if(val == 'FUM to FEM'){
  2316. dialog.value.fsidialog = true;
  2317. }else if(val == 'Flight'){
  2318. dialog.value.flightdialog = true;
  2319. }
  2320. else {
  2321. dialog.value.optimizer = false;
  2322. dialog.value.jboptimizer = false;
  2323. dialog.value.Xfiol = false;
  2324. dialog.value.lookover = false;
  2325. dialog.value.tidu = false;
  2326. dialog.value.CSTt = false;
  2327. dialog.value.XfAD = false;
  2328. dialog.value.cstffd = false;
  2329. dialog.value.Pythonshow = false;
  2330. dialog.value.fsidialog = false;
  2331. dialog.value.flightdialog = false;
  2332. }
  2333. }
  2334. // 优化器窗口初始化
  2335. const initoptimize = () => {
  2336. const params1 = {
  2337. transCode:'MDO0018',
  2338. pid: pid.value,
  2339. }
  2340. const params2 = {
  2341. transCode:'MDO0031',
  2342. pid: pid.value,
  2343. }
  2344. const params3 = {
  2345. transCode:'MDO0033',
  2346. pid: pid.value,
  2347. }
  2348. Promise.all([
  2349. request(params1),
  2350. request(params2),
  2351. request(params3)
  2352. ]).then(([res1, res2, res3]) => {
  2353. console.log('1:', res1.checked);
  2354. console.log('2:', res2.checked);
  2355. console.log('3:', res3.checked);
  2356. if(res1.hasOwnProperty('eid')){
  2357. Joptimizeref.value.getoptimizeAssign(res1);
  2358. console.log('fuz1:');
  2359. }
  2360. if(res3.hasOwnProperty('grid')){
  2361. Toptimizeref.value.getToptimizeAssign(res3);
  2362. console.log('fuz2:');
  2363. }
  2364. if(res2.hasOwnProperty('suid')){
  2365. Doptimizeref.value.getDoptimizeAssign(res2);
  2366. console.log('fuz3:');
  2367. }
  2368. // 根据返回值来设置 activeadf
  2369. if (res1.checked === 1) {
  2370. activeadf.value = '进化优化器';
  2371. } else if (res2.checked === 1) {
  2372. activeadf.value = '代理优化器';
  2373. } else if (res3.checked === 1) {
  2374. activeadf.value = '梯度优化器';
  2375. }
  2376. console.log('Updated activeadf:', activeadf.value);
  2377. }).catch((err) => {
  2378. console.error('请求失败:', err);
  2379. });
  2380. }
  2381. // CST/FFD窗口初始化
  2382. const initcstffds = () => {
  2383. const params1 = {
  2384. transCode:'MDO0040',
  2385. pid: pid.value,
  2386. }
  2387. const params2 = {
  2388. transCode:'MDO0043',
  2389. pid: pid.value,
  2390. }
  2391. Promise.all([
  2392. request(params1),
  2393. request(params2),
  2394. ]).then(([res1, res2]) => {
  2395. console.log('1:', res1.checked);
  2396. console.log('2:', res2.checked);
  2397. if(res1.hasOwnProperty('cstid')){
  2398. Cstref.value.getcstAssign(res1);
  2399. }else if(res2.hasOwnProperty("ffdid")){
  2400. Ffdref.value.getffdsAssign(res2);
  2401. }
  2402. // 根据返回值来设置 activeadf
  2403. if (res1.checked === 1) {
  2404. activeadf.value = 'CST';
  2405. } else if (res2.checked === 1) {
  2406. activeadf.value = 'FFD';
  2407. }
  2408. console.log('Updated activeadf:', activeadf.value);
  2409. }).catch((err) => {
  2410. console.error('请求失败:', err);
  2411. });
  2412. }
  2413. // Xfoil/ADflow窗口初始化
  2414. const intxfoiladflow = () => {
  2415. const params1 = {
  2416. transCode:'MDO0046',
  2417. pid: pid.value,
  2418. }
  2419. const params2 = {
  2420. transCode:'MDO0049',
  2421. pid: pid.value,
  2422. }
  2423. Promise.all([
  2424. request(params1),
  2425. request(params2),
  2426. ]).then(([res1, res2]) => {
  2427. console.log('1:', res1.checked);
  2428. console.log('2:', res2.checked);
  2429. if(res1.hasOwnProperty("xfid")){
  2430. Xfoilref.value.getxfoilAssign(res1);
  2431. }else if(res2.hasOwnProperty("adid")){
  2432. ADflowref.value.getadflowAssign(res2);
  2433. }
  2434. // 根据返回值来设置 activeadf
  2435. if (res1.checked === 1) {
  2436. activeadf.value = 'Xfoil';
  2437. } else if (res2.checked === 1) {
  2438. activeadf.value = 'ADflow';
  2439. }
  2440. console.log('Updated activeadf:', activeadf.value);
  2441. }).catch((err) => {
  2442. console.error('请求失败:', err);
  2443. });
  2444. }
  2445. // Python窗口初始化
  2446. const initPython = () => {
  2447. console.log('Pythonchushihua');
  2448. const param = {
  2449. transCode: 'MDO0036',
  2450. pid: pid.value,
  2451. };
  2452. request(param).then((res) => {
  2453. console.log('Python:', res);
  2454. // 判断 res.ptython 是否为空,若不为空则赋值
  2455. if (res.ptython) {
  2456. textarea1.value = res.ptython;
  2457. }
  2458. }).catch((err) => {
  2459. console.error('请求失败:', err);
  2460. });
  2461. };
  2462. // Python确认按钮提交
  2463. const pythonSubmit = () => {
  2464. console.log('Python确认按钮提交');
  2465. const param = {
  2466. transCode:'MDO0037',
  2467. pid: pid.value,
  2468. python: textarea1.value,
  2469. }
  2470. request(param).then((res) => {
  2471. console.log('Python确认按钮提交:', res);
  2472. }).catch((err) => {
  2473. console.error('请求失败:', err);
  2474. });
  2475. }
  2476. // python处理编辑器内容变化的方法
  2477. const handleEditorChange = (value) => {
  2478. console.log('Editor content changed in parent component:', value);
  2479. };
  2480. // 模块选择
  2481. const clickgeometry = (e, index, key, name) => {
  2482. console.log(key);
  2483. console.log('模块选择:',name);
  2484. tabactive.value = name;
  2485. dialogbolen();
  2486. }
  2487. const dialogbolen = () => {
  2488. switch (tabactive.value) {
  2489. case "新建任务":
  2490. dialog.value.newdialog = true;
  2491. break;
  2492. case "问题设定":
  2493. dialog.value.setdialog = true;
  2494. break;
  2495. case "优化目标":
  2496. dialog.value.targetdialog = true;
  2497. break;
  2498. case "设计变量":
  2499. dialog.value.design = true;
  2500. break;
  2501. case "约束条件":
  2502. dialog.value.constraint = true;
  2503. break;
  2504. case "外形参数化":
  2505. dialog.value.parameter = true;
  2506. break;
  2507. case "代理模型":
  2508. dialog.value.agency = true;
  2509. break;
  2510. case "加点方法":
  2511. dialog.value.addfun = true;
  2512. break;
  2513. case "优化算法":
  2514. dialog.value.sufun = true;
  2515. break;
  2516. case "终止条件":
  2517. dialog.value.enddialog = true;
  2518. break;
  2519. case "任务管理":
  2520. dialog.value.task = true;
  2521. break;
  2522. case "任务检索":
  2523. dialog.value.guanli = true;
  2524. break;
  2525. case "选择连线颜色":
  2526. showTrigger.value = true;
  2527. break;
  2528. case "逻辑流连线":
  2529. vuefval.value.linestrokeWidth(1);
  2530. break;
  2531. case "数据流连线":
  2532. vuefval.value.linestrokeWidth(3);
  2533. break;
  2534. case "模块组合":
  2535. vuefval.value.bgcolorfunc(colortier.value);
  2536. vuefval.value.onSelection();
  2537. break;
  2538. case "开始":
  2539. // optmonitor1.value.echatinit();
  2540. // processMonitor1ref.value.echatinit();
  2541. // processMonitor1ref.value.echatinit();
  2542. runok();
  2543. break;
  2544. case "列表监控":
  2545. ifjiankong();
  2546. listtableInit();
  2547. break;
  2548. case "曲线监控":
  2549. ifjiankong()
  2550. curveLine();
  2551. break;
  2552. case "过程监控":
  2553. ifjiankong()
  2554. curveLine2();
  2555. curveLine3();
  2556. break;
  2557. case "列表":
  2558. echatsfunc();
  2559. dialog.value.listdialog = true;
  2560. break;
  2561. case "面积图":
  2562. echatsfunc();
  2563. break;
  2564. case "饼状图":
  2565. echatsfunc();
  2566. break;
  2567. case "柱状图":
  2568. echatsfunc();
  2569. break;
  2570. case "折线图":
  2571. dialog.value.echartLinedialog = true;
  2572. echatsfunc();
  2573. break;
  2574. case "散点图":
  2575. // logsget();
  2576. dialog.value.scatterdialog = true;
  2577. echatsfunc();
  2578. break;
  2579. case "横条图":
  2580. echatsfunc();
  2581. break;
  2582. case "雷达图":
  2583. //logsget();
  2584. echatsfunc();
  2585. break;
  2586. case "帕雷托图":
  2587. dialog.value.paretodialog = true;
  2588. echatsfunc();
  2589. break;
  2590. case "云图/等值线":
  2591. dialog.value.clouddialog = true;
  2592. break;
  2593. case "查看报告":
  2594. echatsfunc();
  2595. dialog.value.lookover = true;
  2596. break;
  2597. case "导出报告":
  2598. dialog.value.exportreport = true;
  2599. break;
  2600. default:
  2601. }
  2602. }
  2603. // 可视化清空
  2604. const echartclear = () => {
  2605. arearef.value.echatinit();
  2606. bargraphref.value.echatinit();
  2607. echartLineref.value.echatinit();
  2608. BarChartref.value.echatinit();
  2609. radarref.value.echatinit();
  2610. scatterref.value.echatinit();
  2611. pieref.value.echatinit();
  2612. paretoref.value.echatinit();
  2613. }
  2614. const echatsfunc = () => {
  2615. //echartzongshow.value=true;
  2616. // echartclear();
  2617. switch (tabactive.value) {
  2618. case "面积图":
  2619. areashow.value = true;
  2620. bargraphshow.value = false;
  2621. echartLineshow.value = false;
  2622. BarChartshow.value = false;
  2623. radarshow.value = false;
  2624. scattershow.value = false;
  2625. pieshow = false;
  2626. paretoshow =false;
  2627. break;
  2628. case "柱状图":
  2629. areashow.value = false;
  2630. bargraphshow.value = true;
  2631. echartLineshow.value = false;
  2632. BarChartshow.value = false;
  2633. radarshow.value = false;
  2634. scattershow.value = false;
  2635. pieshow = false;
  2636. paretoshow = false;
  2637. break;
  2638. case "饼状图":
  2639. areashow.value = false;
  2640. bargraphshow.value = false;
  2641. echartLineshow.value = false;
  2642. BarChartshow.value = false;
  2643. radarshow.value = false;
  2644. scattershow.value = false;
  2645. pieshow = true;
  2646. paretoshow = false;
  2647. break;
  2648. case "折线图":
  2649. areashow.value = false;
  2650. bargraphshow.value = false;
  2651. echartLineshow.value = true;
  2652. BarChartshow.value = false;
  2653. radarshow.value = false;
  2654. scattershow.value = false;
  2655. pieshow = false;
  2656. paretoshow = false;
  2657. break;
  2658. case "散点图":
  2659. areashow.value = false;
  2660. bargraphshow.value = false;
  2661. echartLineshow.value = false;
  2662. BarChartshow.value = false;
  2663. radarshow.value = false;
  2664. scattershow.value = true;
  2665. pieshow = false;
  2666. paretoshow = false;
  2667. break
  2668. case "横条图":
  2669. areashow.value = false;
  2670. bargraphshow.value = false;
  2671. echartLineshow.value = false;
  2672. BarChartshow.value = true;
  2673. radarshow.value = false;
  2674. scattershow.value = false;
  2675. pieshow = false;
  2676. paretoshow = false;
  2677. break
  2678. case "雷达图":
  2679. areashow.value = false;
  2680. bargraphshow.value = false;
  2681. echartLineshow.value = false;
  2682. BarChartshow.value = false;
  2683. radarshow.value = true;
  2684. scattershow.value = false;
  2685. pieshow = false;
  2686. paretoshow = false;
  2687. break
  2688. case "帕雷托图":
  2689. areashow.value = false;
  2690. bargraphshow.value = false;
  2691. echartLineshow.value = false;
  2692. BarChartshow.value = false;
  2693. radarshow.value = false;
  2694. scattershow.value = false;
  2695. pieshow = false;
  2696. paretoshow = true;
  2697. break
  2698. default:
  2699. areashow.value = false;
  2700. bargraphshow.value = false;
  2701. echartLineshow.value = false;
  2702. BarChartshow.value = false;
  2703. radarshow.value = false;
  2704. scattershow.value = false;
  2705. pieshow = false;
  2706. paretoshow = false;
  2707. break
  2708. }
  2709. }
  2710. // 可视化结束
  2711. // ||activeName.value=='Three'&&tabactive.value=='开始'
  2712. const ifjiankong = () => {
  2713. if (activeName.value == 'Three' && tabactive.value == '列表监控' || activeName.value == 'Three' && tabactive.value == '开始') {
  2714. jiankong.value = true;
  2715. } else {
  2716. jiankong.value = false;
  2717. }
  2718. if (activeName.value == 'Three' && tabactive.value == '曲线监控' ) {
  2719. echartshow.value = true;
  2720. } else {
  2721. echartshow.value = false;
  2722. }
  2723. if (activeName.value == 'Three' && tabactive.value == '过程监控' ) {
  2724. echartshow2.value = true;
  2725. } else {
  2726. echartshow2.value = false;
  2727. }
  2728. }
  2729. // 求解
  2730. const runok = () => {
  2731. if(echartshow.value){
  2732. optmonitor1.value.echatinit();
  2733. }else if(echartshow2.value){
  2734. processMonitor1ref.value.echatinit();
  2735. processMonitor2ref.value.echatinit();
  2736. }
  2737. const params = {
  2738. transCode: 'MDO0039',
  2739. pid: pid.value,
  2740. }
  2741. request(params)
  2742. .then((res) => {
  2743. logs.value = '';
  2744. arrobj.value = [];
  2745. tabarr.value = [];
  2746. tableDatalieb.value = [];
  2747. tableHeaders.value = [];
  2748. ElMessage({
  2749. message: "开始运行",
  2750. type: 'success',
  2751. })
  2752. })
  2753. .catch((err) => {
  2754. ElMessage.error(err.returnMsg)
  2755. })
  2756. }
  2757. const tableKey = ref(0);
  2758. const listtableInit = () => {
  2759. const params = {
  2760. transCode: 'MDO0021',
  2761. pid: pid.value,
  2762. type: 1,
  2763. }
  2764. request(params)
  2765. .then((res) => {
  2766. tableDatalieb.value = [];
  2767. tableKey.value++;
  2768. if (res.rows && res.rows.length > 0) {
  2769. // 遍历所有返回的条目
  2770. res.rows.forEach((row) => {
  2771. const { vars, vals } = row; // 获取每一行的 vars 和 vals
  2772. // 调用 tablefun 函数更新表格
  2773. tablefun1(vars, vals);
  2774. });
  2775. }
  2776. })
  2777. .catch((err) => {
  2778. ElMessage.error(err.returnMsg)
  2779. })
  2780. }
  2781. /**
  2782. * 解析 vals 数据,将 [ ] 解析成数组,其他数据保持原样
  2783. */
  2784. function parseVals(vals) {
  2785. let result = [];
  2786. let temp = "";
  2787. let inArray = false;
  2788. for (let char of vals) {
  2789. if (char === "[") {
  2790. inArray = true;
  2791. temp += char;
  2792. } else if (char === "]") {
  2793. inArray = false;
  2794. temp += char;
  2795. result.push(JSON.parse(temp.trim())); // 确保去除首尾空格后转换
  2796. temp = "";
  2797. } else if (char === " " && !inArray) {
  2798. if (temp.trim() !== "") { // 避免空字符串被加入
  2799. result.push(temp.trim());
  2800. }
  2801. temp = "";
  2802. } else {
  2803. temp += char;
  2804. }
  2805. }
  2806. if (temp.trim() !== "") {
  2807. result.push(temp.trim());
  2808. }
  2809. return result.filter(item => item !== ""); // 过滤掉空字符串
  2810. }
  2811. //曲线监控
  2812. const curveLine = () => {
  2813. const params = {
  2814. transCode: 'MDO0021',
  2815. pid: pid.value,
  2816. type: 1,
  2817. }
  2818. request(params)
  2819. .then((res) => {
  2820. curvedata.value = JSON.stringify(res.rows);
  2821. // console.log(curvedata.value);
  2822. optmonitor1.value.getshuju(curvedata.value);
  2823. // optmonitor1.value.getsockechart();
  2824. // arearef.value.getsockechart(curvedata.value);
  2825. // bargraphref.value.getsockechart(curvedata.value);
  2826. // echartLineref.value.getsockechart(curvedata.value);
  2827. // BarChartref.value.getsockechart(curvedata.value);
  2828. // radarref.value.getsockechart(curvedata.value);
  2829. // scatterref.value.getsockechart(curvedata.value);
  2830. // pieref.value.getsockechart(curvedata.value);
  2831. // paretoref.value.getsockechart(curvedata.value);
  2832. // optmonitor1.value.getecharts();
  2833. })
  2834. .catch((err) => {
  2835. ElMessage.error(err.returnMsg)
  2836. })
  2837. }
  2838. const curveLine2 = () => {
  2839. const params = {
  2840. transCode: 'MDO0021',
  2841. pid: pid.value,
  2842. type: 2,
  2843. }
  2844. request(params)
  2845. .then((res) => {
  2846. if (res.rows && res.rows.length > 0) {
  2847. curvedata.value = JSON.stringify(res.rows);
  2848. // console.log(curvedata.value);
  2849. processMonitor1ref.value.getshuju(curvedata.value);
  2850. }
  2851. })
  2852. .catch((err) => {
  2853. ElMessage.error(err.returnMsg)
  2854. })
  2855. }
  2856. const curveLine3 = () => {
  2857. const params = {
  2858. transCode: 'MDO0021',
  2859. pid: pid.value,
  2860. type: 3,
  2861. }
  2862. request(params)
  2863. .then((res) => {
  2864. // 检查返回的数据是否为空
  2865. if (res.rows && res.rows.length > 0) {
  2866. curvedata.value = JSON.stringify(res.rows);
  2867. // console.log(curvedata.value);
  2868. processMonitor2ref.value.getshuju(curvedata.value);
  2869. }
  2870. })
  2871. .catch((err) => {
  2872. // 错误处理
  2873. ElMessage.error(err.returnMsg);
  2874. })
  2875. }
  2876. //进化优化器
  2877. //选择颜色改变线的颜色
  2878. const colorpicker = (e) => {
  2879. console.log("color change:",vuefval.value);
  2880. vuefval.value.changeAllEdgesColor(color1.value);
  2881. }
  2882. //选择颜色改变tuceng的颜色
  2883. const colorpickertier = (e) => {
  2884. //vuefval.value.changeAllEdgesColor(color1.value);
  2885. vuefval.value.bgcolorfunc(colortier.value);
  2886. }
  2887. const deviceSelectChange = () => {
  2888. }
  2889. const handleClose = (done) => {
  2890. console.log(111)
  2891. dialog.value.newdialog = false;
  2892. done();
  2893. };
  2894. const targetclick = () => {
  2895. console.log(tableData.value)
  2896. }
  2897. // 模块组合
  2898. const modelgroup=()=>{
  2899. }
  2900. //新增
  2901. const onAddItem = () => {
  2902. let tablevalnum = Number(tableval.value) > 1 ? Number(tableval.value) : 1
  2903. if (activeIndex2.value == 0) {
  2904. for (let i = 0; i < tablevalnum; i++) {
  2905. designtable.value.push({
  2906. name: `x${i + 1}`,
  2907. upper: null,
  2908. lower: null,
  2909. reference: null,
  2910. remark: ''
  2911. })
  2912. }
  2913. } else if (activeIndex2.value == 1) {
  2914. for (let i = 0; i < tablevalnum; i++) {
  2915. tableData.value.push({
  2916. name: `g${i + 1}`,
  2917. con: -1,
  2918. reference: null,
  2919. upper: 0,
  2920. lower: 0,
  2921. })
  2922. }
  2923. } else if (activeIndex2.value == 2) {
  2924. for (let i = 0; i < tablevalnum; i++) {
  2925. eloptimize.value.push({
  2926. name: `c${i + 1}`,
  2927. optdir: 1,
  2928. weight: 0,
  2929. scaling: 0,
  2930. factor: 0,
  2931. reference: null,
  2932. remark: '',
  2933. })
  2934. }
  2935. }
  2936. }
  2937. const xxclick = (index) => {
  2938. activeIndex.value = index
  2939. if (activeIndex.value == 0) {
  2940. } else if (activeIndex.value == 1) {
  2941. getissue();
  2942. }
  2943. }
  2944. //底部优化问题
  2945. const issueclick = (index) => {
  2946. activeIndex2.value = index;
  2947. if (activeIndex2.value == 0) {
  2948. getissue();
  2949. } else if (activeIndex2.value == 1) {
  2950. getyueshu();
  2951. } else if (activeIndex2.value == 2) {
  2952. getmub();
  2953. }
  2954. }
  2955. //设计变量查询
  2956. const getissue = () => {
  2957. //let childernarr=[];
  2958. const params = {
  2959. transCode: 'MDO0022',
  2960. pid: pid.value,
  2961. }
  2962. request(params)
  2963. .then((res) => {
  2964. if (res.rows.length === 0) {
  2965. } else {
  2966. let item1 = {
  2967. id: "1-1-" + 1,
  2968. label: '设计变量',
  2969. img: q2,
  2970. children: []
  2971. }
  2972. let arr = Sidebarref.value.datatree[0].children[0].children;
  2973. let result = arr.find(element => element.id === item1.id);
  2974. console.log(result);
  2975. if (!result) {
  2976. Sidebarref.value.datatree[0].children[0].children.push(item1);
  2977. }
  2978. let childernarr=Sidebarref.value.datatree[0].children[0].children
  2979. Sidebarref.value.datatree[0].children[0].children.forEach((item,index)=>{
  2980. if(item.label=='设计变量'){
  2981. Sidebarref.value.datatree[0].children[0].children[index].children=[];
  2982. }
  2983. })
  2984. res.rows = res.rows.map((item, index) => {
  2985. item.lower = item.lower ?? 'none'
  2986. item.upper = item.upper ?? 'none'
  2987. item.reference = item.reference ?? 'none'
  2988. item.name = item.name ?? 'none'
  2989. item.remark = item.remark ?? 'none'
  2990. treeitem.value = {
  2991. id: "1-1-1-" + index,
  2992. label: item.name,
  2993. img: f21,
  2994. }
  2995. // console.log(Sidebarref.value.datatree[0].children[0].children[0].children)
  2996. childernarr.forEach((item,index)=>{
  2997. if(item.label=='设计变量'){
  2998. let addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem.value);
  2999. }
  3000. })
  3001. return item;
  3002. })
  3003. designtable.value = res.rows;
  3004. }
  3005. })
  3006. .catch((err) => {
  3007. ElMessage.error(err.returnMsg)
  3008. })
  3009. // }
  3010. // })
  3011. }
  3012. //约束条件查询
  3013. const getyueshu = () => {
  3014. const params = {
  3015. transCode: 'MDO0023',
  3016. pid: pid.value,
  3017. }
  3018. request(params)
  3019. .then((res) => {
  3020. if (res.rows.length === 0) {
  3021. } else {
  3022. let item2 = {
  3023. id: "1-2-" + 2,
  3024. label: '约束条件',
  3025. img: f22,
  3026. children: []
  3027. }
  3028. let arr = Sidebarref.value.datatree[0].children[0].children;
  3029. let result = arr.find(element => element.id === item2.id);
  3030. if (!result) {
  3031. Sidebarref.value.datatree[0].children[0].children.push(item2);
  3032. }
  3033. Sidebarref.value.datatree[0].children[0].children.forEach((item, index) => {
  3034. if (item.label == '约束条件') {
  3035. Sidebarref.value.datatree[0].children[0].children[index].children = [];
  3036. }
  3037. });
  3038. let childernarr = Sidebarref.value.datatree[0].children[0].children;
  3039. res.rows = res.rows.map((item, index) => {
  3040. // 确保转换为数字
  3041. item.con = item.con ?? 'none';
  3042. item.reference = item.reference ?? 'none';
  3043. item.upper =item.upper ?? 'none';
  3044. item.lower = item.lower ?? 'none';
  3045. console.log('item:', item);
  3046. treeitem2.value = {
  3047. id: "1-2-2-" + index,
  3048. label: item.name,
  3049. img: f21,
  3050. }
  3051. childernarr.forEach((item, index) => {
  3052. if (item.label == '约束条件') {
  3053. let addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem2.value);
  3054. }
  3055. });
  3056. return item;
  3057. });
  3058. tableData.value = res.rows; // 更新表格数据
  3059. }
  3060. })
  3061. .catch((err) => {
  3062. ElMessage.error(err.returnMsg);
  3063. })
  3064. }
  3065. //目标函数查询
  3066. const getmub = () => {
  3067. const params = {
  3068. transCode: 'MDO0024',
  3069. pid: pid.value,
  3070. }
  3071. request(params)
  3072. .then((res) => {
  3073. if (res.rows.length === 0) {
  3074. } else {
  3075. let item2 = {
  3076. id: "1-3-" + 3,
  3077. label: '目标函数',
  3078. img: f41,
  3079. children: []
  3080. }
  3081. let arr = Sidebarref.value.datatree[0].children[0].children;
  3082. let result = arr.find(element => element.id === item2.id);
  3083. if (!result) {
  3084. Sidebarref.value.datatree[0].children[0].children.push(item2);
  3085. }
  3086. Sidebarref.value.datatree[0].children[0].children.forEach((item,index)=>{
  3087. if(item.label=='目标函数'){
  3088. Sidebarref.value.datatree[0].children[0].children[index].children=[];
  3089. }
  3090. })
  3091. let childernarr=Sidebarref.value.datatree[0].children[0].children
  3092. res.rows = res.rows.map((item, index) => {
  3093. item.optdir = item.optdir ?? 'none';
  3094. item.weight = item.weight ?? 'none';
  3095. item.scaling = item.scaling ?? 'none';
  3096. item.factor = item.factor ?? 'none';
  3097. item.reference = item.reference ?? 'none';
  3098. item.remark = item.remark ?? 'none';
  3099. item.name = item.name ?? 'none';
  3100. treeitem3.value = {
  3101. id: "1-3-3-" + index,
  3102. label: item.name,
  3103. img: f21,
  3104. }
  3105. childernarr.forEach((item,index)=>{
  3106. if(item.label=='目标函数'){
  3107. let addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem3.value);
  3108. }
  3109. })
  3110. // console.log(11111)
  3111. // let addnode = Sidebarref.value.datatree[0].children[0].children[3].children.push(treeitem3.value);
  3112. return item;
  3113. })
  3114. eloptimize.value = res.rows;
  3115. }
  3116. })
  3117. .catch((err) => {
  3118. ElMessage.error(err.returnMsg)
  3119. })
  3120. }
  3121. //对象数组转化字符串
  3122. const getarr = (name, arrays) => {
  3123. console.log(arrays)
  3124. for (let i = 0; i < arrays.length; i++) {
  3125. let arr = [];
  3126. let att = [];
  3127. for (const key in arrays[i]) {
  3128. if (arrays[i].hasOwnProperty(key)) {
  3129. arr.push(arrays[i][key]);
  3130. }
  3131. }
  3132. for (let j = 0; j < arr.length; j++) {
  3133. if (typeof arr[j] === 'string' && arr[j] == "") {
  3134. console.log(11111)
  3135. arr[j] = " ";
  3136. }
  3137. }
  3138. if (arrays[i].hasOwnProperty('pid') == true) {
  3139. att = arr.slice(1, -1);
  3140. } else {
  3141. att = arr;
  3142. }
  3143. const valuesWithSemiColons = att.join(',');
  3144. name += valuesWithSemiColons + ';';
  3145. }
  3146. console.log('conlist',name)
  3147. return name;
  3148. }
  3149. const convertToStringArray = (result, Data) => {
  3150. console.log('Data:', Data);
  3151. result = Data.map(row => {
  3152. const vid = row.vid || ' ';
  3153. const name = row.name || ' ';
  3154. const upper = row.upper ?? ' ';
  3155. const lower = row.lower ?? ' ';
  3156. const reference = row.reference ?? ' ';
  3157. const remark = row.remark || ' ';
  3158. // 将字段连接为一个以逗号分隔的字符串
  3159. return `${vid},${name},${upper},${lower},${reference},${remark}`;
  3160. }).join(';'); // 每行之间用分号分隔
  3161. return result;
  3162. }
  3163. const convertToStringArray1 = (result, Data) => {
  3164. console.log('Data:', Data);
  3165. result = Data.map(row => {
  3166. const conid = row.conid || ' ';
  3167. const name = row.name || ' ';
  3168. const upper = row.upper ?? ' ';
  3169. const lower = row.lower ?? ' ';
  3170. const reference = row.reference ?? ' ';
  3171. // 将字段连接为一个以逗号分隔的字符串
  3172. return `${conid},${name},${reference},${upper},${lower}`;
  3173. }).join(';'); // 每行之间用分号分隔
  3174. return result;
  3175. }
  3176. const convertToStringArray2 = (result, Data) => {
  3177. console.log('Data:', Data);
  3178. result = Data.map(row => {
  3179. const fid = row.fid || ' ';
  3180. const name = row.name || ' ';
  3181. const optdir = row.optdir ?? ' ';
  3182. const weight = row.weight ?? ' ';
  3183. const reference = row.reference ?? ' ';
  3184. const remark = row.remark || ' ';
  3185. // 将字段连接为一个以逗号分隔的字符串
  3186. return `${fid},${name},${optdir},${weight},${reference},${remark}`;
  3187. }).join(';'); // 每行之间用分号分隔
  3188. return result;
  3189. }
  3190. //保存优化问题
  3191. const onokItem = () => {
  3192. console.log(activeIndex2.value);
  3193. if (activeIndex2.value == 0) {
  3194. svarlist.value = '';
  3195. console.log("designtable:",designtable.value)
  3196. svarlist.value = convertToStringArray(svarlist.value, designtable.value)
  3197. devise();
  3198. } else if (activeIndex2.value == 1) {
  3199. conlist.value = '';
  3200. console.log("tabledata:",tableData.value)
  3201. conlist.value = convertToStringArray1(conlist.value, tableData.value)
  3202. restrain();
  3203. } else if (activeIndex2.value == 2) {
  3204. funlist.value = '';
  3205. console.log("eloptimize:",eloptimize.value)
  3206. funlist.value = convertToStringArray2(funlist.value, eloptimize.value)
  3207. funlistaa();
  3208. }
  3209. }
  3210. //设计变量的添加
  3211. const devise = () => {
  3212. const params = {
  3213. transCode: 'MDO0054',
  3214. pid: pid.value,
  3215. vartr: svarlist.value
  3216. }
  3217. request(params)
  3218. .then((res) => {
  3219. ElMessage({
  3220. message: res.returnMsg,
  3221. type: 'success',
  3222. })
  3223. getissue();
  3224. })
  3225. .catch((err) => {
  3226. ElMessage.error(err.returnMsg)
  3227. })
  3228. }
  3229. //约束的添加restrain
  3230. const restrain = () => {
  3231. const params = {
  3232. transCode: 'MDO0055',
  3233. pid: pid.value,
  3234. vartr: conlist.value
  3235. }
  3236. request(params)
  3237. .then((res) => {
  3238. ElMessage({
  3239. message: res.returnMsg,
  3240. type: 'success',
  3241. })
  3242. getyueshu();
  3243. })
  3244. .catch((err) => {
  3245. ElMessage.error(err.returnMsg)
  3246. })
  3247. }
  3248. //优化目标接口
  3249. const funlistaa = () => {
  3250. const params = {
  3251. transCode: 'MDO0056',
  3252. pid: pid.value,
  3253. vartr: funlist.value
  3254. }
  3255. request(params)
  3256. .then((res) => {
  3257. ElMessage({
  3258. message: res.returnMsg,
  3259. type: 'success',
  3260. })
  3261. getmub();
  3262. })
  3263. .catch((err) => {
  3264. ElMessage.error(err.returnMsg)
  3265. })
  3266. }
  3267. //初始化
  3268. const initialize = () => {
  3269. const params = {
  3270. transCode: 'MDO0011',
  3271. pid: pid.value,
  3272. }
  3273. request(params)
  3274. .then((res) => {
  3275. // ElMessage({
  3276. // message: res.returnMsg,
  3277. // type: 'success',
  3278. // })
  3279. importget();
  3280. })
  3281. .catch((err) => {
  3282. ElMessage.error(err.returnMsg)
  3283. })
  3284. }
  3285. // new输入参数
  3286. const changecheck = (val,row) => {
  3287. console.log(val);
  3288. console.log(row);
  3289. }
  3290. //输入参数查询
  3291. const importget = () => {
  3292. const params = {
  3293. transCode: 'MDO0012',
  3294. pid: pid.value,
  3295. }
  3296. request(params)
  3297. .then((res) => {
  3298. srtable.value = res.rows;
  3299. })
  3300. .catch((err) => {
  3301. ElMessage.error(err.returnMsg)
  3302. })
  3303. }
  3304. //输入保存
  3305. const susave = (index, row) => {
  3306. console.log(row);
  3307. const params = {
  3308. transCode: 'MDO0013',
  3309. pid: pid.value,
  3310. inid: row.inid,
  3311. vid: row.vid,
  3312. enable: row.enable,
  3313. name: row.name,
  3314. v1: row.v1,
  3315. v2: row.v2
  3316. }
  3317. request(params)
  3318. .then((res) => {
  3319. ElMessage({
  3320. message: '保存成功',
  3321. type: 'success',
  3322. })
  3323. })
  3324. .catch((err) => {
  3325. ElMessage.error(err.returnMsg)
  3326. })
  3327. }
  3328. // 输入的删除
  3329. const sudelete = (index, row) => {
  3330. if (row.hasOwnProperty('outid') == false) {
  3331. srtable.value.splice(index, 1)
  3332. } else {
  3333. const params = {
  3334. transCode: 'MDO0014',
  3335. inid: row.inid,
  3336. }
  3337. request(params)
  3338. .then((res) => {
  3339. importget();
  3340. ElMessage({
  3341. message: " 删除成功",
  3342. type: 'success',
  3343. })
  3344. })
  3345. .catch((err) => {
  3346. ElMessage.error(err.returnMsg)
  3347. })
  3348. }
  3349. }
  3350. //输入输出的新建
  3351. const newxfiol = () => {
  3352. if (activeIndex3.value == 0) {
  3353. srtable.value.push({
  3354. name: "",
  3355. v1: '0',
  3356. v2: '0',
  3357. enable: '0'
  3358. })
  3359. } else if (activeIndex3.value == 2) {
  3360. sctable.value.push({
  3361. name: "",
  3362. v1: '',
  3363. v2: '',
  3364. enable: '0'
  3365. })
  3366. }
  3367. }
  3368. // 点击掉查询接口
  3369. const dianjia = (index) => {
  3370. activeIndex3.value = index;
  3371. if (activeIndex3.value == 0) {
  3372. importget()
  3373. } else if (activeIndex3.value == 2) {
  3374. console.log(11111)
  3375. exportget();
  3376. }
  3377. }
  3378. //输出参数查询
  3379. const exportget = () => {
  3380. const params = {
  3381. transCode: 'MDO0015',
  3382. pid: pid.value,
  3383. }
  3384. request(params)
  3385. .then((res) => {
  3386. sctable.value = res.rows;
  3387. })
  3388. .catch((err) => {
  3389. ElMessage.error(err.returnMsg)
  3390. })
  3391. }
  3392. // 输出保存
  3393. const scsave = (index, row) => {
  3394. if (row.hasOwnProperty('fid') == true) {
  3395. fid.value = row.fid;
  3396. }
  3397. if (row.hasOwnProperty('conid') == true) {
  3398. conid.value = row.conid;
  3399. }
  3400. const params = {
  3401. transCode: 'MDO0016',
  3402. pid: pid.value,
  3403. outid: row.outid,
  3404. fid: fid.value,
  3405. conid: conid.value,
  3406. enable: row.enable,
  3407. name: row.name,
  3408. v1: row.v1,
  3409. v2: row.v2
  3410. }
  3411. request(params)
  3412. .then((res) => {
  3413. ElMessage({
  3414. message: '保存成功',
  3415. type: 'success',
  3416. })
  3417. exportget();
  3418. })
  3419. .catch((err) => {
  3420. ElMessage.error(err.returnMsg)
  3421. })
  3422. }
  3423. //输出删除scdelete
  3424. const scdelete = (index, row) => {
  3425. console.log(row);
  3426. if (row.hasOwnProperty('outid') == false) {
  3427. sctable.value.splice(index, 1)
  3428. } else {
  3429. const params = {
  3430. transCode: 'MDO0017',
  3431. outid: row.outid,
  3432. }
  3433. request(params)
  3434. .then((res) => {
  3435. exportget();
  3436. ElMessage({
  3437. message: " 删除成功",
  3438. type: 'success',
  3439. })
  3440. })
  3441. .catch((err) => {
  3442. ElMessage.error(err.returnMsg)
  3443. })
  3444. }
  3445. }
  3446. // 表格
  3447. function tablefun(vars, vals) {
  3448. console.log('表格更新');
  3449. // 解析列名,vars 以空格分隔
  3450. let headers = vars.split(" ");
  3451. // 更新表头
  3452. tableHeaders.value = headers.map(item => ({ label: item, prop: item }));
  3453. // 构造表格数据对象
  3454. let rowData = {};
  3455. headers.forEach((key, index) => {
  3456. rowData[key] = vals[index] !== undefined ? vals[index] : ""; // 处理数据长度不匹配情况
  3457. });
  3458. // 更新表格数据
  3459. tableDatalieb.value.push(rowData);
  3460. }
  3461. const tablefun1 = (vars, vals) => {
  3462. console.log('表格更新');
  3463. // 解析列名,vars 以空格分隔
  3464. let headers = vars.split(" ");
  3465. // 更新表头
  3466. tableHeaders.value = headers.map(item => ({ label: item, prop: item }));
  3467. // 解析 vals 为数组(假设 vals 是一个字符串)
  3468. let values = vals.split(" ");
  3469. // 构造表格数据对象
  3470. let rowData = {};
  3471. headers.forEach((key, index) => {
  3472. rowData[key] = values[index] !== undefined ? values[index] : ""; // 处理数据长度不匹配情况
  3473. });
  3474. // 更新表格数据
  3475. tableDatalieb.value.push(rowData);
  3476. };
  3477. //获取日志
  3478. const logsget = () => {
  3479. const params = {
  3480. transCode: 'MDO0025',
  3481. pid: pid.value,
  3482. }
  3483. request(params)
  3484. .then((res) => {
  3485. // 去除空行
  3486. console.log('日志接口赋值')
  3487. logs.value = res.logs.split('\n').filter(line => line.trim() !== '').join('\n');
  3488. const results = extractBracesContent(logs.value);
  3489. for (let i = 0; i < results.length; i++) {
  3490. arrobj.value.push(results[i]);
  3491. let vals = (results[i].vals).split(" ");
  3492. tablefun(vals);
  3493. let echarr = [];
  3494. echarr.push(results[i])
  3495. optmonitor1.value.getsockechart(echarr);
  3496. processMonitor1ref.value.getsockechart(echarr);
  3497. processMonitor2ref.value.getsockechart(echarr);
  3498. // arearef.value.getsockechart(echarr);
  3499. // bargraphref.value.getsockechart(echarr);
  3500. // echartLineref.value.getsockechart(echarr);
  3501. // BarChartref.value.getsockechart(echarr);
  3502. // radarref.value.getsockechart(echarr);
  3503. // scatterref.value.getsockechart(echarr);
  3504. }
  3505. })
  3506. .catch((err) => {
  3507. ElMessage.error(err.returnMsg)
  3508. })
  3509. }
  3510. // 字符串截取
  3511. function extractBracesContent(str) {
  3512. const objectRegex = /\{[^}]+\}/g; // 匹配大括号对象
  3513. const matches = str.match(objectRegex);
  3514. if (!matches) return [];
  3515. return matches.map(match => {
  3516. try {
  3517. return JSON.parse(match);
  3518. } catch (e) {
  3519. console.error('Failed to parse object:', match);
  3520. return null;
  3521. }
  3522. }).filter(Boolean); // 过滤掉解析失败的对象
  3523. }
  3524. function convertToPercentage(number) {
  3525. return (number * 100);
  3526. }
  3527. //websockct的连接
  3528. function initWebSocket() {
  3529. //初始化weosocket
  3530. // const wsuri = "ws://192.168.0.43:8087//websocket?projectId="+this.pid; ws://192.168.0.131/diswebsocket?projectId=5
  3531. // const wsurl = "ws://192.168.108:8188//websocket?projectId=" + pid.value;
  3532. const wsurl = import.meta.env.VITE_WEBSOCKET_URL + pid.value;
  3533. // const wsurl =
  3534. // "ws://" +
  3535. // process.env.VUE_APP_BASE_websokt +
  3536. // "/diswebsocket?projectId=" +'5'
  3537. // aid.value;
  3538. websock = new WebSocket(wsurl);
  3539. websock.onopen = websocketonopen;
  3540. websock.onmessage = websocketonmessage;
  3541. websock.onerror = websocketonerror;
  3542. websock.onclose = websocketclose;
  3543. }
  3544. // Websoket连接成功事件
  3545. const websocketonopen = (res) => {
  3546. console.log("WebSocket连接成功", res);
  3547. console.log()
  3548. start();
  3549. };
  3550. // Websoket接收消息事件
  3551. const websocketonmessage = (res) => {
  3552. // console.log('websocket接受消息:',res.data)
  3553. arrobj.value = [];
  3554. if (res.data.indexOf('{') !== -1) {
  3555. progressshow.value = true;
  3556. console.log('websocket接受消息:',res.data)
  3557. // 解析 WebSocket 接收到的消息数据
  3558. let parsedData = JSON.parse(res.data);
  3559. let step = Number(parsedData.step);
  3560. if(parsedData.type === 1){
  3561. percentage.value = Math.round((step / 30) * 100);
  3562. }
  3563. console.log("进度:", percentage.value);
  3564. echartdata.value = res.data;
  3565. arrobj.value.push(parsedData);
  3566. console.log('tabactive:',tabactive.value)
  3567. if(jiankong.value && parsedData.type === 1){
  3568. console.log('列表监控')
  3569. tablefun1(parsedData.vars, parsedData.vals); // 传递 vars 和 vals 更新表格
  3570. }else if(echartshow.value&&parsedData.type === 1){
  3571. optmonitor1.value.getsockechart(arrobj.value);
  3572. }else if(echartshow2.value&&parsedData.type === 2){
  3573. processMonitor1ref.value.getsockechart(arrobj.value);
  3574. }else if(echartshow2.value&&parsedData.type === 3){
  3575. processMonitor2ref.value.getsockechart(arrobj.value);
  3576. }
  3577. // optmonitor1.value.getsockechart(arrobj.value);
  3578. // processMonitor1ref.getsockechart(arrobj.value);
  3579. // processMonitor2ref.getsockechart(arrobj.value);
  3580. // arearef.value.getsockechart(arrobj.value);
  3581. // bargraphref.value.getsockechart(arrobj.value);
  3582. // echartLineref.value.getsockechart(arrobj.value);
  3583. // BarChartref.value.getsockechart(arrobj.value);
  3584. // radarref.value.getsockechart(arrobj.value);
  3585. // scatterref.value.getsockechart(arrobj.value);
  3586. // pieref.value.getsockechart(arrobj.value);
  3587. // paretoref.value.getsockechart(arrobj.value);
  3588. } else {
  3589. if (res.data.indexOf('——成功') !== -1) {
  3590. const timer = setTimeout(function () {
  3591. progressshow.value = false;
  3592. console.log('关闭定时器')
  3593. }, 10000)
  3594. // console.log(22222)
  3595. // clearTimeout(timer);
  3596. }
  3597. if (res.data.indexOf('msg=heartChec') == -1) {
  3598. // 去除空行
  3599. const cleanedLog = res.data.split('\n').filter(line => line.trim() !== '').join('\n');
  3600. logs.value = logs.value + '\n' + cleanedLog;
  3601. let textarea = document.getElementById("textarea_id");
  3602. textarea.scrollTop = textarea.scrollHeight;
  3603. }
  3604. }
  3605. reset();
  3606. };
  3607. // Websoket连接错误事件
  3608. const websocketonerror = (res) => {
  3609. console.log("连接错误", res);
  3610. websock.close();
  3611. reconnect();
  3612. };
  3613. // Websoket断开事件
  3614. const websocketclose = (res) => {
  3615. console.log("断开连接", res);
  3616. };
  3617. // 创建 websocket 的实例
  3618. // 心跳包
  3619. const reconnect = () => {
  3620. if (times.value.lockReconnect) return;
  3621. times.value.lockReconnect = true;
  3622. //没连接上会一直重连,设置延迟避免请求过多
  3623. times.value.timeoutnum && clearTimeout(times.value.timeoutnum);
  3624. times.value.timeoutnum = setTimeout(function () {
  3625. //新连接
  3626. initWebSocket();
  3627. times.value.lockReconnect = false;
  3628. }, 10000);
  3629. }
  3630. const reset = () => {
  3631. //重置心跳
  3632. clearTimeout(times.value.timeoutObj);
  3633. clearTimeout(times.value.serverTimeoutObj);
  3634. start();
  3635. }
  3636. const start = () => {
  3637. //开启心跳
  3638. times.value.timeoutObj && clearTimeout(times.value.timeoutObj);
  3639. times.value.serverTimeoutObj && clearTimeout(times.value.serverTimeoutObj);
  3640. times.value.timeoutObj = setTimeout(function () {
  3641. //这里发送一个心跳,后端收到后,返回一个心跳消息
  3642. if (websock.readyState == 1) {
  3643. //如果连接正常
  3644. websock.send("heartCheck");
  3645. } else {
  3646. //否则重连
  3647. reconnect();
  3648. }
  3649. times.value.serverTimeoutObj = setTimeout(function () {
  3650. // 超时关闭
  3651. websock.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
  3652. }, times.value.timeout);
  3653. }, times.value.timeout);
  3654. }
  3655. // 日志框
  3656. // 日志的文本框
  3657. const footerShows = (evt) => {
  3658. if (evt == "claer") {
  3659. logs.value = "";
  3660. } else {
  3661. footerShow.value = !footerShow.value;
  3662. }
  3663. }
  3664. // watch(() =>echartdata.value, (newValue, oldValue) => {
  3665. // // 这里处理 echartData 变化的逻辑
  3666. // console.log('echartData changed:', newValue);
  3667. // // console.log(optmonitor1.value);
  3668. // });
  3669. // 选项卡
  3670. const selectTab=(index)=>{
  3671. currentTab.value = index;
  3672. }
  3673. const adfhandleClick=(tab,event)=>{
  3674. console.log('表单切换',tab.props.label);
  3675. activeadf.value=tab.props.label;
  3676. if(tab.props.name === '进化优化器'){
  3677. nextTick(() => {
  3678. // 确保 ref 已经初始化
  3679. if (Joptimizeref.value) {
  3680. // 调用 Joptimize 的 getoptimize 方法
  3681. Joptimizeref.value.getoptimize(pid.value);
  3682. }
  3683. });
  3684. }else if(tab.props.name === '代理优化器'){
  3685. nextTick(() => {
  3686. // 确保 ref 已经初始化
  3687. if (Doptimizeref.value) {
  3688. Doptimizeref.value.getDoptimize(pid.value);
  3689. }
  3690. });
  3691. }else if(tab.props.name === '梯度优化器'){
  3692. nextTick(() => {
  3693. // 确保 ref 已经初始化
  3694. if (Toptimizeref.value) {
  3695. Toptimizeref.value.getToptimize(pid.value);
  3696. }
  3697. });
  3698. }
  3699. }
  3700. const getaddsave = () => {
  3701. if (Joptimizeref.value && typeof Joptimizeref.value.getaddsave === 'function') {
  3702. Joptimizeref.value.getaddsave();
  3703. }
  3704. }
  3705. const getDaddsave = () => {
  3706. if (Doptimizeref.value && typeof Doptimizeref.value.getaddDsave === 'function') {
  3707. Doptimizeref.value.getaddDsave();
  3708. }
  3709. }
  3710. const getTaddsave = () => {
  3711. if (Toptimizeref.value && typeof Toptimizeref.value.getaddTsave === 'function') {
  3712. Toptimizeref.value.getaddTsave();
  3713. }
  3714. }
  3715. const getSave = (ref) => {
  3716. if (ref == '进化优化器'){
  3717. getaddsave();
  3718. }else if(ref == '代理优化器'){
  3719. getDaddsave();
  3720. }else if(ref == '梯度优化器'){
  3721. getTaddsave();
  3722. }
  3723. }
  3724. // 参数化
  3725. const adfhandleClick2=(tab,event)=>{
  3726. console.log('表单切换',tab.props.label);
  3727. activeadf.value=tab.props.label;
  3728. if(tab.props.name === 'CST'){
  3729. nextTick(() => {
  3730. // 确保 ref 已经初始化
  3731. if (Cstref.value) {
  3732. Cstref.value.getcst(pid.value);
  3733. }
  3734. });
  3735. }else if(tab.props.name === 'FFD'){
  3736. nextTick(() => {
  3737. // 确保 ref 已经初始化
  3738. if (Ffdref.value) {
  3739. Ffdref.value.getffds(pid.value);
  3740. }
  3741. });
  3742. }
  3743. }
  3744. // 单独cst保存
  3745. const cstok=()=>{
  3746. // cstnum.value='';
  3747. if(Cstref.value){
  3748. Cstref.value.getcstsave();
  3749. }
  3750. dialog.value.CSTt = false;
  3751. }
  3752. // 单独ffd保存
  3753. const ffdok=()=>{
  3754. if(Ffdref.value){
  3755. Ffdref.value.getffdsave();
  3756. }
  3757. dialog.value.ffdt = false;
  3758. }
  3759. // cstffd保存
  3760. const getCstFfdsave = (activeadf) => {
  3761. if (activeadf == 'CST') {
  3762. cstok();
  3763. } else if (activeadf == 'FFD') {
  3764. ffdok();
  3765. }
  3766. }
  3767. const adfhandleClick3=(tab,event)=>{
  3768. console.log('表单切换',tab.props.label);
  3769. activeadf.value=tab.props.label;
  3770. if(tab.props.name === 'Xfoil'){
  3771. nextTick(() => {
  3772. // 确保 ref 已经初始化
  3773. if (Xfoilref.value) {
  3774. console.log('pid-0:',pid.value)
  3775. Xfoilref.value.getxfoil(pid.value);
  3776. }
  3777. });
  3778. }else if(tab.props.name === 'ADflow'){
  3779. nextTick(() => {
  3780. // 确保 ref 已经初始化
  3781. if (ADflowref.value) {
  3782. ADflowref.value.getadflow(pid.value);
  3783. }
  3784. });
  3785. }
  3786. }
  3787. // xfoil保存
  3788. const xfoilok=()=>{
  3789. if(Xfoilref.value){
  3790. Xfoilref.value.getxfoilsave();
  3791. }
  3792. }
  3793. // adflow保存
  3794. const adflowok=()=>{
  3795. if(ADflowref.value){
  3796. ADflowref.value.getadflowsave();
  3797. }
  3798. }
  3799. // xfoiladflow保存
  3800. const getXfoilAdflowsave = (activeadf) => {
  3801. if (activeadf == 'Xfoil') {
  3802. xfoilok();
  3803. } else if (activeadf == 'ADflow') {
  3804. adflowok();
  3805. }
  3806. }
  3807. // 云图打开二级弹窗
  3808. let seconddialogshow = ref(false)
  3809. let activesd = ref ({
  3810. fileselect:false,
  3811. domain:false,
  3812. cloud:false,
  3813. colorchart:false,
  3814. isoline:false
  3815. })
  3816. let cloudsedtitle = ref('')
  3817. const openSeconddialog = (name) => {
  3818. // 设置 activesd 中的值来控制不同内容的显示
  3819. activesd.value.fileselect = false;
  3820. activesd.value.domain = false;
  3821. activesd.value.cloud = false;
  3822. activesd.value.colorchart = false;
  3823. activesd.value.isoline = false;
  3824. switch (name) {
  3825. case '文件选择':
  3826. activesd.value.fileselect = true;
  3827. cloudsedtitle.value = "文件选择";
  3828. break;
  3829. case '域':
  3830. activesd.value.domain = true;
  3831. cloudsedtitle.value = "域";
  3832. break;
  3833. case '云图':
  3834. activesd.value.cloud = true;
  3835. cloudsedtitle.value = "云图";
  3836. break;
  3837. case '色卡':
  3838. activesd.value.colorchart = true;
  3839. cloudsedtitle.value = "色卡";
  3840. break;
  3841. case '等值线':
  3842. activesd.value.isoline = true;
  3843. cloudsedtitle.value = "等值线";
  3844. break;
  3845. default:
  3846. break;
  3847. }
  3848. seconddialogshow.value = true
  3849. };
  3850. const lbjkheaderCellClassName = ({ columnIndex }) => {
  3851. if( columnIndex === 0 ) return '';
  3852. let dynamicColumnIndex = columnIndex - 1;
  3853. let totalColumns = tableHeaders.value.length;
  3854. let partsize = Math.ceil( totalColumns/3 );
  3855. if( dynamicColumnIndex < partsize ) {
  3856. return 'header-first';
  3857. }else if( dynamicColumnIndex < partsize*2 ) {
  3858. return 'header-second';
  3859. }else {
  3860. return 'header-third';
  3861. }
  3862. }
  3863. </script>
  3864. <style lang="scss" scoped>
  3865. .conter_flex {
  3866. display: flex;
  3867. .ech {
  3868. flex: 1;
  3869. }
  3870. }
  3871. //有子节点 且未展开
  3872. .left_main_content :deep(.el-icon svg) {
  3873. display: block;
  3874. }
  3875. .footerTitle {
  3876. display: flex;
  3877. justify-content: space-between;
  3878. padding: 5px 0px;
  3879. font-size: 20px;
  3880. height: 32px !important;
  3881. z-index: 99;;
  3882. // border-radius: 5px 5px 0px 0px;
  3883. // overflow: hidden;
  3884. border-top: 1px solid #B3B3B3;
  3885. border-bottom: 1px solid #B3B3B3;
  3886. }
  3887. .footerTitle .el-image{
  3888. width:24px;
  3889. }
  3890. .footerTitle div {
  3891. display: flex;
  3892. // justify-content:center ;
  3893. align-items: center;
  3894. font-size: 14px;
  3895. }
  3896. .kongzhit {
  3897. position: absolute;
  3898. bottom: 0;
  3899. width: 100%;
  3900. }
  3901. .footerTitle p {
  3902. margin: 0;
  3903. }
  3904. .footerTitle .span {
  3905. width: 150px;
  3906. height: 32px;
  3907. line-height: 40px;
  3908. padding: 0 20px;
  3909. box-sizing: border-box;
  3910. cursor: default;
  3911. position: relative;
  3912. font-size: 14px;
  3913. color: #333333;
  3914. font-family: 'Source Sans-Regular';
  3915. }
  3916. .footerTitle .span span{
  3917. padding-left:20px;
  3918. }
  3919. .footerText .el-textarea__inner {
  3920. width: 100%;
  3921. height: 178px !important;
  3922. border: 0;
  3923. font-size: 12px;
  3924. color: #333;
  3925. padding: 2px;
  3926. box-shadow:none;
  3927. }
  3928. .custom-button{
  3929. color: #333333;
  3930. background-color: #DCEAFF;
  3931. border: 1px solid #2267B1 ;
  3932. }
  3933. //没有子节点
  3934. </style>
  3935. <style>
  3936. .wentsd {
  3937. padding: 0 8px;
  3938. }
  3939. /* .el-treeicon .el-tree-node__expand-icon.is-leaf{
  3940. display: none !important;
  3941. } */
  3942. .custom-text {
  3943. font-family: 'Source Sans-Regular';
  3944. font-size: 16px;
  3945. color: rgba(51, 51, 51, 1);
  3946. line-height: 24px;
  3947. text-align: left;
  3948. font-style: normal;
  3949. text-transform: none;
  3950. padding-left: 8px;
  3951. }
  3952. .el-tree .el-tree-node__children .custom-text {
  3953. font-family: 'Source Sans-Regular';
  3954. font-size: 14px;
  3955. /* 这里设置为20px,你可以根据需求调整大小 */
  3956. color: rgba(51, 51, 51, 0.8);
  3957. }
  3958. /* .el-tree .el-tree-node.is-current>.el-tree-node__content img{
  3959. display: none;
  3960. } */
  3961. .custom-tree {
  3962. overflow: auto;
  3963. }
  3964. .custom-tree1>.el-tree-node>.el-tree-node__content>div img {
  3965. display: none;
  3966. /* 隐藏一级节点复选框 */
  3967. }
  3968. .footerTitle {
  3969. background: #eee;
  3970. border-radius: 0px 0px 0px 0px;
  3971. }
  3972. .footer-tab .el-tabs__item {
  3973. color: #333333;
  3974. }
  3975. .footerTitle .active {
  3976. background-color: #fff;
  3977. border-left:1px solid #B3B3B3;
  3978. border-right:1px solid #B3B3B3;
  3979. /* border-bottom:4px solid #fff; */
  3980. }
  3981. .footerTitle .active::before{
  3982. content: "";
  3983. display: block;
  3984. width: 100%;
  3985. height: 2px;
  3986. background: #2267B1;
  3987. border-radius: 0px 0px 0px 0px;
  3988. top: 0px;
  3989. left:0px;
  3990. position: absolute;
  3991. }
  3992. .footerTitle .active::after{
  3993. content: "";
  3994. display: block;
  3995. width: 100%;
  3996. height:4px;
  3997. background: #fff;
  3998. border-radius: 0px 0px 0px 0px;
  3999. bottom: 0px;
  4000. left:0px;
  4001. position: absolute;
  4002. }
  4003. .youhualog {
  4004. width: 100%;
  4005. height: 195px;
  4006. overflow-y: auto;
  4007. background: #fff;
  4008. }
  4009. .youhualog .active2 {
  4010. color: #2267B1;
  4011. }
  4012. .youhualog ul {
  4013. /* width:482px; */
  4014. display: flex;
  4015. align-items: center;
  4016. }
  4017. .youhualog ul li {
  4018. font-family: 'Source Sans-Regular';
  4019. /* flex: 1; */
  4020. /* border-left: 1px solid #B3B3B3; */
  4021. font-size: 14px;
  4022. height: 32px;
  4023. /* line-height: 40px; */
  4024. width: 140px;
  4025. display: flex;
  4026. /* justify-content: center; */
  4027. align-items: center;
  4028. padding:0 10px;
  4029. }
  4030. .youhualog ul li span {
  4031. margin-left: 20px;
  4032. }
  4033. .footer-content {
  4034. /* // padding: 15px 24px; */
  4035. padding: 5px;
  4036. border: 1px solid #B3B3B3;
  4037. /* margin-right: 119px; */
  4038. }
  4039. .footer-add {
  4040. width: 600px;
  4041. }
  4042. .flexend {
  4043. display: flex;
  4044. justify-content: flex-end;
  4045. }
  4046. .dibu {
  4047. margin-top: 5px;
  4048. display: flex;
  4049. justify-content: flex-end;
  4050. height: 35px;
  4051. overflow: hidden;
  4052. }
  4053. .dibu .el-input__wrapper {
  4054. width: 226px;
  4055. }
  4056. .dibu .el-form-item_label {
  4057. color: #333333;
  4058. font-size: 14px;
  4059. font-family: 'Source Sans Pro-Regular';
  4060. }
  4061. .dibu .btncolor {
  4062. margin-top: 2px;
  4063. height: 27px;
  4064. width: 70px;
  4065. background: #FFFFFF;
  4066. box-shadow: 0px 2px 2px 0px #B3B3B3;
  4067. border-radius: 0px 0px 0px 0px;
  4068. border: 1px solid #B3B3B3;
  4069. }
  4070. .classtable .el-table td.el-table__cell div .el-input__wrapper {
  4071. box-shadow: none !important;
  4072. padding: 0;
  4073. }
  4074. .classtable .el-table .el-table__cell {
  4075. padding: 0;
  4076. }
  4077. .gooterpading {
  4078. /* border: 1px solid #2267B1; */
  4079. }
  4080. .classtable .el-table th .cell {
  4081. /* background: #fff; */
  4082. /* line-height: 31px; */
  4083. }
  4084. .classtable .el-table td.el-table__cell, .classtable .el-table th.el-table__cell{
  4085. color: #333333;
  4086. font-size: 16px;
  4087. font-family: 'Source Sans Pro-Regular';
  4088. }
  4089. .footer-content .classtable .el-table td.el-table__cell,.footer-content .classtable .el-table th.el-table__cell {
  4090. color: #333333;
  4091. font-size: 14px;
  4092. font-family: 'Source Sans Pro-Regular';
  4093. }
  4094. .classtable .el-table td.el-table__cell div {
  4095. height: 31px;
  4096. overflow: hidden;
  4097. /* display: flex; */
  4098. align-items: center; /* 垂直居中 */
  4099. }
  4100. .classtable .el-table td.el-table__cell,
  4101. .el-table th.el-table__cell.is-leaf,
  4102. .eldesign {
  4103. /* border: 1px solid #000000; */
  4104. }
  4105. /* .el-color-picker__trigger {
  4106. //display: none;
  4107. } */
  4108. /* 使颜色选择器的触发器可点击,但不显示 */
  4109. .el-color-picker__trigger.is-show-panel {
  4110. display: block;
  4111. }
  4112. .conter_mian {
  4113. padding: 1px;
  4114. }
  4115. .summary-dlg2 .el-dialog__body {
  4116. padding: 0;
  4117. }
  4118. .summary-dlg .el-dialog__wrapper {
  4119. pointer-events: none;
  4120. }
  4121. .summary-dlg .el-dialog {
  4122. pointer-events: auto;
  4123. }
  4124. .summary-dlgPdf .el-dialog__body{
  4125. padding: 5px;
  4126. }
  4127. .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
  4128. background-color: #fff;
  4129. }
  4130. .youhualog1 {
  4131. position: relative;
  4132. }
  4133. .chushij {
  4134. position: absolute;
  4135. right: 13px;
  4136. top: 5px;
  4137. }
  4138. .jindutiao {
  4139. padding: 0 0 2px 0px;
  4140. background: #9FCDFF;
  4141. }
  4142. .jindutiao .demo-progress {
  4143. width: 100%;
  4144. }
  4145. .jindutiao .percentage-value {
  4146. font-size: 13px;
  4147. color: #333333;
  4148. font-family: 'Source Sans Pro-Regular';
  4149. }
  4150. .cstleft{
  4151. width:50%;
  4152. flex: 1;
  4153. }
  4154. .XFpdding{
  4155. /* height: 425px; */
  4156. }
  4157. .dialog_class {
  4158. color: #333333;
  4159. font-size: 16px;
  4160. font-family: 'Source Sans Pro-Regular';
  4161. }
  4162. </style>