Browse Source

Merge branch 'psl_test_souquan' into test

pansl 1 year ago
parent
commit
5e8291ae48
23 changed files with 936 additions and 1453 deletions
  1. 4 4
      src/api/dataStatistics/rechargeStatistics/index.ts
  2. 43 0
      src/api/wxDeliver/index.ts
  3. 2 2
      src/layout/components/header/index.vue
  4. 40 40
      src/router/modules/charge.ts
  5. 35 130
      src/views/dataStatistics/rechargeStatistics/excelTitle.ts
  6. 7 3
      src/views/dataStatistics/rechargeStatistics/index.vue
  7. 198 184
      src/views/dataStatistics/rechargeStatistics/summaryStatistics.vue
  8. 44 22
      src/views/dataStatistics/roiStatistical/excelTitle.ts
  9. 9 5
      src/views/dataStatistics/roiStatistical/index.vue
  10. 1 1
      src/views/pageLayout/viewpagerPageManage/form/create.vue
  11. 1 1
      src/views/settleManage/settlementCenter/tabs/rechargeSettle/withdrawalRecord/form/create.vue
  12. 14 8
      src/views/user/caster/index.vue
  13. 4 2
      src/views/videoManage/videoLibraryList/form/create.vue
  14. 1 4
      src/views/videoManage/videoLibraryList/index.vue
  15. 0 176
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/detail.vue
  16. 77 156
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/create.vue
  17. 0 111
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/subscribeSet.vue
  18. 0 84
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/uploadVideo.vue
  19. 24 11
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/videoSync.vue
  20. 85 133
      src/views/videoManage/wechatAudit/tabs/wechatAuditList/index.vue
  21. 0 86
      src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/excelTitle.ts
  22. 168 0
      src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/form/create.vue
  23. 179 290
      src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/index.vue

+ 4 - 4
src/api/dataStatistics/rechargeStatistics/index.ts

@@ -14,24 +14,24 @@ export function statisticChargeListTotalCharge(params: object) {
 /**
 /**
  * 充值统计-今日充值
  * 充值统计-今日充值
  */
  */
-export function statisticChargeTodayCharge(params?: object) {
+export function statisticChargeTodayCharge(params: object) {
   return http.get('/statistic/charge/todayCharge', params);
   return http.get('/statistic/charge/todayCharge', params);
 }
 }
 /**
 /**
  * 充值统计-本月充值
  * 充值统计-本月充值
  */
  */
-export function statisticChargeCurrentMonthCharge(params?: object) {
+export function statisticChargeCurrentMonthCharge(params: object) {
   return http.get('/statistic/charge/currentMonthCharge', params);
   return http.get('/statistic/charge/currentMonthCharge', params);
 }
 }
 /**
 /**
  * 充值统计-上月充值
  * 充值统计-上月充值
  */
  */
-export function statisticChargeLastMonthCharge(params?: object) {
+export function statisticChargeLastMonthCharge(params: object) {
   return http.get('/statistic/charge/lastMonthCharge', params);
   return http.get('/statistic/charge/lastMonthCharge', params);
 }
 }
 /**
 /**
  * 充值统计-累计充值
  * 充值统计-累计充值
  */
  */
-export function statisticChargeTotalCharge(params?: object) {
+export function statisticChargeTotalCharge(params: object) {
   return http.get('/statistic/charge/totalCharge', params);
   return http.get('/statistic/charge/totalCharge', params);
 }
 }

+ 43 - 0
src/api/wxDeliver/index.ts

@@ -0,0 +1,43 @@
+import http from '@/api/http';
+/**
+ * 提审记录列表
+ */
+export function videoStockWechatCheckList(params: object) {
+  return http.get('/videoStock/wechatCheck/list', params);
+}
+/**
+ * 添加微信提审
+ */
+export function videoStockWechatCheckAdd(params: object) {
+  return http.post('/videoStock/wechatCheck/add', params);
+}
+/**
+ * 一键提审
+ */
+export function videoStockWechatCheckCheck(params: object) {
+  return http.post('/videoStock/wechatCheck/check', params);
+}
+/**
+ * 提审记录-更新
+ */
+export function videoStockWechatCheckUpdate(params: object) {
+  return http.post(`/videoStock/wechatCheck/update`, params);
+}
+/**
+ * 提审记录-删除
+ */
+export function videoStockWechatCheckDelete(params: object) {
+  return http.post(`/videoStock/wechatCheck/delete`, params);
+}
+/**
+ * 同步剧集到微信
+ */
+export function videoStockWechatCheckVideoSeriesSyncWechat(params: object) {
+  return http.post(`/videoStock/wechatCheck/videoSeries/syncWechat`, params);
+}
+/**
+ * 获取微信方的剧集播放链接
+ */
+export function videoStockWechatCheckVideoSeriesMedialink(params: object) {
+  return http.post(`/videoStock/wechatCheck/videoSeries/medialink`, params);
+}

+ 2 - 2
src/layout/components/header/index.vue

@@ -12,8 +12,8 @@
             value-key="id" remote @change="adverChange" reserve-keyword placeholder="请选择投手" :remote-method="remoteMethod">
             value-key="id" remote @change="adverChange" reserve-keyword placeholder="请选择投手" :remote-method="remoteMethod">
             <el-option v-for="item in navDataArr" :key="item.id" :label="item.username" :value="item" />
             <el-option v-for="item in navDataArr" :key="item.id" :label="item.username" :value="item" />
           </el-select>
           </el-select>
-          <el-select v-model="navData.app" style="width:260px;" class="m-2" @change="appChange" value-key="id" clearable
-            filterable placeholder="请选择" size="default">
+          <el-select v-model="navData.app" style="width:260px;" class="m-2" @change="appChange" value-key="id" filterable
+            placeholder="请选择" size="default">
             <el-option v-for="item in miniPrograms" :key="item.id" :label="item.name" :value="item">
             <el-option v-for="item in miniPrograms" :key="item.id" :label="item.name" :value="item">
               <div class="flex items-center">
               <div class="flex items-center">
                 <el-image :src="item.type_logo" style="width: 20px; height: 20px" class="mr-5" fit="contain"></el-image>
                 <el-image :src="item.type_logo" style="width: 20px; height: 20px" class="mr-5" fit="contain"></el-image>

+ 40 - 40
src/router/modules/charge.ts

@@ -1,41 +1,41 @@
-// import { RouteRecordRaw } from 'vue-router';
-// // eslint-disable-next-line @typescript-eslint/ban-ts-comment
-// // @ts-ignore
-// const router: RouteRecordRaw[] = [
-//   {
-//     path: '/charge',
-//     component: () => import('@/layout/index.vue'),
-//     meta: { title: '数据统计', icon: 'user' },
-//     children: [
-//       {
-//         path: 'index',
-//         name: 'user-account11',
-//         meta: { title: '短剧统计', icon: 'home' },
-//         component: () =>
-//           import('@/views/dataStatistics/shortStatistical/index.vue')
-//       },
-//       {
-//         path: 'index3',
-//         name: 'user-account112',
-//         meta: { title: '投入产出', icon: 'home' },
-//         component: () =>
-//           import('@/views/dataStatistics/roiStatistical/index.vue')
-//       },
-//       {
-//         path: 'index1',
-//         name: 'user-account',
-//         meta: { title: '充值统计', icon: 'home' },
-//         component: () =>
-//           import('@/views/dataStatistics/rechargeStatistics/index.vue')
-//       },
-//       {
-//         path: 'index2',
-//         name: 'user-account99',
-//         meta: { title: '微信提审', icon: 'home', hidden: true },
-//         component: () => import('@/views/videoManage/wechatAudit/index.vue')
-//       }
-//     ]
-//   }
-// ];
+import { RouteRecordRaw } from 'vue-router';
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+const router: RouteRecordRaw[] = [
+  {
+    path: '/charge',
+    component: () => import('@/layout/index.vue'),
+    meta: { title: '数据统计', icon: 'user' },
+    children: [
+      {
+        path: 'index',
+        name: 'user-account11',
+        meta: { title: '短剧统计', icon: 'home' },
+        component: () =>
+          import('@/views/dataStatistics/shortStatistical/index.vue')
+      },
+      {
+        path: 'index3',
+        name: 'user-account112',
+        meta: { title: '投入产出', icon: 'home' },
+        component: () =>
+          import('@/views/dataStatistics/roiStatistical/index.vue')
+      },
+      {
+        path: 'index1',
+        name: 'user-account',
+        meta: { title: '充值统计', icon: 'home' },
+        component: () =>
+          import('@/views/dataStatistics/rechargeStatistics/index.vue')
+      },
+      {
+        path: 'index2',
+        name: 'user-account99',
+        meta: { title: '微信提审', icon: 'home', hidden: false },
+        component: () => import('@/views/videoManage/wechatAudit/index.vue')
+      }
+    ]
+  }
+];
 
 
-// export default router;
+export default router;

+ 35 - 130
src/views/dataStatistics/rechargeStatistics/excelTitle.ts

@@ -1,133 +1,38 @@
 // 导出中文/字段
 // 导出中文/字段
-export const titleObj = {
-  时间: 'day_at',
-  优化师: 'username',
-  小程序名称: 'miniprogram_name',
-  充值金额: 'pay_money',
-  充值笔数: 'pay_count',
-  新增普通用户充值总额: 'new_user_common_pay_money',
-  新增会员用户充值总额: 'new_user_vip_pay_money',
-  普通充值总额: 'common_pay_money',
-  普通充值人均: 'common_pay_money_per',
-  普通充值已支付订单数: 'common_pay_count',
-  普通充值未支付订单数: 'common_unpay_count',
-  普通充值支付率: 'common_pay_rate',
-  会员充值总额: 'vip_pay_money',
-  会员充值人均: 'vip_pay_money_per',
-  会员充值已支付订单数: 'vip_pay_count',
-  会员充值未支付订单数: 'vip_unpay_count',
-  会员充值支付率: 'vip_pay_rate',
-};
+import { ref, onMounted, onUnmounted, Ref } from 'vue';
+export const useExcelTitle = (callback?: () => void): any => {
+  const rolesIdentify = inject('rolesIdentify');
+  const title = {
+    时间: 'day_at',
+    优化师: 'username',
+    小程序名称: 'miniprogram_name',
+    充值金额: 'pay_money',
+    充值笔数: 'pay_count',
+    新增普通用户充值总额: 'new_user_common_pay_money',
+    新增会员用户充值总额: 'new_user_vip_pay_money',
+    普通充值总额: 'common_pay_money',
+    普通充值人均: 'common_pay_money_per',
+    普通充值已支付订单数: 'common_pay_count',
+    普通充值未支付订单数: 'common_unpay_count',
+    普通充值支付率: 'common_pay_rate',
+    会员充值总额: 'vip_pay_money',
+    会员充值人均: 'vip_pay_money_per',
+    会员充值已支付订单数: 'vip_pay_count',
+    会员充值未支付订单数: 'vip_unpay_count',
+    会员充值支付率: 'vip_pay_rate'
+  };
+
+  if (rolesIdentify.value.includes('optimizer')) {
+    delete title['优化师'];
+  }
+
+  callback && callback();
 
 
+  onMounted(() => {});
 
 
-/**
- * <el-table :data="tableData" class="mt-3" v-loading="loading">
-        <el-table-column prop="day_at" label="时间" />
-        <el-table-column prop="username" label="优化师" min-width="160px" />
-        <el-table-column prop="miniprogram_name" label="小程序名称" min-width="160px" />
-        <el-table-column label="充值金额" prop="pay_money">
-          <template #header>
-            <div class="flex items-center">
-              <span>充值金额</span>
-              <el-tooltip placement="top">
-                <template #content>
-                  当日累计充值金额<br />
-                </template>
-                <el-icon>
-                  <InfoFilled />
-                </el-icon>
-              </el-tooltip>
-            </div>
-          </template>
-          <template #default="scope">
-            <div class="wrapper">
-              <div>{{ scope.row.pay_money }}</div>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="充值笔数" prop="pay_count">
-          <template #header>
-            <div class="flex items-center">
-              <span>充值笔数</span>
-              <el-tooltip placement="top">
-                <template #content>
-                  当日累计充值笔数<br />
-                </template>
-                <el-icon>
-                  <InfoFilled />
-                </el-icon>
-              </el-tooltip>
-            </div>
-          </template>
-          <template #default="scope">
-            <div class="wrapper">
-              <div>{{ scope.row.pay_count }}</div>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="新增用户充值总额" prop="new_user_pay_money">
-          <template #header>
-            <div class="flex items-center">
-              <span>新增用户充值总额</span>
-              <el-tooltip placement="top">
-                <template #content>
-                  当日新用户充值总额<br />
-                </template>
-                <el-icon>
-                  <InfoFilled />
-                </el-icon>
-              </el-tooltip>
-            </div>
-          </template>
-          <template #default="scope">
-            <div class="wrapper">
-              <div>{{ scope.row.new_user_pay_money }}</div>
-              <div>普通:{{ scope.row.new_user_common_pay_money }}</div>
-              <div>会员:{{ scope.row.new_user_vip_pay_money }}</div>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="普通充值" min-width="250">
-          <el-table-column prop="common_pay_money" label="金额">
-            <template #default="scope">
-              <div class="wrapper">
-                <div>总额:{{ scope.row.common_pay_money }}</div>
-                <div>人均:{{ scope.row.common_pay_money }}</div>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="支付订单数" prop="common_pay_count">
-            <template #default="scope">
-              <div class="wrapper">
-                <div class="mb-2">
-                  <span class="mr-2">已:{{ scope.row.common_pay_count }}</span>
-                  <span>未:{{ scope.row.common_unpay_count }}</span>
-                </div>
-                <div>支付率:{{ scope.row.common_pay_rate }}</div>
-              </div>
-            </template>
-          </el-table-column>
-        </el-table-column>
-        <el-table-column label="会员充值" min-width="250">
-          <el-table-column prop="vip_pay_money" label="金额">
-            <template #default="scope">
-              <div class="wrapper">
-                <div>总额:{{ scope.row.vip_pay_money }}</div>
-                <div>人均:{{ scope.row.vip_pay_money_per }}</div>
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="支付订单数" prop="vip_pay_count">
-            <template #default="scope">
-              <div class="wrapper">
-                <div class="mb-2">
-                  <span class="mr-2">已:{{ scope.row.vip_pay_count }}</span>
-                  <span>未:{{ scope.row.vip_unpay_count }}</span>
-                </div>
-                <div>支付率:{{ scope.row.vip_pay_rate }}</div>
-              </div>
-            </template>
-          </el-table-column>
-        </el-table-column>
-      </el-table>
- */
+  onUnmounted(() => {});
+
+  return {
+    title
+  };
+};

+ 7 - 3
src/views/dataStatistics/rechargeStatistics/index.vue

@@ -4,6 +4,9 @@
     <summaryStatistics></summaryStatistics>
     <summaryStatistics></summaryStatistics>
     <Search :search="moreSearch" :reset="moreReset">
     <Search :search="moreSearch" :reset="moreReset">
       <template v-slot:body>
       <template v-slot:body>
+        <div v-if="rolesIdentify.includes('optimizer')" class="w-full m-3 text-gray-500">
+          *列表统计的是所有小程序对应日期的数据
+        </div>
         <el-form-item label="时间">
         <el-form-item label="时间">
           <el-date-picker unlink-panels clearable @change="timeChange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
           <el-date-picker unlink-panels clearable @change="timeChange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
             v-model="query.time" type="daterange" :shortcuts="shortcuts" range-separator="To" start-placeholder="开始时间"
             v-model="query.time" type="daterange" :shortcuts="shortcuts" range-separator="To" start-placeholder="开始时间"
@@ -24,7 +27,7 @@
         </el-form-item>
         </el-form-item>
       </template>
       </template>
       <template v-slot:extra_button>
       <template v-slot:extra_button>
-        <exportExcel api="statistic/charge/list" sheet_name="充值统计" :title_obj="titleObj"
+        <exportExcel api="statistic/charge/list" sheet_name="充值统计" :title_obj="titleObj.title"
           :extro_params="{ is_export: true, ...query }">
           :extro_params="{ is_export: true, ...query }">
         </exportExcel>
         </exportExcel>
       </template>
       </template>
@@ -44,7 +47,7 @@
         <div class="table-default" v-action="'statistic.chargeTJ.list'">
         <div class="table-default" v-action="'statistic.chargeTJ.list'">
           <el-table :data="tableData" class="mt-3" v-loading="loading">
           <el-table :data="tableData" class="mt-3" v-loading="loading">
             <el-table-column prop="day_at" label="时间" />
             <el-table-column prop="day_at" label="时间" />
-            <el-table-column prop="username" label="优化师" min-width="160px" />
+            <el-table-column prop="username" label="优化师" v-if="!rolesIdentify.includes('optimizer')" min-width="160px" />
             <el-table-column prop="miniprogram_name" label="小程序名称" min-width="160px" />
             <el-table-column prop="miniprogram_name" label="小程序名称" min-width="160px" />
             <el-table-column label="充值金额" prop="pay_money" min-width="160px">
             <el-table-column label="充值金额" prop="pay_money" min-width="160px">
               <template #header>
               <template #header>
@@ -165,7 +168,8 @@ import { useRouter, useRoute } from 'vue-router'
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useGetList } from '@/hook/curd/useGetList';
 import { statisticChargeListTotalCharge } from '@/api/dataStatistics/rechargeStatistics/index'
 import { statisticChargeListTotalCharge } from '@/api/dataStatistics/rechargeStatistics/index'
-import { titleObj } from "./excelTitle";
+import { useExcelTitle } from "./excelTitle";
+const titleObj = useExcelTitle()
 import moment from 'moment';
 import moment from 'moment';
 const start_date = moment().subtract(7, 'days').format('YYYY-MM-DD');
 const start_date = moment().subtract(7, 'days').format('YYYY-MM-DD');
 const end_date = moment().format('YYYY-MM-DD');
 const end_date = moment().format('YYYY-MM-DD');

+ 198 - 184
src/views/dataStatistics/rechargeStatistics/summaryStatistics.vue

@@ -1,208 +1,213 @@
 <template>
 <template>
-  <div class="flex w-full card-wrapper">
-    <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.todayCharge'">
-      <template #header>
-        <div class="flex items-center justify-between card-header">
-          <div class="flex items-center">
-            <span>今日充值</span>
-            <el-tooltip placement="top">
-              <template #content>
-                截至当前时间,今日累计充值<br />
-              </template>
-              <el-icon>
-                <InfoFilled />
-              </el-icon>
-            </el-tooltip>
-          </div>
-          <p class="text-red-300">{{ timer.seconds }}s后刷新</p>
-        </div>
-      </template>
-      <div class="money-wrapper">¥{{ todayChargeData.pay_money || '-' }}</div>
-      <div class="flex items-center justify-between">
-        <div>
-          <p class="text-lg font-bold">普通充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ todayChargeData.common_pay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ todayChargeData.common_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ todayChargeData.company_pay_rate || '-' }}</span>
-          </div>
-        </div>
-        <div>
-          <p class="text-lg font-bold">会员充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ todayChargeData.vip_pay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ todayChargeData.vip_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ todayChargeData.vip_pay_rate || '-' }}</span>
-          </div>
-        </div>
-      </div>
-    </el-card>
-    <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.currentMonthCharge'">
-      <template #header>
-        <div class="flex items-center justify-between card-header">
-          <div class="flex items-center">
-            <span>本月充值</span>
-            <el-tooltip placement="top">
-              <template #content>
-                本月截至昨日的累计充值金额<br />
-              </template>
-              <el-icon>
-                <InfoFilled />
-              </el-icon>
-            </el-tooltip>
-            <span class="ml-2 text-red-300">(不包含当日)</span>
-          </div>
-        </div>
-      </template>
-      <div class="money-wrapper">¥{{ currentMonthChargeData.pay_money || '-' }}</div>
-      <div class="flex items-center justify-between">
-        <div>
-          <p class="text-lg font-bold">普通充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ currentMonthChargeData.common_pay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ currentMonthChargeData.common_unpay_count || '-' }}单</span>
+  <div class="w-full card-wrapper">
+    <div v-if="rolesIdentify.includes('optimizer')" class="w-full text-gray-500">
+      *上半部分统计的是当前小程序的数据
+    </div>
+    <div class="flex ">
+      <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.todayCharge'">
+        <template #header>
+          <div class="flex items-center justify-between card-header">
+            <div class="flex items-center">
+              <span>今日充值</span>
+              <el-tooltip placement="top">
+                <template #content>
+                  截至当前时间,今日累计充值<br />
+                </template>
+                <el-icon>
+                  <InfoFilled />
+                </el-icon>
+              </el-tooltip>
+            </div>
+            <p class="text-red-300">{{ timer.seconds }}s后刷新</p>
           </div>
           </div>
+        </template>
+        <div class="money-wrapper">¥{{ todayChargeData.pay_money ?? '-' }}</div>
+        <div class="flex items-center justify-between">
           <div>
           <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ currentMonthChargeData.company_pay_rate || '-' }}</span>
-          </div>
-        </div>
-        <div>
-          <p class="text-lg font-bold">会员充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ currentMonthChargeData.vip_pay_count || '-' }}单</span>
+            <p class="text-lg font-bold">普通充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ todayChargeData.common_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ todayChargeData.common_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ todayChargeData.company_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
           <div>
           <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ currentMonthChargeData.vip_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ currentMonthChargeData.vip_pay_rate || '-' }}</span>
+            <p class="text-lg font-bold">会员充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ todayChargeData.vip_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ todayChargeData.vip_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ todayChargeData.vip_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
         </div>
         </div>
-      </div>
-    </el-card>
-    <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.lastMonthCharge'">
-      <template #header>
-        <div class="flex items-center justify-between card-header">
-          <div class="flex items-center">
-            <span>上月充值</span>
-            <el-tooltip placement="top">
-              <template #content>
-                上月的累计充值<br />
-              </template>
-              <el-icon>
-                <InfoFilled />
-              </el-icon>
-            </el-tooltip>
+      </el-card>
+      <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.currentMonthCharge'">
+        <template #header>
+          <div class="flex items-center justify-between card-header">
+            <div class="flex items-center">
+              <span>本月充值</span>
+              <el-tooltip placement="top">
+                <template #content>
+                  本月截至昨日的累计充值金额<br />
+                </template>
+                <el-icon>
+                  <InfoFilled />
+                </el-icon>
+              </el-tooltip>
+              <span class="ml-2 text-red-300">(不包含当日)</span>
+            </div>
           </div>
           </div>
-        </div>
-      </template>
-      <div class="money-wrapper">¥{{ lastMonthChargeData.pay_money || '-' }}</div>
-      <div class="flex items-center justify-between">
-        <div>
-          <p class="text-lg font-bold">普通充值</p>
+        </template>
+        <div class="money-wrapper">¥{{ currentMonthChargeData.pay_money ?? '-' }}</div>
+        <div class="flex items-center justify-between">
           <div>
           <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ lastMonthChargeData.common_pay_count || '-' }}单</span>
+            <p class="text-lg font-bold">普通充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ currentMonthChargeData.common_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ currentMonthChargeData.common_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ currentMonthChargeData.company_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
           <div>
           <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ lastMonthChargeData.common_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ lastMonthChargeData.company_pay_rate || '-' }}</span>
+            <p class="text-lg font-bold">会员充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ currentMonthChargeData.vip_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ currentMonthChargeData.vip_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ currentMonthChargeData.vip_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
         </div>
         </div>
-        <div>
-          <p class="text-lg font-bold">会员充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ lastMonthChargeData.vip_pay_count || '-' }}单</span>
+      </el-card>
+      <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.lastMonthCharge'">
+        <template #header>
+          <div class="flex items-center justify-between card-header">
+            <div class="flex items-center">
+              <span>上月充值</span>
+              <el-tooltip placement="top">
+                <template #content>
+                  上月的累计充值<br />
+                </template>
+                <el-icon>
+                  <InfoFilled />
+                </el-icon>
+              </el-tooltip>
+            </div>
           </div>
           </div>
+        </template>
+        <div class="money-wrapper">¥{{ lastMonthChargeData.pay_money ?? '-' }}</div>
+        <div class="flex items-center justify-between">
           <div>
           <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ lastMonthChargeData.vip_unpay_count || '-' }}单</span>
+            <p class="text-lg font-bold">普通充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ lastMonthChargeData.common_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ lastMonthChargeData.common_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ lastMonthChargeData.company_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
           <div>
           <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ lastMonthChargeData.vip_pay_rate || '-' }}</span>
+            <p class="text-lg font-bold">会员充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ lastMonthChargeData.vip_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ lastMonthChargeData.vip_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ lastMonthChargeData.vip_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
         </div>
         </div>
-      </div>
-    </el-card>
-    <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.totalCharge'">
-      <template #header>
-        <div class="flex items-center justify-between card-header">
-          <div class="flex items-center">
-            <span>累计充值</span>
-            <el-tooltip placement="top">
-              <template #content>
-                昨日及之前的所有累计充值金额<br />
-              </template>
-              <el-icon>
-                <InfoFilled />
-              </el-icon>
-            </el-tooltip>
-            <span class="ml-2 text-red-300">(不包含当日)</span>
+      </el-card>
+      <el-card class="box-card" shadow="hover" v-action="'statistic.chargeTJ.totalCharge'">
+        <template #header>
+          <div class="flex items-center justify-between card-header">
+            <div class="flex items-center">
+              <span>累计充值</span>
+              <el-tooltip placement="top">
+                <template #content>
+                  昨日及之前的所有累计充值金额<br />
+                </template>
+                <el-icon>
+                  <InfoFilled />
+                </el-icon>
+              </el-tooltip>
+              <span class="ml-2 text-red-300">(不包含当日)</span>
+            </div>
           </div>
           </div>
-        </div>
-      </template>
-      <div class="money-wrapper">¥{{ totalChargeData.pay_money || '-' }}</div>
-      <div class="flex items-center justify-between">
-        <div>
-          <p class="text-lg font-bold">普通充值</p>
+        </template>
+        <div class="money-wrapper">¥{{ totalChargeData.pay_money ?? '-' }}</div>
+        <div class="flex items-center justify-between">
           <div>
           <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ totalChargeData.common_pay_count || '-' }}单</span>
+            <p class="text-lg font-bold">普通充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ totalChargeData.common_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ totalChargeData.common_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ totalChargeData.company_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
           <div>
           <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ totalChargeData.common_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ totalChargeData.company_pay_rate || '-' }}</span>
-          </div>
-        </div>
-        <div>
-          <p class="text-lg font-bold">会员充值</p>
-          <div>
-            <span class="text-sm">已支付:</span>
-            <span class="text-base">{{ totalChargeData.vip_pay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">未支付:</span>
-            <span class="text-base">{{ totalChargeData.vip_unpay_count || '-' }}单</span>
-          </div>
-          <div>
-            <span class="text-sm">支付率:</span>
-            <span class="text-base">{{ totalChargeData.vip_pay_rate || '-' }}</span>
+            <p class="text-lg font-bold">会员充值</p>
+            <div>
+              <span class="text-sm">已支付:</span>
+              <span class="text-base">{{ totalChargeData.vip_pay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">未支付:</span>
+              <span class="text-base">{{ totalChargeData.vip_unpay_count ?? '-' }}单</span>
+            </div>
+            <div>
+              <span class="text-sm">支付率:</span>
+              <span class="text-base">{{ totalChargeData.vip_pay_rate ?? '-' }}</span>
+            </div>
           </div>
           </div>
         </div>
         </div>
-      </div>
-    </el-card>
+      </el-card>
+    </div>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -210,6 +215,7 @@
 import { checkPermission } from '@/directives/permission';
 import { checkPermission } from '@/directives/permission';
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
 import { useCountdownTimer } from '@/utils/timerUtils';
 import { useCountdownTimer } from '@/utils/timerUtils';
+import Cache from '@/support/cache'
 import {
 import {
   statisticChargeTodayCharge,
   statisticChargeTodayCharge,
   statisticChargeCurrentMonthCharge,
   statisticChargeCurrentMonthCharge,
@@ -222,6 +228,7 @@ const currentMonthChargeData = ref({})
 const lastMonthChargeData = ref({})
 const lastMonthChargeData = ref({})
 const totalChargeData = ref({})
 const totalChargeData = ref({})
 const rolesIdentify = inject('rolesIdentify')
 const rolesIdentify = inject('rolesIdentify')
+const miniprogram_idJ = ref('')
 const refreshInterface = (): void => {
 const refreshInterface = (): void => {
   initTodayCharge()
   initTodayCharge()
 };
 };
@@ -229,31 +236,38 @@ const timer = useCountdownTimer(60, refreshInterface);
 
 
 const initTodayCharge = () => {
 const initTodayCharge = () => {
   if (!checkPermission('statistic.chargeTJ.todayCharge')) return;
   if (!checkPermission('statistic.chargeTJ.todayCharge')) return;
-  statisticChargeTodayCharge().then(res => {
+  statisticChargeTodayCharge({ miniprogram_id: miniprogram_idJ.value }).then(res => {
     todayChargeData.value = res.data
     todayChargeData.value = res.data
   })
   })
 }
 }
 const init = () => {
 const init = () => {
+  const miniprogram_id = miniprogram_idJ.value
   if (checkPermission('statistic.chargeTJ.currentMonthCharge')) {
   if (checkPermission('statistic.chargeTJ.currentMonthCharge')) {
-    statisticChargeCurrentMonthCharge().then(res => {
+    statisticChargeCurrentMonthCharge({ miniprogram_id }).then(res => {
       currentMonthChargeData.value = res.data;
       currentMonthChargeData.value = res.data;
     })
     })
   }
   }
   if (checkPermission('statistic.chargeTJ.lastMonthCharge')) {
   if (checkPermission('statistic.chargeTJ.lastMonthCharge')) {
-    statisticChargeLastMonthCharge().then(res => {
+    statisticChargeLastMonthCharge({ miniprogram_id }).then(res => {
       lastMonthChargeData.value = res.data;
       lastMonthChargeData.value = res.data;
     })
     })
   }
   }
   if (checkPermission('statistic.chargeTJ.totalCharge')) {
   if (checkPermission('statistic.chargeTJ.totalCharge')) {
-    statisticChargeTotalCharge().then(res => {
+    statisticChargeTotalCharge({ miniprogram_id }).then(res => {
       totalChargeData.value = res.data;
       totalChargeData.value = res.data;
     })
     })
   }
   }
 }
 }
 
 
 onMounted(() => {
 onMounted(() => {
+  if (JSON.parse(Cache.get('nav_data'))?.app.id) {
+    miniprogram_idJ.value = JSON.parse(Cache.get('nav_data'))?.app.id
+    console.log(miniprogram_idJ.value, 'miniprogram_idJ.value');
+  }
   init()
   init()
   initTodayCharge()
   initTodayCharge()
+  console.log(JSON.parse(Cache.get('nav_data'))?.app.id, 'Cache.getCache.getCache.get');
+
 });
 });
 
 
 </script>
 </script>

+ 44 - 22
src/views/dataStatistics/roiStatistical/excelTitle.ts

@@ -1,24 +1,46 @@
 // 导出中文/字段
 // 导出中文/字段
-export const titleObj = {
-  时间: 'day_at',
-  商户名称: 'company_username',
-  优化师: 'optimizer_name',
-  小程序名称: 'miniprogram_name',
-  推广链接: 'promotion_name',
-  当日新增用户数: 'new_user_num',
-  累计充值人数: 'new_user_pay_uv',
-  投放成本: 'cost_money',
-  回本率金额: 'new_user_pay_money',
-  回本: 'huiben',
-  新增用户成本: 'new_user_cost_money',
-  新用户人均充值: 'new_user_pay_money_per',
-  会员成本金额: 'new_user_vip_pay_money',
-  会员成本人数: 'new_user_vip_pay_uv',
-  会员成本累计: 'vip_money_per',
-  充值成本金额: 'new_user_pay_money',
-  充值成本人数: 'new_user_common_pay_uv',
-  充值成本累计: 'common_money_per',
-  会员转化率: 'zhuanhua_vip',
-  充值转化率: 'zhuanhua_common',
-  总计转化率: 'zhuanhua_all'
+import { ref, onMounted, onUnmounted, Ref } from 'vue';
+export const useExcelTitle = (callback?: () => void): any => {
+  const rolesIdentify = inject('rolesIdentify');
+  const title = {
+    时间: 'day_at',
+    商户名称: 'company_username',
+    优化师: 'optimizer_name',
+    小程序名称: 'miniprogram_name',
+    推广链接: 'promotion_name',
+    当日新增用户数: 'new_user_num',
+    累计充值人数: 'new_user_pay_uv',
+    投放成本: 'cost_money',
+    回本率金额: 'new_user_pay_money',
+    回本: 'huiben',
+    新增用户成本: 'new_user_cost_money',
+    新用户人均充值: 'new_user_pay_money_per',
+    会员成本金额: 'new_user_vip_pay_money',
+    会员成本人数: 'new_user_vip_pay_uv',
+    会员成本累计: 'vip_money_per',
+    充值成本金额: 'new_user_pay_money',
+    充值成本人数: 'new_user_common_pay_uv',
+    充值成本累计: 'common_money_per',
+    会员转化率: 'zhuanhua_vip',
+    充值转化率: 'zhuanhua_common',
+    总计转化率: 'zhuanhua_all'
+  };
+  if (!rolesIdentify.value.includes('administrator')) {
+    delete title['商户名称'];
+  }
+
+  if (rolesIdentify.value.includes('optimizer')) {
+    delete title['商户名称'];
+    delete title['优化师'];
+  }
+
+  callback && callback();
+
+  onMounted(() => {});
+
+  onUnmounted(() => {});
+
+  return {
+    title
+  };
 };
 };

+ 9 - 5
src/views/dataStatistics/roiStatistical/index.vue

@@ -23,7 +23,7 @@
         </el-form-item>
         </el-form-item>
       </template>
       </template>
       <template v-slot:extra_button>
       <template v-slot:extra_button>
-        <exportExcel api="statistic/roi/list" sheet_name="投入产出" :title_obj="titleObj"
+        <exportExcel api="statistic/roi/list" sheet_name="投入产出" :title_obj="titleObj.title"
           :extro_params="{ is_export: 1, ...query }">
           :extro_params="{ is_export: 1, ...query }">
         </exportExcel>
         </exportExcel>
       </template>
       </template>
@@ -41,10 +41,12 @@
     <div class="table-default" v-action="'statistic.ROITJ.list'">
     <div class="table-default" v-action="'statistic.ROITJ.list'">
       <el-table :data="tableData" class="mt-3" v-loading="loading">
       <el-table :data="tableData" class="mt-3" v-loading="loading">
         <el-table-column prop="day_at" label="时间" min-width="150px" />
         <el-table-column prop="day_at" label="时间" min-width="150px" />
-        <el-table-column prop="company_username" label="商户名称" min-width="100px" />
-        <el-table-column prop="optimizer_name" label="优化师" min-width="150px" />
+        <el-table-column prop="company_username" label="商户名称" v-if="rolesIdentify.includes('administrator')"
+          min-width="100px" />
+        <el-table-column prop="optimizer_name" label="优化师" v-if="!rolesIdentify.includes('optimizer')"
+          min-width="150px" />
         <el-table-column prop="miniprogram_name" label="小程序名称" min-width="150px" />
         <el-table-column prop="miniprogram_name" label="小程序名称" min-width="150px" />
-        <el-table-column prop="promotion_name" label="推广链接" min-width="100px" />
+        <el-table-column prop="promotion_name" label="推广名称" min-width="100px" />
         <el-table-column label="新增人数" prop="" min-width="180px">
         <el-table-column label="新增人数" prop="" min-width="180px">
           <template #header>
           <template #header>
             <span>新增人数</span>
             <span>新增人数</span>
@@ -238,7 +240,9 @@ import { useRouter, useRoute } from 'vue-router';
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useGetList } from '@/hook/curd/useGetList';
 import { statisticRoiListTotal, statisticRoiUpdateCostmoney } from '@/api/dataStatistics/roiStatistical/index';
 import { statisticRoiListTotal, statisticRoiUpdateCostmoney } from '@/api/dataStatistics/roiStatistical/index';
-import { titleObj } from "./excelTitle";
+import { useExcelTitle } from "./excelTitle";
+const titleObj = useExcelTitle()
+console.log(titleObj, 'titleObjtitleObjtitleObj');
 import { checkPermission } from '@/directives/permission';
 import { checkPermission } from '@/directives/permission';
 import {
 import {
   channelMiniprogramUseList,
   channelMiniprogramUseList,

+ 1 - 1
src/views/pageLayout/viewpagerPageManage/form/create.vue

@@ -13,7 +13,7 @@
       <el-input v-model.number="formCallback.sort" min="1" type="number" size="default" clearable></el-input>
       <el-input v-model.number="formCallback.sort" min="1" type="number" size="default" clearable></el-input>
     </el-form-item>
     </el-form-item>
     <el-form-item label="封面图" prop="img_url" :rules="[{ required: true, message: '请上传封面图' }]">
     <el-form-item label="封面图" prop="img_url" :rules="[{ required: true, message: '请上传封面图' }]">
-      <my-upload acceptType=".png,.jpg,.jpeg" :isCheckMM="false" :isMultiple="true" @fileRemove="fileRemove"
+      <my-upload acceptType=".png,.jpg,.jpeg" :isCheckMM="false" :isMultiple="false" @fileRemove="fileRemove"
         @fileSuccess="fileSuccess" :fileList="formCallback.fileList" action="/qiniu/upload/image"></my-upload>
         @fileSuccess="fileSuccess" :fileList="formCallback.fileList" action="/qiniu/upload/image"></my-upload>
     </el-form-item>
     </el-form-item>
     <el-form-item label="链接短剧信息" prop="duanjus" :rules="[{ required: false, message: '选择链接短剧信息', trigger: 'change' }]">
     <el-form-item label="链接短剧信息" prop="duanjus" :rules="[{ required: false, message: '选择链接短剧信息', trigger: 'change' }]">

+ 1 - 1
src/views/settleManage/settlementCenter/tabs/rechargeSettle/withdrawalRecord/form/create.vue

@@ -3,7 +3,7 @@
     <div class="flex flex-row justify-between">
     <div class="flex flex-row justify-between">
       <div class="w-full">
       <div class="w-full">
         <el-form-item label="电子发票" prop="ticket">
         <el-form-item label="电子发票" prop="ticket">
-          <my-upload acceptType=".png,.jpg,.jpeg" :isMultiple="true" :maxFileSize="2" @fileRemove="fileRemove"
+          <my-upload acceptType=".png,.jpg,.jpeg" :isMultiple="false" :maxFileSize="2" @fileRemove="fileRemove"
             @fileSuccess="fileSuccess" :fileList="fileList" action="/qiniu/upload/image"></my-upload>
             @fileSuccess="fileSuccess" :fileList="fileList" action="/qiniu/upload/image"></my-upload>
         </el-form-item>
         </el-form-item>
       </div>
       </div>

+ 14 - 8
src/views/user/caster/index.vue

@@ -37,10 +37,16 @@
                 <el-image style="width: 20px; height: 20px" class="mt-1 mr-5" :src="applet.type_logo" fit="contain" />
                 <el-image style="width: 20px; height: 20px" class="mt-1 mr-5" :src="applet.type_logo" fit="contain" />
                 <span class="mr-3 text-sm font-medium">{{ applet.name }}</span>
                 <span class="mr-3 text-sm font-medium">{{ applet.name }}</span>
               </div>
               </div>
-              <el-icon>
-                <Pointer @click="test(scope.row)" />
-              </el-icon>
-
+            </template>
+          </el-table-column>
+          <el-table-column prop="miniProgramIds" label="已绑定公众号">
+            <template #default="scope">
+              <div class="flex items-center justify-center h-8">
+                <span class="flex-1 text-sm font-medium">{{ scope.row.gzh_names || '-' }}</span>
+                <el-icon color="#409EFC" class="justify-start flex-1 cursor-pointer">
+                  <Edit @click="authorizedPublic(scope.row)" />
+                </el-icon>
+              </div>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column prop="status" label="状态" v-action="'User.user.enable'">
           <el-table-column prop="status" label="状态" v-action="'User.user.enable'">
@@ -60,17 +66,17 @@
       <Dialog v-model="visible" :title="title" destroy-on-close>
       <Dialog v-model="visible" :title="title" destroy-on-close>
         <Create @close="close(search)" :primary="id" />
         <Create @close="close(search)" :primary="id" />
       </Dialog>
       </Dialog>
-      <el-dialog draggable v-model="visibleIframe" align-center width="80%" append-to-body center :show-close="false"
+      <!-- <el-dialog draggable v-model="visibleIframe" align-center width="80%" append-to-body center :show-close="false"
         style="background: none;box-shadow: none;height:80%" destroy-on-close>
         style="background: none;box-shadow: none;height:80%" destroy-on-close>
         <iframe class="iframe" :src="iframeSrc"></iframe>
         <iframe class="iframe" :src="iframeSrc"></iframe>
-      </el-dialog>
+      </el-dialog> -->
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
 import { computed, onMounted, ref } from 'vue';
 import { computed, onMounted, ref } from 'vue';
-import { Pointer } from '@element-plus/icons-vue'
+import { Edit } from '@element-plus/icons-vue'
 import Create from './create.vue';
 import Create from './create.vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useOpen } from '@/hook/curd/useOpen';
 import { useOpen } from '@/hook/curd/useOpen';
@@ -78,7 +84,7 @@ import { channelMiniprogramList, channelOpenPlatformPreauth } from '@/api/applet
 const visibleIframe = ref(false)
 const visibleIframe = ref(false)
 const iframeSrc = ref()
 const iframeSrc = ref()
 
 
-const test = (row: object) => {
+const authorizedPublic = (row: object) => {
   channelOpenPlatformPreauth({ user_id: row.id }).then(res => {
   channelOpenPlatformPreauth({ user_id: row.id }).then(res => {
     console.log(res, 'user_id=10');
     console.log(res, 'user_id=10');
     visibleIframe.value = true
     visibleIframe.value = true

+ 4 - 2
src/views/videoManage/videoLibraryList/form/create.vue

@@ -56,7 +56,7 @@
           </el-radio-group>
           </el-radio-group>
         </el-form-item>
         </el-form-item>
         <el-form-item label="封面" prop="cover_image">
         <el-form-item label="封面" prop="cover_image">
-          <my-upload acceptType=".png,.jpg,.jpeg" :isMultiple="true" @fileRemove="fileRemove" @fileSuccess="fileSuccess"
+          <my-upload acceptType=".png,.jpg,.jpeg" :isMultiple="false" @fileRemove="fileRemove" @fileSuccess="fileSuccess"
             :fileList="formData.fileList" action="/qiniu/upload/image"></my-upload>
             :fileList="formData.fileList" action="/qiniu/upload/image"></my-upload>
         </el-form-item>
         </el-form-item>
         <el-form-item label="简介" prop="note">
         <el-form-item label="简介" prop="note">
@@ -78,7 +78,7 @@ import type { FormInstance, FormRules } from 'element-plus'
 const ruleForm = ref<FormInstance>()
 const ruleForm = ref<FormInstance>()
 import { onMounted, ref } from 'vue';
 import { onMounted, ref } from 'vue';
 const props = defineProps({
 const props = defineProps({
-  primary: String | Number,
+  primary: String | Number | Object,
 });
 });
 const cooperations = ref([]);
 const cooperations = ref([]);
 const categoryList = ref([])
 const categoryList = ref([])
@@ -226,6 +226,8 @@ if (props.primary) {
   formData.value = JSON.parse(JSON.stringify(props.primary))
   formData.value = JSON.parse(JSON.stringify(props.primary))
   formData.value.fileList = [{ uid: props.primary.id, url: props.primary.cover_image }]
   formData.value.fileList = [{ uid: props.primary.id, url: props.primary.cover_image }]
   selectType.value = formData.value.category_id
   selectType.value = formData.value.category_id
+} else {
+  formData.value.fileList = []
 }
 }
 const initType = () => {
 const initType = () => {
   videoStockVideoCategoryList().then(res => {
   videoStockVideoCategoryList().then(res => {

+ 1 - 4
src/views/videoManage/videoLibraryList/index.vue

@@ -140,7 +140,7 @@
     </div>
     </div>
 
 
     <Dialog v-model="visible" :title="title" destroy-on-close>
     <Dialog v-model="visible" :title="title" destroy-on-close>
-      <Create @close="close(search)" :primary="id" :eidapi="addApi" :addapi="addApi" :ismulSet="ismulSet" />
+      <Create @close="close(search)" :primary="id" />
     </Dialog>
     </Dialog>
     <Dialog v-model="videoDLVisible" width="80%" title="视频下载" destroy-on-close>
     <Dialog v-model="videoDLVisible" width="80%" title="视频下载" destroy-on-close>
       <videoDL @close="closeType('videoDLVisible')" :primary="depotsData"></videoDL>
       <videoDL @close="closeType('videoDLVisible')" :primary="depotsData"></videoDL>
@@ -176,9 +176,7 @@ import moment from 'moment';
 import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
 import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
 import { useUserStore } from '@/stores/modules/user/index'
 import { useUserStore } from '@/stores/modules/user/index'
 import Cache from '@/support/cache';
 import Cache from '@/support/cache';
-const ismulSet = ref(false)
 const api = 'videoStock/video/list';
 const api = 'videoStock/video/list';
-const addApi = 'contentManage/book/edit_author';
 const multipleSelection = ref([]);
 const multipleSelection = ref([]);
 const { data, query, search, reset, loading } = useGetList(api);
 const { data, query, search, reset, loading } = useGetList(api);
 const { deleted } = useDestroy();
 const { deleted } = useDestroy();
@@ -303,7 +301,6 @@ const mulSet = () => {
       cancelButtonText: '取消',
       cancelButtonText: '取消',
       beforeClose: (action, instance, done) => {
       beforeClose: (action, instance, done) => {
         if (action === 'confirm') {
         if (action === 'confirm') {
-          ismulSet.value = true
           let ids = multipleSelection.value.map(el => el.id);
           let ids = multipleSelection.value.map(el => el.id);
           console.log(ids);
           console.log(ids);
           open(ids);
           open(ids);

+ 0 - 176
src/views/videoManage/wechatAudit/tabs/wechatAuditList/detail.vue

@@ -1,176 +0,0 @@
-<template>
-  <el-card class="box-card">
-    <template #header>
-      <div class="card-header">
-        <span>简介</span>
-      </div>
-    </template>
-    <div class="flex">
-      <div>
-        <el-image class="mr-2 rounded-sm" :src="props.primary.cover_image" style="width:128px;height:160px;" fit="cover"
-          :lazy="true"></el-image>
-      </div>
-      <div>
-        <div class="flex items-center">
-          <span class="text-lg font-bold text-blue-400">
-            {{ props.primary.name }}
-          </span>
-          <div class="ml-3">
-            剧号:
-            <span class="font-bold">{{ props.primary.id }}</span>
-          </div>
-        </div>
-        <div class="flex items-center mt-2">
-          <span>
-            集数:
-          </span>
-          <div class="flex items-center font-bold">
-            <div v-if="props.primary.update_type == 1">
-              <span class="">
-                {{ props.primary.updated_episode_num }}
-              </span>
-              <span>/</span>
-            </div>
-            <div>
-              <span class="">
-                {{ props.primary.total_episode_num }}
-              </span>
-            </div>
-            <span>
-              【 {{ props.primary.update_type_str }} 】
-            </span>
-          </div>
-        </div>
-        <div class="mt-2">
-          简介:
-          <span class="font-bold note">{{ props.primary.note }}</span>
-        </div>
-      </div>
-    </div>
-  </el-card>
-
-  <div class="flex flex-col justify-between w-full sm:flex-row" style="width:100%;">
-    <div class="table-default" style="width:100%;">
-      <el-table :data="tableData" class="w-full mt-3" style="width:100%;">
-        <el-table-column prop="series_name" label="章节名称" />
-        <el-table-column prop="is_charge" label="是否付费">
-          <template #default="scope">
-            <span :class="scope.row.is_charge ? 'text-red-600' : 'text-green-300'">
-              {{ scope.row.is_charge ? '【付费】' : '【免费】' }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="duration_str" label="章节时长" />
-        <el-table-column label="操作" width="200">
-          <template #default="scope">
-            <el-button link type="primary" size="small" @click="play(scope.row)">播放</el-button>
-            <el-button link type="primary" size="small" @click="createLink(scope.row)" v-if="isShowCreatePromotion"
-              v-action="'tuiguang.Promotion.add'">创建推广链接</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <Paginate />
-    </div>
-  </div>
-  <Dialog v-model="playVisible" title="视频" destroy-on-close height="100%">
-    <video id="my-player" class="video-js" controls autoplay preload="auto" ref="myVideo">
-      <source :src="current.public_video_url" type="video/mp4">
-    </video>
-  </Dialog>
-
-  <Dialog v-model="linkVisible" title="创建推广链接" destroy-on-close>
-    <el-form :model="formDataForm" label-width="120px" ref="form" v-loading="loading" class="pr-4">
-      <el-form-item label="推广名称" prop="name" :rules="[{ required: true, message: '推广名称必须填写' }]">
-        <el-input v-model="formDataForm.name" name="name" clearable />
-      </el-form-item>
-      <el-form-item label="入口章节" prop="series_sequence" :rules="[{ required: false, message: '入口章节必须填写' }]">
-        <el-input disabled v-model="current.series_name" name="author" clearable />
-      </el-form-item>
-      <div class="flex justify-end">
-        <el-button type="primary" @click="submitForm(form)">{{
-          $t('system.confirm')
-        }}</el-button>
-      </div>
-    </el-form>
-  </Dialog>
-</template>
-
-<script lang="ts" setup>
-// import router from '@/router'
-import Cache from '@/support/cache';
-import { computed, onMounted, ref } from 'vue';
-import { useGetList } from '@/hook/curd/useGetList';
-import { useOpen } from '@/hook/curd/useOpen';
-import { FormInstance } from 'element-plus';
-import { tuiguangPromotionAdd } from '@/api/promotion/index'
-const api = 'videoStock/episode/list';
-const props = defineProps({
-  primary: String | Number,
-});
-const isShowCreatePromotion = computed(
-  () => JSON.parse(Cache.get('nav_data'))?.advertiser?.miniProgramIds
-    && JSON.parse(Cache.get('nav_data'))?.app
-)
-const router = useRouter()
-const form = ref()
-const formDataForm = ref({})
-const current = ref({})
-const playVisible = ref(false)
-const linkVisible = ref(false)
-const { data, query, search, reset, loading } = useGetList(api);
-const { open, close, title, visible, id } = useOpen();
-if (props.primary) {
-  query.value.video_id = props.primary.id
-  formDataForm.value.video_id = props.primary.id
-  formDataForm.value.miniprogram_id = JSON.parse(Cache.get('nav_data'))?.app?.id
-}
-const tableData = computed(() => data.value?.data);
-const play = (e: object) => {
-  current.value = e;
-  playVisible.value = true;
-}
-const createLink = (e: object) => {
-  current.value = e;
-  formDataForm.value.series_sequence = e.series_sequence
-  linkVisible.value = true;
-}
-
-const submitForm = (formEl: FormInstance | undefined) => {
-  loading.value = true;
-  if (!formEl) return;
-  formEl
-    .validate(valid => {
-      if (valid) {
-        tuiguangPromotionAdd(formDataForm.value).then(res => {
-          console.log(res, 'tuiguangPromotionAddtuiguangPromotionAdd');
-          ElMessage.success(res.message)
-          loading.value = false;
-          linkVisible.value = false;
-          router.push({ path: '/promotion/promotionList', query: { tab: 0 } })
-        })
-      } else {
-        loading.value = false;
-      }
-    })
-    .then(() => { });
-}
-
-onMounted(() => {
-  search();
-});
-</script>
-
-<style lang="scss" scoped>
-//播放器样式
-video#my-player.video-js {
-  width: 80%;
-  height: 500px;
-  background-color: #000;
-}
-
-.note {
-  font-size: 16px;
-  width: fit-content;
-  word-wrap: break-word;
-  word-break: break-all;
-}
-</style>

+ 77 - 156
src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/create.vue

@@ -1,66 +1,37 @@
 <template>
 <template>
-  <el-form :model="formData" label-width="120px" ref="ruleForm" :rules="rules" v-loading="loading" class="pr-4">
+  <el-form :model="formData" label-width="150px" ref="ruleForm" :rules="rules" v-loading="loading" class="pr-4">
     <div class="flex flex-row justify-between">
     <div class="flex flex-row justify-between">
       <div class="w-full">
       <div class="w-full">
-        <el-form-item label="短剧名称" prop="name">
-          <el-input v-model="formData.name" placeholder="请输入短剧名称" />
-        </el-form-item>
-        <el-form-item label="集数" prop="total_episode_num">
-          <el-input-number style="width:200px;" v-model="formData.total_episode_num" :step="1" step-strictly :min="1"
-            placeholder="请输入集数" />
-        </el-form-item>
-        <el-form-item label="完结状态" prop="update_type">
-          <el-radio-group v-model="formData.update_type">
-            <el-radio :label="1">连载中</el-radio>
-            <el-radio :label="2">完结</el-radio>
-          </el-radio-group>
+        <el-form-item label="剧目名称" prop="video_id">
+          <el-input v-model="formData.name" :disabled="props.primary?.id" v-if="props.primary?.id"
+            placeholder="请输入剧目制作方名称" />
+          <el-select v-model="formData.video_id" v-else class="w-full" clearable filterable remote
+            :remote-method="remoteMethod" placeholder="请选择剧目名称">
+            <el-option v-for="item in videoList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="频道" prop="category_id">
-          <el-cascader v-model="selectType" :options="cooperations" filterable clearable :change-on-select="true"
-            @change="handleCascaderChange" />
-          <!-- <el-cascader v-model="formData.category_id" :options="cooperations" :show-all-levels="false" /> -->
+        <el-form-item label="剧目制作方名称" prop="producer">
+          <el-input v-model="formData.producer" placeholder="请输入剧目制作方名称" />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="上架" prop="shelf_type">
-          <el-radio-group v-model="formData.shelf_type">
-            <el-radio :label="1">未上架</el-radio>
-            <el-radio :label="2">上架</el-radio>
-          </el-radio-group>
+        <el-form-item label="编剧姓名" prop="playwright">
+          <el-input v-model="formData.playwright" placeholder="请输入编剧姓名" />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="起始集" prop="d_charge_sequence">
-          <el-input-number style="width:200px;" v-model="formData.d_charge_sequence" :step="1" step-strictly :min="1"
-            placeholder="请输入起始集" />
+        <el-form-item label="剧目备案号" prop="registration_number">
+          <el-input v-model="formData.registration_number" placeholder="请输入剧目备案号" />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="默认定价" prop="d_charge_coin">
-          <div class="flex items-center w-full">
-            <el-input-number style="width:200px;" v-model="formData.d_charge_coin" :precision="2" :step="1" :min="1"
-              placeholder="请输入看剧币" />
-            <el-tooltip placement="top">
-              <template #content> 默认定价为默认所需看剧币<br />1元=100币 </template>
-              <el-icon>
-                <InfoFilled />
-              </el-icon>
-            </el-tooltip>
+        <el-form-item label-width="300px" label="剧目制作方的《广播电视节目制作许可证》" prop="production_license_img" class="flex flex-col">
+          <div style="margin-left:150px;">
+            <my-upload :key="Math.random()" acceptType=".png,.jpg,.jpeg" :maxFileSize="20" :isMultiple="false"
+              @fileRemove="fileRemove" @fileSuccess="fileSuccess" :fileList="formData.fileList"
+              action="/qiniu/upload/image"></my-upload>
           </div>
           </div>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="所属CP方" prop="cp_name">
-          <el-select class="w-full" v-model="formData.cp_name" remote filterable :remote-method="remoteMethod" clearable
-            placeholder="选择所属CP方">
-            <el-option v-for="item in cpList" :key="item.cp_id" :label="item.cp_name" :value="item.cp_name" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="分成模式" prop="cp_share_type">
-          <el-radio-group v-model="formData.cp_share_type">
-            <el-radio :label="1">分成</el-radio>
-            <el-radio :label="2">保底</el-radio>
-            <el-radio :label="3">买断</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="封面" prop="cover_image">
-          <my-upload acceptType=".png,.jpg,.jpeg" :isMultiple="true" @fileRemove="fileRemove" @fileSuccess="fileSuccess"
-            :fileList="formData.fileList" action="/qiniu/upload/image"></my-upload>
-        </el-form-item>
-        <el-form-item label="简介" prop="note">
-          <el-input v-model="formData.note" placeholder="请输入简介" :rows="3" autosize type="textarea" />
+        <el-form-item label-width="150px" label="剧目播放授权材料" prop="authorized_img" class="flex flex-col">
+          <div style="margin-left:150px;">
+            <my-upload :key="Math.random()" acceptType=".png,.jpg,.jpeg" :maxFileSize="20" :isMultiple="false"
+              @fileRemove="fileRemoveTwo" @fileSuccess="fileSuccessTwo" :fileList="formData.fileListTwo"
+              action="/qiniu/upload/image"></my-upload>
+          </div>
         </el-form-item>
         </el-form-item>
       </div>
       </div>
     </div>
     </div>
@@ -72,116 +43,81 @@
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
-import { cpManageCpList, cpOptions } from '@/api/cp/index'
-import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
+import { videoStockWechatCheckAdd, videoStockWechatCheckUpdate } from '@/api/wxDeliver/index'
 import type { FormInstance, FormRules } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
 const ruleForm = ref<FormInstance>()
 const ruleForm = ref<FormInstance>()
 import { onMounted, ref } from 'vue';
 import { onMounted, ref } from 'vue';
+import { videoStockVideoList } from '@/api/video/index'
 const props = defineProps({
 const props = defineProps({
-  primary: String | Number,
+  primary: Object,
 });
 });
-const cooperations = ref([]);
-const categoryList = ref([])
-const formData = ref({ status: 2, miniProgramIds: [] })
+const emit = defineEmits(['close']);
+const formData = ref({})
 const rules = reactive({
 const rules = reactive({
-  name: [{ required: true, message: '请输入短剧名称', trigger: 'blur' }],
-  note: [{ required: true, message: '请输入简介', trigger: 'blur' }],
-  total_episode_num: [
+  registration_number: [{ required: true, message: '请输入剧目备案号', trigger: 'blur' }],
+  producer: [{ required: true, message: '请输入剧目制作方名称', trigger: 'blur' }],
+  playwright: [
     {
     {
       required: true,
       required: true,
-      message: '请输入集数',
+      message: '请输入编剧姓名',
       trigger: 'blur'
       trigger: 'blur'
     }
     }
   ],
   ],
-  update_type: [
-    {
-      required: true,
-      message: '请选择完结状态',
-      trigger: 'change'
-    }
-  ],
-  category_id: [
+  video_id: [
     {
     {
       required: true,
       required: true,
-      message: '请选择频道',
+      message: '请选择剧目名称',
       trigger: 'change'
       trigger: 'change'
     }
     }
   ],
   ],
-  shelf_type: [
+  production_license_img: [
     {
     {
       required: true,
       required: true,
-      message: '请选择上架状态',
-      trigger: 'change'
-    }
-  ],
-  d_charge_sequence: [
-    {
-      required: true,
-      message: '请输入起始集',
-      trigger: 'blur'
+      message: '请上传剧目制作方的《广播电视节目制作许可证》',
     }
     }
   ],
   ],
-  d_charge_coin: [
+  authorized_img: [
     {
     {
       required: true,
       required: true,
-      message: '请输入默认定价',
-      trigger: 'blur'
-    }
-  ],
-  cp_name: [
-    {
-      required: true,
-      message: '请选择所属CP方',
-      trigger: 'change'
-    }
-  ],
-  cp_share_type: [
-    {
-      required: true,
-      message: '请选择分成模式',
-      trigger: 'change'
-    }
-  ],
-  cover_image: [
-    {
-      required: true,
-      message: '请上传封面',
+      message: '请上传剧目播放授权材料',
     }
     }
   ],
   ],
 });
 });
-const selectType = ref([])
 const loading = ref(false)
 const loading = ref(false)
-const handleCascaderChange = (val: any) => {
-  console.log(val, 'valval');
-  if (val) {
-    // 获取最后一级选项的值
-    const lastOptionValue = val[val.length - 1];
-    console.log('最后一级选项的值:', lastOptionValue, selectType.value);
-    // 更新 selectedOptions 的值
-    formData.value.category_id = lastOptionValue;
-  } else {
-    delete formData.value.category_id
-  }
+const videoList = ref([])
+
+const initVideoList = (params?: object) => {
+  videoStockVideoList({ limit: 999, ...params }).then(res => {
+    console.log(res);
+    videoList.value = res.data
+  })
 }
 }
 const remoteMethod = (query: string) => {
 const remoteMethod = (query: string) => {
   if (query) {
   if (query) {
-    initCpOtion({ cp_name: query })
+    initVideoList({ videoName: query })
   } else {
   } else {
-    initCpOtion({})
+    initVideoList()
   }
   }
 }
 }
+
 const fileSuccess = (e) => {
 const fileSuccess = (e) => {
   console.log(e);
   console.log(e);
-  formData.value.cover_image = e;
+  formData.value.production_license_img = e;
+  formData.value.fileList = [{ uid: props.primary.id, url: e }]
 }
 }
 const fileRemove = (e) => {
 const fileRemove = (e) => {
   console.log(e);
   console.log(e);
-  formData.value.cover_image = '';
+  formData.value.production_license_img = '';
 }
 }
-const initCpOtion = (params: object) => {
-  cpOptions(params).then(res => {
-    cpList.value = res.data;
-  })
+
+const fileSuccessTwo = (e) => {
+  console.log(e);
+  formData.value.authorized_img = e;
+  formData.value.fileListTwo = [{ uid: props.primary.id, url: e }]
+}
+const fileRemoveTwo = (e) => {
+  console.log(e);
+  formData.value.authorized_img = '';
 }
 }
 
 
 const submitForm = (formEl: FormInstance | undefined) => {
 const submitForm = (formEl: FormInstance | undefined) => {
@@ -192,23 +128,18 @@ const submitForm = (formEl: FormInstance | undefined) => {
       if (valid) {
       if (valid) {
         let api;
         let api;
         let params = {
         let params = {
-          "name": formData.value.name,
-          "total_episode_num": formData.value.total_episode_num,
-          "update_type": formData.value.update_type,
-          "category_id": formData.value.category_id,
-          "shelf_type": formData.value.shelf_type,
-          "d_charge_sequence": formData.value.d_charge_sequence,
-          "d_charge_coin": formData.value.d_charge_coin,
-          "cp_name": formData.value.cp_name,
-          "cp_share_type": formData.value.cp_share_type,
-          "cover_image": formData.value.cover_image,
-          "note": formData.value.note
+          "video_id": formData.value.video_id,
+          "producer": formData.value.producer,
+          "playwright": formData.value.playwright,
+          "production_license_img": formData.value.production_license_img,
+          "authorized_img": formData.value.authorized_img,
+          "registration_number": formData.value.registration_number,
         };
         };
         if (props.primary) {
         if (props.primary) {
-          api = videoStockVideoUpdate
+          api = videoStockWechatCheckUpdate
           params.id = formData.value.id
           params.id = formData.value.id
         } else {
         } else {
-          api = videoStockVideoAdd
+          api = videoStockWechatCheckAdd
         }
         }
         api(params).then(res => {
         api(params).then(res => {
           console.log(res);
           console.log(res);
@@ -223,25 +154,15 @@ const submitForm = (formEl: FormInstance | undefined) => {
 }
 }
 
 
 if (props.primary) {
 if (props.primary) {
+  console.log(props.primary, 'primary,primaryprimary');
   formData.value = JSON.parse(JSON.stringify(props.primary))
   formData.value = JSON.parse(JSON.stringify(props.primary))
-  formData.value.fileList = [{ uid: props.primary.id, url: props.primary.cover_image }]
-  selectType.value = formData.value.category_id
-}
-const initType = () => {
-  videoStockVideoCategoryList().then(res => {
-    console.log(res);
-    cooperations.value = res.data
-    if (formData.value.channel == 1) {
-      categoryList.value = cooperations.value.length > 0 ? cooperations.value[0]?.list : []
-    } else if (formData.value.channel == 2) {
-      categoryList.value = cooperations.value.length > 0 ? cooperations.value[1]?.list : []
-    }
-  })
+  formData.value.fileList = [{ uid: props.primary.id, url: props.primary.production_license_img }]
+  formData.value.fileListTwo = [{ uid: props.primary.id, url: props.primary.authorized_img }]
+} else {
+  formData.value.fileList = []
+  formData.value.fileListTwo = []
 }
 }
-initType()
-const emit = defineEmits(['close']);
-const cpList = ref();
 onMounted(() => {
 onMounted(() => {
-  initCpOtion({})
+  initVideoList()
 });
 });
 </script>
 </script>

+ 0 - 111
src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/subscribeSet.vue

@@ -1,111 +0,0 @@
-<template>
-  <el-form :model="formData" label-width="120px" ref="ruleForm" :rules="rules" v-loading="loading" class="pr-4">
-    <div class="flex flex-row justify-between">
-      <div class="w-full">
-        <el-form-item label="收费模式" prop="chargeType">
-          <el-radio-group v-model="formData.chargeType">
-            <el-radio :label="1">单集固定收费</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="起始集" prop="chargeSequence">
-          <el-input-number style="width:200px;" v-model.number="formData.chargeSequence" :step="1" step-strictly
-            placeholder="请输入起始集" />
-          <span class="ml-3 text-gray-400">范围:1-30</span>
-        </el-form-item>
-        <el-form-item label="单集定价" prop="chargeCoin">
-          <div class="flex items-center w-full">
-            <el-input-number style="width:200px;" v-model.number="formData.chargeCoin" :step="1" step-strictly
-              placeholder="请输入单集定价" />
-            <span class="ml-3 text-gray-400">范围:50-300</span>
-          </div>
-        </el-form-item>
-      </div>
-    </div>
-    <div class="flex justify-end">
-      <el-button type="primary" @click="submitForm(ruleForm)">{{ $t('system.confirm') }}</el-button>
-    </div>
-  </el-form>
-</template>
-
-<script lang="ts" setup>
-import { InfoFilled } from '@element-plus/icons-vue';
-import { videoStockVideoSetChargeConfig } from '@/api/video/index'
-import type { FormInstance, FormRules } from 'element-plus'
-const ruleForm = ref<FormInstance>()
-import { onMounted, ref } from 'vue';
-const props = defineProps({
-  primary: String | Number,
-});
-const formData = ref({ status: 2, miniProgramIds: [] })
-const validateNumber = (rule, value, callback) => {
-  const min = 1;
-  const max = 30;
-
-  if (value < min || value > max) {
-    callback(new Error(`范围必须在 ${min} 到 ${max} 之间`));
-  } else {
-    callback();
-  }
-};
-
-const validateNumberCoin = (rule, value, callback) => {
-  const min = 50;
-  const max = 300;
-
-  if (value < min || value > max) {
-    callback(new Error(`范围必须在 ${min} 到 ${max} 之间`));
-  } else {
-    callback();
-  }
-};
-const rules = reactive({
-  chargeType: [{ required: true, message: '请选择收费模式', trigger: 'change' }],
-  chargeSequence: [
-    {
-      required: true,
-      message: '请输入起始集',
-      trigger: 'blur'
-    },
-    { validator: validateNumber, trigger: 'blur' },
-  ],
-  chargeCoin: [
-    {
-      required: true,
-      message: '请输入单集定价',
-      trigger: 'blur'
-    },
-    { validator: validateNumberCoin, trigger: 'blur' },
-  ]
-
-});
-const loading = ref(false)
-
-const submitForm = (formEl: FormInstance | undefined) => {
-  console.log(formData.value, 'formData.valueformData.value');
-  if (!formEl) return;
-  formEl
-    .validate(valid => {
-      if (valid) {
-        videoStockVideoSetChargeConfig({ ...formData.value }).then(res => {
-          console.log(res);
-          ElMessage.success(res.message)
-          emit('close')
-        })
-      } else {
-        loading.value = false;
-      }
-    })
-    .then(() => { });
-}
-
-if (props.primary) {
-  formData.value.id = props.primary.id
-  formData.value.chargeCoin = props.primary.charge_coin
-  formData.value.chargeType = props.primary.d_charge_type
-  formData.value.chargeSequence = props.primary.charge_sequence
-}
-const emit = defineEmits(['close']);
-onMounted(() => {
-
-});
-</script>

+ 0 - 84
src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/uploadVideo.vue

@@ -1,84 +0,0 @@
-<template>
-  <el-form :model="formDataForm" label-width="120px" ref="form" v-loading="loading" class="pr-4">
-    <el-form-item label="短剧名称" prop="name" :rules="[{ required: true, message: '短剧名称必须填写' }]">
-      <el-input disabled v-model="formDataForm.name" name="name" clearable />
-    </el-form-item>
-    <el-form-item label="集数" prop="total_episode_num" :rules="[{ required: true, message: '集数必须填写' }]">
-      <el-input disabled v-model="formDataForm.total_episode_num" name="author" clearable />
-    </el-form-item>
-    <el-form-item label="上传" prop="videos" :rules="[{ required: true, message: '请上传文件', trigger: 'change' }]">
-      <div class="items-center w-full">
-        支持MP4格式
-        <span class="text-red-400">上传文件统一命名格式要求,例:1.mp4; 11.mp4; 333.mp4</span>
-      </div>
-      <div class="w-full">
-
-        <video-uploader :fileList="videofileList" :public_video_url='formDataForm.cover_image' @fileRemove="fileRemove"
-          @success="fileSuccess"></video-uploader>
-      </div>
-    </el-form-item>
-    <div class="flex justify-end">
-      <el-button type="primary" @click="submitForm(form)">{{
-        $t('system.confirm')
-      }}</el-button>
-    </div>
-  </el-form>
-</template>
-
-<script lang="ts" setup>
-import { FormInstance } from 'element-plus';
-import { InfoFilled } from '@element-plus/icons-vue';
-import { videoStockEpisodeAdd } from '@/api/video/index'
-const props = defineProps({
-  primary: String | Number,
-});
-const form = ref<FormInstance>();
-const loading = ref(false);
-const formDataForm = ref({ videos: [] })
-const videofileList = ref([])
-const emit = defineEmits(['close']);
-const fileRemove = (e: object) => {
-  formDataForm.value.videos = formDataForm.value.videos.filter(item => item.name != e.name)
-  console.log(formDataForm.value, e, 'fileRemove');
-}
-const fileSuccess = (e: object) => {
-  formDataForm.value.videos.push({ name: e.fname, duration: parseInt(e.duration), url: e.url, key: e.key, })
-  console.log(formDataForm.value, 'fileSuccess');
-}
-
-const submitForm = (formEl: FormInstance | undefined) => {
-  loading.value = true;
-  console.log(formDataForm.value, formEl, 'formEl');
-  if (!formEl) return;
-  formEl
-    .validate(valid => {
-      if (valid) {
-        let params = {
-          video_id: formDataForm.value.video_id,
-          videos: formDataForm.value.videos
-        }
-        videoStockEpisodeAdd(params).then(res => {
-          console.log(res);
-          loading.value = false;
-          videofileList.value = []
-          emit('close')
-        }).catch(e => {
-          loading.value = false;
-        })
-        console.log(formDataForm.value, 'params', params);
-      } else {
-        loading.value = false;
-      }
-    })
-    .then(() => { });
-}
-if (props.primary) {
-  console.log(props.primary, 'props.primary');
-  formDataForm.value.video_id = props.primary.id
-  formDataForm.value.name = props.primary.name
-  formDataForm.value.total_episode_num = props.primary.total_episode_num
-  formDataForm.value.cover_image = props.primary.cover_image
-}
-onMounted(async () => {
-});
-</script>

+ 24 - 11
src/views/videoManage/wechatAudit/tabs/wechatAuditList/form/videoSync.vue

@@ -1,5 +1,4 @@
 <template>
 <template>
-  <el-alert title="注:如需批量下载,则多选目标集数,点击下载按钮即可" type="warning" show-icon :closable="false" />
   <div class="wrapper">
   <div class="wrapper">
     <!-- :poster="videoImg"视频封面 -->
     <!-- :poster="videoImg"视频封面 -->
     <video id="my-player" style="width:500px;" :key="current.public_video_url" class="video-js" controls autoplay
     <video id="my-player" style="width:500px;" :key="current.public_video_url" class="video-js" controls autoplay
@@ -31,14 +30,14 @@
         </el-popover>
         </el-popover>
       </div>
       </div>
       <div>
       <div>
-        <el-checkbox v-model="checkAll" border :indeterminate="isIndeterminate" @change="handleCheckAllChange">
+        <el-checkbox v-model="checkAll" border @change="handleCheckAllChange">
           全选
           全选
         </el-checkbox>
         </el-checkbox>
       </div>
       </div>
       <mytabs :meta="meta" v-if="meta.total" @change="handChange">
       <mytabs :meta="meta" v-if="meta.total" @change="handChange">
         <template v-slot:content>
         <template v-slot:content>
           <el-checkbox-group v-model="videoChoose" size="large" class="flex items-center" v-if="viewStatus">
           <el-checkbox-group v-model="videoChoose" size="large" class="flex items-center" v-if="viewStatus">
-            <el-checkbox border class="video-item" @change="videoShow(source)" v-for="(source, index) in videoUrlList"
+            <el-checkbox border class="video-item" @change="videoShowWx(source)" v-for="(source, index) in videoUrlList"
               :key="index" :label="source" :style="{ backgroundColor: colorType(source) }">
               :key="index" :label="source" :style="{ backgroundColor: colorType(source) }">
               {{ source.series_sequence }}
               {{ source.series_sequence }}
             </el-checkbox>
             </el-checkbox>
@@ -57,6 +56,7 @@
 <script lang="ts" setup>
 <script lang="ts" setup>
 import { ref } from 'vue'
 import { ref } from 'vue'
 import { videoStockEpisodeList } from '@/api/video/index'
 import { videoStockEpisodeList } from '@/api/video/index'
+import { videoStockWechatCheckVideoSeriesSyncWechat, videoStockWechatCheckVideoSeriesMedialink } from '@/api/wxDeliver/index'
 const myVideo = ref()
 const myVideo = ref()
 const videoChoose = ref([])
 const videoChoose = ref([])
 const changeForm = ref({ page: 1, limit: 100 })
 const changeForm = ref({ page: 1, limit: 100 })
@@ -71,29 +71,36 @@ if (props.primary) {
 }
 }
 const meta = ref({})
 const meta = ref({})
 const colorType = (data: object) => {
 const colorType = (data: object) => {
-  console.log(data, 'datacolorTypecolorType');
-  const type = data.series_sequence
+  const type = data.wechat_check_status
   switch (type) {
   switch (type) {
     case 1:
     case 1:
       return '#f18e00'
       return '#f18e00'
-    case 2:
-      return '#28c445'
     case 3:
     case 3:
+      return '#28c445'
+    case 2:
       return '#ed0b0b'
       return '#ed0b0b'
   }
   }
 }
 }
 const current = ref({})
 const current = ref({})
-const videoChooseUrls = ref([])
 // 查看状态
 // 查看状态
 const viewStatusChange = () => {
 const viewStatusChange = () => {
+  current.value = {}
   viewStatus.value = true
   viewStatus.value = true
+  checkAll.value = false
+  videoChoose.value = []
 }
 }
 // 同步视频
 // 同步视频
 const syncVideoChange = () => {
 const syncVideoChange = () => {
+  const series_ids = videoChoose.value.map(e => e.id)
+  videoStockWechatCheckVideoSeriesSyncWechat({ series_ids }).then(res => {
+    console.log(res);
+    ElMessage.success(res.message)
+  })
   viewStatus.value = false
   viewStatus.value = false
+  console.log(videoChoose.value, series_ids, 'videoChoosevideoChoose');
 }
 }
 const initVideoList = (params: object) => {
 const initVideoList = (params: object) => {
-  videoStockEpisodeList({ video_id: props.primary.id, ...params }).then(res => {
+  videoStockEpisodeList({ video_id: props.primary.id, need_wechat_status: 1, ...params }).then(res => {
     videoUrlList.value = res.data;
     videoUrlList.value = res.data;
     meta.value = { limit: res.limit, total: res.total }
     meta.value = { limit: res.limit, total: res.total }
   })
   })
@@ -112,8 +119,14 @@ const handChange = (e) => {
 const videoShow = (source: object) => {
 const videoShow = (source: object) => {
   console.log(source);
   console.log(source);
   current.value = videoChoose.value.find(el => el.public_video_url == source.public_video_url) ?? {}
   current.value = videoChoose.value.find(el => el.public_video_url == source.public_video_url) ?? {}
-  videoChooseUrls.value = videoChoose.value
-  console.log(videoChooseUrls.value, 'videoChooseUrls.value');
+}
+const videoShowWx = (source: object) => {
+  console.log(source);
+  videoStockWechatCheckVideoSeriesMedialink({ series_id: source.id }).then(res => {
+    console.log(res);
+    current.value = videoChoose.value.find(el => el.public_video_url == source.public_video_url) ?? {}
+    current.value.public_video_url = res.data
+  })
 }
 }
 
 
 onMounted(() => {
 onMounted(() => {

+ 85 - 133
src/views/videoManage/wechatAudit/tabs/wechatAuditList/index.vue

@@ -2,36 +2,32 @@
   <div>
   <div>
     <Search :search="search" :reset="resetQuery">
     <Search :search="search" :reset="resetQuery">
       <template v-slot:body>
       <template v-slot:body>
-        <el-form-item label="短剧" prop="name">
-          <el-input v-model="query.videoName" placeholder="请输入短剧名称" clearable />
-        </el-form-item>
-        <el-form-item label="状态" prop="updateType">
-          <el-select v-model="query.updateType" filterable clearable placeholder="请选择状态">
-            <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
+        <el-form-item label="剧目名称" prop="video_id">
+          <el-select v-model="query.video_id" class="w-full" clearable filterable remote :remote-method="remoteMethod"
+            placeholder="请选择剧目名称">
+            <el-option v-for="item in videoList" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
-        <el-form-item label="频道" prop="categoryId">
-          <el-cascader v-model="selectType" :options="cooperations" filterable clearable :change-on-select="true"
-            @change="handleCascaderChange" />
+        <el-form-item label="制作方" prop="producer">
+          <el-input v-model="query.producer" placeholder="请输入制作方名称" clearable />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="微信审核状态" prop="wechatPass">
-          <el-select v-model="query.wechatPass" filterable clearable placeholder="请选择微信审核状态">
-            <el-option v-for="item in wxstatusOptions" :key="item.value" :label="item.label" :value="item.value" />
-          </el-select>
+        <el-form-item label="编剧" prop="playwright">
+          <el-input v-model="query.playwright" placeholder="请输入编剧姓名" clearable />
         </el-form-item>
         </el-form-item>
       </template>
       </template>
     </Search>
     </Search>
     <div class="table-default">
     <div class="table-default">
       <div class="set-warpper">
       <div class="set-warpper">
-        <el-button type="primary" @click="mulSet" size="default" v-action="'video.video.mulSet'">批量提审</el-button>
+        <div>
+          <Operate :show="open" />
+        </div>
+        <el-button @click="mulSet" size="default">批量提审</el-button>
       </div>
       </div>
-      <Operate :show="open" v-action="'video.video.add'" />
       <el-table :data="tableData" class="mt-3" v-loading="loading" @selection-change="handleSelectionChange">
       <el-table :data="tableData" class="mt-3" v-loading="loading" @selection-change="handleSelectionChange">
         <el-table-column type="selection" />
         <el-table-column type="selection" />
-        <el-table-column prop="id" label="剧号" />
-        <el-table-column label="剧目名称" prop="name" min-width="150">
+        <el-table-column label="剧目名称" prop="name" show-overflow-tooltip min-width="150">
         </el-table-column>
         </el-table-column>
-        <el-table-column label="制作方名称" prop="name" min-width="150">
+        <el-table-column label="制作方名称" prop="producer" show-overflow-tooltip min-width="100">
         </el-table-column>
         </el-table-column>
         <el-table-column prop="note" label="剧目简介" min-width="250">
         <el-table-column prop="note" label="剧目简介" min-width="250">
           <template #default="scope">
           <template #default="scope">
@@ -40,9 +36,10 @@
             </span>
             </span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="category_str" label="编剧姓名" />
-        <el-table-column prop="category_str" label="总集数" />
-        <el-table-column label="剧目海报" show-overflow-tooltip>
+        <el-table-column prop="playwright" label="编剧姓名" show-overflow-tooltip min-width="100" />
+        <el-table-column prop="total_episode_num" label="总集数" />
+        <el-table-column prop="registration_number" label="剧目备案号" show-overflow-tooltip min-width="150" />
+        <el-table-column label="剧目海报" show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
             <div class="flex flex-col items-start justify-center wrapper">
             <div class="flex flex-col items-start justify-center wrapper">
               <el-popover placement="top" :width="200" trigger="click">
               <el-popover placement="top" :width="200" trigger="click">
@@ -52,46 +49,27 @@
                 </template>
                 </template>
                 <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
                 <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
               </el-popover>
               </el-popover>
-              <el-button type="primary" link size="default" @click="dowload(scope.row)">下载</el-button>
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="shelf_type_str" label="《广播电视节目制作许可证》" min-width="250">
+        <el-table-column prop="shelf_type_str" label="《广播电视节目制作许可证》" show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
-            <div class="flex flex-col items-start justify-center wrapper">
-              <el-popover placement="top" :width="200" trigger="hover">
-                <template #reference>
-                  <el-image :src="scope.row.cover_image" class="cursor-pointer" style="width:48px;height:48px;"
-                    fit="contain" :lazy="true"></el-image>
-                </template>
-                <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
-              </el-popover>
-              <el-button type="primary" link size="default" @click="dowload(scope.row)">下载</el-button>
-            </div>
+            <el-link type="primary" :href="scope.row.production_license_img" target="_blank">广播电视节目制作许可证</el-link>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="shelf_type_str" label="授权材料" min-width="250">
+        <el-table-column prop="shelf_type_str" label="授权材料" show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
-            <div class="flex flex-col items-start justify-center wrapper">
-              <el-popover placement="top" :width="200" trigger="click">
-                <template #reference>
-                  <el-image :src="scope.row.cover_image" class="cursor-pointer" style="width:48px;height:48px;"
-                    fit="contain" :lazy="true"></el-image>
-                </template>
-                <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
-              </el-popover>
-              <el-button type="primary" link size="default" @click="dowload(scope.row)">下载</el-button>
-            </div>
+            <el-link type="primary" :href="scope.row.authorized_img" target="_blank">剧目播放授权材料</el-link>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column label="操作">
         <el-table-column label="操作">
           <template #default="scope">
           <template #default="scope">
-            <el-button link type="primary" size="small" @click="openType('uploadVisible', scope.row)"
-              v-action="'video.episode.add'">上传视频</el-button><br />
             <el-button @click="open(scope.row)" link type="primary" size="small"
             <el-button @click="open(scope.row)" link type="primary" size="small"
               v-action="'video.video.update'">编辑</el-button><br />
               v-action="'video.video.update'">编辑</el-button><br />
-            <el-button @click="openType('takeVisible', scope.row)" link type="primary" size="small"
-              v-action="'video.video.setChargeConfig'">订阅设置</el-button><br />
+            <el-button link type="primary" size="small" @click="deliverDelete(scope.row)"
+              v-action="'video.episode.add'">删除</el-button><br />
+            <el-button @click="deliverChange(scope.row)" link type="primary" size="small"
+              v-action="'video.video.setChargeConfig'">一键提审</el-button><br />
             <el-button link type="primary" size="small" @click="openType('videoSyncVisible', scope.row)"
             <el-button link type="primary" size="small" @click="openType('videoSyncVisible', scope.row)"
               v-action="'video.episode.downloadList'">同步视频</el-button>
               v-action="'video.episode.downloadList'">同步视频</el-button>
             <br />
             <br />
@@ -100,80 +78,89 @@
       </el-table>
       </el-table>
       <Paginate />
       <Paginate />
     </div>
     </div>
-
     <Dialog v-model="visible" :title="title" destroy-on-close>
     <Dialog v-model="visible" :title="title" destroy-on-close>
-      <Create @close="close(search)" :primary="id" :eidapi="addApi" :addapi="addApi" :ismulSet="ismulSet" />
+      <Create @close="close(search)" :primary="id" />
     </Dialog>
     </Dialog>
-    <Dialog v-model="videoSyncVisible" width="80%" title="视频下载" destroy-on-close>
+    <Dialog v-model="videoSyncVisible" width="80%" title="同步视频" destroy-on-close>
       <videoSync @close="closeType('videoSyncVisible')" :primary="depotsData"></videoSync>
       <videoSync @close="closeType('videoSyncVisible')" :primary="depotsData"></videoSync>
     </Dialog>
     </Dialog>
-    <Dialog v-model="takeVisible" width="50%" title="订阅设置" destroy-on-close>
-      <subscribeSet @close="closeType('takeVisible')" :primary="takeData"></subscribeSet>
-    </Dialog>
-    <Dialog v-model="uploadVisible" width="50%" title="上传视频" destroy-on-close>
-      <uploadVideo @close="closeType('uploadVisible')" :primary="uploadData"></uploadVideo>
-    </Dialog>
   </div>
   </div>
 </template>
 </template>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
-import { downloadImage } from '@/utils/index'
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
-import { provide } from 'vue'
+import { videoStockVideoList } from '@/api/video/index'
+import { videoStockWechatCheckCheck, videoStockWechatCheckDelete } from '@/api/wxDeliver/index'
 import Create from './form/create.vue';
 import Create from './form/create.vue';
 import videoSync from './form/videoSync.vue';
 import videoSync from './form/videoSync.vue';
-import subscribeSet from './form/subscribeSet.vue';
-import uploadVideo from './form/uploadVideo.vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useDestroy } from '@/hook/curd/useDestroy';
 import { useDestroy } from '@/hook/curd/useDestroy';
 import { useOpen } from '@/hook/curd/useOpen';
 import { useOpen } from '@/hook/curd/useOpen';
-import { shortcuts } from '@/utils/shortcuts';
-import moment from 'moment';
-import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
 import { useUserStore } from '@/stores/modules/user/index'
 import { useUserStore } from '@/stores/modules/user/index'
-import Cache from '@/support/cache';
-import { fa } from 'element-plus/es/locale';
-const ismulSet = ref(false)
-const api = 'videoStock/video/list';
-const addApi = 'contentManage/book/edit_author';
+const api = 'videoStock/wechatCheck/list';
 const multipleSelection = ref([]);
 const multipleSelection = ref([]);
 const { data, query, search, reset, loading } = useGetList(api);
 const { data, query, search, reset, loading } = useGetList(api);
 const { deleted } = useDestroy();
 const { deleted } = useDestroy();
-const uploadBooksVisible = ref(false)
 const videoSyncVisible = ref(false)
 const videoSyncVisible = ref(false)
 const depotsData = ref({})
 const depotsData = ref({})
-const uploadVisible = ref(false)
-const uploadData = ref({})
-const takeVisible = ref(false)
-const takeData = ref({})
 const current = ref({})
 const current = ref({})
 const selectType = ref([])
 const selectType = ref([])
-const statusOptions = ref([{ label: '连载中', value: '1' }, { label: '完结', value: '2' }]);
-const wxstatusOptions = ref([{ label: '未通过', value: 0 }, { label: '已通过', value: 1 }]);
-const cooperations = ref([]);
 const rolesIdentify = ref([]);
 const rolesIdentify = ref([]);
-const isShowCreatePromotion = computed(() => JSON.parse(Cache.get('nav_data'))?.advertiser?.miniProgramIds && JSON.parse(Cache.get('nav_data'))?.app)
-
-
 const userStore = useUserStore()
 const userStore = useUserStore()
 
 
-const handleCascaderChange = (val: any) => {
-  console.log(val, 'valval');
-  if (val) {
-    // 获取最后一级选项的值
-    const lastOptionValue = val[val.length - 1];
-    console.log('最后一级选项的值:', lastOptionValue, selectType.value);
-    // 更新 selectedOptions 的值
-    query.value.categoryId = lastOptionValue;
+const videoList = ref([])
+
+const initVideoList = (params?: object) => {
+  videoStockVideoList({ limit: 999, ...params }).then(res => {
+    console.log(res);
+    videoList.value = res.data
+  })
+}
+const remoteMethod = (query: string) => {
+  if (query) {
+    initVideoList({ videoName: query })
   } else {
   } else {
-    delete query.value.categoryId
+    initVideoList()
   }
   }
 }
 }
-
 const resetQuery = () => {
 const resetQuery = () => {
   reset()
   reset()
   selectType.value = []
   selectType.value = []
 }
 }
+const deliverChange = (row: object) => {
+  console.log(row);
+  videoStockWechatCheckCheck({ ids: [row.id] }).then(res => {
+    console.log(res);
+    ElMessage.success(res.message)
+    search()
+  })
+}
+
+const deliverDelete = (row: object) => {
+  console.log(row);
+  ElMessageBox({
+    title: '提示',
+    message: h('p', null, [
+      h('span', null, `确认删除`),
+      h('span', null, `吗?`)
+    ]),
+    showCancelButton: true,
+    confirmButtonText: '确定',
+    type: 'warning',
+    cancelButtonText: '取消',
+    beforeClose: (action, instance, done) => {
+      if (action === 'confirm') {
+        videoStockWechatCheckDelete({ id: row.id }).then(res => {
+          console.log(res);
+          ElMessage.success(res.message)
+          search()
+        })
+      }
+      done();
+    }
+  });
+}
+
 const openType = (type: string, data: object) => {
 const openType = (type: string, data: object) => {
   current.value = data;
   current.value = data;
   switch (type) {
   switch (type) {
@@ -181,28 +168,8 @@ const openType = (type: string, data: object) => {
       videoSyncVisible.value = true
       videoSyncVisible.value = true
       depotsData.value = data
       depotsData.value = data
       break;
       break;
-    case 'takeVisible':
-      takeVisible.value = true
-      takeData.value = data
-      break;
-    case 'uploadVisible':
-      uploadVisible.value = true
-      uploadData.value = data
-      break;
   }
   }
 }
 }
-provide('video', current)
-const initType = () => {
-  videoStockVideoCategoryList().then(res => {
-    console.log(res);
-    cooperations.value = res.data
-  })
-}
-// 下载封面
-const dowload = (e: object) => {
-  downloadImage(e.cover_image, e.name)
-}
-
 const tableData = computed(() => data.value?.data);
 const tableData = computed(() => data.value?.data);
 const { open, close, title, visible, id } = useOpen();
 const { open, close, title, visible, id } = useOpen();
 
 
@@ -217,12 +184,6 @@ const closeType = (type) => {
     case 'videoSyncVisible':
     case 'videoSyncVisible':
       videoSyncVisible.value = false
       videoSyncVisible.value = false
       break;
       break;
-    case 'takeVisible':
-      takeVisible.value = false
-      break;
-    case 'uploadVisible':
-      uploadVisible.value = false
-      break;
   }
   }
   search()
   search()
 }
 }
@@ -237,12 +198,7 @@ const mulSet = () => {
     ElMessageBox({
     ElMessageBox({
       title: '提示',
       title: '提示',
       message: h('p', null, [
       message: h('p', null, [
-        h('span', null, `确认批量设置`),
-        h(
-          'span',
-          { style: 'color:red' },
-          multipleSelection.value.map(el => el.name).join(',')
-        ),
+        h('span', null, `确认批量提审`),
         h('span', null, `吗?`)
         h('span', null, `吗?`)
       ]),
       ]),
       showCancelButton: true,
       showCancelButton: true,
@@ -251,10 +207,12 @@ const mulSet = () => {
       cancelButtonText: '取消',
       cancelButtonText: '取消',
       beforeClose: (action, instance, done) => {
       beforeClose: (action, instance, done) => {
         if (action === 'confirm') {
         if (action === 'confirm') {
-          ismulSet.value = true
           let ids = multipleSelection.value.map(el => el.id);
           let ids = multipleSelection.value.map(el => el.id);
-          console.log(ids);
-          open(ids);
+          videoStockWechatCheckCheck({ ids }).then(res => {
+            console.log(res);
+            ElMessage.success(res.message)
+            search()
+          })
         }
         }
         done();
         done();
       }
       }
@@ -262,12 +220,7 @@ const mulSet = () => {
   }
   }
 };
 };
 onMounted(() => {
 onMounted(() => {
-  rolesIdentify.value = userStore.getRoles?.map(el => el?.identify)
-  console.log(rolesIdentify.value, 'rolesroles');
-  if (userStore.getRoles?.some(el => (el?.identify == 'company'))) {
-    query.value.operateUserId = JSON.parse(Cache.get('nav_data'))?.advertiser?.id;
-  }
-  initType()
+  initVideoList()
   search();
   search();
 });
 });
 </script>
 </script>
@@ -279,10 +232,9 @@ onMounted(() => {
 
 
 .table-default {
 .table-default {
   .set-warpper {
   .set-warpper {
-    height: 60px;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
-    justify-content: flex-end;
+    justify-content: space-between;
   }
   }
 
 
   .wrapper {
   .wrapper {

+ 0 - 86
src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/excelTitle.ts

@@ -1,86 +0,0 @@
-// 导出中文/字段
-export const titleObj = {
-  0: {
-    商户名称: 'company_name',
-    商户ID: 'puser_id',
-    优化师: 'username',
-    小程序: 'xcx_name',
-    用户ID: 'uid',
-    订单号: 'trade_no',
-    订单时间: 'order_created_at',
-    染色注册时间: 'ranse_created_at',
-    申退金额: 'refund_price',
-    充值金额: 'order_price',
-    推广名称: 'promotion_name',
-    档位类型: 'tip_text',
-    支付方式: 'pay_name',
-    平台审核: 'pt_verify_status_text',
-    平台审核备注: 'pt_verify_remark',
-    商户审核: 'sh_verify_status_text',
-    商户审核备注: 'sh_verify_remark'
-  },
-  1: {
-    商户名称: 'company_name',
-    商户ID: 'puser_id',
-    优化师: 'username',
-    小程序: 'xcx_name',
-    用户ID: 'uid',
-    订单号: 'trade_no',
-    订单时间: 'order_created_at',
-    染色注册时间: 'ranse_created_at',
-    申退金额: 'refund_price',
-    充值金额: 'order_price',
-    推广名称: 'promotion_name',
-    档位类型: 'tip_text',
-    支付方式: 'pay_name',
-    退款时间: 'pay_at',
-    退款单号: 'refund_no',
-    订单状态: 'status_text'
-  }
-};
-
-export const titlePtObj = {
-	0: {
-	  商户名称: 'company_name',
-	  商户ID: 'puser_id',
-	  优化师: 'username',
-	  小程序: 'xcx_name',
-	  用户ID: 'uid',
-	  订单号: 'trade_no',
-	  订单时间: 'order_created_at',
-	  染色注册时间: 'ranse_created_at',
-	  申退金额: 'refund_price',
-	  充值金额: 'order_price',
-	  推广名称: 'promotion_name',
-	  档位类型: 'tip_text',
-	  支付方式: 'pay_name',
-	  支付名称:"pay_merchant_name",
-	  收款主体:"payee_name",
-	  支付商户号:"pay_appid",
-	  平台审核: 'pt_verify_status_text',
-	  平台审核备注: 'pt_verify_remark',
-	  商户审核: 'sh_verify_status_text',
-	  商户审核备注: 'sh_verify_remark'
-	},
-	1: {
-	  商户名称: 'company_name',
-	  商户ID: 'puser_id',
-	  优化师: 'username',
-	  小程序: 'xcx_name',
-	  用户ID: 'uid',
-	  订单号: 'trade_no',
-	  订单时间: 'order_created_at',
-	  染色注册时间: 'ranse_created_at',
-	  申退金额: 'refund_price',
-	  充值金额: 'order_price',
-	  推广名称: 'promotion_name',
-	  档位类型: 'tip_text',
-	  支付方式: 'pay_name',
-	  支付名称:"pay_merchant_name",
-	  收款主体:"payee_name",
-	  支付商户号:"pay_appid",
-	  退款时间: 'pay_at',
-	  退款单号: 'refund_no',
-	  订单状态: 'status_text'
-	}
-}

+ 168 - 0
src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/form/create.vue

@@ -0,0 +1,168 @@
+<template>
+  <el-form :model="formData" label-width="150px" ref="ruleForm" :rules="rules" v-loading="loading" class="pr-4">
+    <div class="flex flex-row justify-between">
+      <div class="w-full">
+        <el-form-item label="剧目名称" prop="video_id">
+          <el-input v-model="formData.name" :disabled="props.primary?.id" v-if="props.primary?.id"
+            placeholder="请输入剧目制作方名称" />
+          <el-select v-model="formData.video_id" v-else class="w-full" clearable filterable remote
+            :remote-method="remoteMethod" placeholder="请选择剧目名称">
+            <el-option v-for="item in videoList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="剧目制作方名称" prop="producer">
+          <el-input v-model="formData.producer" placeholder="请输入剧目制作方名称" />
+        </el-form-item>
+        <el-form-item label="编剧姓名" prop="playwright">
+          <el-input v-model="formData.playwright" placeholder="请输入编剧姓名" />
+        </el-form-item>
+        <el-form-item label="剧目备案号" prop="registration_number">
+          <el-input v-model="formData.registration_number" placeholder="请输入剧目备案号" />
+        </el-form-item>
+        <el-form-item label-width="300px" label="剧目制作方的《广播电视节目制作许可证》" prop="production_license_img" class="flex flex-col">
+          <div style="margin-left:150px;">
+            <my-upload :key="Math.random()" acceptType=".png,.jpg,.jpeg" :maxFileSize="20" :isMultiple="false"
+              @fileRemove="fileRemove" @fileSuccess="fileSuccess" :fileList="formData.fileList"
+              action="/qiniu/upload/image"></my-upload>
+          </div>
+        </el-form-item>
+        <el-form-item label-width="150px" label="剧目播放授权材料" prop="authorized_img" class="flex flex-col">
+          <div style="margin-left:150px;">
+            <my-upload :key="Math.random()" acceptType=".png,.jpg,.jpeg" :maxFileSize="20" :isMultiple="false"
+              @fileRemove="fileRemoveTwo" @fileSuccess="fileSuccessTwo" :fileList="formData.fileListTwo"
+              action="/qiniu/upload/image"></my-upload>
+          </div>
+        </el-form-item>
+      </div>
+    </div>
+    <div class="flex justify-end">
+      <el-button type="primary" @click="submitForm(ruleForm)">{{ $t('system.confirm') }}</el-button>
+    </div>
+  </el-form>
+</template>
+
+<script lang="ts" setup>
+import { InfoFilled } from '@element-plus/icons-vue';
+import { videoStockWechatCheckAdd, videoStockWechatCheckUpdate } from '@/api/wxDeliver/index'
+import type { FormInstance, FormRules } from 'element-plus'
+const ruleForm = ref<FormInstance>()
+import { onMounted, ref } from 'vue';
+import { videoStockVideoList } from '@/api/video/index'
+const props = defineProps({
+  primary: Object,
+});
+const emit = defineEmits(['close']);
+const formData = ref({})
+const rules = reactive({
+  registration_number: [{ required: true, message: '请输入剧目备案号', trigger: 'blur' }],
+  producer: [{ required: true, message: '请输入剧目制作方名称', trigger: 'blur' }],
+  playwright: [
+    {
+      required: true,
+      message: '请输入编剧姓名',
+      trigger: 'blur'
+    }
+  ],
+  video_id: [
+    {
+      required: true,
+      message: '请选择剧目名称',
+      trigger: 'change'
+    }
+  ],
+  production_license_img: [
+    {
+      required: true,
+      message: '请上传剧目制作方的《广播电视节目制作许可证》',
+    }
+  ],
+  authorized_img: [
+    {
+      required: true,
+      message: '请上传剧目播放授权材料',
+    }
+  ],
+});
+const loading = ref(false)
+const videoList = ref([])
+
+const initVideoList = (params?: object) => {
+  videoStockVideoList({ limit: 999, ...params }).then(res => {
+    console.log(res);
+    videoList.value = res.data
+  })
+}
+const remoteMethod = (query: string) => {
+  if (query) {
+    initVideoList({ videoName: query })
+  } else {
+    initVideoList()
+  }
+}
+
+const fileSuccess = (e) => {
+  console.log(e);
+  formData.value.production_license_img = e;
+  formData.value.fileList = [{ uid: props.primary.id, url: e }]
+}
+const fileRemove = (e) => {
+  console.log(e);
+  formData.value.production_license_img = '';
+}
+
+const fileSuccessTwo = (e) => {
+  console.log(e);
+  formData.value.authorized_img = e;
+  formData.value.fileListTwo = [{ uid: props.primary.id, url: e }]
+}
+const fileRemoveTwo = (e) => {
+  console.log(e);
+  formData.value.authorized_img = '';
+}
+
+const submitForm = (formEl: FormInstance | undefined) => {
+  console.log(formData.value, 'formData.valueformData.value');
+  if (!formEl) return;
+  formEl
+    .validate(valid => {
+      if (valid) {
+        let api;
+        let params = {
+          "video_id": formData.value.video_id,
+          "producer": formData.value.producer,
+          "playwright": formData.value.playwright,
+          "production_license_img": formData.value.production_license_img,
+          "authorized_img": formData.value.authorized_img,
+          "registration_number": formData.value.registration_number,
+        };
+        if (props.primary) {
+          api = videoStockWechatCheckUpdate
+          params.id = formData.value.id
+        } else {
+          api = videoStockWechatCheckAdd
+        }
+        api(params).then(res => {
+          console.log(res);
+          ElMessage.success(res.message)
+          emit('close')
+        })
+      } else {
+        loading.value = false;
+      }
+    })
+    .then(() => { });
+}
+
+if (props.primary) {
+  console.log(props.primary, 'primary,primaryprimary');
+  formData.value = JSON.parse(JSON.stringify(props.primary))
+  formData.value.fileList = [{ uid: props.primary.id, url: props.primary.production_license_img }]
+  formData.value.fileListTwo = [{ uid: props.primary.id, url: props.primary.authorized_img }]
+} else {
+  formData.value.fileList = []
+  formData.value.fileListTwo = []
+}
+onMounted(() => {
+  initVideoList()
+});
+</script>

+ 179 - 290
src/views/videoManage/wechatAudit/tabs/wechatAuditStatus/index.vue

@@ -1,362 +1,251 @@
 <template>
 <template>
   <div>
   <div>
     <div class="pl-5">
     <div class="pl-5">
-      <el-radio-group v-model="query.refund_status" @change="search">
+      <el-radio-group v-model="query.status" @change="search">
         <el-radio v-for="item in statusListTop" :label="item.value" :key="item.value">{{ item.name }}</el-radio>
         <el-radio v-for="item in statusListTop" :label="item.value" :key="item.value">{{ item.name }}</el-radio>
       </el-radio-group>
       </el-radio-group>
+      <div v-if="['1,5', '4'].includes(query.status)" class="w-full text-red-500">
+        注:请仔细核对提审内容,若多次审核驳回,可能会导致提审最终失败,最终失败后,对应短剧将失去提审资格</div>
     </div>
     </div>
     <div class="flex justify-between">
     <div class="flex justify-between">
       <Search :search="search" :reset="resetQuery">
       <Search :search="search" :reset="resetQuery">
         <template v-slot:body>
         <template v-slot:body>
-          <el-form-item label="订单号" prop="trade_no">
-            <el-input v-model="query.trade_no" placeholder="请输入订单号" clearable />
-          </el-form-item>
-          <el-form-item label="用户ID" prop="uid">
-            <el-input v-model="query.uid" placeholder="请输入用户ID" clearable />
-          </el-form-item>
-          <el-form-item label="充值类型" prop="order_type">
-            <el-select v-model="query.order_type" filterable clearable placeholder="选择充值类型">
-              <el-option v-for="item in channelOrderTypeList" :key="item.value" :label="item.name" :value="item.value" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="推广名称" prop="promotion_id">
-            <el-select v-model="query.promotion_id" filterable remote clearable
-              :remote-method="(query) => { remoteMethod(query, 'channelPromotions') }" placeholder="全部推广名称">
-              <el-option v-for="item in channelPromotions" :key="item.promotion_id" :label="item.name"
-                :value="item.promotion_id" />
+          <el-form-item label="剧目名称" prop="video_id">
+            <el-select v-model="query.video_id" class="w-full" clearable filterable remote :remote-method="remoteMethod"
+              placeholder="请选择剧目名称">
+              <el-option v-for="item in videoList" :key="item.id" :label="item.name" :value="item.id" />
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
-          <el-form-item label="小程序" v-if="!query.promotion_id" prop="miniprogram_id">
-            <el-select v-model="query.miniprogram_id" filterable remote
-              :remote-method="(query) => { remoteMethod(query, 'channelMiniprogram') }" clearable placeholder="选择小程序">
-              <el-option v-for="item in channelMiniprogram" :key="item.miniprogram_id" :label="item.name"
-                :value="item.miniprogram_id" />
-            </el-select>
+          <el-form-item label="制作方" prop="producer">
+            <el-input v-model="query.producer" placeholder="请输入制作方名称" clearable />
           </el-form-item>
           </el-form-item>
-          <el-form-item label="优化师" v-if="!query.promotion_id && !rolesIdentify.includes('optimizer')" prop="user_id">
-            <el-select v-model="query.user_id" filterable remote clearable
-              :remote-method="(query) => { remoteMethod(query, 'channelPromotionsUsers') }" placeholder="选择优化师">
-              <el-option v-for="item in promotionsUsersList" :key="item.user_id" :label="item.name"
-                :value="item.user_id" />
-            </el-select>
+          <el-form-item label="编剧" prop="playwright">
+            <el-input v-model="query.playwright" placeholder="请输入编剧姓名" clearable />
           </el-form-item>
           </el-form-item>
-          <el-form-item label="订单时间">
-            <el-date-picker unlink-panels clearable @change="orderTimeChange" format="YYYY/MM/DD"
-              value-format="YYYY-MM-DD" v-model="query.orderTime" type="daterange" :shortcuts="shortcuts"
-              range-separator="To" start-placeholder="开始时间" end-placeholder="结束时间" />
-          </el-form-item>
-		  <el-form-item label="支付名称" prop="pay_merchant_name"  v-if="rolesIdentify.includes('administrator')">
-		    <el-input v-model="query.pay_merchant_name" placeholder="请输入支付名称" clearable />
-		  </el-form-item>
-		  <el-form-item label="收款主体" prop="payee_name" v-if="rolesIdentify.includes('administrator')">
-		    <el-input v-model="query.payee_name" placeholder="请输入收款主体" clearable />
-		  </el-form-item>
-		  <el-form-item label="支付商户号" prop="pay_appid"  v-if="rolesIdentify.includes('administrator')">
-		    <el-input v-model="query.pay_appid" placeholder="请输入支付商户号" clearable />
-		  </el-form-item>
-        </template>
-        <template v-slot:extra_button>
-          <exportExcel v-if="rolesIdentify.includes('administrator')"  api="orderRefund/order_list" sheet_name="订单列表" :title_obj="titlePtObj[query.refund_status]"
-            :extro_params="{ is_all: true, ...query }">
-          </exportExcel>
-		  <exportExcel v-else="rolesIdentify.includes('administrator')"  api="orderRefund/order_list" sheet_name="订单列表" :title_obj="titleObj[query.refund_status]"
-		    :extro_params="{ is_all: true, ...query }">
-		  </exportExcel>
-		  
         </template>
         </template>
       </Search>
       </Search>
     </div>
     </div>
     <div class="table-default">
     <div class="table-default">
-      <el-table :data="tableData" class="mt-3" v-loading="loading">
-        <el-table-column prop="company_name" label="商户名称" min-width="200px"
-          v-if="rolesIdentify.includes('administrator')">
-          <template #default="scope">
-            <div>{{ scope.row.company_name }}</div>
-            <div>ID:{{ scope.row.puser_id }}</div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="username" label="优化师" show-overflow-tooltip min-width="200px"
-          v-if="!rolesIdentify.includes('optimizer')">
+      <div class="set-warpper">
+        <el-button @click="mulSet" size="default">批量提审</el-button>
+      </div>
+      <el-table :data="tableData" class="mt-3" v-loading="loading" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" />
+        <el-table-column label="剧目名称" prop="name" show-overflow-tooltip min-width="150">
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="xcx_name" show-overflow-tooltip label="小程序" min-width="200px">
+        <el-table-column label="制作方名称" prop="producer" show-overflow-tooltip min-width="100">
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="uid" label="用户ID" show-overflow-tooltip>
-        </el-table-column>
-        <el-table-column prop="trade_no" label="订单号" show-overflow-tooltip min-width="200px">
-        </el-table-column>
-        <el-table-column prop="order_created_at" label="订单时间" show-overflow-tooltip min-width="200px" />
-        <el-table-column prop="ranse_created_at" label="染色注册时间" show-overflow-tooltip min-width="200px" />
-        <el-table-column prop="refund_price" label="申退金额" show-overflow-tooltip min-width="200px" />
-        <el-table-column prop="order_price" label="充值金额" show-overflow-tooltip>
-        </el-table-column>
-        <el-table-column prop="promotion_name" label="推广名称" show-overflow-tooltip min-width="200px">
-        </el-table-column>
-        <el-table-column prop="tip_text" label="档位类型" show-overflow-tooltip min-width="150px">
-        </el-table-column>
-        <el-table-column prop="pay_name" label="支付方式" show-overflow-tooltip min-width="150px">
+        <el-table-column prop="note" label="剧目简介" min-width="250">
+          <template #default="scope">
+            <span class="note-content">
+              {{ scope.row.note }}
+            </span>
+          </template>
         </el-table-column>
         </el-table-column>
-		<el-table-column prop="pay_merchant_name" label="支付名称" show-overflow-tooltip min-width="150px"  v-if="rolesIdentify.includes('administrator')">
-		</el-table-column>
-		<el-table-column prop="payee_name" label="收款主体" show-overflow-tooltip min-width="150px"  v-if="rolesIdentify.includes('administrator')">
-		</el-table-column>
-		<el-table-column prop="pay_appid" label="支付商户号" show-overflow-tooltip min-width="150px"  v-if="rolesIdentify.includes('administrator')">
-		</el-table-column>
-        <el-table-column prop="pay_at" label="退款时间" v-if="query.refund_status == 1" show-overflow-tooltip
-          min-width="180px">
+        <el-table-column prop="playwright" label="编剧姓名" show-overflow-tooltip min-width="100" />
+        <el-table-column prop="total_episode_num" label="总集数" />
+        <el-table-column prop="registration_number" label="剧目备案号" show-overflow-tooltip min-width="150" />
+        <el-table-column label="剧目海报" show-overflow-tooltip min-width="150">
+          <template #default="scope">
+            <div class="flex flex-col items-start justify-center wrapper">
+              <el-popover placement="top" :width="200" trigger="click">
+                <template #reference>
+                  <el-image :src="scope.row.cover_image" class="cursor-pointer" style="width:48px;height:48px;"
+                    fit="contain" :lazy="true"></el-image>
+                </template>
+                <el-image :src="scope.row.cover_image" style="width:100%;" fit="contain"></el-image>
+              </el-popover>
+            </div>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="refund_no" label="退款单号" v-if="query.refund_status == 1" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="shelf_type_str" label="《广播电视节目制作许可证》" show-overflow-tooltip min-width="200">
+          <template #default="scope">
+            <el-link type="primary" :href="scope.row.production_license_img" target="_blank">广播电视节目制作许可证</el-link>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 1" prop="status_text" label="订单状态" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="shelf_type_str" label="授权材料" show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
-            <div class="wrapper">
-              <span class="text-lg font-bold content">
-                <el-text class="mx-1" type="info">{{ scope.row.status_text }}</el-text>
-              </span>
-            </div>
+            <el-link type="primary" :href="scope.row.authorized_img" target="_blank">剧目播放授权材料</el-link>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 0" prop="pt_verify_status_text" label="平台审核" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="apply_at" label="提审时间" show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
-            <div class="wrapper">
-              <span class="text-lg font-bold content">
-                <el-text class="mx-1" :type="colorType(scope.row)">{{ scope.row.pt_verify_status_text }}</el-text>
-              </span>
-            </div>
+            <div>{{ scope.row.apply_at }}</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 0" prop="pt_verify_remark" label="平台审核备注" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="check_at" v-if="['2', '3', '4'].includes(query.status)" label="审核时间" show-overflow-tooltip
+          min-width="150">
+          <template #default="scope">
+            <div>{{ scope.row.apply_at }}</div>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 0" prop="sh_verify_status_text" label="商户审核" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="status" v-if="['1,5', '2', '3', '4'].includes(query.status)" label="审核状态"
+          show-overflow-tooltip min-width="150">
           <template #default="scope">
           <template #default="scope">
-            <div class="wrapper">
-              <span class="text-lg font-bold content">
-                <el-text class="mx-1" :type="colorType(scope.row)">{{ scope.row.sh_verify_status_text }}</el-text>
-              </span>
-            </div>
+            <div>{{ scope.row.status_str }}</div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 0" prop="sh_verify_remark" label="商户审核备注" show-overflow-tooltip
-          min-width="150px">
+        <el-table-column prop="check_reason" v-if="['4'].includes(query.status)" label="审核原因" show-overflow-tooltip
+          min-width="150">
+          <template #default="scope">
+            <div>{{ scope.row.check_reason }}</div>
+          </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column v-if="query.refund_status == 0" label="操作" fixed="right">
+        <el-table-column label="操作" v-if="isShowOperate">
           <template #default="scope">
           <template #default="scope">
-            <el-button link type="primary" size="small" v-action="'orderRefund.RefundOrder.platformVerify'"
-              @click="openType('noapprovedVisible', scope.row, '平台审核')">平台审核</el-button>
-            <br />
-            <el-button link type="primary" size="small" v-action="'orderRefund.RefundOrder.companyVerify'"
-              @click="openType('noapprovedVisible', scope.row, '商户审核')">商户审核</el-button>
-            <br />
-            <el-button :disabled="!scope.row.can_pay" link type="primary" size="small"
-              v-action="'orderRefund.RefundOrder.payToUser'"
-              @click="openType('approvedVisible', scope.row)">确认打款</el-button>
+            <el-button @click="open(scope.row)" link type="primary" size="small"
+              v-action="'video.video.update'">编辑</el-button><br />
+            <el-button link type="primary" size="small" @click="deliverDelete(scope.row)"
+              v-action="'video.episode.add'">删除</el-button><br />
+            <el-button @click="deliverChange(scope.row)" link type="primary" size="small"
+              v-action="'video.video.setChargeConfig'">重新提审</el-button><br />
             <br />
             <br />
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
       <Paginate />
       <Paginate />
     </div>
     </div>
-    <el-dialog width="500px" v-model="noapprovedVisible" :title="titleDialog" destroy-on-close @close="noapprovedClose">
-      <el-form :model="form" label-width="120px">
-        <el-form-item label="审核结果">
-          <el-radio-group v-model="form.status" @change="search">
-            <el-radio v-for="item in statusList" :label="item.value" :key="item.value">{{ item.name }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="备注">
-          <el-input v-model="form.remark" :rows="3" type="textarea" placeholder="请输入内容" autocomplete="off" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="noapprovedClose">取消</el-button>
-          <el-button type="primary" @click="noapproveChange">
-            确认
-          </el-button>
-        </span>
-      </template>
-    </el-dialog>
+    <Dialog v-model="visible" :title="title" destroy-on-close>
+      <Create @close="close(search)" :primary="id" />
+    </Dialog>
   </div>
   </div>
 </template>
 </template>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
-import { shortcuts } from '@/utils/shortcuts'
-import { useRouter, useRoute } from 'vue-router'
 import { InfoFilled } from '@element-plus/icons-vue';
 import { InfoFilled } from '@element-plus/icons-vue';
+import { videoStockVideoList } from '@/api/video/index'
+import { videoStockWechatCheckCheck, videoStockWechatCheckDelete } from '@/api/wxDeliver/index'
+import Create from './form/create.vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useGetList } from '@/hook/curd/useGetList';
-import {titleObj,titlePtObj} from "./excelTitle"
-import {
-  channelOrderList,
-  channelMiniprogramUseList,
-  channelPromotionsOptions,
-  channelPromotionsUsers,
-  channelOrderStatus,
-  channelOrderType,
-} from '@/api/orders/index'
-
-import { orderRefundVerifyPt, orderRefundVerifySh, orderRefundPayToUser } from '@/api/orders/index'
-import moment from 'moment';
-const form = ref({ status: 1 })
-const start_date = moment().startOf('month').format('YYYY-MM-DD')
-const end_date = moment().endOf('month').format('YYYY-MM-DD')
-const statusList = ref([
-  { name: '审核通过', value: 1 },
-  { name: '审核不通过', value: 2 },
-])
-const statusListTop = ref([
-  { name: '待审核', value: 0 },
-  { name: '已退款', value: 1 },
-])
-const api = 'orderRefund/order_list';
-const router = useRouter()
-const route = useRoute()
-const approvedVisible = ref(false)
-const noapprovedVisible = ref(false)
+import { useDestroy } from '@/hook/curd/useDestroy';
+import { useOpen } from '@/hook/curd/useOpen';
+import { useUserStore } from '@/stores/modules/user/index'
+const api = 'videoStock/wechatCheck/list';
+const multipleSelection = ref([]);
 const { data, query, search, reset, loading } = useGetList(api);
 const { data, query, search, reset, loading } = useGetList(api);
-const titleDialog = ref('')
+const { deleted } = useDestroy();
+const videoSyncVisible = ref(false)
+const depotsData = ref({})
 const current = ref({})
 const current = ref({})
-const promotionsUsersList = ref([])
-const channelMiniprogram = ref([])
-const channelPromotions = ref([])
-const channelOrderStatusList = ref([])
-const channelOrderTypeList = ref([])
-const rolesIdentify = inject('rolesIdentify')
+const selectType = ref([])
+const rolesIdentify = ref([]);
+const userStore = useUserStore()
+const statusListTop = ref([
+  // { name: '待审核', value: '0' },
+  { name: '审核中', value: '1,5' },
+  { name: '审核驳回', value: '4' },
+  { name: '审核通过', value: '3' },
+  { name: '最终失败', value: '2' },
+])
 
 
-const colorType = (data: object) => {
-  const type = data.pt_verify_status || data.sh_verify_status
-  switch (type) {
-    case 0:
-      return 'warning'
-    case 1:
-      return 'success'
-    case 2:
-      return 'danger'
+
+const isShowOperate = computed(() => ['4'].includes(query.value.status))
+const videoList = ref([])
+
+const initVideoList = (params?: object) => {
+  videoStockVideoList({ limit: 999, ...params }).then(res => {
+    console.log(res);
+    videoList.value = res.data
+  })
+}
+const remoteMethod = (query: string) => {
+  if (query) {
+    initVideoList({ videoName: query })
+  } else {
+    initVideoList()
   }
   }
 }
 }
-const noapprovedClose = () => {
-  form.value = { status: 1 };
-  noapprovedVisible.value = false;
+const resetQuery = () => {
+  reset()
+  selectType.value = []
 }
 }
-
-const noapproveChange = () => {
-  let api;
-  if (titleDialog.value == '平台审核') {
-    api = orderRefundVerifyPt
-  } else if (titleDialog.value == '商户审核') {
-    api = orderRefundVerifySh
-  }
-  api({ refund_id: current.value.id, ...form.value }).then(res => {
-    console.log(res, 'apiapiapiapi');
+const deliverChange = (row: object) => {
+  console.log(row);
+  videoStockWechatCheckCheck({ ids: [row.id] }).then(res => {
+    console.log(res);
     ElMessage.success(res.message)
     ElMessage.success(res.message)
-    noapprovedVisible.value = false;
     search()
     search()
   })
   })
 }
 }
 
 
-const openType = (type: string, data?: object, title?: string) => {
-  current.value = data || {}
-  switch (type) {
-    case 'approvedVisible':
-      ElMessageBox.confirm(
-        '确认打款吗?',
-        '提示',
-        {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning',
-        }
-      )
-        .then(() => {
-          orderRefundPayToUser({ refund_id: current.value.id }).then(res => {
-            ElMessage.success(res.message)
-            search()
-          })
-        })
-        .catch(() => {
-
+const deliverDelete = (row: object) => {
+  console.log(row);
+  ElMessageBox({
+    title: '提示',
+    message: h('p', null, [
+      h('span', null, `确认删除`),
+      h('span', null, `吗?`)
+    ]),
+    showCancelButton: true,
+    confirmButtonText: '确定',
+    type: 'warning',
+    cancelButtonText: '取消',
+    beforeClose: (action, instance, done) => {
+      if (action === 'confirm') {
+        videoStockWechatCheckDelete({ id: row.id }).then(res => {
+          console.log(res);
+          ElMessage.success(res.message)
+          search()
         })
         })
-      break;
-    case 'noapprovedVisible':
-      titleDialog.value = title || ''
-      noapprovedVisible.value = true
-      break;
-  }
+      }
+      done();
+    }
+  });
 }
 }
 
 
-const orderTimeChange = (e: object) => {
-  console.log(e, 'timeChangetimeChangetimeChange');
-  if (query.value.orderTime) {
-    const timeArr = toRaw(e);
-    query.value.created_at_start = timeArr[0]
-    query.value.created_at_end = timeArr[1]
-  } else {
-    delete query.value.created_at_start
-    delete query.value.created_at_end
-  }
-}
-const remoteMethod = (query: string, type: string,) => {
-  console.log(query, 'queryquery', type);
+const openType = (type: string, data: object) => {
+  current.value = data;
   switch (type) {
   switch (type) {
-    case 'channelPromotionsUsers':
-      initRemoteOption('channelPromotionsUsers', { name: query })
-      break;
-    case 'channelMiniprogram':
-      initRemoteOption('channelMiniprogram', { name: query })
-      break;
-    case 'channelPromotions':
-      initRemoteOption('channelPromotions', { name: query })
+    case 'videoSyncVisible':
+      videoSyncVisible.value = true
+      depotsData.value = data
       break;
       break;
   }
   }
 }
 }
+const tableData = computed(() => data.value?.data);
+const { open, close, title, visible, id } = useOpen();
 
 
-const initRemoteOption = (type: string, params?: object) => {
-  switch (type) {
-    case 'channelPromotionsUsers':
-      channelPromotionsUsers({ limit: 30, ...params }).then(res => {
-        promotionsUsersList.value = res.data
-      })
-      break;
-    case 'channelMiniprogram':
-      channelMiniprogramUseList({ limit: 30, ...params }).then(res => {
-        channelMiniprogram.value = res.data
-      })
-      break;
-    case 'channelPromotions':
-      channelPromotionsOptions({ limit: 30, ...params }).then(res => {
-        channelPromotions.value = res.data
-      })
-      break;
-  }
-}
+const handleSelectionChange = (val: []) => {
+  console.log(toRaw(val));
+  multipleSelection.value = val;
+};
 
 
-const init = () => {
-  channelOrderStatus().then(res => {
-    console.log(res);
-    channelOrderStatusList.value = res.data
-  })
-  channelOrderType().then(res => {
-    console.log(res);
-    channelOrderTypeList.value = res.data
-  })
-}
 
 
-const resetQuery = () => {
-  query.value = Object.assign({ page: query.value.page, limit: query.value.limit, refund_status: 0 });
-  search()
-}
-const tableData = computed(() => data.value?.data);
+const mulSet = () => {
+  if (multipleSelection.value.length <= 0) {
+    return ElMessage.warning({
+      message: '至少选择一条数据',
+      type: 'warning'
+    });
+  } else {
+    ElMessageBox({
+      title: '提示',
+      message: h('p', null, [
+        h('span', null, `确认批量提审`),
+        h('span', null, `吗?`)
+      ]),
+      showCancelButton: true,
+      confirmButtonText: '确定',
+      type: 'warning',
+      cancelButtonText: '取消',
+      beforeClose: (action, instance, done) => {
+        if (action === 'confirm') {
+          let ids = multipleSelection.value.map(el => el.id);
+          videoStockWechatCheckCheck({ ids }).then(res => {
+            console.log(res);
+            ElMessage.success(res.message)
+            search()
+          })
+        }
+        done();
+      }
+    });
+  }
+};
 
 
 onMounted(() => {
 onMounted(() => {
-  console.log(rolesIdentify, 'rolesIdentifyrolesIdentify');
-  initRemoteOption('channelPromotionsUsers')
-  initRemoteOption('channelMiniprogram')
-  initRemoteOption('channelPromotions')
-  init()
-  query.value.refund_status = 0;
+  query.value.status = '1,5';
+  initVideoList()
   search();
   search();
 });
 });
 </script>
 </script>