feat(文档属性): 统一属性读写及前后端字段顺序
build.yaml / build (push) Successful in 46s

This commit is contained in:
xiaoqidun committed 2026-10-25 21:52:31 +08:00
1 parent 3607c15162
commit 3816226ba5
3 files changed
+40 -40

No files matched your search

+15 -15
View File
@@ -495,13 +495,13 @@
<label class="form-row"><span>摘要</span><textarea id="infoAbstract" rows="2"></textarea></label> <label class="form-row"><span>摘要</span><textarea id="infoAbstract" rows="2"></textarea></label>
<details><summary><span>关键词</span></summary><div id="infoKeywordRows" class="info-rows"></div><button id="infoKeywordAdd" class="icon-button" type="button" title="添加词条">+</button></details> <details><summary><span>关键词</span></summary><div id="infoKeywordRows" class="info-rows"></div><button id="infoKeywordAdd" class="icon-button" type="button" title="添加词条">+</button></details>
<details><summary><span>文档属性</span></summary> <details><summary><span>文档属性</span></summary>
<label class="form-row"><span>文档标识</span><input id="infoDocId" type="text"></label>
<label class="form-row"><span>文档用途</span><input id="infoDocUsage" type="text"></label>
<label class="form-row"><span>封面路径</span><input id="infoCover" type="text"></label>
<label class="form-row"><span>创建日期</span><input id="infoCreationDate" type="text"></label> <label class="form-row"><span>创建日期</span><input id="infoCreationDate" type="text"></label>
<label class="form-row"><span>修改日期</span><input id="infoModDate" type="text"></label> <label class="form-row"><span>修改日期</span><input id="infoModDate" type="text"></label>
<label class="form-row"><span>制作软件</span><input id="infoCreator" type="text"></label> <label class="form-row"><span>制作软件</span><input id="infoCreator" type="text"></label>
<label class="form-row"><span>软件版本</span><input id="infoCreatorVersion" type="text"></label> <label class="form-row"><span>软件版本</span><input id="infoCreatorVersion" type="text"></label>
<label class="form-row"><span>文档标识</span><input id="infoDocId" type="text"></label>
<label class="form-row"><span>文档用途</span><input id="infoDocUsage" type="text"></label>
<label class="form-row"><span>封面路径</span><input id="infoCover" type="text"></label>
</details> </details>
<details><summary><span>扩展属性</span></summary><div id="infoCustomRows" class="info-rows"></div><button id="infoCustomAdd" class="icon-button" type="button" title="添加属性">+</button></details> <details><summary><span>扩展属性</span></summary><div id="infoCustomRows" class="info-rows"></div><button id="infoCustomAdd" class="icon-button" type="button" title="添加属性">+</button></details>
<div class="form-actions"><div id="infoStatus" class="form-status"></div><button id="infoCancel" class="button" type="button">取消</button><button class="button" type="submit">确定</button></div> <div class="form-actions"><div id="infoStatus" class="form-status"></div><button id="infoCancel" class="button" type="button">取消</button><button class="button" type="submit">确定</button></div>
@@ -849,18 +849,6 @@
</dl> </dl>
<details><summary>文档属性</summary> <details><summary>文档属性</summary>
<dl class="meta-list"> <dl class="meta-list">
<div hidden>
<dt>文档标识</dt>
<dd id="metaDocId"></dd>
</div>
<div hidden>
<dt>文档用途</dt>
<dd id="metaDocUsage"></dd>
</div>
<div hidden>
<dt>封面路径</dt>
<dd id="metaCover"></dd>
</div>
<div hidden> <div hidden>
<dt>创建日期</dt> <dt>创建日期</dt>
<dd id="metaCreationDate"></dd> <dd id="metaCreationDate"></dd>
@@ -877,6 +865,18 @@
<dt>软件版本</dt> <dt>软件版本</dt>
<dd id="metaCreatorVersion"></dd> <dd id="metaCreatorVersion"></dd>
</div> </div>
<div hidden>
<dt>文档标识</dt>
<dd id="metaDocId"></dd>
</div>
<div hidden>
<dt>文档用途</dt>
<dd id="metaDocUsage"></dd>
</div>
<div hidden>
<dt>封面路径</dt>
<dd id="metaCover"></dd>
</div>
</dl> </dl>
</details> </details>
<details><summary>扩展属性</summary><dl id="metaCustomData" class="meta-list" hidden></dl></details> <details><summary>扩展属性</summary><dl id="metaCustomData" class="meta-list" hidden></dl></details>
+18 -18
View File
@@ -15,7 +15,7 @@ const SCROLL_SEGMENT_SIZE = 1000000;
const OBJECT_CLIPBOARD_TYPE = "application/x-ofdgo-objects"; const OBJECT_CLIPBOARD_TYPE = "application/x-ofdgo-objects";
const RESOURCE_KINDS = [["Font", "字体"], ["Image", "图片"], ["Audio", "音频"], ["Video", "视频"], ["Attachment", "附件"], ["ColorSpace", "色彩"], ["DrawParam", "样式"]]; const RESOURCE_KINDS = [["Font", "字体"], ["Image", "图片"], ["Audio", "音频"], ["Video", "视频"], ["Attachment", "附件"], ["ColorSpace", "色彩"], ["DrawParam", "样式"]];
const SETTINGS_KINDS = [["bookmarks", "书签"], ["actions", "动作"], ["templates", "模板"], ["layers", "图层"], ["extensions", "扩展"]]; const SETTINGS_KINDS = [["bookmarks", "书签"], ["actions", "动作"], ["templates", "模板"], ["layers", "图层"], ["extensions", "扩展"]];
const INFO_FIELDS = ["title", "author", "subject", "abstract", "docId", "docUsage", "cover", "creationDate", "modDate", "creator", "creatorVersion"]; const INFO_FIELDS = ["title", "author", "subject", "abstract", "creationDate", "modDate", "creator", "creatorVersion", "docId", "docUsage", "cover"];
const STATUS = { const STATUS = {
ready: "选择 OFD、PDF 文件", ready: "选择 OFD、PDF 文件",
opening: "正在打开文档", opening: "正在打开文档",
@@ -345,20 +345,20 @@ const el = {
infoPanel: document.querySelector("#infoPanel"), infoPanel: document.querySelector("#infoPanel"),
infoForm: document.querySelector("#infoForm"), infoForm: document.querySelector("#infoForm"),
infoTitle: document.querySelector("#infoTitle"), infoTitle: document.querySelector("#infoTitle"),
infoCustomRows: document.querySelector("#infoCustomRows"),
infoCustomAdd: document.querySelector("#infoCustomAdd"),
infoAuthor: document.querySelector("#infoAuthor"), infoAuthor: document.querySelector("#infoAuthor"),
infoSubject: document.querySelector("#infoSubject"), infoSubject: document.querySelector("#infoSubject"),
infoAbstract: document.querySelector("#infoAbstract"), infoAbstract: document.querySelector("#infoAbstract"),
infoDocId: document.querySelector("#infoDocId"), infoKeywordRows: document.querySelector("#infoKeywordRows"),
infoDocUsage: document.querySelector("#infoDocUsage"), infoKeywordAdd: document.querySelector("#infoKeywordAdd"),
infoCover: document.querySelector("#infoCover"),
infoCreationDate: document.querySelector("#infoCreationDate"), infoCreationDate: document.querySelector("#infoCreationDate"),
infoModDate: document.querySelector("#infoModDate"), infoModDate: document.querySelector("#infoModDate"),
infoCreator: document.querySelector("#infoCreator"), infoCreator: document.querySelector("#infoCreator"),
infoCreatorVersion: document.querySelector("#infoCreatorVersion"), infoCreatorVersion: document.querySelector("#infoCreatorVersion"),
infoKeywordRows: document.querySelector("#infoKeywordRows"), infoDocId: document.querySelector("#infoDocId"),
infoKeywordAdd: document.querySelector("#infoKeywordAdd"), infoDocUsage: document.querySelector("#infoDocUsage"),
infoCover: document.querySelector("#infoCover"),
infoCustomRows: document.querySelector("#infoCustomRows"),
infoCustomAdd: document.querySelector("#infoCustomAdd"),
infoCancel: document.querySelector("#infoCancel"), infoCancel: document.querySelector("#infoCancel"),
infoStatus: document.querySelector("#infoStatus"), infoStatus: document.querySelector("#infoStatus"),
paragraphPanel: document.querySelector("#paragraphPanel"), paragraphPanel: document.querySelector("#paragraphPanel"),
@@ -607,20 +607,20 @@ const el = {
refreshAppButton: document.querySelector("#refreshAppButton"), refreshAppButton: document.querySelector("#refreshAppButton"),
metaFile: document.querySelector("#metaFile"), metaFile: document.querySelector("#metaFile"),
metaTitle: document.querySelector("#metaTitle"), metaTitle: document.querySelector("#metaTitle"),
conversionNotice: document.querySelector("#conversionNotice"), metaAuthor: document.querySelector("#metaAuthor"),
conversionWarnings: document.querySelector("#conversionWarnings"),
metaSubject: document.querySelector("#metaSubject"), metaSubject: document.querySelector("#metaSubject"),
metaAbstract: document.querySelector("#metaAbstract"), metaAbstract: document.querySelector("#metaAbstract"),
metaDocId: document.querySelector("#metaDocId"),
metaDocUsage: document.querySelector("#metaDocUsage"),
metaCover: document.querySelector("#metaCover"),
metaKeywords: document.querySelector("#metaKeywords"), metaKeywords: document.querySelector("#metaKeywords"),
metaCustomData: document.querySelector("#metaCustomData"),
metaAuthor: document.querySelector("#metaAuthor"),
metaCreationDate: document.querySelector("#metaCreationDate"), metaCreationDate: document.querySelector("#metaCreationDate"),
metaModDate: document.querySelector("#metaModDate"), metaModDate: document.querySelector("#metaModDate"),
metaCreator: document.querySelector("#metaCreator"), metaCreator: document.querySelector("#metaCreator"),
metaCreatorVersion: document.querySelector("#metaCreatorVersion"), metaCreatorVersion: document.querySelector("#metaCreatorVersion"),
metaDocId: document.querySelector("#metaDocId"),
metaDocUsage: document.querySelector("#metaDocUsage"),
metaCover: document.querySelector("#metaCover"),
metaCustomData: document.querySelector("#metaCustomData"),
conversionNotice: document.querySelector("#conversionNotice"),
conversionWarnings: document.querySelector("#conversionWarnings"),
metaType: document.querySelector("#metaType"), metaType: document.querySelector("#metaType"),
metaVersion: document.querySelector("#metaVersion"), metaVersion: document.querySelector("#metaVersion"),
metaSignatures: document.querySelector("#metaSignatures"), metaSignatures: document.querySelector("#metaSignatures"),
@@ -12677,13 +12677,13 @@ function renderMeta(keepDetails = false) {
for (const [field, value] of [ for (const [field, value] of [
[el.metaSubject, doc.subject || ""], [el.metaSubject, doc.subject || ""],
[el.metaAbstract, doc.abstract || ""], [el.metaAbstract, doc.abstract || ""],
[el.metaDocId, doc.docId || ""],
[el.metaDocUsage, doc.docUsage || ""],
[el.metaCover, doc.cover || ""],
[el.metaCreationDate, formatDocumentTime(doc.creationDate)], [el.metaCreationDate, formatDocumentTime(doc.creationDate)],
[el.metaModDate, formatDocumentTime(doc.modDate)], [el.metaModDate, formatDocumentTime(doc.modDate)],
[el.metaCreator, doc.creator || ""], [el.metaCreator, doc.creator || ""],
[el.metaCreatorVersion, doc.creatorVersion || ""], [el.metaCreatorVersion, doc.creatorVersion || ""],
[el.metaDocId, doc.docId || ""],
[el.metaDocUsage, doc.docUsage || ""],
[el.metaCover, doc.cover || ""],
]) { ]) {
field.textContent = value; field.textContent = value;
field.parentElement.hidden = !value; field.parentElement.hidden = !value;
+7 -7
View File
@@ -84,18 +84,18 @@ type pageBoxInfo struct {
// DocumentMetadata 文档描述,供信息展示与包内文档管理共用 // DocumentMetadata 文档描述,供信息展示与包内文档管理共用
type DocumentMetadata struct { type DocumentMetadata struct {
DocID string `json:"docId"`
Title string `json:"title"` Title string `json:"title"`
Author string `json:"author"` Author string `json:"author"`
Subject string `json:"subject"` Subject string `json:"subject"`
Abstract string `json:"abstract"` Abstract string `json:"abstract"`
Keywords []string `json:"keywords,omitempty"`
CreationDate string `json:"creationDate"` CreationDate string `json:"creationDate"`
ModDate string `json:"modDate"` ModDate string `json:"modDate"`
DocUsage string `json:"docUsage"`
Cover string `json:"cover"`
Keywords []string `json:"keywords,omitempty"`
Creator string `json:"creator"` Creator string `json:"creator"`
CreatorVersion string `json:"creatorVersion"` CreatorVersion string `json:"creatorVersion"`
DocID string `json:"docId"`
DocUsage string `json:"docUsage"`
Cover string `json:"cover"`
CustomData []ofdgo.CustomData `json:"customData,omitempty"` CustomData []ofdgo.CustomData `json:"customData,omitempty"`
} }
@@ -104,9 +104,9 @@ type DocumentMetadata struct {
// 返回: DocumentMetadata 界面元数据 // 返回: DocumentMetadata 界面元数据
func documentMetadata(info ofdgo.DocInfo) DocumentMetadata { func documentMetadata(info ofdgo.DocInfo) DocumentMetadata {
metadata := DocumentMetadata{ metadata := DocumentMetadata{
DocID: info.DocID, Title: info.Title, Author: info.Author, Subject: info.Subject, Abstract: info.Abstract, Title: info.Title, Author: info.Author, Subject: info.Subject, Abstract: info.Abstract, Keywords: slices.Clone(info.Keywords),
CreationDate: info.CreationDate, ModDate: info.ModDate, DocUsage: info.DocUsage, Cover: info.Cover, CreationDate: info.CreationDate, ModDate: info.ModDate, Creator: info.Creator, CreatorVersion: info.CreatorVersion,
Keywords: slices.Clone(info.Keywords), Creator: info.Creator, CreatorVersion: info.CreatorVersion, DocID: info.DocID, DocUsage: info.DocUsage, Cover: info.Cover,
} }
if info.CustomDatas != nil { if info.CustomDatas != nil {
metadata.CustomData = slices.Clone(info.CustomDatas.CustomData) metadata.CustomData = slices.Clone(info.CustomDatas.CustomData)