Bladeren bron

Merge branch 'pansl' into psl_test_souquan

pansl 1 jaar geleden
bovenliggende
commit
40f69502ac

+ 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);
+}

+ 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;

+ 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-form-item>
     <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>
     </el-form-item>
     <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="w-full">
         <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>
         </el-form-item>
       </div>

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

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

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

@@ -140,7 +140,7 @@
     </div>
 
     <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 v-model="videoDLVisible" width="80%" title="视频下载" destroy-on-close>
       <videoDL @close="closeType('videoDLVisible')" :primary="depotsData"></videoDL>
@@ -176,9 +176,7 @@ import moment from 'moment';
 import { videoStockVideoUpdate, videoStockVideoAdd, videoStockVideoCategoryList } from '@/api/video/index'
 import { useUserStore } from '@/stores/modules/user/index'
 import Cache from '@/support/cache';
-const ismulSet = ref(false)
 const api = 'videoStock/video/list';
-const addApi = 'contentManage/book/edit_author';
 const multipleSelection = ref([]);
 const { data, query, search, reset, loading } = useGetList(api);
 const { deleted } = useDestroy();
@@ -303,7 +301,6 @@ const mulSet = () => {
       cancelButtonText: '取消',
       beforeClose: (action, instance, done) => {
         if (action === 'confirm') {
-          ismulSet.value = true
           let ids = multipleSelection.value.map(el => el.id);
           console.log(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>
-  <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="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 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 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 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 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>
         </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>
       </div>
     </div>
@@ -72,116 +43,81 @@
 
 <script lang="ts" setup>
 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'
 const ruleForm = ref<FormInstance>()
 import { onMounted, ref } from 'vue';
+import { videoStockVideoList } from '@/api/video/index'
 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({
-  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,
-      message: '请输入集数',
+      message: '请输入编剧姓名',
       trigger: 'blur'
     }
   ],
-  update_type: [
-    {
-      required: true,
-      message: '请选择完结状态',
-      trigger: 'change'
-    }
-  ],
-  category_id: [
+  video_id: [
     {
       required: true,
-      message: '请选择频道',
+      message: '请选择剧目名称',
       trigger: 'change'
     }
   ],
-  shelf_type: [
+  production_license_img: [
     {
       required: true,
-      message: '请选择上架状态',
-      trigger: 'change'
-    }
-  ],
-  d_charge_sequence: [
-    {
-      required: true,
-      message: '请输入起始集',
-      trigger: 'blur'
+      message: '请上传剧目制作方的《广播电视节目制作许可证》',
     }
   ],
-  d_charge_coin: [
+  authorized_img: [
     {
       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 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) => {
   if (query) {
-    initCpOtion({ cp_name: query })
+    initVideoList({ videoName: query })
   } else {
-    initCpOtion({})
+    initVideoList()
   }
 }
+
 const fileSuccess = (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) => {
   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) => {
@@ -192,23 +128,18 @@ const submitForm = (formEl: FormInstance | undefined) => {
       if (valid) {
         let api;
         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) {
-          api = videoStockVideoUpdate
+          api = videoStockWechatCheckUpdate
           params.id = formData.value.id
         } else {
-          api = videoStockVideoAdd
+          api = videoStockWechatCheckAdd
         }
         api(params).then(res => {
           console.log(res);
@@ -223,25 +154,15 @@ const submitForm = (formEl: FormInstance | undefined) => {
 }
 
 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.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(() => {
-  initCpOtion({})
+  initVideoList()
 });
 </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>
-  <el-alert title="注:如需批量下载,则多选目标集数,点击下载按钮即可" type="warning" show-icon :closable="false" />
   <div class="wrapper">
     <!-- :poster="videoImg"视频封面 -->
     <video id="my-player" style="width:500px;" :key="current.public_video_url" class="video-js" controls autoplay
@@ -31,14 +30,14 @@
         </el-popover>
       </div>
       <div>
-        <el-checkbox v-model="checkAll" border :indeterminate="isIndeterminate" @change="handleCheckAllChange">
+        <el-checkbox v-model="checkAll" border @change="handleCheckAllChange">
           全选
         </el-checkbox>
       </div>
       <mytabs :meta="meta" v-if="meta.total" @change="handChange">
         <template v-slot:content>
           <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) }">
               {{ source.series_sequence }}
             </el-checkbox>
@@ -57,6 +56,7 @@
 <script lang="ts" setup>
 import { ref } from 'vue'
 import { videoStockEpisodeList } from '@/api/video/index'
+import { videoStockWechatCheckVideoSeriesSyncWechat, videoStockWechatCheckVideoSeriesMedialink } from '@/api/wxDeliver/index'
 const myVideo = ref()
 const videoChoose = ref([])
 const changeForm = ref({ page: 1, limit: 100 })
@@ -71,29 +71,36 @@ if (props.primary) {
 }
 const meta = ref({})
 const colorType = (data: object) => {
-  console.log(data, 'datacolorTypecolorType');
-  const type = data.series_sequence
+  const type = data.wechat_check_status
   switch (type) {
     case 1:
       return '#f18e00'
-    case 2:
-      return '#28c445'
     case 3:
+      return '#28c445'
+    case 2:
       return '#ed0b0b'
   }
 }
 const current = ref({})
-const videoChooseUrls = ref([])
 // 查看状态
 const viewStatusChange = () => {
+  current.value = {}
   viewStatus.value = true
+  checkAll.value = false
+  videoChoose.value = []
 }
 // 同步视频
 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
+  console.log(videoChoose.value, series_ids, 'videoChoosevideoChoose');
 }
 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;
     meta.value = { limit: res.limit, total: res.total }
   })
@@ -112,8 +119,14 @@ const handChange = (e) => {
 const videoShow = (source: object) => {
   console.log(source);
   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(() => {

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

@@ -2,36 +2,32 @@
   <div>
     <Search :search="search" :reset="resetQuery">
       <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-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 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>
       </template>
     </Search>
     <div class="table-default">
       <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>
-      <Operate :show="open" v-action="'video.video.add'" />
       <el-table :data="tableData" class="mt-3" v-loading="loading" @selection-change="handleSelectionChange">
         <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 label="制作方名称" prop="name" min-width="150">
+        <el-table-column label="制作方名称" prop="producer" show-overflow-tooltip min-width="100">
         </el-table-column>
         <el-table-column prop="note" label="剧目简介" min-width="250">
           <template #default="scope">
@@ -40,9 +36,10 @@
             </span>
           </template>
         </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">
             <div class="flex flex-col items-start justify-center wrapper">
               <el-popover placement="top" :width="200" trigger="click">
@@ -52,46 +49,27 @@
                 </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>
           </template>
         </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">
-            <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>
         </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">
-            <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>
         </el-table-column>
         <el-table-column label="操作">
           <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"
               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)"
               v-action="'video.episode.downloadList'">同步视频</el-button>
             <br />
@@ -100,80 +78,89 @@
       </el-table>
       <Paginate />
     </div>
-
     <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 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>
     </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>
 </template>
 
 <script lang="ts" setup>
-import { downloadImage } from '@/utils/index'
 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 videoSync from './form/videoSync.vue';
-import subscribeSet from './form/subscribeSet.vue';
-import uploadVideo from './form/uploadVideo.vue';
 import { useGetList } from '@/hook/curd/useGetList';
 import { useDestroy } from '@/hook/curd/useDestroy';
 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 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 { data, query, search, reset, loading } = useGetList(api);
 const { deleted } = useDestroy();
-const uploadBooksVisible = ref(false)
 const videoSyncVisible = ref(false)
 const depotsData = ref({})
-const uploadVisible = ref(false)
-const uploadData = ref({})
-const takeVisible = ref(false)
-const takeData = ref({})
 const current = 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 isShowCreatePromotion = computed(() => JSON.parse(Cache.get('nav_data'))?.advertiser?.miniProgramIds && JSON.parse(Cache.get('nav_data'))?.app)
-
-
 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 {
-    delete query.value.categoryId
+    initVideoList()
   }
 }
-
 const resetQuery = () => {
   reset()
   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) => {
   current.value = data;
   switch (type) {
@@ -181,28 +168,8 @@ const openType = (type: string, data: object) => {
       videoSyncVisible.value = true
       depotsData.value = data
       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 { open, close, title, visible, id } = useOpen();
 
@@ -217,12 +184,6 @@ const closeType = (type) => {
     case 'videoSyncVisible':
       videoSyncVisible.value = false
       break;
-    case 'takeVisible':
-      takeVisible.value = false
-      break;
-    case 'uploadVisible':
-      uploadVisible.value = false
-      break;
   }
   search()
 }
@@ -237,12 +198,7 @@ const mulSet = () => {
     ElMessageBox({
       title: '提示',
       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, `吗?`)
       ]),
       showCancelButton: true,
@@ -251,10 +207,12 @@ const mulSet = () => {
       cancelButtonText: '取消',
       beforeClose: (action, instance, done) => {
         if (action === 'confirm') {
-          ismulSet.value = true
           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();
       }
@@ -262,12 +220,7 @@ const mulSet = () => {
   }
 };
 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();
 });
 </script>
@@ -279,10 +232,9 @@ onMounted(() => {
 
 .table-default {
   .set-warpper {
-    height: 60px;
     display: flex;
     align-items: center;
-    justify-content: flex-end;
+    justify-content: space-between;
   }
 
   .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>
   <div>
     <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-group>
+      <div v-if="['1,5', '4'].includes(query.status)" class="w-full text-red-500">
+        注:请仔细核对提审内容,若多次审核驳回,可能会导致提审最终失败,最终失败后,对应短剧将失去提审资格</div>
     </div>
     <div class="flex justify-between">
       <Search :search="search" :reset="resetQuery">
         <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-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 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 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>
       </Search>
     </div>
     <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 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 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 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 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 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">
-            <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>
         </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">
-            <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>
         </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 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">
-            <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>
         </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 v-if="query.refund_status == 0" label="操作" fixed="right">
+        <el-table-column label="操作" v-if="isShowOperate">
           <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 />
           </template>
         </el-table-column>
       </el-table>
       <Paginate />
     </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>
 </template>
 
 <script lang="ts" setup>
-import { shortcuts } from '@/utils/shortcuts'
-import { useRouter, useRoute } from 'vue-router'
 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 {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 titleDialog = ref('')
+const { deleted } = useDestroy();
+const videoSyncVisible = ref(false)
+const depotsData = 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)
-    noapprovedVisible.value = false;
     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) {
-    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;
   }
 }
+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(() => {
-  console.log(rolesIdentify, 'rolesIdentifyrolesIdentify');
-  initRemoteOption('channelPromotionsUsers')
-  initRemoteOption('channelMiniprogram')
-  initRemoteOption('channelPromotions')
-  init()
-  query.value.refund_status = 0;
+  query.value.status = '1,5';
+  initVideoList()
   search();
 });
 </script>