一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

Description

@os-warren

售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

1. 进展预设短语(p7 ③)

duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

  • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
  • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

3. 列表与看板卡片(p16、p17)

  • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
  • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
  • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

不做

  • 不加 action(objectui#7234 未修,渲染不出来)。
  • 不做移动端。

冲突提示

本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

验收

  • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
  • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

    Description

    @os-warren

    售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

    1. 进展预设短语(p7 ③)

    duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

    • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
    • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

    2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

    duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

    3. 列表与看板卡片(p16、p17)

    • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
    • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
    • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

    不做

    • 不加 action(objectui#7234 未修,渲染不出来)。
    • 不做移动端。

    冲突提示

    本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

    验收

    • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
    • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

    Metadata

    Metadata

    Assignees

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

      Description

      @os-warren

      售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

      1. 进展预设短语(p7 ③)

      duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

      • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
      • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

      2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

      duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

      3. 列表与看板卡片(p16、p17)

      • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
      • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
      • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

      不做

      • 不加 action(objectui#7234 未修,渲染不出来)。
      • 不做移动端。

      冲突提示

      本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

      验收

      • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
      • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

      Metadata

      Metadata

      Assignees

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

        Description

        @os-warren

        售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

        1. 进展预设短语(p7 ③)

        duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

        • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
        • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

        2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

        duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

        3. 列表与看板卡片(p16、p17)

        • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
        • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
        • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

        不做

        • 不加 action(objectui#7234 未修,渲染不出来)。
        • 不做移动端。

        冲突提示

        本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

        验收

        • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
        • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

        Metadata

        Metadata

        Assignees

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

          Description

          @os-warren

          售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

          1. 进展预设短语(p7 ③)

          duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

          • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
          • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

          2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

          duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

          3. 列表与看板卡片(p16、p17)

          • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
          • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
          • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

          不做

          • 不加 action(objectui#7234 未修,渲染不出来)。
          • 不做移动端。

          冲突提示

          本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

          验收

          • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
          • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

          Metadata

          Metadata

          Assignees

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

            Description

            @os-warren

            售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

            1. 进展预设短语(p7 ③)

            duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

            • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
            • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

            2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

            duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

            3. 列表与看板卡片(p16、p17)

            • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
            • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
            • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

            不做

            • 不加 action(objectui#7234 未修,渲染不出来)。
            • 不做移动端。

            冲突提示

            本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

            验收

            • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
            • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

            Metadata

            Metadata

            Assignees

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

              Description

              @os-warren

              售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

              1. 进展预设短语(p7 ③)

              duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

              • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
              • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

              2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

              duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

              3. 列表与看板卡片(p16、p17)

              • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
              • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
              • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

              不做

              • 不加 action(objectui#7234 未修,渲染不出来)。
              • 不做移动端。

              冲突提示

              本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

              验收

              • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
              • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

              Metadata

              Metadata

              Assignees

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                一线界面:进展预设短语、任务附件,列表与看板卡片按方案 p7/p16/p17 补齐 #108

                Description

                @os-warren

                售前演示优先级 p0。 方案 v7 p7「一线执行:完成一条工作,一次点击」承诺了三件现在没有的事,p16/p17 画的列表和看板比现在的丰富。全部是元数据,不写代码。

                1. 进展预设短语(p7 ③)

                duly_task.progress 单选:on_time(已按期完成)/ distributed(已下发各部门)/ awaiting_feedback(待反馈)/ in_hand(处理中)+ 保留 note 自由文本作「自己写…」。

                • 列表里行内可编辑Edit inline 已经是平台能力,确认这个字段进了行内编辑)。
                • task.hook.tslast_update_at 只在 status/note/skip_reason 变化时打戳——progress 加进那份列表(改了进展就是「有人在管」),并补测试;test/seed-history.test.ts 必须保持绿。

                2. 任务附件(p7「附件自主上传」、p6「全程留痕」)

                duly_task.attachments:平台文件字段(多文件)。可传可不传、不校验、不拦截完成——这是产品不变量(无证据门槛),写进字段 description 和一条测试(done 不要求附件)。先量平台的文件字段类型叫什么、StorageServicePlugin 已加载能不能直接用;能用就用,不能就如实记录上报。

                3. 列表与看板卡片(p16、p17)

                • 「我的工作 / 本周待办」列表列:状态 · 工作事项 · 来源 · 到期 · 最新进展(=progressnote)· 附件标记。到期列显示相对日期(平台是否支持——量一下,不支持就用 late_after 列代替「逾期 N 天」)。
                • 看板(board)卡片字段:来源·到期·进展;泳道或分组按来源(自建 / 上级交办 / 系统派发)——量 kanban.cardFields / swimlaneField 能否表达;能就配。
                • 记录页 fieldGroups:基本 / 进展与附件 / 历史。

                不做

                • 不加 action(objectui#7234 未修,渲染不出来)。
                • 不做移动端。

                冲突提示

                本卡改 task.object.tstask.view.tstask.hook.ts。同批派发的清单审定卡片改 duty.*,仪表盘卡片改 dashboards/datasets/——互不重叠,但都会碰 zh-CN.ts,后落地的合 main 重跑门。

                验收

                • 浏览器截图:列表行内选一个预设进展、上传一个附件、看板卡片显示来源/到期/进展
                • 四道门绿;#18 的 i18n 门对新字段/选项变绿(要写中文)

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions