index.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. <template>
  2. <div style="width: 100%;background-color: #F7F7F7;padding-top: 1%;" :style="{'height':heightAll+'px'}">
  3. <div style="display: flex;width: 100%;margin-left: 1%;">
  4. <div style="display: flex;width: 20%;align-items: center;">
  5. <div>
  6. 组件名称:
  7. </div>
  8. <el-input v-model="input" style="width:50%;margin-left: 1%;" placeholder="" />
  9. </div>
  10. <div style="display: flex;width: 20%;align-items: center;margin-left: -5%;">
  11. <div>
  12. 组件分类:
  13. </div>
  14. <el-select
  15. v-model="value"
  16. style="width: 50%;margin-left: 1%;"
  17. >
  18. <el-option
  19. v-for="item in options"
  20. :key="item.value"
  21. :label="item.label"
  22. :value="item.value"
  23. />
  24. </el-select>
  25. </div>
  26. <div style="display: flex;width: 20%;align-items: center;margin-left: -5%;">
  27. <div>
  28. 提供单位:
  29. </div>
  30. <el-input v-model="input" style="width: 50%;margin-left: 1%;" placeholder="" />
  31. </div>
  32. <div style="display: flex;width: 20%;align-items: center;margin-left: -5%;">
  33. <div>
  34. 注册时间:
  35. </div>
  36. <el-date-picker
  37. v-model="value1"
  38. style="width: 50%;margin-left: 1%;"
  39. type="daterange"
  40. range-separator="To"
  41. start-placeholder="Start date"
  42. end-placeholder="End date"
  43. />
  44. </div>
  45. <div style="display: flex;width: 20%;align-items: center;margin-left: 20%;">
  46. <el-button type="primary" style="margin-left: 5%;" @click="getModelListTable" :icon="Search">查询</el-button>
  47. <el-button type="primary" style="margin-left: 5%;" icon="Refresh">重置</el-button>
  48. <el-button type="primary" style="margin-left:5%;" @click="reg" icon="Plus">注册</el-button>
  49. <!-- <el-button type="" style="margin-left:5%;" plain icon="Plus">切换展示模式</el-button> -->
  50. </div>
  51. </div>
  52. <div style="display: flex;align-items: center;background-color:#EFFAFF ;margin-top: 1%;width: 98%;margin-left: 1%;line-height: 1.5" :style="{'height':heightAll * 0.03+'px'}">
  53. <div style="margin-left: 0.5%;">
  54. 已选择
  55. </div>
  56. <div style="margin-left: 0.5%;">
  57. 0
  58. </div>
  59. <div style="margin-left: 0.5%;">
  60. </div>
  61. <el-button type="text" style="margin-left:1%;">清空</el-button>
  62. </div>
  63. <div style="margin-top: 0%;margin-left: 0%;width: 100%;">
  64. <el-table
  65. :data="tableData"
  66. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  67. :cell-style="{ textAlign: 'center', }"
  68. :header-cell-style="{ textAlign: 'center'}"
  69. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  70. border
  71. :height="tableheight">
  72. <el-table-column type="selection" width="55"></el-table-column>
  73. <el-table-column type="index" label="序号" width="80"></el-table-column>
  74. <el-table-column prop="name" label="组件名称">
  75. </el-table-column>
  76. <el-table-column prop="className" label="组件分类" width="160"/>
  77. <el-table-column prop="mdUnit" label="提供单位" width="160"/>
  78. <el-table-column prop="registrant" label="注册人员" width="100"/>
  79. <el-table-column prop="status" label="测试状态" width="140">
  80. <template #default="scope">
  81. <el-button v-if="scope.row.st1=='1'" type="success" plain>测试完成</el-button>
  82. <el-button v-if="scope.row.st1=='2'" type="danger" plain>测试失败</el-button>
  83. <el-button v-if="scope.row.st1=='3'" type="" plain>不支持</el-button>
  84. </template>
  85. </el-table-column>
  86. <el-table-column prop="st1" label="评价结果" width="140">
  87. <template #default="scope">
  88. <el-button v-if="scope.row.st2=='1'" type="success" plain>测试完成</el-button>
  89. <el-button v-if="scope.row.st2=='2'" type="danger" plain>测试失败</el-button>
  90. <el-button v-if="scope.row.st2=='3'" type="" plain>暂无评价</el-button>
  91. </template>
  92. </el-table-column>
  93. <el-table-column prop="isApproved" label="是否发布" width="140">
  94. <template #default="scope">
  95. <el-button v-if="scope.row.st3=='1'" type="success" plain>已发布</el-button>
  96. <el-button v-if="scope.row.st3=='2'" type="danger" plain>未发布</el-button>
  97. </template>
  98. </el-table-column>
  99. <el-table-column prop="modifyBy" label="发布时间" width="170"/>
  100. <el-table-column prop="version" label="版本" width="120"/>
  101. <el-table-column prop="address" label="操作" width="300">
  102. <template #default="scope">
  103. <div style="display: flex;justify-content: space-between;width: 80%;">
  104. <el-button type="primary" size="mini" text style="margin-left: -2%;">发布</el-button>
  105. <el-button type="primary" text size="mini" style="margin-left: -5%;">测试</el-button>
  106. <el-button type="primary" @click="showEdit(scope.row)" size="mini" text style="margin-left: -5%;">编辑</el-button>
  107. <!-- <el-button type="danger" text size="mini" style="margin-left: -5%;" @click="handleDelete(scope.row)">注销</el-button> -->
  108. <el-button @click="showDe(scope.row)" type="primary" text size="mini" style="margin-left: -5%;">查看</el-button>
  109. <el-button type="primary" text size="mini" style="margin-left: -5%;">API管理</el-button>
  110. </div>
  111. </template>
  112. </el-table-column>
  113. </el-table>
  114. <div style="float: right;margin-top: 1%;margin-right: 1%;">
  115. <el-pagination
  116. small
  117. v-model='currentPage'
  118. @current-change="changePage"
  119. background
  120. layout="prev, pager, next"
  121. :total="totalComReg"
  122. class="mt-4"
  123. />
  124. </div>
  125. <el-dialog v-model="dialogVisible" title="组件注册" width="50%" @close="clearForm" destroy-on-close :key="tableKey">
  126. <el-steps :active="active" finish-status="success" simple style="margin-top: 20px">
  127. <el-step title="第一步"></el-step>
  128. <el-step title="第二步"></el-step>
  129. <el-step title="第三步"></el-step>
  130. </el-steps>
  131. <div v-show="active==0">
  132. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  133. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  134. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">基本信息</div>
  135. </div>
  136. <div style="margin-left: 1%;margin-top: 1%;">
  137. <el-form :key="tableKey" style="margin-left: 5%;" :model="formJi" label-position="left" ref="formRefJi" class="demo-form-inline" :rules="rulesJi">
  138. <el-row :gutter="40">
  139. <el-col :span="9">
  140. <el-form-item label="组件名称:" prop="name" style="margin-left: -3%;">
  141. <el-input v-model="formJi.name" :disabled="isEdit"/>
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="9">
  145. <el-form-item label="版本号:" prop="version" style="margin-left: -3%;">
  146. <el-input v-model="formJi.version" :disabled="isEdit"/>
  147. </el-form-item>
  148. </el-col>
  149. </el-row>
  150. <el-row :gutter="40" style="margin-top: 1%;">
  151. <el-col :span="9" >
  152. <el-form-item label="组件英文名称:" prop="enname" style="margin-left: -3%;">
  153. <el-input v-model="formJi.enname" :disabled="isEdit"/>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="9">
  157. <el-form-item label="排序:" prop="">
  158. <el-input v-model="formJi.region" :disabled="isEdit"/>
  159. </el-form-item>
  160. </el-col>
  161. </el-row>
  162. <el-row :gutter="40" style="margin-top: 1%;">
  163. <el-col :span="9" >
  164. <el-form-item label="模型分类:" prop="type">
  165. <el-select
  166. v-model="formJi.type"
  167. :disabled="isEdit"
  168. style="width: 100%;margin-left: 1%;"
  169. >
  170. <el-option
  171. v-for="item in optionsType"
  172. :key="item.value"
  173. :label="item.label"
  174. :value="item.value"
  175. />
  176. </el-select>
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="9">
  180. <el-form-item label="开发语言:">
  181. <el-radio-group v-model="formJi.devlang" class="ml-4" size="small" style="margin-top: -10%;" :disabled="isEdit">
  182. <el-radio label="C++" size="large">C++</el-radio>
  183. <el-radio label=".net" size="large">.net</el-radio>
  184. <el-radio label="java" size="large">java</el-radio>
  185. <el-radio label="Python" size="large">Python</el-radio>
  186. <el-radio label="其他" size="large">其他</el-radio>
  187. </el-radio-group>
  188. </el-form-item>
  189. </el-col>
  190. </el-row>
  191. <el-form-item label="组件简介:">
  192. <el-input v-model="formJi.intro" style="width: 30%;" :disabled="isEdit" :rows="2" resize="none" type="textarea"/>
  193. </el-form-item>
  194. </el-form>
  195. </div>
  196. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  197. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  198. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">提供单位信息</div>
  199. </div>
  200. <div style="margin-left: 1%;margin-top: 1%;">
  201. <el-form style="margin-left: 5%;margin-top: 2%;" :disabled="isEdit" :model="formTi" ref="formRefTi" class="demo-form-inline" :rules="rulesTi">
  202. <el-row :gutter="40">
  203. <el-col :span="12">
  204. <el-form-item label="提供单位:" prop="mdUnit">
  205. <el-input v-model="formTi.mdUnit" style="width: 65%;margin-left: 1%;" placeholder="" />
  206. <!-- <el-button type="primary" style="margin-left: 1%;">选择</el-button>
  207. <el-button type="" style="margin-left:1%;">清空</el-button> -->
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="12">
  211. <el-form-item label="技术支撑单位:" prop="developer">
  212. <el-input v-model="formTi.developer" style="width: 65%;" />
  213. <!-- <el-button type="" style="margin-left:1%;">清空</el-button> -->
  214. </el-form-item>
  215. </el-col>
  216. </el-row>
  217. <el-row :gutter="40" style="margin-top: 1%;">
  218. <el-col :span="9" >
  219. <el-form-item label="联系方式:" prop="mdContact">
  220. <el-input v-model="formTi.mdContact" />
  221. </el-form-item>
  222. </el-col>
  223. </el-row>
  224. </el-form>
  225. </div>
  226. </div>
  227. <div v-show="active==1">
  228. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  229. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  230. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">模型组件上传</div>
  231. </div>
  232. <div style="margin-left: 1%;margin-top: 1%;">
  233. <el-form :disabled="isEdit" style="margin-left: 5%;margin-top: 2%;" :model="formZu" class="demo-form-inline" ref="formRefZu" :rules="rulesZu">
  234. <el-form-item label="组件执行路径:" prop="mirrorImageEurl" style="margin-left: -1%;">
  235. <el-input v-model="formZu.mirrorImageEurl" style="width: 75%;" placeholder="请输入组件执行路径" :rows="2" type="textarea" resize="none"/>
  236. </el-form-item>
  237. <el-form-item label="组件说明文档:" prop="">
  238. <div style="width: 60%;">
  239. <el-upload
  240. ref="uploadRef"
  241. :limit="1"
  242. accept=".xlsx, .xls"
  243. :headers="upload.headers"
  244. :action="upload.url + '?file=' + upload.updateSupport"
  245. :on-progress="handleFileUploadProgress"
  246. :on-success="handleFileSuccess"
  247. :auto-upload="false"
  248. drag
  249. >
  250. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  251. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  252. </el-upload>
  253. </div>
  254. <div style="color: #b1b3b8;width: 100%;">
  255. 注:请上传后缀名为.docx .pdf .txt的文件
  256. </div>
  257. </el-form-item>
  258. </el-form>
  259. </div>
  260. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  261. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  262. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">资源需求</div>
  263. </div>
  264. <div style="margin-left: 1%;margin-top: 1%;">
  265. <el-form :disabled="isEdit" style="margin-left: 5%;margin-top: 2%;" :model="formZu" class="demo-form-inline" ref="formRefZu" :rules="rulesZu">
  266. <el-row :gutter="40">
  267. <el-col :span="12">
  268. <el-form-item label="CPU核心数:" prop="mdCPU" style="margin-left: -2%;">
  269. <el-input v-model="formZu.mdCPU" style="width: 50%;" placeholder=""/>
  270. <div style="margin-left: 2%;">
  271. </div>
  272. </el-form-item>
  273. </el-col>
  274. <el-col :span="12">
  275. <el-form-item label="内存:" prop="nei">
  276. <el-input v-model="formZu.nei" style="width: 50%;" placeholder=""/>
  277. <div style="margin-left: 2%;">
  278. M
  279. </div>
  280. </el-form-item>
  281. </el-col>
  282. </el-row>
  283. <el-row :gutter="40">
  284. <el-col :span="12">
  285. <el-form-item label="是否需要GPU:">
  286. <el-switch v-model="formZu.mdGPU" />
  287. </el-form-item>
  288. </el-col>
  289. <el-col :span="12">
  290. <el-form-item label="平台:" prop="ping">
  291. <el-select
  292. v-model="formZu.ping"
  293. style="width: 50%;"
  294. >
  295. <el-option
  296. v-for="item in options"
  297. :key="item.value"
  298. :label="item.label"
  299. :value="item.value"
  300. />
  301. </el-select>
  302. </el-form-item>
  303. </el-col>
  304. </el-row>
  305. </el-form>
  306. </div>
  307. <!-- <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  308. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  309. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">运行命令</div>
  310. </div>
  311. <div style="margin-left: 1%;margin-top: 1%;">
  312. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  313. <el-form-item label="运行命令:" prop="name">
  314. <el-input v-model="form.region" style="width: 75%;" placeholder="请输入示例" :rows="2" type="textarea"/>
  315. </el-form-item>
  316. </el-form>
  317. </div> -->
  318. </div>
  319. <div v-show="active==2">
  320. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  321. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  322. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输入参数</div>
  323. <div style="margin-left: auto">
  324. <el-button type="primary">添加</el-button>
  325. </div>
  326. </div>
  327. <el-table
  328. :data="tableData1"
  329. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  330. :cell-style="{ textAlign: 'center', }"
  331. :header-cell-style="{ textAlign: 'center'}"
  332. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  333. border
  334. :max-height="tableheight">
  335. <el-table-column type="index" label="序号"></el-table-column>
  336. <el-table-column prop="date1" label="参数名称"></el-table-column>
  337. <el-table-column prop="date2" label="英文名称"></el-table-column>
  338. <el-table-column prop="date3" label="类型"></el-table-column>
  339. <el-table-column prop="date4" label="内容" width="120">
  340. <template #default="scope">
  341. <div style="display: flex; align-items: center; height: 100%;">
  342. {{scope.row.date4}}<el-button @click="" type="text" style="margin-left: 1%;">查看</el-button>
  343. </div>
  344. </template>
  345. </el-table-column>
  346. <el-table-column prop="date5" label="必填"></el-table-column>
  347. <el-table-column prop="date6" label="率定参数"></el-table-column>
  348. <el-table-column prop="date7" label="创建时间"></el-table-column>
  349. <el-table-column prop="date8" label="操作">
  350. <template #default="scope">
  351. <div style="">
  352. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  353. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  354. </div>
  355. </template>
  356. </el-table-column>
  357. </el-table>
  358. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  359. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  360. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输出参数</div>
  361. <div style="margin-left: auto">
  362. <el-button type="primary">添加</el-button>
  363. </div>
  364. </div>
  365. <el-table
  366. :data="tableData1"
  367. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  368. :cell-style="{ textAlign: 'center', }"
  369. :header-cell-style="{ textAlign: 'center'}"
  370. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  371. border
  372. :max-height="tableheight">
  373. <el-table-column type="index" label="序号"></el-table-column>
  374. <el-table-column prop="date1" label="参数名称"></el-table-column>
  375. <el-table-column prop="date2" label="英文名称"></el-table-column>
  376. <el-table-column prop="date3" label="类型"></el-table-column>
  377. <el-table-column prop="date4" label="内容" width="120">
  378. <template #default="scope">
  379. <div style="display: flex; align-items: center; height: 100%;">
  380. {{scope.row.date4}}<el-button @click="" type="text" style="margin-left: 1%;">查看</el-button>
  381. </div>
  382. </template>
  383. </el-table-column>
  384. <el-table-column prop="date5" label="必填"></el-table-column>
  385. <el-table-column prop="date6" label="率定参数"></el-table-column>
  386. <el-table-column prop="date7" label="创建时间"></el-table-column>
  387. <el-table-column prop="date8" label="操作">
  388. <template #default="scope">
  389. <div style="">
  390. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  391. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  392. </div>
  393. </template>
  394. </el-table-column>
  395. </el-table>
  396. </div>
  397. <!-- <div v-if="active==3">
  398. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  399. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  400. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">前处理</div>
  401. <div style="margin-left: auto">
  402. <el-button type="primary">添加</el-button>
  403. </div>
  404. </div>
  405. <el-table
  406. :data="tableData2"
  407. ref="dragTableRef"
  408. class="draggable-table"
  409. row-key="date1"
  410. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  411. :cell-style="{ textAlign: 'center', }"
  412. :header-cell-style="{ textAlign: 'center'}"
  413. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  414. border
  415. :max-height="tableheight">
  416. <el-table-column label="排序">
  417. <template #default="scope">
  418. <div class="drag-handle">
  419. <el-icon ><Sort /></el-icon>
  420. </div>
  421. </template>
  422. </el-table-column>
  423. <el-table-column prop="date1" label="操作名称"></el-table-column>
  424. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  425. <el-table-column prop="date3" label="模式"></el-table-column>
  426. <el-table-column prop="date4" label="工具组件"></el-table-column>
  427. <el-table-column prop="date5" label="操作">
  428. <template #default="scope">
  429. <div style="">
  430. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  431. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  432. </div>
  433. </template>
  434. </el-table-column>
  435. </el-table>
  436. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  437. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  438. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输出参数</div>
  439. <div style="margin-left: auto">
  440. <el-button type="primary">添加</el-button>
  441. </div>
  442. </div>
  443. <el-table
  444. :data="tableData3"
  445. class="draggable-table1"
  446. row-key="date1"
  447. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  448. :cell-style="{ textAlign: 'center', }"
  449. :header-cell-style="{ textAlign: 'center'}"
  450. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  451. border
  452. :max-height="tableheight">
  453. <el-table-column label="排序">
  454. <template #default="scope">
  455. <div class="drag-handle">
  456. <el-icon ><Sort /></el-icon>
  457. </div>
  458. </template>
  459. </el-table-column>
  460. <el-table-column prop="date1" label="操作名称"></el-table-column>
  461. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  462. <el-table-column prop="date3" label="模式"></el-table-column>
  463. <el-table-column prop="date4" label="工具组件"></el-table-column>
  464. <el-table-column prop="date5" label="操作">
  465. <template #default="scope">
  466. <div style="">
  467. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  468. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  469. </div>
  470. </template>
  471. </el-table-column>
  472. </el-table>
  473. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  474. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  475. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">后处理</div>
  476. <div style="margin-left: auto">
  477. <el-button type="primary">添加</el-button>
  478. </div>
  479. </div>
  480. <el-table
  481. :data="tableData2"
  482. class="draggable-table"
  483. row-key="date1"
  484. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  485. :cell-style="{ textAlign: 'center', }"
  486. :header-cell-style="{ textAlign: 'center'}"
  487. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  488. border
  489. :max-height="tableheight">
  490. <el-table-column label="排序">
  491. <template #default="scope">
  492. <div class="drag-handle">
  493. <el-icon ><Sort /></el-icon>
  494. </div>
  495. </template>
  496. </el-table-column>
  497. <el-table-column prop="date1" label="操作名称"></el-table-column>
  498. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  499. <el-table-column prop="date3" label="模式"></el-table-column>
  500. <el-table-column prop="date4" label="工具组件"></el-table-column>
  501. <el-table-column prop="date5" label="操作">
  502. <template #default="scope">
  503. <div style="">
  504. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  505. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  506. </div>
  507. </template>
  508. </el-table-column>
  509. </el-table>
  510. </div> -->
  511. <template #footer>
  512. <span class="dialog-footer">
  513. <el-button @click="forward" style="float: left;">上一步</el-button>
  514. <el-button type="primary" @click="next" v-if="active!=2">
  515. 下一步
  516. </el-button>
  517. <el-button type="primary" @click="subEdit" v-if="active==2&&isEdit===false&&isAdd===false">
  518. 提交
  519. </el-button>
  520. <el-button type="primary" @click="submit" v-if="active==2&&isEdit===false&&isAdd===true">
  521. 提交
  522. </el-button>
  523. <el-button type="primary" @click="dialogVisible = false" v-if="active==2&&isEdit===true">
  524. 确定
  525. </el-button>
  526. </span>
  527. </template>
  528. </el-dialog>
  529. </div>
  530. </div>
  531. </template>
  532. <script setup>
  533. import { getModelList,addModel,delMdid,getModelFile,getModelDetail,updateModel,modelFile } from "@/api/register/regCom";
  534. import { ref, onMounted, onUnmounted, nextTick } from 'vue';
  535. import { Search } from '@element-plus/icons-vue'
  536. import {
  537. ArrowLeft,
  538. Plus
  539. } from '@element-plus/icons-vue'
  540. import { reactive } from 'vue'
  541. import { forwardRefProps } from 'element-plus/es/components/tooltip-v2/src/forward-ref.mjs';
  542. import { getToken } from "@/utils/auth";
  543. import { fa } from "element-plus/es/locales.mjs";
  544. const { proxy } = getCurrentInstance();
  545. const dragTableRef = ref()
  546. const dialogVisible = ref(false)
  547. const active = ref(0)
  548. const data = reactive({
  549. form: {},
  550. queryParams: {
  551. "author": 0,
  552. "cateid": '',
  553. "className": '',
  554. "createBy": '',
  555. "createTime": "",
  556. "developer": '',
  557. "devlang": '',
  558. "enname": '',
  559. "intro": '',
  560. "isApproved": 0,
  561. "isPublic": 0,
  562. "mdCPU": 0,
  563. "mdContact": '',
  564. "mdGpu": 0,
  565. "mdInOutName": '',
  566. "mdInOutNameEn": '',
  567. "mdRunCmd": '',
  568. "mdRunEnv": '',
  569. "mdUnit": '',
  570. "mdid": '',
  571. "mirrorImageDesc": '',
  572. "mirrorImageEg": '',
  573. "mirrorImageUrl": '',
  574. "modifyBy": "",
  575. "msgFlag": 0,
  576. "msgWebHook": '',
  577. "name": 'test',
  578. "params": {},
  579. "remark": '',
  580. "status": 0,
  581. "tags": '',
  582. "type": '',
  583. "updateBy": '',
  584. "updateTime": "",
  585. "version": ''
  586. },
  587. });
  588. const isEdit = ref(true)
  589. const isAdd = ref(true)
  590. const formJi = ref({
  591. name:'',
  592. version:'',
  593. enname:'',
  594. devlang:'',
  595. intro:'',
  596. type:''
  597. });
  598. const rulesJi = reactive({
  599. name: [{ required: true, message: '必填', trigger: 'blur' }],
  600. version: [{ required: true, message: '必填', trigger: 'blur' }],
  601. enname: [{ required: true, message: '必填', trigger: 'blur' }],
  602. });
  603. const formRefJi = ref();
  604. const formTi = ref({
  605. developer:'',
  606. mdContact:'',
  607. mdUnit:''
  608. });
  609. const rulesTi = reactive({
  610. mdUnit: [{ required: true, message: '必填', trigger: 'blur' }],
  611. developer: [{ required: true, message: '必填', trigger: 'blur' }],
  612. mdContact: [{ required: true, message: '必填', trigger: 'blur' }],
  613. });
  614. const formRefTi = ref();
  615. const formZu = ref({
  616. mirrorImageEurl:'',
  617. mdCPU:'',
  618. mdGPU:''
  619. });
  620. const rulesZu = reactive({
  621. mirrorImageEurl: [{ required: true, message: '必填', trigger: 'blur' }],
  622. mdCPU: [{ required: true, message: '必填', trigger: 'blur' }],
  623. });
  624. const formRefZu = ref();
  625. const upload = reactive({
  626. // 是否显示弹出层(用户导入)
  627. open: false,
  628. // 弹出层标题(用户导入)
  629. title: "",
  630. // 是否禁用上传
  631. isUploading: false,
  632. // 是否更新已经存在的用户数据
  633. updateSupport: '',
  634. // 设置上传的请求头部
  635. headers: { Authorization: "Bearer " + getToken() },
  636. // 上传的地址
  637. url: import.meta.env.VITE_APP_BASE_API + "/common/upload"
  638. });
  639. const tableKey = ref(0);
  640. const totalComReg = ref()
  641. const currentPage = ref(1)
  642. const { queryParams, form, rules } = toRefs(data);
  643. const tableData2 = ref([
  644. { date1:'流域拓扑', date2:'', date3:'single', date4:'基于水文响应' },
  645. { date1:'雨量站', date2:'', date3:'single', date4:'基于水文响应' },
  646. { date1:'水库', date2:'', date3:'single', date4:'基于水文响应' }
  647. ]);
  648. const tableData3 = ref([
  649. { date1:'流域拓扑', date2:'', date3:'single', date4:'基于水文响应' },
  650. { date1:'水库', date2:'', date3:'single', date4:'基于水文响应' },
  651. { date1:'雨量站', date2:'', date3:'single', date4:'基于水文响应' }
  652. ]);
  653. const tableData1= [{date1:'初始状态',
  654. date2:'sts',
  655. date3:'数据项',
  656. date4:'初始状态',
  657. date5:'是',
  658. date6:'否',
  659. date7:'2023-09-08'
  660. }]
  661. const checkGroup = [
  662. {label:'水文预报'},
  663. {label:'维水动力'},
  664. {label:'二维水动力'},
  665. {label:'机器学习'},
  666. ]
  667. let tableData = ref([{name:'1'}])
  668. const heightAll = window.innerHeight
  669. const valueHelpSel = '';
  670. const tableheight = window.innerHeight*0.7
  671. const optionsType = [
  672. {
  673. value: '1',
  674. label: '水利专业模型',
  675. },
  676. {
  677. value: '2',
  678. label: '排水专业模型',
  679. },
  680. {
  681. value: '3',
  682. label: '供水专业模型',
  683. },
  684. {
  685. value: '4',
  686. label: '海洋专业模型',
  687. },
  688. ]
  689. const options = [
  690. {
  691. value: 'Option1',
  692. label: 'Option1',
  693. },
  694. ]
  695. const uploadRef = ref(null);
  696. const parForm = ref('')
  697. onMounted(() => {
  698. getModelListTable()
  699. // addNewModel()
  700. });
  701. function updateSameProperties(target, source) {
  702. Object.keys(target).forEach(key => {
  703. if (source.hasOwnProperty(key)) {
  704. target[key] = source[key]; // 仅更新同名属性
  705. }
  706. });
  707. return target;
  708. }
  709. function showDe(row){
  710. dialogVisible.value = true
  711. isEdit.value = true
  712. getModelDetail(row.mdid).then(res=>{
  713. parForm.value = res.data
  714. formJi.value = updateSameProperties(formJi.value,res.data)
  715. formTi.value = updateSameProperties(formTi.value,res.data)
  716. formZu.value = updateSameProperties(formZu.value,res.data)
  717. })
  718. }
  719. async function showEdit(row){
  720. isAdd.value = false
  721. dialogVisible.value = true
  722. await nextTick()
  723. isEdit.value = false
  724. getModelDetail(row.mdid).then(res=>{
  725. parForm.value = res.data
  726. formJi.value = updateSameProperties(formJi.value,res.data)
  727. formTi.value = updateSameProperties(formTi.value,res.data)
  728. formZu.value = updateSameProperties(formZu.value,res.data)
  729. })
  730. }
  731. function mergeObjects(...objects) {
  732. return { ...objects.reduce((acc, obj) => ({ ...acc, ...obj }), {}) };
  733. }
  734. function subEdit(){
  735. const formTotal = { ...formJi.value,...formTi.value,...formZu.value,...parForm.value };
  736. const par = mergeObjects(parForm.value, formJi.value, formTi.value,formZu.value)
  737. console.log(par)
  738. updateModel(par).then(res=>{
  739. if(res.code===200){
  740. proxy.$modal.msgSuccess("修改成功");
  741. dialogVisible.value = false
  742. }
  743. })
  744. }
  745. async function submit(){
  746. const formTotal = { ...formJi.value,...formTi.value,...formZu.value,};
  747. // debugger
  748. await addModel(formTotal).then(res=>{
  749. upload.updateSupport = res.msg
  750. })
  751. if(uploadRef.value?.uploadFiles?.length > 0){
  752. uploadRef.value?.submit()
  753. }
  754. else{
  755. proxy.$modal.msgSuccess("保存成功");
  756. dialogVisible.value = false
  757. }
  758. getModelList()
  759. }
  760. async function handleFileSuccess(response, file, fileList){
  761. console.log(response)
  762. var par = {
  763. filename: response.originalFilename,
  764. isDocument: '',
  765. isMainLibrary: '',
  766. mdid: upload.updateSupport,
  767. relativePath: response.fileName,
  768. signature:''
  769. }
  770. console.log(par)
  771. await modelFile(par).then(res=>{
  772. if(res.code===200){
  773. proxy.$modal.msgSuccess("保存成功");
  774. dialogVisible.value = false
  775. }
  776. })
  777. getModelListTable()
  778. };
  779. function clearForm(){
  780. formJi.value = {
  781. name:'',
  782. version:'',
  783. enname:'',
  784. devlang:'',
  785. intro:'',
  786. type:''
  787. }
  788. formTi.value = {
  789. developer:'',
  790. mdContact:'',
  791. mdUnit:''
  792. }
  793. formZu.value = {
  794. developer:'',
  795. mdContact:'',
  796. mdUnit:''
  797. }
  798. active.value = 0
  799. }
  800. function reg(){
  801. isAdd.value = true
  802. isEdit.value = false
  803. dialogVisible.value = true
  804. }
  805. function changePage(a){
  806. currentPage.value = a
  807. getModelListTable()
  808. }
  809. function getModelListTable(){
  810. tableData.value = []
  811. var par = {
  812. pageNum: currentPage.value,
  813. pageSize: 10,
  814. }
  815. console.log(par)
  816. getModelList(par).then(res=>{
  817. tableData.value = res.rows
  818. totalComReg.value = res.total
  819. console.log(tableData)
  820. })
  821. }
  822. function handleDelete(row) {
  823. proxy.$modal.confirm('是否确认删除?').then(function () {
  824. return delMdid(row.mdid);
  825. }).then(() => {
  826. getList();
  827. proxy.$modal.msgSuccess("删除成功");
  828. }).catch(() => {});
  829. };
  830. const seledMo = ['primary','plain','plain','plain','plain','plain','plain']
  831. const next = () => {
  832. if(active.value==0){
  833. formRefJi.value.validate((valid) => {
  834. formRefTi.value.validate((valid1) => {
  835. // console.log(formTi.value)
  836. console.log(valid1)
  837. if(active.value<2&&valid&&valid1){
  838. active.value++
  839. }
  840. });
  841. });
  842. }
  843. if(active.value==1){
  844. formRefZu.value.validate((valid) => {
  845. if(active.value<2&&valid){
  846. active.value++
  847. }
  848. });
  849. }
  850. }
  851. const forward = () => {
  852. if(active.value>0){
  853. active.value--
  854. }
  855. }
  856. onUnmounted(() => {
  857. if (sortableInstance) {
  858. sortableInstance.destroy(); // 组件卸载时销毁实例
  859. }
  860. if (sortableInstance1) {
  861. sortableInstance1.destroy(); // 组件卸载时销毁实例
  862. }
  863. });
  864. </script>
  865. <style scoped>
  866. .drag-handle {
  867. cursor: move;
  868. }
  869. .ghost {
  870. opacity: 0.5;
  871. background: #c8ebfb;
  872. }
  873. /* 防止文字选中 */
  874. :deep(.el-table__row) {
  875. user-select: none;
  876. -webkit-user-select: none;
  877. }
  878. </style>
  879. <style scoped lang="scss">
  880. .el-table .el-table__row td {
  881. height: 60px !important; /* 行高 */
  882. }
  883. .custom-tree-node {
  884. display: flex; /* 启用 Flex 布局 */
  885. align-items: center; /* 垂直居中 */
  886. gap: 8px; /* 图标与文字间距 */
  887. }
  888. </style>