diff --git a/sub/subService.go b/sub/subService.go index 02782e52..43457a2d 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -20,7 +20,7 @@ type SubService struct { address string showInfo bool inboundService service.InboundService - settingServics service.SettingService + settingService service.SettingService } func (s *SubService) GetSubs(subId string, host string, showInfo bool) ([]string, []string, error) { @@ -88,7 +88,7 @@ func (s *SubService) GetSubs(subId string, host string, showInfo bool) ([]string } } headers = append(headers, fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000)) - updateInterval, _ := s.settingServics.GetSubUpdates() + updateInterval, _ := s.settingService.GetSubUpdates() headers = append(headers, fmt.Sprintf("%d", updateInterval)) headers = append(headers, subId) return result, headers, nil diff --git a/web/assets/css/custom.css b/web/assets/css/custom.css index 5a727d99..bc20e563 100644 --- a/web/assets/css/custom.css +++ b/web/assets/css/custom.css @@ -331,6 +331,10 @@ style attribute { transform: translateY(-30px) } +.ant-tooltip-inner { + min-height: 0; +} + .ant-list-item-meta-title { font-size: 14px; } @@ -506,7 +510,6 @@ style attribute { .dark .ant-card-head, .dark .ant-form, .dark .ant-collapse>.ant-collapse-item>.ant-collapse-header, -.dark .ant-form-item i, .dark .ant-modal-close-x, .dark .ant-pagination-item a, .dark li:not(.ant-pagination-disabled) i, @@ -589,6 +592,7 @@ style attribute { } .dark .ant-btn-primary[disabled], +.dark .ant-btn-danger[disabled], .dark .ant-calendar-ok-btn-disabled { color: rgb(255 255 255 / 35%); background-color: #2c3950; @@ -737,6 +741,20 @@ style attribute { border-right-color: #2C3950; } +.dark .has-warning .ant-input, +.dark .has-warning .ant-input:hover { + border-color: #faad14; +} + +.dark .has-warning .anticon { + color: #ffa031; +} + +.dark .has-success .anticon { + color: #61bf39; + animation-name: diffZoomIn1!important; +} + .dark .anticon-close-circle { color: #E04141; } @@ -751,7 +769,6 @@ style attribute { .dark .ant-spin-dot-item { background-color: #ffffff; - } .ant-radio-button-wrapper { diff --git a/web/assets/js/langs.js b/web/assets/js/langs.js index 73adb284..af9eadb1 100644 --- a/web/assets/js/langs.js +++ b/web/assets/js/langs.js @@ -19,6 +19,11 @@ const supportLangs = [ value: 'ru-RU', icon: '🇷🇺', }, + { + name: 'Tiếng Việt', + value: 'vi-VN', + icon: '🇻🇳', + }, ]; function getLang() { @@ -60,4 +65,4 @@ function isSupportLang(lang) { } return false; -} \ No newline at end of file +} diff --git a/web/assets/js/util/utils.js b/web/assets/js/util/utils.js index f0f99eb9..97d20082 100644 --- a/web/assets/js/util/utils.js +++ b/web/assets/js/util/utils.js @@ -177,7 +177,7 @@ class ObjectUtil { } } } else { - return obj.toString().toLowerCase().indexOf(key.toLowerCase()) >= 0; + return this.isEmpty(obj) ? false : obj.toString().toLowerCase().indexOf(key.toLowerCase()) >= 0; } return false; } diff --git a/web/html/login.html b/web/html/login.html index 4d61909b..bf5f242d 100644 --- a/web/html/login.html +++ b/web/html/login.html @@ -175,11 +175,6 @@ this.password = ""; } } - const State = { - Running: "running", - Stop: "stop", - Error: "error", - } const app = new Vue({ delimiters: ['[[', ']]'], diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index eccd98c7..3473713b 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -17,8 +17,8 @@ {{ i18n "pages.xray.outbound.tag" }} - - + + @@ -126,7 +126,7 @@ {{ i18n "pages.inbounds.port" }} - + @@ -529,7 +529,6 @@ - diff --git a/web/html/xui/form/stream/external_proxy.html b/web/html/xui/form/stream/external_proxy.html index f64241c0..fdb7d6df 100644 --- a/web/html/xui/form/stream/external_proxy.html +++ b/web/html/xui/form/stream/external_proxy.html @@ -8,7 +8,7 @@
- +