1. 18 Jul, 2026 2 commits
    • Administrator's avatar
      feat(task): spec 0004 — task images migrated to stdt_task_images sub-resource · 8925331e
      Administrator authored
      
      
      Task images were stored as a JSON-ish field on stdt_tasks. Spec 0004 (see
      docs/task-images-migration.md) splits them into a dedicated sub-resource
      stdt_task_images so each image is its own row with mime_type / file_name /
      etag / size_bytes, accessed via /api/tasks/<id>/images/.
      
      Frontend changes:
      - new useTaskImages composable owning image state per edit dialog, with
        eager-load priming in load() so thumbnails render and are clickable in
        the grid (fixes v-if branch gated on populated imageCache).
      - taskService refactored: listTaskImages / createTaskImage / deleteTaskImage
        / getTaskImageContent (blob fetch with responseType: 'blob' to dodge 406s).
      - apiEndpoints.TASKS.IMAGES added for documentation purposes only — services
        still hardcode paths (CLAUDE.md flags apiEndpoints as stale).
      - TaskView.vue: switched from inline task.images to useTaskImages(); image
        upload / preview / delete / carousel wired to the new composable. Explicit
        taskId passed to load() and commit() since useTaskImages is instantiated
        without a taskIdRef at module scope.
      - locales en/zh-CN: new image keys (addImage, pendingUpload, clickToLoad,
        imagePartialFailure, imageLimitReached, etc.).
      
      Tests:
      - src/__tests__/api/taskService.test.js
      - src/__tests__/composables/useTaskImages.test.js
      - src/__tests__/composables/useTaskImages.network.test.js
      
      Also: .claude/ added to .gitignore (Claude Code local permissions, per-dev).
      Co-Authored-By: default avatarClaude <noreply@anthropic.com>
      8925331e
    • Administrator's avatar
      fix(AppLayout): pin background to viewport so page no longer scrolls past footer · 66e40940
      Administrator authored
      
      
      <v-img cover min-height="100dvh"> was forcing v-responsive to size itself
      to the image's natural aspect ratio (1692px wide × 2333/3500 ≈ 1128px tall),
      making the page 1128px tall on a 769px viewport. The bottom ~360px had no
      white overlay, so scrolling past the footer leaked the unwrapped image.
      
      Replace <v-img> with a position:fixed <div class="app-bg"> using
      background-image: cover, and move the white overlay from inline style to
      scoped .app-content CSS. Page scrollHeight dropped 1128 → 781; max scroll
      359 → 12 (just v-main's slight overflow).
      
      Verified: background still renders washed-out behind content, edit dialog
      opens correctly (pointer-events: none doesn't block v-overlay/v-dialog),
      all routes still work.
      Co-Authored-By: default avatarClaude <noreply@anthropic.com>
      66e40940
  2. 15 Jul, 2026 1 commit
  3. 06 Jul, 2026 2 commits
  4. 04 Jul, 2026 1 commit
    • Administrator's avatar
      added multiple feat · fd870ca4
      Administrator authored
      UI: add Settings skeleton page with v-tabs + 6 categories
      UI: enlarge TaskView event fonts and replace progress bar with SVG ring
      UI: add native title tooltip on TaskView events
      UI: convert filter panel toggle to floating icon button with slide animation
      UI: set browser tab title to "学生管理系统"
      fd870ca4
  5. 02 Jul, 2026 1 commit
  6. 04 Sep, 2025 1 commit
  7. 03 Sep, 2025 1 commit
  8. 02 Sep, 2025 1 commit
  9. 01 Sep, 2025 1 commit
  10. 30 Aug, 2025 1 commit
  11. 29 Aug, 2025 2 commits
  12. 28 Aug, 2025 1 commit
  13. 26 Aug, 2025 3 commits
  14. 19 Aug, 2025 2 commits
  15. 13 Aug, 2025 2 commits