mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-08 22:46:51 +08:00
feat: Dealing with compatibility issues with alert history data (#9571)
This commit is contained in:
parent
685fca6c8c
commit
5f68d7ce90
14 changed files with 107 additions and 51 deletions
|
@ -94,3 +94,19 @@ func AddMenu(newMenu dto.ShowMenu, parentMenuID string, tx *gorm.DB) error {
|
|||
}
|
||||
return tx.Model(&model.Setting{}).Where("key = ?", "HideMenu").Update("value", string(updatedJSON)).Error
|
||||
}
|
||||
|
||||
func RemoveMenuByID(menus []dto.ShowMenu, id string) []dto.ShowMenu {
|
||||
var result []dto.ShowMenu
|
||||
for _, menu := range menus {
|
||||
if menu.ID == id {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(menu.Children) > 0 {
|
||||
menu.Children = RemoveMenuByID(menu.Children, id)
|
||||
}
|
||||
|
||||
result = append(result, menu)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ func Init() {
|
|||
migrations.UpdateXpackHideMenu,
|
||||
migrations.UpdateOnedrive,
|
||||
migrations.AddClusterMenu,
|
||||
migrations.DeleteXpackHideMenu,
|
||||
})
|
||||
if err := m.Migrate(); err != nil {
|
||||
global.LOG.Error(err)
|
||||
|
|
|
@ -503,3 +503,31 @@ var AddClusterMenu = &gormigrate.Migration{
|
|||
}, "11", tx)
|
||||
},
|
||||
}
|
||||
|
||||
var DeleteXpackHideMenu = &gormigrate.Migration{
|
||||
ID: "20250718-delete-xpack-hide-menu",
|
||||
Migrate: func(tx *gorm.DB) error {
|
||||
var menuJSON string
|
||||
if err := tx.Model(&model.Setting{}).Where("key = ?", "HideMenu").Pluck("value", &menuJSON).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if menuJSON == "" {
|
||||
menuJSON = helper.LoadMenus()
|
||||
}
|
||||
var menus []dto.ShowMenu
|
||||
if err := json.Unmarshal([]byte(menuJSON), &menus); err != nil {
|
||||
return tx.Model(&model.Setting{}).
|
||||
Where("key = ?", "HideMenu").
|
||||
Update("value", helper.LoadMenus()).Error
|
||||
}
|
||||
menus = helper.RemoveMenuByID(menus, "116")
|
||||
updatedJSON, err := json.Marshal(menus)
|
||||
if err != nil {
|
||||
return tx.Model(&model.Setting{}).
|
||||
Where("key = ?", "HideMenu").
|
||||
Update("value", helper.LoadMenus()).Error
|
||||
}
|
||||
|
||||
return tx.Model(&model.Setting{}).Where("key = ?", "HideMenu").Update("value", string(updatedJSON)).Error
|
||||
},
|
||||
}
|
||||
|
|
|
@ -3660,10 +3660,9 @@ const message = {
|
|||
senderHelper: 'Email address used to send messages',
|
||||
passwordHelper: 'Authorization code for the email service',
|
||||
hostHelper: 'SMTP server address, e.g., smtp.qq.com',
|
||||
portHelper: 'SSL usually uses 465, TLS usually uses 587, no encryption usually uses 25',
|
||||
portHelper: 'SSL usually uses 465, TLS usually uses 587',
|
||||
sslHelper: 'If the SMTP port is 465, SSL is usually required',
|
||||
tlsHelper: 'If the SMTP port is 587, TLS is usually required',
|
||||
none: 'None',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: 'Ling Xia Gold',
|
||||
|
|
|
@ -3524,10 +3524,9 @@ const message = {
|
|||
senderHelper: 'メール送信に使用するメールアドレス',
|
||||
passwordHelper: 'メールサービスの認証コード',
|
||||
hostHelper: 'SMTP サーバーアドレス(例:smtp.qq.com)',
|
||||
portHelper: 'SSLは通常465、TLSは通常587、暗号化なしは通常25',
|
||||
portHelper: 'SSLは通常465、TLSは通常587',
|
||||
sslHelper: 'SMTPポートが465の場合、通常はSSLが必要です',
|
||||
tlsHelper: 'SMTPポートが587の場合、通常はTLSが必要です',
|
||||
none: 'なし',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: '凌霞金',
|
||||
|
|
|
@ -3462,10 +3462,9 @@ const message = {
|
|||
senderHelper: '이메일 발송에 사용되는 주소',
|
||||
passwordHelper: '메일 서비스의 인증 코드',
|
||||
hostHelper: 'SMTP 서버 주소, 예: smtp.qq.com',
|
||||
portHelper: 'SSL 은 일반적으로 465, TLS 는 587, 암호화 없음은 일반적으로 25',
|
||||
portHelper: 'SSL 은 일반적으로 465, TLS 는 587',
|
||||
sslHelper: 'SMTP 포트가 465 이면 일반적으로 SSL 이 필요합니다',
|
||||
tlsHelper: 'SMTP 포트가 587 이면 일반적으로 TLS 가 필요합니다',
|
||||
none: '없음',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: '링샤 골드',
|
||||
|
|
|
@ -3605,10 +3605,9 @@ const message = {
|
|||
senderHelper: 'Alamat e-mel yang digunakan untuk menghantar e-mel',
|
||||
passwordHelper: 'Kod kebenaran untuk perkhidmatan e-mel',
|
||||
hostHelper: 'Alamat pelayan SMTP, contoh: smtp.qq.com',
|
||||
portHelper: 'SSL biasanya 465, TLS biasanya 587, tanpa penyulitan biasanya 25',
|
||||
portHelper: 'SSL biasanya 465, TLS biasanya 587',
|
||||
sslHelper: 'Jika port SMTP ialah 465, SSL biasanya diperlukan',
|
||||
tlsHelper: 'Jika port SMTP ialah 587, TLS biasanya diperlukan',
|
||||
none: 'Tiada',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: 'Ling Xia Emas',
|
||||
|
|
|
@ -3612,10 +3612,9 @@ const message = {
|
|||
senderHelper: 'Endereço de e-mail usado para envio',
|
||||
passwordHelper: 'Código de autorização do serviço de e-mail',
|
||||
hostHelper: 'Endereço do servidor SMTP, ex: smtp.qq.com',
|
||||
portHelper: 'SSL geralmente usa 465, TLS geralmente usa 587, sem criptografia usa 25',
|
||||
portHelper: 'SSL geralmente usa 465, TLS geralmente usa 587',
|
||||
sslHelper: 'Se a porta SMTP for 465, normalmente é necessário SSL',
|
||||
tlsHelper: 'Se a porta SMTP for 587, normalmente é necessário TLS',
|
||||
none: 'Nenhum',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: 'Ling Xia Gold',
|
||||
|
|
|
@ -3603,10 +3603,9 @@ const message = {
|
|||
senderHelper: 'Адрес электронной почты для отправки сообщений',
|
||||
passwordHelper: 'Код авторизации почтового сервиса',
|
||||
hostHelper: 'Адрес SMTP-сервера, например: smtp.qq.com',
|
||||
portHelper: 'SSL обычно использует 465, TLS — 587, без шифрования — 25',
|
||||
portHelper: 'SSL обычно использует 465, TLS — 587',
|
||||
sslHelper: 'Если порт SMTP — 465, обычно требуется SSL',
|
||||
tlsHelper: 'Если порт SMTP — 587, обычно требуется TLS',
|
||||
none: 'Нет',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: 'Лин Ся Золотой',
|
||||
|
|
|
@ -3701,10 +3701,9 @@ const message = {
|
|||
senderHelper: 'E-posta göndermek için kullanılan adres',
|
||||
passwordHelper: 'E-posta servisinin yetkilendirme kodu',
|
||||
hostHelper: 'SMTP sunucu adresi, örneğin: smtp.qq.com',
|
||||
portHelper: 'SSL genellikle 465, TLS genellikle 587, şifreleme yoksa genellikle 25',
|
||||
portHelper: 'SSL genellikle 465, TLS genellikle 587',
|
||||
sslHelper: 'SMTP portu 465 ise genellikle SSL gerekir',
|
||||
tlsHelper: 'SMTP portu 587 ise genellikle TLS gerekir',
|
||||
none: 'Yok',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: 'Ling Xia Altın',
|
||||
|
|
|
@ -3406,10 +3406,9 @@ const message = {
|
|||
senderHelper: '用於發送郵件的電子信箱地址',
|
||||
passwordHelper: '郵件服務的授權碼',
|
||||
hostHelper: 'SMTP 伺服器地址,例如:smtp.qq.com',
|
||||
portHelper: 'SSL 通常為 465,TLS 通常為 587,無加密則通常為 25',
|
||||
portHelper: 'SSL 通常為 465,TLS 通常為 587',
|
||||
sslHelper: '若 SMTP 連接埠為 465,通常需要啟用 SSL',
|
||||
tlsHelper: '若 SMTP 連接埠為 587,通常需要啟用 TLS',
|
||||
none: '無',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: '凌霞金',
|
||||
|
|
|
@ -3376,10 +3376,9 @@ const message = {
|
|||
senderHelper: '用于发送邮件的邮箱地址',
|
||||
passwordHelper: '邮件服务的授权码',
|
||||
hostHelper: 'SMTP 服务器地址,例如: smtp.qq.com',
|
||||
portHelper: 'SSL 通常为465,TLS 通常为587,无加密方式通常为25',
|
||||
portHelper: 'SSL 通常为465,TLS 通常为587',
|
||||
sslHelper: '如果 SMTP 端口是 465,通常需要启用 SSL',
|
||||
tlsHelper: '如果 SMTP 端口是 587,通常需要启用 TLS',
|
||||
none: '无',
|
||||
},
|
||||
theme: {
|
||||
lingXiaGold: '凌霞金',
|
||||
|
|
|
@ -17,41 +17,53 @@
|
|||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.sender')" prop="sender">
|
||||
<el-input v-model="form.config.sender" />
|
||||
<el-input v-model.trim="form.config.sender" />
|
||||
<span class="input-help">
|
||||
{{ $t('xpack.alert.senderHelper') }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.password')" prop="password">
|
||||
<el-input v-model="form.config.password" type="password" show-password />
|
||||
<el-input v-model.trim="form.config.password" type="password" show-password />
|
||||
<span class="input-help">
|
||||
{{ $t('xpack.alert.passwordHelper') }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.host')" prop="host">
|
||||
<el-input v-model="form.config.host" placeholder="smtp.qq.com" />
|
||||
<el-input v-model.trim="form.config.host" placeholder="smtp.qq.com" />
|
||||
<span class="input-help">
|
||||
{{ $t('xpack.alert.hostHelper') }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.port')" prop="port">
|
||||
<el-input v-model="form.config.port" :min="1" :max="65535" />
|
||||
<el-input v-model.number="form.config.port" :min="1" :max="65535" />
|
||||
<span class="input-help">
|
||||
{{ $t('xpack.alert.portHelper') }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.encryption')" prop="encryption">
|
||||
<el-select v-model="form.config.encryption" :placeholder="$t('commons.rule.requiredSelect')">
|
||||
<el-option label="SSL" value="SSL" />
|
||||
<el-option label="TLS" value="TLS" />
|
||||
<el-option :label="$t('xpack.alert.none')" value="NONE" />
|
||||
</el-select>
|
||||
<div class="flex items-center gap-2">
|
||||
<span>SSL</span>
|
||||
<el-switch
|
||||
v-model="form.config.encryption"
|
||||
:active-value="'SSL'"
|
||||
:inactive-value="form.config.encryption === 'SSL' ? 'NONE' : form.config.encryption"
|
||||
@change="handleEncryptionSwitch('SSL')"
|
||||
/>
|
||||
</div>
|
||||
<span class="input-help">
|
||||
{{
|
||||
form.config.encryption == 'SSL'
|
||||
? $t('xpack.alert.sslHelper')
|
||||
: $t('xpack.alert.tlsHelper')
|
||||
}}
|
||||
{{ $t('xpack.alert.sslHelper') }}
|
||||
</span>
|
||||
<div class="flex items-center gap-2">
|
||||
<span>TLS</span>
|
||||
<el-switch
|
||||
v-model="form.config.encryption"
|
||||
:active-value="'TLS'"
|
||||
:inactive-value="form.config.encryption === 'TLS' ? 'NONE' : form.config.encryption"
|
||||
@change="handleEncryptionSwitch('TLS')"
|
||||
/>
|
||||
</div>
|
||||
<span class="input-help">
|
||||
{{ $t('xpack.alert.tlsHelper') }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.recipient')" prop="recipient">
|
||||
|
@ -118,7 +130,7 @@ const form = reactive({
|
|||
host: '',
|
||||
port: 465,
|
||||
encryption: 'NONE',
|
||||
status: '',
|
||||
status: 'Enable',
|
||||
recipient: '',
|
||||
},
|
||||
});
|
||||
|
|
|
@ -73,24 +73,32 @@
|
|||
<div class="text-sm mb-2">{{ $t('xpack.alert.emailConfigHelper') }}</div>
|
||||
<el-divider class="!mb-2 !mt-3" />
|
||||
<div class="text-sm email-form" v-if="emailConfig.id">
|
||||
<el-form-item :label="$t('xpack.alert.displayName')" prop="displayName">
|
||||
{{ emailConfig.config.displayName }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.sender')" prop="sender">
|
||||
{{ emailConfig.config.sender }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.host')" prop="host">
|
||||
{{ emailConfig.config.host }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.port')" prop="port">
|
||||
{{ emailConfig.config.port }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.encryption')" prop="encryption">
|
||||
{{ emailConfig.config.encryption }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.recipient')" prop="recipient">
|
||||
{{ emailConfig.config.recipient }}
|
||||
</el-form-item>
|
||||
<el-form
|
||||
:model="form"
|
||||
@submit.prevent
|
||||
ref="alertFormRef"
|
||||
:label-position="mobile ? 'top' : 'left'"
|
||||
label-width="110px"
|
||||
>
|
||||
<el-form-item :label="$t('xpack.alert.displayName')" prop="displayName">
|
||||
{{ emailConfig.config.displayName }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.sender')" prop="sender">
|
||||
{{ emailConfig.config.sender }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.host')" prop="host">
|
||||
{{ emailConfig.config.host }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.port')" prop="port">
|
||||
{{ emailConfig.config.port }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.encryption')" prop="encryption">
|
||||
{{ emailConfig.config.encryption }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('xpack.alert.recipient')" prop="recipient">
|
||||
{{ emailConfig.config.recipient }}
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<el-alert v-else center class="alert" style="height: 257px" :closable="false">
|
||||
<el-button size="large" round plain type="primary" @click="onChangeEmail(0)">
|
||||
|
|
Loading…
Add table
Reference in a new issue