dashboard-shell-shell 1.0.1000000116 → 1.0.1000000117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/assets/images/action.svg +6 -0
  2. package/assets/images/pl/logo.png +0 -0
  3. package/assets/styles/base/_functions.scss +0 -0
  4. package/assets/styles/base/_mixins.scss +1 -1
  5. package/assets/styles/global/_button.scss +17 -10
  6. package/assets/styles/global/_form.scss +2 -2
  7. package/assets/styles/global/_labeled-input.scss +6 -2
  8. package/assets/styles/global/_select.scss +6 -7
  9. package/assets/styles/global/_table.scss +3 -2
  10. package/assets/styles/global/_tooltip.scss +8 -1
  11. package/assets/styles/themes/_dark.scss +2 -0
  12. package/assets/styles/themes/_light.scss +5 -2
  13. package/assets/styles/vendor/vue-select.scss +2 -1
  14. package/assets/translations/en-us.yaml +1 -3
  15. package/assets/translations/zh-hans.yaml +51 -28
  16. package/components/ActionDropdown.vue +1 -0
  17. package/components/ActionMenuShell.vue +6 -3
  18. package/components/BrandImage.vue +22 -0
  19. package/components/ClusterIconMenu.vue +1 -1
  20. package/components/CodeMirror.vue +1 -0
  21. package/components/CruResource.vue +1 -1
  22. package/components/CruResourceFooter.vue +1 -1
  23. package/components/ExplorerProjectsNamespaces.vue +4 -24
  24. package/components/GlobalRoleBindings.vue +112 -48
  25. package/components/IndentedPanel.vue +4 -10
  26. package/components/PromptRemove.vue +3 -3
  27. package/components/ResourceDetail/Masthead.vue +190 -242
  28. package/components/ResourceDetail/index.vue +20 -5
  29. package/components/ResourceList/Masthead.vue +146 -84
  30. package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
  31. package/components/ResourceTable.vue +76 -1
  32. package/components/SideNav.vue +66 -29
  33. package/components/SortableTable/THead.vue +6 -0
  34. package/components/SortableTable/index.vue +481 -388
  35. package/components/Tabbed/index.vue +4 -5
  36. package/components/auth/Principal.vue +3 -2
  37. package/components/auth/RoleDetailEdit.vue +58 -5
  38. package/components/auth/SelectPrincipal.vue +1 -0
  39. package/components/form/BannerSettings.vue +18 -16
  40. package/components/form/ChangePassword.vue +4 -4
  41. package/components/form/ColorInput.vue +32 -8
  42. package/components/form/Footer.vue +1 -1
  43. package/components/form/InputWithSelect.vue +2 -0
  44. package/components/form/KeyValue.vue +31 -7
  45. package/components/form/LabeledSelect.vue +178 -178
  46. package/components/form/Members/ClusterPermissionsEditor.vue +1 -2
  47. package/components/form/Members/MembershipEditor.vue +1 -1
  48. package/components/form/NameNsDescription.vue +24 -11
  49. package/components/form/Password.vue +6 -2
  50. package/components/form/ResourceQuota/Namespace.vue +1 -1
  51. package/components/form/ResourceQuota/NamespaceRow.vue +13 -10
  52. package/components/form/ResourceQuota/ProjectRow.vue +0 -1
  53. package/components/form/Select.vue +2 -2
  54. package/components/nav/Favorite.vue +5 -1
  55. package/components/nav/Group.vue +69 -23
  56. package/components/nav/Header.vue +82 -17
  57. package/components/nav/HeaderPageActionMenu.vue +1 -0
  58. package/components/nav/NamespaceFilter.vue +0 -3
  59. package/components/nav/TopLevelMenu.vue +182 -119
  60. package/components/nav/Type.vue +48 -11
  61. package/composables/useClickOutside.ts +1 -1
  62. package/config/product/auth.js +16 -7
  63. package/config/product/explorer.js +1 -1
  64. package/config/product/settings.js +17 -8
  65. package/config/settings.ts +28 -0
  66. package/edit/management.cattle.io.user.vue +17 -4
  67. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  68. package/edit/token.vue +1 -1
  69. package/list/harvesterhci.io.management.cluster.vue +17 -0
  70. package/list/management.cattle.io.setting.vue +22 -13
  71. package/list/management.cattle.io.user.vue +25 -14
  72. package/list/provisioning.cattle.io.cluster.vue +6 -7
  73. package/mixins/brand.js +17 -0
  74. package/package.json +1 -1
  75. package/pages/auth/login.vue +84 -29
  76. package/pages/c/_cluster/auth/roles/index.vue +61 -14
  77. package/pages/c/_cluster/settings/banners.vue +174 -101
  78. package/pages/c/_cluster/settings/brand.vue +348 -301
  79. package/pages/c/_cluster/settings/performance.vue +61 -38
  80. package/pages/home.vue +70 -21
  81. package/pages/prefs.vue +25 -23
  82. package/pkg/tsconfig.json +9 -9
  83. package/pkg/vue.config.js +1 -1
  84. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  85. package/scripts/clean +0 -0
  86. package/scripts/extension/bundle +0 -0
  87. package/scripts/extension/helm/scripts/package +0 -0
  88. package/scripts/extension/helm/scripts/patch +0 -0
  89. package/scripts/extension/helm/scripts/version +0 -0
  90. package/scripts/extension/helmpatch +0 -0
  91. package/scripts/extension/parse-tag-name +0 -0
  92. package/scripts/extension/publish +0 -0
  93. package/scripts/publish-shell.sh +86 -60
  94. package/scripts/serve-pkgs +0 -0
  95. package/scripts/sync-shell-deps +0 -0
  96. package/scripts/typegen.sh +44 -28
  97. package/store/i18n.js +5 -5
  98. package/store/prefs.js +17 -5
  99. package/store/type-map.js +2 -1
  100. package/types/shell/index.d.ts +1 -1
  101. package/utils/error.js +4 -0
  102. package/utils/router.js +3 -3
  103. package/vue.config.js +1 -6
  104. package/components/rancherResourceDetail/Masthead.vue +0 -769
  105. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +0 -65
  106. package/components/rancherResourceDetail/index.vue +0 -591
  107. package/components/rancherResourceList/Masthead.vue +0 -375
  108. package/components/rancherResourceList/ResourceLoadingIndicator.vue +0 -140
  109. package/components/rancherResourceList/index.vue +0 -307
  110. package/components/rancherResourceList/resource-list.config.js +0 -7
  111. package/components/rancherResourceTable.vue +0 -783
  112. package/components/rancherSortableTable/THead.vue +0 -561
  113. package/components/rancherSortableTable/actions.js +0 -153
  114. package/components/rancherSortableTable/advanced-filtering.js +0 -272
  115. package/components/rancherSortableTable/debug.js +0 -117
  116. package/components/rancherSortableTable/filtering.js +0 -290
  117. package/components/rancherSortableTable/grouping.js +0 -48
  118. package/components/rancherSortableTable/index.vue +0 -2712
  119. package/components/rancherSortableTable/paging.js +0 -155
  120. package/components/rancherSortableTable/selection.js +0 -629
  121. package/components/rancherSortableTable/sortable-config.ts +0 -4
  122. package/components/rancherSortableTable/sorting.js +0 -129
  123. package/types/cloud-shell/index.d.ts +0 -11014
  124. /package/components/{rancherResourceList → ResourceList}/Masthead-btn.vue +0 -0
@@ -290,7 +290,7 @@ export default {
290
290
  </script>
291
291
 
292
292
  <template>
293
- <div style="display: flex;">
293
+ <div style="display: flex;">
294
294
  <div
295
295
  :class="{ 'labeled-container': true, raised, empty, [mode]: true, 'is-lable': isLabel }"
296
296
  :style="{ border: 'none', width: selectWidth===''?'160px':selectWidth,lineHeight: '32px' }"
@@ -309,196 +309,196 @@ export default {
309
309
  </label>
310
310
  </div>
311
311
  <!-- label -->
312
- <div
313
- ref="select"
314
- class="labeled-select"
315
- :class="[
316
- $attrs.class,
317
- {
318
- disabled: isView || disabled,
319
- focused,
320
- [mode]: true,
321
- [status]: status,
322
- taggable: $attrs.taggable,
323
- taggable: $attrs.multiple,
324
- hoverable: hoverTooltip,
325
- 'compact-input': isCompact,
326
- 'no-label': !hasLabel
327
- }
328
- ]"
329
- :tabindex="isView || disabled ? -1 : 0"
330
- role="listbox"
331
- @click="focusSearch"
332
- @keydown.enter="focusSearch"
333
- @keydown.down.prevent="focusSearch"
334
- @keydown.space.prevent="focusSearch"
335
- >
336
- <!-- <div
337
- :class="{ 'labeled-container': true, raised, empty, [mode]: true }"
338
- :style="{ border: 'none' }"
312
+ <div
313
+ ref="select"
314
+ class="labeled-select"
315
+ :class="[
316
+ $attrs.class,
317
+ {
318
+ disabled: isView || disabled,
319
+ focused,
320
+ [mode]: true,
321
+ [status]: status,
322
+ taggable: $attrs.taggable,
323
+ taggable: $attrs.multiple,
324
+ hoverable: hoverTooltip,
325
+ 'compact-input': isCompact,
326
+ 'no-label': !hasLabel
327
+ }
328
+ ]"
329
+ :tabindex="isView || disabled ? -1 : 0"
330
+ role="listbox"
331
+ @click="focusSearch"
332
+ @keydown.enter="focusSearch"
333
+ @keydown.down.prevent="focusSearch"
334
+ @keydown.space.prevent="focusSearch"
339
335
  >
340
- <label
341
- v-if="hasLabel"
342
- :id="`labeled-select-uid-${uid}`"
336
+ <!-- <div
337
+ :class="{ 'labeled-container': true, raised, empty, [mode]: true }"
338
+ :style="{ border: 'none' }"
343
339
  >
344
- <t
345
- v-if="labelKey"
346
- :k="labelKey"
347
- />
348
- <template v-else-if="label">{{ label }}</template>
349
-
350
- <span
351
- v-if="requiredField"
352
- class="required"
353
- >*</span>
354
- </label>
355
- </div> -->
356
- <v-select
357
- ref="select-input"
358
- :aria-labelledby="hasLabel ? `labeled-select-uid-${uid}` : ''"
359
- v-bind="filteredAttrs"
360
- class="inline"
361
- :append-to-body="appendToBody"
362
- :calculate-position="positionDropdown"
363
- :class="{ 'no-label': !(label || '').length}"
364
- :clearable="clearable"
365
- :disabled="isView || disabled || loading"
366
- :get-option-key="getOptionKey"
367
- :get-option-label="(opt) => getOptionLabel(opt)"
368
- :label="optionLabel"
369
- :options="_options"
370
- :map-keydown="mappedKeys"
371
- :placeholder="placeholder"
372
- :reduce="(x) => reduce(x)"
373
- :filterable="isFilterable"
374
- :searchable="isSearchable"
375
- :selectable="selectable"
376
- :modelValue="value != null && !loading ? value : ''"
377
- :dropdown-should-open="dropdownShouldOpen"
378
- :tabindex="-1"
379
- role="listitem"
380
- @update:modelValue="$emit('selecting', $event); $emit('update:value', $event)"
381
- @search:blur="onBlur"
382
- @search:focus="onFocus"
383
- @search="onSearch"
384
- @open="onOpen"
385
- @close="onClose"
386
- @option:selecting="$emit('selecting', $event)"
387
- @option:deselecting="$emit('deselecting', $event)"
388
- >
389
-
390
- <template #option="option">
391
- <template v-if="showTagPrompts">
392
- <div class="only-user-opts">
393
- {{ t('labeledSelect.pressEnter', {input:getOptionLabel(option.label)}) }}
394
- </div>
395
- </template>
396
- <template v-else-if="option.kind === 'group'">
397
- <div class="vs__option-kind-group">
340
+ <label
341
+ v-if="hasLabel"
342
+ :id="`labeled-select-uid-${uid}`"
343
+ >
344
+ <t
345
+ v-if="labelKey"
346
+ :k="labelKey"
347
+ />
348
+ <template v-else-if="label">{{ label }}</template>
349
+
350
+ <span
351
+ v-if="requiredField"
352
+ class="required"
353
+ >*</span>
354
+ </label>
355
+ </div> -->
356
+ <v-select
357
+ ref="select-input"
358
+ :aria-labelledby="hasLabel ? `labeled-select-uid-${uid}` : ''"
359
+ v-bind="filteredAttrs"
360
+ class="inline"
361
+ :append-to-body="appendToBody"
362
+ :calculate-position="positionDropdown"
363
+ :class="{ 'no-label': !(label || '').length}"
364
+ :clearable="clearable"
365
+ :disabled="isView || disabled || loading"
366
+ :get-option-key="getOptionKey"
367
+ :get-option-label="(opt) => getOptionLabel(opt)"
368
+ :label="optionLabel"
369
+ :options="_options"
370
+ :map-keydown="mappedKeys"
371
+ :placeholder="placeholder"
372
+ :reduce="(x) => reduce(x)"
373
+ :filterable="isFilterable"
374
+ :searchable="isSearchable"
375
+ :selectable="selectable"
376
+ :modelValue="value != null && !loading ? value : ''"
377
+ :dropdown-should-open="dropdownShouldOpen"
378
+ :tabindex="-1"
379
+ role="listitem"
380
+ @update:modelValue="$emit('selecting', $event); $emit('update:value', $event)"
381
+ @search:blur="onBlur"
382
+ @search:focus="onFocus"
383
+ @search="onSearch"
384
+ @open="onOpen"
385
+ @close="onClose"
386
+ @option:selecting="$emit('selecting', $event)"
387
+ @option:deselecting="$emit('deselecting', $event)"
388
+ >
389
+
390
+ <template #option="option">
391
+ <template v-if="showTagPrompts">
392
+ <div class="only-user-opts">
393
+ {{ t('labeledSelect.pressEnter', {input:getOptionLabel(option.label)}) }}
394
+ </div>
395
+ </template>
396
+ <template v-else-if="option.kind === 'group'">
397
+ <div class="vs__option-kind-group">
398
+ <i
399
+ v-if="option.icon"
400
+ class="icon"
401
+ :class="{ [option.icon]: true}"
402
+ />
403
+ <b>{{ getOptionLabel(option) }}</b>
404
+ <div v-if="option.badge">
405
+ {{ option.badge }}
406
+ </div>
407
+ </div>
408
+ </template>
409
+ <!-- <template v-else-if="option.kind === 'divider'">
410
+ <hr role="none">
411
+ </template> -->
412
+ <template v-else-if="option.kind === 'highlighted'">
413
+ <div class="option-kind-highlighted">
414
+ {{ option.label }}
415
+ </div>
416
+ </template>
417
+ <div
418
+ v-else
419
+ class="vs__option-kind"
420
+ :class="{ 'has-icon' : hasGroupIcon}"
421
+ @mousedown="(e) => onClickOption(option, e)"
422
+ >
423
+ {{ getOptionLabel(option) }}
398
424
  <i
399
- v-if="option.icon"
400
- class="icon"
401
- :class="{ [option.icon]: true}"
425
+ v-if="option.error"
426
+ class="icon icon-warning pull-right"
427
+ style="font-size: 20px;"
402
428
  />
403
- <b>{{ getOptionLabel(option) }}</b>
404
- <div v-if="option.badge">
405
- {{ option.badge }}
406
- </div>
407
429
  </div>
408
430
  </template>
409
- <!-- <template v-else-if="option.kind === 'divider'">
410
- <hr role="none">
411
- </template> -->
412
- <template v-else-if="option.kind === 'highlighted'">
413
- <div class="option-kind-highlighted">
414
- {{ option.label }}
415
- </div>
416
- </template>
417
- <div
418
- v-else
419
- class="vs__option-kind"
420
- :class="{ 'has-icon' : hasGroupIcon}"
421
- @mousedown="(e) => onClickOption(option, e)"
431
+ <!-- Pass down templates provided by the caller -->
432
+ <template
433
+ v-for="(_, slot) of $slots"
434
+ :key="slot"
435
+ #[slot]="scope"
422
436
  >
423
- {{ getOptionLabel(option) }}
424
- <i
425
- v-if="option.error"
426
- class="icon icon-warning pull-right"
427
- style="font-size: 20px;"
437
+ <slot
438
+ :name="slot"
439
+ v-bind="scope"
428
440
  />
429
- </div>
430
- </template>
431
- <!-- Pass down templates provided by the caller -->
432
- <template
433
- v-for="(_, slot) of $slots"
434
- :key="slot"
435
- #[slot]="scope"
436
- >
437
- <slot
438
- :name="slot"
439
- v-bind="scope"
440
- />
441
- </template>
441
+ </template>
442
442
 
443
- <template #list-footer>
444
- <div
445
- v-if="canPaginate && totalResults && pages > 1"
446
- class="pagination-slot"
447
- >
448
- <div class="load-more">
449
- <i
450
- v-if="paginating"
451
- class="icon icon-spinner icon-spin"
452
- />
453
- <div v-else>
454
- <a
455
- v-if="canLoadMore"
456
- @click="loadMore"
457
- > {{ t('labelSelect.pagination.more') }}</a>
443
+ <template #list-footer>
444
+ <div
445
+ v-if="canPaginate && totalResults && pages > 1"
446
+ class="pagination-slot"
447
+ >
448
+ <div class="load-more">
449
+ <i
450
+ v-if="paginating"
451
+ class="icon icon-spinner icon-spin"
452
+ />
453
+ <div v-else>
454
+ <a
455
+ v-if="canLoadMore"
456
+ @click="loadMore"
457
+ > {{ t('labelSelect.pagination.more') }}</a>
458
+ </div>
458
459
  </div>
459
- </div>
460
460
 
461
- <div class="count">
462
- {{ optionCounts }}
461
+ <div class="count">
462
+ {{ optionCounts }}
463
+ </div>
463
464
  </div>
464
- </div>
465
- </template>
466
- <template #no-options="{ search }">
467
- <div class="no-options-slot">
468
- <template v-if="showTagPrompts">
469
- <span v-if="!searching">{{ t('labeledSelect.startTyping') }}</span>
470
- </template>
471
- <div
472
- v-else-if="paginating"
473
- class="paginating"
474
- >
475
- <i class="icon icon-spinner icon-spin" />
465
+ </template>
466
+ <template #no-options="{ search }">
467
+ <div class="no-options-slot">
468
+ <template v-if="showTagPrompts">
469
+ <span v-if="!searching">{{ t('labeledSelect.startTyping') }}</span>
470
+ </template>
471
+ <div
472
+ v-else-if="paginating"
473
+ class="paginating"
474
+ >
475
+ <i class="icon icon-spinner icon-spin" />
476
+ </div>
477
+ <template v-else-if="search">
478
+ {{ t('labelSelect.noOptions.noMatch') }}
479
+ </template>
480
+ <template v-else>
481
+ {{ t(noOptionsLabelKey) }}
482
+ </template>
476
483
  </div>
477
- <template v-else-if="search">
478
- {{ t('labelSelect.noOptions.noMatch') }}
479
- </template>
480
- <template v-else>
481
- {{ t(noOptionsLabelKey) }}
482
- </template>
483
- </div>
484
- </template>
485
- </v-select>
486
- <i
487
- v-if="loading"
488
- class="icon icon-spinner icon-spin icon-lg"
489
- />
490
- <LabeledTooltip
491
- v-if="tooltip && !focused"
492
- :hover="hoverTooltip"
493
- :value="tooltip"
494
- :status="status"
495
- />
496
- <LabeledTooltip
497
- v-if="!!validationMessage"
498
- :hover="hoverTooltip"
499
- :value="validationMessage"
500
- />
501
- </div>
484
+ </template>
485
+ </v-select>
486
+ <i
487
+ v-if="loading"
488
+ class="icon icon-spinner icon-spin icon-lg"
489
+ />
490
+ <LabeledTooltip
491
+ v-if="tooltip && !focused"
492
+ :hover="hoverTooltip"
493
+ :value="tooltip"
494
+ :status="status"
495
+ />
496
+ <LabeledTooltip
497
+ v-if="!!validationMessage"
498
+ :hover="hoverTooltip"
499
+ :value="validationMessage"
500
+ />
501
+ </div>
502
502
  </div>
503
503
  </template>
504
504
 
@@ -232,11 +232,10 @@ export default {
232
232
  v-else
233
233
  class="cluster-permissions-editor"
234
234
  >
235
- <div class="row mt-10">
235
+ <div class="row mt-10 mb-20">
236
236
  <div class="col span-12">
237
237
  <SelectPrincipal
238
238
  v-focus
239
- class="mb-20"
240
239
  :mode="mode"
241
240
  :retain-selection="true"
242
241
  data-testid="cluster-member-select"
@@ -170,7 +170,7 @@ export default {
170
170
  >
171
171
  <template #column-headers>
172
172
  <div class="box mb-0">
173
- <div class="column-headers row">
173
+ <div class="column-headers row" style="width: 95%;">
174
174
  <div class="col span-6">
175
175
  <label class="text-label">{{ t('membershipEditor.user') }}</label>
176
176
  </div>
@@ -356,7 +356,7 @@ export default {
356
356
 
357
357
  colSpan() {
358
358
  if (!this.horizontal) {
359
- return `span-6`;
359
+ return `span-5`;
360
360
  }
361
361
  // Name and namespace take up two columns.
362
362
  // let cols = (this.nameNsHidden ? 0 : 2) + (this.descriptionHidden ? 0 : 1) + this.extraColumns.length;
@@ -430,12 +430,17 @@ export default {
430
430
 
431
431
  <template>
432
432
  <div class="row">
433
+
434
+ <!-- 命名空间创建输入框 -->
433
435
  <div
434
436
  v-if="namespaced && !nameNsHidden && createNamespace"
435
437
  :data-testid="componentTestid + '-namespace-create'"
436
- class="col span-6"
437
- :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
438
+ class="col span-5"
439
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-5'"
440
+ style="display: flex;"
438
441
  >
442
+
443
+ <!-- 输入命名空间名称 -->
439
444
  <LabeledInput
440
445
  ref="namespaceInput"
441
446
  v-model:value="namespace"
@@ -447,6 +452,8 @@ export default {
447
452
  :required="nameRequired"
448
453
  :rules="rules.namespace"
449
454
  />
455
+
456
+ <!-- 取消创建命名空间按钮 -->
450
457
  <button
451
458
  aria="Cancel create"
452
459
  @click="cancelCreateNamespace"
@@ -457,10 +464,12 @@ export default {
457
464
  />
458
465
  </button>
459
466
  </div>
467
+
468
+ <!-- 命名空间选择下拉框 -->
460
469
  <div
461
470
  v-if="namespaced && !nameNsHidden && !createNamespace"
462
471
  :data-testid="componentTestid + '-namespace'"
463
- :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
472
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-5'"
464
473
  >
465
474
  <LabeledSelect
466
475
  v-show="!createNamespace"
@@ -479,6 +488,7 @@ export default {
479
488
  />
480
489
  </div>
481
490
 
491
+ <!-- 名称输入框 -->
482
492
  <div
483
493
  v-if="!nameNsHidden"
484
494
  :data-testid="componentTestid + '-name'"
@@ -499,12 +509,15 @@ export default {
499
509
  />
500
510
  </div>
501
511
 
512
+ <!-- 自定义插槽,可插入额外内容 -->
502
513
  <slot name="customize" />
503
514
  <!-- <div
504
515
  v-show="!descriptionHidden"
505
516
  :data-testid="componentTestid + '-description'"
506
- :class="['col', extraColumns.length > 0 ? 'span-3' : 'span-6']"
517
+ :class="['col', extraColumns.length > 0 ? 'span-3' : 'span-5']"
507
518
  > -->
519
+
520
+ <!-- 额外的动态列 -->
508
521
  <div
509
522
  v-for="(slot, i) in extraColumns"
510
523
  :key="i"
@@ -512,6 +525,8 @@ export default {
512
525
  >
513
526
  <slot :name="slot" />
514
527
  </div>
528
+
529
+ <!-- 描述输入框 -->
515
530
  <div
516
531
  v-show="!descriptionHidden"
517
532
  :data-testid="componentTestid + '-description'"
@@ -529,12 +544,15 @@ export default {
529
544
  />
530
545
  </div>
531
546
 
547
+ <!-- 底部插槽 -->
532
548
  <div
533
549
  v-if="$slots.bottom"
534
550
  style="width: 100%;"
535
551
  >
536
552
  <slot name="bottom" />
537
553
  </div>
554
+
555
+ <!-- 间隔占位符 -->
538
556
  <div
539
557
  v-if="showSpacer"
540
558
  class="spacer"
@@ -545,13 +563,8 @@ export default {
545
563
  <style lang="scss" scoped>
546
564
  button {
547
565
  all: unset;
548
- height: 0;
549
- position: relative;
550
- top: -35px;
551
- float: right;
552
- margin-right: 7px;
553
-
554
566
  cursor: pointer;
567
+ margin-left: 10px;
555
568
 
556
569
  .align-value {
557
570
  padding-top: 7px;
@@ -153,12 +153,13 @@ export default {
153
153
  </LabeledInput>
154
154
  <div
155
155
  v-if="isRandom"
156
- class="mt-10 genPassword"
156
+ class="genPassword"
157
157
  >
158
158
  <a
159
159
  href="#"
160
160
  @click.prevent.stop="generatePassword"
161
- ><i class="icon icon-refresh" /> {{ t('changePassword.newGeneratedPassword') }}</a>
161
+ style="height: 32px;display: flex;align-items: center;"
162
+ ><i class="icon icon-refresh mr-5 pl-5" /> {{ t('changePassword.newGeneratedPassword') }}</a>
162
163
  </div>
163
164
  </div>
164
165
  </template>
@@ -170,6 +171,9 @@ export default {
170
171
 
171
172
  .labeled-input {
172
173
  .addon {
174
+ position: absolute;
175
+ top: 6px;
176
+ right: 6px;
173
177
  /* display: flex;
174
178
  align-items: center;
175
179
  justify-content: center;
@@ -78,7 +78,7 @@ export default {
78
78
  <div style="width: 400px;">
79
79
  <label>{{ t('resourceQuota.headers.projectResourceAvailability') }}</label>
80
80
  </div>
81
- <div style="width: 400px;">
81
+ <div style="width: 500px;">
82
82
  <label>{{ t('resourceQuota.headers.limit') }}</label>
83
83
  </div>
84
84
  </div>
@@ -190,16 +190,18 @@ export default {
190
190
  :color-stops="{'100': '--primary'}"
191
191
  />
192
192
  </div>
193
- <UnitInput
194
- :value="value.limit[type]"
195
- :mode="mode"
196
- :placeholder="typeOption.placeholder"
197
- :increment="typeOption.increment"
198
- :input-exponent="typeOption.inputExponent"
199
- :base-unit="typeOption.baseUnit"
200
- :output-modifier="true"
201
- @update:value="update"
202
- />
193
+ <div style="width: 500px;">
194
+ <UnitInput
195
+ :value="value.limit[type]"
196
+ :mode="mode"
197
+ :placeholder="typeOption.placeholder"
198
+ :increment="typeOption.increment"
199
+ :input-exponent="typeOption.inputExponent"
200
+ :base-unit="typeOption.baseUnit"
201
+ :output-modifier="true"
202
+ @update:value="update"
203
+ />
204
+ </div>
203
205
  </div>
204
206
  </template>
205
207
 
@@ -208,6 +210,7 @@ export default {
208
210
  align-self: center;
209
211
  }
210
212
  .rowNew {
213
+ margin-bottom: 10px;
211
214
  display: flex;
212
215
  justify-content: space-between;
213
216
 
@@ -70,7 +70,6 @@ export default {
70
70
  <template>
71
71
  <div
72
72
  v-if="typeOption"
73
- style="justify-content: right;"
74
73
  class="rowNew"
75
74
  >
76
75
  <Select
@@ -372,8 +372,8 @@ export default {
372
372
  }
373
373
 
374
374
  :deep() .labeled-tooltip.error .status-icon {
375
- top: 7px;
376
- right: 2px;
375
+ top: 7px !important;
376
+ right: 2px !important;
377
377
  }
378
378
 
379
379
  :deep() .vs__selected-options {
@@ -44,9 +44,13 @@ export default {
44
44
 
45
45
  <style lang="scss" scoped>
46
46
  .favorite {
47
+ display: flex;
48
+ align-items: center;
47
49
  position: relative;
48
50
  cursor: pointer;
49
- font-size: 20px;
51
+ font-size: 22px;
52
+ margin-top: 4px;
53
+ margin-left: 10px;
50
54
  transform: ease-in-out-all 1s;
51
55
 
52
56
  &.icon-star-open {