Sfoglia il codice sorgente

✨feat(smsb): Add edit history feature for split-screen items

Shinohara Haruna 6 mesi fa
parent
commit
de1c47658f

+ 15 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbItemController.java

@@ -3,6 +3,7 @@ package com.inspur.source.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.inspur.source.domain.bo.ItemSplitUploadReqBo;
 import com.inspur.source.domain.bo.SmsbItemBo;
+import com.inspur.source.domain.vo.EditHistoryVo;
 import com.inspur.source.domain.vo.ItemStatisticsVo;
 import com.inspur.source.domain.vo.SmsbItemSplitScreenVo;
 import com.inspur.source.domain.vo.SmsbItemVo;
@@ -122,6 +123,20 @@ public class SmsbItemController extends BaseController {
         return toAjax(smsbItemService.editSplit(bo));
     }
 
+    /**
+     * 分屏组节目内容编辑历史
+     *
+     * @param itemId 分屏组id
+     */
+    @GetMapping("/editHistory/{itemId}")
+    public R<List<EditHistoryVo>> editHistory(@PathVariable String itemId,
+                                                   @RequestParam(defaultValue = "2") Integer type) {
+        if (type == 1) {
+            return R.fail("还没做");
+        }
+        return R.ok(smsbItemService.getSplitEditHistory(itemId));
+    }
+
     /**
      * 删除节目管理
      *

+ 12 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/domain/vo/EditHistoryVo.java

@@ -0,0 +1,12 @@
+package com.inspur.source.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class EditHistoryVo {
+    private String operName;
+    private String operParam;
+    private Date operTime;
+}

+ 10 - 1
smsb-modules/smsb-source/src/main/java/com/inspur/source/mapper/SmsbItemSplitScreenMapper.java

@@ -1,9 +1,13 @@
 package com.inspur.source.mapper;
 
 import com.inspur.source.domain.SmsbItemSplitScreen;
+import com.inspur.source.domain.vo.EditHistoryVo;
 import com.inspur.source.domain.vo.SmsbItemSplitScreenVo;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+
 /**
  * 分屏组管理Mapper接口
  *
@@ -11,5 +15,10 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  * @date 2025-03-04
  */
 public interface SmsbItemSplitScreenMapper extends BaseMapperPlus<SmsbItemSplitScreen, SmsbItemSplitScreenVo> {
-
+    /**
+     * 查询编辑历史
+     * @param itemId 查询的itemId
+     * @return 编辑历史列表
+     */
+    List<EditHistoryVo> selectSplitEditHistory(@Param("itemId") String itemId);
 }

+ 8 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/ISmsbItemService.java

@@ -1,6 +1,7 @@
 package com.inspur.source.service;
 
 import com.inspur.source.domain.bo.ItemSplitUploadReqBo;
+import com.inspur.source.domain.vo.EditHistoryVo;
 import com.inspur.source.domain.vo.ItemStatisticsVo;
 import com.inspur.source.domain.vo.SmsbItemSplitScreenVo;
 import com.inspur.source.domain.vo.SmsbItemVo;
@@ -96,4 +97,11 @@ public interface ISmsbItemService {
      * @return
      */
     Boolean editSplit(ItemSplitUploadReqBo bo);
+
+    /**
+     * 获取分屏组节目编辑历史
+     * @param id 分屏组id
+     * @return 历史记录列表
+     */
+    List<EditHistoryVo> getSplitEditHistory(String id);
 }

+ 12 - 4
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbItemServiceImpl.java

@@ -11,10 +11,7 @@ import com.inspur.source.domain.SmsbItemSplitScreen;
 import com.inspur.source.domain.bo.ItemFileRelReqBo;
 import com.inspur.source.domain.bo.ItemSplitUploadReqBo;
 import com.inspur.source.domain.bo.SmsbItemBo;
-import com.inspur.source.domain.vo.ItemStatisticsVo;
-import com.inspur.source.domain.vo.SmsbItemPushVo;
-import com.inspur.source.domain.vo.SmsbItemSplitScreenVo;
-import com.inspur.source.domain.vo.SmsbItemVo;
+import com.inspur.source.domain.vo.*;
 import com.inspur.source.mapper.SmsbItemFileRelMapper;
 import com.inspur.source.mapper.SmsbItemMapper;
 import com.inspur.source.mapper.SmsbItemSplitScreenMapper;
@@ -119,6 +116,17 @@ public class SmsbItemServiceImpl implements ISmsbItemService {
         return vo;
     }
 
+    /**
+     * 获取节目分屏组编辑历史(返回Map,适配SQL返回字段)
+     *
+     * @param itemId itemId字符串
+     * @return 编辑历史列表
+     */
+    @Override
+    public List<EditHistoryVo> getSplitEditHistory(String itemId) {
+        return itemSplitScreenMapper.selectSplitEditHistory(itemId);
+    }
+
     /**
      * 查询符合条件的节目管理列表
      *

+ 9 - 1
smsb-modules/smsb-source/src/main/resources/mapper/SmsbItemSplitScreenMapper.xml

@@ -3,5 +3,13 @@
     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.inspur.source.mapper.SmsbItemSplitScreenMapper">
-
+    <select id="selectSplitEditHistory" resultType="com.inspur.source.domain.vo.EditHistoryVo">
+        SELECT oper_name, oper_param, MIN(oper_time) as oper_time
+        FROM sys_oper_log
+        WHERE oper_url = '/source/item/split'
+          AND oper_param LIKE '%"itemId":%'
+          AND JSON_CONTAINS(oper_param, CONCAT('"', #{itemId}, '"'), '$.itemId')
+        GROUP BY oper_name, oper_param
+        ORDER BY oper_time
+    </select>
 </mapper>

+ 12 - 0
smsb-plus-ui/src/api/smsb/source/item.ts

@@ -91,3 +91,15 @@ export const splitItemInfo = (id: string | number) => {
     method: 'get'
   });
 };
+
+/**
+ * 获取节目编辑历史
+ * @param itemId
+ */
+export const getEditHistory = (itemId: string | number, type: 1 | 2) => {
+  return request({
+    url: '/source/item/editHistory/' + itemId,
+    method: 'get',
+    params: { type }
+  });
+};

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

@@ -1,3 +1,9 @@
+export interface SplitEditHistoryVo {
+  operName: string;
+  operParam: string;
+  operTime: string;
+}
+
 export interface ItemVO {
   /**
    * 资源ID列表

+ 49 - 14
smsb-plus-ui/src/views/smsb/item/index.vue

@@ -89,18 +89,30 @@
         <el-table-column label="创建人" header-align="left" prop="createUser" width="120" :show-overflow-tooltip="true" />
         <el-table-column label="创建时间" header-align="left" prop="createTime" width="160" />
         <el-table-column label="更新时间" header-align="left" prop="updateTime" width="160" />
-        <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width" width="120">
-          <template #default="scope">
-            <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
-                v-hasPermi="['source:item:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
-                v-hasPermi="['source:item:remove']"></el-button>
-            </el-tooltip>
-          </template>
-        </el-table-column>
+        <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width" width="180">
+  <template #default="scope">
+    <el-tooltip content="修改" placement="top">
+      <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+        v-hasPermi="['source:item:edit']"></el-button>
+    </el-tooltip>
+    <el-tooltip content="删除" placement="top">
+      <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+        v-hasPermi="['source:item:remove']"></el-button>
+    </el-tooltip>
+    <el-tooltip content="编辑历史" placement="top">
+      <el-button link type="primary" icon="Clock" @click="onShowEditHistory(scope.row)"></el-button>
+    </el-tooltip>
+  </template>
+</el-table-column>
+
+<!-- 编辑历史弹窗 -->
+<el-dialog title="编辑历史" v-model="editHistoryDialog.visible" width="600px" append-to-body>
+  <el-table :data="editHistoryDialog.list" size="small" style="width: 100%">
+    <el-table-column prop="operName" label="操作人" width="120" />
+    <el-table-column prop="operParam" label="操作参数" />
+    <el-table-column prop="operTime" label="操作时间" width="180" />
+  </el-table>
+</el-dialog>
       </el-table>
 
       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
@@ -293,9 +305,32 @@
 
 <script setup name="Item" lang="ts">
 import draggable from 'vuedraggable';
-import { onActivated } from 'vue';
+import { onActivated, reactive } from 'vue';
+import { getEditHistory } from '@/api/smsb/source/item';
+import type { SplitEditHistoryVo, ItemVO, ItemQuery, ItemForm } from '@/api/smsb/source/item_type';
+
+// 编辑历史弹窗数据
+const editHistoryDialog = reactive({
+  visible: false,
+  list: [] as SplitEditHistoryVo[],
+});
+
+/**
+ * 打开编辑历史弹窗
+ * @param row 当前行数据
+ */
+function onShowEditHistory(row: ItemVO) {
+  editHistoryDialog.visible = true;
+  editHistoryDialog.list = [];
+  // type: 1=轮播组, 2=分屏组
+  const type = row.itemType === 1 ? 1 : 2;
+  getEditHistory(row.id, type).then(res => {
+    console.log('编辑历史数据:', res.data);
+    editHistoryDialog.list = res.data || [];
+  });
+}
+
 import { listItem, getItem, delItem, addItem, updateItem, itemStatistics } from '@/api/smsb/source/item';
-import { ItemVO, ItemQuery, ItemForm } from '@/api/smsb/source/item_type';
 import { MinioDataQuery, MinioDataVO } from '@/api/smsb/source/minioData_type';
 import { listMinioData } from '@/api/smsb/source/minioData';
 import { nextTick } from 'vue';