ng-alain 12.2.3 → 12.4.2

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 (116) hide show
  1. package/application/files/i18n/el-GR.json +1 -1
  2. package/application/files/i18n/en-US.json +1 -1
  3. package/application/files/i18n/es-ES.json +1 -1
  4. package/application/files/i18n/fr-FR.json +1 -1
  5. package/application/files/i18n/hr-HR.json +1 -1
  6. package/application/files/i18n/it-IT.json +151 -0
  7. package/application/files/i18n/ko-KR.json +1 -1
  8. package/application/files/i18n/pl-PL.json +1 -1
  9. package/application/files/i18n/sl-SI.json +1 -1
  10. package/application/files/i18n/tr-TR.json +1 -1
  11. package/application/files/i18n/zh-CN.json +10 -6
  12. package/application/files/i18n/zh-TW.json +1 -1
  13. package/application/files/root/proxy.conf.js +17 -0
  14. package/application/files/src/app/app.component.ts +21 -5
  15. package/application/files/src/app/core/i18n/i18n.service.spec.ts +6 -0
  16. package/application/files/src/app/core/i18n/i18n.service.ts +3 -5
  17. package/application/files/src/app/core/net/default.interceptor.ts +4 -3
  18. package/application/files/src/app/core/startup/startup.service.ts +5 -3
  19. package/application/files/src/app/layout/basic/basic.component.ts +1 -1
  20. package/application/files/src/app/routes/exception/exception-routing.module.ts +4 -6
  21. package/application/files/src/app/routes/exception/exception.component.ts +16 -0
  22. package/application/files/src/app/routes/exception/exception.module.ts +2 -6
  23. package/application/files/src/assets/tmp/i18n/el-GR.json +1 -1
  24. package/application/files/src/assets/tmp/i18n/en-US.json +1 -1
  25. package/application/files/src/assets/tmp/i18n/es-ES.json +1 -1
  26. package/application/files/src/assets/tmp/i18n/fr-FR.json +1 -1
  27. package/application/files/src/assets/tmp/i18n/hr-HR.json +1 -1
  28. package/application/files/src/assets/tmp/i18n/it-IT.json +151 -0
  29. package/application/files/src/assets/tmp/i18n/ko-KR.json +1 -1
  30. package/application/files/src/assets/tmp/i18n/pl-PL.json +1 -1
  31. package/application/files/src/assets/tmp/i18n/sl-SI.json +1 -1
  32. package/application/files/src/assets/tmp/i18n/tr-TR.json +1 -1
  33. package/application/files/src/assets/tmp/i18n/zh-CN.json +10 -6
  34. package/application/files/src/assets/tmp/i18n/zh-TW.json +1 -1
  35. package/application/index.js +2 -2
  36. package/application/index.js.map +1 -1
  37. package/application/index.spec.ts +2 -1
  38. package/application/index.ts +2 -2
  39. package/application/schema.json +1 -1
  40. package/collection.json +5 -0
  41. package/core/lang.config.js +2 -1
  42. package/core/lang.config.js.map +1 -1
  43. package/core/lang.config.ts +2 -1
  44. package/curd/schema.json +39 -27
  45. package/curd/schema.ts +5 -1
  46. package/docs/generate.en-US.md +35 -0
  47. package/docs/generate.zh-CN.md +35 -0
  48. package/docs/plugin.en-US.md +1 -0
  49. package/docs/plugin.zh-CN.md +1 -0
  50. package/docs/sta.en-US.md +55 -0
  51. package/docs/sta.zh-CN.md +55 -0
  52. package/edit/schema.json +7 -7
  53. package/edit/schema.ts +5 -1
  54. package/empty/index.spec.ts +25 -14
  55. package/empty/schema.json +7 -7
  56. package/empty/schema.ts +5 -1
  57. package/list/schema.json +7 -7
  58. package/list/schema.ts +5 -1
  59. package/module/index.js +2 -4
  60. package/module/index.js.map +1 -1
  61. package/module/index.ts +4 -5
  62. package/module/schema.json +1 -1
  63. package/ng-add/schema.json +1 -1
  64. package/ng-update/upgrade-rules/checks/_src-to-nz-image-rule.js.map +1 -1
  65. package/ng-update/upgrade-rules/checks/_src-to-nz-image-rule.ts +1 -1
  66. package/ng-update/upgrade-rules/v12/index.spec.ts +2 -2
  67. package/ng-update/upgrade-rules/v12/schema.json +1 -1
  68. package/package.json +4 -1
  69. package/plugin/plugin.icon.js.map +1 -1
  70. package/plugin/plugin.icon.ts +1 -1
  71. package/plugin/plugin.network-env.js +8 -8
  72. package/plugin/plugin.network-env.js.map +1 -1
  73. package/plugin/plugin.network-env.spec.ts +2 -2
  74. package/plugin/plugin.network-env.ts +8 -8
  75. package/plugin/schema.json +1 -1
  76. package/schema.json +19 -0
  77. package/sta/index.js +208 -0
  78. package/sta/index.js.map +1 -0
  79. package/sta/index.spec.ts +57 -0
  80. package/sta/index.ts +242 -0
  81. package/sta/schema.js +3 -0
  82. package/sta/schema.js.map +1 -0
  83. package/sta/schema.json +52 -0
  84. package/sta/schema.ts +39 -0
  85. package/sta/templates/base.service.eta +46 -0
  86. package/sta/templates/dto-type.eta +12 -0
  87. package/sta/templates/dto.eta +17 -0
  88. package/sta/templates/procedure-call.eta +68 -0
  89. package/sta/templates/route-docs.eta +30 -0
  90. package/sta/templates/service.eta +44 -0
  91. package/sta/types.js +3 -0
  92. package/sta/types.js.map +1 -0
  93. package/sta/types.ts +28 -0
  94. package/tpl/schema.json +8 -8
  95. package/tpl/schema.ts +5 -1
  96. package/utils/alain.js +13 -8
  97. package/utils/alain.js.map +1 -1
  98. package/utils/alain.spec.ts +25 -3
  99. package/utils/alain.ts +22 -8
  100. package/utils/html.js.map +1 -1
  101. package/utils/html.ts +2 -2
  102. package/utils/json.js.map +1 -1
  103. package/utils/json.ts +1 -1
  104. package/utils/lib-versions.js +1 -1
  105. package/utils/lib-versions.ts +1 -1
  106. package/utils/testing.js +4 -1
  107. package/utils/testing.js.map +1 -1
  108. package/utils/testing.ts +8 -1
  109. package/utils/workspace.js +12 -2
  110. package/utils/workspace.js.map +1 -1
  111. package/utils/workspace.ts +20 -2
  112. package/view/schema.json +2 -7
  113. package/application/files/root/proxy.conf.json +0 -2
  114. package/application/files/src/app/routes/exception/403.component.ts +0 -7
  115. package/application/files/src/app/routes/exception/404.component.ts +0 -7
  116. package/application/files/src/app/routes/exception/500.component.ts +0 -7
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Όλο τον χρόνο",
86
86
  "app.analysis.all-month": "Όλο τον μήνα",
87
87
  "app.analysis.all-week": "Όλη την εβδομάδα",
88
- "app.analysis.all-day": "Όλη μέρα",
88
+ "app.analysis.all-today": "Όλη μέρα",
89
89
  "app.analysis.search-users": "Αναζήτηση χρηστών",
90
90
  "app.analysis.per-capita-search": "Αναζήτηση ανά κεφάλαιο",
91
91
  "app.analysis.online-top-search": "(Ζωντανά) Κορυφαία αναζήτηση",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "All Year",
86
86
  "app.analysis.all-month": "All Month",
87
87
  "app.analysis.all-week": "All Week",
88
- "app.analysis.all-day": "All day",
88
+ "app.analysis.all-today": "All day",
89
89
  "app.analysis.search-users": "Search Users",
90
90
  "app.analysis.per-capita-search": "Per Capita Search",
91
91
  "app.analysis.online-top-search": "Online Top Search",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Todo el Año",
86
86
  "app.analysis.all-month": "Todo el Mes",
87
87
  "app.analysis.all-week": "Toda la Semana",
88
- "app.analysis.all-day": "Todos los días",
88
+ "app.analysis.all-today": "Todos los días",
89
89
  "app.analysis.search-users": "Buscar Usuarios",
90
90
  "app.analysis.per-capita-search": "Búsqueda per cápita",
91
91
  "app.analysis.online-top-search": "Online Top Search",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Toute l'année",
86
86
  "app.analysis.all-month": "Tout le mois",
87
87
  "app.analysis.all-week": "Toute la semaine",
88
- "app.analysis.all-day": "Toute la journée",
88
+ "app.analysis.all-today": "Toute la journée",
89
89
  "app.analysis.search-users": "Rechercher des utilisateurs",
90
90
  "app.analysis.per-capita-search": "Recherche par capital",
91
91
  "app.analysis.online-top-search": "Top des recherche en ligne",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Cijela godina,",
86
86
  "app.analysis.all-month": "Cijeli mjesec",
87
87
  "app.analysis.all-week": "Cijeli tjedan",
88
- "app.analysis.all-day": "Cijeli dan",
88
+ "app.analysis.all-today": "Cijeli dan",
89
89
  "app.analysis.search-users": "Pretraživanje korisnika",
90
90
  "app.analysis.per-capita-search": "Pretraživanje po osobi",
91
91
  "app.analysis.online-top-search": "Internetska top pretraga",
@@ -0,0 +1,151 @@
1
+ {
2
+ "menu.search.placeholder": "Cerca persone, file, foto…",
3
+ "menu.fullscreen": "Schermo intero",
4
+ "menu.fullscreen.exit": "Esci dallo schermo intero",
5
+ "menu.clear.local.storage": "Cancella memoria locale",
6
+ "menu.lang": "Lingua",
7
+ "menu.main": "Navigazione principale",
8
+ "menu.dashboard": "Pannello di controllo",
9
+ "menu.dashboard.v1": "Predefinito",
10
+ "menu.dashboard.analysis": "Analisi",
11
+ "menu.dashboard.monitor": "Monitor",
12
+ "menu.dashboard.workplace": "Luogo di lavoro",
13
+ "menu.shortcut": "Scorciatoia",
14
+ "menu.widgets": "Widgets",
15
+ "menu.alain": "Alain",
16
+ "menu.style": "Stile",
17
+ "menu.style.typography": "Tipografia",
18
+ "menu.style.gridmasonry": "Muratura Griglia",
19
+ "menu.style.colors": "Colori",
20
+ "menu.delon": "Delon Lib",
21
+ "menu.delon.form": "Forma dinamica",
22
+ "menu.delon.table": "Tabella semplice",
23
+ "menu.delon.util": "Util",
24
+ "menu.delon.print": "Stampa",
25
+ "menu.delon.guard": "Protezione Percorso",
26
+ "menu.delon.cache": "Cache",
27
+ "menu.delon.qr": "QR",
28
+ "menu.delon.acl": "ACL",
29
+ "menu.delon.downfile": "Scarica File",
30
+ "menu.delon.xlsx": "Excel",
31
+ "menu.delon.zip": "Zip",
32
+ "menu.pro": "Antd Pro",
33
+ "menu.form": "Modulo",
34
+ "menu.form.basicform": "Modulo di base",
35
+ "menu.form.stepform": "Modulo di fase",
36
+ "menu.form.stepform.info": "Modulo di fase (scrivi informazioni del trasferimento)",
37
+ "menu.form.stepform.confirm": "Modulo di fase (conferma informazioni del trasferimento)",
38
+ "menu.form.stepform.result": "Modulo di fase (terminato)",
39
+ "menu.form.advancedform": "Modulo avanzato",
40
+ "menu.list": "Elenco",
41
+ "menu.list.searchtable": "Cerca tabella",
42
+ "menu.list.basiclist": "Elenco di base",
43
+ "menu.list.cardlist": "Elenco delle schede",
44
+ "menu.list.searchlist": "Cerca elenco",
45
+ "menu.list.searchlist.articles": "Cerca elenco (articoli)",
46
+ "menu.list.searchlist.projects": "Cerca elenco (progetti)",
47
+ "menu.list.searchlist.applications": "Cerca elenco (applicazioni)",
48
+ "menu.profile": "Profilo",
49
+ "menu.profile.basic": "Profilo di base",
50
+ "menu.profile.advanced": "Profilo avanzato",
51
+ "menu.result": "Risultato",
52
+ "menu.result.success": "Riuscito",
53
+ "menu.result.fail": "Fallito",
54
+ "menu.exception": "Eccezione",
55
+ "menu.exception.not-permission": "403",
56
+ "menu.exception.not-find": "404",
57
+ "menu.exception.server-error": "500",
58
+ "menu.account": "Account",
59
+ "menu.account.center": "Centro Account",
60
+ "menu.account.settings": "Impostazioni dell'account",
61
+ "menu.account.trigger": "Errore all'attivazione",
62
+ "menu.account.logout": "Esci",
63
+ "menu.more": "Altro",
64
+ "menu.report": "Report",
65
+ "menu.report.relation": "Mappa della relazione",
66
+ "menu.extras": "Extra",
67
+ "menu.extras.helpcenter": "Centro assistenza",
68
+ "menu.extras.settings": "Impostazioni",
69
+ "menu.extras.poi": "Poi",
70
+ "app.analysis.test": "Gongzhuan N.{{no}} negozio",
71
+ "app.analysis.introduce": "Presenta",
72
+ "app.analysis.total-sales": "Vendite totali",
73
+ "app.analysis.day-sales": "Vendite giornaliere",
74
+ "app.analysis.visits": "Visite",
75
+ "app.analysis.visits-trend": "Trend visite",
76
+ "app.analysis.visits-ranking": "Ranking visite",
77
+ "app.analysis.day-visits": "Visite giornaliere",
78
+ "app.analysis.week": "Rapporto settimanale",
79
+ "app.analysis.day": "Rapporto giornaliero",
80
+ "app.analysis.payments": "Pagamenti",
81
+ "app.analysis.conversion-rate": "Tasso di conversione",
82
+ "app.analysis.operational-effect": "Effetto operativo",
83
+ "app.analysis.sales-trend": "Trend vendite del negozio",
84
+ "app.analysis.sales-ranking": "Ranking vendite",
85
+ "app.analysis.all-year": "Intero Anno",
86
+ "app.analysis.all-month": "Intero Messe",
87
+ "app.analysis.all-week": "Intero Settimana",
88
+ "app.analysis.all-today": "Intero giorno",
89
+ "app.analysis.search-users": "Cerca utenti",
90
+ "app.analysis.per-capita-search": "Ricerca pro capite",
91
+ "app.analysis.online-top-search": "Migliore ricerca online",
92
+ "app.analysis.the-proportion-of-sales": "La percentuale di vendite",
93
+ "app.analysis.channel.all": "TUTTI",
94
+ "app.analysis.channel.online": "Online",
95
+ "app.analysis.channel.stores": "Negozi",
96
+ "app.analysis.sales": "Vendite",
97
+ "app.analysis.traffic": "Traffico",
98
+ "app.analysis.table.rank": "Posizione",
99
+ "app.analysis.table.search-keyword": "Parola chiave",
100
+ "app.analysis.table.users": "Utenti",
101
+ "app.analysis.table.weekly-range": "Intervallo settimanale",
102
+ "app.monitor.trading-activity": "Attività commerciale in tempo reale",
103
+ "app.monitor.total-transactions": "Transazioni totali oggi",
104
+ "app.monitor.sales-target": "Tasso di completamento degli obiettivi di vendita",
105
+ "app.monitor.remaining-time": "Tempo rimanente di attività",
106
+ "app.monitor.total-transactions-per-second": "Transazioni totali al secondo",
107
+ "app.monitor.activity-forecast": "Previsioni attività",
108
+ "app.monitor.efficiency": "Efficienza",
109
+ "app.monitor.ratio": "Rapporto",
110
+ "app.monitor.proportion-per-category": "Percentuale per categoria",
111
+ "app.monitor.fast-food": "Fast food",
112
+ "app.monitor.western-food": "Cibo occidentale",
113
+ "app.monitor.hot-pot": "Pentola calda",
114
+ "app.monitor.waiting-for-implementation": "In attesa di applicazione",
115
+ "app.monitor.popular-searches": "Ricerche popolari",
116
+ "app.monitor.resource-surplus": "Eccedenza di risorse",
117
+ "app.monitor.fund-surplus": "Eccedenza di fondi",
118
+ "app.lock": "Blocca",
119
+ "app.login.message-invalid-credentials": "Nome utente o password non validi (admin/ant.design)",
120
+ "app.login.message-invalid-verification-code": "Codice di verifica non valido",
121
+ "app.login.tab-login-credentials": "Credenziali",
122
+ "app.login.tab-login-mobile": "Numero di cellulare",
123
+ "app.login.remember-me": "Ricordami",
124
+ "app.login.forgot-password": "Hai dimenticato la password?",
125
+ "app.login.sign-in-with": "Accedi con",
126
+ "app.login.signup": "Registrati",
127
+ "app.login.login": "Accedi",
128
+ "app.register.register": "Registrati",
129
+ "app.register.get-verification-code": "Ottieni codice",
130
+ "app.register.sign-in": "Hai già un account?",
131
+ "app.register-result.msg": "Account: registrato all'indirizzo {{email}}",
132
+ "app.register-result.activation-email": "L'email di attivazione è stata inviata al tuo indirizzo di posta elettronica ed è valida per 24 ore. Accedi all'email in tempo e fai clic sul link per attivare l'account.",
133
+ "app.register-result.back-home": "Torna alla home",
134
+ "app.register-result.view-mailbox": "Visualizza casella di posta",
135
+ "validation.email.required": "Inserisci la tua email!",
136
+ "validation.email.wrong-format": "L'indirizzo email è nel formato sbagliato!",
137
+ "validation.password.required": "Inserisci la tua password!",
138
+ "validation.password.twice": "Le password inserite due volte non corrispondono!",
139
+ "validation.password.strength.msg": "Digita almeno 6 caratteri e non utilizzare password facili da intuire.",
140
+ "validation.password.strength.strong": "Sicurezza: alta",
141
+ "validation.password.strength.medium": "Sicurezza: media",
142
+ "validation.password.strength.short": "Sicurezza: troppo breve",
143
+ "validation.confirm-password.required": "Conferma la tua password!",
144
+ "validation.phone-number.required": "Inserisci il tuo numero di telefono!",
145
+ "validation.phone-number.wrong-format": "Numero di telefono non corretto!",
146
+ "validation.verification-code.required": "Inserisci il codice di verifica!",
147
+ "validation.title.required": "Inserisci un titolo",
148
+ "validation.date.required": "Seleziona la data di inizio e di fine",
149
+ "validation.goal.required": "Inserisci una descrizione dell'obiettivo",
150
+ "validation.standard.required": "Inserisci un parametro"
151
+ }
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "올해",
86
86
  "app.analysis.all-month": "이번달",
87
87
  "app.analysis.all-week": "이번주",
88
- "app.analysis.all-day": "오늘",
88
+ "app.analysis.all-today": "오늘",
89
89
  "app.analysis.search-users": "검색 사용자",
90
90
  "app.analysis.per-capita-search": "1인당 검색",
91
91
  "app.analysis.online-top-search": "온라인 인기 검색",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Cały rok",
86
86
  "app.analysis.all-month": "Cały miesiąc",
87
87
  "app.analysis.all-week": "Cały tydzień",
88
- "app.analysis.all-day": "Cały dzień",
88
+ "app.analysis.all-today": "Cały dzień",
89
89
  "app.analysis.search-users": "Wyszukających użytkowników",
90
90
  "app.analysis.per-capita-search": "Wyszukiwań per użytkownik",
91
91
  "app.analysis.online-top-search": "Najpopularniejsze wyszukiwania online",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Celotno leto",
86
86
  "app.analysis.all-month": "Cel mesec",
87
87
  "app.analysis.all-week": "Cel teden",
88
- "app.analysis.all-day": "Cel dan",
88
+ "app.analysis.all-today": "Cel dan",
89
89
  "app.analysis.search-users": "Išči uporabnike",
90
90
  "app.analysis.per-capita-search": "Iskanje na prebivalca",
91
91
  "app.analysis.online-top-search": "Spletno iskanje",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Tüm Yıl",
86
86
  "app.analysis.all-month": "Tüm Ay",
87
87
  "app.analysis.all-week": "Tüm Hafta",
88
- "app.analysis.all-day": "Tüm Gün",
88
+ "app.analysis.all-today": "Tüm Gün",
89
89
  "app.analysis.search-users": "Kullanıcıları ara",
90
90
  "app.analysis.per-capita-search": "Kişi bazlı arama",
91
91
  "app.analysis.online-top-search": "En İyi Çevrimiçi arama",
@@ -1,15 +1,19 @@
1
1
  {
2
+ "menu": {
3
+ "dashboard": {
4
+ "": "仪表盘",
5
+ "v1": "默认页",
6
+ "analysis": "分析页",
7
+ "monitor": "监控页",
8
+ "workplace": "工作台"
9
+ }
10
+ },
2
11
  "menu.search.placeholder": "搜索:员工、文件、照片等",
3
12
  "menu.fullscreen": "全屏",
4
13
  "menu.fullscreen.exit": "退出全屏",
5
14
  "menu.clear.local.storage": "清理本地缓存",
6
15
  "menu.lang": "语言",
7
16
  "menu.main": "主导航",
8
- "menu.dashboard": "仪表盘",
9
- "menu.dashboard.v1": "默认页",
10
- "menu.dashboard.analysis": "分析页",
11
- "menu.dashboard.monitor": "监控页",
12
- "menu.dashboard.workplace": "工作台",
13
17
  "menu.shortcut": "快捷菜单",
14
18
  "menu.widgets": "小部件",
15
19
  "menu.alain": "Alain",
@@ -85,7 +89,7 @@
85
89
  "app.analysis.all-year": "全年",
86
90
  "app.analysis.all-month": "本月",
87
91
  "app.analysis.all-week": "本周",
88
- "app.analysis.all-day": "今日",
92
+ "app.analysis.all-today": "今日",
89
93
  "app.analysis.search-users": "搜索用户数",
90
94
  "app.analysis.per-capita-search": "人均搜索次数",
91
95
  "app.analysis.online-top-search": "线上热门搜索",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "全年",
86
86
  "app.analysis.all-month": "本月",
87
87
  "app.analysis.all-week": "本周",
88
- "app.analysis.all-day": "今日",
88
+ "app.analysis.all-today": "今日",
89
89
  "app.analysis.search-users": "搜索用戶數",
90
90
  "app.analysis.per-capita-search": "人均搜索次數",
91
91
  "app.analysis.online-top-search": "線上熱門搜索",
@@ -0,0 +1,17 @@
1
+ /**
2
+ * For more configuration, please refer to https://angular.io/guide/build#proxying-to-a-backend-server
3
+ *
4
+ * 更多配置描述请参考 https://angular.cn/guide/build#proxying-to-a-backend-server
5
+ *
6
+ * Note: The proxy is only valid for real requests, Mock does not actually generate requests, so the priority of Mock will be higher than the proxy
7
+ */
8
+ module.exports = {
9
+ /**
10
+ * The following means that all requests are directed to the backend `https://localhost:9000/`
11
+ */
12
+ // '/': {
13
+ // target: 'https://localhost:9000/',
14
+ // secure: false, // Ignore invalid SSL certificates
15
+ // changeOrigin: true
16
+ // }
17
+ };
@@ -1,9 +1,9 @@
1
1
  import { Component, ElementRef, OnInit, Renderer2 } from '@angular/core';
2
- import { NavigationEnd, Router } from '@angular/router';
2
+ import { NavigationEnd, NavigationError, RouteConfigLoadStart, Router } from '@angular/router';
3
3
  import { TitleService, VERSION as VERSION_ALAIN } from '@delon/theme';
4
+ import { environment } from '@env/environment';
4
5
  import { NzModalService } from 'ng-zorro-antd/modal';
5
6
  import { VERSION as VERSION_ZORRO } from 'ng-zorro-antd/version';
6
- import { filter } from 'rxjs/operators';
7
7
 
8
8
  @Component({
9
9
  selector: 'app-root',
@@ -22,9 +22,25 @@ export class AppComponent implements OnInit {
22
22
  }
23
23
 
24
24
  ngOnInit(): void {
25
- this.router.events.pipe(filter(evt => evt instanceof NavigationEnd)).subscribe(() => {
26
- this.titleSrv.setTitle();
27
- this.modalSrv.closeAll();
25
+ let configLoad = false;
26
+ this.router.events.subscribe(ev => {
27
+ if (ev instanceof RouteConfigLoadStart) {
28
+ configLoad = true;
29
+ }
30
+ if (configLoad && ev instanceof NavigationError) {
31
+ this.modalSrv.confirm({
32
+ nzTitle: `提醒`,
33
+ nzContent: environment.production ? `应用可能已发布新版本,请点击刷新才能生效。` : `无法加载路由:${ev.url}`,
34
+ nzCancelDisabled: false,
35
+ nzOkText: '刷新',
36
+ nzCancelText: '忽略',
37
+ nzOnOk: () => location.reload()
38
+ });
39
+ }
40
+ if (ev instanceof NavigationEnd) {
41
+ this.titleSrv.setTitle();
42
+ this.modalSrv.closeAll();
43
+ }
28
44
  });
29
45
  }
30
46
  }
@@ -68,6 +68,12 @@ describe('Service: I18n', () => {
68
68
  expect(srv.defaultLang).toBe('zh-TW');
69
69
  });
70
70
 
71
+ it('should be use default language when the browser language is not in the list', () => {
72
+ spyOnProperty(navigator, 'languages').and.returnValue(['es-419']);
73
+ genModule();
74
+ expect(srv.defaultLang).toBe('zh-CN');
75
+ });
76
+
71
77
  it('should be trigger notify when changed language', () => {
72
78
  genModule();
73
79
  srv.use('en-US', {});
@@ -76,9 +76,7 @@ export class I18NService extends AlainI18nBaseService {
76
76
  super(cogSrv);
77
77
 
78
78
  const defaultLang = this.getDefaultLang();
79
- if (this._langs.findIndex(w => w.code === defaultLang)) {
80
- this._defaultLang = defaultLang;
81
- }
79
+ this._defaultLang = this._langs.findIndex(w => w.code === defaultLang) === -1 ? DEFAULT : defaultLang;
82
80
  }
83
81
 
84
82
  private getDefaultLang(): string {
@@ -97,10 +95,10 @@ export class I18NService extends AlainI18nBaseService {
97
95
  return this.http.get(`assets/tmp/i18n/${lang}.json`);
98
96
  }
99
97
 
100
- use(lang: string, data: Record<string, string>): void {
98
+ use(lang: string, data: Record<string, unknown>): void {
101
99
  if (this._currentLang === lang) return;
102
100
 
103
- this._data = data;
101
+ this._data = this.flatData(data, []);
104
102
 
105
103
  const item = LANGS[lang];
106
104
  registerLocaleData(item.ng);
@@ -168,7 +168,7 @@ export class DefaultInterceptor implements HttpInterceptor {
168
168
 
169
169
  private toLogin(): void {
170
170
  this.notification.error(`未登录或登录已过期,请重新登录。`, ``);
171
- this.goTo('/passport/login');
171
+ this.goTo(this.tokenSrv.login_url!);
172
172
  }
173
173
 
174
174
  private handleData(ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandler): Observable<any> {
@@ -209,7 +209,7 @@ export class DefaultInterceptor implements HttpInterceptor {
209
209
  case 403:
210
210
  case 404:
211
211
  case 500:
212
- this.goTo(`/exception/${ev.status}`);
212
+ // this.goTo(`/exception/${ev.status}?url=${req.urlWithParams}`);
213
213
  break;
214
214
  default:
215
215
  if (ev instanceof HttpErrorResponse) {
@@ -241,7 +241,8 @@ export class DefaultInterceptor implements HttpInterceptor {
241
241
  // 统一加上服务端前缀
242
242
  let url = req.url;
243
243
  if (!url.startsWith('https://') && !url.startsWith('http://')) {
244
- url = environment.api.baseUrl + url;
244
+ const { baseUrl } = environment.api;
245
+ url = baseUrl + (baseUrl.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);
245
246
  }
246
247
 
247
248
  const newReq = req.clone({ url, setHeaders: this.getAdditionalHeaders(req.headers) });
@@ -1,4 +1,4 @@
1
- import { Injectable, Injector, Inject } from '@angular/core';
1
+ import { Injectable, Inject } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { HttpClient } from '@angular/common/http';
4
4
  import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
@@ -28,7 +28,7 @@ export class StartupService {
28
28
  private titleService: TitleService,
29
29
  @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,
30
30
  private httpClient: HttpClient,
31
- private injector: Injector
31
+ private router: Router
32
32
  ) {
33
33
  iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
34
34
  }
@@ -39,6 +39,7 @@ export class StartupService {
39
39
  return zip(this.i18n.loadLangData(defaultLang), this.httpClient.get('assets/tmp/app-data.json')).pipe(
40
40
  catchError((res: NzSafeAny) => {
41
41
  console.warn(`StartupService.load: Network request failed`, res);
42
+ setTimeout(() => this.router.navigateByUrl(`/exception/500`));
42
43
  return [];
43
44
  }),
44
45
  map(([langData, appData]: [Record<string, string>, NzSafeAny]) => {
@@ -64,6 +65,7 @@ export class StartupService {
64
65
  return this.httpClient.get('assets/tmp/app-data.json').pipe(
65
66
  catchError((res: NzSafeAny) => {
66
67
  console.warn(`StartupService.load: Network request failed`, res);
68
+ setTimeout(() => this.router.navigateByUrl(`/exception/500`));
67
69
  return of({});
68
70
  }),
69
71
  map((res: NzSafeAny) => {
@@ -97,7 +99,7 @@ export class StartupService {
97
99
  private viaMock(): Observable<void> {
98
100
  // const tokenData = this.tokenService.get();
99
101
  // if (!tokenData.token) {
100
- // this.injector.get(Router).navigateByUrl('/passport/login');
102
+ // this.router.navigateByUrl(this.tokenService.login_url!);
101
103
  // return;
102
104
  // }
103
105
  // mock
@@ -6,7 +6,7 @@ import { environment } from '@env/environment';
6
6
  @Component({
7
7
  selector: 'layout-basic',
8
8
  template: `
9
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="contentTpl">
9
+ <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="contentTpl" [customError]="null">
10
10
  <layout-default-header-item direction="left">
11
11
  <a layout-default-header-item-trigger href="//github.com/ng-alain/ng-alain" target="_blank">
12
12
  <i nz-icon nzType="github"></i>
@@ -1,15 +1,13 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { RouterModule, Routes } from '@angular/router';
3
3
 
4
- import { Exception403Component } from './403.component';
5
- import { Exception404Component } from './404.component';
6
- import { Exception500Component } from './500.component';
4
+ import { ExceptionComponent } from './exception.component';
7
5
  import { ExceptionTriggerComponent } from './trigger.component';
8
6
 
9
7
  const routes: Routes = [
10
- { path: '403', component: Exception403Component },
11
- { path: '404', component: Exception404Component },
12
- { path: '500', component: Exception500Component },
8
+ { path: '403', component: ExceptionComponent, data: { type: 403 } },
9
+ { path: '404', component: ExceptionComponent, data: { type: 404 } },
10
+ { path: '500', component: ExceptionComponent, data: { type: 500 } },
13
11
  { path: 'trigger', component: ExceptionTriggerComponent }
14
12
  ];
15
13
 
@@ -0,0 +1,16 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import { ExceptionType } from '@delon/abc/exception';
4
+
5
+ @Component({
6
+ selector: 'app-exception',
7
+ template: ` <exception [type]="type" style="min-height: 500px; height: 80%;"> </exception> `,
8
+ changeDetection: ChangeDetectionStrategy.OnPush
9
+ })
10
+ export class ExceptionComponent {
11
+ get type(): ExceptionType {
12
+ return this.route.snapshot.data.type;
13
+ }
14
+
15
+ constructor(private route: ActivatedRoute) {}
16
+ }
@@ -4,16 +4,12 @@ import { ExceptionModule as DelonExceptionModule } from '@delon/abc/exception';
4
4
  import { NzButtonModule } from 'ng-zorro-antd/button';
5
5
  import { NzCardModule } from 'ng-zorro-antd/card';
6
6
 
7
- import { Exception403Component } from './403.component';
8
- import { Exception404Component } from './404.component';
9
- import { Exception500Component } from './500.component';
10
7
  import { ExceptionRoutingModule } from './exception-routing.module';
8
+ import { ExceptionComponent } from './exception.component';
11
9
  import { ExceptionTriggerComponent } from './trigger.component';
12
10
 
13
- const COMPONENTS = [Exception403Component, Exception404Component, Exception500Component, ExceptionTriggerComponent];
14
-
15
11
  @NgModule({
16
12
  imports: [CommonModule, DelonExceptionModule, NzButtonModule, NzCardModule, ExceptionRoutingModule],
17
- declarations: [...COMPONENTS]
13
+ declarations: [ExceptionComponent, ExceptionTriggerComponent]
18
14
  })
19
15
  export class ExceptionModule {}
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Όλο τον χρόνο",
86
86
  "app.analysis.all-month": "Όλο τον μήνα",
87
87
  "app.analysis.all-week": "Όλη την εβδομάδα",
88
- "app.analysis.all-day": "Όλη μέρα",
88
+ "app.analysis.all-today": "Όλη μέρα",
89
89
  "app.analysis.search-users": "Αναζήτηση χρηστών",
90
90
  "app.analysis.per-capita-search": "Αναζήτηση ανά κεφάλαιο",
91
91
  "app.analysis.online-top-search": "(Ζωντανά) Κορυφαία αναζήτηση",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "All Year",
86
86
  "app.analysis.all-month": "All Month",
87
87
  "app.analysis.all-week": "All Week",
88
- "app.analysis.all-day": "All day",
88
+ "app.analysis.all-today": "All day",
89
89
  "app.analysis.search-users": "Search Users",
90
90
  "app.analysis.per-capita-search": "Per Capita Search",
91
91
  "app.analysis.online-top-search": "Online Top Search",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Todo el Año",
86
86
  "app.analysis.all-month": "Todo el Mes",
87
87
  "app.analysis.all-week": "Toda la Semana",
88
- "app.analysis.all-day": "Todos los días",
88
+ "app.analysis.all-today": "Todos los días",
89
89
  "app.analysis.search-users": "Buscar Usuarios",
90
90
  "app.analysis.per-capita-search": "Búsqueda per cápita",
91
91
  "app.analysis.online-top-search": "Online Top Search",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Toute l'année",
86
86
  "app.analysis.all-month": "Tout le mois",
87
87
  "app.analysis.all-week": "Toute la semaine",
88
- "app.analysis.all-day": "Toute la journée",
88
+ "app.analysis.all-today": "Toute la journée",
89
89
  "app.analysis.search-users": "Rechercher des utilisateurs",
90
90
  "app.analysis.per-capita-search": "Recherche par capital",
91
91
  "app.analysis.online-top-search": "Top des recherche en ligne",
@@ -85,7 +85,7 @@
85
85
  "app.analysis.all-year": "Cijela godina,",
86
86
  "app.analysis.all-month": "Cijeli mjesec",
87
87
  "app.analysis.all-week": "Cijeli tjedan",
88
- "app.analysis.all-day": "Cijeli dan",
88
+ "app.analysis.all-today": "Cijeli dan",
89
89
  "app.analysis.search-users": "Pretraživanje korisnika",
90
90
  "app.analysis.per-capita-search": "Pretraživanje po osobi",
91
91
  "app.analysis.online-top-search": "Internetska top pretraga",