瀏覽代碼

ficc小程序管理-语音播报统计

jwyu 1 年之前
父節點
當前提交
093dcc7b34
共有 2 個文件被更改,包括 385 次插入6 次删除
  1. 6 6
      src/router/modules/ficcXcxRoutes.js
  2. 379 0
      src/views/dataReport_manage/voicePlayList.vue

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

@@ -72,12 +72,12 @@ export default [
 				name:"弹幕管理",
 				component:()=>import('@/views/interactive_manage/bulletChatList.vue')
 			},
-            // {
-			// 	path:'voicePlayStatistics',
-			// 	component: () => import('@/views/dataReport_manage/voicePlayList.vue'),
-			// 	name: '语音播报统计',
-			// 	hidden: false
-			// },
+            {
+				path:'voicePlayStatistics',
+				component: () => import('@/views/dataReport_manage/voicePlayList.vue'),
+				name: '语音播报统计',
+				hidden: false
+			},
             // {
 			// 	path:'reportlabel',
 			// 	component:()=> import('@/views/report_manage/tagLib.vue'),

+ 379 - 0
src/views/dataReport_manage/voicePlayList.vue

@@ -0,0 +1,379 @@
+<script setup>
+import { reactive } from 'vue'
+import { Search } from "@element-plus/icons-vue";
+import { dataMainInterface, interactiveInterface, customInterence } from '@/api/api.js'
+
+function formatSource(e) {
+  if (e == 1) {
+    return '小程序'
+  } else if (e == 2) {
+    //实际为小程序pc
+    return 'PC端'
+  } else if (e == 3) {
+    //实际为web pc
+    return 'PC端'
+  } else {
+    return '--'
+  }
+}
+
+
+const pageState = reactive({
+  sectionOpts: [],//板块选项
+  selectSec: '',//选择的板块
+  varietyOpts: [],//品种选项
+  selectVari: '',//选择的品种
+  userOpts: [],//
+  selectUser: '',
+  keyword: '',
+  ClickSort: '',
+
+  tableData: [],
+  page_no: 1,
+  pageSize: 15,
+  totals: 0,
+
+  showDia: false,
+  clickTableData: [],
+  page_no_click: 1,
+  pageSizeClick: 15,
+  totalsClick: 0,
+  curTitle: '',
+  curNum: '',
+  curId: 0,
+})
+
+
+async function geTableList() {
+  const res = await dataMainInterface.voicePlayStatistic({
+    CurrentIndex: pageState.page_no,
+    PageSize: pageState.pageSize,
+    SectionId: pageState.selectSec,
+    VarietyId: pageState.selectVari,
+    AdminId: pageState.selectUser,
+    Title: pageState.keyword,
+    ClickSort: pageState.ClickSort
+  })
+  if (res.Ret != 200) return
+  const { List, Paging } = res.Data;
+
+  pageState.tableData = List || [];
+  pageState.totals = Paging.Totals;
+}
+
+function handleCurrentChange(e) {
+  pageState.page_no = e
+  geTableList()
+}
+
+function handleFilter() {
+  pageState.page_no = 1
+  geTableList()
+}
+
+function sortChangeHandle(item) {
+  if (item.order == "descending") {
+    pageState.ClickSort = 2
+  } else if (item.order == "ascending") {
+    pageState.ClickSort = 1
+  } else {
+    pageState.ClickSort = ''
+  }
+  pageState.page_no = 1
+  geTableList()
+}
+
+
+function handleShowDetail(item) {
+  pageState.curTitle = item.BroadcastName
+  pageState.curNum = item.VisitCount
+  pageState.curId = item.BroadcastId
+  pageState.clickTableData = []
+  pageState.page_no_click = 1
+  pageState.totalsClick = 0
+  getDetail()
+  pageState.showDia = true
+}
+
+//获取某个语音播报详情数据
+async function getDetail() {
+  const res = await dataMainInterface.voicePlayDetailSta({
+    CurrentIndex: pageState.page_no_click,
+    PageSize: pageState.pageSizeClick,
+    BroadcastId: Number(pageState.curId)
+  })
+  if (res.Ret != 200) return
+  const { List, Paging } = res.Data;
+
+  pageState.clickTableData = List || [];
+  pageState.totalsClick = Paging.Totals;
+}
+
+function handleClickCurrentChange(e) {
+  pageState.page_no_click = e
+  getDetail()
+}
+
+//获取语音管理员筛选项
+async function getUserOpts() {
+  const res = await interactiveInterface.messageManageList({
+    RoleTypeCode: 'yb_voice_admin',
+    PageSize: 10000,
+    CurrentIndex: 1
+  })
+  if (res.Ret === 200) {
+    pageState.userOpts = res.Data.List || []
+  }
+}
+
+//获取品种数据
+async function getClassifyList() {
+  const res = await customInterence.getvariety({ CompanyType: "ficc" })
+  if (res.Ret !== 200) return
+  pageState.varietyOpts = res.Data.List || []
+}
+
+//获取板块数据
+async function getSectionList() {
+  const res = await interactiveInterface.voiceList({
+    CurrentIndex: pageState.page_no,
+    PageSize: 100000
+  })
+  if (res.Ret !== 200) return
+  const { List, Paging } = res.Data;
+
+  pageState.sectionOpts = List || [];
+}
+
+
+
+
+
+function initPage() {
+  geTableList()
+  getUserOpts()
+  getClassifyList()
+  getSectionList()
+}
+initPage()
+
+</script>
+
+<template>
+  <div class="voice-play-list-page">
+    <div class="top-filter-wrap">
+      <el-select
+        v-model="pageState.selectSec"
+        placeholder="请选择板块名称"
+        clearable
+        @change="handleFilter"
+      >
+        <el-option
+          v-for="item in pageState.sectionOpts"
+          :key="item.SectionId"
+          :label="item.SectionName"
+          :value="item.SectionId"
+        >
+        </el-option>
+      </el-select>
+      <el-cascader
+        v-model="pageState.selectVari"
+        placeholder="请选择品种"
+        :options="pageState.varietyOpts"
+        :props="{
+          value: 'ChartPermissionId',
+          label: 'ClassifyName',
+          children: 'Items',
+          emitPath: false,
+        }"
+        :show-all-levels="false"
+        ref="cascader"
+        clearable
+        @change="handleFilter"
+        style="margin: 0 20px"
+      ></el-cascader>
+      <el-select
+        v-model="pageState.selectUser"
+        filterable
+        placeholder="请选择语音管理员"
+        clearable
+        @change="handleFilter"
+      >
+        <el-option
+          v-for="item in pageState.userOpts"
+          :key="item.AdminId"
+          :label="item.RealName"
+          :value="item.AdminId"
+        >
+        </el-option>
+      </el-select>
+      <el-input
+        placeholder="请输入"
+        v-model="pageState.keyword"
+        style="max-width: 400px; margin-bottom: 8px; float: right"
+        @input="handleFilter"
+        clearable
+        :prefix-icon="Search"
+      >
+      </el-input>
+    </div>
+    <div>
+      <el-table
+        :data="pageState.tableData"
+        border
+        style="width: 100%"
+        @sort-change="sortChangeHandle"
+      >
+        <el-table-column prop="BroadcastName" label="语音标题" align="center" />
+        <el-table-column prop="SectionName" label="板块名称" align="center" />
+        <el-table-column
+          prop="VarietyName"
+          label="品种"
+          align="center"
+          width="200"
+        />
+        <el-table-column
+          prop="PublishTime"
+          label="发布时间"
+          align="center"
+          width="200"
+        />
+        <el-table-column
+          prop="Author"
+          label="语音管理员"
+          align="center"
+          width="200"
+        />
+        <el-table-column
+          prop="VisitCount"
+          label="点击量"
+          width="200"
+          align="center"
+          sortable="custom"
+        >
+          <template #default="scope">
+            <span
+              style="color: #409eff; cursor: pointer"
+              @click="handleShowDetail(scope.row)"
+              >{{ scope.row.VisitCount }}</span
+            >
+          </template>
+        </el-table-column>
+        <template #empty>
+          <div style="margin: 50px 0">
+            <img
+              style="width: 150px"
+              src="~@/assets/img/cus_m/nodata.png"
+              alt=""
+            />
+            <div>暂无数据~</div>
+          </div>
+        </template>
+      </el-table>
+      <el-pagination
+        layout="total,prev,pager,next,jumper"
+        background
+        :current-page="pageState.page_no"
+        @current-change="handleCurrentChange"
+        :page-size="pageState.pageSize"
+        :total="pageState.totals"
+        style="float: right; margin-top: 20px"
+      >
+      </el-pagination>
+    </div>
+
+    <!-- 点击量弹窗 -->
+    <el-dialog
+      v-model="pageState.showDia"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      class="dialog"
+      center
+      width="900px"
+      draggable
+      title="点击量详情"
+    >
+      <div class="click-detail-dia-warp">
+        <div class="title">{{ pageState.curTitle }}</div>
+        <div class="num">点击量:{{ pageState.curNum }}</div>
+        <el-table :data="pageState.clickTableData" border style="width: 100%">
+          <el-table-column prop="RealName" label="用户姓名" align="center" />
+          <el-table-column prop="CompanyName" label="公司名称" align="center" />
+          <el-table-column
+            prop="CompanyStatus"
+            label="客户状态"
+            align="center"
+            width="100"
+          />
+          <el-table-column
+            prop="VisitCount"
+            label="点击次数"
+            align="center"
+            width="100"
+          />
+          <el-table-column
+            prop="Source"
+            label="点击来源"
+            align="center"
+            width="100"
+          >
+            <template #default="scope">
+              <span>{{ formatSource(scope.row.Source) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="CreateTime"
+            label="最近一次点击时间"
+            align="center"
+            width="180"
+          />
+          <template #empty>
+            <div style="margin: 50px 0">
+              <img
+                style="width: 100px"
+                src="~@/assets/img/cus_m/nodata.png"
+                alt=""
+              />
+              <div>暂无数据~</div>
+            </div>
+          </template>
+        </el-table>
+        <el-pagination
+          layout="total,prev,pager,next,jumper"
+          background
+          :current-page="pageState.page_no_click"
+          @current-change="handleClickCurrentChange"
+          :page-size="pageState.pageSizeClick"
+          :total="pageState.totalsClick"
+          style="float: right; margin-top: 20px"
+        >
+        </el-pagination>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.voice-play-list-page {
+  background: #fff;
+  border: 1px solid #ececec;
+  border-radius: 4px;
+  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
+  padding: 30px 30px 100px 30px;
+  min-height: 80vh;
+}
+.top-filter-wrap {
+  margin-bottom: 30px;
+}
+
+.click-detail-dia-warp {
+  padding-bottom: 100px;
+  .title {
+    font-size: 14px;
+    margin-bottom: 10px;
+  }
+  .num {
+    margin-bottom: 10px;
+  }
+}
+</style>