diff --git a/app/src/protyle/render/av/groups.ts b/app/src/protyle/render/av/groups.ts index 822f971d9..05421fa1e 100644 --- a/app/src/protyle/render/av/groups.ts +++ b/app/src/protyle/render/av/groups.ts @@ -13,35 +13,35 @@ export const setGroupMethod = (options: { blockElement: Element, }) => { const blockID = options.blockElement.getAttribute("data-block-id"); + const column: IAVColumn = getFieldsByData(options.data).find(item => item.id === options.fieldId); + const data = { + field: options.fieldId, + method: column.type === "number" ? 1 : (["date", "updated", "created"].includes(column.type) ? 2 : 0), + order: 0, + range: column.type === "number" ? { + numStart: 0, + numEnd: 1000, + numStep: 100, + } : null + }; transaction(options.protyle, [{ action: "setAttrViewGroup", avID: options.data.id, blockID, - data: { - field: options.fieldId, - method: null, - order: null, - range: null - } + data }], [{ action: "setAttrViewGroup", avID: options.data.id, blockID, data: { field: options.data.view.group?.field || "", - method: null, - order: null, - range: null + method: options.data.view.group?.method || "", + order: options.data.view.group?.order || "", + range: options.data.view.group?.range || "" } }]); - if (!options.data.view.group) { - options.data.view.group = { - field: options.fieldId - }; - } else { - options.data.view.group.field = options.fieldId; - } - options.menuElement.innerHTML = getGroupsHTML(getFieldsByData(options.data), options.data.view.group); + options.data.view.group = data; + options.menuElement.innerHTML = getGroupsHTML(getFieldsByData(options.data), options.data.view); // bindGroupsEvent(options.protyle, options.menuElement, options.data, blockID); const tabRect = options.blockElement.querySelector(".av__views").getBoundingClientRect(); setPosition(options.menuElement, tabRect.right - options.menuElement.clientWidth, tabRect.bottom, tabRect.height); @@ -74,17 +74,68 @@ ${html} `; }; -export const getGroupsHTML = (columns: IAVColumn[], group: IAVGroup) => { +const getLanguageByIndex = (index: number, type: "sort" | "date") => { + if (type === "sort") { + switch (index) { + case 0: + return window.siyuan.languages.asc; + case 1: + return window.siyuan.languages.desc; + case 2: + return window.siyuan.languages.customSort; + default: + return ""; + } + } else if (type === "date") { + switch (index) { + case 2: + return window.siyuan.languages.groupMethodDateRelative; + case 3: + return window.siyuan.languages.groupMethodDateDay; + case 4: + return window.siyuan.languages.groupMethodDateWeek; + case 5: + return window.siyuan.languages.groupMethodDateMonth; + case 6: + return window.siyuan.languages.groupMethodDateYear; + default: + return ""; + } + } +}; + +export const getGroupsHTML = (columns: IAVColumn[], view: IAVView) => { let html = ""; - if (group && group.field) { - html = ` +`; + view.groups.forEach(item => { + groupHTML += ``; + }); + } + column = columns.find(item => item.id === view.group.field); + html = ` + +${groupHTML} -`; @@ -108,7 +160,7 @@ export const getGroupsHTML = (columns: IAVColumn[], group: IAVGroup) => { ${html} diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index 4f1ee008a..1daceb163 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -578,7 +578,7 @@ export const openMenuPanel = (options: { event.stopPropagation(); break; } else if (type === "goGroups") { - menuElement.innerHTML = getGroupsHTML(fields, data.view.group); + menuElement.innerHTML = getGroupsHTML(fields, data.view); bindGroupsEvent(); setPosition(menuElement, tabRect.right - menuElement.clientWidth, tabRect.bottom, tabRect.height); window.siyuan.menus.menu.remove(); diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 284e5e3c9..f0b90af69 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -851,6 +851,7 @@ interface IAVView { pageSize: number; showIcon: boolean; wrapField: boolean; + groupHidden?: boolean, filters: IAVFilter[], sorts: IAVSort[], groups: IAVView[] @@ -893,9 +894,9 @@ interface IAVGroup { field: string, method?: number // 0: 按值分组、1: 按数字范围分组、2: 按相对日期分组、3: 按天日期分组、4: 按周日期分组、5: 按月日期分组、6: 按年日期分组 range?: { - numStart: number // 数字范围起始值 - numEnd: number // 数字范围结束值 - numStep: number // 数字范围步长 + numStart: number // 数字范围起始值 0 + numEnd: number // 数字范围结束值 1000 + numStep: number // 数字范围步长 100 } order?: number // 升序: 0(默认), 降序: 1, 手动排序: 2 }