Browse Source

ficc小程序管理-弹幕管理

jwyu 1 year ago
parent
commit
f883686889
2 changed files with 220 additions and 5 deletions
  1. 5 5
      src/router/modules/ficcXcxRoutes.js
  2. 215 0
      src/views/interactive_manage/bulletChatList.vue

+ 5 - 5
src/router/modules/ficcXcxRoutes.js

@@ -67,11 +67,11 @@ export default [
 			// 	name:"问答评论",
 			// 	component:()=>import('@/views/interactive_manage/questionComment.vue')
 			// },
-            // {
-			// 	path:"bulletChatList",
-			// 	name:"弹幕管理",
-			// 	component:()=>import('@/views/interactive_manage/bulletChatList.vue')
-			// },
+            {
+				path:"bulletChatList",
+				name:"弹幕管理",
+				component:()=>import('@/views/interactive_manage/bulletChatList.vue')
+			},
             // {
 			// 	path:'voicePlayStatistics',
 			// 	component: () => import('@/views/dataReport_manage/voicePlayList.vue'),

+ 215 - 0
src/views/interactive_manage/bulletChatList.vue

@@ -0,0 +1,215 @@
+<script setup>
+import { reactive, ref } from 'vue'
+import { videoInterface } from '@/api/api.js'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { Search } from "@element-plus/icons-vue";
+
+function formatSeconds(e) {
+  let tem = parseInt(e)
+  let min = parseInt(tem / 60)
+  let sen = parseInt(tem % 60)
+  if (min > 1) {
+    return `${min}分${sen}秒`
+  } else {
+    return `${sen}秒`
+  }
+}
+
+const pageState = reactive({
+  source: '',
+  sourceOpt: [{ label: '视频社区', val: 1 }, { label: '线上路演', val: 2 }],
+  keyWord: '',
+
+  showDataLoading: false,
+  tableData: [],
+  page: 1,
+  pageSize: 15,
+  total: 0,
+  tableColums: [
+    {
+      label: '弹幕内容',
+      key: 'Content',
+      minwidthsty: '200px',
+      toolTip: true
+    },
+    {
+      label: '视频标题',
+      key: 'Title',
+      minwidthsty: '150px'
+    },
+    {
+      label: '所属模块',
+      key: 'Source',
+    },
+    {
+      label: '时间点',
+      key: 'Seconds',
+    },
+    {
+      label: '发送时间',
+      key: 'CreateTime',
+      minwidthsty: '120px'
+    },
+    {
+      label: '发送人',
+      key: 'UserName',
+    },
+    {
+      label: '弹幕来源',
+      key: 'SourceAgent',
+    },
+    {
+      label: '操作',
+      key: 'opt',
+    },
+  ]
+
+
+})
+
+async function getList() {
+  pageState.showDataLoading = true
+  const res = await videoInterface.bulletChatList({
+    PageSize: pageState.pageSize,
+    CurrentIndex: pageState.page,
+    Source: pageState.source,
+    Keywords: pageState.keyWord
+  })
+  pageState.showDataLoading = false
+  if (res.Ret === 200) {
+    pageState.total = res.Data.Paging.Totals
+    pageState.tableData = res.Data.List || []
+  }
+}
+getList()
+
+function search() {
+  pageState.page = 1
+  pageState.source = ''
+  getList()
+}
+
+function handlePageChange(e) {
+  pageState.page = e
+  getList()
+}
+
+function typeChange() {
+  pageState.keyWord = ''
+  pageState.page = 1
+  getList()
+}
+
+// 删除弹幕
+function handleDel(item) {
+  ElMessageBox.confirm('是否确认删除该条弹幕,删除后不可恢复!', '提示', {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning'
+  }).then(() => {
+    videoInterface.bulletChatDel({ Id: item.Id }).then(res => {
+      if (res.Ret === 200) {
+        ElMessage.success('删除成功')
+        pageState.page = 1
+        pageState.source = ''
+        getList()
+      }
+    })
+  }).catch(() => {
+
+  });
+}
+
+</script>
+
+<template>
+  <div class="bullet-chat-page">
+    <div class="top-box">
+      <el-select
+        v-model="pageState.source"
+        clearable
+        placeholder="请选择所属模块"
+        @change="typeChange"
+      >
+        <el-option
+          v-for="item in pageState.sourceOpt"
+          :key="item.val"
+          :label="item.label"
+          :value="item.val"
+        >
+        </el-option>
+      </el-select>
+      <el-input
+        v-model="pageState.keyWord"
+        placeholder="请输入弹幕内容或视频标题"
+        @input="search"
+        clearable
+        style="width: 400px; float: right"
+        :prefix-icon="Search"
+      ></el-input>
+    </div>
+    <div class="main">
+      <el-table
+        ref="table"
+        border
+        :data="pageState.tableData"
+        v-loading="pageState.showDataLoading"
+        element-loading-text="加载中..."
+        style="margin-top: 20px"
+      >
+        <el-table-column
+          v-for="item in pageState.tableColums"
+          :key="item.label"
+          :label="item.label"
+          :width="item.widthsty"
+          :min-width="item.minwidthsty"
+          :show-overflow-tooltip="item.toolTip"
+          align="center"
+          :prop="item.key"
+        >
+          <template #default="{ row }">
+            <span v-if="item.key == 'Source'">{{
+              row.Source === 1 ? "视频社区" : "线上路演"
+            }}</span>
+            <span v-else-if="item.key === 'Seconds'">{{
+              formatSeconds(row.Seconds)
+            }}</span>
+            <span v-else-if="item.key === 'SourceAgent'">{{
+              row.SourceAgent == "1" ? "小程序" : "pc端"
+            }}</span>
+            <span
+              v-else-if="item.key === 'opt'"
+              style="color: #ff0000; cursor: pointer"
+              @click="handleDel(row)"
+              >删除</span
+            >
+            <span v-else>{{ row[item.key] || "——" }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div>
+        <el-pagination
+          layout="total,prev,pager,next"
+          background
+          :current-page="pageState.page"
+          @current-change="handlePageChange"
+          :page-size="pageState.pageSize"
+          :total="pageState.total"
+          style="float: right; margin-top: 20px"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.bullet-chat-page {
+  min-height: 70vh;
+  padding: 20px 30px;
+  background: #fff;
+  border: 1px solid #ececec;
+  border-radius: 4px;
+  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
+}
+</style>