dashboard-shell-shell 3.0.5-test.3 → 3.0.5-test.30
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.
- package/assets/icons/iconfont.css +4 -1
- package/assets/images/pl/dark/logo.png +0 -0
- package/assets/styles/all.scss +21 -1
- package/assets/styles/base/_variables.scss +5 -5
- package/assets/styles/fonts/_icons.scss +3 -2
- package/assets/styles/global/_button.scss +8 -8
- package/assets/styles/global/_select.scss +1 -1
- package/assets/styles/global/_tooltip.scss +9 -5
- package/assets/styles/themes/_light.scss +3 -1
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/zh-hans.yaml +150 -13
- package/components/ActionDropdown.vue +1 -1
- package/components/ButtonDropdown.vue +3 -1
- package/components/CodeMirror.vue +6 -4
- package/components/ContainerResourceLimit.vue +2 -2
- package/components/CopyToClipboard.vue +15 -0
- package/components/Drawer/Chrome.vue +2 -2
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
- package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
- package/components/ExplorerMembers.vue +28 -4
- package/components/GlobalRoleBindings.vue +48 -112
- package/components/PodSecurityAdmission.vue +2 -2
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
- package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
- package/components/Resource/Detail/Metadata/index.vue +3 -1
- package/components/Resource/Detail/TitleBar/Title.vue +4 -3
- package/components/Resource/Detail/TitleBar/Top.vue +2 -0
- package/components/Resource/Detail/TitleBar/composables.ts +16 -1
- package/components/Resource/Detail/TitleBar/index.vue +123 -25
- package/components/ResourceDetail/Masthead/index.vue +1 -1
- package/components/ResourceDetail/Masthead/latest.vue +1 -1
- package/components/ResourceDetail/Masthead/legacy.vue +239 -167
- package/components/ResourceDetail/legacy.vue +44 -28
- package/components/ResourceList/Masthead.vue +14 -15
- package/components/SideNav.vue +21 -21
- package/components/SortableTable/THead.vue +21 -1
- package/components/SortableTable/index.vue +21 -6
- package/components/Tabbed/index.vue +6 -1
- package/components/auth/Principal.vue +42 -13
- package/components/auth/RoleDetailEdit.vue +11 -7
- package/components/breadcrumb/index.vue +119 -0
- package/components/form/ArrayList.vue +164 -147
- package/components/form/ArrayListGrouped.vue +3 -1
- package/components/form/ChangePassword.vue +1 -1
- package/components/form/Command.vue +4 -5
- package/components/form/Conditions.vue +15 -1
- package/components/form/Footer.vue +1 -0
- package/components/form/HealthCheck.vue +0 -2
- package/components/form/HookOption.vue +87 -58
- package/components/form/InputWithSelect.vue +8 -7
- package/components/form/KeyValue.vue +20 -2
- package/components/form/LabeledSelect.vue +6 -3
- package/components/form/Labels.vue +2 -2
- package/components/form/MatchExpressions.vue +3 -4
- package/components/form/Members/ClusterMembershipEditor.vue +1 -1
- package/components/form/Members/ClusterPermissionsEditor.vue +5 -5
- package/components/form/Members/MembershipEditor.vue +2 -2
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/Networking.vue +6 -9
- package/components/form/NodeAffinity.vue +29 -28
- package/components/form/PodAffinity.vue +23 -23
- package/components/form/Probe.vue +15 -11
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
- package/components/form/ResourceQuota/Project.vue +4 -4
- package/components/form/ResourceQuota/ProjectRow.vue +36 -30
- package/components/form/ResourceSelector.vue +1 -1
- package/components/form/Security.vue +1 -3
- package/components/form/Select.vue +6 -1
- package/components/form/ServiceNameSelect.vue +2 -5
- package/components/form/ServicePorts.vue +149 -75
- package/components/form/Taints.vue +2 -1
- package/components/form/Tolerations.vue +12 -9
- package/components/form/ValueFromResource.vue +110 -96
- package/components/form/WorkloadPorts.vue +143 -123
- package/components/formatter/WorkloadHealthScale.vue +4 -3
- package/components/nav/Group.vue +6 -0
- package/components/nav/Header.vue +7 -4
- package/components/nav/NamespaceFilter.vue +15 -21
- package/components/nav/TopLevelMenu.vue +99 -125
- package/components/nav/Type.vue +15 -3
- package/config/menuRouteMap.js +10 -0
- package/config/product/explorer.js +5 -1
- package/config/router/navigation-guards/index.js +61 -3
- package/detail/node.vue +28 -23
- package/dialog/AddCustomBadgeDialog.vue +17 -9
- package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
- package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
- package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
- package/edit/configmap.vue +4 -0
- package/edit/networking.k8s.io.ingress/Certificate.vue +7 -5
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
- package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
- package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
- package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
- package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
- package/edit/persistentvolume/index.vue +3 -1
- package/edit/persistentvolumeclaim.vue +2 -0
- package/edit/secret/index.vue +2 -2
- package/edit/service.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +10 -8
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
- package/edit/workload/Job.vue +31 -34
- package/edit/workload/Upgrading.vue +5 -5
- package/edit/workload/index.vue +22 -18
- package/edit/workload/storage/Mount.vue +1 -0
- package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
- package/edit/workload/storage/azureDisk.vue +14 -10
- package/edit/workload/storage/azureFile.vue +9 -7
- package/edit/workload/storage/csi/index.vue +6 -9
- package/edit/workload/storage/emptyDir.vue +7 -5
- package/edit/workload/storage/gcePersistentDisk.vue +9 -7
- package/edit/workload/storage/hostPath.vue +7 -5
- package/edit/workload/storage/nfs.vue +8 -6
- package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
- package/edit/workload/storage/secret.vue +9 -6
- package/edit/workload/storage/vsphereVolume.vue +11 -7
- package/initialize/app-extended.js +7 -1
- package/models/provisioning.cattle.io.cluster.js +19 -18
- package/package.json +1 -1
- package/pages/account/index.vue +95 -115
- package/pages/auth/setup.vue +35 -16
- package/pages/c/_cluster/auth/roles/index.vue +38 -5
- package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
- package/pages/c/_cluster/explorer/tools/index.vue +6 -6
- package/pages/home.vue +3 -4
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/resource-class.js +28 -27
- package/rancher-components/BadgeState/BadgeState.vue +33 -52
- package/rancher-components/Banner/Banner.vue +4 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +8 -7
- package/scripts/publish-shell.sh +1 -1
- package/store/i18n.js +4 -0
- package/store/type-map.js +1 -1
- package/types/shell/index.d.ts +4 -30
- package/utils/error.js +3 -1
- package/utils/errorTranslate.json +351 -2
- package/vue.config.js +1 -1
|
@@ -38,7 +38,7 @@ const yamlComponent: any = useTemplateRef('yaml');
|
|
|
38
38
|
:deep() .codemirror-container {
|
|
39
39
|
background-color: var(--body-bg);
|
|
40
40
|
border-radius: var(--border-radius-md);
|
|
41
|
-
padding:
|
|
41
|
+
padding: 20px;
|
|
42
42
|
|
|
43
43
|
.CodeMirror, .CodeMirror-gutter {
|
|
44
44
|
background-color: var(--body-bg);
|
|
@@ -3,7 +3,7 @@ import Drawer from '@shell/components/Drawer/Chrome.vue';
|
|
|
3
3
|
import { useI18n } from '@shell/composables/useI18n';
|
|
4
4
|
import { useStore } from 'vuex';
|
|
5
5
|
import Tabbed from '@shell/components/Tabbed/index.vue';
|
|
6
|
-
import YamlTab, { Props as YamlProps } from '@shell/components/Drawer/ResourceDetailDrawer/YamlTab.vue';
|
|
6
|
+
// import YamlTab, { Props as YamlProps } from '@shell/components/Drawer/ResourceDetailDrawer/YamlTab.vue';
|
|
7
7
|
import { useDefaultConfigTabProps, useDefaultYamlTabProps } from '@shell/components/Drawer/ResourceDetailDrawer/composables';
|
|
8
8
|
import ConfigTab from '@shell/components/Drawer/ResourceDetailDrawer/ConfigTab.vue';
|
|
9
9
|
import { computed, ref } from 'vue';
|
|
@@ -27,6 +27,8 @@ const i18n = useI18n(store);
|
|
|
27
27
|
const yamlTabProps = ref<YamlProps | null>(null);
|
|
28
28
|
const configTabProps = useDefaultConfigTabProps(props.resource);
|
|
29
29
|
|
|
30
|
+
console.log(configTabProps, ' configTabProps---------------------------------2');
|
|
31
|
+
|
|
30
32
|
useDefaultYamlTabProps(props.resource).then((props) => {
|
|
31
33
|
yamlTabProps.value = props;
|
|
32
34
|
});
|
|
@@ -85,10 +87,10 @@ const canEdit = computed(() => {
|
|
|
85
87
|
v-if="configTabProps"
|
|
86
88
|
v-bind="configTabProps"
|
|
87
89
|
/>
|
|
88
|
-
<YamlTab
|
|
90
|
+
<!-- <YamlTab
|
|
89
91
|
v-if="yamlTabProps"
|
|
90
92
|
v-bind="yamlTabProps"
|
|
91
|
-
/>
|
|
93
|
+
/> -->
|
|
92
94
|
</Tabbed>
|
|
93
95
|
</template>
|
|
94
96
|
<template #additional-actions>
|
|
@@ -116,7 +118,6 @@ const canEdit = computed(() => {
|
|
|
116
118
|
border: none;
|
|
117
119
|
border-top: 1px solid var(--border);
|
|
118
120
|
padding: 0;
|
|
119
|
-
padding-top: 24px;
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
}
|
|
@@ -115,6 +115,10 @@ export default {
|
|
|
115
115
|
labelKey: 'tableHeaders.role',
|
|
116
116
|
value: 'roleTemplate.nameDisplay'
|
|
117
117
|
},
|
|
118
|
+
{
|
|
119
|
+
name: '操作',
|
|
120
|
+
labelKey: 'tableHeaders.action',
|
|
121
|
+
},
|
|
118
122
|
],
|
|
119
123
|
loadingProjectBindings: true,
|
|
120
124
|
loadingClusterBindings: true
|
|
@@ -293,6 +297,7 @@ export default {
|
|
|
293
297
|
:create-button-label="t('members.createActionLabel')"
|
|
294
298
|
:is-creatable="false"
|
|
295
299
|
:type-display="t('members.clusterAndProject')"
|
|
300
|
+
|
|
296
301
|
/>
|
|
297
302
|
<Banner
|
|
298
303
|
v-if="isLocal"
|
|
@@ -304,7 +309,7 @@ export default {
|
|
|
304
309
|
name="cluster-membership"
|
|
305
310
|
:label="t('members.clusterMembership')"
|
|
306
311
|
>
|
|
307
|
-
<div
|
|
312
|
+
<!-- <div
|
|
308
313
|
v-if="canEditClusterMembers"
|
|
309
314
|
class="row mb-10 cluster-add"
|
|
310
315
|
>
|
|
@@ -314,7 +319,7 @@ export default {
|
|
|
314
319
|
>
|
|
315
320
|
{{ t('members.createActionLabel') }}
|
|
316
321
|
</router-link>
|
|
317
|
-
</div>
|
|
322
|
+
</div> -->
|
|
318
323
|
<ResourceTable
|
|
319
324
|
:schema="schema"
|
|
320
325
|
:headers="headers"
|
|
@@ -325,7 +330,21 @@ export default {
|
|
|
325
330
|
:loading="$fetchState.pending || !currentCluster || loadingClusterBindings"
|
|
326
331
|
sub-search="subSearch"
|
|
327
332
|
:sub-fields="['nameDisplay']"
|
|
328
|
-
|
|
333
|
+
>
|
|
334
|
+
<template #header-right>
|
|
335
|
+
<div
|
|
336
|
+
v-if="canEditClusterMembers"
|
|
337
|
+
class="row mb-10 mr-10 cluster-add"
|
|
338
|
+
>
|
|
339
|
+
<router-link
|
|
340
|
+
:to="createLocation"
|
|
341
|
+
class="btn role-primary pull-right"
|
|
342
|
+
>
|
|
343
|
+
{{ t('members.createActionLabel') }}
|
|
344
|
+
</router-link>
|
|
345
|
+
</div>
|
|
346
|
+
</template>
|
|
347
|
+
</ResourceTable>
|
|
329
348
|
</Tab>
|
|
330
349
|
<Tab
|
|
331
350
|
v-if="canManageProjectMembers && !isHarvester"
|
|
@@ -346,12 +365,13 @@ export default {
|
|
|
346
365
|
v-trim-whitespace
|
|
347
366
|
class="group-tab"
|
|
348
367
|
>
|
|
368
|
+
|
|
349
369
|
<div
|
|
350
370
|
v-clean-html="getProjectLabel(group)"
|
|
351
371
|
class="project-name"
|
|
352
372
|
/>
|
|
353
373
|
</div>
|
|
354
|
-
<div class="right">
|
|
374
|
+
<div class="right" style="margin-right: 80px;">
|
|
355
375
|
<button
|
|
356
376
|
v-if="canEditProjectMembers"
|
|
357
377
|
type="button"
|
|
@@ -445,8 +465,12 @@ export default {
|
|
|
445
465
|
& :deep() .group-bar{
|
|
446
466
|
display: flex;
|
|
447
467
|
justify-content: space-between;
|
|
468
|
+
align-items: center;
|
|
448
469
|
}
|
|
449
470
|
}
|
|
471
|
+
.role-secondary.btn-sm:focus, .role-secondary.btn-sm.focused{
|
|
472
|
+
border: 1px solid #d7d7d7;
|
|
473
|
+
}
|
|
450
474
|
.cluster-add {
|
|
451
475
|
justify-content: flex-end;
|
|
452
476
|
}
|
|
@@ -108,12 +108,7 @@ export default {
|
|
|
108
108
|
} catch (e) { }
|
|
109
109
|
},
|
|
110
110
|
data() {
|
|
111
|
-
|
|
112
|
-
const topLevelPermissions = sessionStorage.getItem('TOPLEVELPERMISSIONS') || ''
|
|
113
|
-
|
|
114
111
|
return {
|
|
115
|
-
topLevelPermissions,
|
|
116
|
-
|
|
117
112
|
// This not only identifies global roles but the order here is the order we want to display them in the UI
|
|
118
113
|
globalPermissions: [
|
|
119
114
|
'admin',
|
|
@@ -333,119 +328,60 @@ export default {
|
|
|
333
328
|
|
|
334
329
|
<div v-else>
|
|
335
330
|
<form v-if="selectedRoles">
|
|
336
|
-
<
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
:show-actions="false"
|
|
346
|
-
>
|
|
347
|
-
<template v-slot:title>
|
|
348
|
-
<div class="type-title">
|
|
349
|
-
<h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
|
|
350
|
-
<div class="type-description">
|
|
351
|
-
{{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
|
|
352
|
-
</div>
|
|
353
|
-
</div>
|
|
354
|
-
</template>
|
|
355
|
-
<template v-slot:body>
|
|
356
|
-
<div
|
|
357
|
-
class="checkbox-section"
|
|
358
|
-
:class="'checkbox-section--' + roleType"
|
|
359
|
-
>
|
|
360
|
-
<div
|
|
361
|
-
v-for="(role, i) in sortedRoles[roleType]"
|
|
362
|
-
:key="i"
|
|
363
|
-
class="checkbox mb-10 mr-10"
|
|
364
|
-
>
|
|
365
|
-
<Checkbox
|
|
366
|
-
v-model:value="selectedRoles"
|
|
367
|
-
:value-when-true="role.id"
|
|
368
|
-
:disabled="!!assignOnlyRoles[role.id]"
|
|
369
|
-
:label="role.nameDisplay"
|
|
370
|
-
:description="role.descriptionDisplay"
|
|
371
|
-
:mode="mode"
|
|
372
|
-
:data-testId="'grb-checkbox-' + role.id"
|
|
373
|
-
@update:value="checkboxChanged"
|
|
374
|
-
>
|
|
375
|
-
<template #label>
|
|
376
|
-
<div class="checkbox-label-slot">
|
|
377
|
-
<span class="checkbox-label">{{ role.nameDisplay }}</span>
|
|
378
|
-
<i
|
|
379
|
-
v-if="!!assignOnlyRoles[role.id]"
|
|
380
|
-
v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
|
|
381
|
-
class="checkbox-info icon icon-info icon-lg"
|
|
382
|
-
/>
|
|
383
|
-
</div>
|
|
384
|
-
</template>
|
|
385
|
-
</Checkbox>
|
|
386
|
-
</div>
|
|
387
|
-
</div>
|
|
388
|
-
</template>
|
|
389
|
-
</Card>
|
|
390
|
-
</div>
|
|
391
|
-
</template>
|
|
392
|
-
|
|
393
|
-
<template v-else>
|
|
394
|
-
<div
|
|
395
|
-
v-for="(sortedRole, roleType) in { global: sortedRoles['global'] }"
|
|
396
|
-
:key="roleType"
|
|
397
|
-
class="role-group mb-10"
|
|
331
|
+
<div
|
|
332
|
+
v-for="(sortedRole, roleType) in sortedRoles"
|
|
333
|
+
:key="roleType"
|
|
334
|
+
class="role-group mb-10"
|
|
335
|
+
>
|
|
336
|
+
<Card
|
|
337
|
+
v-if="Object.keys(sortedRole).length"
|
|
338
|
+
:show-highlight-border="false"
|
|
339
|
+
:show-actions="false"
|
|
398
340
|
>
|
|
399
|
-
<
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
<template v-slot:title>
|
|
405
|
-
<div class="type-title">
|
|
406
|
-
<h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
|
|
407
|
-
<div class="type-description">
|
|
408
|
-
{{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
|
|
409
|
-
</div>
|
|
341
|
+
<template v-slot:title>
|
|
342
|
+
<div class="type-title">
|
|
343
|
+
<h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
|
|
344
|
+
<div class="type-description">
|
|
345
|
+
{{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
|
|
410
346
|
</div>
|
|
411
|
-
</
|
|
412
|
-
|
|
347
|
+
</div>
|
|
348
|
+
</template>
|
|
349
|
+
<template v-slot:body>
|
|
350
|
+
<div
|
|
351
|
+
class="checkbox-section"
|
|
352
|
+
:class="'checkbox-section--' + roleType"
|
|
353
|
+
>
|
|
413
354
|
<div
|
|
414
|
-
|
|
415
|
-
:
|
|
355
|
+
v-for="(role, i) in sortedRoles[roleType]"
|
|
356
|
+
:key="i"
|
|
357
|
+
class="checkbox mb-10 mr-10"
|
|
416
358
|
>
|
|
417
|
-
<
|
|
418
|
-
v-
|
|
419
|
-
:
|
|
420
|
-
|
|
359
|
+
<Checkbox
|
|
360
|
+
v-model:value="selectedRoles"
|
|
361
|
+
:value-when-true="role.id"
|
|
362
|
+
:disabled="!!assignOnlyRoles[role.id]"
|
|
363
|
+
:label="role.nameDisplay"
|
|
364
|
+
:description="role.descriptionDisplay"
|
|
365
|
+
:mode="mode"
|
|
366
|
+
:data-testId="'grb-checkbox-' + role.id"
|
|
367
|
+
@update:value="checkboxChanged"
|
|
421
368
|
>
|
|
422
|
-
<
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
>
|
|
432
|
-
|
|
433
|
-
<div class="checkbox-label-slot">
|
|
434
|
-
<span class="checkbox-label">{{ role.nameDisplay }}</span>
|
|
435
|
-
<i
|
|
436
|
-
v-if="!!assignOnlyRoles[role.id]"
|
|
437
|
-
v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
|
|
438
|
-
class="checkbox-info icon icon-info icon-lg"
|
|
439
|
-
/>
|
|
440
|
-
</div>
|
|
441
|
-
</template>
|
|
442
|
-
</Checkbox>
|
|
443
|
-
</div>
|
|
369
|
+
<template #label>
|
|
370
|
+
<div class="checkbox-label-slot">
|
|
371
|
+
<span class="checkbox-label">{{ role.nameDisplay }}</span>
|
|
372
|
+
<i
|
|
373
|
+
v-if="!!assignOnlyRoles[role.id]"
|
|
374
|
+
v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
|
|
375
|
+
class="checkbox-info icon icon-info icon-lg"
|
|
376
|
+
/>
|
|
377
|
+
</div>
|
|
378
|
+
</template>
|
|
379
|
+
</Checkbox>
|
|
444
380
|
</div>
|
|
445
|
-
</
|
|
446
|
-
</
|
|
447
|
-
</
|
|
448
|
-
</
|
|
381
|
+
</div>
|
|
382
|
+
</template>
|
|
383
|
+
</Card>
|
|
384
|
+
</div>
|
|
449
385
|
</form>
|
|
450
386
|
</div>
|
|
451
387
|
</template>
|
|
@@ -216,9 +216,9 @@ export default defineComponent({
|
|
|
216
216
|
<div
|
|
217
217
|
v-for="(psaControl, level, i) in psaControls"
|
|
218
218
|
:key="i"
|
|
219
|
-
class="row row--y-center
|
|
219
|
+
class="row row--y-center"
|
|
220
220
|
>
|
|
221
|
-
<span class="col">
|
|
221
|
+
<span class="col span-1">
|
|
222
222
|
<Checkbox
|
|
223
223
|
v-if="!labelsAlwaysActive"
|
|
224
224
|
v-model:value="psaControl.active"
|
|
@@ -89,12 +89,10 @@ const getRowValueId = (row:Row): string => `value-${ row.label }:${ row.value }`
|
|
|
89
89
|
flex-direction: column;
|
|
90
90
|
|
|
91
91
|
.row {
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
min-height: 40px;
|
|
94
93
|
.value {
|
|
95
94
|
display: flex;
|
|
96
95
|
flex-direction: row;
|
|
97
|
-
align-items: center;
|
|
98
96
|
|
|
99
97
|
&, & * {
|
|
100
98
|
max-width: 100%;
|
|
@@ -53,13 +53,13 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
|
|
|
53
53
|
|
|
54
54
|
<template>
|
|
55
55
|
<div class="key-value">
|
|
56
|
-
<div class="heading">
|
|
56
|
+
<div class="heading h40">
|
|
57
57
|
<span class="title text-deemphasized">{{ propertyName }}</span>
|
|
58
58
|
<span class="count">{{ rows.length }}</span>
|
|
59
59
|
</div>
|
|
60
60
|
<div
|
|
61
61
|
v-if="visibleRows.length === 0"
|
|
62
|
-
class="empty
|
|
62
|
+
class="empty text-deemphasized"
|
|
63
63
|
>
|
|
64
64
|
<div class="no-rows">
|
|
65
65
|
{{ i18n.t('component.resource.detail.metadata.keyValue.noRows', {propertyName: lowercasePropertyName}) }}
|
|
@@ -78,7 +78,7 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
|
|
|
78
78
|
<div
|
|
79
79
|
v-for="row in visibleRows"
|
|
80
80
|
:key="displayValue(row)"
|
|
81
|
-
class="row"
|
|
81
|
+
class="row h40"
|
|
82
82
|
>
|
|
83
83
|
<Rectangle
|
|
84
84
|
v-clean-tooltip="displayValue(row)"
|
|
@@ -104,18 +104,22 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
|
|
|
104
104
|
display: flex;
|
|
105
105
|
flex-direction: column;
|
|
106
106
|
align-items: flex-start;
|
|
107
|
+
|
|
108
|
+
.h40 {
|
|
109
|
+
min-height: 40px;
|
|
110
|
+
}
|
|
107
111
|
|
|
108
112
|
.count {
|
|
109
113
|
margin-left: 24px;
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
.heading {
|
|
113
|
-
margin-bottom: 8px;
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
.row {
|
|
117
120
|
display: block;
|
|
118
121
|
width: 100%;
|
|
122
|
+
line-height: 40px;
|
|
119
123
|
|
|
120
124
|
&:not(:nth-child(2)) {
|
|
121
125
|
margin-top: 4px;
|
|
@@ -31,10 +31,12 @@ const showBothEmpty = computed(() => labels.length === 0 && annotations.length =
|
|
|
31
31
|
|
|
32
32
|
<template>
|
|
33
33
|
<SpacedRow
|
|
34
|
-
|
|
34
|
+
v-if="false"
|
|
35
|
+
class="metadata ppb-5"
|
|
35
36
|
v-bind="$attrs"
|
|
36
37
|
>
|
|
37
38
|
<div
|
|
39
|
+
v-if="identifyingInformation?.length > 0"
|
|
38
40
|
class="identifying-info"
|
|
39
41
|
>
|
|
40
42
|
<IdentifyingInformation :rows="identifyingInformation" />
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<div class="title">
|
|
3
3
|
<slot name="default" />
|
|
4
|
-
</
|
|
4
|
+
</div>
|
|
5
5
|
</template>
|
|
6
6
|
|
|
7
7
|
<style lang="scss" scoped>
|
|
8
|
-
|
|
8
|
+
.title {
|
|
9
9
|
display: inline-block;
|
|
10
10
|
align-items: center;
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: row;
|
|
13
|
+
font-size: 14px;
|
|
13
14
|
}
|
|
14
15
|
</style>
|
|
@@ -14,7 +14,22 @@ export const useDefaultTitleBarProps = (resource: any, resourceSubtype?: Ref<str
|
|
|
14
14
|
const resourceSubtypeValue = toValue(resourceSubtype);
|
|
15
15
|
const currentStore = store.getters['currentStore'](resourceValue.type);
|
|
16
16
|
const schema = store.getters[`${ currentStore }/schemaFor`](resourceValue.type);
|
|
17
|
-
|
|
17
|
+
let resourceTypeLabel = resourceValue.parentNameOverride || store.getters['type-map/labelFor'](schema);
|
|
18
|
+
|
|
19
|
+
// 转换为中文
|
|
20
|
+
const displayName_zh_hans: Record<string, string> = {
|
|
21
|
+
'GlobalRole': '全局角色',
|
|
22
|
+
'RoleTemplate': '集群角色',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (displayName_zh_hans[resourceTypeLabel]) {
|
|
26
|
+
resourceTypeLabel = displayName_zh_hans[resourceTypeLabel]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (resourceTypeLabel == '集群角色' && (route.query?.roleContext == 'NAMESPACE' || resource?.parentLocationOverride?.hash == '#NAMESPACE')) {
|
|
30
|
+
resourceTypeLabel = '项目或资源组角色'
|
|
31
|
+
}
|
|
32
|
+
|
|
18
33
|
const resourceName = resourceSubtypeValue ? `${ resourceSubtypeValue } - ${ resourceValue.nameDisplay }` : resourceValue.nameDisplay;
|
|
19
34
|
const resourceTo = resourceValue.listLocation || {
|
|
20
35
|
name: 'c-cluster-product-resource',
|