From a57c2d1642ab2a61cff2f9ca4eb75924a0303cbb Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期日, 22 六月 2025 17:53:48 +0800 Subject: [PATCH] add 首页配置 --- pages/regular/home-config.vue | 217 +++++++++++++++++++++++++++++++ pages/content/filmset.vue | 183 +++++++++++++++++++++++++ 2 files changed, 394 insertions(+), 6 deletions(-) diff --git a/pages/content/filmset.vue b/pages/content/filmset.vue index 35ff877..30f9837 100644 --- a/pages/content/filmset.vue +++ b/pages/content/filmset.vue @@ -3,8 +3,12 @@ </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/filmWorks/list', @@ -28,7 +32,7 @@ { label: '封面图片描述', prop: 'coverAlt', minWidth: 120 }, { label: '用户类型', prop: 'userTypeStr' }, { label: '置顶权重', prop: 'stickyWeight' , minWidth: 80 }, - { label: '状态', prop: 'statusStr' , minWidth: 80 }, + { label: '发布状态', prop: 'statusStr' , minWidth: 80 }, { label: '收藏量', prop: 'collectCount' , minWidth: 80 }, { label: '点赞量', prop: 'likeCount', minWidth: 80 }, { label: '评论量', prop: 'commentCount', minWidth: 80 }, @@ -41,8 +45,37 @@ items: [ { label: '中文名称', id: 'nameCn', type: 'input' }, { label: '英文名称', id: 'nameEn', type: 'input' }, - { label: '作品类型', id: 'type', 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', @@ -50,6 +83,7 @@ commonFormat: true, commonFormatProps: ['createDateBeginStr', 'createDateEndStr'], customClass: 'in-bus-form', + default: [currentDate, currentDate], }, ], }, @@ -233,12 +267,51 @@ 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( @@ -253,17 +326,51 @@ } }, }, + { + 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 + } + }, + }, ], headerButtons: [ { 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( @@ -314,6 +421,70 @@ } }, }, + { + 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: { + ids: selected.map((item) => item.id), + }, + } + ) + if (code === 0) { + this.$message.success('操作成功') + this.$refs.crud.clearSelection() + } + } catch (e) { + return false + } + }, + }, ], }, } diff --git a/pages/regular/home-config.vue b/pages/regular/home-config.vue new file mode 100644 index 0000000..34d33ba --- /dev/null +++ b/pages/regular/home-config.vue @@ -0,0 +1,217 @@ +<template> + <el-bus-crud ref="crud" v-bind="tableConfig" /> +</template> + +<script> +export default { + data() { + return { + tableConfig: { + url: 'flower/api/home/homeConfig/list', + newUrl: 'flower/api/home/homeConfig/new', + editUrl: 'flower/api/home/homeConfig/edit', + deleteUrl: 'flower/api/home/homeConfig/delete', + dialogNeedRequest: true, + persistSelection: true, + columns: [ + { type: 'selection' }, + { label: '主标题', prop: 'mainTitle' }, + { label: '副标题', prop: 'subTitle' }, + { label: '按钮1文本', prop: 'btnText1' }, + { label: '按钮2文本', prop: 'btnText2' }, + { label: '按钮1图标', prop: 'btnIcon1' }, + { label: '按钮2图标', prop: 'btnIcon2' }, + { label: '图标1颜色', prop: 'iconColor1' }, + { label: '图标2颜色', prop: 'iconColor2' }, + { label: '动作类型', prop: 'actionType' }, + { label: '动作目标', prop: 'actionTarget' }, + { label: '状态', prop: 'statusStr' }, + { label: '版本号', prop: 'version' }, + ], + searchForm: [ + { + type: 'row', + items: [ + { label: '主标题', id: 'mainTitle', type: 'input' }, + { label: '版本号', id: 'version', type: 'input' }, + ], + }, + ], + form: [ + { + label: '主标题:', + id: 'mainTitle', + type: 'input', + rules: { + required: true, + message: '请输入标题', + trigger: 'blur', + }, + }, + { + label: '副标题:', + id: 'subTitle', + type: 'input', + rules: { + required: true, + message: '请输入副标题', + trigger: 'blur', + }, + }, + { + label: '按钮1文本:', + id: 'btnText1', + type: 'input', + rules: { + required: true, + message: '请输入按钮1文本', + trigger: 'blur', + }, + },{ + label: '按钮2文本:', + id: 'btnText2', + type: 'input', + rules: { + required: true, + message: '请输入按钮2文本', + trigger: 'blur', + }, + },{ + label: '按钮1图标:', + id: 'btnIcon1', + type: 'input', + rules: { + required: true, + message: '请输入按钮1图标', + trigger: 'blur', + }, + },{ + label: '按钮2图标:', + id: 'btnIcon2', + type: 'input', + rules: { + required: true, + message: '请输入按钮2图标', + trigger: 'blur', + }, + },{ + label: '图标1颜色:', + id: 'iconColor1', + type: 'input', + rules: { + required: true, + message: '请输入图标1颜色', + trigger: 'blur', + }, + },{ + label: '图标2颜色:', + id: 'iconColor2', + type: 'input', + rules: { + required: true, + message: '请输入图标2颜色', + trigger: 'blur', + }, + },{ + label: '动作类型:', + id: 'actionType', + type: 'input', + rules: { + required: true, + message: '请输入动作类型', + trigger: 'blur', + }, + },{ + label: '动作目标:', + id: 'actionTarget', + type: 'input', + rules: { + required: true, + message: '请输入动作目标', + trigger: 'blur', + }, + },{ + label: '版本号:', + id: 'version', + type: 'input', + rules: { + required: true, + message: '请输入版本号', + trigger: 'blur', + }, + }, + ], + extraButtons: [ + { + text: (row) => (row.status === 'unpublished' ? '发布' : '下架'), + atClick: async (row) => { + const action = row.status === 'unpublished' ? '发布' : '下架' + try { + await this.$elBusUtil.confirm(`确定要${action}吗?`) + const { code } = await this.$elBusHttp.request( + 'flower/api/home/homeConfig/changeStatus', + { params: { id: row.id } } + ) + if (code === 0) { + this.$message.success(`${action}成功`) + } + } catch (e) { + return false + } + }, + }, + ], + headerButtons: [ + { + text: '批量删除', + type: 'danger', + disabled: (selected) => selected.length === 0, + atClick: async (selected) => { + try { + await this.$elBusUtil.confirm( + `确定要批量删除这${selected.length}个配置吗?` + ) + const { code } = await this.$elBusHttp.request( + 'flower/api/announcement/page/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 + } + }, + }, + ], + }, + } + }, + head() { + return { + title: '主页配置管理', + } + }, +} +</script> + +<style lang="scss" scoped> +::v-deep { + .el-upload { + &-list__item { + width: 345px; + height: 128px; + } + &.el-upload--picture-card { + width: 345px; + height: 128px; + } + } +} +</style> -- Gitblit v1.9.3