home.vue 121 KB

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