diff --git a/portal/templates/app/project.html b/portal/templates/app/project.html
index d96158f..dad1baf 100644
--- a/portal/templates/app/project.html
+++ b/portal/templates/app/project.html
@@ -1274,6 +1274,28 @@
let allGlobalOrgs = [];
let _dealOrgsMap = {};
+ function imgErr(img) {
+ const w = img.parentElement;
+ w.className = 'w-11 h-11 rounded-full shrink-0 overflow-hidden bg-[#c9a84c]/20 flex items-center justify-center';
+ w.innerHTML = '' + escHtml(img.dataset.initial || '?') + '';
+ }
+ function renderMemberCard(dealOrgId, m, mi) {
+ const initial = (m.name || m.email || '?')[0].toUpperCase();
+ let avatarHtml;
+ if (m.photo) {
+ avatarHtml = '
'
+ + '
 + ')
'
+ + '
';
+ } else {
+ avatarHtml = ''
+ + '' + escHtml(initial) + '
';
+ }
+ const nameHtml = '' + escHtml(m.name || m.email || '') + '
';
+ const titleHtml = m.title ? '' + escHtml(m.title) + '
' : '';
+ return ''
+ + avatarHtml + '
' + nameHtml + titleHtml + '
';
+ }
+
async function loadOrgs() {
try {
const res = await fetchAPI('/api/projects/' + projectID + '/orgs');
@@ -1349,15 +1371,7 @@
- ${members.map((m, mi) => `
-
- ${m.photo ? `
})
` : `
${(m.name||m.email||'?')[0].toUpperCase()}`}
-
-
-
${escHtml(m.name||m.email)}
- ${m.title ? `
${escHtml(m.title)}
` : ''}
-
-
`).join('')}
+ ${members.map((m, mi) => renderMemberCard(o.deal_org_id, m, mi)).join('')}