You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

convertIndex.tmpl 28 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. <!-- 头部导航栏 -->
  2. {{template "base/head" .}}
  3. <!-- 弹窗 -->
  4. <style>
  5. .inline.fields .right.aligned label{
  6. width: 100% !important;
  7. text-align: right;
  8. }
  9. .inline .ui.dropdown .text {
  10. color: rgba(0, 0, 0, .87) !important;
  11. left: 15px !important;
  12. }
  13. .text_color {
  14. color: rgb(0 0 0 / 87%);
  15. }
  16. </style>
  17. <div id="mask">
  18. <div id="loadingPage">
  19. <div class="rect1"></div>
  20. <div class="rect2"></div>
  21. <div class="rect3"></div>
  22. <div class="rect4"></div>
  23. <div class="rect5"></div>
  24. </div>
  25. </div>
  26. {{$repository := .Repository.ID}}
  27. <!-- 提示框 -->
  28. <div class="alert"></div>
  29. <div class="repository release dataset-list view">
  30. {{template "repo/header" .}}
  31. <!-- 列表容器 -->
  32. <div class="ui container" id="loadContainer">
  33. {{template "base/alert" .}}
  34. <div class="ui two column stackable grid">
  35. <div class="column">
  36. <div class="ui blue small menu compact selectcloudbrain">
  37. <a class="item" href="{{.RepoLink}}/modelmanage/show_model">{{$.i18n.Tr "repo.model.list"}}</a>
  38. <a class="active item" href="{{.RepoLink}}/modelmanage/convert_model">{{$.i18n.Tr "repo.model.convert"}}</a>
  39. </div>
  40. </div>
  41. <div class="column right aligned">
  42. <!-- -->
  43. <a class="ui button {{if .Permission.CanWrite $.UnitTypeModelManage}} green {{else}} disabled {{end}}" onclick="showcreate(this)">{{$.i18n.Tr "repo.model.manage.create_new_convert_task"}}</a>
  44. </div>
  45. </div>
  46. {{if eq .MODEL_CONVERT_COUNT 0}}
  47. <div class="ui placeholder segment bgtask-none">
  48. <div class="ui icon header bgtask-header-pic"></div>
  49. <div class="bgtask-content-header">未创建过模型转换任务</div>
  50. <div class="bgtask-content">
  51. {{if eq .MODEL_COUNT 0}}
  52. <div class="bgtask-content-txt">请您先导入<a href="{{.RepoLink}}/modelmanage/show_model">模型</a>,然后再对其进行转换。</div>
  53. {{end}}
  54. <div class="bgtask-content-txt">使用说明:可以参考启智AI协作平台<a
  55. href="https://git.openi.org.cn/zeizei/OpenI_Learning">小白训练营课程。</a></div>
  56. </div>
  57. </div>
  58. {{else}}
  59. <!-- 中下列表展示区 -->
  60. <div class="ui grid">
  61. <div class="row" style="padding-top: 0;">
  62. <div class="ui sixteen wide column">
  63. <!-- 任务展示 -->
  64. <div class="dataset list" id="model_convert_list">
  65. <!-- 表头 -->
  66. <div class="ui grid stackable" style="background: #f0f0f0;;">
  67. <div class="row">
  68. <div class="three wide column padding0">
  69. <span style="margin:0 6px">任务名称</span>
  70. </div>
  71. <div class="two wide column text center padding0">
  72. <span>状态</span>
  73. </div>
  74. <div class="two wide column text center padding0">
  75. <span>原模型框架</span>
  76. </div>
  77. <div class="two wide column text center padding0">
  78. <span>转换后格式</span>
  79. </div>
  80. <div class="two wide column text center padding0">
  81. <span>创建时间</span>
  82. </div>
  83. <div class="one wide column text center padding0">
  84. <span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span>
  85. </div>
  86. <div class="three wide column text center padding0">
  87. <span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span>
  88. </div>
  89. </div>
  90. </div>
  91. {{range .Tasks}}
  92. <div class="ui grid stackable item">
  93. <div class="row">
  94. <div class="three wide column padding0">
  95. <a class="title" href="{{$.RepoLink}}/modelmanage/show_model_convert_info?ID={{.ID}}" title="{{.Name}}" style="font-size: 14px;">
  96. <span class="fitted" style="width: 90%;vertical-align: middle;">{{.Name}}</span>
  97. </a>
  98. </div>
  99. <div class="two wide column padding0" style="padding-left: 2.2rem !important;">
  100. <span class="job-status" id="{{.ID}}" data-repopath="{{$.RepoRelPath}}/modelmanage" data-jobid="{{.ID}}" data-version="">
  101. <span><i id="{{.ID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.ID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span>
  102. </span>
  103. </div>
  104. <div class="two wide column center padding0">
  105. <span style="font-size: 12px;">{{if eq .SrcEngine 0}}PyTorch {{else if eq .SrcEngine 1}}TensorFlow{{else if eq .SrcEngine 2}}MindSpore {{end}}</span>
  106. </div>
  107. <div class="two wide column center padding0">
  108. <span style="font-size: 12px;">{{if eq .DestFormat 0}}ONNX {{else if eq .DestFormat 1}}TensorRT {{end}}</span>
  109. </div>
  110. <div class="two wide column center padding0">
  111. <span style="font-size: 12px;" class="">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>
  112. </div>
  113. <div class="one wide column text center padding0">
  114. <a href="{{AppSubUrl}}/{{.UserName}}" title="{{.UserName}}"><img class="ui avatar image" src="{{.UserRelAvatarLink}}"></a>
  115. </div>
  116. <div class="three wide column text center padding0">
  117. <div class="ui compact buttons" >
  118. <!-- 停止任务 -->
  119. <form id="stopForm-{{.ID}}" style="margin-left:-1px;" action="{{$.RepoLink}}/modelmanage/convert_stop/{{.ID}}" method="post">
  120. {{$.CsrfTokenHtml}}
  121. {{if .IsCanDelete}}
  122. <a id="ai-stop-{{.ID}}" href="javascript:stopTask('{{.ID}}');" class='ui basic model_stop {{if eq .Status "COMPLETED" "STOPPED" "FAILED" "START_FAILED" "STOPPING" "CREATING" "STARTING" "SUCCEEDED"}}disabled {{else}}blue {{end}}button' >
  123. {{$.i18n.Tr "repo.stop"}}
  124. </a>
  125. {{else}}
  126. <a class="ui basic disabled button">{{$.i18n.Tr "repo.stop"}} </a>
  127. {{end}}
  128. </form>
  129. <!-- 删除任务 -->
  130. <form id="delForm-{{.ID}}" action="{{$.RepoLink}}/modelmanage/delete_model_convert/{{.ID}}" method="post">
  131. {{$.CsrfTokenHtml}}
  132. {{if .IsCanDelete}}
  133. <a id="ai-delete-{{.ID}}" class='ui basic ai_delete blue button' style="border-radius: .28571429rem;">
  134. {{$.i18n.Tr "repo.delete"}}
  135. </a>
  136. {{else}}
  137. <a class="ui basic disabled button">{{$.i18n.Tr "repo.delete"}} </a>
  138. {{end}}
  139. </form>
  140. {{if .IsCanOper}}
  141. <a id="ai-download-{{.ID}}" href="{{$.Repository.HTMLURL}}/modelmanage/download_model_convert/{{.ID}}?AllDownload=true&a=1" class='ui basic {{if eq .Status "SUCCEEDED" "COMPLETED"}}blue {{else}}disabled {{end}}button' style="border-radius: .28571429rem;">
  142. 下载
  143. </a>
  144. {{else}}
  145. <a class="ui basic disabled button">下载</a>
  146. {{end}}
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. {{end}}
  152. <div id="app" style="margin-top: 2rem;">
  153. <div class="center">
  154. <el-pagination
  155. background
  156. @current-change="handleCurrentChange"
  157. :current-page="page"
  158. :page-sizes="[10]"
  159. :page-size="10"
  160. layout="total, sizes, prev, pager, next, jumper"
  161. :total="{{.Page.Paginater.Total}}">
  162. </el-pagination>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. {{end}}
  170. </div>
  171. </div>
  172. </div>
  173. <!-- 确认模态框 -->
  174. <div id="deletemodel">
  175. <div class="ui basic modal first">
  176. <div class="ui icon header">
  177. <i class="trash icon"></i> 删除模型
  178. </div>
  179. <div class="content">
  180. <p>你确认删除该模型转换任务么?一旦删除不可恢复。</p>
  181. </div>
  182. <div class="actions">
  183. <div class="ui red basic inverted cancel button">
  184. <i class="remove icon"></i> {{.i18n.Tr "cloudbrain.operate_cancel"}}
  185. </div>
  186. <div class="ui green basic inverted ok button">
  187. <i class="checkmark icon"></i> {{.i18n.Tr "cloudbrain.operate_confirm"}}
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. <div id="newmodelconvert">
  193. <div class="ui modal second">
  194. <div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);">
  195. <h4 id="model_header"></h4>
  196. </div>
  197. <div class="content content-padding">
  198. <div id="formdiv" class="ui form" >
  199. <input type="hidden" name="initModel" value="{{$.MODEL_COUNT}}">
  200. <div class="ui error message">
  201. <!-- <p>asdasdasd</p> -->
  202. </div>
  203. <input type="hidden" name="_csrf" value="">
  204. <div class="unite min_title required inline fields" id="task_name">
  205. <div class="three wide field right aligned">
  206. <label for="model_convert_name">任务名称</label>
  207. </div>
  208. <div class="twelve wide field">
  209. <input id="model_convert_name" name="model_convert_name" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')">
  210. </div>
  211. </div>
  212. <div class="unite min_title inline fields required">
  213. <div class="three wide field right aligned">
  214. <label for="choice_model">模型名称</label>
  215. </div>
  216. <div class="ui dropdown selection search eight wide field loading" id="choice_model" name="choice_model">
  217. <div class="default text">选择模型</div>
  218. <i class="dropdown icon"></i>
  219. <div class="menu" id="model-name">
  220. </div>
  221. </div>
  222. </div>
  223. <div class="unite min_title inline fields required">
  224. <div class="three wide field right aligned">
  225. <label for="choice_version">模型版本</label>
  226. </div>
  227. <div class="ui dropdown selection search eight wide field" id="choice_version">
  228. <input type="hidden" id="ModelVersion" name="ModelVersion" required>
  229. <div class="default text">选择版本</div>
  230. <i class="dropdown icon"></i>
  231. <div class="menu" id="model-version">
  232. </div>
  233. </div>
  234. </div>
  235. <div class="unite min_title inline fields required">
  236. <div class="three wide field right aligned">
  237. <label for="choice_file">模型文件</label>
  238. </div>
  239. <div class="ui dropdown selection search eight wide field" id="choice_file">
  240. <input type="hidden" id="ModelFile" name="ModelFile" required>
  241. <div class="default text">选择模型文件</div>
  242. <i class="dropdown icon"></i>
  243. <div class="menu" id="model-file">
  244. </div>
  245. </div>
  246. </div>
  247. <div class="unite min_title inline fields required">
  248. <div class="three wide field right aligned">
  249. <label for="SrcEngine">原模型框架</label>
  250. </div>
  251. <select id="SrcEngine" class="ui search dropdown eight wide field" placeholder="" style='color:#000000;' name="SrcEngine" onchange="javascript:srcEngineChanged()">
  252. </select>
  253. </div>
  254. <div class="unite min_title required inline fields" id="inputdataformat_div">
  255. <div class="three wide field right aligned">
  256. <label for="inputdataformat">输入数据格式</label>
  257. </div>
  258. <select id="inputdataformat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="inputdataformat">
  259. <option name="NCHW" value="NCHW">NCHW</option>
  260. <option name="NHWC" value="NHWC">NHWC</option>
  261. </select>
  262. </div>
  263. <div class="unite min_title required inline fields" id="inputshape_div">
  264. <div class="three wide field right aligned">
  265. <label for="inputshape">输入张量形状</label>
  266. </div>
  267. <div class="eight wide field">
  268. <input id="inputshape" name="inputshape" placeholder="如:1,1,32,32,与输入数据格式对应。" required maxlength="25">
  269. </div>
  270. </div>
  271. <div class="unite min_title inline fields required">
  272. <div class="three wide field right aligned">
  273. <label for="DestFormat">转换后格式</label>
  274. </div>
  275. <select id="DestFormat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="DestFormat">
  276. </select>
  277. </div>
  278. <div class="unite min_title inline fields">
  279. <div class="three wide field right aligned">
  280. <label for="NetOutputFormat">网络输出数据类型&nbsp;&nbsp;</label>
  281. </div>
  282. <select id="NetOutputFormat" class="ui search dropdown eight wide field" placeholder="" style='width:50%' name="NetOutputFormat">
  283. </select>
  284. </div>
  285. <div class="unite min_title inline fields">
  286. <div class="three wide field right aligned">
  287. <label for="Description">任务描述&nbsp;&nbsp;</label>
  288. </div>
  289. <div class="twelve wide field">
  290. <textarea id="Description" name="Description" rows="1" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.new_place"}}' onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 256)"></textarea>
  291. </div>
  292. </div>
  293. <div class="unite min_title inline field">
  294. <button id="submitId" name="submitId" type="button" class="ui create_train_job green button" style="position: absolute;margin-left: 150px;">
  295. 新建任务
  296. </button>
  297. </div>
  298. </div>
  299. <div class="actions" style="display: inline-block;margin-left: 250px;">
  300. <button class="ui button cancel" >{{.i18n.Tr "repo.cloudbrain.cancel"}}</button>
  301. </div>
  302. </div>
  303. </div>
  304. </div>
  305. {{template "base/footer" .}}
  306. <script>
  307. let repolink = {{.RepoLink}}
  308. let repoId = {{$repository}}
  309. const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config;
  310. $('input[name="_csrf"]').val(csrf)
  311. var modelData;
  312. function inputshapeNotValid(value){
  313. if(value == null || value ==""){
  314. return true;
  315. }
  316. var tmps = value.split(",");
  317. if(tmps.length ==4){
  318. return false;
  319. }else{
  320. return true;
  321. }
  322. }
  323. $('#submitId').click(function(){
  324. let data={};
  325. data['_csrf']=csrf
  326. data['name']= $('#model_convert_name').val()
  327. if(data['name']==""){
  328. $('.ui.error.message').text("请输入任务名称。")
  329. $('.ui.error.message').css('display','block')
  330. $("#task_name").addClass("error")
  331. return false
  332. }else{
  333. $("#task_name").removeClass("error")
  334. }
  335. data['desc']= $('#Description').val()
  336. data['modelId'] = $('#ModelVersion').val()
  337. data['SrcEngine'] = $('#SrcEngine').val();
  338. data['inputshape']= $('#inputshape').val();
  339. if(inputshapeNotValid(data['inputshape'])){
  340. $('.ui.error.message').text("格式输入错误,请输入如:1,1,32,32,与输入数据格式对应。")
  341. $('.ui.error.message').css('display','block')
  342. $("#inputshape_div").addClass("error")
  343. return false
  344. }else{
  345. $("#inputshape_div").removeClass("error")
  346. }
  347. data['inputdataformat']= $('#inputdataformat').val();
  348. data['DestFormat'] = $('#DestFormat').val();
  349. data['NetOutputFormat']= $('#NetOutputFormat').val();
  350. data['ModelFile'] = $('#ModelFile').val();
  351. $.post(`${repolink}/modelmanage/create_model_convert`,data,(result) => {
  352. console.log("result=" + result);
  353. if(result.result_code ==0){
  354. $('.ui.modal.second').modal('hide');
  355. window.location.reload();
  356. }else{
  357. $('.ui.error.message').text(result.message)
  358. $('.ui.error.message').css('display','block')
  359. }
  360. })
  361. })
  362. function stopTask(id){
  363. console.log("stop form stopForm-" + id);
  364. document.getElementById("stopForm-" + id).submit();
  365. }
  366. function createModelName(){
  367. let repoName = location.pathname.split('/')[2]
  368. let modelName = repoName + '_modelConvert_' + Math.random().toString(36).substr(2, 4)
  369. $('#model_convert_name').val(modelName)
  370. }
  371. function showcreate(obj){
  372. $('.ui.modal.second')
  373. .modal({
  374. centered: false,
  375. onShow:function(){
  376. $('#model_header').text("创建模型转换任务")
  377. $('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"})
  378. createModelName()
  379. loadModelList()
  380. },
  381. onHide:function(){
  382. //document.getElementById("formId").reset();
  383. $('#model_convert_name').val("")
  384. $('#choice_model').dropdown('clear')
  385. $('#choice_version').dropdown('clear')
  386. $('#choice_file').dropdown('clear')
  387. console.log("div hidde ....");
  388. $('.ui.dimmer').css({"background-color":""})
  389. $('.ui.error.message').text()
  390. $('.ui.error.message').css('display','none')
  391. $("#task_name").removeClass("error")
  392. $("#inputshape_div").removeClass("error")
  393. }
  394. })
  395. .modal('show')
  396. }
  397. $(function(){
  398. $('#choice_model').dropdown({
  399. onChange:function(value){
  400. $("#choice_model").addClass("loading")
  401. $('#choice_version').dropdown('clear')
  402. $('#choice_file').dropdown('clear')
  403. $("#model-version").empty()
  404. $("#model-file").empty()
  405. loadModelVersion(value)
  406. $("#choice_model").removeClass("loading")
  407. }
  408. })
  409. $('#choice_version').dropdown({
  410. onChange:function(value){
  411. console.log("model version:" + value);
  412. $('#choice_version input[name="ModelVersion"]').val(value)
  413. loadModelFile(value);
  414. }
  415. })
  416. $('#choice_file').dropdown({
  417. onChange:function(value){
  418. console.log("model file:" + value);
  419. $('#choice_file input[name="ModelFile"]').val(value)
  420. }
  421. })
  422. })
  423. function srcEngineChanged(){
  424. var ele = window.document.getElementById("SrcEngine");
  425. var index=ele.selectedIndex;
  426. var options=ele.options;
  427. var option = options[index];
  428. console.log("SrcEngine value=" + option);
  429. let destFormatHtml = "<option name=\"ONNX\" value=\"0\">ONNX</option>";
  430. let netOutputFormatHtml = "<option name=\"FP32\" value=\"0\">FP32</option>";
  431. if(option==null || option =="undefined" || option.value == 0){
  432. destFormatHtml += "<option name=\"TensorRT\" value=\"1\">TensorRT</option>"
  433. netOutputFormatHtml += "<option name=\"FP16\" value=\"1\">FP16</option>";
  434. }
  435. $('#DestFormat').html(destFormatHtml);
  436. $('#NetOutputFormat').html(netOutputFormatHtml);
  437. }
  438. function loadModelList(){
  439. $.get(`${repolink}/modelmanage/query_model_for_predict?repoId=${repoId}`, (data) => {
  440. modelData = data
  441. let nameList = data.nameList
  442. const n_length = nameList.length
  443. let train_html=''
  444. for (let i=0;i<n_length;i++){
  445. train_html += `<div class="item" data-value="${nameList[i]}">${nameList[i]}</div>`
  446. train_html += '</div>'
  447. }
  448. $("#model-name").append(train_html)
  449. $("#choice_model").removeClass("loading")
  450. $('#choice_model .default.text').text(nameList[0])
  451. loadModelVersion(nameList[0])
  452. })
  453. }
  454. function loadModelFile(modelId){
  455. console.log("modelId=" + modelId);
  456. $('#choice_file').dropdown('clear')
  457. $("#model-file").empty()
  458. if(modelId ==null || modelId ==""){
  459. console.log("modelId is null");
  460. }else{
  461. $.get(`${repolink}/modelmanage/query_modelfile_for_predict?ID=${modelId}`, (data) => {
  462. const n_length = data.length
  463. let file_html=''
  464. let firstFileName =''
  465. for (let i=0;i<n_length;i++){
  466. if(isModel(data[i].FileName)){
  467. if(firstFileName ==''){
  468. firstFileName = data[i].FileName;
  469. }
  470. file_html += `<div class="item" data-value="${data[i].FileName}">${data[i].FileName}</div>`
  471. file_html += '</div>'
  472. }else{
  473. console.log("not model. filename=" + data[i].FileName);
  474. }
  475. }
  476. $("#model-file").append(file_html)
  477. $('#choice_file .default.text').text(firstFileName)
  478. $('#choice_file input[name="ModelFile"]').val(firstFileName)
  479. })
  480. }
  481. }
  482. function isModel(filename){
  483. var postfix=[".pth",".pkl",".onnx",".mindir",".ckpt",".pb"];
  484. for(var i =0; i<postfix.length;i++){
  485. if(filename.substring(filename.length-postfix[i].length)==postfix[i]){
  486. return true;
  487. }
  488. }
  489. return false;
  490. }
  491. function loadModelVersion(value){
  492. console.log("value=" + value);
  493. if(value ==null || value ==""){
  494. }else{
  495. let nameMap = modelData.nameMap
  496. let versionList = nameMap[value]
  497. n_length = versionList.length
  498. let train_html=''
  499. for (let i=0;i<n_length;i++){
  500. train_html += `<div class="item" data-value="${versionList[i].ID}">${versionList[i].Version}</div>`
  501. train_html += '</div>'
  502. }
  503. $("#model-version").append(train_html)
  504. $('#choice_version .default.text').text(versionList[0].Version)
  505. $('#choice_version input[name="ModelVersion"]').val(versionList[0].ID)
  506. loadModelFile(versionList[0].ID);
  507. }
  508. setEngineValue(value);
  509. }
  510. function setEngineValue(value){
  511. $('#SrcEngine').dropdown('clear');
  512. console.log("setEngineValue value=" + value);
  513. let html = ""
  514. html +="<option name=\"PyTorch\" " + getSelected(0,value) + " value=\"0\">PyTorch</option>";
  515. html +="<option name=\"TensorFlow\" " + getSelected(1,value) + " value=\"1\">TensorFlow</option>";
  516. html +="<option name=\"MindSpore\" " + getSelected(2,value) + " value=\"2\">MindSpore</option>";
  517. $('#SrcEngine').html(html);
  518. srcEngineChanged();
  519. }
  520. function getSelected(engineOption, modelName){
  521. if(modelName ==null || modelName ==""){
  522. return "";
  523. }
  524. let nameMap = modelData.nameMap
  525. let versionList = nameMap[modelName]
  526. if(versionList != null && versionList.length >0){
  527. if(versionList[0].Engine == engineOption){
  528. return "selected=\"selected\"";
  529. }else{
  530. if(versionList[0].Engine==122 && engineOption==2){
  531. return "selected=\"selected\"";
  532. }
  533. if(versionList[0].Engine==121 && engineOption==1){
  534. return "selected=\"selected\"";
  535. }
  536. }
  537. }
  538. return "";
  539. }
  540. </script>