Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Web uygulaması

Açıklama

Modül uygulamaları ve uygulama kapsamı

module-app.js bir modülü sekmeli bir uygulamaya nasıl çevirir, uygulamalar nasıl canlı kalır ve app-scope.js modülleri nasıl yayımlar.

Web uygulamasında bir arka uç modülü bir uygulama olarak kullanılır: ana ekrandan açılır, bölümlerini sekmeler olarak gösterir ve kullanıcı ondan ayrıldığında arka planda çalışmaya devam eder. Bu sayfa istemcinin okuduğu uygulama kataloğu girdilerini, webapp/js/module-app.js dosyasının bir modül uygulamasını nasıl kurduğunu, çalışan uygulamaların ekranlarını nasıl koruduğunu ve webapp/js/app-scope.js dosyasının hangi modüllerin kurulu olduğunu nasıl yayımladığını açıklar. Ana ekranın kendisi ana ekran, dock ve başlatıcı sayfasındadır.

Kısaca

  • İstemci uygulamalarını yalnız GET /app_store/registry ucundan bilir; bu uç oturum açmış kullanıcı için her uygulamanın manifestosunu ve hak durumunu döndürür (webapp/js/home.js:409-419, src/cluster_erp/modules/app_store/routes.py:18-40).
  • Katalog dosyası 28 uygulama manifestosu içerir; screen değerleri module (20), list (2) ve birer adet settings, library, store, assistant, mail ve appmgr olur (src/cluster_erp/modules/app_store/catalog.json ayrıştırılarak sayıldı).
  • screenRenderer(a) screen değerini bir çizim işlevine eşler; module değeri makeModuleScreen olur (webapp/js/home.js:2415-2441).
  • makeModuleScreen her kenar çubuğu bölümünü alttaki sekme çubuğunun bir sekmesine çevirir (webapp/js/module-app.js:69-235).
  • Bir uygulamadan ayrılmak canlı ekranını bellekte tutar; onu yalnız açık uygulamalar ekranındaki kapatma sıfırlar (webapp/js/home.js:2252-2326, webapp/js/home.js:2535-2557).

Nasıl çalışır

Uygulama manifestoları

Her kayıt girdisi katalogdan bir manifesto taşır. İstemci şu manifesto alanlarını okur:

Alan İstemcideki kullanım Kaynak
id, label, glyph, color, bg Kutucuk, dock simgesi ve başlık webapp/js/home.js:520, webapp/js/home.js:1063-1070
screen Uygulamayı hangi çizicinin açacağı webapp/js/home.js:2415-2441
module, modules Uygulamanın gösterdiği arka uç modülü ve kapsadığı her modül webapp/js/home.js:794-800, webapp/js/home.js:2429
entity, endpoint Bir list uygulamasının varlığı webapp/js/home.js:2431-2437
tableList Uygulamanın listelerinde tam sütunlu tablolar webapp/js/home.js:2429-2437
menu Uygulama çalışan bir uygulama değil, geçici bir menü olarak açılır webapp/js/home.js:2452-2465, webapp/js/home.js:2469-2473
permanent Kutucuk ana ekrandan kaldırılamaz webapp/js/home.js:742-744
dock_fixed Uygulama dock'un başına sabitlenir ve sabitlemesi kaldırılamaz webapp/js/home.js:990-997
folder Uygulama ana ekrana eklendiğinde bir sistem klasörüne katılır webapp/js/home.js:762-780
gated_entry Uygulamanın özel kodu kapılı bir paket olarak gelir webapp/js/home.js:452-457

Kayıttan gelen durum haritası, kurulu, lisanslı ve kullanıcının rollerinden birine koltuk atanmış olmadıkça bir uygulamayı her yüzeyde gizler (webapp/js/home.js:425-430). Bu bayrakların arkasındaki katmanlar uygulama mağazası, lisans ve haklar sayfasında anlatılır.

Bir modül uygulamasını kurma

makeModuleScreen(moduleName, {table, accent}), metadata'yı ve modülün kapılı paketini bekleyen, sonra modülün kenar çubuğunu okuyan bir çizim işlevi döndürür (webapp/js/module-app.js:69-101):

  1. hidden_from_bar taşıyan bölümler atlanır. Aramadan ulaşılabilir kalırlar (webapp/js/module-app.js:103-105).
  2. required_permission taşıyan bölümler o koda sahip olmayan kullanıcı için atlanır (webapp/js/module-app.js:106-108).
  3. Kalan her bölüm bir sekme, tabbed_list için varlık başına bir sekme olur (webapp/js/module-app.js:109-137). view_type başına motor için bkz. metadata çizimi.
  4. Tek sekmeli bir modül içeriğini sekme çubuğu olmadan gösterir (webapp/js/module-app.js:148-154).
  5. Sekme çubuğu gezen odaklı bir tablist öğesidir; sol ve sağ ok tuşları sekmeler arasında gezer (webapp/js/module-app.js:156-212).
  6. Her sekme yeni bir bölmeye boyar; böylece önceki bir sekmeden gelen geç yanıt geçerli sekmenin üzerine yazamaz (webapp/js/module-app.js:183-192).
  7. Bir modül ve bölüm anahtarı taşıyan cluster:module-tab olayı sekme değiştirir; parametreler hedef sekme zaten etkinken bile onu yeniden çizer (webapp/js/module-app.js:213-231).

Sekme simgeleri bölümün icon adına göre TAB_ICONS içinde aranır; geri dönüş bir karedir (webapp/js/module-app.js:21-66).

Çalışan uygulamalar ve arka planda canlı tutma

Ana ekran, her birinin kendi görünüm yığını olan çalışan uygulamaların bir listesini tutar (webapp/js/home.js:2223-2234):

  • openApp(a) geçerli uygulamanın ekranını kenara alır ve ya hedef uygulamanın ekranını geri getirir ya da kökünü çizer (webapp/js/home.js:2469-2500).
  • stashActive() canlı DOM düğümlerini, kaydırma konumlarını, başlığı ve geri etiketini bir belge parçasına taşır ve görülen veri sürümünü kaydeder (webapp/js/home.js:2252-2291).
  • unstashInto(entry) düğümleri geri koyar. Arada veri değiştiyse veya ekran uzaktayken bir boyama düştüyse ekran yeniden çizilir; açık bir form varsa çizilmez (webapp/js/home.js:2293-2326). Bkz. veri tazeleme ve değişiklik sinyalleri.
  • Bir dil değişiminden sonra saklanan ekranlar bayat işaretlenir ve dönüşte yeniden çizilir (webapp/js/home.js:2334-2342, webapp/js/home.js:2501-2511).
  • closeRunningApp(id) saklanan ekranı ve modülün form taslaklarını atar (webapp/js/home.js:2533-2557).
  • Çıkışta closeAllApps() uygulama içerik alanını boşaltır; böylece eski oturumun hiçbir ekranı kalmaz (webapp/js/home.js:2559-2578).

pushView(title, render) etkin yığına bir alt ekran ekler ve popView() onu kaldırır; kökü kapatmak uygulama çalışmaya devam ederken ana ekrana döner (webapp/js/home.js:2400-2413). Özellik kodu bunları home.js'nin yüklemede doldurduğu nav.js üzerinden çağırır; böylece motorlar kabuğu hiç içe aktarmaz (webapp/js/nav.js:5-30, webapp/js/home.js:2848-2849).

Bir bölümü başka bir yerden açma

Bir bileşen dokunuşu, bir kayıt bağlantısı ve bir arama sonucu bir uygulama bölümünü aynı yoldan açar. openModuleSection(module, section, params) modülü kapsayan uygulamayı açar, kök ekranına döner ve sekme çubuğu oluştuktan sonra cluster:module-tab yayar (webapp/js/home.js:221-240). Kabuğu içe aktaramayan genel kod bunun yerine cluster:open-section yayar (webapp/js/home.js:512-519, webapp/js/gen-form.js:2371-2385).

Uygulama kapsamı

syncAppScope() kurulu her uygulamanın modules değerini toplar ve setInstalledModules işlevine verir (webapp/js/home.js:792-800). app-scope.js sıralı listeyi saklar ve değiştiğinde cluster:apps-changed yayar (webapp/js/app-scope.js:7-18). Asistan bu listeyi her iletiyle gönderir ve modülü kaldırılan açık bir görev kartını iptal eder (webapp/js/assistant.js:201-230). Bkz. asistan ve sohbet ekranları.

Neden böyle kurulu

  • Projenin yazılı mühendislik kuralları bir modülün bir uygulama olduğunu ve sayfalarının o uygulamanın sekmeleri olduğunu, CRM klasörünün ise onaylı bir istisna olduğunu belirtir.
  • webapp/js/home.js:2252-2258 içindeki yorum, arka planda canlı tutmanın yazılan girdiyi, alt sayfaları ve kaydırma konumlarını hiçbir şeyi serileştirmeden koruduğunu, bu yüzden durumun oturumla birlikte öldüğünü belirtir.
  • webapp/js/module-app.js:183-187 içindeki yorum, sekme başına bölmelerin önceki bir sekmeden gecikmiş bir yanıtın yeni sekmenin üzerine yazmasını engellediğini belirtir.

Kurallar ve sınırlar

  • crm modülünün bir modül uygulaması yoktur. Varlıkları iki list uygulamasında (customer-parts, rfqs) ve parties uygulamasının modules değerinde görünür (src/cluster_erp/modules/app_store/catalog.json:1002-1150).
  • Bir menü uygulaması (menu: true, Uygulamalar kitaplığı) çalışan uygulamalara hiç eklenmez ve açık uygulamalar ekranında hiç görünmez (webapp/js/home.js:2448-2465).
  • Tarayıcı testleri: web-client/_e2e_switcher.mjs, web-client/_e2e_keepalive_paint.mjs, web-client/_e2e_lang_background.mjs, web-client/_e2e_mobile_app.mjs.

Diğer parçalarla etkileşim

  • Özel bölümler kapılı paketlerdeki bileşenlerle çizilir; bkz. kapılı uygulama paketleri.
  • Mağaza, uygulama yöneticisi ve lisans ekranları webapp/js/home.js:3588-4319 içindeki renderStore, renderAppManager ve renderLicense ile kurulur. Sunucu tarafları uygulama mağazası modülü sayfasındadır.

Sınırlar ve açık noktalar

  • view_type: "detail" değeri SidebarSectionMeta tarafından kabul edilir ama makeModuleScreen içinde onun için bir dal yoktur (webapp/js/module-app.js:109-137). Hiçbir modül onu bildirmez.
  • Bir yenileme çalışan uygulamaları yalnız kök ekranlarında geri getirir (webapp/js/home.js:2579-2598).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
module app makeModuleScreen Kenar çubuğu bölümleri sekme olan bir uygulama olarak sunulan arka uç modülü. modül uygulaması webapp/js/module-app.js:69
app manifest registry.apps[].manifest İstemciye bir uygulamayı nasıl göstereceğini ve açacağını söyleyen katalog girdisi. uygulama manifestosu webapp/js/home.js:447
keep-alive stashActive Ayrılınan bir uygulamanın canlı ekranını kapatılana kadar bellekte tutmak. arka planda canlı tutma webapp/js/home.js:2259
app scope setInstalledModules Kurulu uygulamaların kapsadığı modüllerin listesi. uygulama kapsamı webapp/js/app-scope.js:9

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13