dashboard-shell-shell 1.0.112 → 1.0.113
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/.DS_Store +0 -0
- package/assets/icons/demo.css +539 -0
- package/assets/icons/demo_index.html +1131 -0
- package/assets/icons/iconfont.css +200 -0
- package/assets/icons/iconfont.js +1 -0
- package/assets/icons/iconfont.json +296 -0
- package/assets/icons/iconfont.ttf +0 -0
- package/assets/icons/iconfont.woff +0 -0
- package/assets/icons/iconfont.woff2 +0 -0
- package/assets/images/API.svg +3 -0
- package/assets/images/login/password.svg +20 -0
- package/assets/images/login/user.svg +6 -0
- package/assets/images/login-bg.png +0 -0
- package/assets/images/login-left.png +0 -0
- package/assets/images/login-logo.svg +19 -0
- package/assets/images/logo.png +0 -0
- package/assets/images/pl/harvester.png +0 -0
- package/assets/images/promp-yellow.svg +5 -0
- package/assets/images/user.png +0 -0
- package/assets/styles/all.scss +63 -0
- package/assets/styles/app.scss +2 -0
- package/assets/styles/base/_basic.scss +8 -2
- package/assets/styles/base/_helpers.scss +4 -0
- package/assets/styles/base/_typography.scss +2 -1
- package/assets/styles/base/_variables.scss +10 -2
- package/assets/styles/global/_button.scss +37 -25
- package/assets/styles/global/_columns.scss +3 -1
- package/assets/styles/global/_form.scss +45 -13
- package/assets/styles/global/_labeled-input.scss +50 -25
- package/assets/styles/global/_layout.scss +9 -3
- package/assets/styles/global/_select.scss +20 -13
- package/assets/styles/global/_table.scss +1 -1
- package/assets/styles/global/_tooltip.scss +47 -6
- package/assets/styles/themes/_dark.scss +1 -0
- package/assets/styles/themes/_light.scss +59 -46
- package/assets/styles/themes/_suse.scss +1 -0
- package/assets/styles/vendor/vue-select.scss +18 -7
- package/assets/translations/en-us.yaml +93 -12
- package/assets/translations/zh-hans.yaml +278 -141
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/ActionMenu.vue +2 -2
- package/components/ActionMenuShell.vue +1 -0
- package/components/AppModal.vue +78 -6
- package/components/AssignTo.vue +25 -11
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/ButtonDropdown.vue +26 -4
- package/components/ButtonGroup.vue +4 -0
- package/components/ButtonMultiAction.vue +1 -0
- package/components/CommunityLinks.vue +3 -3
- package/components/ConsumptionGauge.vue +24 -5
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +12 -7
- package/components/CruResourceFooter.vue +2 -2
- package/components/DashboardOptions.vue +21 -15
- package/components/DetailText.vue +5 -0
- package/components/DisableAuthProviderModal.vue +1 -0
- package/components/DotState.vue +84 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +56 -14
- package/components/FixedBanner.vue +19 -12
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrafanaDashboard.vue +4 -4
- package/components/GrowlManager.vue +4 -1
- package/components/HardwareResourceGauge.vue +39 -3
- package/components/InfoBox.vue +3 -3
- package/components/InputOrDisplay.vue +28 -2
- package/components/LabelValue.vue +16 -1
- package/components/LandingPagePreference.vue +5 -3
- package/components/LocaleSelector.vue +39 -93
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +2 -0
- package/components/MoveModal.vue +1 -0
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +15 -2
- package/components/PromptRemove.vue +28 -8
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +188 -43
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +49 -14
- package/components/ResourceList/Masthead.vue +80 -18
- package/components/ResourceTable.vue +60 -19
- package/components/SideNav.vue +32 -12
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +34 -5
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +649 -142
- package/components/SortableTable/paging.js +36 -28
- package/components/SortableTable/selection.js +0 -11
- package/components/StatusBadge.vue +77 -0
- package/components/Tabbed/Tab.vue +3 -3
- package/components/Tabbed/index.vue +44 -26
- package/components/Wizard.vue +2 -2
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/FixedBanner.test.ts +3 -3
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/Principal.vue +10 -3
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/form/ArrayList.vue +123 -85
- package/components/form/ArrayListGrouped.vue +10 -2
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/Footer.vue +8 -5
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/KeyValue.vue +16 -7
- package/components/form/LabeledSelect.vue +59 -76
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +35 -12
- package/components/form/NameNsDescription.vue +147 -115
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/Password.vue +11 -5
- package/components/form/PodAffinity.vue +43 -44
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Project.vue +5 -1
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
- package/components/form/SSHKnownHosts/index.vue +16 -2
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +41 -7
- package/components/form/ShellInput.vue +5 -1
- package/components/form/Tolerations.vue +5 -1
- package/components/form/UnitInput.vue +2 -2
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/form/__tests__/UnitInput.test.ts +4 -5
- package/components/formatter/BadgeStateFormatter.vue +8 -5
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +60 -27
- package/components/nav/Header.vue +39 -13
- package/components/nav/Jump.vue +7 -0
- package/components/nav/NamespaceFilter.vue +14 -8
- package/components/nav/Pinned.vue +1 -1
- package/components/nav/TopLevelMenu.vue +5 -17
- package/components/nav/Type.vue +32 -35
- package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -0
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -1
- package/package.json +1 -1
- package/store/type-map.js +29 -2
- package/utils/error.js +30 -8
- package/utils/errorTranslate.json +916 -0
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
|
@@ -77,11 +77,6 @@ export default {
|
|
|
77
77
|
default: null,
|
|
78
78
|
},
|
|
79
79
|
|
|
80
|
-
groupBy: {
|
|
81
|
-
type: String,
|
|
82
|
-
default: null
|
|
83
|
-
},
|
|
84
|
-
|
|
85
80
|
namespaced: {
|
|
86
81
|
type: Boolean,
|
|
87
82
|
default: null, // Automatic from schema
|
|
@@ -117,11 +112,35 @@ export default {
|
|
|
117
112
|
default: true,
|
|
118
113
|
},
|
|
119
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Field to group rows by, row[groupBy] must be something that can be a map key
|
|
117
|
+
*/
|
|
118
|
+
groupBy: {
|
|
119
|
+
type: String,
|
|
120
|
+
default: null
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Override any product based group options
|
|
125
|
+
*/
|
|
126
|
+
groupOptions: {
|
|
127
|
+
type: Array,
|
|
128
|
+
default: null
|
|
129
|
+
},
|
|
130
|
+
|
|
120
131
|
groupable: {
|
|
121
132
|
type: Boolean,
|
|
122
133
|
default: null, // Null: auto based on namespaced and type custom groupings
|
|
123
134
|
},
|
|
124
135
|
|
|
136
|
+
/**
|
|
137
|
+
* If the current preference for group isn't applicable, or not set, use this instead
|
|
138
|
+
*/
|
|
139
|
+
groupDefault: {
|
|
140
|
+
type: String,
|
|
141
|
+
default: DEFAULT_GROUP,
|
|
142
|
+
},
|
|
143
|
+
|
|
125
144
|
groupTooltip: {
|
|
126
145
|
type: String,
|
|
127
146
|
default: 'resourceTable.groupBy.namespace',
|
|
@@ -189,10 +208,6 @@ export default {
|
|
|
189
208
|
default: null, // Default comes from the user preference
|
|
190
209
|
},
|
|
191
210
|
|
|
192
|
-
hideGroupingControls: {
|
|
193
|
-
type: Boolean,
|
|
194
|
-
default: false
|
|
195
|
-
}
|
|
196
211
|
},
|
|
197
212
|
|
|
198
213
|
data() {
|
|
@@ -328,8 +343,18 @@ export default {
|
|
|
328
343
|
// If we are grouping by a custom group, it may specify that we hide a specific column
|
|
329
344
|
const custom = this._listGroupMapped?.[this.group];
|
|
330
345
|
|
|
346
|
+
let hideColumn;
|
|
347
|
+
|
|
331
348
|
if (custom?.hideColumn) {
|
|
332
|
-
|
|
349
|
+
hideColumn = custom.hideColumn;
|
|
350
|
+
} else {
|
|
351
|
+
const componentCustom = this.groupOptions?.find((go) => go.value === this.group);
|
|
352
|
+
|
|
353
|
+
hideColumn = componentCustom?.hideColumn;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (hideColumn) {
|
|
357
|
+
const idx = headers.findIndex((header) => header.name === hideColumn);
|
|
333
358
|
|
|
334
359
|
if ( idx >= 0 ) {
|
|
335
360
|
headers.splice(idx, 1);
|
|
@@ -388,22 +413,24 @@ export default {
|
|
|
388
413
|
group: {
|
|
389
414
|
get() {
|
|
390
415
|
// Check group is valid
|
|
391
|
-
const exists = this.
|
|
416
|
+
const exists = this._groupOptions.find((g) => g.value === this._group);
|
|
392
417
|
|
|
393
418
|
if (!exists) {
|
|
394
419
|
// Attempt to find the default option in available options...
|
|
395
420
|
// if not use the first value in the options collection...
|
|
396
421
|
// and if not that just fall back to the default
|
|
397
|
-
if (this.
|
|
398
|
-
return
|
|
422
|
+
if (this._groupOptions.find((g) => g.value === this.groupDefault)) {
|
|
423
|
+
return this.groupDefault;
|
|
399
424
|
}
|
|
400
425
|
|
|
401
|
-
return this.
|
|
426
|
+
return this._groupOptions[0]?.value || this.groupDefault || DEFAULT_GROUP;
|
|
402
427
|
}
|
|
403
428
|
|
|
404
429
|
return this._group;
|
|
405
430
|
},
|
|
406
431
|
set(value) {
|
|
432
|
+
console.log('_group:===='+value);
|
|
433
|
+
|
|
407
434
|
this._group = value;
|
|
408
435
|
}
|
|
409
436
|
},
|
|
@@ -413,9 +440,13 @@ export default {
|
|
|
413
440
|
const namespaceGroupable = this.$store.getters['isMultipleNamespaces'] && this.isNamespaced;
|
|
414
441
|
const customGroupable = !!this.options?.listGroups?.length;
|
|
415
442
|
|
|
416
|
-
|
|
443
|
+
// sshkey去掉分组按钮
|
|
444
|
+
if(this.parsedPagingParams.singularLabel === 'SSH Key' || this.parsedPagingParams.singularLabel === '负载均衡器'){
|
|
445
|
+
return false
|
|
417
446
|
}
|
|
418
447
|
|
|
448
|
+
return namespaceGroupable || customGroupable || this.groupOptions?.length;
|
|
449
|
+
}
|
|
419
450
|
return this.groupable || false;
|
|
420
451
|
},
|
|
421
452
|
|
|
@@ -442,10 +473,20 @@ export default {
|
|
|
442
473
|
return custom.field;
|
|
443
474
|
}
|
|
444
475
|
|
|
476
|
+
const componentCustom = this.groupOptions?.find((go) => go.value === this.group);
|
|
477
|
+
|
|
478
|
+
if (componentCustom?.field) {
|
|
479
|
+
return componentCustom.field;
|
|
480
|
+
}
|
|
481
|
+
|
|
445
482
|
return null;
|
|
446
483
|
},
|
|
447
484
|
|
|
448
|
-
|
|
485
|
+
_groupOptions() {
|
|
486
|
+
if (this.groupOptions) {
|
|
487
|
+
return this.groupOptions;
|
|
488
|
+
}
|
|
489
|
+
|
|
449
490
|
// Ignore the defaults below, we have an override set of groups
|
|
450
491
|
// REPLACE (instead of SUPPLEMENT) defaults with listGroups (given listGroupsWillOverride is true)
|
|
451
492
|
if (this.options?.listGroupsWillOverride && !!this.options?.listGroups?.length) {
|
|
@@ -569,7 +610,7 @@ export default {
|
|
|
569
610
|
:alt-loading="altLoading"
|
|
570
611
|
:group-by="computedGroupBy"
|
|
571
612
|
:group="group"
|
|
572
|
-
:group-options="
|
|
613
|
+
:group-options="_groupOptions"
|
|
573
614
|
:search="search"
|
|
574
615
|
:paging="true"
|
|
575
616
|
:paging-params="parsedPagingParams"
|
|
@@ -596,14 +637,14 @@ export default {
|
|
|
596
637
|
@enter="handleEnterKeyPress"
|
|
597
638
|
>
|
|
598
639
|
<template
|
|
599
|
-
v-if="
|
|
640
|
+
v-if="showGrouping && _groupOptions.length > 1"
|
|
600
641
|
#header-middle
|
|
601
642
|
>
|
|
602
643
|
<slot name="more-header-middle" />
|
|
603
644
|
|
|
604
645
|
<ButtonGroup
|
|
605
646
|
v-model:value="group"
|
|
606
|
-
:options="
|
|
647
|
+
:options="_groupOptions"
|
|
607
648
|
/>
|
|
608
649
|
</template>
|
|
609
650
|
|
package/components/SideNav.vue
CHANGED
|
@@ -394,7 +394,14 @@ export default {
|
|
|
394
394
|
</script>
|
|
395
395
|
|
|
396
396
|
<template>
|
|
397
|
-
<nav
|
|
397
|
+
<nav
|
|
398
|
+
class="side-nav"
|
|
399
|
+
role="navigation"
|
|
400
|
+
:aria-label="t('nav.ariaLabel.sideNav')"
|
|
401
|
+
>
|
|
402
|
+
<div class="side-all-title">
|
|
403
|
+
控制台
|
|
404
|
+
</div>
|
|
398
405
|
<!-- Actual nav -->
|
|
399
406
|
<div class="nav">
|
|
400
407
|
<template
|
|
@@ -414,36 +421,36 @@ export default {
|
|
|
414
421
|
</template>
|
|
415
422
|
</div>
|
|
416
423
|
<!-- SideNav footer area (seems to be tied to harvester) -->
|
|
417
|
-
<div
|
|
424
|
+
<!-- <div
|
|
418
425
|
v-if="showProductFooter"
|
|
419
426
|
class="footer"
|
|
420
|
-
>
|
|
427
|
+
> -->
|
|
421
428
|
<!-- support link -->
|
|
422
|
-
<router-link
|
|
429
|
+
<!-- <router-link
|
|
423
430
|
:to="supportLink"
|
|
424
431
|
class="pull-right"
|
|
425
432
|
role="link"
|
|
426
433
|
:aria-label="t('nav.support', {hasSupport: true})"
|
|
427
434
|
>
|
|
428
435
|
{{ t('nav.support', {hasSupport: true}) }}
|
|
429
|
-
</router-link>
|
|
436
|
+
</router-link> -->
|
|
430
437
|
<!-- version number -->
|
|
431
|
-
<span
|
|
438
|
+
<!-- <span
|
|
432
439
|
v-clean-tooltip="{content: displayVersion, placement: 'top'}"
|
|
433
440
|
class="clip version text-muted"
|
|
434
441
|
>
|
|
435
442
|
{{ displayVersion }}
|
|
436
|
-
</span>
|
|
443
|
+
</span> -->
|
|
437
444
|
|
|
438
445
|
<!-- locale selector -->
|
|
439
|
-
<LocaleSelector
|
|
446
|
+
<!-- <LocaleSelector
|
|
440
447
|
v-if="isSingleProduct && hasMultipleLocales && !isStandaloneHarvester"
|
|
441
448
|
mode="login"
|
|
442
449
|
:show-icon="false"
|
|
443
|
-
/>
|
|
444
|
-
</div>
|
|
450
|
+
/> -->
|
|
451
|
+
<!-- </div> -->
|
|
445
452
|
<!-- SideNav footer alternative -->
|
|
446
|
-
<div
|
|
453
|
+
<!-- <div
|
|
447
454
|
v-else
|
|
448
455
|
class="version text-muted flex"
|
|
449
456
|
>
|
|
@@ -464,7 +471,7 @@ export default {
|
|
|
464
471
|
(Harvester-{{ harvesterVersion }})
|
|
465
472
|
</span>
|
|
466
473
|
</template>
|
|
467
|
-
</div>
|
|
474
|
+
</div> -->
|
|
468
475
|
</nav>
|
|
469
476
|
</template>
|
|
470
477
|
|
|
@@ -490,6 +497,10 @@ export default {
|
|
|
490
497
|
|
|
491
498
|
A { padding-left: 0; }
|
|
492
499
|
}
|
|
500
|
+
:deep() A{
|
|
501
|
+
height: 50px;
|
|
502
|
+
background-color: #fff;
|
|
503
|
+
}
|
|
493
504
|
|
|
494
505
|
.tools {
|
|
495
506
|
display: flex;
|
|
@@ -565,4 +576,13 @@ export default {
|
|
|
565
576
|
display: flex;
|
|
566
577
|
}
|
|
567
578
|
|
|
579
|
+
|
|
580
|
+
.side-all-title{
|
|
581
|
+
height: 50px;
|
|
582
|
+
line-height: 50px;
|
|
583
|
+
font-size: 16px;
|
|
584
|
+
color: #7f7f7f;
|
|
585
|
+
padding-left: 21px;
|
|
586
|
+
font-weight: bold;
|
|
587
|
+
}
|
|
568
588
|
</style>
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import { useStore } from 'vuex';
|
|
4
|
+
|
|
5
|
+
const HEADER_HEIGHT = 55;
|
|
6
|
+
|
|
7
|
+
const store = useStore();
|
|
8
|
+
const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
|
|
9
|
+
const currentComponent = computed(() => store.getters['slideInPanel/component']);
|
|
10
|
+
const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
|
|
11
|
+
|
|
12
|
+
const panelTop = computed(() => {
|
|
13
|
+
const banner = document.getElementById('banner-header');
|
|
14
|
+
let height = HEADER_HEIGHT;
|
|
15
|
+
|
|
16
|
+
if (banner) {
|
|
17
|
+
height += banner.clientHeight;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return `${ height }px`;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const panelHeight = computed(() => `calc(100vh - ${ panelTop?.value })`);
|
|
24
|
+
const panelWidth = computed(() => currentProps?.value?.width || '33%');
|
|
25
|
+
const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
|
|
26
|
+
|
|
27
|
+
const panelTitle = computed(() => currentProps?.value?.title || 'Details');
|
|
28
|
+
|
|
29
|
+
function closePanel() {
|
|
30
|
+
store.commit('slideInPanel/close');
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<template>
|
|
35
|
+
<Teleport to="#slides">
|
|
36
|
+
<div id="slide-in-panel-manager">
|
|
37
|
+
<div
|
|
38
|
+
v-show="isOpen"
|
|
39
|
+
data-testid="slide-in-glass"
|
|
40
|
+
class="slide-in-glass"
|
|
41
|
+
:class="{ 'slide-in-glass-open': isOpen }"
|
|
42
|
+
@click="closePanel"
|
|
43
|
+
/>
|
|
44
|
+
<div
|
|
45
|
+
class="slide-in"
|
|
46
|
+
:class="{ 'slide-in-open': isOpen }"
|
|
47
|
+
:style="{ width: panelWidth, right: panelRight, top: panelTop, height: panelHeight }"
|
|
48
|
+
>
|
|
49
|
+
<div class="header">
|
|
50
|
+
<div class="title">
|
|
51
|
+
{{ panelTitle }}
|
|
52
|
+
</div>
|
|
53
|
+
<i
|
|
54
|
+
class="icon icon-close"
|
|
55
|
+
data-testid="slide-in-close"
|
|
56
|
+
:trigger-focus-trap="true"
|
|
57
|
+
tabindex="0"
|
|
58
|
+
@click="closePanel"
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="main-panel">
|
|
62
|
+
<component
|
|
63
|
+
:is="currentComponent"
|
|
64
|
+
v-if="isOpen || currentComponent"
|
|
65
|
+
v-bind="currentProps"
|
|
66
|
+
data-testid="slide-in-panel-component"
|
|
67
|
+
class="dynamic-panel-content"
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</Teleport>
|
|
73
|
+
</template>
|
|
74
|
+
|
|
75
|
+
<style lang="scss" scoped>
|
|
76
|
+
.slide-in-glass {
|
|
77
|
+
display: none;
|
|
78
|
+
position: fixed;
|
|
79
|
+
top: 0;
|
|
80
|
+
left: 0;
|
|
81
|
+
height: 100vh;
|
|
82
|
+
width: 100vw;
|
|
83
|
+
}
|
|
84
|
+
.slide-in-glass-open {
|
|
85
|
+
background-color: var(--body-bg);
|
|
86
|
+
display: block;
|
|
87
|
+
opacity: 0.5;
|
|
88
|
+
z-index: 1000;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.slide-in {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
position: fixed;
|
|
95
|
+
top: 0;
|
|
96
|
+
z-index: 2000;
|
|
97
|
+
transition: right 0.5s ease;
|
|
98
|
+
border-left: 1px solid var(--border);
|
|
99
|
+
background-color: var(--body-bg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.slide-in-open {
|
|
103
|
+
right: 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.header {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
padding: 4px;
|
|
110
|
+
border-bottom: 1px solid var(--border);
|
|
111
|
+
|
|
112
|
+
.title {
|
|
113
|
+
flex: 1;
|
|
114
|
+
font-weight: bold;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.icon-close {
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.main-panel {
|
|
123
|
+
padding: 10px;
|
|
124
|
+
overflow: auto;
|
|
125
|
+
}
|
|
126
|
+
</style>
|
|
@@ -237,7 +237,7 @@ export default {
|
|
|
237
237
|
v-if="subExpandColumn"
|
|
238
238
|
:width="expandWidth"
|
|
239
239
|
/>
|
|
240
|
-
<th
|
|
240
|
+
<!-- <th
|
|
241
241
|
v-for="(col) in columns"
|
|
242
242
|
v-show="!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)"
|
|
243
243
|
:key="col.name"
|
|
@@ -250,6 +250,20 @@ export default {
|
|
|
250
250
|
@click.prevent="changeSort($event, col)"
|
|
251
251
|
@keyup.enter="changeSort($event, col)"
|
|
252
252
|
@keyup.space="changeSort($event, col)"
|
|
253
|
+
> -->
|
|
254
|
+
<th
|
|
255
|
+
v-for="(col) in columns"
|
|
256
|
+
v-show="!hasAdvancedFiltering || (hasAdvancedFiltering && col.isColVisible)"
|
|
257
|
+
:key="col.name"
|
|
258
|
+
:align="'left'"
|
|
259
|
+
:width="col.width"
|
|
260
|
+
:class="{ sortable: col.sort, [col.breakpoint]: !!col.breakpoint}"
|
|
261
|
+
:tabindex="col.sort ? 0 : -1"
|
|
262
|
+
class="sortable-table-head-element"
|
|
263
|
+
:aria-sort="ariaSort(col)"
|
|
264
|
+
@click.prevent="changeSort($event, col)"
|
|
265
|
+
@keyup.enter="changeSort($event, col)"
|
|
266
|
+
@keyup.space="changeSort($event, col)"
|
|
253
267
|
>
|
|
254
268
|
<div
|
|
255
269
|
class="table-header-container"
|
|
@@ -259,10 +273,13 @@ export default {
|
|
|
259
273
|
v-clean-tooltip="tooltip(col)"
|
|
260
274
|
class="content"
|
|
261
275
|
>
|
|
262
|
-
<span
|
|
276
|
+
<span
|
|
277
|
+
v-clean-html="labelFor(col)"
|
|
278
|
+
class="text-no-break"
|
|
279
|
+
/>
|
|
263
280
|
<span
|
|
264
281
|
v-if="col.subLabel"
|
|
265
|
-
class="text-muted"
|
|
282
|
+
class="text-muted text-no-break"
|
|
266
283
|
>
|
|
267
284
|
{{ col.subLabel }}
|
|
268
285
|
</span>
|
|
@@ -282,10 +299,12 @@ export default {
|
|
|
282
299
|
<i
|
|
283
300
|
v-if="isCurrent(col) && !descending"
|
|
284
301
|
class="icon icon-sort-down icon-stack-1x"
|
|
302
|
+
:alt="t('sortableTable.alt.sortingIconDesc')"
|
|
285
303
|
/>
|
|
286
304
|
<i
|
|
287
305
|
v-if="isCurrent(col) && descending"
|
|
288
306
|
class="icon icon-sort-up icon-stack-1x"
|
|
307
|
+
:alt="t('sortableTable.alt.sortingIconAsc')"
|
|
289
308
|
/>
|
|
290
309
|
</span>
|
|
291
310
|
</div>
|
|
@@ -294,6 +313,7 @@ export default {
|
|
|
294
313
|
<th
|
|
295
314
|
v-if="rowActions && hasAdvancedFiltering && tableColsOptions.length"
|
|
296
315
|
:width="rowActionsWidth"
|
|
316
|
+
:align="'left'"
|
|
297
317
|
>
|
|
298
318
|
<div
|
|
299
319
|
ref="table-options"
|
|
@@ -352,10 +372,17 @@ export default {
|
|
|
352
372
|
</div>
|
|
353
373
|
</div>
|
|
354
374
|
</th>
|
|
375
|
+
<!-- <th
|
|
376
|
+
v-else-if="rowActions"
|
|
377
|
+
:width="rowActionsWidth"
|
|
378
|
+
/> -->
|
|
355
379
|
<th
|
|
356
380
|
v-else-if="rowActions"
|
|
357
381
|
:width="rowActionsWidth"
|
|
358
|
-
|
|
382
|
+
:align="'left'"
|
|
383
|
+
>
|
|
384
|
+
操作
|
|
385
|
+
</th>
|
|
359
386
|
</tr>
|
|
360
387
|
</thead>
|
|
361
388
|
</template>
|
|
@@ -435,7 +462,7 @@ export default {
|
|
|
435
462
|
}
|
|
436
463
|
|
|
437
464
|
th {
|
|
438
|
-
padding:
|
|
465
|
+
padding: 16.5px 5px;
|
|
439
466
|
font-weight: normal;
|
|
440
467
|
border: 0;
|
|
441
468
|
color: var(--body-text);
|
|
@@ -474,6 +501,8 @@ export default {
|
|
|
474
501
|
|
|
475
502
|
&:last-child {
|
|
476
503
|
padding-right: 10px;
|
|
504
|
+
padding-left: 12px;
|
|
505
|
+
width: 200px;
|
|
477
506
|
}
|
|
478
507
|
|
|
479
508
|
&:not(.sortable) > SPAN {
|