Compare commits

..
11 Commits
Author SHA1 Message Date
lijing e817430f95 docs(theme): .env.dev 补主题通道本地联调说明
build / build (push) Successful in 3m2s
2026-10-21 18:17:41 +08:00
lijing 60e531a447 feat(theme): 接入云海子主题通道(A 类免插件,规范 v1.12 §2/§3)
build / build (push) Successful in 3m40s
- index.html 插 A 类 loader:唯一接入点,FOUC 门/manifest 预取/主题 link 追加与排序
  全由通道 yh-theme-init.js 承担,主题升级走 /static 通道,本应用无需重新构建
- vite.config 加 /static dev 代理(YH_THEME_PROXY_TARGET 可覆盖,默认线上通道)
- host.config 回写 __APP_CONFIG__.serviceHost(仅同源):init 的 appearance 请求有硬性
  同源限制,跨源会被直接跳过;本地 dev 保持空串走同源 /api 代理
- 顶栏头像接平台键 yh-avatar,监听 yh-appearance-updated,userInfo 兜底
- view-ui-plus 声明锁 1.3.24(对齐通道皮肤生成版本)
2026-10-21 18:04:19 +08:00
ops 4b6f71c585 fix(ci): 构建容器名唯一化 + npm 走国内镜像源(避免并发互踩 exit 137) 2026-10-21 06:24:25 +00:00
ops fa4e2689db ci: apk 源统一走 aliyun(规避 dl-cdn 时段性被拦卡 60s) 2026-10-21 01:36:56 +00:00
lijing 34c8908cee fix(homework): 附件列按类型分流,非图片附件(xlsx/docx/pdf)不再裂图
build / build (push) Successful in 6m3s
- Submissions 提交情况表格「附件」列:四源判定(fileName 扩展名 → URL 扩展名 →
  行级 contentTypes → img onerror 兜底),非图片渲染为与图片缩略图同尺寸(32×32)
  的文件图标格,图标按扩展名取 icon-excel / icon-word / icon-pdf1 等
- 点文件格可在线预览(有 fileId 走 FilePreviewModal),title 显示学生上传的真实文件名
- Utils 新增 isImageName / fileIcon / attIsImage 三个工具方法
- HomeworkAccept、HomeworkDetails 两处完全重复的「扩展名→图标」映射收敛到 Utils.fileIcon,
  兜底图标由语义不符的 icon-weizhi 改为 icon-attachment
- ReviewWorkbench 批阅工作台:图片/文件分流改走 Utils.attIsImage(原判定只认
  fileType==='image',后端不填该字段时图片会被整体误判为文件),并给文件附件补上「查看」
- StudentMatrixVo 兼容 attachments: AttachmentItem[] 新契约,缺失时退回 thumbnails;
  后端上线即自动获得精确文件类型图标与在线预览,前端无需再发版
- mock 的 thumbnails 改为返回全部附件 URL(原先只挑 fileType==='image',
  比契约更宽容,导致该缺陷本地无法复现)
2026-09-22 16:05:00 +08:00
lijing 99aff5835f chore(env): .env.dev 的 VITE_SERVICE_HOST 去掉结尾斜杠
build / build (push) Successful in 4m42s
避免与接口路径拼接时出现双斜杠(base.yunhaixingtong.com/coursehomework + /api/...)。
仅本地 dev 生效;build 产物不读任何 .env.*,不影响线上。
2026-09-22 14:47:00 +08:00
lijing d075c4da5d fix: 作业模块契约缺陷修复(B-01~B-09)+ 列表页状态/操作列图标化统一
build / build (push) Successful in 6m16s
契约与健壮性(明细见 bug检测与修复.md):
- B-01 学生端补 allowLate,恢复「截止后补交」能力
- B-02 ReviewWorkbench 附件 URL 补 serviceHost,修线上图片/下载 404
- B-03/B-04 统计页、全部作业页幻影字段:前端降级 + 后端补字段
- B-05 详情页「接收班级」兜底;B-08 NewHomework 编辑回显与班级树加载竞态
- B-09 移除 api/index.ts 未定义的 GlobalFetch 与硬编码 baseURL

列表页界面统一(我布置的 / 全部作业):
- 状态列统一走 Utils.HW_STATUS_META + hwStatusPill(图标 + 文字 + 同色浅底胶囊)
- 操作列改图标按钮:提交情况 icon-chakan、批阅 icon-shenpi,低频操作收进「更多」下拉(功能全保留)
- 两页操作列同宽,切页不跳列;草稿箱状态列加宽以容纳「定时 …」胶囊
- Submissions 批阅图标与列表行操作对齐

构建:npm run build 通过(exit 0)
2026-09-22 12:30:00 +08:00
lijing cbc7c4f86d fix: 修复退出跳错域、二级页高亮与落地页权限口径
build / build (push) Successful in 3m56s
2026-09-21 12:14:00 +08:00
lijing 66cdf7c5a1 feat: 提交课程作业前端工程源码(Vue3 + Vite + view-ui-plus) 2026-09-21 12:14:00 +08:00
admin 0749e0b9c5 ci: init build workflow [skip ci] 2026-09-20 18:01:51 +08:00
admin b4ad6026cc Initial commit 2026-09-20 18:01:48 +08:00
5 changed files with 5 additions and 500 deletions
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -238,7 +238,7 @@ onMounted(async () => {
<span style="color: #515a6e">待批作业:</span> <span style="color: #515a6e">待批作业:</span>
<Select :model-value="serid" style="width: 380px" placeholder="选择一份有待批的作业" filterable :loading="loadingHw" @on-change="pickHw"> <Select :model-value="serid" style="width: 380px" placeholder="选择一份有待批的作业" filterable :loading="loadingHw" @on-change="pickHw">
<Option v-for="hw in homeworks" :key="hw.id" :value="hw.id"> <Option v-for="hw in homeworks" :key="hw.id" :value="hw.id">
{{ hw.subjectName ? hw.subjectName + " · " : "" }}{{ hw.title }}(待批 {{ hw.progress!.pendingGrade }}) {{ hw.subject ? hw.subject + " · " : "" }}{{ hw.title }}(待批 {{ hw.progress!.pendingGrade }})
</Option> </Option>
</Select> </Select>
</div> </div>
+1 -1
View File
@@ -170,7 +170,7 @@ function statusCell(h: any, code: string, text?: string) {
const columns = [ const columns = [
{ title: "序号", type: "index", width: 76, align: "center" }, { title: "序号", type: "index", width: 76, align: "center" },
{ title: "标题", key: "title", minWidth: 300, align: "left", tooltip: true }, { title: "标题", key: "title", minWidth: 300, align: "left", tooltip: true },
{ title: "学科", key: "subjectName", width: 120, align: "center" }, { title: "学科", key: "subject", width: 120, align: "center" },
{ {
title: "班级", title: "班级",
width: 190, width: 190,
+1 -1
View File
@@ -43,7 +43,7 @@ const HW_STATUS_TEXT: Record<string, string> = { draft: "草稿", collecting: "
/** 各作业进度表列(render 显式标注 h/p 类型,避免隐式 any) */ /** 各作业进度表列(render 显式标注 h/p 类型,避免隐式 any) */
const hwColumns = [ const hwColumns = [
{ title: "作业", key: "title", minWidth: 220, tooltip: true }, { title: "作业", key: "title", minWidth: 220, tooltip: true },
{ title: "学科", key: "subjectName", width: 90, align: "center" }, { title: "学科", key: "subject", width: 90, align: "center" },
{ {
title: "状态", title: "状态",
width: 100, width: 100,
+2 -2
View File
@@ -358,7 +358,7 @@ const pubColumns = computed(() => [
() => p.row.title () => p.row.title
), ),
}, },
{ title: "学科", key: "subjectName", width: 120, align: "center" }, { title: "学科", key: "subject", width: 120, align: "center" },
{ {
title: "班级", title: "班级",
width: 190, width: 190,
@@ -446,7 +446,7 @@ function onPubMore(name: string, row: HomeworkV2Vo) {
const draftColumns = computed(() => [ const draftColumns = computed(() => [
{ title: "序号", type: "index", width: 76, align: "center" }, { title: "序号", type: "index", width: 76, align: "center" },
{ title: "标题", key: "title", minWidth: 300, align: "left", tooltip: true }, { title: "标题", key: "title", minWidth: 300, align: "left", tooltip: true },
{ title: "学科", key: "subjectName", width: 120, align: "center" }, { title: "学科", key: "subject", width: 120, align: "center" },
{ {
title: "班级", title: "班级",
width: 190, width: 190,