Merge remote-tracking branch 'origin/main' into multi-tenant

This commit is contained in:
lai
2024-07-24 18:01:08 +08:00
15 changed files with 101 additions and 74 deletions

View File

@@ -176,6 +176,7 @@ function fnCheckAppNameOverflow() {
if (!text) return;
if (text.offsetWidth > container.offsetWidth) {
text.classList.add('app-name_scrollable');
text.setAttribute('data-content', text.innerText);
} else {
text.classList.remove('app-name_scrollable');
}
@@ -342,11 +343,17 @@ onUnmounted(() => {
:href="appStore.officialUrl"
target="_blank"
size="small"
v-perms:has="['system:setting:link']"
v-if="appStore.officialUrl !== '#'"
>
{{ t('loayouts.basic.officialUrl') }}
</a-button>
<a-button type="link" size="small" @click="fnClickHelpDoc()">
<a-button
type="link"
size="small"
v-perms:has="['system:setting:HelpDoc']"
@click="fnClickHelpDoc()"
>
{{ t('loayouts.basic.helpDoc') }}
</a-button>
</a-space>
@@ -382,20 +389,26 @@ onUnmounted(() => {
// text-overflow: ellipsis;
white-space: nowrap;
width: 148px;
&_scrollable {
// padding-left: 100%;
> .app-name_scrollable {
padding-right: 12px;
display: inline-block;
animation: scrollable-animation linear 6s infinite both;
}
@keyframes scrollable-animation {
0% {
transform: translate3d(0, 0, 0);
&::after {
content: attr(data-content);
position: absolute;
top: 0;
right: -100%;
transition: right 0.3s ease;
}
100% {
transform: translate3d(-100%, 0, 0);
@keyframes scrollable-animation {
0% {
transform: translateX(0);
}
100% {
transform: translateX(calc(-100% - 12px));
}
}
}
}

View File

@@ -142,6 +142,7 @@ function fnChangeLocale(e: any) {
type="text"
style="color: inherit"
@click="fnClickHelpDoc()"
v-perms:has="['system:setting:HelpDoc']"
v-roles:has="[TENANTADMIN_ROLE_KEY]"
>
<template #icon>

View File

@@ -672,10 +672,7 @@ onBeforeUnmount(() => {
:value="record.eventJSON.authCode"
/>
</span>
<span
v-if="record.eventType === 'detach'"
:title="record.eventJSON.detachTime"
>
<span v-if="record.eventType === 'detach'">
<span>{{ t('views.dashboard.ue.resultOk') }}</span>
</span>
<span v-if="record.eventType === 'cm-state'">
@@ -772,7 +769,7 @@ onBeforeUnmount(() => {
/>
</span>
<span v-if="record.eventType === 'detach'">
{{ t('views.dashboard.ue.resultOK') }}
{{ t('views.dashboard.ue.resultOk') }}
</span>
<span v-if="record.eventType === 'cm-state'">
<DictTag

View File

@@ -690,7 +690,7 @@ onBeforeUnmount(() => {
:data-source="tableState.data"
:size="tableState.size"
:pagination="tablePagination"
:scroll="{ x: tableColumns.length * 120, y: 'calc(100vh - 480px)' }"
:scroll="{ x: tableColumns.length * 150, y: 'calc(100vh - 480px)' }"
:row-selection="{
type: 'checkbox',
columnWidth: '48px',

View File

@@ -710,7 +710,7 @@ onBeforeUnmount(() => {
/>
</span>
<span v-if="record.eventType === 'detach'">
{{ t('views.dashboard.ue.resultOK') }}
{{ t('views.dashboard.ue.resultOk') }}
</span>
<span v-if="record.eventType === 'cm-state'">
<DictTag

View File

@@ -237,10 +237,7 @@ function handleRanderChart(
function fnChangeData(data: any[], itemID: string) {
let info = data.find((item: any) => item.id === itemID);
if (!info) {
return;
}
if (!info.neState.online) return;
if (!info || !info.neState.online) return;
// if (!info.neState.online) {
// info = data.find((item: any) => item.id === itemID);
// graphNodeClickID.value = itemID;

View File

@@ -159,14 +159,14 @@
/* 概览区域 衍生基站信息 */
.skim.base {
height: 20.6%;
height: 12%;
}
.skim.base .inner .data {
display: flex;
flex-direction: row;
align-items: center;
height: 45%;
height: 75%;
}
.skim.base .inner .data .item {
display: flex;
@@ -178,7 +178,7 @@
/* 用户行为 */
.userActivity {
/* min-height: 35.8rem; */
height: 60%;
height: 54.6%;
}
.userActivity .inner .chart {
width: 100%;

View File

@@ -331,7 +331,7 @@ onBeforeUnmount(() => {
<div class="skim panel base">
<div class="inner">
<h3>
<GlobalOutlined style="color: #68d8fe" />&nbsp;&nbsp;
<GlobalOutlined style="color: #68d8fe" />&nbsp;&nbsp; 5G
{{ t('views.dashboard.overview.skim.baseTitle') }}
</h3>
<div class="data">
@@ -363,6 +363,14 @@ onBeforeUnmount(() => {
<span>{{ t('views.dashboard.overview.skim.gnbUeNum') }}</span>
</div>
</div>
</div>
</div>
<div class="skim panel base">
<div class="inner">
<h3>
<GlobalOutlined style="color: #68d8fe" />&nbsp;&nbsp; 4G
{{ t('views.dashboard.overview.skim.baseTitle') }}
</h3>
<div class="data">
<div
class="item toRouter"

View File

@@ -166,23 +166,6 @@ function fnClickHelpDoc(language?: string) {
<img :src="logoUrl" class="logo-brand" :alt="appStore.appName" />
</template>
</div>
<div class="header-right">
<a-space direction="horizontal" :size="8">
<a-button
type="link"
:href="appStore.officialUrl"
target="_blank"
size="small"
v-if="appStore.officialUrl !== '#'"
>
{{ t('loayouts.basic.officialUrl') }}
</a-button>
<a-button type="link" size="small" @click="fnClickHelpDoc()">
{{ t('loayouts.basic.helpDoc') }}
</a-button>
</a-space>
</div>
</header>
<a-card :bordered="false" class="login-card">

View File

@@ -124,8 +124,8 @@ let modalState: ModalStateType = reactive({
addr: '',
port: 22,
user: 'omcuser',
authMode: '2',
password: '',
authMode: '0',
password: 'a9tU53r',
privateKey: '',
passPhrase: '',
remark: '',

View File

@@ -283,10 +283,10 @@ function fnRecordDelete(id: string) {
message.success(t('common.operateOk'), 3);
// 过滤掉删除的id
tableState.data = tableState.data.filter(item => {
if (id.indexOf(',')) {
if (id.indexOf(',') > -1) {
return !tableState.selectedRowKeys.includes(item.id);
} else {
return item.id != id;
return item.id !== id;
}
});
// 刷新缓存

View File

@@ -206,6 +206,7 @@ function fnCheckAppNameOverflow() {
if (!text) return;
if (text.offsetWidth > container.offsetWidth) {
text.classList.add('app-name_scrollable');
text.setAttribute('data-content', text.innerText);
} else {
text.classList.remove('app-name_scrollable');
}
@@ -398,18 +399,25 @@ onMounted(() => {
font-size: 18px;
> .app-name_scrollable {
// padding-left: 100%;
padding-right: 12px;
display: inline-block;
animation: scrollable-animation linear 6s infinite both;
}
@keyframes scrollable-animation {
0% {
transform: translate3d(0, 0, 0);
&::after {
content: attr(data-content);
position: absolute;
top: 0;
right: -100%;
transition: right 0.3s ease;
}
100% {
transform: translate3d(-100%, 0, 0);
@keyframes scrollable-animation {
0% {
transform: translateX(0);
}
100% {
transform: translateX(calc(-100% - 12px));
}
}
}
}

View File

@@ -120,6 +120,7 @@ onMounted(() => {
<a-form-item>
<a-select
v-model:value="state.language"
:disabled="!appStore.i18nOpen"
style="width: 100px"
size="small"
v-perms:has="['system:setting:i18n']"
@@ -168,6 +169,7 @@ onMounted(() => {
v-model:value="state.language"
style="width: 100px"
size="small"
:disabled="!appStore.i18nOpen"
v-perms:has="['system:setting:i18n']"
>
<a-select-option

View File

@@ -184,12 +184,15 @@ watch(
/**检查系统名称是否超出范围进行滚动 */
function fnCheckAppNameOverflow() {
const container: HTMLDivElement | null = document.querySelector('.header-icon > .app-name');
const container: HTMLDivElement | null = document.querySelector(
'.header-icon > .app-name'
);
if (!container) return;
const text: HTMLDivElement | null = container.querySelector('.marquee');
if (!text) return;
if (text.offsetWidth > container.offsetWidth) {
text.classList.add('app-name_scrollable');
text.setAttribute('data-content', text.innerText);
} else {
text.classList.remove('app-name_scrollable');
}
@@ -201,7 +204,7 @@ watch(
);
onMounted(() => {
fnCheckAppNameOverflow()
fnCheckAppNameOverflow();
Object.assign(state, {
language: currentLocale.value,
filePath: '',
@@ -240,7 +243,11 @@ onMounted(() => {
</div>
</a-form-item>
<a-form-item v-perms:has="['system:setting:i18n']">
<a-select v-model:value="state.language" style="width: 100px">
<a-select
v-model:value="state.language"
:disabled="!appStore.i18nOpen"
style="width: 100px"
>
<a-select-option
v-for="opt in optionsLocale"
:key="opt.value"
@@ -362,18 +369,25 @@ onMounted(() => {
font-size: 18px;
> .app-name_scrollable {
// padding-left: 100%;
padding-right: 12px;
display: inline-block;
animation: scrollable-animation linear 6s infinite both;
}
@keyframes scrollable-animation {
0% {
transform: translate3d(0, 0, 0);
&::after {
content: attr(data-content);
position: absolute;
top: 0;
right: -100%;
transition: right 0.3s ease;
}
100% {
transform: translate3d(-100%, 0, 0);
@keyframes scrollable-animation {
0% {
transform: translateX(0);
}
100% {
transform: translateX(calc(-100% - 12px));
}
}
}
}

View File

@@ -31,14 +31,18 @@ const { t } = useI18n();
{{ t('views.system.setting.sysLoginBg') }}
</a-divider>
<ChangeLogoBG></ChangeLogoBG>
<a-divider orientation="left">
{{ t('views.system.setting.sysHelpDoc') }}
</a-divider>
<ChangeHelpDoc></ChangeHelpDoc>
<a-divider orientation="left">
{{ t('views.system.setting.sysOfficialUrl') }}
</a-divider>
<ChangeOfficialUrl></ChangeOfficialUrl>
<div v-perms:has="['system:setting:HelpDoc']">
<a-divider orientation="left">
{{ t('views.system.setting.sysHelpDoc') }}
</a-divider>
<ChangeHelpDoc></ChangeHelpDoc>
</div>
<div v-perms:has="['system:setting:link']">
<a-divider orientation="left">
{{ t('views.system.setting.sysOfficialUrl') }}
</a-divider>
<ChangeOfficialUrl></ChangeOfficialUrl>
</div>
<div v-perms:has="['system:setting:i18n']">
<a-divider orientation="left">
{{ t('views.system.setting.i18n') }}