dashboard-shell-shell 3.0.5-test.2 → 3.0.5-test.21

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 (145) hide show
  1. package/assets/icons/iconfont.css +4 -1
  2. package/assets/images/pl/dark/logo.png +0 -0
  3. package/assets/styles/all.scss +3 -1
  4. package/assets/styles/base/_variables.scss +5 -5
  5. package/assets/styles/global/_button.scss +8 -8
  6. package/assets/styles/global/_select.scss +1 -1
  7. package/assets/styles/global/_tooltip.scss +9 -5
  8. package/assets/styles/themes/_light.scss +3 -1
  9. package/assets/styles/vendor/vue-select.scss +2 -1
  10. package/assets/translations/zh-hans.yaml +140 -11
  11. package/components/ActionDropdown.vue +1 -1
  12. package/components/ButtonDropdown.vue +3 -1
  13. package/components/CodeMirror.vue +6 -4
  14. package/components/ContainerResourceLimit.vue +2 -2
  15. package/components/CopyToClipboard.vue +15 -0
  16. package/components/Drawer/Chrome.vue +2 -2
  17. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
  18. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
  19. package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
  20. package/components/ExplorerMembers.vue +28 -4
  21. package/components/GlobalRoleBindings.vue +48 -112
  22. package/components/PodSecurityAdmission.vue +1 -1
  23. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
  24. package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
  25. package/components/Resource/Detail/Metadata/index.vue +3 -1
  26. package/components/Resource/Detail/TitleBar/Title.vue +4 -3
  27. package/components/Resource/Detail/TitleBar/Top.vue +2 -0
  28. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  29. package/components/Resource/Detail/TitleBar/index.vue +113 -25
  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 +236 -165
  33. package/components/ResourceDetail/legacy.vue +44 -28
  34. package/components/ResourceList/Masthead.vue +11 -15
  35. package/components/SideNav.vue +1 -1
  36. package/components/SortableTable/index.vue +9 -4
  37. package/components/Tabbed/index.vue +6 -1
  38. package/components/auth/Principal.vue +42 -13
  39. package/components/auth/RoleDetailEdit.vue +11 -7
  40. package/components/breadcrumb/index.vue +124 -0
  41. package/components/form/ArrayList.vue +164 -147
  42. package/components/form/ArrayListGrouped.vue +3 -1
  43. package/components/form/ChangePassword.vue +1 -1
  44. package/components/form/Command.vue +4 -5
  45. package/components/form/Footer.vue +1 -0
  46. package/components/form/HealthCheck.vue +0 -2
  47. package/components/form/HookOption.vue +87 -58
  48. package/components/form/InputWithSelect.vue +8 -7
  49. package/components/form/KeyValue.vue +20 -2
  50. package/components/form/LabeledSelect.vue +6 -3
  51. package/components/form/Labels.vue +2 -2
  52. package/components/form/MatchExpressions.vue +3 -4
  53. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  54. package/components/form/Members/ClusterPermissionsEditor.vue +5 -5
  55. package/components/form/Members/MembershipEditor.vue +2 -2
  56. package/components/form/NameNsDescription.vue +1 -1
  57. package/components/form/Networking.vue +6 -9
  58. package/components/form/NodeAffinity.vue +29 -28
  59. package/components/form/PodAffinity.vue +23 -23
  60. package/components/form/Probe.vue +15 -11
  61. package/components/form/ResourceQuota/Namespace.vue +4 -4
  62. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  63. package/components/form/ResourceQuota/Project.vue +4 -4
  64. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  65. package/components/form/ResourceSelector.vue +1 -1
  66. package/components/form/Security.vue +1 -3
  67. package/components/form/Select.vue +6 -1
  68. package/components/form/ServiceNameSelect.vue +2 -5
  69. package/components/form/ServicePorts.vue +149 -75
  70. package/components/form/Taints.vue +2 -1
  71. package/components/form/Tolerations.vue +12 -9
  72. package/components/form/ValueFromResource.vue +110 -96
  73. package/components/form/WorkloadPorts.vue +143 -123
  74. package/components/nav/Header.vue +3 -4
  75. package/components/nav/NamespaceFilter.vue +15 -21
  76. package/components/nav/TopLevelMenu.vue +99 -125
  77. package/components/nav/Type.vue +3 -3
  78. package/config/product/explorer.js +4 -1
  79. package/config/router/navigation-guards/index.js +52 -3
  80. package/detail/node.vue +28 -23
  81. package/dialog/AddCustomBadgeDialog.vue +17 -9
  82. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  83. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  84. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  85. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  86. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  87. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  88. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  89. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  90. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  91. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  92. package/edit/networking.k8s.io.ingress/Certificate.vue +7 -5
  93. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  94. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  95. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  96. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  97. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  98. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  99. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  100. package/edit/persistentvolume/index.vue +3 -1
  101. package/edit/persistentvolumeclaim.vue +2 -0
  102. package/edit/secret/index.vue +2 -2
  103. package/edit/service.vue +4 -1
  104. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  105. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  106. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  107. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  108. package/edit/workload/Job.vue +31 -34
  109. package/edit/workload/Upgrading.vue +5 -5
  110. package/edit/workload/index.vue +21 -17
  111. package/edit/workload/storage/Mount.vue +1 -0
  112. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  113. package/edit/workload/storage/azureDisk.vue +14 -10
  114. package/edit/workload/storage/azureFile.vue +9 -7
  115. package/edit/workload/storage/csi/index.vue +6 -9
  116. package/edit/workload/storage/emptyDir.vue +7 -5
  117. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  118. package/edit/workload/storage/hostPath.vue +7 -5
  119. package/edit/workload/storage/nfs.vue +8 -6
  120. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  121. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  122. package/edit/workload/storage/secret.vue +9 -6
  123. package/edit/workload/storage/vsphereVolume.vue +11 -7
  124. package/initialize/app-extended.js +7 -1
  125. package/package.json +1 -1
  126. package/pages/account/index.vue +95 -115
  127. package/pages/auth/setup.vue +35 -16
  128. package/pages/c/_cluster/auth/roles/index.vue +38 -5
  129. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  130. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  131. package/pages/home.vue +3 -4
  132. package/pkg/tsconfig.json +9 -9
  133. package/pkg/vue.config.js +1 -1
  134. package/plugins/dashboard-store/resource-class.js +28 -27
  135. package/rancher-components/BadgeState/BadgeState.vue +33 -52
  136. package/rancher-components/Banner/Banner.vue +6 -3
  137. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  138. package/rancher-components/RcDropdown/RcDropdownMenu.vue +8 -7
  139. package/scripts/publish-shell.sh +1 -1
  140. package/store/i18n.js +4 -0
  141. package/store/type-map.js +1 -1
  142. package/types/shell/index.d.ts +4 -30
  143. package/utils/error.js +3 -1
  144. package/utils/errorTranslate.json +247 -2
  145. package/vue.config.js +1 -1
@@ -63,60 +63,41 @@ export default defineComponent({
63
63
  </script>
64
64
 
65
65
  <template>
66
- <span :class="['badge-state', bg]">
67
- <i
68
- v-if="icon"
69
- class="icon"
70
- :class="{[icon]: true, 'mr-5': !!msg}"
71
- />{{ msg }}
72
- </span>
66
+ <div style="display: flex;flex-direction: row;align-items: center;font-size: 12px;">
67
+ <div :class="{ [bg]: true }"></div>
68
+ <span style="margin-left: 5px;">{{ msg }}</span>
69
+
70
+ </div>
73
71
  </template>
74
-
75
72
  <style lang="scss" scoped>
76
- .badge-state {
77
- align-items: center;
78
- display: inline-flex;
79
- padding: 2px 10px;
80
- border: 1px solid transparent;
81
- border-radius: 20px;
82
-
83
- &.bg-info {
84
- border-color: var(--info);
85
- }
86
-
87
- &.bg-error {
88
- border-color: var(--error);
89
- }
90
-
91
- &.bg-warning {
92
- border-color: var(--warning);
93
- }
94
-
95
- // Successful states are de-emphasized by using [text-]color instead of background-color
96
- &.bg-success {
97
- color: var(--success);
98
- background: transparent;
99
- border-color: var(--success);
100
- }
101
-
102
- // Added badge-disabled instead of bg-disabled since bg-disabled is used in other places with !important styling, an investigation is needed to make the naming consistent
103
- &.badge-disabled {
104
- color: var(--badge-state-disabled-text);
105
- background-color: var( --badge-state-disabled-bg);
106
- border: 1px solid var(--badge-state-disabled-border);
107
- }
73
+ .bg-error {
74
+ width: 10px; /* 圆点的宽度 */
75
+ height: 10px; /* 圆点的高度 */
76
+ background-color: #DD0C17; /* 圆点的颜色 */
77
+ border-radius: 50%; /* 设置为圆形 */
108
78
  }
109
- </style>
110
- <style lang="scss">
111
- // TODO: #6005
112
- // Investigate why this is here.. I don't think that styles for sortable table should belong here
113
- .sortable-table TD .badge-state {
114
- @include clip;
115
- display: inline-block;
116
- max-width: 100%;
117
- position: relative;
118
- max-width: 110px;
119
- font-size: .85em;
120
- vertical-align: middle;
79
+ .bg-darker {
80
+ width: 10px; /* 圆点的宽度 */
81
+ height: 10px; /* 圆点的高度 */
82
+ background-color: #DD0C17; /* 圆点的颜色 */
83
+ border-radius: 50%; /* 设置为圆形 */
84
+ }
85
+ .bg-success {
86
+ width: 10px; /* 圆点的宽度 */
87
+ height: 10px; /* 圆点的高度 */
88
+ background-color: #95F204 !important; /* 圆点的颜色 */
89
+ border-radius: 50%; /* 设置为圆形 */
90
+ }
91
+ .bg-warning {
92
+ width: 10px; /* 圆点的宽度 */
93
+ height: 10px; /* 圆点的高度 */
94
+ background-color: #DAC342; /* 圆点的颜色 */
95
+ border-radius: 50%; /* 设置为圆形 */
96
+ }
97
+ .bg-info {
98
+ width: 10px; /* 圆点的宽度 */
99
+ height: 10px; /* 圆点的高度 */
100
+ background-color: #1890FF; /* 圆点的颜色 */
101
+ border-radius: 50%; /* 设置为圆形 */
121
102
  }
122
103
  </style>
@@ -164,6 +164,7 @@ $icon-size: 24px;
164
164
  margin: 0px 0px 20px 0px;
165
165
  position: relative;
166
166
  width: 100%;
167
+ min-height: 32px;
167
168
  color: var(--body-text);
168
169
 
169
170
  &__icon {
@@ -201,13 +202,15 @@ $icon-size: 24px;
201
202
  }
202
203
 
203
204
  &__content {
204
- padding: 9px 10px;
205
+ padding: 0px 10px;
205
206
  transition: all 0.2s ease;
206
207
  line-height: 12px;
207
208
  width: 100%;
208
209
  border-left: solid $left-border-size transparent;
209
210
  display: flex;
210
211
  gap: 3px;
212
+ height: 32px;
213
+ align-items: center;
211
214
  word-wrap:break-word;
212
215
  word-break:break-all;
213
216
 
@@ -227,8 +230,8 @@ $icon-size: 24px;
227
230
  }
228
231
 
229
232
  .info & {
230
- background: var(--info-banner-bg);
231
- // background: #f2f2f2;
233
+ // background: var(--info-banner-bg);
234
+ background: #f2f2f2;
232
235
  border-color: var(--info);
233
236
  }
234
237
 
@@ -123,8 +123,8 @@ export default defineComponent({
123
123
  &.null {
124
124
 
125
125
  .status-icon {
126
- top: 5px;
127
- right: -20px;
126
+ top: 8px !important;
127
+ right: 25px !important;
128
128
  }
129
129
  }
130
130
 
@@ -146,6 +146,35 @@ export default defineComponent({
146
146
  }
147
147
  }
148
148
 
149
+ .labeled-select{
150
+ .labeled-tooltip{
151
+ &.null {
152
+ .status-icon {
153
+ top: 10px !important;
154
+ right: 25px !important;
155
+ }
156
+ }
157
+
158
+ &.error {
159
+
160
+ .status-icon {
161
+ top: 9px !important;
162
+ right: 20px;
163
+ }
164
+ }
165
+ }
166
+ }
167
+ .labeled-input{
168
+ .labeled-tooltip{
169
+ &.null {
170
+ .status-icon {
171
+ top: 10px !important;
172
+ right: 10px !important;
173
+ }
174
+ }
175
+ }
176
+ }
177
+
149
178
  // Ensure code blocks inside tootips don't look awful
150
179
  .v-popper__popper.v-popper--theme-tooltip {
151
180
  .v-popper__inner {
@@ -33,10 +33,10 @@ const hasOptions = (options: DropdownOption[]) => {
33
33
  :data-testid="dataTestid"
34
34
  :aria-label="buttonAriaLabel"
35
35
  >
36
- <div v-if="showIcon">
37
- <i class="icon icon-actions" />
38
- </div>
39
- <a v-else href="javascript:;">操作</a>
36
+ <div v-if="showIcon">
37
+ <i data-v-5db2c2c7="" class="icon icon-actions" alt="More actions icon"></i>
38
+ </div>
39
+ <a v-else href="javascript:;">操作</a>
40
40
  </rc-dropdown-trigger>
41
41
  <template #dropdownCollection>
42
42
  <template
@@ -58,15 +58,16 @@ const hasOptions = (options: DropdownOption[]) => {
58
58
  </template> -->
59
59
  {{ a.label }}
60
60
  </rc-dropdown-item>
61
- <rc-dropdown-separator
61
+ <!-- <rc-dropdown-separator
62
62
  v-else
63
- />
63
+ /> -->
64
64
  </template>
65
65
  <rc-dropdown-item
66
66
  v-if="!hasOptions(options)"
67
67
  disabled
68
68
  >
69
- 暂无可执行的操作。
69
+ <!-- No actions available -->
70
+ 暂无可执行的操作。
70
71
  </rc-dropdown-item>
71
72
  </template>
72
73
  </rc-dropdown>
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  # 执行命令示例:
4
- # TAG=shell-pkg-v3.0.2-rc.105 ./shell/scripts/publish-shell.sh
4
+ # TAG=shell-pkg-v3.0.5-test.19 ./shell/scripts/publish-shell.sh
5
5
 
6
6
  set -euo pipefail
7
7
 
package/store/i18n.js CHANGED
@@ -108,6 +108,7 @@ export const getters = {
108
108
  ...args
109
109
  };
110
110
 
111
+ moreArgs['count'] = moreArgs['count'] !== undefined ? moreArgs['count'] : 1
111
112
  return formatter.format(moreArgs);
112
113
  } else {
113
114
  return '?';
@@ -231,6 +232,9 @@ export const actions = {
231
232
  if ( !selected || !exists) {
232
233
  selected = 'zh-hans';
233
234
  }
235
+
236
+ // selected = 'none'
237
+ selected = 'zh-hans'
234
238
 
235
239
  return dispatch('switchTo', selected);
236
240
  },
package/store/type-map.js CHANGED
@@ -515,7 +515,7 @@ export const getters = {
515
515
 
516
516
  groupsForVirTypes(state) {
517
517
  return (product, name) => {
518
- return state.virtualTypes?.[product].find(item => item.name === name)?.icon;
518
+ return state?.virtualTypes?.[product]?.find(item => item.name === name)?.icon;
519
519
  };
520
520
  },
521
521
 
@@ -3053,37 +3053,24 @@ export default class Resource {
3053
3053
  divider: boolean;
3054
3054
  action?: undefined;
3055
3055
  label?: undefined;
3056
- icon?: undefined;
3057
3056
  enabled?: undefined;
3057
+ altAction?: undefined;
3058
3058
  bulkable?: undefined;
3059
3059
  bulkAction?: undefined;
3060
3060
  weight?: undefined;
3061
- altAction?: undefined;
3062
3061
  } | {
3063
3062
  action: string;
3064
3063
  label: any;
3065
- icon: string;
3066
3064
  enabled: any;
3067
3065
  divider?: undefined;
3066
+ altAction?: undefined;
3068
3067
  bulkable?: undefined;
3069
3068
  bulkAction?: undefined;
3070
3069
  weight?: undefined;
3071
- altAction?: undefined;
3072
- } | {
3073
- action: string;
3074
- label: any;
3075
- icon: string;
3076
- bulkable: boolean;
3077
- bulkAction: string;
3078
- enabled: boolean;
3079
- weight: number;
3080
- divider?: undefined;
3081
- altAction?: undefined;
3082
3070
  } | {
3083
3071
  action: string;
3084
3072
  altAction: string;
3085
3073
  label: any;
3086
- icon: string;
3087
3074
  bulkable: boolean;
3088
3075
  enabled: any;
3089
3076
  bulkAction: string;
@@ -3095,37 +3082,24 @@ export default class Resource {
3095
3082
  divider: boolean;
3096
3083
  action?: undefined;
3097
3084
  label?: undefined;
3098
- icon?: undefined;
3099
3085
  enabled?: undefined;
3086
+ altAction?: undefined;
3100
3087
  bulkable?: undefined;
3101
3088
  bulkAction?: undefined;
3102
3089
  weight?: undefined;
3103
- altAction?: undefined;
3104
3090
  } | {
3105
3091
  action: string;
3106
3092
  label: any;
3107
- icon: string;
3108
3093
  enabled: any;
3109
3094
  divider?: undefined;
3095
+ altAction?: undefined;
3110
3096
  bulkable?: undefined;
3111
3097
  bulkAction?: undefined;
3112
3098
  weight?: undefined;
3113
- altAction?: undefined;
3114
- } | {
3115
- action: string;
3116
- label: any;
3117
- icon: string;
3118
- bulkable: boolean;
3119
- bulkAction: string;
3120
- enabled: boolean;
3121
- weight: number;
3122
- divider?: undefined;
3123
- altAction?: undefined;
3124
3099
  } | {
3125
3100
  action: string;
3126
3101
  altAction: string;
3127
3102
  label: any;
3128
- icon: string;
3129
3103
  bulkable: boolean;
3130
3104
  enabled: any;
3131
3105
  bulkAction: string;
package/utils/error.js CHANGED
@@ -199,9 +199,11 @@ export function translateError(error) {
199
199
 
200
200
  if (matches) {
201
201
  if (matches.length == 1) {
202
+ console.log('00045', error);
202
203
  error = error.replace(regex, translation.replacement);
203
204
  } else {
204
- error = translation.pattern.replace(/\$(.+)/g, (_, index) => matches[parseInt(index)]);
205
+ error = error.replace(regex, (...args) => translation.replacement.replace(/\$([1-9]\d*)/g, (_, idx) => args[Number(idx)] || ''))
206
+ console.log('00046', error);
205
207
  }
206
208
  }
207
209
  }
@@ -1,5 +1,246 @@
1
1
  {
2
2
  "translations": [
3
+ {
4
+ "pattern": "The new password must not be the same as the current password",
5
+ "replacement": "新密码不能与当前密码相同,请重新设置",
6
+ "flags": "gi"
7
+ },
8
+ {
9
+ "pattern": "guest memory is greater than the configured maxguest memory",
10
+ "replacement": "内存已超过所配置的最大客户机内存",
11
+ "flags": "gi"
12
+ },
13
+ {
14
+ "pattern": "memory hotplug is only available for vms with at least (\\d+[a-z]*) of guest memory",
15
+ "replacement": "内存热插拔仅适用于客户机内存至少为 $1 的虚拟机",
16
+ "flags": "gi"
17
+ },
18
+ {
19
+ "pattern": "storage class must contain csi\\.storage\\.k8s\\.io/(provisioner-secret-name|provisioner-secret-namespace|node-stage-secret-name|node-stage-secret-namespace|node-publish-secret-name|node-publish-secret-namespace)(?:,\\s*)?(.*)",
20
+ "replacement": "存储池必须包含以下 CSI 密钥注解:$1$2",
21
+ "flags": "gi"
22
+ },
23
+ {
24
+ "pattern": "sourceimagename is required when image source type is \"clone\"",
25
+ "replacement": "镜像来源类型为“克隆”时,必须填写源镜像名称",
26
+ "flags": "gi"
27
+ },
28
+ {
29
+ "pattern": "([^\"\\s]+) exceeds the file size limit of (\\d+) bytes",
30
+ "replacement": "文件 '$1' 超过大小限制 $2 字节",
31
+ "flags": "gi"
32
+ },
33
+ {
34
+ "pattern": "failure while starting vmi: virtualmachineinstance\\.kubevirt\\.io \"([^\"]+)\" is invalid: metadata\\.labels: invalid value: \"([^\"]+)\": name part must consist of alphanumeric characters, '-', '_' or '\\.', and must start and end with an alphanumeric character",
35
+ "replacement": "启动虚拟机实例失败:'$1' 标签值 '$2' 无效,只能包含字母、数字、'-','_'或'.',且以字母/数字开头和结尾",
36
+ "flags": "gi"
37
+ },
38
+ {
39
+ "pattern": "virtualmachine\\.kubevirt\\.io \"([^\"]+)\" is invalid:[\\s\\S]*?metadata\\.labels: invalid value: \"([^\"]*)\"[\\s\\S]*?regex used for validation is '([^']+)'",
40
+ "replacement": "虚拟机 '$1' 标签值 '$2' 无效:只能包含字母、数字、'-','_' 或 '.',且以字母/数字开头结尾(正则:$3)",
41
+ "flags": "gi"
42
+ },
43
+ {
44
+ "pattern": "virtualmachine\\.kubevirt\\.io \"([^\"]+)\" is invalid:[\\s\\S]*?spec\\.template: Invalid value: corev1\\.PodTemplateSpec \\{[\\s\\S]*?spec: corev1\\.PodSpec \\{[\\s\\S]*?containers: \\[corev1\\.Container \\{[\\s\\S]*?image: \"([^\"]*)\",[\\s\\S]*?\\}\\],[\\s\\S]*?nodeSelector: map\\[([^:]+): ([^\\]]+)\\],[\\s\\S]*?\\},[\\s\\S]*?\\},[\\s\\S]*?\\},[\\s\\S]*?regex used for validation is '([^']+)'",
45
+ "replacement": "虚拟机 '$1' 的镜像 '$2' 无法在节点标签 '$3=$4' 的节点上运行(正则:$5)",
46
+ "flags": "gi"
47
+ },
48
+ {
49
+ "pattern": "role is locked and cannot be assigned",
50
+ "replacement": "角色已被锁定,不能再分配",
51
+ "flags": "gi"
52
+ },
53
+ {
54
+ "pattern": "invalid current password",
55
+ "replacement": "当前密码输入错误,请重新输入",
56
+ "flags": "gi"
57
+ },
58
+ {
59
+ "pattern": "spec\\.template\\.spec\\.podaffinity\\.requiredduringschedulingignoredduringexecution\\[(\\d+)\\]\\.topologykey: required value: can not be empty[\\s\\S]*?regex used for validation is '([^']+)'",
60
+ "replacement": "拓扑键不能为空",
61
+ "flags": "gi"
62
+ },
63
+ {
64
+ "pattern": "pcidevice ([^\\s]+) has no iommugroup available",
65
+ "replacement": "PCI 设备 '$1' 没有可用的 IOMMU 组",
66
+ "flags": "gi"
67
+ },
68
+ {
69
+ "pattern": "invalidbodycontent 422: failed to parse totalsnapshotsizequota: quantities must match the regular expression '\\^\\(\\[\\+\\-\\]\\?\\[0-9\\.\\]\\+\\)\\(\\[eeinumkkmgtp\\]\\*\\[\\-\\+\\]\\?\\[0-9\\]\\*\\)\\$'",
70
+ "replacement": "快照配额不能为空",
71
+ "flags": "gi"
72
+ },
73
+ {
74
+ "pattern": "secrets \"([^\"]+)\" already exists",
75
+ "replacement": "密钥 \"$1\" 已存在",
76
+ "flags": "gi"
77
+ },
78
+ {
79
+ "pattern": "backup target is invalid",
80
+ "replacement": "备份目标无效",
81
+ "flags": "gi"
82
+ },
83
+ {
84
+ "pattern": "failed to list objects with param:[\\s\\S]*?server gave http response to https client",
85
+ "replacement": "列举对象失败:服务器返回 HTTP 响应,但客户端使用 HTTPS,请检查协议配置",
86
+ "flags": "gi"
87
+ },
88
+ {
89
+ "pattern": "clusternetwork\\.network\\.harvesterhci\\.io \"([^\"]+)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": a lowercase rfc 1123 subdomain must consist of lower case alphanumeric characters, '-' or '\\.', and must start and end with an alphanumeric character",
90
+ "replacement": "集群网络名称 '$1' 无效:须符合 RFC 1123 子域名规则,只能使用小写字母、数字、'-' 或 '.',且以字母或数字开头和结尾",
91
+ "flags": "gi"
92
+ },
93
+ {
94
+ "pattern": "loadbalancer\\.loadbalancer\\.harvesterhci\\.io \"([^\"]+)\" is invalid: \\[spec\\.listeners\\[(\\d+)\\]\\.(backendport|port): required value[^\\]]*\\]",
95
+ "replacement": "负载均衡器 '$1' 配置无效:第 $2 个监听器的 $3 为必填项",
96
+ "flags": "gi"
97
+ },
98
+ {
99
+ "pattern": "can't delete cluster network (\\S+) because vlanconfig\\(s\\) \\[(.*?)\\] under this clusternetwork are still existing",
100
+ "replacement": "无法删除集群网络 '$1',因其下仍存在 VLAN 配置 [$2]",
101
+ "flags": "gi"
102
+ },
103
+ {
104
+ "pattern": "value: (\\d+) must be in range \\[1 \\.\\. (\\d+)\\]",
105
+ "replacement": "值 $1 超出范围,必须在 1–$2 之间",
106
+ "flags": "gi"
107
+ },
108
+ {
109
+ "pattern": "can't delete vlanconfig (\\S+) because it is blocked by vm\\(s\\) ([^/]+)/(\\S+) which must be stopped at first",
110
+ "replacement": "无法删除 VLAN 配置 '$1':需先停止虚拟机 '$2/$3'",
111
+ "flags": "gi"
112
+ },
113
+ {
114
+ "pattern": "cannot find nfs path",
115
+ "replacement": "无法找到 NFS 路径",
116
+ "flags": "gi"
117
+ },
118
+ {
119
+ "pattern": "get \"([^\"]+)\": unsupported protocol scheme \"\"",
120
+ "replacement": "url 无效",
121
+ "flags": "gi"
122
+ },
123
+ {
124
+ "pattern": "cannot mount nfs ([^\\s]+)[\\s\\S]*?no such file or directory[\\s\\S]*?cannot mount using nfsv4",
125
+ "replacement": "备份存储的端点无法访问",
126
+ "flags": "gi"
127
+ },
128
+ {
129
+ "pattern": "can't create nad ([^/]+)/([^\\s]+) because the gateway ([^\\s]+) is invalid",
130
+ "replacement": "无法创建虚拟网络 '$1/$2',因为网关 '$3' 无效",
131
+ "flags": "gi"
132
+ },
133
+ {
134
+ "pattern": "can't create nad ([^/]+)/([^\\s]+) because the cidr ([^\\s]+) is invalid",
135
+ "replacement": "无法创建虚拟网络 '$1/$2',因为 CIDR '$3' 无效",
136
+ "flags": "gi"
137
+ },
138
+ {
139
+ "pattern": "no matching backup found for url ([^\\s]+) and backing image ([^\\s]+)",
140
+ "replacement": "未找到与 URL $1 和镜像 $2 匹配的备份",
141
+ "flags": "gi"
142
+ },
143
+ {
144
+ "pattern": "take virtual machine snapshot ([^\\s]+) successfully\\.",
145
+ "replacement": "虚拟机快照 '$1' 创建成功。",
146
+ "flags": "gi"
147
+ },
148
+ {
149
+ "pattern": "delete virtual machine snapshot ([^\\s]+) successfully\\.",
150
+ "replacement": "虚拟机快照 '$1' 删除成功。",
151
+ "flags": "gi"
152
+ },
153
+ {
154
+ "pattern": "restore virtual machine snapshot ([^\\s]+) successfully\\.",
155
+ "replacement": "虚拟机快照 '$1' 恢复成功。",
156
+ "flags": "gi"
157
+ },
158
+ {
159
+ "pattern": "update virtual machine snapshot ([^\\s]+) successfully\\.",
160
+ "replacement": "虚拟机快照 '$1' 更新成功。",
161
+ "flags": "gi"
162
+ },
163
+ {
164
+ "pattern": "failed to create subnet ([^\\s]+), conflict with existing subnet ([^\\s]+)",
165
+ "replacement": "创建子网 '$1' 失败,地址段与现有子网 '$2' 冲突",
166
+ "flags": "gi"
167
+ },
168
+ {
169
+ "pattern": "subnet\\.kubeovn\\.io \"([^\"]*)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": metadata\\.name in body should match '\\^\\[\\^0-9\\]'",
170
+ "replacement": "子网名称 '$1' 无效:名称不能以数字开头",
171
+ "flags": "gi"
172
+ },
173
+ {
174
+ "pattern": "(\\S+) conflict with v4 loopback cidr (\\S+)",
175
+ "replacement": "地址段 $1 与 IPv4 回环地址段 $2 冲突",
176
+ "flags": "gi"
177
+ },
178
+ {
179
+ "pattern": "can't delete subnet when any ips in using",
180
+ "replacement": "子网中仍有 IP 地址正在使用,无法删除",
181
+ "flags": "gi"
182
+ },
183
+ {
184
+ "pattern": "subnet ([^\\s]+) is still using the nad ([^\\s]+) default",
185
+ "replacement": "子网 '$1' 正在使用虚拟网络 '$2',请先删除子网 '$1' ",
186
+ "flags": "gi"
187
+ },
188
+ {
189
+ "pattern": "can't delete vpc when any subnet in the vpc",
190
+ "replacement": "VPC 内仍存在子网,无法删除该 VPC",
191
+ "flags": "gi"
192
+ },
193
+ {
194
+ "pattern": "(\\S+) in allowsubnets is not a valid address",
195
+ "replacement": "允许互通子网地址 $1 无效",
196
+ "flags": "gi"
197
+ },
198
+ {
199
+ "pattern": "gateway (\\S+) is not in cidr (\\S+)",
200
+ "replacement": "网关地址 $1 不在 CIDR $2 范围内",
201
+ "flags": "gi"
202
+ },
203
+ {
204
+ "pattern": "subnet ([^\\s]+) is using the provider ([^\\s]+) already",
205
+ "replacement": "子网 '$1' 已使用虚拟网络 '$2'",
206
+ "flags": "gi"
207
+ },
208
+ {
209
+ "pattern": "invalid next hop ip",
210
+ "replacement": "无效的下一跳地址",
211
+ "flags": "gi"
212
+ },
213
+ {
214
+ "pattern": "number of sockets in cpu topology is greater than the maximum sockets allowed, number of sockets in cpu topology is greater than the maximum sockets allowed",
215
+ "replacement": "CPU 拓扑中的 socket 数量已超过最大允许值",
216
+ "flags": "gi"
217
+ },
218
+ {
219
+ "pattern": "number of sockets in cpu topology is greater than the maximum sockets allowed",
220
+ "replacement": "CPU 拓扑中的 socket 数量已超过最大允许值",
221
+ "flags": "gi"
222
+ },
223
+
224
+ {
225
+ "pattern": "not a default subnet join as provider is ([^\\s]+)",
226
+ "replacement": "非默认子网,当前以提供者 $1 加入",
227
+ "flags": "gi"
228
+ },
229
+ {
230
+ "pattern": "subnet ([^\\s]+) cidr ([^\\s]+) is invalid, due to invalid cidr address: ([^\\s]+)",
231
+ "replacement": "子网 '$1' 的 CIDR 地址 '$2' 无效:不是合法的 CIDR 格式",
232
+ "flags": "gi"
233
+ },
234
+ {
235
+ "pattern": "validation failed in api: vpc.kubeovn.io \"([^\"]*)\" is invalid: metadata\\.name: invalid value: \"([^\"]*)\": a lowercase rfc 1123 subdomain must consist of lower case alphanumeric characters, '-' or '\\.', and must start and end with an alphanumeric character \\(e\\.g\\..*?\\)",
236
+ "replacement": "校验失败:VPC 名称 \"$1\" 不符合 RFC 1123 子域名规则,只能使用小写字母、数字、'-' 或 '.',且必须以字母/数字开头和结尾",
237
+ "flags": "gi"
238
+ },
239
+ {
240
+ "pattern": "validation 失败 in api",
241
+ "replacement": "API 校验失败",
242
+ "flags": "gi"
243
+ },
3
244
  {
4
245
  "pattern": "can't connect to backup target[\\s\\S]*no route to host",
5
246
  "replacement": "无法连接到备份目标:网络不可达,请检查备份服务器地址与路由",
@@ -817,11 +1058,11 @@
817
1058
  },
818
1059
  {
819
1060
  "pattern": "virtualmachinebackup.harvesterhci.io",
820
- "replacement": "虚拟机备份"
1061
+ "replacement": "虚拟机备份恢复"
821
1062
  },
822
1063
  {
823
1064
  "pattern": "virtualmachinebackup.cloudhci.io",
824
- "replacement": "虚拟机备份"
1065
+ "replacement": "虚拟机备份恢复"
825
1066
  },
826
1067
  {
827
1068
  "pattern": "vlanconfigs.network.harvesterhci.io",
@@ -1328,6 +1569,10 @@
1328
1569
  "pattern": "&quot;备份&quot; 是必填项。",
1329
1570
  "replacement": "\"快照/备份\" 是必填项"
1330
1571
  },
1572
+ {
1573
+ "pattern": "namespaces",
1574
+ "replacement": "资源组"
1575
+ },
1331
1576
  {
1332
1577
  "pattern": "%",
1333
1578
  "replacement": ""
package/vue.config.js CHANGED
@@ -157,7 +157,7 @@ const getLoaders = (SHELL_ABS) => [
157
157
  test: /\.m?[tj]sx?$/,
158
158
  // This excludes no modules except for node_modules/@rancher/... so that plugins can properly compile
159
159
  // when referencing @rancher/shell
160
- exclude: /node_modules\/(?!(@rancher)\/).*/,
160
+ exclude: /node_modules\/(?!(dashboard-shell-shell)\/).*/,
161
161
  use: [
162
162
  {
163
163
  loader: 'cache-loader',