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.

SceneDialog.vue 6.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <div class="base-dlg">
  3. <BaseDialog :visible.sync="dialogShow" :width="`750px`" :title="type === 'add' ? `新建算力资源应用场景` : '编辑算力资源应用场景'"
  4. @open="open" @opened="opened" @close="close" @closed="closed">
  5. <div class="dlg-content">
  6. <div class="form">
  7. <div class="form-row">
  8. <div class="title required">
  9. <span>应用场景名称</span>
  10. </div>
  11. <div class="content">
  12. <el-input v-model="dataInfo.name" placeholder=""></el-input>
  13. </div>
  14. </div>
  15. <div class="form-row">
  16. <div class="title required">
  17. <span>任务类型</span>
  18. </div>
  19. <div class="content">
  20. <el-select v-model="dataInfo.taskType">
  21. <el-option v-for="item in taskTypeList" :key="item.k" :label="item.v" :value="item.k" />
  22. </el-select>
  23. </div>
  24. </div>
  25. <div class="form-row">
  26. <div class="title required">
  27. <span>是否专属</span>
  28. </div>
  29. <div class="content">
  30. <el-select v-model="dataInfo.isExclusive" @change="changeIsExclusive">
  31. <el-option v-for="item in isExclusiveList" :key="item.k" :label="item.v" :value="item.k" />
  32. </el-select>
  33. </div>
  34. </div>
  35. <div class="form-row" v-if="dataInfo.isExclusive === '1'">
  36. <div class="title required">
  37. <span>专属组织</span>
  38. </div>
  39. <div class="content">
  40. <el-input v-model="dataInfo.exclusiveOrg" placeholder="多个组织名之间用英文分号隔开"></el-input>
  41. </div>
  42. </div>
  43. <div class="form-row">
  44. <div class="title required">
  45. <span>资源池队列</span>
  46. </div>
  47. <div class="content">
  48. <el-select v-model="dataInfo.queue" @change="changeQueue">
  49. <el-option v-for="item in queueList" :key="item.k" :label="item.v" :value="item.k" />
  50. </el-select>
  51. </div>
  52. </div>
  53. <div class="form-row">
  54. <div class="title required">
  55. <span>资源规格</span>
  56. </div>
  57. <div class="content">
  58. <el-select v-model="dataInfo.specs" multiple collapse-tags>
  59. <el-option v-for="item in specsList" :key="item.k" :label="item.v" :value="item.k" />
  60. </el-select>
  61. </div>
  62. </div>
  63. <div class="form-row" style="margin-top: 20px">
  64. <div class="title"></div>
  65. <div class="content">
  66. <el-button type="primary" class="btn confirm-btn" @click="confirm">确定</el-button>
  67. <el-button class="btn" @click="cancel">取消</el-button>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. </BaseDialog>
  73. </div>
  74. </template>
  75. <script>
  76. import BaseDialog from '~/components/BaseDialog.vue';
  77. import { getQueueList } from '~/apis/modules/resources';
  78. export default {
  79. name: "SceneDialog",
  80. props: {
  81. visible: { type: Boolean, default: false },
  82. title: { type: String, default: '' },
  83. type: { type: String, defalut: 'add' },
  84. data: { type: Object, default: () => ({}) },
  85. },
  86. components: {
  87. BaseDialog
  88. },
  89. data() {
  90. return {
  91. dialogShow: false,
  92. dataInfo: {},
  93. taskTypeList: [{ k: '1', v: '调试任务' }, { k: '2', v: '训练任务' }, { k: '3', v: '评测任务' }, { k: '4', v: '推理任务' }],
  94. isExclusiveList: [{ k: '', v: '否' }, { k: '1', v: '是' }],
  95. queueList: [{ k: '1', v: '资源池1' }, { k: '2', v: '资源池2' }],
  96. specsList: [{ k: '1', v: 'spec1' }, { k: '2', v: 'spec2' }, { k: '3', v: 'spec3' }, { k: '4', v: 'spec4' }, { k: '5', v: 'spec5' }, { k: '6', v: 'spec6' }],
  97. };
  98. },
  99. watch: {
  100. visible: function (val) {
  101. this.dialogShow = val;
  102. },
  103. },
  104. methods: {
  105. resetDataInfo() {
  106. this.dataInfo = {
  107. id: '',
  108. name: '',
  109. taskType: '',
  110. isExclusive: '',
  111. exclusiveOrg: '',
  112. queue: '',
  113. specs: ['2', '3'],
  114. }
  115. },
  116. changeIsExclusive() {
  117. this.dataInfo.exclusiveOrg = '';
  118. },
  119. changeQueue() {
  120. },
  121. open() {
  122. this.resetDataInfo();
  123. if (this.type === 'add') {
  124. //
  125. } else if (this.type === 'edit') {
  126. this.dataInfo = Object.assign(this.dataInfo, { ...this.data });
  127. }
  128. console.log('open', this.type, this.data);
  129. this.$emit("open");
  130. },
  131. opened() {
  132. this.$emit("opened");
  133. },
  134. close() {
  135. this.$emit("close");
  136. },
  137. closed() {
  138. this.$emit("closed");
  139. this.$emit("update:visible", false);
  140. },
  141. confirm() {
  142. console.log(this.dataInfo);
  143. },
  144. cancel() {
  145. this.dialogShow = false;
  146. this.$emit("update:visible", false);
  147. }
  148. },
  149. mounted() {
  150. this.resetDataInfo();
  151. },
  152. };
  153. </script>
  154. <style scoped lang="less">
  155. .dlg-content {
  156. margin: 20px 0 25px 0;
  157. display: flex;
  158. justify-content: center;
  159. .form {
  160. width: 600px;
  161. .form-row {
  162. display: flex;
  163. min-height: 42px;
  164. margin-bottom: 4px;
  165. .title {
  166. width: 160px;
  167. display: flex;
  168. justify-content: flex-end;
  169. align-items: center;
  170. margin-right: 20px;
  171. color: rgb(136, 136, 136);
  172. font-size: 14px;
  173. &.required {
  174. span {
  175. position: relative;
  176. }
  177. span::after {
  178. position: absolute;
  179. right: -10px;
  180. top: -2px;
  181. vertical-align: top;
  182. content: '*';
  183. color: #db2828;
  184. }
  185. }
  186. }
  187. .content {
  188. width: 300px;
  189. display: flex;
  190. align-items: center;
  191. /deep/ .el-select {
  192. width: 100%;
  193. }
  194. }
  195. }
  196. }
  197. .btn {
  198. color: rgb(2, 0, 4);
  199. background-color: rgb(194, 199, 204);
  200. border-color: rgb(194, 199, 204);
  201. &.confirm-btn {
  202. color: #fff;
  203. background-color: rgb(56, 158, 13);
  204. border-color: rgb(56, 158, 13);
  205. }
  206. }
  207. }
  208. </style>