index.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  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: 8%;">
  46. <el-button type="primary" style="margin-left: 5%;" :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. :max-height="tableheight">
  72. <el-table-column type="selection" width="55"></el-table-column>
  73. <el-table-column type="index" label="序号"></el-table-column>
  74. <el-table-column prop="name" label="组件名称" width="250">
  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="address2" label="注册人员" width="100"/>
  79. <el-table-column prop="st3" 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="isPublic" 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="操作" >
  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="warning" size="mini" text style="margin-left: -5%;">下架</el-button>
  106. <el-button type="warning" text size="mini" style="margin-left: -5%;">重置测试</el-button>
  107. <el-button type="primary" text size="mini" style="margin-left: -5%;">测试</el-button>
  108. <el-button type="primary" size="mini" text style="margin-left: -5%;">编辑</el-button>
  109. <el-button type="danger" text size="mini" style="margin-left: -5%;" @click="handleDelete(scope.row)">注销</el-button>
  110. <el-button type="primary" text size="mini" style="margin-left: -5%;">查看</el-button>
  111. <el-button type="primary" text size="mini" style="margin-left: -5%;">后处理</el-button>
  112. </div>
  113. </template>
  114. </el-table-column>
  115. </el-table>
  116. <div style="float: right;margin-top: 1%;margin-right: 1%;">
  117. <el-pagination
  118. small
  119. background
  120. layout="prev, pager, next"
  121. :total="50"
  122. class="mt-4"
  123. />
  124. </div>
  125. <el-dialog v-model="dialogVisible" title="组件注册" width="50%" >
  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-step title="第四步"></el-step>
  131. </el-steps>
  132. <div v-if="active==0">
  133. <div v-if="active==0" style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  134. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  135. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">基本信息</div>
  136. </div>
  137. <div v-if="active==0" style="margin-left: 1%;margin-top: 1%;">
  138. <el-form style="margin-left: 5%;" :model="form" class="demo-form-inline" :rules="rules">
  139. <el-row :gutter="40">
  140. <el-col :span="9">
  141. <el-form-item label="组件名称:" prop="name">
  142. <el-input v-model="form.name" />
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="9">
  146. <el-form-item label="版本号:" prop="version">
  147. <el-input v-model="form.version" />
  148. </el-form-item>
  149. </el-col>
  150. </el-row>
  151. <el-row :gutter="40" style="margin-top: 1%;">
  152. <el-col :span="9" >
  153. <el-form-item label="组件英文名称:" prop="enname">
  154. <el-input v-model="form.enname" />
  155. </el-form-item>
  156. </el-col>
  157. <el-col :span="9">
  158. <el-form-item label="排序:" prop="">
  159. <el-input v-model="form.region" />
  160. </el-form-item>
  161. </el-col>
  162. </el-row>
  163. <el-row :gutter="40" style="margin-top: 1%;">
  164. <el-col :span="9" >
  165. <el-form-item label="模型分类:" prop="type">
  166. <el-select
  167. v-model="form.type"
  168. style="width: 100%;margin-left: 1%;"
  169. >
  170. <el-option
  171. v-for="item in options"
  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="form.devlang" class="ml-4" size="small" style="margin-top: -10%;">
  182. <el-radio label="1" size="large">C++</el-radio>
  183. <el-radio label="2" size="large">.net</el-radio>
  184. <el-radio label="2" size="large">java</el-radio>
  185. <el-radio label="2" size="large">Python</el-radio>
  186. <el-radio label="2" 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="form.region" style="width: 30%;" :rows="2" type="textarea"/>
  193. </el-form-item>
  194. </el-form>
  195. </div>
  196. <div v-if="active==0" 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 v-if="active==0" style="margin-left: 1%;margin-top: 1%;">
  201. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  202. <el-row :gutter="40">
  203. <el-col :span="12">
  204. <el-form-item label="提供单位:" prop="mdUnit">
  205. <el-select
  206. v-model="form.mdUnit"
  207. style="width: 65%"
  208. >
  209. <el-option
  210. v-for="item in options"
  211. :key="item.value"
  212. :label="item.label"
  213. :value="item.value"
  214. />
  215. </el-select>
  216. <!-- <el-button type="primary" style="margin-left: 1%;">选择</el-button>
  217. <el-button type="" style="margin-left:1%;">清空</el-button> -->
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="12">
  221. <el-form-item label="技术支撑单位:" prop="developer">
  222. <el-input v-model="form.developer" style="width: 65%;" />
  223. <!-- <el-button type="" style="margin-left:1%;">清空</el-button> -->
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row :gutter="40" style="margin-top: 1%;">
  228. <el-col :span="9" >
  229. <el-form-item label="联系方式:" prop="mdContact">
  230. <el-input v-model="form.mdContact" />
  231. </el-form-item>
  232. </el-col>
  233. </el-row>
  234. </el-form>
  235. </div>
  236. </div>
  237. <div v-if="active==1">
  238. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  239. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  240. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">示例数据</div>
  241. </div>
  242. <div style="margin-left: 1%;margin-top: 1%;">
  243. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  244. <el-row :gutter="40">
  245. <el-col :span="12">
  246. <el-form-item label="输入示例数据:" prop="name">
  247. <el-upload
  248. class="upload-demo"
  249. drag
  250. action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
  251. multiple
  252. >
  253. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  254. <div class="el-upload__text">
  255. Drop file here or <em>click to upload</em>
  256. </div>
  257. <template #tip>
  258. <div class="el-upload__tip">
  259. </div>
  260. </template>
  261. </el-upload>
  262. <el-input v-model="form.region" style="width: 75%;" placeholder="请输入示例" :rows="2" type="textarea"/>
  263. </el-form-item>
  264. </el-col>
  265. <el-col :span="12">
  266. <el-form-item label="输入示例数据:" prop="name">
  267. <el-upload
  268. class="upload-demo"
  269. drag
  270. action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
  271. multiple
  272. >
  273. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  274. <div class="el-upload__text">
  275. Drop file here or <em>click to upload</em>
  276. </div>
  277. <template #tip>
  278. <div class="el-upload__tip">
  279. </div>
  280. </template>
  281. </el-upload>
  282. <el-input v-model="form.region" style="width: 75%;" placeholder="请输入示例" :rows="2" type="textarea"/>
  283. </el-form-item>
  284. </el-col>
  285. </el-row>
  286. </el-form>
  287. </div>
  288. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  289. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  290. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">模型组件上传</div>
  291. </div>
  292. <div style="margin-left: 1%;margin-top: 1%;">
  293. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  294. <el-form-item label="组件执行包:" prop="name">
  295. <el-input v-model="form.region" style="width: 75%;" placeholder="请输入示例" :rows="2" type="textarea"/>
  296. </el-form-item>
  297. <el-form-item label="组件说明文档:" prop="">
  298. <div style="width: 60%;">
  299. <el-upload
  300. class="upload-demo"
  301. drag
  302. action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
  303. multiple
  304. >
  305. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  306. <div class="el-upload__text">
  307. Drop file here or <em>click to upload</em>
  308. </div>
  309. <template #tip>
  310. <div class="el-upload__tip">
  311. </div>
  312. </template>
  313. </el-upload>
  314. </div>
  315. <div style="color: #b1b3b8;">
  316. 注:请上传后缀名为.jar、·ph、.sh、.exe、.zip、.bat的文件
  317. </div>
  318. </el-form-item>
  319. </el-form>
  320. </div>
  321. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  322. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  323. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">资源需求</div>
  324. </div>
  325. <div style="margin-left: 1%;margin-top: 1%;">
  326. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  327. <el-row :gutter="40">
  328. <el-col :span="12">
  329. <el-form-item label="CPU核心数:" prop="mdCPU">
  330. <el-input v-model="form.mdCPU" style="width: 50%;" placeholder=""/>
  331. <div style="margin-left: 2%;">
  332. </div>
  333. </el-form-item>
  334. </el-col>
  335. <el-col :span="12">
  336. <el-form-item label="内存:" prop="name">
  337. <el-input v-model="form.region" style="width: 50%;" placeholder=""/>
  338. <div style="margin-left: 2%;">
  339. M
  340. </div>
  341. </el-form-item>
  342. </el-col>
  343. </el-row>
  344. <el-row :gutter="40">
  345. <el-col :span="12">
  346. <el-form-item label="是否需要GPU:">
  347. <el-switch v-model="form.mdGPU" />
  348. </el-form-item>
  349. </el-col>
  350. <el-col :span="12">
  351. <el-form-item label="平台:" prop="name">
  352. <el-select
  353. v-model="value"
  354. style="width: 50%;"
  355. >
  356. <el-option
  357. v-for="item in options"
  358. :key="item.value"
  359. :label="item.label"
  360. :value="item.value"
  361. />
  362. </el-select>
  363. </el-form-item>
  364. </el-col>
  365. </el-row>
  366. </el-form>
  367. </div>
  368. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;">
  369. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  370. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">运行命令</div>
  371. </div>
  372. <div style="margin-left: 1%;margin-top: 1%;">
  373. <el-form style="margin-left: 5%;margin-top: 2%;" :model="form" class="demo-form-inline" :rules="rules">
  374. <el-form-item label="运行命令:" prop="name">
  375. <el-input v-model="form.region" style="width: 75%;" placeholder="请输入示例" :rows="2" type="textarea"/>
  376. </el-form-item>
  377. </el-form>
  378. </div>
  379. </div>
  380. <div v-if="active==2">
  381. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  382. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  383. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输入参数</div>
  384. <div style="margin-left: auto">
  385. <el-button type="primary">添加</el-button>
  386. </div>
  387. </div>
  388. <el-table
  389. :data="tableData1"
  390. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  391. :cell-style="{ textAlign: 'center', }"
  392. :header-cell-style="{ textAlign: 'center'}"
  393. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  394. border
  395. :max-height="tableheight">
  396. <el-table-column type="index" label="序号"></el-table-column>
  397. <el-table-column prop="date1" label="参数名称"></el-table-column>
  398. <el-table-column prop="date2" label="英文名称"></el-table-column>
  399. <el-table-column prop="date3" label="类型"></el-table-column>
  400. <el-table-column prop="date4" label="内容" width="120">
  401. <template #default="scope">
  402. <div style="display: flex; align-items: center; height: 100%;">
  403. {{scope.row.date4}}<el-button @click="" type="text" style="margin-left: 1%;">查看</el-button>
  404. </div>
  405. </template>
  406. </el-table-column>
  407. <el-table-column prop="date5" label="必填"></el-table-column>
  408. <el-table-column prop="date6" label="率定参数"></el-table-column>
  409. <el-table-column prop="date7" label="创建时间"></el-table-column>
  410. <el-table-column prop="date8" label="操作">
  411. <template #default="scope">
  412. <div style="">
  413. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  414. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  415. </div>
  416. </template>
  417. </el-table-column>
  418. </el-table>
  419. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  420. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  421. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输出参数</div>
  422. <div style="margin-left: auto">
  423. <el-button type="primary">添加</el-button>
  424. </div>
  425. </div>
  426. <el-table
  427. :data="tableData1"
  428. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  429. :cell-style="{ textAlign: 'center', }"
  430. :header-cell-style="{ textAlign: 'center'}"
  431. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  432. border
  433. :max-height="tableheight">
  434. <el-table-column type="index" label="序号"></el-table-column>
  435. <el-table-column prop="date1" label="参数名称"></el-table-column>
  436. <el-table-column prop="date2" label="英文名称"></el-table-column>
  437. <el-table-column prop="date3" label="类型"></el-table-column>
  438. <el-table-column prop="date4" label="内容" width="120">
  439. <template #default="scope">
  440. <div style="display: flex; align-items: center; height: 100%;">
  441. {{scope.row.date4}}<el-button @click="" type="text" style="margin-left: 1%;">查看</el-button>
  442. </div>
  443. </template>
  444. </el-table-column>
  445. <el-table-column prop="date5" label="必填"></el-table-column>
  446. <el-table-column prop="date6" label="率定参数"></el-table-column>
  447. <el-table-column prop="date7" label="创建时间"></el-table-column>
  448. <el-table-column prop="date8" label="操作">
  449. <template #default="scope">
  450. <div style="">
  451. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  452. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  453. </div>
  454. </template>
  455. </el-table-column>
  456. </el-table>
  457. </div>
  458. <div v-if="active==3">
  459. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  460. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  461. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">前处理</div>
  462. <div style="margin-left: auto">
  463. <el-button type="primary">添加</el-button>
  464. </div>
  465. </div>
  466. <el-table
  467. :data="tableData2"
  468. ref="dragTableRef"
  469. class="draggable-table"
  470. row-key="date1"
  471. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  472. :cell-style="{ textAlign: 'center', }"
  473. :header-cell-style="{ textAlign: 'center'}"
  474. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  475. border
  476. :max-height="tableheight">
  477. <el-table-column label="排序">
  478. <template #default="scope">
  479. <div class="drag-handle">
  480. <el-icon ><Sort /></el-icon>
  481. </div>
  482. </template>
  483. </el-table-column>
  484. <el-table-column prop="date1" label="操作名称"></el-table-column>
  485. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  486. <el-table-column prop="date3" label="模式"></el-table-column>
  487. <el-table-column prop="date4" label="工具组件"></el-table-column>
  488. <el-table-column prop="date5" label="操作">
  489. <template #default="scope">
  490. <div style="">
  491. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  492. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  493. </div>
  494. </template>
  495. </el-table-column>
  496. </el-table>
  497. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  498. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  499. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">输出参数</div>
  500. <div style="margin-left: auto">
  501. <el-button type="primary">添加</el-button>
  502. </div>
  503. </div>
  504. <el-table
  505. :data="tableData3"
  506. class="draggable-table1"
  507. row-key="date1"
  508. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  509. :cell-style="{ textAlign: 'center', }"
  510. :header-cell-style="{ textAlign: 'center'}"
  511. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  512. border
  513. :max-height="tableheight">
  514. <el-table-column label="排序">
  515. <template #default="scope">
  516. <div class="drag-handle">
  517. <el-icon ><Sort /></el-icon>
  518. </div>
  519. </template>
  520. </el-table-column>
  521. <el-table-column prop="date1" label="操作名称"></el-table-column>
  522. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  523. <el-table-column prop="date3" label="模式"></el-table-column>
  524. <el-table-column prop="date4" label="工具组件"></el-table-column>
  525. <el-table-column prop="date5" label="操作">
  526. <template #default="scope">
  527. <div style="">
  528. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  529. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  530. </div>
  531. </template>
  532. </el-table-column>
  533. </el-table>
  534. <div style="margin-left: 1%;margin-top: 1%;display: flex;align-items: center;width: 98%;">
  535. <div style="background-color: blue;width: 2px;height: 16px;"></div>
  536. <div style="font-weight: bold;font-size: 16px;margin-left: 0.5%;">后处理</div>
  537. <div style="margin-left: auto">
  538. <el-button type="primary">添加</el-button>
  539. </div>
  540. </div>
  541. <el-table
  542. :data="tableData2"
  543. class="draggable-table"
  544. row-key="date1"
  545. style="width: 98%;margin-left: 1%;margin-top: 0.5%;"
  546. :cell-style="{ textAlign: 'center', }"
  547. :header-cell-style="{ textAlign: 'center'}"
  548. :row-style="{ height: heightAll*0.01+'px',fontSize: '16px',textAlign:'center' }"
  549. border
  550. :max-height="tableheight">
  551. <el-table-column label="排序">
  552. <template #default="scope">
  553. <div class="drag-handle">
  554. <el-icon ><Sort /></el-icon>
  555. </div>
  556. </template>
  557. </el-table-column>
  558. <el-table-column prop="date1" label="操作名称"></el-table-column>
  559. <el-table-column prop="date2" label="参数英文名称"></el-table-column>
  560. <el-table-column prop="date3" label="模式"></el-table-column>
  561. <el-table-column prop="date4" label="工具组件"></el-table-column>
  562. <el-table-column prop="date5" label="操作">
  563. <template #default="scope">
  564. <div style="">
  565. <el-button @click="" type="text" style="margin-left: 1%;">编辑</el-button>
  566. <el-button @click="" type='danger' text style="margin-left: 2%;">删除</el-button>
  567. </div>
  568. </template>
  569. </el-table-column>
  570. </el-table>
  571. </div>
  572. <template #footer>
  573. <span class="dialog-footer">
  574. <el-button @click="forward" style="float: left;">上一步</el-button>
  575. <el-button type="primary" @click="next">
  576. 下一步
  577. </el-button>
  578. </span>
  579. </template>
  580. </el-dialog>
  581. </div>
  582. </div>
  583. </template>
  584. <script setup>
  585. import { getModelList,addModel,delMdid } from "@/api/register/regCom";
  586. import { ref, onMounted, onUnmounted, nextTick } from 'vue';
  587. import Sortable from 'sortablejs';
  588. import { Search } from '@element-plus/icons-vue'
  589. import {
  590. ArrowLeft,
  591. Plus
  592. } from '@element-plus/icons-vue'
  593. import { reactive } from 'vue'
  594. import { forwardRefProps } from 'element-plus/es/components/tooltip-v2/src/forward-ref.mjs';
  595. const { proxy } = getCurrentInstance();
  596. const dragTableRef = ref()
  597. const dialogVisible = ref(false)
  598. const active = ref(0)
  599. const data = reactive({
  600. form: {},
  601. queryParams: {
  602. "author": 0,
  603. "cateid": '',
  604. "className": '',
  605. "createBy": '',
  606. "createTime": "",
  607. "developer": '',
  608. "devlang": '',
  609. "enname": '',
  610. "intro": '',
  611. "isApproved": 0,
  612. "isPublic": 0,
  613. "mdCPU": 0,
  614. "mdContact": '',
  615. "mdGpu": 0,
  616. "mdInOutName": '',
  617. "mdInOutNameEn": '',
  618. "mdRunCmd": '',
  619. "mdRunEnv": '',
  620. "mdUnit": '',
  621. "mdid": '',
  622. "mirrorImageDesc": '',
  623. "mirrorImageEg": '',
  624. "mirrorImageUrl": '',
  625. "modifyBy": "",
  626. "msgFlag": 0,
  627. "msgWebHook": '',
  628. "name": 'test',
  629. "params": {},
  630. "remark": '',
  631. "status": 0,
  632. "tags": '',
  633. "type": '',
  634. "updateBy": '',
  635. "updateTime": "",
  636. "version": ''
  637. },
  638. rules: {
  639. name: [{ required: true, message: "不能为空", trigger: "blur" }],
  640. version: [{ required: true, message: "不能为空", trigger: "blur" }],
  641. enname: [{ required: true, message: "不能为空", trigger: "blur" }],
  642. mdUnit: [{ required: true, message: "不能为空", trigger: "blur" }],
  643. developer: [{ required: true, message: "不能为空", trigger: "blur" }],
  644. mdContact: [{ required: true, message: "不能为空", trigger: "blur" }],
  645. mdCPU: [{ required: true, message: "不能为空", trigger: "blur" }],
  646. }
  647. });
  648. const { queryParams, form, rules } = toRefs(data);
  649. const tableData2 = ref([
  650. { date1:'流域拓扑', date2:'', date3:'single', date4:'基于水文响应' },
  651. { date1:'雨量站', date2:'', date3:'single', date4:'基于水文响应' },
  652. { date1:'水库', date2:'', date3:'single', date4:'基于水文响应' }
  653. ]);
  654. const tableData3 = ref([
  655. { date1:'流域拓扑', date2:'', date3:'single', date4:'基于水文响应' },
  656. { date1:'水库', date2:'', date3:'single', date4:'基于水文响应' },
  657. { date1:'雨量站', date2:'', date3:'single', date4:'基于水文响应' }
  658. ]);
  659. const tableData1= [{date1:'初始状态',
  660. date2:'sts',
  661. date3:'数据项',
  662. date4:'初始状态',
  663. date5:'是',
  664. date6:'否',
  665. date7:'2023-09-08'
  666. }]
  667. const checkGroup = [
  668. {label:'水文预报'},
  669. {label:'维水动力'},
  670. {label:'二维水动力'},
  671. {label:'机器学习'},
  672. ]
  673. let tableData = ref([])
  674. const heightAll = window.innerHeight
  675. const valueHelpSel = '';
  676. const tableheight = window.innerHeight*0.7
  677. const options = [
  678. {
  679. value: 'Option1',
  680. label: 'Option1',
  681. },
  682. {
  683. value: 'Option2',
  684. label: 'Option2',
  685. },
  686. {
  687. value: 'Option3',
  688. label: 'Option3',
  689. },
  690. {
  691. value: 'Option4',
  692. label: 'Option4',
  693. },
  694. {
  695. value: 'Option5',
  696. label: 'Option5',
  697. },
  698. ]
  699. function addNewModel(){
  700. addModel(form).then(res=>{
  701. })
  702. }
  703. function reg(){
  704. dialogVisible.value = true
  705. }
  706. function getModelListTable(){
  707. var par = {
  708. pageNum: 1,
  709. pageSize: 10,
  710. }
  711. getModelList(par).then(res=>{
  712. tableData.value = res.rows
  713. console.log(tableData)
  714. })
  715. }
  716. function handleDelete(row) {
  717. proxy.$modal.confirm('是否确认删除?').then(function () {
  718. return delMdid(row.mdid);
  719. }).then(() => {
  720. getList();
  721. proxy.$modal.msgSuccess("删除成功");
  722. }).catch(() => {});
  723. };
  724. const seledMo = ['primary','plain','plain','plain','plain','plain','plain']
  725. const next = () => {
  726. console.log(active.value)
  727. active.value++
  728. }
  729. const forward = () => {
  730. console.log(active.value)
  731. active.value--
  732. }
  733. let sortableInstance = null;
  734. // 初始化拖拽
  735. const initSortable = () => {
  736. const tbody = document.querySelector('.draggable-table .el-table__body-wrapper tbody');
  737. if (!tbody) return;
  738. // 销毁旧实例避免重复绑定
  739. if (sortableInstance) {
  740. sortableInstance.destroy();
  741. }
  742. sortableInstance = Sortable.create(tbody, {
  743. handle: '.drag-handle', // 指定拖动手柄[9](@ref)
  744. animation: 150,
  745. ghostClass: 'ghost',
  746. preventOnFilter: false, // 禁用默认选中行为[7](@ref)
  747. // 拖拽结束回调
  748. onEnd: (event) => {
  749. const { oldIndex, newIndex } = event;
  750. // 深拷贝避免数据污染
  751. const newData = [...tableData2.value];
  752. const [movedItem] = newData.splice(oldIndex, 1);
  753. newData.splice(newIndex, 0, movedItem);
  754. tableData2.value = newData; // 响应式更新数据
  755. // 等待DOM更新后重新初始化
  756. nextTick(() => {
  757. initSortable();
  758. });
  759. }
  760. });
  761. };
  762. let sortableInstance1 = null
  763. const initSortable1 = () => {
  764. const tbody = document.querySelector('.draggable-table1 .el-table__body-wrapper tbody');
  765. if (!tbody) return;
  766. // 销毁旧实例避免重复绑定
  767. if (sortableInstance1) {
  768. sortableInstance1.destroy();
  769. }
  770. sortableInstance1 = Sortable.create(tbody, {
  771. handle: '.drag-handle', // 指定拖动手柄[9](@ref)
  772. animation: 150,
  773. ghostClass: 'ghost',
  774. preventOnFilter: false, // 禁用默认选中行为[7](@ref)
  775. // 拖拽结束回调
  776. onEnd: (event) => {
  777. const { oldIndex, newIndex } = event;
  778. // 深拷贝避免数据污染
  779. const newData = [...tableData3.value];
  780. const [movedItem] = newData.splice(oldIndex, 1);
  781. newData.splice(newIndex, 0, movedItem);
  782. tableData3.value = newData; // 响应式更新数据
  783. // 等待DOM更新后重新初始化
  784. nextTick(() => {
  785. initSortable1();
  786. });
  787. }
  788. });
  789. };
  790. // 生命周期管理
  791. onMounted(() => {
  792. nextTick(initSortable);
  793. nextTick(initSortable1);
  794. getModelListTable()
  795. // addNewModel()
  796. });
  797. onUnmounted(() => {
  798. if (sortableInstance) {
  799. sortableInstance.destroy(); // 组件卸载时销毁实例
  800. }
  801. if (sortableInstance1) {
  802. sortableInstance1.destroy(); // 组件卸载时销毁实例
  803. }
  804. });
  805. </script>
  806. <style scoped>
  807. .drag-handle {
  808. cursor: move;
  809. }
  810. .ghost {
  811. opacity: 0.5;
  812. background: #c8ebfb;
  813. }
  814. /* 防止文字选中 */
  815. :deep(.el-table__row) {
  816. user-select: none;
  817. -webkit-user-select: none;
  818. }
  819. </style>
  820. <style scoped lang="scss">
  821. .el-table .el-table__row td {
  822. height: 60px !important; /* 行高 */
  823. }
  824. .custom-tree-node {
  825. display: flex; /* 启用 Flex 布局 */
  826. align-items: center; /* 垂直居中 */
  827. gap: 8px; /* 图标与文字间距 */
  828. }
  829. </style>