Add live CEO briefing, Wereldexport CRM, halal engine, and realtime cockpit.
Ship export intel with contact filters and CRM push, Herman live digest with Telegram briefing, halal recommendation engine, revenue cockpit, and dashboard polling/WebSocket fixes.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css" />
|
||||
<link rel="stylesheet" href="/static/css/export-intel.css?v=11" />
|
||||
<link rel="stylesheet" href="/static/css/export-intel.css?v=12" />
|
||||
<link rel="stylesheet" href="/static/css/export-intel-tabs.css?v=10" />
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>
|
||||
@@ -31,10 +31,10 @@
|
||||
|
||||
<p class="ei-sync-msg" x-show="syncMsg" x-text="syncMsg"></p>
|
||||
|
||||
<div class="ei-selection-bar" x-show="tab === 'map'" x-cloak>
|
||||
<div class="ei-selection-bar" x-show="showSelectionBar()" x-cloak>
|
||||
<div class="ei-selection-left">
|
||||
<span class="ei-selection-count" x-show="selectedIds.length" x-text="selectedIds.length + ' geselecteerd'"></span>
|
||||
<span class="ei-selection-hint" x-show="!selectedIds.length">Selecteer rijen met ☑ voor bulk-acties</span>
|
||||
<span class="ei-selection-hint" x-show="!selectedIds.length" x-text="tab === 'contacts' ? 'Selecteer contacten met ☑ — organisatie gaat naar CRM' : 'Selecteer rijen met ☑ voor bulk-acties'"></span>
|
||||
</div>
|
||||
<div class="ei-selection-actions">
|
||||
<button type="button" class="btn btn-sm" @click="toggleSelectAllVisible()" title="Alles op lijst">☑ Alles</button>
|
||||
@@ -137,8 +137,8 @@
|
||||
<strong x-text="mapHalalMin"></strong>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ei-filter-group ei-filter-group-collection" x-show="tab === 'map'" x-cloak>
|
||||
<label class="ei-filter-check">
|
||||
<div class="ei-filter-group ei-filter-group-collection" x-show="showCrmFilter()" x-cloak>
|
||||
<label class="ei-filter-check" x-show="tab === 'map'">
|
||||
<input type="checkbox" x-model="filterFavoritesOnly" @change="onFilterCollectionChange()" />
|
||||
<span>★ Alleen favorieten</span>
|
||||
</label>
|
||||
@@ -478,31 +478,67 @@
|
||||
<section x-show="tab==='contacts'" x-cloak>
|
||||
<div class="ei-tab-panel">
|
||||
<div class="ei-tab-panel-head">
|
||||
<div><h2>Contactregistry</h2><p>E-mail · telefoon · outreach-ready</p></div>
|
||||
<a class="btn btn-sm" :href="contactsExportUrl()" target="_blank">CSV export</a>
|
||||
<div><h2>Contactregistry</h2><p>E-mail · telefoon · outreach-ready · direct naar CRM</p></div>
|
||||
<div class="ei-tab-panel-actions">
|
||||
<button type="button" class="btn btn-sm btn-pulse-green" :disabled="!selectedIds.length || crmPushBusy" @click="openCrmModal()">➕ Geselecteerde naar CRM</button>
|
||||
<a class="btn btn-sm" :href="contactsExportUrl()" target="_blank">CSV export</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ei-tab-panel-body">
|
||||
<div class="ei-panel" style="border:none;background:transparent;padding:0">
|
||||
<div class="ei-table-wrap">
|
||||
<table class="ei-table">
|
||||
<thead><tr><th>Organisatie</th><th>Type</th><th>Land</th><th>Rol</th><th>Naam</th><th>E-mail</th><th>Telefoon</th></tr></thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="ei-th-check"><input type="checkbox" @change="toggleSelectAllVisible()" title="Alles selecteren" /></th>
|
||||
<th>Organisatie</th>
|
||||
<th>Stad</th>
|
||||
<th>Type</th>
|
||||
<th>Land</th>
|
||||
<th>Rol</th>
|
||||
<th>Naam</th>
|
||||
<th>E-mail</th>
|
||||
<th>Telefoon</th>
|
||||
<th>CRM</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<template x-for="c in contacts" :key="c.id">
|
||||
<tr>
|
||||
<td x-text="c.entity_name"></td>
|
||||
<td x-text="typeLabel(c.entity_type)"></td>
|
||||
<tr :class="{ 'ei-row-selected': isSelected(c.entity_id), 'ei-row-crm': c.client_id }">
|
||||
<td class="ei-td-check" @click.stop>
|
||||
<input type="checkbox" :checked="isSelected(c.entity_id)" @change="toggleSelect(c.entity_id, $event)" />
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="ei-link-btn" @click="openEntity(c.entity_id)" x-text="c.entity_name"></button>
|
||||
</td>
|
||||
<td x-text="c.entity_city || '—'"></td>
|
||||
<td><span class="ei-type-pill ei-type-pill-sm" :class="'ei-type-'+c.entity_type" x-text="typeLabel(c.entity_type)"></span></td>
|
||||
<td x-text="c.country_iso2"></td>
|
||||
<td x-text="c.role"></td>
|
||||
<td x-text="c.role || '—'"></td>
|
||||
<td x-text="c.name||'—'"></td>
|
||||
<td x-text="c.email||'—'"></td>
|
||||
<td x-text="c.phone||c.mobile||'—'"></td>
|
||||
<td>
|
||||
<span class="ei-crm-badge" x-show="c.client_id" :title="c.crm_client_name || 'In CRM'">CRM</span>
|
||||
<span class="muted" x-show="!c.client_id">—</span>
|
||||
</td>
|
||||
<td class="ei-td-actions" @click.stop>
|
||||
<button type="button" class="btn btn-sm btn-pulse-green" x-show="!c.client_id" @click="pushEntityToCrm(c.entity_id)" :disabled="crmPushBusy">➕ CRM</button>
|
||||
<a class="btn btn-sm" x-show="c.client_id" :href="'/clients'" title="Bekijk in CRM">Open</a>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="ei-empty" x-show="!contacts.length">
|
||||
<p>Contacten worden aangevuld in fase B (Places, websites, tenders).</p>
|
||||
<div class="ei-load-more" x-show="contactsHasMore">
|
||||
<button type="button" class="btn btn-sm" @click="loadMoreContacts()" :disabled="contactsLoadingMore || busy">
|
||||
<span x-text="contactsLoadingMore ? 'Laden…' : ('Meer laden (' + contacts.length + ' / ' + resultCount + ')')"></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="ei-empty" x-show="!contacts.length && !busy">
|
||||
<p>Geen contacten voor deze filters — pas land, type of zoekterm aan.</p>
|
||||
<button class="btn btn-sm btn-pulse-green" @click="syncKind('contacts')">Sync contacten</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -760,5 +796,5 @@
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block scripts %}
|
||||
<script src="/static/js/export-intel.js?v=10"></script>
|
||||
<script src="/static/js/export-intel.js?v=11"></script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user