分類
發燒車訊

.net core3.1 abp動態菜單和動態權限(思路) (二)

ps:本文需要先把abp的源碼下載一份來下,跟着一起找實現,更容易懂

在abp中,對於權限和菜單使用靜態來管理,菜單的加載是在登陸頁面的地方(具體是怎麼知道的,瀏覽器按F12,然後去sources中去找)

這個/AbpScripts/GetScripts是獲取需要初始化的script,源自AbpScriptsController,GetScripts方法包括

頁面加載時的鏈接是:http://localhost:62114/AbpScripts/GetScripts?v=637274153555501055

_multiTenancyScriptManager //當前租戶初始化 對應報文的 abp.multiTenancy

_sessionScriptManager //當前session初始化 對應報文的 abp.session
_localizationScriptManager  //本地化的初始化 對應報文的 abp.localization
_featuresScriptManager  //對應報文的 abp.features
_authorizationScriptManager  //權限初始化  對應報文的 abp.auth
_navigationScriptManager  //導航菜單初始化  對應報文的 abp.nav
_settingScriptManager  //設置初始化  對應報文的 abp.setting
_timingScriptManager  //對應報文的 abp.clock
_customConfigScriptManager  //對應報文的 abp.custom

 

 

 

 

 好了,現在基本算是找到菜單和權限js獲取的地方了,一般系統裏面,權限是依賴於菜單和菜單按鈕的,所以我們先不管權限,先把菜單做成動態加載的

從await _navigationScriptManager.GetScriptAsync()開始,一路F12,大概流程是

(接口)INavigationScriptManager=>(接口實現)NavigationScriptManager=>(方法)GetScriptAsync=>(調用)await _userNavigationManager.GetMenusAsync=>
(接口)IUserNavigationManager=>(接口實現)UserNavigationManager=>(方法)GetMenuAsync=>(調用)navigationManager.Menus=>
(接口)INavigationManager=>(接口實現)NavigationManager=>(非靜態構造函數為Menus屬性賦值)NavigationManager

 到這裏之後基本就到底了,我們看看NavigationManager的內容

    internal class NavigationManager : INavigationManager, ISingletonDependency
    {
        public IDictionary<string, MenuDefinition> Menus { get; private set; }  //屬性

        public MenuDefinition MainMenu //屬性
        {
            get { return Menus["MainMenu"]; }
        }

        private readonly IIocResolver _iocResolver;  
        private readonly INavigationConfiguration _configuration;

        public NavigationManager(IIocResolver iocResolver, INavigationConfiguration configuration) //非靜態構造函數
        {
            _iocResolver = iocResolver;
            _configuration = configuration;

            Menus = new Dictionary<string, MenuDefinition>
                    {
                        {"MainMenu", new MenuDefinition("MainMenu", new LocalizableString("MainMenu", AbpConsts.LocalizationSourceName))}
                    };
        }

        public void Initialize()  //初始化方法
        {
            var context = new NavigationProviderContext(this);

            foreach (var providerType in _configuration.Providers)
            {
                using (var provider = _iocResolver.ResolveAsDisposable<NavigationProvider>(providerType))
                {
                    provider.Object.SetNavigation(context);  //中式英語翻譯一下,應該是設置導航
                }
            }
        }
    }

這個類裏面就只有屬性、需要注入的接口聲明、非靜態構造函數、初始化方法,我們到這裏需要關注的是Menus這個屬性,這個屬性似乎將會包含我們需要生成的菜單內容

Menus = new Dictionary<string, MenuDefinition>
                    {
                        {"MainMenu", new MenuDefinition("MainMenu", new LocalizableString("MainMenu", AbpConsts.LocalizationSourceName))}
                    };

這裡是對Menus的賦值,實例化了一個Dictionary,前面的不用看,主要是看標紅的這句話,從new LocalizableString(“MainMenu”, AbpConsts.LocalizationSourceName)裏面獲取到值

好了現在基本找到地方了,我們不知道LocalizableString是什麼意思,但是我們可以百度一波

ILocalizableString/LocalizableString:封裝需要被本地化的string的信息,並提供Localize方法(調用ILocalizationManager的GetString方法)返回本地化的string. SourceName指定其從那個本地化資源讀取本地化文本。

  LocalizableString(“Questions”, “”) 如果本地找不到資源,會報300

大概的意思是通過new LocalizableString,我們可以在本地化來源為AbpConsts.LocalizationSourceName的string裏面尋找到Key為MainMenu的value(理解不對請噴)

 

現在需要去找到那個地方對MainMenu進行了本地化操作,一般來說這個事情都是在程序加載的時候進行的,先對MainMenu進行讀取,保存到本地,然後在_navigationScriptManager讀取,傳輸給前台

似乎不好找了,但是我們發現有一個類型MenuDefinition,F12一下,可以發現寶藏

namespace Abp.Application.Navigation
{
    /// <summary>
    /// Represents a navigation menu for an application.  //表示應用程序的導航菜單
/// </summary>
    public class MenuDefinition : IHasMenuItemDefinitions
    {
        /// <summary>
        /// Unique name of the menu in the application. Required.  //應用程序中菜單的唯一名稱。 必須
        /// </summary>
        public string Name { get; private set; }

        /// <summary>
        /// Display name of the menu. Required.  //菜單显示名稱 必須
/// </summary>
        public ILocalizableString DisplayName { get; set; }

        /// <summary>
        /// Can be used to store a custom object related to this menu. Optional.  //可用於存儲與此菜單相關的自定義對象
/// </summary>
        public object CustomData { get; set; }

        /// <summary>
        /// Menu items (first level).   //菜單項(第一級)
/// </summary>
        public List<MenuItemDefinition> Items { get; set; }

        /// <summary>
        /// Creates a new <see cref="MenuDefinition"/> object.
        /// </summary>
        /// <param name="name">Unique name of the menu</param>
        /// <param name="displayName">Display name of the menu</param>
        /// <param name="customData">Can be used to store a custom object related to this menu.</param>
        public MenuDefinition(string name, ILocalizableString displayName, object customData = null)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name", "Menu name can not be empty or null.");
            }

            if (displayName == null)
            {
                throw new ArgumentNullException("displayName", "Display name of the menu can not be null.");
            }

            Name = name;
            DisplayName = displayName;
            CustomData = customData;

            Items = new List<MenuItemDefinition>();
        }

        /// <summary>
        /// Adds a <see cref="MenuItemDefinition"/> to <see cref="Items"/>.
        /// </summary>
        /// <param name="menuItem"><see cref="MenuItemDefinition"/> to be added</param>
        /// <returns>This <see cref="MenuDefinition"/> object</returns>
        public MenuDefinition AddItem(MenuItemDefinition menuItem)
        {
            Items.Add(menuItem);
            return this;
        }

        /// <summary>
        /// Remove menu item with given name
        /// </summary>
        /// <param name="name"></param>
        public void RemoveItem(string name)
        {
            Items.RemoveAll(m => m.Name == name);
        }
    }
}

找到了菜單的類型了,那麼我們去找保存的地方就好找了,我們其實可以根據AddItem這個方法去找,去查看哪個地方引用了

AddItem方法添加的是MenuItemDefinition類型的變量,那我們現在退出abp源碼,去我們的AbpLearn項目中去全局搜索一下

 

 

看來是同一個AbpLearnNavigationProvider類裏面,雙擊過去看一下

 

    /// <summary>
    /// This class defines menus for the application.
    /// </summary>
    public class AbpLearnNavigationProvider : NavigationProvider
    {
        public override void SetNavigation(INavigationProviderContext context)
        {
            context.Manager.MainMenu
                .AddItem(
                    new MenuItemDefinition(
                        PageNames.Home,
                        L("HomePage"),
                        url: "",
                        icon: "fas fa-home",
                        requiresAuthentication: true
                    )
                ).AddItem(
                    new MenuItemDefinition(
                        PageNames.Tenants,
                        L("Tenants"),
                        url: "Tenants",
                        icon: "fas fa-building",
                        permissionDependency: new SimplePermissionDependency(PermissionNames.Pages_Tenants)
                    )
                ).AddItem(
                    new MenuItemDefinition(
                        PageNames.Users,
                        L("Users"),
                        url: "Users",
                        icon: "fas fa-users",
                        permissionDependency: new SimplePermissionDependency(PermissionNames.Pages_Users)
                    )
                ).AddItem(
                    new MenuItemDefinition(
                        PageNames.Roles,
                        L("Roles"),
                        url: "Roles",
                        icon: "fas fa-theater-masks",
                        permissionDependency: new SimplePermissionDependency(PermissionNames.Pages_Roles)
                            )
                )
                .AddItem(
                    new MenuItemDefinition(
                        PageNames.About,
                        L("About"),
                        url: "About",
                        icon: "fas fa-info-circle"
                    )
                ).AddItem( // Menu items below is just for demonstration!
                    new MenuItemDefinition(
                        "MultiLevelMenu",
                        L("MultiLevelMenu"),
                        icon: "fas fa-circle"
                    ).AddItem(
                        new MenuItemDefinition(
                            "AspNetBoilerplate",
                            new FixedLocalizableString("ASP.NET Boilerplate"),
                            icon: "far fa-circle"
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetBoilerplateHome",
                                new FixedLocalizableString("Home"),
                                url: "https://aspnetboilerplate.com?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetBoilerplateTemplates",
                                new FixedLocalizableString("Templates"),
                                url: "https://aspnetboilerplate.com/Templates?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetBoilerplateSamples",
                                new FixedLocalizableString("Samples"),
                                url: "https://aspnetboilerplate.com/Samples?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetBoilerplateDocuments",
                                new FixedLocalizableString("Documents"),
                                url: "https://aspnetboilerplate.com/Pages/Documents?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        )
                    ).AddItem(
                        new MenuItemDefinition(
                            "AspNetZero",
                            new FixedLocalizableString("ASP.NET Zero"),
                            icon: "far fa-circle"
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetZeroHome",
                                new FixedLocalizableString("Home"),
                                url: "https://aspnetzero.com?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetZeroFeatures",
                                new FixedLocalizableString("Features"),
                                url: "https://aspnetzero.com/Features?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetZeroPricing",
                                new FixedLocalizableString("Pricing"),
                                url: "https://aspnetzero.com/Pricing?ref=abptmpl#pricing",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetZeroFaq",
                                new FixedLocalizableString("Faq"),
                                url: "https://aspnetzero.com/Faq?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        ).AddItem(
                            new MenuItemDefinition(
                                "AspNetZeroDocuments",
                                new FixedLocalizableString("Documents"),
                                url: "https://aspnetzero.com/Documents?ref=abptmpl",
                                icon: "far fa-dot-circle"
                            )
                        )
                    )
                );
        }

        private static ILocalizableString L(string name)
        {
            return new LocalizableString(name, AbpLearnConsts.LocalizationSourceName);
        }
    }

好了,現在我們找到菜單定義的地方了,那麼我們如何去做動態菜單哪?

 

首先我們想一下需要什麼樣的動態菜單?

1.從數據庫加載,不從數據庫加載怎麼叫動態

2.可以根據不同Host(管理者)和Tenant(租戶)加載不同的菜單,不可能管理者和租戶看到的菜單全是一個樣子的吧!

3.可以根據不同的角色或者用戶加載不同的菜單(這個就牽扯到權限了,比如誰可以看到什麼,不可以看到什麼)

4.權限、按鈕最好和菜單相綁定,這樣便於控制

……

 

根據以上幾點,我們可以確定

1.必須要在用戶登錄之後加載出來的菜單才能符合條件

2.菜單需要建一個表(因為abp默認沒有單獨的菜單表),來進行存放

3.字段需要包含:菜單名,菜單與權限對應的名稱(用於動態權限),菜單對應的Url,Icon,級聯父Id,是否啟用,排序,租戶Id

4.需要對菜單進行編輯時,因為牽扯到多租戶,我們需要對多租戶定義一個標準的菜單,在添加租戶時,自動將標準菜單複製保存一份到新租戶中,所以我們需要對於菜單的進行區分,一般來說Host對應的數據行TenantId(int)都為null,我們可以將標準菜單的TenantId標為-1,已經分配保存的菜單TenantId為當前租戶Id,這樣便於區分和查詢

 

好了,讓我們開始寫動態菜單吧

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

分類
發燒車訊

剛果法院首例 12年殺害500多頭大象 盜獵者將蹲30年苦牢

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:ENS

剛果共和國刑事法院以殺害國家公園巡守員未遂、販賣盜獵來的象牙、持有武器等多項罪名,判處知名盜獵者和象牙走私者吉拉德(Mobanza Mobembo Gérard)30年徒刑,且必須支付3800萬中非法郎(約台幣199萬元)給受傷的巡守員。

這是剛果共和國的野生動植走私者首次在刑事法院被定罪。

吉拉德因殺害國家公園巡守員未遂、販賣盜獵來的象牙、持有武器等多項罪名,遭判處30年徒刑。照片來源:WCS
新聞稿

吉拉德帶領集團 在國家公園殺死500多頭大象

根據調查,人稱蓋瓦尼歐(Guyvanho)的吉拉德帶領一個約25人的盜獵集團。自2008年至今,他們在諾娃貝爾多基國家公園(Nouabalé-Ndoki National Park)一帶殺死了500多頭大象。

該公園成立於1993年,位於剛果北部省份,周圍是非洲森林象和稀有大型猿類的棲地,包括西部低地大猩猩和東部黑猩猩。

剛果民主共和國籍的蓋瓦尼歐於2008年前後來到剛果共和國北部。2018年初,他和其他幾名集團成員殺死了11頭大象,被諾娃貝爾多基國家公園巡守員逮個正著,雙方發生駁火。起初蓋瓦尼奧趁亂逃脫,但同夥三名成員被捕。他們的供詞成為對蓋瓦尼歐發出逮捕令的根據。

除了被殺害的大象數量眾多外,這次事件還顯示該犯罪集團以暴力對抗公權力的傾向,而且公園內外四周的大象盜獵集團行徑越來越囂張。

2018年5月蓋瓦尼歐被捕,被押在歐耶索省城監獄中等待審判。然而,在2018年6月2日,審判開始前12天,蓋瓦尼歐竟然逃獄了。儘管如此,他的審判仍持續進行,並因缺席被判處5年徒刑加500萬中非法郎(約台幣26萬元)的罰款。

除了被殺害的大象數量眾多外,這次事件還顯示該犯罪集團以暴力對抗公權力的傾向。照片來源:WCS
臉書

蓋瓦尼奧於2019年7月20日再度落網

法院再次發出逮捕令。蓋瓦尼歐仍然是公園野生動物犯罪部門的通緝要犯,所有曾出沒過的地點都受到監視。這段期間,他曾被目擊繼續參加盜獵活動,每次都與國家公園的巡守員發生槍戰。

2019年5月31日,一名巡守員返回諾娃貝爾多基國家公園總部途中剛好碰上一群剛收工的盜獵者,蓋瓦尼奧赫然在其中。盜獵者對巡守員開槍,導致兩名巡守員受傷,其中一名重傷,幸好被受過急救訓練的同僚救回。

蓋瓦尼奧這次又逃走了,但似乎向人吹噓事發經過而走漏了風聲,當局因此再次掌握他新的藏身之處。透過監視行動,蓋瓦尼奧終於在2019年7月20日落網。

蓋瓦尼奧被送回歐耶索省服刑,並再次嘗試越獄,這次沒有成功。很顯然,蓋瓦尼奧在歐耶索省有強大的後援,極有可能再次越獄。國家公園管理部門於2019年8月成功獲得批准,得以將蓋瓦尼奧和三名同夥轉移到布拉柴維爾監獄。

學者:此次判決是剛果在野生動植物保護上的重要里程碑

諾娃貝爾多基國家公園由總部位於紐約的野生動物保護協會(Wildlife Conservation Society, WCS)和剛果共和國政府透過諾娃貝爾多基基金會合作管理,已經長達25年。

WCS中非地區主任斯托克斯(Emma Stokes)博士說,這名盜獵犯能被繩之以法,靠的是諾娃貝爾多基國家公園野生動物犯罪部門和反盜獵部門三年來的努力,以及和森林經濟部、警方和地方檢察官等的多個有關當局合作的成果。

「此次判決是剛果共和國刑事法庭在野生動植物保護上一個重要的里程碑。以前所有環境犯罪都是在民事法庭審理的,最高刑期僅五年。今日的判決顯示,野生動植物犯罪不會再被容忍,將從重量刑。」斯托克斯說。

Congo Imprisons Elephant Poacher for 30 Years BRAZZAVILLE, Republic of Congo, August 22, 2020 (ENS)

 A criminal court in the Republic of Congo has sentenced a notorious poacher and ivory trafficker, Mobanza Mobembo Gérard, alias Guyvanho, to 30 years in prison for the attempted murder of park rangers, trafficking of ivory from poached elephants, possession of military weapons, and other charges. He is also required to pay damages of 38 million Central African Francs (US$68,000) to the injured rangers.

The 30-year sentence marks the first-ever conviction in the criminal courts of a wildlife trafficker in the Republic of Congo.

Investigations revealed that Guyvanho led a group of approximately 25 poachers who, based on the number of hunts reported, could have killed upwards of 500 elephants in the area of Nouabalé-Ndoki National Park since 2008.

Established in 1993, in the northern provinces of Congo, the park is inhabited by forest elephants and rare great apes, including western lowland gorillas and the eastern subspecies of chimpanzees.

In early 2018, Guyvanho – a citizen of the Democratic Republic of Congo who had arrived in the northern Republic of Congo around 2008 – and several other members of his team were caught in an operation led by Nouabalé-Ndoki National Park rangers, after they allegedly killed 11 elephants. A firefight ensued and Guyvanho was initially able to escape, but three members of his team were arrested. Their statements provided sufficient grounds for an arrest warrant to be issued against him.

In addition to the number of elephants killed, this incident demonstrated the willingness of this group to respond with violence when challenged. This was indicative of a trend of increasing violence of elephant poaching gangs in and around the park.

In May 2018, Guyvanho was arrested and remanded in prison in the provincial town of Ouesso to await trial. However, on June 2, 2018, 12 days before his trial was to take place, Guyvanho escaped from the Ouesso prison. Still, his trial went ahead, and he was sentenced in absentia to five years in prison with a five million Central African Franc (US$9,000) fine.

A further arrest warrant was issued. He remained a priority target of the park’s Wildlife Crime Unit – and locations known to be used by Guyvanho were monitored, but no arrest was made.

During this time, he was cited as a participant in a number of subsequent hunts, each of which featured exchanges of gunfire with park rangers.

On May 31, 2019, a ranger patrol returning to Nouabalé-Ndoki National Park HQ happened across a group of poachers – including Guyvanho – returning from a hunt. The patrol was fired upon by the poachers, and two patrol members were wounded, one of them seriously. His life was saved by fellow rangers with medical training.

Guyvanho was again able to escape but was reported to have bragged about the incident. This information was passed to the authorities along with a new location for Guyvanho’s home. A surveillance operation was launched to confirm the information from the Wildlife Crime Unit, and, based on this information, Guyvanho was arrested by the Ouesso Police on July 20, 2019.

Guyvanho was returned to prison in Ouesso to serve his sentence but following a further escape attempt, this time unsuccessful, it became clear that Guyvanho had a sufficiently strong support network in Ouesso that another escape attempt was highly likely. A transfer to Brazzaville prison was requested by the park authorities and approved, and in August 2019 Guyvanho and three associates were successfully moved.

All the convicts will be transferred back to Brazzaville this week to serve their sentences.

The Nouabalé-Ndoki National Park is governed by a 25-year public-private partnership between the New York City-based Wildlife Conservation Society, WCS, and the Government of the Republic of Congo through the Nouabalé-Ndoki Foundation.

Dr. Emma Stokes, WCS regional director for Central Africa, says many people cooperated to bring this poacher to justice. “The sentencing is the culmination of more than three years of work by the Nouabalé-Ndoki National Park’s Wildlife Crime Unit and Anti-Poaching department. It is also the result of fruitful cooperation with multiple Congolese authorities, including the Ministry of Forest Economy, the Police, and District Prosecutors.

Dr. Stokes listed some of those supporting WCS involvement in this case. “WCS commends our government partners in the Republic of Congo and thanks our donors for their ongoing support in this case, including The Wildcat Foundation, Save the Elephants’ and Wildlife Conservation Network’s Elephant Crisis Fund, the Sangha Trinational Trust Fund, U.S. State Department’s Bureau for International Narcotics and Law Enforcement Affairs, the European Union, and the United States Agency for International Development’s Central Africa Regional Program for the Environment (USAID-CARPE).”

“This unprecedented conviction in the criminal court is a major milestone in the protection of wildlife in the Republic of Congo. Previously, all environmental crimes were tried in the civil courts where the maximum penalty under the wildlife law was five years. Today’s sentencing sends an extremely strong message that wildlife crime will not be tolerated and will be prosecuted at the highest levels,” Stokes said.

“We are confident that today’s sentence will serve as a deterrent to would-be criminals that you will serve hard time if you break our wildlife laws and put park rangers and Congo’s national security in danger,” she said.

After the sentencing, an official from the Sangha District Court declared, “This verdict confirms the fact that under the pretext of being poaching gangs, it is actually well-organized criminal gangs operating in our forests.”

※ 全文及圖片詳見:ENS

盜獵
象牙
大象盜獵
國際新聞
剛果
生物多樣性

作者

姜唯

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

林大利

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

延伸閱讀

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

分類
發燒車訊

希臘野火竄燒 波及著名邁錫尼古城遺址

摘錄自2020年8月31日中央社報導

希臘青銅時代的著名遺址邁錫尼古城附近野火延燒,當局緊急疏散遊客,消防官員表示,火勢已獲得控制。

希臘消防部門官員表示,野火下午從阿卡曼儂(Agamemnon)古墓附近竄起,「部分已獲得控制」。

伯羅奔尼梭(Peloponnese)南部的消防局局長科利維拉斯(Thanassis Koliviras)告訴「雅典通訊社」(Athens News Agency),大火波及「考古遺址的一個區塊,並燒毀些許乾草,但沒有損及博物館」。

希臘文化部發表聲明說,根據初步調查,「大火沒有破壞古蹟」,並說之後「一組專家將評估受損情況」。

乾燥的夏季氣候期間,希臘每年都得應付燒不盡的野火,並且高溫時常超過攝氏30度。

氣候變遷
國際新聞
希臘
野火

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

分類
發燒車訊

南非克魯格公園防疫封鎖 動物佔領度假屋

摘錄自2020年8月31日中央社報導

南非為防止武漢肺炎(COVID-19)擴大進行各階段封鎖,知名的克魯格國家公園住宿小屋因長時間無人入住,部分屋舍遭動物佔領與破壞,園方已展開維修,準備重新逐步開放。

武漢肺炎爆發後,南非自3月26日進入最嚴格的第5級全國封鎖,幾個月來因疫情變化逐漸開放,8月18日起改善第2級,國家公園開放旅遊觀光。

新聞網站「時報即時消息」(TimesLIVE)今(31日)引述南非國家公園管理處執行長姆克特尼(Fundisile Mketeni)表示,克魯格國家公園(Kruger National Park)準備重新開放面臨許多挑戰,特別是清潔與維修工作。疫情封鎖期間,部分住宿小屋被靈長類動物、松鼠與蝙蝠佔領和破壞。

姆克特尼指出,已迅速維修,預計9月份會有旅遊高峰。

國際新聞
南非
防疫
國家公園

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

分類
發燒車訊

國際礦業鉅子力拓集團 誓言保留澳洲古老岩棚

摘錄自2020年8月31日中央社報導

國際礦業鉅子力拓集團(Rio Tinto)保證,將保護位於西澳州(Western Australia)銀草山(Silvergrass)鐵礦場邊緣具有4萬3000年歷史的岩棚。

路透社報導,力拓集團獲得西澳州政府批准,可以摧毀這處遺址,但於今年5月在同一地區炸毀古代原住民洞穴而引起眾怒後,力拓集團開始對遺址進行評估。

澳洲最大鐵礦公司力拓集團、必和必拓(BHP)及FMG集團(Fortescue Metals Group)持續評估可能受到礦場擴張影響的遺址。

力拓集團以電子郵件回應路透社對於岩棚遺址的提問,力拓集團指出:「我們將保護這個遺址,並將設立適當的採礦緩衝區,進一步確保遺址不受威脅。」

國際新聞
澳洲
礦業公司

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

分類
發燒車訊

全球最大濕地「內外燃燒」中 潘塔納爾火勢15年來最嚴重

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

分類
發燒車訊

印尼醫療廢棄物流入河中 恐成病毒溫床

摘錄自2020年9月1日自由時報報導

綜合外媒報導,印尼大量的醫療廢棄物被堆積在坦格朗(Tangerang),當地的垃圾掩埋場5月時崩塌,大量的醫療垃圾流入西薩達河(Cisadane River)中。總長138公里的西薩達河是當地居民重要的水資源,許多民眾會在此處洗澡和洗衣服,河流恐成病毒溫床。

印尼衛生部指出,3月到6月期間國內共產生1480噸醫療廢棄物。衛生部官員努拉里(Imran Agus Nurali)表示,已通過新的法規,其中包括醫療機構處理相關廢棄物的準則。

印尼法律健康協會的流行病專家邁爾克(Mahesa Paranadipa Maikel)指出,如果這些醫療廢棄物散佈在河流附近的社區,則會污染當地水源且有傳播武漢肺炎的可能。

污染治理
國際新聞
印尼
醫療廢棄物
水污染
垃圾掩埋場
動物與大環境變遷

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

分類
發燒車訊

未上市先來征服冰雪,也就只有這款插電式混動SUV敢玩!

而從廣告圖上大大的100符號、以及“唐100”的官方命名來看,傳言的“純電續航里程100公里”也是沒跑了——比亞迪又刷新了國內混動新能源車的純電續航里程紀錄。當然,像4。9秒的百公里加速、全時電四驅等核心技術配置在唐100這款比亞迪旗艦級SUV上預計會保留。

看看這張比亞迪的官方宣傳海報。

如果你第一眼看到的是帥氣的小李子,那麼你一定是他的影迷;

如果你第一眼看到的是“冰雪”,那麼你一定很嚮往一次說走就走的冰雪之旅;

如果你的目光已經被小李子身後那輛SUV捕捉,並牢牢盯着畫面上“唐100”的小字不放,那你一定和小編一樣,是一個看到新車就興奮的愛車之人。

這值得興奮。2月下旬,以“馭見冰雪 歷史由你創造”為主題,比亞迪將在海拉爾舉辦一款未上市全新車型的冰雪試駕活動,並向全社會招募該新車的第一批體驗者。

而迎戰冰雪的,則是在新能源SUV領域一直呼聲很高、讓眾多粉絲守候已久的比亞迪新車唐100,這也是唐100首度在比亞迪的官方平台亮相登場。小李子背後的SUV,是唐100產品形象的第一次亮相,而“唐100”的產品命名也隨着這張海報的披露塵埃落定。

無論你是期待唐100已久的粉絲,還是想在新年開上新車的持幣待購人士,或是希望在這兩款車上市前搶先感受一把的愛車之人,都可以關注比亞迪本次活動的官網http://wechat.xudankeji.com/he/biyadi

反正有比亞迪包機票食宿,有專業老司機貼身護駕,現場還有現金大獎可以贏取,何樂不為?

重磅新車搶先看:唐100值得現場一試

唐100自被曝光之日起,就飽受關注,其上市日期也因新能源車補貼目錄的原因一再推遲。這次高調亮相,即意味着它的上市時間已經進入倒計時——小編押今年的春節紅包打賭絕不晚於第一季度。

唐100的現款在售車型——比亞迪唐,是國內首個正式銷售的插電式混動SUV,上市近兩年來始終佔據細分市場銷量冠軍的地位,而車迷和消費者們對它的後續改款車型也一直保持密切關注。儘管早有偷拍黨們樂此不疲地泄密出唐100的信息,但官方始終三緘其口,吊足了消費者的胃口。這次正式亮相海拉爾,並邀請社會公眾搶先體驗,也算是回應了市場對唐100沉甸甸的期待。

(此前曝光的唐100諜照)

依據此前曝光的諜照,和小李子身後的唐100造型上來看。新車在輪眉、發動機艙蓋、車頂線條上都有所變化。最顯眼的車前LOGO採用了傳聞已久的“唐”小篆體字,瞬間帶感了起來。

而從廣告圖上大大的100符號、以及“唐100”的官方命名來看,傳言的“純電續航里程100公里”也是沒跑了——比亞迪又刷新了國內混動新能源車的純電續航里程紀錄。當然,像4.9秒的百公里加速、全時電四驅等核心技術配置在唐100這款比亞迪旗艦級SUV上預計會保留。

至於更多細節和駕駛體驗,也許在這次冰雪試駕后“體驗官”們會給我們一個真實的答覆。

未上市先搞冰雪試駕?也就比亞迪敢玩!

值得一提的是,比亞迪這次為唐100上市預熱貼身打造的冰雪試駕,放在業內可謂前無古人。正如其試駕主題 “歷史由你創造”,比亞迪和參加活動的體驗者們,即將創造一個“國內首次未上市新能源車舉辦公眾冰雪試駕”的歷史。

當然,比亞迪如此“敢玩”的底氣來自於他們一以貫之的技術實力,其2014年就發布的“542”新能源車技術標準放在今天依然沒有被超越:“5”代表0-100km/h加速在5秒內,“4”代表全時電四驅,“2”則是百公里油耗兩升。

(比亞迪展示的542技術)

其中,全時電四驅將是唐100駕馭冰雪的核心法寶。與通過傳動軸連接前後驅動的傳統机械四驅不同,全時電四驅可以將動力直接傳遞到前後軸,不需要分動箱、傳動軸等複雜結構,在冰雪路況下可靠性和作用效率更高。

資料显示,比亞迪全時電四驅控制響應時間僅為20毫秒,是机械四驅響應速度的10倍(傳統机械四驅需200毫秒),能夠非常短促、高頻地分配四輪動力,確保車輪在冰面上的抓地力並及時調整車身平衡,讓駕駛者在冰面暢快漂移的同時也能感到穩如泰山的安全感。

(現款唐在冰雪路面上駕駛毫無壓力)

事實上,在現款唐銷售期間,比亞迪也開展過諸如“冰上拔河”、“雪地越野”等活動,唐的表現非常出色,展示出了電四驅在安全性和操控性上的與傳統四驅完全不同的另類體驗。因此,如果有網友能親臨海拉爾冰雪試駕活動現場,不妨重點感受一下比亞迪的電四驅黑科技魅力。

最後,小編也想請內幕八卦人士私信報料:比亞迪放在活動圖片上的小李子,也是現場的“標配”嗎?圖片上的“100”符號,為什麼看上去像是“LEO”啊?活動現場會原地繪製“LEO”魔法陣召喚比亞迪新能源車的代言人小李子嗎?

(比亞迪和小李子喊你來冰雪試駕啦!)

在線等,挺急的。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

分類
發燒車訊

阿根廷環團拒建中資養豬場 合作協議延期簽署

摘錄自2020年09月05日中央社報導

中國計劃投資逾37億美元在阿根廷蓋養豬場供應中國,以解決非洲豬瘟造成的豬肉短缺,但遭阿國環團反對。阿國政府表示將納入環保條款,兩國合作協議延至11月簽署。

阿根廷網路媒體iProfesional報導,據阿根廷外交部消息來源指出,艾柏托政府將利用11月參加中國國際進口博覽會(中國進博會)的機會,簽下這項養豬產業協議。

iProfessional報導,根據取得的文件,這項合作案預計建造25座養豬場,每座養豬場飼養約1.2萬頭豬。每座養豬場還需配合建造壓榨基因改造大豆和玉米的工廠,以提供牲畜飼料。此外,建造的地點除是過去50年從未淹水的農地,每天也須供應多達150萬公升的水流量。

此項協議簽署後,預計每年可供應中國近90萬噸的豬肉。中國因爆發非洲豬瘟,撲殺國內40%的豬隻,造成豬肉短缺,因此開始向其他國家尋求養豬場。

但養豬場投資案曝光後,遭阿根廷環保團體、動物權益者和許多民眾強力反對,擔憂將使阿根廷的環境、水質和土壤遭受前所未有污染,迫使政府暫時延後簽署備忘錄。

根據綠色和平組織的報告,在墨西哥等養豬產業密集國家,或阿根廷政府打算建造的養豬場,每天排放二氧化碳和甲烷等致命氣體,相當於數百萬輛汽車排放的廢氣。

污染治理
國際新聞
阿根廷
養豬場

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

分類
發燒車訊

海神挾風雨今晨登陸 南韓一核電廠2機組突停止運轉

摘錄自2020年9月7日自由時報報導

中度颱風「海神」已於台灣時間今(7日)上午8點登陸南韓蔚山沿海,海神颱風威力強大,傳出位於慶尚北道慶州市的月城核電廠有兩個核電機組暫停運轉。

據《韓聯社》報導,韓國水電與核電公司總部宣布,擁有四個核子反應爐發電的月城核電廠的2號機組在當地時間8點38分停止運作,而3號機組則在上午9點18分停止運轉,這兩機組設備容量都達70萬千瓦(kW),另外兩機組則正常運作,維持60%發電量,總部強調,沒有輻射外洩問題。

韓國水電與核電公司總部一名官員表示,目前正在檢查停機原因,研判可能是由於颱風造成電線短路問題;月城核電廠供應約5%的南韓用電量。

能源轉型
國際新聞
南韓
核電廠

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心