浏览代码

✨feat(item): support fileIdList in ItemVO and update file selection logic

Shinohara Haruna 6 月之前
父节点
当前提交
375187709f
共有 2 个文件被更改,包括 39 次插入10 次删除
  1. 4 0
      smsb-plus-ui/src/api/smsb/source/item_type.ts
  2. 35 10
      smsb-plus-ui/src/views/smsb/item/index.vue

+ 4 - 0
smsb-plus-ui/src/api/smsb/source/item_type.ts

@@ -1,4 +1,8 @@
 export interface ItemVO {
+  /**
+   * 资源ID列表
+   */
+  fileIdList?: (string | number)[];
   /**
    * 主键ID
    */

+ 35 - 10
smsb-plus-ui/src/views/smsb/item/index.vue

@@ -398,6 +398,7 @@ const getList = async () => {
 const getFileList = async () => {
   dialogLoading.value = true;
   try {
+    // console.log('分页参数:', dialogQueryParams.value);
     const res = await listMinioData(dialogQueryParams.value);
     minioDataList.value = res.rows.map((data) => ({
       ...data,
@@ -405,16 +406,16 @@ const getFileList = async () => {
     }));
     fileTotal.value = res.total;
     // After data loads, restore selections
-    nextTick(() => {
-      if (selectedFiles.value?.length) {
-        const selectedIds = new Set(selectedFiles.value.map((f) => f.id));
-        minioDataList.value.forEach((row) => {
-          if (selectedIds.has(row.id)) {
-            fileTable.value?.toggleRowSelection(row, true);
-          }
-        });
-      }
-    });
+    await nextTick();
+    if (selectedFiles.value?.length) {
+      const selectedIds = new Set(selectedFiles.value.map((f) => f.id));
+      minioDataList.value.forEach((row) => {
+        if (selectedIds.has(row.id)) {
+          fileTable.value?.toggleRowSelection(row, true);
+        }
+      });
+      // console.log('本页高亮选中:', [...selectedIds]);
+    }
   } finally {
     dialogLoading.value = false;
   }
@@ -519,6 +520,30 @@ const handleUpdate = async (row?: ItemVO) => {
       Object.assign(form.value, res.data);
       dialog.visible = true;
       dialog.title = '修改节目管理';
+      // 资源ID列表字段,改为fileIdList
+      const fileIds = Array.isArray(res.data.fileIdList) ? res.data.fileIdList : [];
+      // console.log('编辑轮播组,资源ID列表:', fileIds);
+      if (fileIds.length > 0) {
+        const fileRes = await listMinioData({ ids: fileIds });
+        // 只赋值 selectedFiles,不动 minioDataList
+        selectedFiles.value = fileIds.map((id: string | number, idx: number) => {
+          const file = fileRes.rows.find((f: any) => String(f.id) === String(id));
+          return file
+            ? {
+                id: file.id,
+                name: file.originalName,
+                type: file.type,
+                duration: file.type === 1 ? 10 : Number(file.duration),
+                order: idx + 1
+              }
+            : null;
+        }).filter(Boolean);
+        // console.log('selectedFiles.value:', selectedFiles.value);
+      } else {
+        selectedFiles.value = [];
+      }
+      // 打开弹窗后刷新分页列表
+      await getFileList();
     } else {
       // 跳转页面进行数据关联
       proxy.$router.push('/source/split/edit/' + res.data.id);