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.vue 7.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <div>
  3. <div class="title"><span>资源池(队列)</span></div>
  4. <div class="tools-bar">
  5. <div>
  6. <el-select class="select" size="medium" v-model="selCluster" @change="selectChange">
  7. <el-option v-for="item in clusterList" :key="item.k" :label="item.v" :value="item.k" />
  8. </el-select>
  9. <el-select class="select" size="medium" v-model="selComputingCenter" @change="selectChange">
  10. <el-option v-for="item in computingCenterList" :key="item.k" :label="item.v" :value="item.k" />
  11. </el-select>
  12. <el-select class="select" size="medium" v-model="selComputingType" @change="selectChange">
  13. <el-option v-for="item in computingTypeList" :key="item.k" :label="item.v" :value="item.k" />
  14. </el-select>
  15. <el-select class="select" size="medium" v-model="selCardType" @change="selectChange">
  16. <el-option v-for="item in cardTypeList" :key="item.k" :label="item.v" :value="item.k" />
  17. </el-select>
  18. </div>
  19. <div>
  20. <el-button size="medium" icon="el-icon-refresh" @click="syncComputerNetwork">同步智算网络</el-button>
  21. <el-button type="primary" icon="el-icon-plus" size="medium" @click="showDialog('add')">新增资源池</el-button>
  22. </div>
  23. </div>
  24. <div class="table-container">
  25. <div>
  26. <el-table border :data="tableData" style="width: 100%" v-loading="loading" stripe>
  27. <el-table-column prop="id" label="ID" align="center" header-align="center" width="100"></el-table-column>
  28. <el-table-column prop="name" label="资源池(队列)名称" align="center" header-align="center"></el-table-column>
  29. <el-table-column prop="cluster" label="所属集群" align="center" header-align="center"></el-table-column>
  30. <el-table-column prop="computingCenterId" label="智算中心ID" align="center" header-align="center">
  31. </el-table-column>
  32. <el-table-column prop="computingCenter" label="智算中心" align="center" header-align="center"></el-table-column>
  33. <el-table-column prop="computingType" label="计算资源" align="center" header-align="center"></el-table-column>
  34. <el-table-column prop="cardType" label="卡类型" align="center" header-align="center"></el-table-column>
  35. <el-table-column prop="cardNum" label="卡数 " align="center" header-align="center">
  36. <template slot-scope="scope">
  37. {{ scope.row.cardNum }}
  38. </template>
  39. </el-table-column>
  40. <el-table-column prop="updateTime" label="最后更新时间" align="center" header-align="center"></el-table-column>
  41. <el-table-column prop="remark" label="备注" align="left" header-align="center">
  42. <template slot-scope="scope">
  43. {{ scope.row.remark }}
  44. </template>
  45. </el-table-column>
  46. <el-table-column label="操作" align="center" header-align="center" width="80">
  47. <template slot-scope="scope">
  48. <span class="op-btn" @click="showDialog('edit', scope.row)">修改</span>
  49. </template>
  50. </el-table-column>
  51. <template slot="empty">
  52. <span style="font-size: 12px">{{
  53. loading ? '加载中...' : '暂无数据'
  54. }}</span>
  55. </template>
  56. </el-table>
  57. </div>
  58. <div class="__r_p_pagination">
  59. <div style="margin-top: 2rem">
  60. <div class="center">
  61. <el-pagination background @current-change="currentChange" :current-page="pageInfo.curpage"
  62. :page-sizes="pageInfo.pageSizes" :page-size="pageInfo.pageSize"
  63. layout="total, sizes, prev, pager, next, jumper" :total="pageInfo.total">
  64. </el-pagination>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. <QueueDialog :visible.sync="queueDialogShow" :type="queueDialogType" :data="queueDialogData"
  70. @confirm="queueDialogConfirm"></QueueDialog>
  71. </div>
  72. </template>
  73. <script>
  74. import QueueDialog from '../components/QueueDialog.vue';
  75. import { getQueueList } from '~/apis/modules/resources';
  76. import { CLUSTERS, AI_CENTER, COMPUTER_RESOURCES, ACC_CARD_TYPE } from '~/const';
  77. export default {
  78. data() {
  79. return {
  80. selCluster: '',
  81. clusterList: [{ k: '', v: '全部集群' }, ...CLUSTERS],
  82. selComputingCenter: '',
  83. computingCenterList: [{ k: '', v: '全部智算中心' }, ...AI_CENTER],
  84. selComputingType: '',
  85. computingTypeList: [{ k: '', v: '全部计算资源' }, ...COMPUTER_RESOURCES],
  86. selCardType: '',
  87. cardTypeList: [{ k: '', v: '全部卡类型' }, ...ACC_CARD_TYPE],
  88. syncLoading: false,
  89. loading: false,
  90. tableData: [],
  91. pageInfo: {
  92. curpage: 1,
  93. pageSize: 10,
  94. pageSizes: [10],
  95. total: 0,
  96. },
  97. queueDialogShow: false,
  98. queueDialogType: 'add',
  99. queueDialogData: {},
  100. };
  101. },
  102. components: { QueueDialog },
  103. methods: {
  104. getTableData() {
  105. const params = {
  106. cluster: this.selCluster,
  107. computingCenter: this.selComputingCenter,
  108. computingType: this.selComputingType,
  109. cardType: this.selCardType,
  110. curpage: this.pageInfo.curpage,
  111. pagesize: this.pageInfo.pageSize,
  112. };
  113. console.log('params', params);
  114. this.loading = true;
  115. getQueueList(params).then(res => {
  116. this.loading = false;
  117. // const data = res.data.
  118. const data = new Array(20).fill(0).map((_, index) => {
  119. return {
  120. index: index,
  121. id: `id-${index}-${Math.random().toFixed(2)}`,
  122. name: `name-${index}-${Math.random().toFixed(2)}`,
  123. cluster: `cluster-${index}-${Math.random().toFixed(2)}`,
  124. computingCenterId: `computingCenterId-${index}-${Math.random().toFixed(2)}`,
  125. computingCenter: `computingCenter-${index}-${Math.random().toFixed(2)}`,
  126. computingType: `computingType-${index}-${Math.random().toFixed(2)}`,
  127. cardType: `cardType-${index}-${Math.random().toFixed(2)}`,
  128. cardNum: `cardNum-${index}-${Math.random().toFixed(2)}`,
  129. updateTime: `updateTime-${index}-${Math.random().toFixed(2)}`,
  130. remark: `remark-${index}-${Math.random().toFixed(2)}`,
  131. };
  132. });
  133. this.tableData = data;
  134. this.pageInfo.total = 99;
  135. }).catch(err => {
  136. console.log(err);
  137. this.loading = false;
  138. });
  139. },
  140. syncComputerNetwork() {
  141. //
  142. },
  143. selectChange() {
  144. this.pageInfo.curpage = 1;
  145. this.getTableData();
  146. },
  147. currentChange(val) {
  148. this.pageInfo.curpage = val;
  149. this.getTableData();
  150. },
  151. showDialog(type, data) {
  152. this.queueDialogType = type;
  153. this.queueDialogData = data ? { ...data } : {};
  154. this.queueDialogShow = true;
  155. },
  156. queueDialogConfirm() {
  157. this.queueDialogShow = false;
  158. this.getTableData();
  159. }
  160. },
  161. mounted() {
  162. this.getTableData();
  163. },
  164. beforeDestroy() {
  165. },
  166. };
  167. </script>
  168. <style scoped lang="less">
  169. .title {
  170. height: 30px;
  171. display: flex;
  172. align-items: center;
  173. margin-bottom: 5px;
  174. span {
  175. font-weight: 700;
  176. font-size: 16px;
  177. color: rgb(16, 16, 16);
  178. }
  179. }
  180. .tools-bar {
  181. display: flex;
  182. align-items: center;
  183. justify-content: space-between;
  184. margin-bottom: 10px;
  185. .select {
  186. margin-right: 10px;
  187. /deep/ .el-input__inner {
  188. border-radius: 0;
  189. }
  190. }
  191. }
  192. .table-container {
  193. margin-bottom: 16px;
  194. /deep/ .el-table__header {
  195. th {
  196. background: rgb(245, 245, 246);
  197. font-size: 12px;
  198. color: rgb(36, 36, 36);
  199. }
  200. }
  201. /deep/ .el-table__body {
  202. td {
  203. font-size: 12px;
  204. }
  205. }
  206. .op-btn {
  207. cursor: pointer;
  208. font-size: 12px;
  209. color: rgb(25, 103, 252);
  210. margin: 0 5px;
  211. }
  212. }
  213. .center {
  214. display: flex;
  215. justify-content: center;
  216. }
  217. </style>