From f747739fd5dd6fe3a70bf47fe599e0ba8f936b1f Mon Sep 17 00:00:00 2001 From: Achuan-2 Date: Thu, 18 Sep 2025 21:14:18 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E5=85=B3=E8=81=94=E5=88=97?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=80=E9=94=AE=E5=A4=8D=E5=88=B6=E7=8E=B0?= =?UTF-8?q?=E6=9C=89=E5=85=B3=E8=81=94=20(#15876)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/appearance/langs/ar_SA.json | 1 + app/appearance/langs/de_DE.json | 1 + app/appearance/langs/en_US.json | 1 + app/appearance/langs/es_ES.json | 1 + app/appearance/langs/fr_FR.json | 1 + app/appearance/langs/he_IL.json | 1 + app/appearance/langs/it_IT.json | 1 + app/appearance/langs/ja_JP.json | 1 + app/appearance/langs/pl_PL.json | 1 + app/appearance/langs/pt_BR.json | 1 + app/appearance/langs/ru_RU.json | 1 + app/appearance/langs/zh_CHT.json | 1 + app/appearance/langs/zh_CN.json | 1 + app/src/protyle/render/av/relation.ts | 63 ++++++++++++++++++++++++++- 14 files changed, 74 insertions(+), 2 deletions(-) diff --git a/app/appearance/langs/ar_SA.json b/app/appearance/langs/ar_SA.json index 031410725..bdefc8dab 100644 --- a/app/appearance/langs/ar_SA.json +++ b/app/appearance/langs/ar_SA.json @@ -177,6 +177,7 @@ "thisDatabase": "قاعدة البيانات هذه", "relatedTo": "الربط بـ", "relation": "ربط", + "relatedItems": "العناصر المرتبطة", "rollup": "القيمة المحتسبة", "rollupProperty": "الخاصية", "rollupCalc": "الحساب بـ", diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json index 144e55559..819056bc2 100644 --- a/app/appearance/langs/de_DE.json +++ b/app/appearance/langs/de_DE.json @@ -177,6 +177,7 @@ "thisDatabase": "Diese Datenbank", "relatedTo": "Verbindung zu", "relation": "Beziehung", + "relatedItems": "Verknüpfte Einträge", "rollup": "Rollup", "rollupProperty": "Eigenschaft", "rollupCalc": "Berechnen", diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 8f8185d44..7947ab32b 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -177,6 +177,7 @@ "thisDatabase": "This database", "relatedTo": "Relation to", "relation": "Relation", + "relatedItems": "Related Items", "rollup": "Rollup", "rollupProperty": "Property", "rollupCalc": "Calculate", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index b05f57216..632da1e4a 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -177,6 +177,7 @@ "thisDatabase": "Esta base de datos", "relatedTo": "Relación con", "relation": "Relación", + "relatedItems": "Elementos relacionados", "rollup": "Acumular", "rollupProperty": "Propiedad", "rollupCalc": "Calcular", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index f740c6caa..fbfdefecb 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -177,6 +177,7 @@ "thisDatabase": "Cette base de données", "relatedTo": " Relation avec ", "relation": "Relation", + "relatedItems": "Éléments liés", "rollup": "Rollup", "rollupProperty": "Propriété", "rollupCalc": "Calculer", diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json index fbaed8cdc..27aa75cf4 100644 --- a/app/appearance/langs/he_IL.json +++ b/app/appearance/langs/he_IL.json @@ -177,6 +177,7 @@ "thisDatabase": "בסיס הנתונים הזה", "relatedTo": "קשר ל", "relation": "קשר", + "relatedItems": "פריטים קשורים", "rollup": "סיכום", "rollupProperty": "מאפיין", "rollupCalc": "חישוב", diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json index 75922bfc0..8ed125a4b 100644 --- a/app/appearance/langs/it_IT.json +++ b/app/appearance/langs/it_IT.json @@ -177,6 +177,7 @@ "thisDatabase": "Questo database", "relatedTo": "Relazionato a", "relation": "Relazione", + "relatedItems": "Elementi correlati", "rollup": "Rollup", "rollupProperty": "Proprietà", "rollupCalc": "Calcola", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index 894872b15..b0e1faa0a 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -177,6 +177,7 @@ "thisDatabase": "現在のデータベース", "relatedTo": "関連付け", "relation": "関連", + "relatedItems": "関連項目", "rollup": "集計", "rollupProperty": "属性", "rollupCalc": "計算方法", diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json index 3554eafa8..ee2e55f0e 100644 --- a/app/appearance/langs/pl_PL.json +++ b/app/appearance/langs/pl_PL.json @@ -177,6 +177,7 @@ "thisDatabase": "Ta baza danych", "relatedTo": "Powiązane z", "relation": "Relacja", + "relatedItems": "Powiązane elementy", "rollup": "Skumuluje", "rollupProperty": "Właściwość", "rollupCalc": "Oblicz", diff --git a/app/appearance/langs/pt_BR.json b/app/appearance/langs/pt_BR.json index 3931df5b2..b684bdb9a 100644 --- a/app/appearance/langs/pt_BR.json +++ b/app/appearance/langs/pt_BR.json @@ -177,6 +177,7 @@ "thisDatabase": "Este banco de dados", "relatedTo": "Relacionado a", "relation": "Relação", + "relatedItems": "Itens relacionados", "rollup": "Rollup", "rollupProperty": "Propriedade", "rollupCalc": "Calcular", diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json index e6ee2bd65..9f0c2e67a 100644 --- a/app/appearance/langs/ru_RU.json +++ b/app/appearance/langs/ru_RU.json @@ -177,6 +177,7 @@ "thisDatabase": "Эта база данных", "relatedTo": "Связано с", "relation": "Связь", + "relatedItems": "Связанные элементы", "rollup": "Свод", "rollupProperty": "Свойство", "rollupCalc": "Вычислить", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index d45a75c53..06fd737de 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -177,6 +177,7 @@ "thisDatabase": "目前資料庫", "relatedTo": "關聯至", "relation": "關聯", + "relatedItems": "已關聯條目", "rollup": "匯總", "rollupProperty": "總計欄位", "rollupCalc": "彙總方式", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 425d9bafd..292a763bd 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -177,6 +177,7 @@ "thisDatabase": "当前数据库", "relatedTo": "关联至", "relation": "关联", + "relatedItems": "已关联条目", "rollup": "汇总", "rollupProperty": "汇总字段", "rollupCalc": "汇总方式", diff --git a/app/src/protyle/render/av/relation.ts b/app/src/protyle/render/av/relation.ts index bf8544a50..d35a36d12 100644 --- a/app/src/protyle/render/av/relation.ts +++ b/app/src/protyle/render/av/relation.ts @@ -13,6 +13,8 @@ import {getFieldsByData, getViewName} from "./view"; import {getColId} from "./col"; import {getFieldIdByCellElement} from "./row"; import {isMobile} from "../../../util/functions"; +import {showMessage} from "../../../dialog/message"; +import {writeText} from "../../util/compatibility"; interface IAVItem { avID: string; @@ -249,6 +251,19 @@ export const toggleUpdateRelationBtn = (menuItemsElement: HTMLElement, avId: str } }; +const genRelatedItemsHeader = (hasRelatedItems: boolean) => { + if (!hasRelatedItems) { + return ""; + } + return `
+ ${window.siyuan.languages.relatedItems || "已关联条目"} + + +
`; +}; + const genSelectItemHTML = (options: { type: "selected" | "empty" | "unselect", id?: string, @@ -313,7 +328,8 @@ draggable="true">${genSelectItemHTML({ }); } }); - menuElement.querySelector(".b3-menu__items").innerHTML = `${selectHTML} + const hasRelatedItems = selectHTML.trim() !== ""; + menuElement.querySelector(".b3-menu__items").innerHTML = `${genRelatedItemsHeader(hasRelatedItems)}${selectHTML} ${html} ${keyword ? genSelectItemHTML({ @@ -361,7 +377,8 @@ draggable="true">${genSelectItemHTML({ }); } }); - options.menuElement.querySelector(".b3-menu__items").innerHTML = `${selectHTML} + const hasRelatedItems = selectHTML.trim() !== ""; + options.menuElement.querySelector(".b3-menu__items").innerHTML = `${genRelatedItemsHeader(hasRelatedItems)}${selectHTML} ${html || genSelectItemHTML({type: "empty"})}`; const cellRect = options.cellElements[options.cellElements.length - 1].getBoundingClientRect(); @@ -396,6 +413,48 @@ ${html || genSelectItemHTML({type: "empty"})}`; event.stopPropagation(); filterItem(options.menuElement, options.cellElements[0], inputElement.value); }); + + // 添加复制按钮的点击事件 + const copyRelatedItemsHandler = (event: Event) => { + const target = event.target as HTMLElement; + if (target.closest('[data-type="copyRelatedItems"]')) { + event.preventDefault(); + event.stopPropagation(); + + const relationItems = options.cellElements[0].querySelectorAll(".av__cell--relation"); + const blockRefs: string[] = []; + + relationItems.forEach((relationItem: HTMLElement) => { + const item = relationItem.querySelector(".av__celltext") as HTMLElement; + if (item) { + const text = item.textContent || window.siyuan.languages.untitled; + if (item.dataset.id) { + // 有 ID 的条目,生成块引用 + const blockRef = `((${item.dataset.id} "${text}"))`; + blockRefs.push(blockRef); + } else { + // 没有 ID 的条目,直接使用纯文本 + blockRefs.push(text); + } + } + }); + + if (blockRefs.length > 0) { + let copyText: string; + if (blockRefs.length === 1) { + // 单个条目,直接复制 + copyText = blockRefs[0]; + } else { + // 多个条目,复制为列表 + copyText = blockRefs.map(ref => `- ${ref}`).join("\n"); + } + writeText(copyText); + showMessage(window.siyuan.languages.copied || "已复制"); + } + } + }; + + listElement.addEventListener("click", copyRelatedItemsHandler); }); };