home.vue 142 KB

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