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.

index.tmpl 18 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <!-- 头部导航栏 -->
  2. {{template "base/head" .}}
  3. <style>
  4. .width70{
  5. width: 70% !important;
  6. }
  7. .width83{
  8. width: 83% !important;
  9. }
  10. .content-padding{
  11. padding: 40px !important;
  12. }
  13. </style>
  14. <!-- 弹窗 -->
  15. <div id="mask">
  16. <div id="loadingPage">
  17. <div class="rect1"></div>
  18. <div class="rect2"></div>
  19. <div class="rect3"></div>
  20. <div class="rect4"></div>
  21. <div class="rect5"></div>
  22. </div>
  23. </div>
  24. {{$repository := .Repository.ID}}
  25. <!-- 提示框 -->
  26. <div class="alert"></div>
  27. <div class="repository release dataset-list view">
  28. {{template "repo/header" .}}
  29. <!-- 列表容器 -->
  30. <div class="ui container">
  31. {{template "base/alert" .}}
  32. <div class="ui two column stackable grid ">
  33. <div class="column"></div>
  34. <div class="column right aligned">
  35. {{if .Permission.CanWrite $.UnitTypeCloudBrain}}
  36. <a class="ui green button" onclick="showcreate(this)">{{$.i18n.Tr "repo.modelarts.train_job.new_train"}}</a>{{end}}
  37. </div>
  38. </div>
  39. <!-- 中下列表展示区 -->
  40. <div class="ui grid">
  41. <div class="row">
  42. <div class="ui sixteen wide column">
  43. <!-- 任务展示 -->
  44. <div class="dataset list" id="model_list">
  45. <!-- 表头 -->
  46. <!-- <div class="ui grid stackable" style="background: #f0f0f0;;">
  47. <div class="row">
  48. <div class="three wide column padding0">
  49. <span style="margin:0 6px">{{$.i18n.Tr "repo.modelarts.model_name"}}</span>
  50. </div>
  51. <div class="one wide column text center padding0">
  52. <span style="margin:0 6px">{{$.i18n.Tr "repo.modelarts.version"}}</span>
  53. </div>
  54. <div class="one wide column text center padding0" style="width: 7.25%!important;">
  55. <span style="margin:0 6px">{{$.i18n.Tr "repo.modelarts.version_nums"}}</span>
  56. </div>
  57. <div class="two wide column text center padding0" style="width: 11.5%!important;">
  58. <span>{{$.i18n.Tr "repo.modelarts.model_size"}}</span>
  59. </div>
  60. <div class="two wide column text center padding0" style="width: 8.5%!important;">
  61. <span>{{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}}</span>
  62. </div>
  63. <div class="two wide column text center padding0" style="width: 11.5%!important;">
  64. <span>{{$.i18n.Tr "repo.modelarts.computing_resources"}}</span>
  65. </div>
  66. <div class="two wide column text center padding0">
  67. <span>{{$.i18n.Tr "repo.modelarts.createtime"}}</span>
  68. </div>
  69. <div class="one wide column text center padding0">
  70. <span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span>
  71. </div>
  72. <div class="two wide column text center padding0" style="width: 17.5%!important;">
  73. <span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span>
  74. </div>
  75. </div>
  76. </div> -->
  77. <!-- <div class="ui grid stackable item">
  78. <div class="row">
  79. <div class="three wide column padding0">
  80. <a class="title" href="{{$.Link}}/{{.JobID}}" title="{{.JobName}}" style="font-size: 12px;">
  81. <span class="fitted" style="vertical-align: middle;">{{svg "octicon-tasklist" 16}}</span>
  82. <span class="fitted" style="width: 90%;vertical-align: middle;margin-left: 0.4rem;">Model-abcd</span>
  83. </a>
  84. </div>
  85. <div class="one wide column text center padding0">
  86. <span>0.0.3</span>
  87. </div>
  88. <div class="one wide column text center padding0" style="width: 7.25%!important;">
  89. <span>20</span>
  90. </div>
  91. <div class="two wide column padding0 text center" style="width: 11.5%!important;">
  92. <span>20.28MB</span>
  93. </div>
  94. <div class="two wide column padding0 text center" style="width: 8.5%!important;">
  95. <span>Mindspore</span>
  96. </div>
  97. <div class="two wide column text center padding0" style="width: 11.5%!important;">
  98. <span style="font-size: 12px;">CPU</span>
  99. </div>
  100. <div class="two wide column text center padding0">
  101. <span style="font-size: 12px;">2021/09/20 12:06:13</span>
  102. </div>
  103. <div class="one wide column text center padding0">
  104. {{if .User.Name}}
  105. <a href="{{AppSubUrl}}/{{.User.Name}}" title="{{.User.Name}}"><img class="ui avatar image" src="{{.User.RelAvatarLink}}"></a>
  106. {{else}}
  107. <a title="Ghost"><img class="ui avatar image" src="{{AppSubUrl}}/user/avatar/Ghost/-1"></a>
  108. {{end}}
  109. </div>
  110. <div class="two wide column text center padding0" style="width: 17.5%!important;">
  111. <div style="display: flex;justify-content: space-between;">
  112. <a>创建新版本</a>
  113. <a>下载</a>
  114. <a onclick="assertDelete(this)">删除</a>
  115. </div>
  116. </div>
  117. </div>
  118. </div> -->
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. </div>
  125. <!-- div full height-->
  126. </div>
  127. <!-- 确认模态框 -->
  128. <div id="deletemodel">
  129. <div class="ui basic modal first">
  130. <div class="ui icon header">
  131. <i class="trash icon"></i> 删除任务
  132. </div>
  133. <div class="content">
  134. <p>你确认删除该任务么?此任务一旦删除不可恢复。</p>
  135. </div>
  136. <div class="actions">
  137. <div class="ui red basic inverted cancel button">
  138. <i class="remove icon"></i> 取消操作
  139. </div>
  140. <div class="ui green basic inverted ok button">
  141. <i class="checkmark icon"></i> 确定操作
  142. </div>
  143. </div>
  144. </div>
  145. </div>
  146. <div id="newmodel">
  147. <div class="ui modal second">
  148. <div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);">
  149. <h4>导入新模型</h4>
  150. </div>
  151. <div class="content content-padding">
  152. <form id="formId" method="POST" class="ui form">
  153. <div class="ui error message">
  154. <p></p>
  155. </div>
  156. <input type="hidden" name="_csrf" value="">
  157. <div class="two inline fields ">
  158. <div class="required ten wide field">
  159. <label style="margin-left: -23px;">选择训练任务</label>
  160. <!-- <select class="ui dropdown search width83" name="model_name">
  161. <option name="model_name" value="1">1</option>
  162. <option name="model_version" value="11">11</option>
  163. </select> -->
  164. <div class="ui dropdown selection search width83 loading" id="choice_model">
  165. <input type="hidden" id="JobId" name="JobId" required>
  166. <div class="default text">选择训练任务</div>
  167. <i class="dropdown icon"></i>
  168. <div class="menu" id="job-name">
  169. <!-- <div class="item" data-value="">Male</div>
  170. <div class="item" data-value="female">Female</div> -->
  171. </div>
  172. </div>
  173. </div>
  174. <div class="required six widde field">
  175. <label>版本</label>
  176. <div class="ui dropdown selection search width70" id="choice_version">
  177. <input type="hidden" id="VersionName" name="VersionName" required>
  178. <div class="default text">选择版本</div>
  179. <i class="dropdown icon"></i>
  180. <div class="menu" id="job-version">
  181. </div>
  182. </div>
  183. <!-- <select class="ui dropdown search width70" name="model_version">
  184. <option name="model_version" value="1">1</option>
  185. <option name="model_version" value="11">11</option>
  186. </select> -->
  187. </div>
  188. </div>
  189. <div class="required inline field" id="modelname">
  190. <label>模型名称</label>
  191. <input style="width: 45%;" id="name" name="Name" required maxlength="255">
  192. </div>
  193. <div class="required inline field" id="verionname">
  194. <label>模型版本</label>
  195. <input style="width: 45%;" id="version" name="Version" value="" readonly required maxlength="255">
  196. </div>
  197. <div class="inline field">
  198. <label>模型标签</label>
  199. <input style="width: 83%;margin-left: 7px;" name="Label" maxlength="255">
  200. </div>
  201. <div class="inline field">
  202. <label for="description">模型描述</label>
  203. <textarea style="width: 83%;margin-left: 7px;" id="Description" name="description" rows="3" 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>
  204. </div>
  205. <div class="inline field" style="margin-left: 75px;">
  206. <button id="submitId" type="button" class="ui create_train_job green button" style="position: absolute;">
  207. {{.i18n.Tr "repo.cloudbrain.new"}}
  208. </button>
  209. </div>
  210. </form>
  211. <div class="actions" style="display: inline-block;margin-left: 180px;">
  212. <button class="ui button cancel" >{{.i18n.Tr "repo.cloudbrain.cancel"}}</button>
  213. </div>
  214. </div>
  215. </div>
  216. {{template "base/footer" .}}
  217. <script>
  218. let repolink = {{.RepoLink}}
  219. let repoId = {{$repository}}
  220. let url_href = window.location.pathname.split('show_model')[0] + 'create_model'
  221. const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config;
  222. $('input[name="_csrf"]').val(csrf)
  223. function createModelName(){
  224. let repoName = location.pathname.split('/')[2]
  225. let modelName = repoName + '_model_' + Math.random().toString(36).substr(2, 4)
  226. console.log("repoName",modelName)
  227. $('#name').val(modelName)
  228. $('#version').val("0.0.1")
  229. }
  230. function showcreate(obj){
  231. $('.ui.modal.second')
  232. .modal({
  233. centered: false,
  234. onShow:function(){
  235. $('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"})
  236. $("#job-name").empty()
  237. createModelName()
  238. loadTrainList()
  239. },
  240. onHide:function(){
  241. document.getElementById("formId").reset();
  242. $('#choice_model').dropdown('clear')
  243. $('#choice_version').dropdown('clear')
  244. $('.ui.dimmer').css({"background-color":""})
  245. }
  246. })
  247. .modal('show')
  248. }
  249. // 删除时用户确认
  250. function assertDelete(obj) {
  251. if (obj.style.color == "rgb(204, 204, 204)") {
  252. return
  253. } else {
  254. var delId = obj.parentNode.id
  255. flag = 1;
  256. $('.ui.basic.modal.first')
  257. .modal({
  258. onDeny: function() {
  259. flag = false
  260. },
  261. onApprove: function() {
  262. document.getElementById(delId).submit()
  263. flag = true
  264. },
  265. onHidden: function() {
  266. if (flag == false) {
  267. $('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
  268. }
  269. }
  270. })
  271. .modal('show')
  272. }
  273. }
  274. $(function(){
  275. $('#choice_model').dropdown({
  276. onChange:function(value){
  277. $(".ui.dropdown.selection.search.width70").addClass("loading")
  278. $("#job-version").empty()
  279. loadTrainVersion(value)
  280. }
  281. })
  282. })
  283. function versionAdd(version){
  284. let versionArray = version.split('.')
  285. if(versionArray[2]=='9'){
  286. if(versionArray[1]=='9'){
  287. versionArray[0] = String(Number(versionArray[1])+1)
  288. versionArray[1] = '0'
  289. }else{
  290. versionArray[1]=String(Number(versionArray[1])+1)
  291. }
  292. }else{
  293. versionArray[2]=String(Number(versionArray[2])+1)
  294. }
  295. console.log(versionArray.join('.'))
  296. return versionArray.join('.')
  297. }
  298. function loadTrainList(){
  299. $.get(`${repolink}/modelmanage/query_train_job?repoId=${repoId}`, (data) => {
  300. const n_length = data.length
  301. let train_html=''
  302. for (let i=0;i<n_length;i++){
  303. train_html += `<div class="item" data-value="${data[i].JobID}">${data[i].JobName}</div>`
  304. train_html += '</div>'
  305. }
  306. $("#job-name").append(train_html)
  307. $(".ui.dropdown.selection.search.width83").removeClass("loading")
  308. })
  309. }
  310. function loadTrainVersion(value){
  311. $.get(`${repolink}/modelmanage/query_train_job_version?JobID=${value}`, (data) => {
  312. const n_length = data.length
  313. let train_html=''
  314. for (let i=0;i<n_length;i++){
  315. train_html += `<div class="item" data-value="${data[i].VersionName}">${data[i].VersionName}</div>`
  316. train_html += '</div>'
  317. }
  318. $("#job-version").append(train_html)
  319. $(".ui.dropdown.selection.search.width70").removeClass("loading")
  320. })
  321. }
  322. function check(){
  323. let jobid = document.getElementById("JobId").value
  324. let versionname = document.getElementById("VersionName").value
  325. let name= document.getElementById("name").value
  326. let version= document.getElementById("version").value
  327. if(jobid==""){
  328. $(".required.ten.wide.field").addClass("error")
  329. return false
  330. }else{
  331. $(".required.ten.wide.field").removeClass("error")
  332. }
  333. if(versionname==""){
  334. $(".required.six.widde.field").addClass("error")
  335. return false
  336. }else{
  337. $(".required.six.widde.field").removeClass("error")
  338. }
  339. if(name==""){
  340. $("#modelname").addClass("error")
  341. return false
  342. }else{
  343. $("#modelname").removeClass("error")
  344. }
  345. if(versionname==""){
  346. $("#verionname").addClass("error")
  347. return false
  348. }else{
  349. $("#verionname").removeClass("error")
  350. }
  351. return true
  352. }
  353. $('#submitId').click(function(){
  354. let flag=check()
  355. if(flag){
  356. let data = $("#formId").serialize()
  357. $("#mask").css({"display":"block","z-index":"9999"})
  358. $.ajax({
  359. url:url_href,
  360. type:'POST',
  361. data:data,
  362. success:function(res){
  363. $('.ui.modal.second').modal('hide')
  364. window.location.href=location.href
  365. },
  366. error: function (xhr) {
  367. // 隐藏 loading
  368. // 只有请求不正常(状态码不为200)才会执行
  369. $('.ui.error.message').text(xhr.responseText)
  370. },
  371. complete:function(xhr){
  372. $("#mask").css({"display":"none","z-index":"1"})
  373. }
  374. })
  375. }else{
  376. return false
  377. }
  378. })
  379. </script>