liyongli 1 年之前
父节点
当前提交
3a1bc93bd8
共有 4 个文件被更改,包括 298 次插入126 次删除
  1. 76 0
      src/api/index.js
  2. 2 1
      src/config/index.js
  3. 2 4
      src/utils/request.js
  4. 218 121
      src/view/backLook/index.vue

+ 76 - 0
src/api/index.js

@@ -401,6 +401,7 @@ export function queryDraw(ori) {
     method: 'POST',
   });
 }
+
 export function ChartGpt(data) {
   return ajax({
     noLoad: true,
@@ -411,3 +412,78 @@ export function ChartGpt(data) {
     data,
   });
 }
+
+export function getFM(data) {
+  return ajax({
+    noLoad: true,
+    api: '/epg/tv',
+    method: 'GET',
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+    data,
+  });
+}
+
+export function getTV(data) {
+  return ajax({
+    noLoad: true,
+    api: '/epg/fm',
+    method: 'GET',
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+    data,
+  });
+}
+
+export function getAllEpg(channelId) {
+  return ajax({
+    noLoad: true,
+    api: '/epg/all?channelId=' + channelId,
+    method: 'GET',
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+  });
+}
+
+export function getKeywords({channelId, page, pageSize}) {
+  return ajax({
+    noLoad: true,
+    api: '/keywords/list?channelId=' + channelId + '&page=' + page + '&pagesize=' + pageSize,
+    method: 'GET',
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+  });
+}
+
+export function createData(data) {
+  return ajax({
+    noLoad: true,
+    api: '/keywords/disable',
+    method: 'POST',
+    data,
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+  });
+}
+
+export function disableEPG(data) {
+  return ajax({
+    noLoad: true,
+    api: '/epg/disable',
+    method: 'POST',
+    data,
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+  });
+}
+
+export function disableKeywords(data) {
+  return ajax({
+    noLoad: true,
+    api: '/keywords/update',
+    method: 'POST',
+    data,
+    base: 'epg',
+    errorToast: '当前访问人数过多,请重试。',
+  });
+}

+ 2 - 1
src/config/index.js

@@ -8,6 +8,7 @@ export default {
         easyDiffusion: "https://diffusion.sxtvs.net",
         chat:"https://gpt.smcic.net/",
         ws: "wss://chatglm.sxtvs.net/queue/join",
-        xzMao: "https://aidoc.sxtvs.net"
+        xzMao: "https://aidoc.sxtvs.net",
+        epg: 'https://ssp-server.smcic.net'
     }
 }

+ 2 - 4
src/utils/request.js

@@ -55,7 +55,7 @@ function ajax(longRange) {
   });
 }
 
-function fetch(longRange) {
+function fetchFunc(longRange) {
   return new Promise((resolve, reject) => {
     const met = (longRange.method || 'GET').toUpperCase();
     const p = {
@@ -65,7 +65,6 @@ function fetch(longRange) {
     };
     if (met !== 'GET') p.body = bodyFunc(longRange.data);
     else longRange.api = longRange.api + bodyGetFunc(longRange.data);
-
     window
       .fetch(config.base[longRange.base || 'origin'] + longRange.api, p)
       .then(res => {
@@ -80,7 +79,6 @@ function fetch(longRange) {
       .then(res => {
         !longRange.noload && loading.close();
 
-        console.log(longRange.errorKey, res);
         if (longRange.noJY) {
           if (
             longRange.errorKey &&
@@ -172,6 +170,6 @@ export default function (longRange) {
       text: 'Loading',
       background: 'rgba(0, 0, 0, 0.1)',
     }));
-  if (longRange.type !== 'ajax' && window.fetch) return fetch(longRange);
+  if (longRange.type !== 'ajax' && window.fetch) return fetchFunc(longRange);
   return ajax(longRange);
 }

+ 218 - 121
src/view/backLook/index.vue

@@ -18,11 +18,11 @@
       </el-form-item>
       <el-form-item label="频率频道:">
         <div
-          :class="{ BKTag: true, BKTag_act: search.plpd === index }"
+          :class="{ BKTag: true, BKTag_act: search.plpd === item.channelId }"
           v-for="(item, index) in pvpd[search.type]"
           :key="index + 'plpd'"
-          v-text="item.name"
-          @click="() => changePlpdFunc(index)"
+          v-text="item.title"
+          @click="() => changePlpdFunc(item.channelId)"
         ></div>
       </el-form-item>
       <el-form-item label="模式:">
@@ -39,7 +39,7 @@
           节目单模式
         </div>
       </el-form-item>
-      <el-form-item v-if="search.mode === 1" label="日期:">
+      <el-form-item v-if="DateList.length && search.mode === 1" label="日期:">
         <div
           :class="{ BKTag: true, BKTag_act: search.date === index }"
           v-for="(item, index) in DateList"
@@ -50,10 +50,11 @@
           <p class="text" v-text="'(' + item.week + ')'"></p>
         </div>
       </el-form-item>
-      <el-form-item v-if="search.mode === 0" label="时间:">
+      <!-- <el-form-item v-if="search.mode === 0" label="时间:">
         <div>
           <el-date-picker
             v-model="search.daterange"
+            @change="pickerChange"
             type="daterange"
             format="YYYY-MM-DD"
             value-format="YYYY-MM-DD"
@@ -63,148 +64,150 @@
             end-placeholder="结束日期"
           />
         </div>
+      </el-form-item> -->
+      <el-form-item v-if="search.mode === 0">
+        <el-button type="primary" @click="() => showAddFunc()"
+          >新增匹配</el-button
+        >
       </el-form-item>
     </el-form>
 
-    <el-table :data="tableData" stripe style="width: 100%">
-      <el-table-column
-        prop="name"
-        :label="search.mode === 0 ? '匹配名称' : '节目名称'"
-      />
-      <el-table-column prop="time" v-if="search.mode === 1" label="播出时间" />
+    <el-table
+      v-if="DateList[search.date]"
+      :data="DateList[search.date].list"
+      stripe
+      style="width: 100%"
+    >
+      <el-table-column prop="title" label="节目" />
+      <el-table-column prop="startTime" label="播出时间" />
+      <el-table-column prop="address" label="是否回看">
+        <template #default="scope">
+          <el-switch
+            v-model="scope.row.statusShow"
+            @change="key => changeEPG(key, scope.row, scope.$index)"
+            class=""
+          />
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-table
+      v-else-if="DatePPList"
+      :data="DatePPList"
+      stripe
+      style="width: 100%"
+    >
+      <el-table-column prop="program" label="节目名称" />
+      <el-table-column prop="address" label="生效周期">
+        <template #default="scope">
+          {{
+            scope.row.startTime !== scope.row.endTime
+              ? scope.row.startTime + ' 至 ' + scope.row.endTime
+              : scope.row.endTime
+          }}
+        </template>
+      </el-table-column>
       <el-table-column prop="address" label="是否回看">
         <template #default="scope">
           <el-switch
-            v-model="tableData[scope.$index].isBack"
-            class="ml-2"
-            style="
-              --el-switch-on-color: #13ce66;
-              --el-switch-off-color: #ff4949;
-            "
+            v-model="scope.row.statusShow"
+            @change="key => changeKeywords(key, scope.row, scope.$index)"
+            class=""
           />
         </template>
       </el-table-column>
     </el-table>
     <br />
-    <el-pagination background layout="prev, pager, next" :total="1000" />
+    <el-pagination
+      v-if="search.mode === 0"
+      background
+      @current-change="chagnepage"
+      layout="prev, pager, next"
+      :page-size="pageSize"
+      :current-page="currentPage"
+      :total="total || 0"
+    />
+
+    <el-dialog v-model="showAdd" :title="changeItem.id ? '编辑' : '新增'">
+      <el-form :model="changeItem" label-width="120px">
+        <el-form-item label="匹配名称">
+          <el-input v-model="changeItem.title" />
+        </el-form-item>
+        <el-form-item label="生效周期">
+          <el-date-picker
+            v-model="changeItem.daterange"
+            @change="pickerChange"
+            type="daterange"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+            range-separator="-"
+            :disabled-date="disabledDate"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit">创建</el-button>
+          <el-button @click="() => showAddFunc()">取消</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
   </div>
 </template>
 
 <script setup>
+import { ElMessage } from 'element-plus';
+
 import Head from '@/components/head.vue';
-import { reactive, ref, nextTick } from 'vue';
+import { ref, nextTick } from 'vue';
+import {
+  getFM,
+  getTV,
+  getAllEpg,
+  getKeywords,
+  createData,
+  disableEPG,
+  disableKeywords,
+} from '@/api/index';
+import dayjs from 'dayjs';
 document.title = '回看配置';
 const search = ref({
   type: 0,
   plpd: 0,
   date: 0,
   mode: 0,
+  //   daterange: [],
+});
+const currentPage = ref(1);
+const pageSize = ref(10);
+const showAdd = ref(false);
+const changeItem = ref({
+  title: '',
   daterange: [],
 });
-const tableData = ref([
-  {
-    name: '狂飙',
-    time: '08:30',
-    isBack: false,
-  },
-]);
+const pvpd = ref([]);
+const DateList = ref([]);
+const DatePPList = ref([]);
+const total = ref(0);
 
-const pvpd = [
-  [
-    {
-      name: '陕西卫视',
-    },
-    {
-      name: '陕西一套',
-    },
-    {
-      name: '陕西二套',
-    },
-    {
-      name: '陕西三套',
-    },
-    {
-      name: '陕西四套',
-    },
-    {
-      name: '陕西五套',
-    },
-    {
-      name: '陕西六套',
-    },
-    {
-      name: '陕西七套',
-    },
-    {
-      name: '陕西八套',
-    },
-    {
-      name: '农林卫视',
-    },
-  ],
-  [
-    {
-      name: '都市广播-陕广新闻',
-    },
-    {
-      name: '故事广播',
-    },
-    {
-      name: '交通广播',
-    },
-    {
-      name: '经济广播-汽车调频',
-    },
-    {
-      name: '秦腔广播',
-    },
-    {
-      name: '青少广播',
-    },
-    {
-      name: '戏曲广播',
-    },
-    {
-      name: '新闻广播',
-    },
-  ],
-];
-const DateList = [
-  {
-    dt: '8月1号',
-    week: '星期二',
-  },
-  {
-    dt: '8月2号',
-    week: '星期三',
-  },
-  {
-    dt: '8月3号',
-    week: '星期四',
-  },
-  {
-    dt: '8月4号',
-    week: '星期五',
-  },
-  {
-    dt: '8月5号',
-    week: '星期六',
-  },
-  {
-    dt: '8月6号',
-    week: '星期日',
-  },
-  {
-    dt: '8月7号',
-    week: '星期一',
-  },
-];
+Promise.all([getFM({}), getTV({})]).then(li => {
+  pvpd.value = li || [];
+  search.value.plpd =
+    li[search.value.type] && li[search.value.type][0]
+      ? li[search.value.type][0].channelId
+      : undefined;
+
+  nextTick(() => getData());
+});
 
 function changeTypeFunc(type) {
   search.value = {
     type,
-    plpd: 0,
+    plpd:
+      pvpd.value[type] && pvpd.value[type][0]
+        ? pvpd.value[type][0].channelId
+        : undefined,
     date: 0,
+    mode: 0,
   };
   nextTick(() => getData());
 }
@@ -214,23 +217,117 @@ function changePlpdFunc(plpd) {
 }
 function changeDateFunc(date) {
   search.value.date = date;
-  nextTick(() => getData());
 }
 function changeModeFunc(mode) {
   search.value.mode = mode;
+  DateList.value = [];
   nextTick(() => getData());
 }
+function showAddFunc(item) {
+  showAdd.value = !showAdd.value;
+  changeItem.value = item || {
+    title: '',
+    daterange: [],
+  };
+}
+function getData() {
+  DateList.value = [];
+  DatePPList.value = [];
+  if (search.value.mode === 1)
+    return getAllEpg(search.value.plpd).then(r => {
+      const list = r || [];
+      let week = ['日', '一', '二', '三', '四', '五', '六'];
+      const DateListValue = [];
+      for (let i = 0; i < list.length; i++) {
+        const v = list[i];
+        const day = dayjs(v.date);
+        DateListValue.push({
+          dt: day.format('YYYY-MM-DD'),
+          week: '星期' + week[day.day()],
+          list: v.epg.map(item => {
+            item.statusShow = item.status === 1;
+            return item;
+          }),
+        });
+      }
+      DateList.value = DateListValue;
+    });
 
-function getData() {}
+  getKeywords({
+    channelId: search.value.plpd,
+    page: currentPage.value,
+    pageSize: pageSize.value,
+  }).then(r => {
+    const Data = r || {};
+    Data.records = Data.records.map(item => {
+      item.statusShow = item.status === 1;
+      return item;
+    });
+    DatePPList.value = Data.records;
+    total.value = Data.total || 0;
+  });
+}
+function onSubmit() {
+  if (!changeItem.value.title || !changeItem.value.daterange) {
+    ElMessage({
+      message: '匹配名称或生效周期不能为空',
+      type: 'warning',
+    });
+    return;
+  }
+  createData({
+    channelId: search.value.plpd,
+    program: changeItem.value.title,
+    startTime: changeItem.value.daterange[0],
+    endTime: changeItem.value.daterange[1],
+  }).then(r => {
+    showAddFunc();
+    getData();
+  });
+}
+function chagnepage(p) {
+  currentPage.value = p;
+  getData();
+}
 
 function disabledDate(time) {
-  return time.getTime() > Date.now() - 86400000;
+  // return time.getTime() > Date.now() - 86400000;
+  return false;
+}
+function pickerChange() {}
+
+function changeEPG(key, item, index) {
+  if (key === item.status) return;
+  disableEPG({
+    title: item.title,
+    channelId: search.value.plpd,
+    startTime: item.startTime,
+    status: item.statusShow ? 1 : 0,
+  }).then(() => {
+    // getData();
+    DateList.value[search.value.date].list[index].status = DateList.value[
+      search.value.date
+    ].list[index].statusShow
+      ? 1
+      : 0;
+  });
+}
+function changeKeywords(key, item, index) {
+  if (key === item.status) return;
+  disableKeywords({
+    id: item.id,
+    status: item.statusShow ? 1 : 0,
+  }).then(() => {
+    DatePPList.value[index].status = DatePPList.value[index].statusShow ? 1 : 0;
+  });
 }
 </script>
 
 <style scoped>
 .BackLook_main {
   padding: 1em;
+  height: calc(100% - 56px);
+  overflow-y: auto;
 }
 .BackLook_main .BKTag {
   padding: 0 1em;
@@ -245,6 +342,6 @@ function disabledDate(time) {
 }
 
 .BackLook_main .cell {
-    color: #000!important;
+  color: #000 !important;
 }
 </style>