dashboard-shell-shell 3.0.5-test.9 → 3.0.5-tsh.2

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 (164) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/icons/iconfont.css +4 -1
  3. package/assets/images/pl/dark/logo.png +0 -0
  4. package/assets/styles/all.scss +23 -3
  5. package/assets/styles/base/_variables.scss +2 -2
  6. package/assets/styles/fonts/_icons.scss +3 -2
  7. package/assets/styles/global/_button.scss +1 -1
  8. package/assets/styles/global/_form.scss +1 -0
  9. package/assets/styles/global/_select.scss +1 -1
  10. package/assets/styles/global/_tooltip.scss +5 -1
  11. package/assets/styles/themes/_light.scss +3 -3
  12. package/assets/styles/vendor/vue-select.scss +2 -1
  13. package/assets/translations/en-us.yaml +60 -0
  14. package/assets/translations/zh-hans.yaml +164 -21
  15. package/components/ButtonDropdown.vue +3 -1
  16. package/components/ClusterIconMenu.vue +1 -1
  17. package/components/CodeMirror.vue +6 -4
  18. package/components/ConsumptionGauge.vue +1 -1
  19. package/components/ContainerResourceLimit.vue +2 -2
  20. package/components/CruResource.vue +3 -2
  21. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +22 -19
  22. package/components/Drawer/ResourceDetailDrawer/index.vue +3 -3
  23. package/components/ExplorerMembers.vue +10 -1
  24. package/components/GlobalRoleBindings.vue +52 -112
  25. package/components/PodSecurityAdmission.vue +1 -1
  26. package/components/PromptRemove.vue +23 -1
  27. package/components/RelatedResources.vue +3 -0
  28. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  29. package/components/Resource/Detail/TitleBar/index.vue +37 -24
  30. package/components/ResourceDetail/Masthead/index.vue +1 -1
  31. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  32. package/components/ResourceDetail/Masthead/legacy.vue +8 -7
  33. package/components/ResourceDetail/legacy.vue +15 -15
  34. package/components/ResourceList/Masthead.vue +11 -15
  35. package/components/ResourceTable.vue +16 -0
  36. package/components/SideNav.vue +21 -21
  37. package/components/SingleClusterInfo.vue +2 -1
  38. package/components/SortableTable/THead.vue +46 -1
  39. package/components/SortableTable/index.vue +54 -18
  40. package/components/Tabbed/index.vue +6 -1
  41. package/components/auth/Principal.vue +16 -8
  42. package/components/auth/RoleDetailEdit.vue +11 -7
  43. package/components/breadcrumb/index.vue +13 -210
  44. package/components/form/ArrayList.vue +164 -147
  45. package/components/form/ArrayListGrouped.vue +5 -3
  46. package/components/form/ChangePassword.vue +1 -1
  47. package/components/form/ClusterAppearance.vue +4 -3
  48. package/components/form/Command.vue +4 -5
  49. package/components/form/Conditions.vue +15 -1
  50. package/components/form/Footer.vue +1 -0
  51. package/components/form/HealthCheck.vue +0 -2
  52. package/components/form/HookOption.vue +87 -58
  53. package/components/form/InputWithSelect.vue +8 -7
  54. package/components/form/KeyValue.vue +20 -2
  55. package/components/form/LabeledSelect.vue +3 -1
  56. package/components/form/Labels.vue +2 -2
  57. package/components/form/MatchExpressions.vue +4 -4
  58. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  59. package/components/form/Members/ClusterPermissionsEditor.vue +31 -28
  60. package/components/form/Members/MembershipEditor.vue +3 -3
  61. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  62. package/components/form/NameNsDescription.vue +4 -2
  63. package/components/form/Networking.vue +6 -9
  64. package/components/form/NodeAffinity.vue +29 -28
  65. package/components/form/PodAffinity.vue +23 -23
  66. package/components/form/Probe.vue +15 -11
  67. package/components/form/ProjectMemberEditor.vue +28 -25
  68. package/components/form/ResourceQuota/Namespace.vue +4 -4
  69. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  70. package/components/form/ResourceQuota/Project.vue +4 -4
  71. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  72. package/components/form/ResourceSelector.vue +1 -1
  73. package/components/form/Security.vue +1 -3
  74. package/components/form/Select.vue +7 -1
  75. package/components/form/ServiceNameSelect.vue +2 -5
  76. package/components/form/ServicePorts.vue +149 -75
  77. package/components/form/Tolerations.vue +13 -9
  78. package/components/form/ValueFromResource.vue +110 -96
  79. package/components/formatter/WorkloadHealthScale.vue +4 -3
  80. package/components/nav/Group.vue +6 -0
  81. package/components/nav/Header.vue +17 -137
  82. package/components/nav/NamespaceFilter.vue +14 -19
  83. package/components/nav/TopLevelMenu.vue +99 -125
  84. package/components/nav/Type.vue +11 -3
  85. package/config/menuRouteMap.js +10 -0
  86. package/config/product/explorer.js +32 -10
  87. package/config/product/manager.js +28 -17
  88. package/config/router/navigation-guards/index.js +61 -3
  89. package/detail/node.vue +28 -23
  90. package/dialog/AddCustomBadgeDialog.vue +17 -9
  91. package/dialog/RollbackWorkloadDialog.vue +1 -1
  92. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  93. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  94. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  95. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  96. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  97. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  98. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  99. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  100. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  101. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  102. package/edit/configmap.vue +4 -0
  103. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +32 -8
  104. package/edit/monitoring.coreos.com.alertmanagerconfig/types/dingding.vue +32 -0
  105. package/edit/monitoring.coreos.com.alertmanagerconfig/types/message.vue +52 -0
  106. package/edit/monitoring.coreos.com.alertmanagerconfig/types/snmp.vue +45 -0
  107. package/edit/monitoring.coreos.com.alertmanagerconfig/types/work.vue +31 -0
  108. package/edit/networking.k8s.io.ingress/Certificate.vue +14 -5
  109. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  110. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  111. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  112. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  113. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  114. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  115. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  116. package/edit/persistentvolume/index.vue +3 -1
  117. package/edit/persistentvolumeclaim.vue +2 -0
  118. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +1 -1
  119. package/edit/secret/index.vue +2 -2
  120. package/edit/service.vue +4 -1
  121. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  122. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  123. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  124. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  125. package/edit/workload/Job.vue +31 -34
  126. package/edit/workload/Upgrading.vue +5 -5
  127. package/edit/workload/index.vue +19 -15
  128. package/edit/workload/storage/Mount.vue +1 -0
  129. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  130. package/edit/workload/storage/azureDisk.vue +14 -10
  131. package/edit/workload/storage/azureFile.vue +9 -7
  132. package/edit/workload/storage/csi/index.vue +6 -9
  133. package/edit/workload/storage/emptyDir.vue +7 -5
  134. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  135. package/edit/workload/storage/hostPath.vue +7 -5
  136. package/edit/workload/storage/nfs.vue +8 -6
  137. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  138. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  139. package/edit/workload/storage/secret.vue +9 -6
  140. package/edit/workload/storage/vsphereVolume.vue +11 -7
  141. package/initialize/app-extended.js +7 -1
  142. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  143. package/mixins/create-edit-view/impl.js +10 -0
  144. package/models/provisioning.cattle.io.cluster.js +19 -18
  145. package/models/workload.js +2 -2
  146. package/package.json +1 -1
  147. package/pages/account/index.vue +93 -58
  148. package/pages/auth/login.vue +1 -1
  149. package/pages/auth/setup.vue +36 -17
  150. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  151. package/pages/c/_cluster/explorer/index.vue +2 -1
  152. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  153. package/pages/home.vue +55 -13
  154. package/plugins/dashboard-store/actions.js +1 -1
  155. package/rancher-components/Banner/Banner.vue +14 -2
  156. package/rancher-components/Form/Radio/RadioGroup.vue +9 -1
  157. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  158. package/scripts/build-pkg.sh +18 -23
  159. package/scripts/publish-shell.sh +1 -1
  160. package/store/i18n.js +1 -0
  161. package/store/type-map.js +0 -2
  162. package/utils/error.js +23 -3
  163. package/utils/errorTranslate.json +377 -8
  164. package/utils/errorTranslateNew.json +39 -0
@@ -125,7 +125,7 @@ export default {
125
125
  <template>
126
126
  <div>
127
127
  <div v-if="rows.length">
128
- <div
128
+ <!-- <div
129
129
  class="ports-headers"
130
130
  :class="{'show-protocol':showProtocol, 'show-node-port':showNodePort}"
131
131
  >
@@ -169,77 +169,13 @@ export default {
169
169
  v-if="showRemove"
170
170
  class="remove"
171
171
  />
172
- </div>
172
+ </div> -->
173
173
  <div
174
174
  v-for="(row, idx) in rows"
175
175
  :key="idx"
176
176
  class="ports-row"
177
177
  :class="{'show-protocol':showProtocol, 'show-node-port':showNodePort}"
178
178
  >
179
- <div
180
- v-if="padLeft"
181
- class="left"
182
- />
183
- <div class="port-name">
184
- <span v-if="isView">{{ row.name }}</span>
185
- <input
186
- v-else
187
- ref="port-name"
188
- v-model.number="row.name"
189
- type="text"
190
- :placeholder="t('servicePorts.rules.name.placeholder')"
191
- @input="queueUpdate"
192
- >
193
- </div>
194
- <div class="port">
195
- <span v-if="isView">{{ row.port }}</span>
196
- <input
197
- v-else
198
- ref="port"
199
- v-model.number="row.port"
200
- type="number"
201
- min="1"
202
- max="65535"
203
- :placeholder="t('servicePorts.rules.listening.placeholder')"
204
- @input="queueUpdate"
205
- >
206
- </div>
207
- <div
208
- v-if="showProtocol"
209
- class="port-protocol"
210
- >
211
- <span v-if="isView">{{ row.protocol }}</span>
212
- <Select
213
- v-else
214
- v-model:value="row.protocol"
215
- :options="protocolOptions"
216
- @update:value="queueUpdate"
217
- />
218
- </div>
219
- <div class="target-port">
220
- <span v-if="isView">{{ row.targetPort }}</span>
221
- <input
222
- v-else
223
- v-model="row.targetPort"
224
- :placeholder="t('servicePorts.rules.target.placeholder')"
225
- @input="queueUpdate"
226
- >
227
- </div>
228
- <div
229
- v-if="showNodePort"
230
- class="node-port"
231
- >
232
- <span v-if="isView">{{ row.nodePort }}</span>
233
- <input
234
- v-else
235
- v-model.number="row.nodePort"
236
- type="number"
237
- min="1"
238
- max="65535"
239
- :placeholder="t('servicePorts.rules.node.placeholder')"
240
- @input="queueUpdate"
241
- >
242
- </div>
243
179
  <div
244
180
  v-if="showRemove"
245
181
  class="remove"
@@ -252,7 +188,106 @@ export default {
252
188
  <t k="generic.remove" />
253
189
  </button>
254
190
  </div>
191
+ <div class="flex">
192
+ <span class="port-name">
193
+ <t k="servicePorts.rules.name.label" />
194
+ </span>
195
+ <div class="port-name">
196
+ <span v-if="isView">{{ row.name }}</span>
197
+ <input
198
+ v-else
199
+ ref="port-name"
200
+ v-model.number="row.name"
201
+ type="text"
202
+ :placeholder="t('servicePorts.rules.name.placeholder')"
203
+ @input="queueUpdate"
204
+ >
205
+ </div>
206
+ </div>
207
+ <div class="flex">
208
+ <span class="port">
209
+ <t k="servicePorts.rules.listening.label" />
210
+ <i
211
+ v-clean-tooltip="t('servicesPage.listeningPorts')"
212
+ class="icon icon-info flex"
213
+ />
214
+ <span class="text-error">*</span>
215
+ </span>
216
+ <div class="port">
217
+ <span v-if="isView">{{ row.port }}</span>
218
+ <input
219
+ v-else
220
+ ref="port"
221
+ v-model.number="row.port"
222
+ type="number"
223
+ min="1"
224
+ max="65535"
225
+ :placeholder="t('servicePorts.rules.listening.placeholder')"
226
+ @input="queueUpdate"
227
+ >
228
+ </div>
229
+ </div>
230
+ <div class="flex" v-if="showProtocol">
231
+ <span
232
+ class="port-protocol"
233
+ >
234
+ <t k="servicePorts.rules.protocol.label" />
235
+ </span>
236
+ <div
237
+ class="port-protocol"
238
+ >
239
+ <span v-if="isView">{{ row.protocol }}</span>
240
+ <Select
241
+ v-else
242
+ v-model:value="row.protocol"
243
+ :options="protocolOptions"
244
+ @update:value="queueUpdate"
245
+ />
246
+ </div>
247
+ </div>
248
+ <div class="flex">
249
+ <span class="target-port">
250
+ <t k="servicePorts.rules.target.label" />
251
+ <i
252
+ v-clean-tooltip="t('servicesPage.targetPorts')"
253
+ class="icon icon-info flex"
254
+ />
255
+ <span class="text-error">*</span>
256
+
257
+ </span>
258
+ <div class="target-port">
259
+ <span v-if="isView">{{ row.targetPort }}</span>
260
+ <input
261
+ v-else
262
+ v-model="row.targetPort"
263
+ :placeholder="t('servicePorts.rules.target.placeholder')"
264
+ @input="queueUpdate"
265
+ >
266
+ </div>
267
+ </div>
268
+ <div class="flex" v-if="showNodePort">
269
+ <span
270
+ class="node-port"
271
+ >
272
+ <t k="servicePorts.rules.node.label" />
273
+ </span>
274
+ <div
275
+ class="node-port"
276
+ >
277
+ <span v-if="isView">{{ row.nodePort }}</span>
278
+ <input
279
+ v-else
280
+ v-model.number="row.nodePort"
281
+ type="number"
282
+ min="1"
283
+ max="65535"
284
+ :placeholder="t('servicePorts.rules.node.placeholder')"
285
+ @input="queueUpdate"
286
+ >
287
+ </div>
288
+ </div>
255
289
  <Error
290
+ style="margin-bottom: 24px;"
256
291
  :value="{...row, idx}"
257
292
  :rules="rules"
258
293
  />
@@ -286,22 +321,60 @@ export default {
286
321
  }
287
322
 
288
323
  .ports-headers, .ports-row{
289
- display: grid;
290
- grid-column-gap: $column-gutter;
291
- margin-bottom: 10px;
324
+ // display: grid;
325
+ // grid-column-gap: $column-gutter;
326
+ // margin-bottom: 10px;
327
+ // align-items: center;
328
+ display: flex;
329
+ flex-direction: column;
330
+
331
+ // &.show-protocol{
332
+ // grid-template-columns: 23% 23% 10% 15% 15% 10%;
333
+ // &:not(.show-node-port){
334
+ // grid-template-columns: 31% 31% 10% 15% 10%;
335
+ // }
336
+ // }
337
+ // &.show-node-port:not(.show-protocol){
338
+ // grid-template-columns: 28% 28% 15% 15% 10%;
339
+ // }
340
+ }
341
+ .flex{
342
+ display: flex;
292
343
  align-items: center;
344
+ margin-bottom: 24px;
345
+ >span:nth-child(1){
346
+ min-width: 160px;
347
+ height: 32px;
348
+ display: flex;
349
+ align-items: center;
350
+ }
293
351
 
294
- &.show-protocol{
295
- grid-template-columns: 23% 23% 10% 15% 15% 10%;
296
- &:not(.show-node-port){
297
- grid-template-columns: 31% 31% 10% 15% 10%;
352
+ .port-name:not(span){
353
+ width: 400px;
354
+
355
+ }
356
+ .port:not(span){
357
+ width: 400px;
358
+ INPUT{
359
+ height: 32px;
360
+ padding-left: 11px;
298
361
  }
299
362
  }
300
- &.show-node-port:not(.show-protocol){
301
- grid-template-columns: 28% 28% 15% 15% 10%;
363
+ .target-port:not(span){
364
+ width: 400px;
365
+ }
366
+ .node-port:not(span){
367
+ width: 400px;
368
+ INPUT{
369
+ height: 32px;
370
+ padding-left: 11px;
371
+ }
302
372
  }
303
373
  }
304
374
 
375
+ .flex:nth-last-child{
376
+ margin-bottom: 0px;
377
+ }
305
378
  .ports-headers {
306
379
  color: var(--input-label);
307
380
  }
@@ -312,6 +385,7 @@ export default {
312
385
 
313
386
  .remove BUTTON {
314
387
  padding: 0px;
388
+ min-width: auto;
315
389
  }
316
390
 
317
391
  .ports-row {
@@ -202,7 +202,7 @@ export default {
202
202
  :key="index"
203
203
  class="rule"
204
204
  >
205
- <div class="col">
205
+ <div>
206
206
  <LabeledInput
207
207
  v-model:value="rule.key"
208
208
  :mode="mode"
@@ -211,7 +211,7 @@ export default {
211
211
  @update:value="update"
212
212
  />
213
213
  </div>
214
- <div class="col">
214
+ <div>
215
215
  <Select
216
216
  id="operator"
217
217
  v-model:value="rule.operator"
@@ -222,7 +222,7 @@ export default {
222
222
  />
223
223
  </div>
224
224
  <template v-if="rule.operator==='Exists'">
225
- <div class="col">
225
+ <div>
226
226
  <LabeledInput
227
227
  value="n/a"
228
228
  :mode="mode"
@@ -232,7 +232,7 @@ export default {
232
232
  </div>
233
233
  </template>
234
234
  <template v-else>
235
- <div class="col">
235
+ <div>
236
236
  <LabeledInput
237
237
  v-model:value="rule.value"
238
238
  :mode="mode"
@@ -242,7 +242,7 @@ export default {
242
242
  />
243
243
  </div>
244
244
  </template>
245
- <div class="col">
245
+ <div>
246
246
  <Select
247
247
  v-model:value="rule.effect"
248
248
  :options="effectOpts"
@@ -251,7 +251,7 @@ export default {
251
251
  @update:value="e=>updateEffect(e, rule)"
252
252
  />
253
253
  </div>
254
- <div class="col">
254
+ <div>
255
255
  <UnitInput
256
256
  v-model:value="rule.tolerationSeconds"
257
257
  :disabled="rule.effect !== 'NoExecute'"
@@ -262,7 +262,7 @@ export default {
262
262
  @update:value="update"
263
263
  />
264
264
  </div>
265
- <div class="col remove">
265
+ <div class="remove">
266
266
  <button
267
267
  v-if="!isView"
268
268
  type="button"
@@ -294,9 +294,13 @@ export default {
294
294
 
295
295
  .rule, .toleration-headers{
296
296
  display: grid;
297
- grid-template-columns: 20% 10% 20% 15% 20% 15%;
297
+ grid-template-columns: 13% 13% 13% 13% 13% 13%;
298
298
  grid-gap: 10px;
299
299
  align-items: center;
300
+ margin-bottom: 10px;
301
+ .unlabeled-select{
302
+ width: auto;
303
+ }
300
304
  }
301
305
 
302
306
  .rule {
@@ -308,10 +312,10 @@ export default {
308
312
 
309
313
  .toleration-headers SPAN {
310
314
  color: var(--input-label);
311
- margin-bottom: 10px;
312
315
  }
313
316
  .remove BUTTON {
314
317
  padding: 0px;
318
+ min-width: auto;
315
319
  }
316
320
  .height-adjust-input {
317
321
  min-height: 42px;
@@ -284,128 +284,141 @@ export default {
284
284
 
285
285
  <template>
286
286
  <div class="var-row">
287
- <div class="type">
288
- <LabeledSelect
289
- v-model:value="type"
290
- :mode="mode"
291
- :multiple="false"
292
- :options="options"
293
- option-label="label"
294
- :searchable="false"
295
- :reduce="e=>e.value"
296
- :label="t('workload.container.command.fromResource.type')"
297
- @update:value="updateRow"
298
- />
299
- </div>
300
-
301
- <div
302
- v-if="!hideVariableName"
303
- class="name"
304
- >
305
- <LabeledInput
306
- v-model:value="name"
307
- :label="nameLabel"
308
- :placeholder="t('workload.container.command.fromResource.name.placeholder')"
309
- :mode="mode"
310
- @update:value="updateRow"
311
- />
312
- </div>
313
-
314
- <div
315
- v-if="type==='simple'"
316
- class="single-value"
317
- >
318
- <LabeledInput
319
- v-model:value="valStr"
320
- :label="t('workload.container.command.fromResource.value.label')"
321
- :placeholder="t('workload.container.command.fromResource.value.placeholder')"
322
- :mode="mode"
323
- @update:value="updateRow"
324
- />
287
+ <div class="row">
288
+ <div class="remove">
289
+ <button
290
+ v-if="!isView"
291
+ type="button"
292
+ class="btn role-link"
293
+ @click.stop="$emit('remove')"
294
+ >
295
+ {{ t('generic.remove') }}
296
+ </button>
297
+ </div>
325
298
  </div>
326
299
 
327
- <template v-else-if="needsSource">
328
- <div :class="{'single-value': type === 'configMapRef' || type === 'secretRef'}">
300
+ <div class="row">
301
+ <div class="type span-6 col">
329
302
  <LabeledSelect
330
- v-model:value="referenced"
331
- :options="sourceOptions"
332
- :multiple="false"
333
- :get-option-label="opt=>get(opt, 'metadata.name') || opt"
334
- :get-option-key="opt=>opt.id|| opt"
303
+ v-model:value="type"
335
304
  :mode="mode"
336
- :label="sourceLabel"
337
- :loading="loading"
338
- />
339
- </div>
340
- <div v-if="type!=='secretRef' && type!== 'configMapRef'">
341
- <LabeledSelect
342
- v-model:value="key"
343
305
  :multiple="false"
344
- :options="keys"
345
- :mode="mode"
306
+ :options="options"
346
307
  option-label="label"
347
- :label="t('workload.container.command.fromResource.key.label')"
348
- :loading="loading"
308
+ :searchable="false"
309
+ :reduce="e=>e.value"
310
+ :label="t('workload.container.command.fromResource.type')"
349
311
  @update:value="updateRow"
350
312
  />
351
313
  </div>
352
- </template>
353
-
354
- <template v-else-if="type==='resourceFieldRef'">
355
- <div>
314
+
315
+ <div
316
+ v-if="!hideVariableName"
317
+ class="name span-6 col"
318
+ >
356
319
  <LabeledInput
357
- v-model:value="refName"
358
- :label="t('workload.container.command.fromResource.containerName')"
359
- :placeholder="t('workload.container.command.fromResource.source.placeholder')"
320
+ v-model:value="name"
321
+ :label="nameLabel"
322
+ :placeholder="t('workload.container.command.fromResource.name.placeholder')"
360
323
  :mode="mode"
361
324
  @update:value="updateRow"
362
325
  />
363
326
  </div>
364
- <div>
365
- <LabeledSelect
366
- v-model:value="key"
367
- :label="t('workload.container.command.fromResource.key.label')"
368
- :multiple="false"
369
- :options="resourceKeyOpts"
370
- :mode="mode"
371
- :searchable="false"
372
- :placeholder="t('workload.container.command.fromResource.key.placeholder', null, true)"
373
- @update:value="updateRow"
374
- />
375
- </div>
376
- </template>
327
+ </div>
377
328
 
378
- <template v-else>
379
- <div class="single-value">
329
+ <div class="row">
330
+ <div
331
+ v-if="type==='simple'"
332
+ class="single-value span-6 col"
333
+ >
380
334
  <LabeledInput
381
- v-model:value="fieldPath"
382
- :placeholder="t('workload.container.command.fromResource.key.placeholder', null, true)"
383
- :label="t('workload.container.command.fromResource.key.label')"
335
+ v-model:value="valStr"
336
+ :label="t('workload.container.command.fromResource.value.label')"
337
+ :placeholder="t('workload.container.command.fromResource.value.placeholder')"
384
338
  :mode="mode"
385
339
  @update:value="updateRow"
386
340
  />
387
341
  </div>
388
- </template>
389
- <div class="remove">
390
- <button
391
- v-if="!isView"
392
- type="button"
393
- class="btn role-link"
394
- @click.stop="$emit('remove')"
395
- >
396
- {{ t('generic.remove') }}
397
- </button>
342
+
343
+ <template v-else-if="needsSource">
344
+ <div
345
+ :class="{'single-value': type === 'configMapRef' || type === 'secretRef'}"
346
+ class="span-6 col"
347
+ >
348
+ <LabeledSelect
349
+ v-model:value="referenced"
350
+ :options="sourceOptions"
351
+ :multiple="false"
352
+ :get-option-label="opt=>get(opt, 'metadata.name') || opt"
353
+ :get-option-key="opt=>opt.id|| opt"
354
+ :mode="mode"
355
+ :label="sourceLabel"
356
+ :loading="loading"
357
+ />
358
+ </div>
359
+ <div
360
+ v-if="type!=='secretRef' && type!== 'configMapRef'"
361
+ class="span-6 col"
362
+ >
363
+ <LabeledSelect
364
+ v-model:value="key"
365
+ :multiple="false"
366
+ :options="keys"
367
+ :mode="mode"
368
+ option-label="label"
369
+ :label="t('workload.container.command.fromResource.key.label')"
370
+ :loading="loading"
371
+ @update:value="updateRow"
372
+ />
373
+ </div>
374
+ </template>
375
+
376
+ <template v-else-if="type==='resourceFieldRef'">
377
+ <div class="span-6 col">
378
+ <LabeledInput
379
+ v-model:value="refName"
380
+ :label="t('workload.container.command.fromResource.containerName')"
381
+ :placeholder="t('workload.container.command.fromResource.source.placeholder')"
382
+ :mode="mode"
383
+ @update:value="updateRow"
384
+ />
385
+ </div>
386
+ <div class="span-6 col">
387
+ <LabeledSelect
388
+ v-model:value="key"
389
+ :label="t('workload.container.command.fromResource.key.label')"
390
+ :multiple="false"
391
+ :options="resourceKeyOpts"
392
+ :mode="mode"
393
+ :searchable="false"
394
+ :placeholder="t('workload.container.command.fromResource.key.placeholder', null, true)"
395
+ @update:value="updateRow"
396
+ />
397
+ </div>
398
+ </template>
399
+
400
+ <template v-else>
401
+ <div class="single-value span-6 col">
402
+ <LabeledInput
403
+ v-model:value="fieldPath"
404
+ :placeholder="t('workload.container.command.fromResource.key.placeholder', null, true)"
405
+ :label="t('workload.container.command.fromResource.key.label')"
406
+ :mode="mode"
407
+ @update:value="updateRow"
408
+ />
409
+ </div>
410
+ </template>
398
411
  </div>
399
412
  </div>
400
413
  </template>
401
414
 
402
415
  <style lang='scss' scoped>
403
416
  .var-row{
404
- display: grid;
405
- grid-template-columns: 1fr 1fr 1fr 1fr 100px;
406
- grid-column-gap: 20px;
407
- margin-bottom: 10px;
408
- align-items: center;
417
+ // display: grid;
418
+ // grid-template-columns: 1fr 1fr 1fr 1fr 100px;
419
+ // grid-column-gap: 20px;
420
+ // margin-bottom: 10px;
421
+ // align-items: center;
409
422
 
410
423
  .single-value {
411
424
  grid-column: span 2;
@@ -413,6 +426,7 @@ export default {
413
426
 
414
427
  .remove BUTTON {
415
428
  padding: 0px;
429
+ min-width: auto;
416
430
  }
417
431
  }
418
432
 
@@ -204,6 +204,7 @@ export default {
204
204
  <div
205
205
  :id="id"
206
206
  class="hs-popover__content"
207
+ style="width: auto;padding-right: 10px;"
207
208
  :class="{expanded, [id]:true}"
208
209
  >
209
210
  <div>
@@ -212,14 +213,14 @@ export default {
212
213
  :key="i"
213
214
  class="counts"
214
215
  >
215
- <span class="counts-label">{{ obj.label }}</span>
216
- <span>{{ obj.value }}</span>
216
+ <span class="counts-label" style="white-space: normal;">{{ obj.label }}</span>
217
+ <span style="white-space: normal;">{{ obj.value }}</span>
217
218
  </div>
218
219
  <div
219
220
  v-if="canScale"
220
221
  class="text-center scale"
221
222
  >
222
- <span>{{ t('tableHeaders.scale') }} </span>
223
+ <span style="white-space: nowrap;margin-right: 5px;">{{ t('tableHeaders.scale') }} </span>
223
224
  <PlusMinus
224
225
  :value="row.spec.replicas"
225
226
  :disabled="disabled"
@@ -1,5 +1,7 @@
1
1
  <script>
2
2
  import Type from '@shell/components/nav/Type';
3
+ import { menuRouteMap } from '@shell/config/menuRouteMap';
4
+
3
5
  export default {
4
6
  name: 'Group',
5
7
 
@@ -178,6 +180,7 @@ export default {
178
180
 
179
181
  let parentPath = '';
180
182
  const cluster = this.$route.params?.cluster;
183
+ const resource = this.$route?.params?.resource || ''
181
184
 
182
185
  // Where we use nested route configuration, consider the parent route when trying to identify the nav location
183
186
  if (this.$route.matched.length > 1) {
@@ -201,6 +204,9 @@ export default {
201
204
  return true;
202
205
  } else if (parentPath && itemFullPath === parentPath) {
203
206
  return true;
207
+ // === 新增映射逻辑 ===
208
+ } else if (menuRouteMap[item.name] && menuRouteMap[item.name].includes(resource)) {
209
+ return true;
204
210
  }
205
211
  }
206
212
  }