diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..296c8b3 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +NOCODB_TOKEN= +NOCODB_LIST_URL=https://nocodb.example.com/api/v2/tables/xxx/records \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2309cc8..d1a5195 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,7 @@ web_modules/ .env.test.local .env.production.local .env.local +env.js # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/content.js b/content.js index f414c96..91f6361 100644 --- a/content.js +++ b/content.js @@ -9,19 +9,6 @@ const PEOPLE_PICKER_SEL_PREFIX = "people-picker-selected-user-"; let debounceTimer = null; let isMutating = false; -async function saveAlias(id, alias) { - const key = id.replace(PERSON_ID_PREFIX, ""); - const result = await chrome.storage.local.get('aliases'); - const aliases = result.aliases || {}; - // 新的别名为空就删除 - if (alias) { - aliases[key] = alias; - } else { - delete aliases[key]; - } - await chrome.storage.local.set({ aliases }); -} - async function getAlias(id) { const key = id.replace(PERSON_ID_PREFIX, ""); const result = await chrome.storage.local.get('aliases'); @@ -34,44 +21,37 @@ function applyAliasAndButton(el) { const id = el.id; if (!id || !id.startsWith(PERSON_ID_PREFIX)) return; + const rawId = id.replace(PERSON_ID_PREFIX, ""); + const existingBtn = document.querySelector(`[data-floating-btn-for="${id}"]`); if (!existingBtn) { const rect = el.getBoundingClientRect(); const button = document.createElement('button'); - button.textContent = '设置别名'; + button.textContent = '显示ID'; // 改为显示ID button.style.position = 'fixed'; button.style.left = `${rect.left + window.scrollX}px`; button.style.top = `${rect.bottom + window.scrollY + 20}px`; button.style.zIndex = '99999'; button.style.padding = '4px 8px'; button.style.fontSize = '12px'; - button.style.backgroundColor = '#0078d4'; + button.style.backgroundColor = '#6c757d'; // 灰色,表示只是信息查看 button.style.color = '#fff'; button.style.border = 'none'; button.style.borderRadius = '4px'; button.style.cursor = 'pointer'; button.setAttribute('data-floating-btn-for', id); - button.addEventListener('click', async () => { - const current = (await getAlias(id.replace(PERSON_ID_PREFIX, ""))) || document.getElementById(id)?.textContent || ''; - const newAlias = prompt("请输入别名:", current); - // 如果是空字符串还是得进入 - if (newAlias !== null) { - const el = document.getElementById(id); // 🔥 重新获取最新的元素 - if (el && newAlias) el.textContent = newAlias.trim(); - await saveAlias(id.replace(PERSON_ID_PREFIX, ""), newAlias.trim()); - } - if (newAlias === "") { - alert("别名已删除"); - } + button.addEventListener('click', () => { + // 弹窗显示 ID,方便复制 + prompt("该用户的账号ID为 (请复制):", rawId); }); document.body.appendChild(button); } // 应用别名(异步) - getAlias(id.replace(PERSON_ID_PREFIX, "")).then(alias => { + getAlias(rawId).then(alias => { if (alias && el.textContent !== alias) { el.textContent = alias; } @@ -417,6 +397,25 @@ function init() { subtree: true, }); + // 自动同步检查 + chrome.storage.local.get('lastSync').then(({ lastSync }) => { + const now = Date.now(); + // 24 小时 = 86400000 ms + if (!lastSync || (now - lastSync > 86400000)) { + console.log("Teams Alias: 正在进行后台同步..."); + if (typeof fetchAliasesFromDB === 'function') { + fetchAliasesFromDB().then(aliases => { + chrome.storage.local.set({ aliases, lastSync: now }); + console.log("Teams Alias: 自动同步成功"); + }).catch(err => { + console.error("Teams Alias: 自动同步失败", err); + }); + } else { + console.warn("Teams Alias: fetchAliasesFromDB 未定义,无法同步。"); + } + } + }); + applyToAll(); // 初始执行 // 兜底:每 2 秒再扫一次(避免漏掉异步更新) diff --git a/manifest.json b/manifest.json index a010f07..2ccd143 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Teams 别名管理", - "version": "0.1.0", + "version": "0.2.0", "icons": { "16": "icons/teams-alias-16.png", "32": "icons/teams-alias-32.png", @@ -10,11 +10,14 @@ }, "description": "给 Teams 好友设置别名", "permissions": ["storage", "scripting"], - "host_permissions": ["https://teams.live.com/v2*"], + "host_permissions": [ + "https://teams.live.com/v2*", + "https://nocodb.example.com/*" + ], "content_scripts": [ { "matches": ["https://teams.live.com/v2*"], - "js": ["content.js"] + "js": ["env.js", "utils.js", "content.js"] } ], "action": { diff --git a/package.json b/package.json index b93586a..88dd897 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { "name": "teams-alias", - "version": "0.1.0", + "version": "0.2.0", "main": "index.js", "scripts": { + "build": "node scripts/generate-env.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", diff --git a/popup.html b/popup.html index 0755758..22e8cc7 100644 --- a/popup.html +++ b/popup.html @@ -55,10 +55,10 @@