dashboard-shell-shell 3.0.5-test.4 → 3.0.5-test.40
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/brand/csp/favicon.png +0 -0
- package/assets/icons/iconfont.css +4 -1
- package/assets/images/pl/dark/logo.png +0 -0
- package/assets/styles/all.scss +23 -3
- 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/_form.scss +1 -0
- package/assets/styles/global/_select.scss +1 -1
- package/assets/styles/global/_tooltip.scss +9 -5
- package/assets/styles/themes/_light.scss +6 -4
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +59 -0
- package/assets/translations/zh-hans.yaml +168 -15
- 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 +51 -112
- package/components/PodSecurityAdmission.vue +2 -2
- package/components/RelatedResources.vue +3 -0
- 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 +8 -7
- package/components/ResourceDetail/legacy.vue +18 -16
- package/components/ResourceList/Masthead.vue +13 -17
- package/components/ResourceTable.vue +10 -0
- package/components/SideNav.vue +21 -21
- package/components/SortableTable/THead.vue +46 -1
- package/components/SortableTable/index.vue +40 -20
- package/components/Tabbed/index.vue +6 -1
- package/components/auth/Principal.vue +10 -5
- 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 +5 -3
- 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 +4 -4
- package/components/form/Members/ClusterMembershipEditor.vue +1 -1
- package/components/form/Members/ClusterPermissionsEditor.vue +31 -28
- 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/ProjectMemberEditor.vue +28 -25
- 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 +7 -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 +13 -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 +11 -3
- package/config/menuRouteMap.js +10 -0
- package/config/product/explorer.js +31 -9
- 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 +14 -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 +90 -118
- package/pages/account/pri.vue +229 -0
- package/pages/auth/login.vue +6 -1
- package/pages/auth/setup.vue +36 -17
- package/pages/c/_cluster/_product/namespaces.vue +1 -1
- 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/Form/Radio/RadioGroup.vue +9 -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 -3
- package/types/shell/index.d.ts +4 -30
- package/utils/error.js +3 -1
- package/utils/errorTranslate.json +366 -2
- package/vue.config.js +1 -1
|
@@ -1074,12 +1074,22 @@ export default {
|
|
|
1074
1074
|
if ( col.labelKey ) {
|
|
1075
1075
|
return this.t(col.labelKey, undefined, true);
|
|
1076
1076
|
} else if ( col.label ) {
|
|
1077
|
-
|
|
1077
|
+
// 判断 label 是否为中文
|
|
1078
|
+
if (this.isChinese(col.label)) {
|
|
1079
|
+
return col.label;
|
|
1080
|
+
} else {
|
|
1081
|
+
return this.t(`tableHeaders.${col.label.replace(/\s+/g, '').toLowerCase()}`, undefined, true);
|
|
1082
|
+
}
|
|
1078
1083
|
}
|
|
1079
1084
|
|
|
1080
1085
|
return ucFirst(col.name);
|
|
1081
1086
|
},
|
|
1082
1087
|
|
|
1088
|
+
// 判断字符串是否包含中文
|
|
1089
|
+
isChinese(str) {
|
|
1090
|
+
return /[\u4e00-\u9fa5]/.test(str);
|
|
1091
|
+
},
|
|
1092
|
+
|
|
1083
1093
|
valueFor(row, col, isLabel) {
|
|
1084
1094
|
if (typeof col.value === 'function') {
|
|
1085
1095
|
return col.value(row);
|
|
@@ -1259,15 +1269,15 @@ export default {
|
|
|
1259
1269
|
>
|
|
1260
1270
|
<!-- 主标题和过滤器区域 -->
|
|
1261
1271
|
<div
|
|
1262
|
-
:class="{'titled': $slots.title && $slots.title.length, 'mb-40': isFilterLabel}"
|
|
1263
|
-
class="sortable-table-header
|
|
1272
|
+
:class="{'titled': $slots.title && $slots.title.length, 'mb-40': isFilterLabel }"
|
|
1273
|
+
class="sortable-table-header"
|
|
1264
1274
|
>
|
|
1265
1275
|
<slot name="title" />
|
|
1266
1276
|
|
|
1267
1277
|
<!-- 顶部功能行区域 -->
|
|
1268
1278
|
<div
|
|
1269
1279
|
v-if="showHeaderRow"
|
|
1270
|
-
class="fixed-header-table-actions"
|
|
1280
|
+
class="fixed-header-table-actions mb-20"
|
|
1271
1281
|
:class="{button: !!$slots['header-button'], 'advanced-filtering': hasAdvancedFiltering, }"
|
|
1272
1282
|
style="display: flex;"
|
|
1273
1283
|
>
|
|
@@ -1280,6 +1290,8 @@ export default {
|
|
|
1280
1290
|
style="max-height: 32px;"
|
|
1281
1291
|
>
|
|
1282
1292
|
|
|
1293
|
+
<slot name="search-main-button" />
|
|
1294
|
+
|
|
1283
1295
|
<!-- 已应用的高级筛选 -->
|
|
1284
1296
|
<ul
|
|
1285
1297
|
v-if="hasAdvancedFiltering"
|
|
@@ -1367,9 +1379,6 @@ export default {
|
|
|
1367
1379
|
<slot name="header-button" />
|
|
1368
1380
|
|
|
1369
1381
|
<div style="display: flex;">
|
|
1370
|
-
|
|
1371
|
-
<slot name="search-main-button" />
|
|
1372
|
-
|
|
1373
1382
|
<!-- 搜索输入框 -->
|
|
1374
1383
|
<input
|
|
1375
1384
|
v-if="search"
|
|
@@ -1398,14 +1407,18 @@ export default {
|
|
|
1398
1407
|
|
|
1399
1408
|
</div>
|
|
1400
1409
|
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1410
|
+
<div style="display: flex;">
|
|
1411
|
+
<slot name="header-button-left" />
|
|
1412
|
+
|
|
1413
|
+
<!-- 中间区域插槽 -->
|
|
1414
|
+
<div
|
|
1415
|
+
v-if="!hasAdvancedFiltering && $slots['header-middle']"
|
|
1416
|
+
class="middle"
|
|
1417
|
+
style="margin-left: 10px;"
|
|
1418
|
+
>
|
|
1419
|
+
<slot name="header-middle" />
|
|
1420
|
+
</div>
|
|
1421
|
+
</div>
|
|
1409
1422
|
</div>
|
|
1410
1423
|
</div>
|
|
1411
1424
|
|
|
@@ -1841,7 +1854,7 @@ export default {
|
|
|
1841
1854
|
class="paging"
|
|
1842
1855
|
>
|
|
1843
1856
|
<div style="height: 100%; align-content: center;">
|
|
1844
|
-
共 {{ filteredRows.length }} 条
|
|
1857
|
+
共 {{ filteredRows ? filteredRows.length : 0 }} 条
|
|
1845
1858
|
</div>
|
|
1846
1859
|
|
|
1847
1860
|
<button
|
|
@@ -2186,7 +2199,7 @@ export default {
|
|
|
2186
2199
|
border-collapse: collapse;
|
|
2187
2200
|
min-width: 400px;
|
|
2188
2201
|
border-radius: 5px 5px 0 0;
|
|
2189
|
-
border-bottom: 1px solid var(--border);
|
|
2202
|
+
border-bottom: 1px solid var(--border) !important;
|
|
2190
2203
|
/* outline: 1px solid var(--border); */
|
|
2191
2204
|
background: var(--sortable-table-bg);
|
|
2192
2205
|
border-radius: 4px;
|
|
@@ -2201,6 +2214,9 @@ export default {
|
|
|
2201
2214
|
td {
|
|
2202
2215
|
padding: 8px 5px;
|
|
2203
2216
|
border: 0;
|
|
2217
|
+
white-space: normal;
|
|
2218
|
+
word-break: break-all;
|
|
2219
|
+
overflow-wrap: break-word;
|
|
2204
2220
|
|
|
2205
2221
|
&:first-child {
|
|
2206
2222
|
padding-left: 10px;
|
|
@@ -2217,8 +2233,9 @@ export default {
|
|
|
2217
2233
|
|
|
2218
2234
|
tbody {
|
|
2219
2235
|
tr {
|
|
2220
|
-
border-bottom: 1px solid var(--sortable-table-top-divider);
|
|
2236
|
+
border-bottom: 1px solid var(--sortable-table-top-divider) !important;
|
|
2221
2237
|
background-color: var(--sortable-table-row-bg);
|
|
2238
|
+
height: 60px;
|
|
2222
2239
|
|
|
2223
2240
|
&.main-row.has-sub-row {
|
|
2224
2241
|
border-bottom: 0;
|
|
@@ -2282,6 +2299,7 @@ export default {
|
|
|
2282
2299
|
|
|
2283
2300
|
&:first-child {
|
|
2284
2301
|
border-bottom: 2px solid var(--sortable-table-row-bg);
|
|
2302
|
+
height: 40px;
|
|
2285
2303
|
}
|
|
2286
2304
|
|
|
2287
2305
|
&:not(:first-child) {
|
|
@@ -2658,13 +2676,15 @@ export default {
|
|
|
2658
2676
|
|
|
2659
2677
|
.pageSelect{
|
|
2660
2678
|
&:deep() .vs__actions:after{
|
|
2661
|
-
padding-top: 10px;
|
|
2679
|
+
// padding-top: 10px;
|
|
2680
|
+
display: flex;
|
|
2681
|
+
align-items: center;
|
|
2662
2682
|
}
|
|
2663
2683
|
}
|
|
2664
2684
|
.sort-table-div{
|
|
2665
2685
|
width:100%;
|
|
2666
2686
|
white-space:nowrap;
|
|
2667
|
-
overflow-x: auto;
|
|
2687
|
+
// overflow-x: auto;
|
|
2668
2688
|
}
|
|
2669
2689
|
|
|
2670
2690
|
/* 滚动阴影左边 */
|
|
@@ -384,12 +384,13 @@ export default {
|
|
|
384
384
|
|
|
385
385
|
&.horizontal {
|
|
386
386
|
border: solid thin var(--border);
|
|
387
|
-
border-bottom: 0;
|
|
387
|
+
// border-bottom: 0;
|
|
388
388
|
display: flex;
|
|
389
389
|
flex-direction: row;
|
|
390
390
|
|
|
391
391
|
+ .tab-container {
|
|
392
392
|
border: solid thin var(--border);
|
|
393
|
+
border-top: 0px;
|
|
393
394
|
}
|
|
394
395
|
|
|
395
396
|
.tab.active {
|
|
@@ -504,6 +505,8 @@ margin: 0px -20px;
|
|
|
504
505
|
display: flex;
|
|
505
506
|
border-bottom:1px solid #d7d7d7;
|
|
506
507
|
padding: 0 0 0 20px;
|
|
508
|
+
// overflow: auto;
|
|
509
|
+
// overflow-y: hidden;
|
|
507
510
|
/* flex: 1 0; */
|
|
508
511
|
/* flex-direction: column; */
|
|
509
512
|
|
|
@@ -571,6 +574,8 @@ margin: 0px -20px;
|
|
|
571
574
|
li {
|
|
572
575
|
display: flex;
|
|
573
576
|
flex: 1;
|
|
577
|
+
border-left: 1px solid var(--border);
|
|
578
|
+
border-right: 1px solid var(--border);
|
|
574
579
|
|
|
575
580
|
.btn {
|
|
576
581
|
flex: 1 1;
|
|
@@ -20,7 +20,11 @@ export default {
|
|
|
20
20
|
isShowPass: {
|
|
21
21
|
type: Boolean,
|
|
22
22
|
default: false,
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
|
+
userLogoSize: {
|
|
25
|
+
type: Number,
|
|
26
|
+
default: 20,
|
|
27
|
+
},
|
|
24
28
|
},
|
|
25
29
|
|
|
26
30
|
async fetch() {
|
|
@@ -90,8 +94,9 @@ export default {
|
|
|
90
94
|
</template>
|
|
91
95
|
|
|
92
96
|
<template v-else-if="principal">
|
|
93
|
-
<div class="avatar">
|
|
97
|
+
<div :style="userLogoSize === 79 ? { width: '287px' } : {}" class="avatar">
|
|
94
98
|
<img
|
|
99
|
+
:style="{ width: userLogoSize + 'px', height: userLogoSize + 'px' }"
|
|
95
100
|
src="@shell/assets/images/user.png"
|
|
96
101
|
:class="{'round': principal.roundAvatar}"
|
|
97
102
|
:alt="t('principal.alt.avatar')"
|
|
@@ -166,7 +171,7 @@ export default {
|
|
|
166
171
|
</template>
|
|
167
172
|
|
|
168
173
|
<style lang="scss" scoped>
|
|
169
|
-
$size:
|
|
174
|
+
$size: 20px;
|
|
170
175
|
|
|
171
176
|
.principal {
|
|
172
177
|
display: grid;
|
|
@@ -174,7 +179,7 @@ export default {
|
|
|
174
179
|
"avatar name"
|
|
175
180
|
"avatar description";
|
|
176
181
|
grid-template-columns: $size auto;
|
|
177
|
-
grid-template-rows: auto math.div($size, 2);
|
|
182
|
+
// grid-template-rows: auto math.div($size, 2);
|
|
178
183
|
column-gap: 10px;
|
|
179
184
|
|
|
180
185
|
th {
|
|
@@ -209,7 +214,7 @@ export default {
|
|
|
209
214
|
.avatar {
|
|
210
215
|
/* grid-area: avatar;
|
|
211
216
|
text-align: center; */
|
|
212
|
-
width: 287px;
|
|
217
|
+
// width: 287px;
|
|
213
218
|
display: flex;
|
|
214
219
|
justify-content: center;
|
|
215
220
|
align-items: center;
|
|
@@ -152,7 +152,7 @@ export default {
|
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
if (this.value?.metadata?.name && !this.value
|
|
155
|
+
if (this.value?.metadata?.name && !this.value?.displayName) {
|
|
156
156
|
this.value['displayName'] = this.value.metadata.name;
|
|
157
157
|
}
|
|
158
158
|
|
|
@@ -705,12 +705,12 @@ export default {
|
|
|
705
705
|
<!-- 列表头部 -->
|
|
706
706
|
<template #column-headers>
|
|
707
707
|
<div class="column-headers row">
|
|
708
|
-
<div :class="ruleClass">
|
|
708
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
709
709
|
<span class="text-label">{{ t('rbac.roletemplate.tabs.grantResources.tableHeaders.verbs') }}
|
|
710
710
|
<span class="required">*</span>
|
|
711
711
|
</span>
|
|
712
712
|
</div>
|
|
713
|
-
<div :class="ruleClass">
|
|
713
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
714
714
|
<span class="text-label">
|
|
715
715
|
{{ t('rbac.roletemplate.tabs.grantResources.tableHeaders.resources') }}
|
|
716
716
|
<i
|
|
@@ -723,7 +723,7 @@ export default {
|
|
|
723
723
|
>*</span>
|
|
724
724
|
</span>
|
|
725
725
|
</div>
|
|
726
|
-
<div :class="ruleClass">
|
|
726
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
727
727
|
<span class="text-label">{{ t('rbac.roletemplate.tabs.grantResources.tableHeaders.apiGroups') }}</span>
|
|
728
728
|
</div>
|
|
729
729
|
<div
|
|
@@ -740,7 +740,7 @@ export default {
|
|
|
740
740
|
<div class="columns row mr-20">
|
|
741
741
|
|
|
742
742
|
<!-- 动作(verbs)选择 -->
|
|
743
|
-
<div :class="ruleClass">
|
|
743
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
744
744
|
<!-- Select verbs -->
|
|
745
745
|
<Select
|
|
746
746
|
:value="props.row.value.verbs"
|
|
@@ -758,7 +758,7 @@ export default {
|
|
|
758
758
|
</div>
|
|
759
759
|
|
|
760
760
|
<!-- 资源(resources)选择 -->
|
|
761
|
-
<div :class="ruleClass">
|
|
761
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
762
762
|
<Select
|
|
763
763
|
style="width: auto;"
|
|
764
764
|
:value="getRule('resources', props.row.value)"
|
|
@@ -776,7 +776,7 @@ export default {
|
|
|
776
776
|
</div>
|
|
777
777
|
|
|
778
778
|
<!-- API Groups 输入 -->
|
|
779
|
-
<div :class="ruleClass">
|
|
779
|
+
<div class="arrayListCls" :class="ruleClass">
|
|
780
780
|
<LabeledInput
|
|
781
781
|
:value="getRule('apiGroups', props.row.value)"
|
|
782
782
|
:disabled="isBuiltin"
|
|
@@ -788,6 +788,7 @@ export default {
|
|
|
788
788
|
|
|
789
789
|
<!-- 非命名空间 URL 输入(仅非命名空间模式显示) -->
|
|
790
790
|
<div
|
|
791
|
+
class="arrayListCls"
|
|
791
792
|
v-if="!isNamespaced"
|
|
792
793
|
:class="ruleClass"
|
|
793
794
|
>
|
|
@@ -859,6 +860,9 @@ export default {
|
|
|
859
860
|
</template>
|
|
860
861
|
|
|
861
862
|
<style lang="scss" scoped>
|
|
863
|
+
.arrayListCls {
|
|
864
|
+
min-width: 360px;
|
|
865
|
+
}
|
|
862
866
|
.ruleCls {
|
|
863
867
|
margin-right: 10px;
|
|
864
868
|
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { get } from '@shell/utils/object';;
|
|
3
|
+
import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
|
|
4
|
+
import { useStore } from 'vuex';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
|
|
8
|
+
name: 'MastheadBreadcrumb',
|
|
9
|
+
|
|
10
|
+
components: {
|
|
11
|
+
},
|
|
12
|
+
props: {
|
|
13
|
+
resourceTypeLabel: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: ''
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
resource: {
|
|
19
|
+
type: String,
|
|
20
|
+
default: null,
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
realMode: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: 'view',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
setup() {
|
|
31
|
+
const store = useStore();
|
|
32
|
+
const { featureDropdownMenu } = useRuntimeFlag(store);
|
|
33
|
+
|
|
34
|
+
return { featureDropdownMenu };
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
data() {
|
|
38
|
+
return {
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
computed: {
|
|
43
|
+
|
|
44
|
+
demoDisplay() {
|
|
45
|
+
|
|
46
|
+
const resources = this.$route.params?.resource || ''
|
|
47
|
+
|
|
48
|
+
let productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], resources);
|
|
49
|
+
const parts = productId?.split('::') || [];
|
|
50
|
+
const newString = 'root';
|
|
51
|
+
|
|
52
|
+
if (!parts?.includes(newString)) {
|
|
53
|
+
parts?.unshift(newString); // 将字符串添加到数组第一位
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const partsEn = parts.map((item) => {
|
|
57
|
+
return this.$store.getters['i18n/t'](`typeLabel."${ item.toLowerCase() }"`);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return partsEn;
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
methods: {
|
|
66
|
+
get,
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
<template>
|
|
72
|
+
<div class="masthead">
|
|
73
|
+
<div class="title">
|
|
74
|
+
<!-- 标题区域 -->
|
|
75
|
+
<div
|
|
76
|
+
class="excram-list"
|
|
77
|
+
>
|
|
78
|
+
<span
|
|
79
|
+
v-for="(item,index) in demoDisplay"
|
|
80
|
+
:key="index"
|
|
81
|
+
>
|
|
82
|
+
<span>{{ item }}</span>
|
|
83
|
+
<span>/</span>
|
|
84
|
+
</span>
|
|
85
|
+
<span class="excram-last-name">
|
|
86
|
+
{{ (realMode === 'view'? '查看': realMode === 'edit' ? '编辑':'创建') + resourceTypeLabel }}
|
|
87
|
+
</span>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
</template>
|
|
92
|
+
|
|
93
|
+
<style lang='scss' scoped>
|
|
94
|
+
|
|
95
|
+
.excram-list{
|
|
96
|
+
font-size: 14px;
|
|
97
|
+
margin-bottom: 20px;
|
|
98
|
+
}
|
|
99
|
+
.excram-last-name{
|
|
100
|
+
color: var(--link);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.detailIcon-span{
|
|
104
|
+
width: 24px;
|
|
105
|
+
height: 24px;
|
|
106
|
+
display: inline-block;
|
|
107
|
+
position: relative;
|
|
108
|
+
background: var(--primary);
|
|
109
|
+
margin-right: 10px;
|
|
110
|
+
}
|
|
111
|
+
.detailIcon{
|
|
112
|
+
position: absolute;
|
|
113
|
+
color: #fff;
|
|
114
|
+
font-size: 38px;
|
|
115
|
+
left: 4px;
|
|
116
|
+
top: -2px;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
</style>
|