From a57c2d1642ab2a61cff2f9ca4eb75924a0303cbb Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期日, 22 六月 2025 17:53:48 +0800
Subject: [PATCH] add  首页配置

---
 pages/content/filmset.vue |  404 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 370 insertions(+), 34 deletions(-)

diff --git a/pages/content/filmset.vue b/pages/content/filmset.vue
index 54edd61..30f9837 100644
--- a/pages/content/filmset.vue
+++ b/pages/content/filmset.vue
@@ -3,25 +3,79 @@
 </template>
 
 <script>
+import dayjs from 'dayjs'
+import 'dayjs/locale/zh-cn'
+dayjs.locale('zh-cn')
 export default {
   data() {
+    const currentDate = this.$elBusUtil.toDate(new Date())
     return {
       tableConfig: {
-        url: 'flower/api/filmset/page',
+        url: 'flower/api/filmWorks/list',
+        newUrl: 'flower/api/filmWorks/new',
+        editUrl: 'flower/api/filmWorks/edit',
+        deleteUrl: 'flower/api/filmWorks/delete',
         dialogNeedRequest: true,
         persistSelection: true,
         columns: [
           { type: 'selection' },
-          { label: '标题', prop: 'title' },
-          { label: '发布日期', prop: 'publishDate' },
-          { label: '编辑日期', prop: 'updateTime' },
-          { label: '状态', prop: 'statusStr' },
+          { label: '中文名称', prop: 'nameCn', minWidth: 120  },
+          { label: '英文名称', prop: 'nameEn', minWidth: 120  },
+          { label: '作品类型', prop: 'typeStr' , minWidth: 150 },
+          { label: '上映年份', prop: 'releaseYear' },
+          { label: '导演', prop: 'director', minWidth: 150  },
+          { label: '制片方', prop: 'producer', minWidth: 150  },
+          { label: '主要演员', prop: 'actors', minWidth: 300  },
+          { label: '剧情关键词', prop: 'keywords' },
+          { label: '剧情简介', prop: 'synopsis' , minWidth: 400 },
+          { label: '封面图片' ,formatter: this.formatterImage, minWidth: 200 },
+          { label: '封面图片描述', prop: 'coverAlt', minWidth: 120  },
+          { label: '用户类型', prop: 'userTypeStr' },
+          { label: '置顶权重', prop: 'stickyWeight' , minWidth: 80 },
+          { label: '发布状态', prop: 'statusStr' , minWidth: 80 },
+          { label: '收藏量', prop: 'collectCount' , minWidth: 80 },
+          { label: '点赞量', prop: 'likeCount', minWidth: 80  },
+          { label: '评论量', prop: 'commentCount', minWidth: 80  },
+          { label: '分享量', prop: 'shareCount', minWidth: 80  },
+          { label: '创建日期', prop: 'createDate', minWidth: 80  },
         ],
         searchForm: [
           {
             type: 'row',
             items: [
-              { label: '标题', id: 'title', type: 'input' },
+              { label: '中文名称', id: 'nameCn', type: 'input' },
+              { label: '英文名称', id: 'nameEn', type: 'input' },
+              {
+                label: '作品类型',
+                id: 'type',
+                type: 'bus-select-dict',
+                el: {
+                  code: 'FILMSET_TYPE',
+                  style: 'width:100%',
+                  clearable: true,
+                },
+              },
+              { label: '上映年份', id: 'releaseYear', type: 'input' },
+              {
+                label: '用户类型',
+                id: 'userType',
+                type: 'bus-select-dict',
+                el: {
+                  code: 'FILMSET_CREATE_TYPE',
+                  style: 'width:100%',
+                  clearable: true,
+                },
+              },
+              {
+                label: '发布状态',
+                id: 'status',
+                type: 'bus-select-dict',
+                el: {
+                  code: 'COMMON_PUBLISH_STATUS',
+                  style: 'width:100%',
+                  clearable: true,
+                },
+              },
               {
                 label: '创建日期',
                 id: 'createDateBeginStr',
@@ -29,14 +83,15 @@
                 commonFormat: true,
                 commonFormatProps: ['createDateBeginStr', 'createDateEndStr'],
                 customClass: 'in-bus-form',
+                default: [currentDate, currentDate],
               },
             ],
           },
         ],
         form: [
           {
-            label: '标题:',
-            id: 'title',
+            label: '中文名称:',
+            id: 'nameCn',
             type: 'input',
             rules: {
               required: true,
@@ -45,7 +100,17 @@
             },
           },
           {
-            label: '片场内容类型:',
+            label: '英文名称:',
+            id: 'nameEn',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入标题',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '作品类型:',
             id: 'type',
             type: 'bus-select-dict',
             el: {
@@ -55,43 +120,240 @@
             },
             rules: {
               required: true,
-              message: '请选择片场内容类型',
+              message: '请选择影视作品类型',
             },
           },
           {
-            label: '内容:',
-            id: 'content',
+            label: '上映年份:',
+            id: 'releaseYear',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入上映年份',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '导演:',
+            id: 'director',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入导演,多个导演,分割',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '制片方:',
+            id: 'producer',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入制片方,多个制片方,分割',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '主要演员:',
+            id: 'actors',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入主要演员,多个主要演员,分割',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '剧情关键词:',
+            id: 'keywords',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入剧情关键词',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '剧情简介:',
+            id: 'synopsis',
             component: 'base-editor',
             richText: true,
-            rules: { required: true, message: '请输入内容', trigger: 'blur' },
+            rules: { required: true, message: '请输入剧情简介', trigger: 'blur' },
           },
-          // {
-          //   label: '封面:',
-          //   id: 'cover',
-          //   type: 'bus-upload',
-          //   el: {
-          //     listType: 'picture-card',
-          //     limitSize: 2,
-          //     limit: 1,
-          //     tipText: '大小不超过2M',
-          //     valueType: 'string',
-          //   },
-          //   forceDisabled: true,
-          // },
+          {
+            label: '封面图片:',
+            id: 'coverUrl',
+            type: 'bus-upload',
+            el: {
+              listType: 'picture-card',
+              limitSize: 2,
+              limit: 1,
+              tipText: '大小不超过2M',
+              valueType: 'string',
+            },
+            forceDisabled: true,
+          },
+          {
+            label: '封面图片描述:',
+            id: 'coverAlt',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入封面图片描述',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '用户类型:',
+            id: 'userType',
+            type: 'bus-select-dict',
+            el: {
+              code: 'FILMSET_CREATE_TYPE',
+              style: 'width:100%',
+              clearable: true,
+            },
+            rules: {
+              required: true,
+              message: '请选择用户类型',
+            },
+          },
+          {
+            label: '置顶权重:',
+            id: 'stickyWeight',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入置顶权重描述',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '收藏量:',
+            id: 'collectCount',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入收藏量',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '点赞量:',
+            id: 'likeCount',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入点赞量',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '评论量:',
+            id: 'commentCount',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入评论量',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '分享量:',
+            id: 'shareCount',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入分享量',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '取景地图片:',
+            id: 'filmPictures',
+            component: 'el-bus-upload',
+            el: {
+              listType: 'picture-card',
+            },
+            forceDisabled: true,
+            commonFormat: true,
+            span: 24,
+            // rules: { required: true, message: '请上传取景地对应的图片' },
+          },
+          {
+            label: '取景地内容:',
+            id: 'filmContent',
+            component: 'base-editor',
+            richText: true,
+            rules: { required: true, message: '请输入取景地内容', trigger: 'blur' },
+          },
+          {
+            label: '封面主题:',
+            id: 'coverTitle',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入剧情关键词',
+              trigger: 'blur',
+            },
+          },
+          {
+            label: '标签:',
+            id: 'tag',
+            type: 'input',
+            rules: {
+              required: true,
+              message: '请输入剧情关键词',
+              trigger: 'blur',
+            },
+          },
         ],
         extraButtons: [
           {
-            text: (row) => (row.status === 'unpublished' ? '发布' : '下架'),
+            text: (row) => (row.status === 'unpublished' ||  row.status === 'approved' ? '发布' : '下架'),
             atClick: async (row) => {
-              const action = row.status === 'unpublished' ? '发布' : '下架'
+              const action = row.status === 'unpublished' ||  row.status === 'approved' ? '发布' : '下架'
               try {
                 await this.$elBusUtil.confirm(`确定要${action}吗?`)
                 const { code } = await this.$elBusHttp.request(
-                  'flower/api/filmset/page/changeStatus',
+                  'flower/api/filmWorks/changeStatus',
                   { params: { id: row.id } }
                 )
                 if (code === 0) {
                   this.$message.success(`${action}成功`)
+                }
+              } catch (e) {
+                return false
+              }
+            },
+          },
+          {
+            text: '置顶',
+            atClick: async (row) => {
+              try {
+                await this.$elBusUtil.confirm(`确定要置顶吗?`)
+                const { code } = await this.$elBusHttp.request(
+                  'flower/api/filmWorks/setTop',
+                  { params: { id: row.id } }
+                )
+                if (code === 0) {
+                  this.$message.success(`置顶成功`)
+                }
+              } catch (e) {
+                return false
+              }
+            },
+          },
+          {
+            text: '清除权重',
+            atClick: async (row) => {
+              try {
+                await this.$elBusUtil.confirm(`确定要清除权重吗?`)
+                const { code } = await this.$elBusHttp.request(
+                  'flower/api/filmWorks/setDown',
+                  { params: { id: row.id } }
+                )
+                if (code === 0) {
+                  this.$message.success(`清除权重成功`)
                 }
               } catch (e) {
                 return false
@@ -104,18 +366,18 @@
             text: '批量发布',
             type: 'primary',
             disabled: (selected) =>
-              selected.filter((item) => item.status === 'unpublished')
+              selected.filter((item) => item.status === 'unpublished' || item.status === 'approved')
                 .length === 0,
             atClick: async (selected) => {
               const selectedNotice = selected.filter(
-                (item) => item.status === 'unpublished'
+                (item) => item.status === 'unpublished' || item.status === 'approved'
               )
               try {
                 await this.$elBusUtil.confirm(
                   `确定要批量发布这${selectedNotice.length}个片场内容吗?`
                 )
                 const { code } = await this.$elBusHttp.request(
-                  'flower/api/filmset/page/publish/batch',
+                  'flower/api/filmWorks/publish/batch',
                   {
                     method: 'post',
                     data: {
@@ -142,7 +404,71 @@
                   `确定要批量删除这${selected.length}个片场内容吗?`
                 )
                 const { code } = await this.$elBusHttp.request(
-                  'flower/api/filmset/page/delete/batch',
+                  'flower/api/filmWorks/delete/batch',
+                  {
+                    method: 'post',
+                    data: {
+                      ids: selected.map((item) => item.id),
+                    },
+                  }
+                )
+                if (code === 0) {
+                  this.$message.success('操作成功')
+                  this.$refs.crud.clearSelection()
+                }
+              } catch (e) {
+                return false
+              }
+            },
+          },
+          {
+            text: '批量通过',
+            type: 'primary',
+            disabled: (selected) =>
+              selected.filter((item) => item.status === 'pending_review' ||  item.status === 'rejected')
+                .length === 0,
+            atClick: async (selected) => {
+              const selectedNotice = selected.filter(
+                (item) => item.status === 'pending_review' ||  item.status === 'rejected'
+              )
+              try {
+                await this.$elBusUtil.confirm(
+                  `确定要批量通过这${selectedNotice.length}个片场内容吗?`
+                )
+                const { code } = await this.$elBusHttp.request(
+                  'flower/api/filmWorks/approved/batch',
+                  {
+                    method: 'post',
+                    data: {
+                      ids: selected.map((item) => item.id),
+                    },
+                  }
+                )
+                if (code === 0) {
+                  this.$message.success('操作成功')
+                  this.$refs.crud.clearSelection()
+                }
+              } catch (e) {
+                return false
+              }
+            },
+          },
+          {
+            text: '批量驳回',
+            type: 'primary',
+            disabled: (selected) =>
+              selected.filter((item) => item.status === 'approved' ||  item.status === 'pending_review')
+                .length === 0,
+            atClick: async (selected) => {
+              const selectedNotice = selected.filter(
+                (item) => item.status === 'approved' ||  item.status === 'pending_review'
+              )
+              try {
+                await this.$elBusUtil.confirm(
+                  `确定要批量驳回这${selectedNotice.length}个片场内容吗?`
+                )
+                const { code } = await this.$elBusHttp.request(
+                  'flower/api/filmWorks/rejected/batch',
                   {
                     method: 'post',
                     data: {
@@ -165,7 +491,17 @@
   },
   head() {
     return {
-      title: '片场内容管理',
+      title: '影视作品内容管理',
+    }
+  },
+  methods: {
+    formatterImage(row) {
+      if (row.coverUrl) {
+        // 使用第三方镜像服务(示例)
+        const proxyUrl = `https://images.weserv.nl/?url=${encodeURIComponent(row.coverUrl)}`;
+        return <el-bus-image src={proxyUrl} preview-src-list={[proxyUrl]} style="width:150px" />
+      }
+      return '无封面';
     }
   },
 }

--
Gitblit v1.9.3