youyou-work-hours:在 DSH 客戶端裏做上下班打卡與工時統計

前言

DSH 的宿主進程跑起來之後,容器裏沒有界面,日常的「上班打卡、看今天干了多久、月末算一下遲到率」這類事沒有落點。要做這類記錄,常見做法是自己寫腳本寫文件,再定期人工彙總;腳本不會給提醒,也不會算節假日和調休。

下面介紹的插件 mryouyouHK/youyou-work-hours 把計時面板做進了 DSH 客戶端側欄。鼠標懸浮左側「計時」條目就能打卡、看今日工時和遲到率,數據留在本機瀏覽器裏,配套日曆、年、列表三種視圖做回顧。

這是社區插件,不是 DeepSeek 官方應用,目錄站 SkillHub 也和 DeepSeek / 幻方沒有官方從屬關係。

這是什麼

一句話定位:一個 DSH 客戶端插件,提供上班/下班打卡、可配置的班次時間、今日與平均工時統計、日曆/年/列表三種回顧記錄,以及基於通知中心的超時提醒。

維護者是 mryouyouHK,倉庫地址 https://github.com/mryouyouHK/youyou-work-hours,MIT 許可證。package.json 裏 name 爲 youyou-work-hours,version 爲 1.1.0。

解決問題:把工時記錄從「腳本 + 手工彙總」變成客戶端裏帶提醒、帶節假日口徑的面板,同時保留本地存儲,不產生服務端上傳。

核心功能

側欄「計時」浮層

鼠標懸浮左側「計時」條目時,在側欄右側打開浮層,樣式與「API 餘額」的菜單一致。四行兩列內容:

  1. 第一行:計劃上班/上班
  2. 第二行:計劃下班/下班
  3. 第三行:今日工時/月均工時
  4. 第四行:本月遲到率/本週遲到率

底部是上班、下班兩個快捷打卡按鈕。點擊浮層外任意位置(包括「計時」條目本身)或按 Esc 關閉;點擊快捷打卡按鈕後保存記錄並關閉浮層。

可配置的時間與提醒

所有判定時間都能在面板「設置」裏改,README 給出的默認值如下:

計劃上班時間   09:00   顯示計劃班次;未打卡時側欄提示
計劃下班時間   18:00   預計下班時間、超時倒計時的基準;某天可在面板裏單獨覆蓋
遲到判定時間   10:00   晚於該時間上班記爲遲到(只統計週一至週五)
超時提示時間   19:30   過了該時間,側欄「計時」條目紅色呼吸底色
下班提示時間   20:00   過了該時間,會話頂部出現打卡提醒條
下班提醒條     開啓     關掉後超過下班提示時間也不再顯示提醒條
下班提醒條文案  可配置   {time} 會替換成已過時長
超時爆閃間隔   5 分鐘   超過預計下班後每隔這麼久短促爆閃一次(1–60)
超時爆閃提示文案  可配置  爆閃時通知中心顯示的正文(最多 120 字)

上班打卡、下班打卡和當日計劃下班都可以手動編輯,時間以 24 小時制顯示。沒有單獨設置時,預計下班按全局「計劃下班時間」計算。

「設置」默認收起,點標題展開後修改。改動先留在本地草稿,點「保存設置」才寫入,保存成功會彈出 toast 提示;未保存時標題旁顯示「未保存」。

工時與平均工時的口徑

這塊口徑容易算錯,寫出來以便覈對:

  • 累計工時按上班打卡至當前時間或下班打卡的經過時間計算,不扣除休息時間。
  • 平均工時 = 該月已完成工時的總時長 ÷ 該月已完成工時天數。當天還沒下班時,實時工時計入「總工時」,但不參與平均,避免上午把平均拉低、下班又突然跳高。
  • 遲到天數只統計當天完整填寫上下班時間的日期,未完成的日期不計入遲到分母。
  • 遲到率只按工作日統計:分母是已完成工時的工作日天數。週末打卡照常記工時,但不計入遲到天數與遲到率。遲到天數後面括號裏的百分比就是該率。

面板頂部有四張卡:今日累計工時、預計下班倒計時、月平均工時、年平均工時。

三種記錄視圖

  • 日曆:按月顯示網格,每天顯示工時與狀態(遲到/準時/進行中)。週六、週日淺灰底色,法定節假日顯示假期名並加暖色底,調休上班日標「班」。點擊某天在下方展開該日詳情;點「編輯」(或雙擊任意時間)進入編輯,改完點「保存」提示保存成功。
  • 年視圖:12 個月卡片,每張顯示該月「平均/天」、總工時、出勤天數、遲到天數,並列出具體遲到日期;點擊某月切換到該月日曆詳情。
  • 列表:按月表格逐條顯示並編輯上班、計劃下班、下班時間。

三個視圖之間可以隨時切換,「今天/今年」按鈕回到當前時間。

法定節假日

內置 2025–2026 年國務院辦公廳公佈的放假安排。節假日按非工作日處理(不計遲到、不進遲到率分母),調休上班日(週末補班)按工作日處理。2027 年起的新安排需要更新代碼裏的假期表。

安裝與啓用

README 沒有給出一條可直接複製的 shell 命令,而是寫明瞭接入方式:

使用 Harness plugin_manager 的 install_bundle 指向本目錄。
Host 端插件重新啓用或重啓 Harness 後生效;客戶端刷新頁面即可。

具體路徑是倉庫根目錄。在 package.json 裏,dsh.bundle.patch 指向 ./cordis.patch.yml,dsh.client 聲明平臺爲 web、immediately: true,並注入三個客戶端 UI 包:

{
  "dsh": {
    "bundle": { "patch": "./cordis.patch.yml" },
    "client": {
      "platform": "web",
      "immediately": true,
      "inject": [
        "@deepseek-ai/dsh-client-ui-layout",
        "@deepseek-ai/dsh-client-ui-sidebar",
        "@deepseek-ai/dsh-client-ui-chat"
      ]
    }
  }
}

這裏沒有 dsh plugin add 形式的命令,不要把倉庫名直接拼成安裝命令。接入前應打開倉庫根目錄確認目錄結構和 package.json,確認與你本地 Harness 版本的匹配情況。

數據保存位置

打卡記錄與所有設置默認只保存在本機瀏覽器的 localStorage,鍵爲 work-hours:data:v1,不上傳任何服務器。需要備份或換機時,在「設置」裏用「導出配置」得到 JSON 文件,再用「導入配置」恢復;「恢復默認時間」只重置設置,不刪除打卡記錄。

調試與測試

面板底部的「調試模式」可以分別預覽下班倒計時、超時爆閃、超時紅色提示和下班提醒條。每次只運行一個 case,點擊當前 case 的「關閉」清除模擬並恢復正常模式,預覽不會修改打卡記錄。

超時爆閃每次觸發時,同時調用通知中心插件新增一條「超時提醒」(正文取自定義文案),並嘗試顯示系統通知;若系統通知不可用,通知中心顯示應用內橫幅。通知僅在每個配置間隔的爆閃週期開始時觸發一次。

倉庫自帶測試腳本:

node test/logic.test.mjs

覆蓋默認值與非法值回退、舊數據遷移、總工時/平均工時/遲到統計、進行中當天、缺下班打卡、年視圖彙總、導入校驗與緩存失效。

適用場景與注意

適合想在 DSH 客戶端裏順手記錄上下班、月底看平均工時和遲到率的人,尤其是已經把客戶端當日常入口、不希望再開一套獨立打卡工具的場景。

注意事項:

  1. 插件以當前 dsh 進程的權限運行,能讀到的目錄和文件範圍等同於該進程,安裝前應先讀一遍源碼、確認依賴與補丁內容,再決定是否啓用。
  2. 數據只在本機瀏覽器,換瀏覽器或清緩存前先「導出配置」,否則本地記錄會丟失。
  3. 提醒依賴通知中心插件,沒裝或沒有可用系統通知時只會在通知中心裏顯示應用內橫幅。
  4. 2027 年及以後的節假日需要手動更新代碼裏的假期表。
  5. 目錄頁的星標數很少(當前目錄信息爲 0),屬於個人項目,遇到問題建議通過 GitHub Issues 反饋。

小結

這個插件的價值在於把打卡、班次判定、節假日口徑和平均工時合成放進 DSH 客戶端側欄,數據全程留在本機,不需要額外服務。要寫清楚的部分是它依賴客戶端 UI 注入,接入方式是 install_bundle 指向倉庫目錄,且沒有提供命令行安裝串。

參考資料:

  • 目錄頁:https://www.skillhub.cn/plugins/mryouyouHK/youyou-work-hours
  • 倉庫:https://github.com/mryouyouHK/youyou-work-hours
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜