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

Açıklama

Web uygulamasına genel bakış

webapp klasörünün yapısı, sunucunun onu /app altında içerik damgasıyla nasıl sunduğu ve her ekranı biçimlendiren metadata güdümlü kural.

Web uygulaması, depo kökündeki webapp/ klasöründe tutulan tek sayfalık bir tarayıcı istemcisidir. API sunucusu onu aynı kökenden /app altında sunar; bu yüzden tarayıcı /api/v1 uçlarını kökenler arası istek olmadan çağırır. Bu sayfa klasör yapısını, dosyaların nasıl sunulup önbelleğe alındığını ve ekranların sunucu metadata'sından geldiği kuralını anlatır. Açılış ve API katmanı açılış, oturum ve API çağrıları sayfasındadır.

Kısaca

  • Web uygulaması derleme adımı olmayan düz ES modülleridir: index.html tek bir modül betiği yükler, js/main.js (webapp/index.html:406).
  • webapp/js/ 51 JavaScript dosyası ve vendor/ klasörünü içerir (ls webapp/js ile sayıldı: 52 girdi).
  • Sunucu klasörü iki kez bağlar: her yüklemede yeniden doğrulanan /app ve değişmez dosyalar olarak /app/v/<stamp>/ (92f8051 commit'inde src/cluster_erp/server/app.py:1633-1644).
  • Her liste, form, kart, aksiyon ve modül sekmesi GET /api/v1/_meta yanıtından kurulur (webapp/js/meta.js:16-47). Projenin yazılı mühendislik kuralları web uygulamasını tamamen metadata güdümlü yapar.

Nasıl çalışır

Klasör yapısı

Yol İçerik Sayı Nasıl sayıldı
webapp/index.html Kabuk: giriş ekranı, ana ekran, uygulama görünümü, katmanlar ve modül betiği 1 dosya, 408 satır wc -l
webapp/operator.html Operatör konsolu sayfası 1 dosya ls webapp
webapp/js/ Motor ve ekran modülleri 51 .js dosyası ve vendor/ ls webapp/js
webapp/js/vendor/pdfjs/ Depoya alınmış PDF çizici (pdfjs-dist 6.2.108, Apache-2.0) 4 dosya webapp/js/vendor/pdfjs/README.txt
webapp/css/ tokens.css, app.css, gen.css, tiles.css, mail.css 5 dosya ls webapp/css
webapp/i18n/ en.json, tr.json ve languages.json manifestosu 3 dosya ls webapp/i18n
webapp/fonts/ Düğümden sunulan Manrope yazı tipi dosyaları, manrope.css ve OFL.txt 8 dosya ls webapp/fonts
webapp/assets/ Asistan ekranı için sohbet duvar kâğıdı görselleri 2 dosya ls webapp/assets
webapp/store/ Uygulama mağazası girdileri için ekran görüntüsü galerileri, uygulama başına bir klasör 26 klasör ls webapp/store

Operatör konsolu operatör konsolu sayfasında belgelenir. webapp/index.html:8-12 içindeki yorum, yazı tipinin düğümden sunulduğunu ve hiçbir ziyaretçi isteğinin yazı tipi için kurulumun dışına çıkmadığını belirtir.

js klasöründeki modül grupları

Grup Dosyalar
Açılış ve taşıma main.js, api.js, app-session.js, gen-api.js, meta.js, data-bus.js, ui-state.js
Genel motorlar gen-list.js, gen-form.js, gen-detail.js, gen-tree.js, gen-settings.js, entity.js, action-sheet.js, customselect.js, form-drafts.js, table-align.js, avatar.js
Kabuk home.js, module-app.js, app-scope.js, nav.js, app-wheel.js, tiles.js, touch-gate.js, device-class.js, search-index.js, custom-widgets.js
Bileşenler widget-ai.js, widget-approvals.js, widget-scope.js
Dil ve görünüm i18n.js, prefs.js, a11y.js, a11y-ui.js, icons.js, ui.js
Ekranlar general.js, retention.js, changed.js, logs.js, profile.js, mail.js, mail-settings.js, signup.js, record-docs.js, viewer.js, share.js, assistant.js, chat-task.js
Operatör sayfası operator.js

Gruplama her dosyanın başlık yorumunu izler. Bu bir okuma kolaylığıdır, koddaki bir yapı değildir.

Sunum ve varlık damgası

webapp/index.html her stil sayfasını, modülü ve yazı tipini ./v/__ASSET_STAMP__/ altında bağlar (webapp/index.html:13-74). Sunucu index.html döndürürken yer tutucuyu klasördeki her dosya üzerinden hesaplanan bir özet olan asset_stamp(webapp_dir) ile değiştirir ve Cache-Control: no-cache ile bir ETag gönderir (92f8051 commit'inde src/cluster_erp/server/app.py:1616-1625). Geçerli damga altında istenen bir dosya public, max-age=31536000, immutable ile gönderilir. Eski bir damga altındaki dosya no-cache ile gönderilir (src/cluster_erp/server/app.py:1599-1614). Bu yüzden her dağıtım yeni bir URL kümesi üretir. Damga işlevi önbellek ve varlık damgası sayfasında belgelenir.

index.html içindeki modulepreload listesi web-client/_gen_modulepreload.mjs tarafından üretilir ve elle düzenlenmemesi işaretlenmiştir (webapp/index.html:24).

İstemciyi biçimlendiren güvenlik başlıkları

Sunucu her yanıtla bir içerik güvenlik ilkesi gönderir. Betikler yalnız aynı kökenden ve blob: URL'lerinden yüklenebilir. Yorum, blob: izninin kapılı uygulama modülü içe aktarımı ve nesne URL'li önizlemeler için gerektiğini belirtir (92f8051 commit'inde src/cluster_erp/server/app.py:1325-1352). Çerçeveleme aynı kökenle sınırlıdır; çoğaltılmış ana ekran kutuları buna ihtiyaç duyar (src/cluster_erp/server/app.py:1348-1351). Bkz. kapılı uygulama paketleri ve ana ekran, dock ve başlatıcı.

Neden böyle kurulu

  • Aynı kökenden sunum: 92f8051 commit'inde src/cluster_erp/server/app.py:1574-1576 içindeki yorum, ön yüzün API sunucusundan sunulmasının tarayıcının API'ye CORS olmadan ulaşmasını sağladığını belirtir.
  • İki bağlama: src/cluster_erp/server/app.py:1578-1588 içindeki yorum, bir yenilemenin önceden 62 yeniden doğrulama gidiş dönüşüne mal olduğunu ve sürümlü URL'lerin bunu kaldırırken index.html dosyasının bir dağıtımı hemen almaya devam ettiğini belirtir.
  • Metadata güdümlü ekranlar: projenin yazılı mühendislik kuralları ekran, form, liste ve aksiyon davranışının metadata'dan gelmesini ister ve arayüze özgü gömülü kuralları yasaklar. Bkz. metadata güdümlü arayüz.

Kurallar ve sınırlar

  • gen-list.js, gen-detail.js, gen-form.js, entity.js ve gen-settings.js genel motorları iş modülü adlarıyla karşılaştırma yapmamalıdır. tests/test_architecture_boundaries.py:75 (test_generic_web_engines_do_not_branch_on_business_module_names) bunu zorunlu kılar.
  • Genel web dosyaları modül yollarını, modül izinlerini veya dil başına sütunları adlandırmamalı ve bir dil koduna göre dallanmamalıdır. tests/test_metadata_driven_rules.py:85 bunu on bir dosya için zorunlu kılar.
  • Web uygulaması yalnız paketin yanında webapp klasörü varsa bağlanır (src/cluster_erp/server/app.py:1633-1634).

Diğer parçalarla etkileşim

Sınırlar ve açık noktalar

  • web-client/ klasörü tarayıcı test bataryasını ve ayrı bir Vite projesini içerir. Bu projenin kullanımda olup olmadığı koddan belirlenemedi; bkz. depo haritası.
  • index.html işaretlemede lang="tr" ve Türkçe bir giriş etiketi bildirir (webapp/index.html:2, webapp/index.html:161). İkisi de açılışta seçili dil ile değiştirilir (webapp/js/i18n.js:81, webapp/js/main.js:221).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
web app webapp/ Sunucunun /app yolunda sunduğu, webapp/ içindeki tarayıcı istemcisi. web uygulaması src/cluster_erp/server/app.py:1633
asset stamp placeholder __ASSET_STAMP__ Sunucunun index.html içinde geçerli varlık damgasıyla değiştirdiği belirteç. varlık damgası yer tutucusu webapp/index.html:18
versioned mount /app/v Bir damga altındaki dosyaları değişmez olarak sunan statik bağlama. sürümlü bağlama src/cluster_erp/server/app.py:1635-1639

İlgili sayfalar


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

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