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.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 style="min-height:600px;">
  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="80"></el-table-column>
  28. <el-table-column prop="QueueCode" label="资源池(队列)名称" align="center" header-align="center"></el-table-column>
  29. <el-table-column prop="ClusterName" label="所属集群" align="center" header-align="center">
  30. <template slot-scope="scope">
  31. <span :title="scope.row.Cluster">{{ scope.row.ClusterName }}</span>
  32. </template>
  33. </el-table-column>
  34. <el-table-column prop="AiCenterCode" label="智算中心ID" align="center" header-align="center"></el-table-column>
  35. <el-table-column prop="AiCenterName" label="智算中心" align="center" header-align="center"></el-table-column>
  36. <el-table-column prop="ComputeResourceName" label="计算资源" align="center" header-align="center">
  37. </el-table-column>
  38. <el-table-column prop="AccCardTypeName" label="卡类型" align="center" header-align="center"></el-table-column>
  39. <el-table-column prop="CardsTotalNum" label="卡数 " align="center" header-align="center"></el-table-column>
  40. <el-table-column prop="UpdatedTimeStr" label="最后更新时间" align="center" header-align="center"></el-table-column>
  41. <el-table-column prop="Remark" label="备注" align="left" header-align="center" min-width="160">
  42. </el-table-column>
  43. <el-table-column label="操作" align="center" header-align="center" width="80">
  44. <template slot-scope="scope">
  45. <span class="op-btn" @click="showDialog('edit', scope.row)">修改</span>
  46. </template>
  47. </el-table-column>
  48. <template slot="empty">
  49. <span style="font-size: 12px">{{
  50. loading ? '加载中...' : '暂无数据'
  51. }}</span>
  52. </template>
  53. </el-table>
  54. </div>
  55. <div class="__r_p_pagination">
  56. <div style="margin-top: 2rem">
  57. <div class="center">
  58. <el-pagination background @current-change="currentChange" :current-page="pageInfo.curpage"
  59. :page-sizes="pageInfo.pageSizes" :page-size="pageInfo.pageSize"
  60. layout="total, sizes, prev, pager, next, jumper" :total="pageInfo.total">
  61. </el-pagination>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. <QueueDialog :visible.sync="queueDialogShow" :type="queueDialogType" :data="queueDialogData"
  67. @confirm="queueDialogConfirm"></QueueDialog>
  68. </div>
  69. </template>
  70. <script>
  71. import QueueDialog from '../components/QueueDialog.vue';
  72. import { getResQueueList, addResQueue, updateResQueue } from '~/apis/modules/resources';
  73. import { CLUSTERS, AI_CENTER, COMPUTER_RESOURCES, ACC_CARD_TYPE } from '~/const';
  74. import { getListValueWithKey } from '~/utils';
  75. import { formatDate } from 'element-ui/lib/utils/date-util';
  76. export default {
  77. data() {
  78. return {
  79. selCluster: '',
  80. clusterList: [{ k: '', v: '全部集群' }, ...CLUSTERS],
  81. selComputingCenter: '',
  82. computingCenterList: [{ k: '', v: '全部智算中心' }, ...AI_CENTER],
  83. selComputingType: '',
  84. computingTypeList: [{ k: '', v: '全部计算资源' }, ...COMPUTER_RESOURCES],
  85. selCardType: '',
  86. cardTypeList: [{ k: '', v: '全部卡类型' }, ...ACC_CARD_TYPE],
  87. syncLoading: false,
  88. loading: false,
  89. tableData: [],
  90. pageInfo: {
  91. curpage: 1,
  92. pageSize: 10,
  93. pageSizes: [10],
  94. total: 0,
  95. },
  96. queueDialogShow: false,
  97. queueDialogType: 'add',
  98. queueDialogData: {},
  99. };
  100. },
  101. components: { QueueDialog },
  102. methods: {
  103. getTableData() {
  104. const params = {
  105. cluster: this.selCluster,
  106. center: this.selComputingCenter,
  107. resource: this.selComputingType,
  108. card: this.selCardType,
  109. curpage: this.pageInfo.curpage,
  110. pagesize: this.pageInfo.pageSize,
  111. };
  112. this.loading = true;
  113. getResQueueList(params).then(res => {
  114. this.loading = false;
  115. res = res.data;
  116. if (res.Code === 0) {
  117. const list = res.Data.List;
  118. const data = list.map((item) => {
  119. return {
  120. ...item,
  121. ClusterName: getListValueWithKey(this.clusterList, item.Cluster),
  122. AiCenterName: getListValueWithKey(this.computingCenterList, item.AiCenterCode),
  123. ComputeResourceName: getListValueWithKey(this.computingTypeList, item.ComputeResource),
  124. AccCardTypeName: getListValueWithKey(this.cardTypeList, item.AccCardType),
  125. UpdatedTimeStr: formatDate(new Date(item.UpdatedTime * 1000), 'yyyy-MM-dd HH:mm:ss'),
  126. }
  127. });
  128. this.tableData = data;
  129. this.pageInfo.total = res.Data.TotalSize;
  130. }
  131. }).catch(err => {
  132. console.log(err);
  133. this.loading = false;
  134. });
  135. },
  136. syncComputerNetwork() {
  137. //
  138. },
  139. selectChange() {
  140. this.pageInfo.curpage = 1;
  141. this.getTableData();
  142. },
  143. currentChange(val) {
  144. this.pageInfo.curpage = val;
  145. this.getTableData();
  146. },
  147. showDialog(type, data) {
  148. this.queueDialogType = type;
  149. this.queueDialogData = data ? { ...data } : {};
  150. this.queueDialogShow = true;
  151. },
  152. queueDialogConfirm() {
  153. this.queueDialogShow = false;
  154. this.getTableData();
  155. }
  156. },
  157. mounted() {
  158. this.getTableData();
  159. },
  160. beforeDestroy() {
  161. },
  162. };
  163. </script>
  164. <style scoped lang="less">
  165. .title {
  166. height: 30px;
  167. display: flex;
  168. align-items: center;
  169. margin-bottom: 5px;
  170. span {
  171. font-weight: 700;
  172. font-size: 16px;
  173. color: rgb(16, 16, 16);
  174. }
  175. }
  176. .tools-bar {
  177. display: flex;
  178. align-items: center;
  179. justify-content: space-between;
  180. margin-bottom: 10px;
  181. .select {
  182. margin-right: 10px;
  183. /deep/ .el-input__inner {
  184. border-radius: 0;
  185. }
  186. }
  187. }
  188. .table-container {
  189. margin-bottom: 16px;
  190. /deep/ .el-table__header {
  191. th {
  192. background: rgb(245, 245, 246);
  193. font-size: 12px;
  194. color: rgb(36, 36, 36);
  195. }
  196. }
  197. /deep/ .el-table__body {
  198. td {
  199. font-size: 12px;
  200. }
  201. }
  202. .op-btn {
  203. cursor: pointer;
  204. font-size: 12px;
  205. color: rgb(25, 103, 252);
  206. margin: 0 5px;
  207. }
  208. }
  209. .center {
  210. display: flex;
  211. justify-content: center;
  212. }
  213. </style>