fix:项目初始化

This commit is contained in:
ouyangxiu
2025-06-10 17:11:41 +07:00
commit db9bffd2c5
713 changed files with 159746 additions and 0 deletions
@@ -0,0 +1,379 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" calss="ac-dialog" center width="800px" @close="close">
<div>
<el-form :rules="rules" :model="dialogForm" label-width="130px" ref="dialogForm">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说标题">
<el-input placeholder="请输入标题" v-model="dialogForm.title" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说作者">
<el-input placeholder="请输入作者" v-model="dialogForm.author" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说主题">
<el-select placeholder="请选择小说主题" v-model="dialogForm.topics" filterable multiple>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in topicsList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说标签">
<el-select placeholder="请选择小说标题" v-model="dialogForm.tags" value-key="id" filterable multiple>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in labelList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="排序" prop="rank">
<el-input placeholder="请输入排序" v-model.number="dialogForm.rank" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否VIP" prop="isVip">
<el-switch v-model.number="dialogForm.isVip" :active-value="true" :inactive-value="false" active-color="#13ce66" inactive-color="#ff4949"> </el-switch>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否音频小说" prop="isAudio">
<el-switch v-model="dialogForm.isAudio" active-color="#13ce66" inactive-color="#ff4949" active-text="是" inactive-text="否"></el-switch>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="评分" prop="novelNumber">
<el-input placeholder="请输入圈子排序" v-model.number="dialogForm.novelNumber" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="圈子">
<el-select style="width: 180px" clearable placeholder="请选择圈子" v-model="dialogForm.circleId" filterable>
<el-option :key="item.id + item.name" :label="item.name" :value="item.id" v-for="item in circleList" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="圈子排序" prop="circleRank">
<el-input placeholder="请输入圈子排序" v-model.number="dialogForm.circleRank" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
<el-form-item label="上架时间">
<el-date-picker style="width: 180px" v-model="dialogForm.addedTime" type="date" placeholder="选择日期" value-format="yyyy-MM-ddTHH:mm:ssZ"> </el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="登场人物" prop="actors">
<el-input placeholder="请输入登场人物" v-model.number="dialogForm.actors" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="免费章节" prop="noneChapter">
<el-input placeholder="请输入免费章节" v-model.number="dialogForm.noneChapter" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="封面">
<UploadImg @onRemove="onRemove('coverImg')" @changeImgUrl="changeCoverImg" :img="dialogForm.coverImg"> </UploadImg>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="章节数量">
<el-input placeholder="请输入章节数量" v-model.number="dialogForm.chapterCount" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说总字数">
<el-input placeholder="请输入小说总字数" v-model.number="dialogForm.wordTotalCount" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="最新章节">
<el-input placeholder="请输入最新章节" v-model.number="dialogForm.newChapter" style="width: 180px" />
</el-form-item>
</el-col>
<!-- <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">-->
<!-- <el-form-item label="最新章节更新时间">-->
<!-- <el-date-picker style="width: 180px" v-model="dialogForm.newTime" type="date" placeholder="选择日期" value-format="yyyy-MM-ddTHH:mm:ssZ">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
<el-form-item label="小说发布者ID">
<el-input placeholder="请输入小说发布者ID" v-model.number="dialogForm.publishId" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="售价">
<el-input placeholder="请输入售价" v-model.number="dialogForm.price" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说上架状态">
<el-select placeholder="请选择小说上架状态" v-model="dialogForm.status">
<el-option label="上架" :value="1" />
<el-option label="下架" :value="2" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说更新状态">
<el-select placeholder="请选择小说更新状态" v-model="dialogForm.updateStatus">
<el-option label="待发布" :value="0" />
<el-option label="连载中" :value="1" />
<el-option label="已完结" :value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="描述" prop="desc">
<el-input placeholder="请输入描述" v-model="dialogForm.desc" type="textarea" style="width: 520px" />
</el-form-item>
</el-col>
</el-row>
<!-- <template v-for="(item, index) in dialogForm.roleList">-->
<!-- <el-row :key="index" :gutter="10" style="background: #efe4d2; padding: 5px 0; margin: 5px 0">-->
<!-- <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">-->
<!-- <el-form-item label="CV">-->
<!-- <el-select placeholder="请选择CvId" v-model="item.comicsCvId">-->
<!-- <el-option :label="item.name" :value="item.id" v-for="(item,index) in resData" :key="index"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">-->
<!-- <el-form-item label="配音角色">-->
<!-- <el-input placeholder="请输入配音角色" v-model="item.roleName" style="width: 180px" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :lg="4" :md="4" :sm="4" :xl="4" :xs="4">-->
<!-- <el-button v-if="dialogForm.roleList.length === index + 1" type="succsees" size="mini" icon="el-icon-circle-plus-outline" @click="addSectionItem">-->
<!-- 新增节点-->
<!-- </el-button>-->
<!-- <el-button type="danger" size="mini" style="margin: 5px 0" icon="el-icon-delete-solid" @click="delSectionItem(index)">-->
<!-- 删除节点-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </template>-->
</el-form>
</div>
<div class="dialog-footer" slot="footer">
<el-button @click="Visible = false"> </el-button>
<el-button @click="submitForm('dialogForm')" type="primary"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsAdd, novelsUpdate } from '@/api/novelsManagement/novels';
import { novelsLabelsList } from '@/api/novelsManagement/novelsTopic';
// import { novelsCvList } from '@/api/novelsManagement/novelsCV'
import { changeMoneyYuan, changeMoneyFen, arryToString, stringToArry, current } from '@/filters/index';
import UploadImg from '@/components/UploadImg/index';
import moment from 'moment/moment';
export default {
name: 'AddOrEdit',
props: ['data', 'circleList'],
components: {
UploadImg,
},
data() {
return {
Visible: true,
title: '',
// 表单数据
dialogForm: {
author: undefined, // "string",小说作者
chapterCount: undefined, // 0,章节数量
coverImg: undefined, // "string",封面
desc: undefined, // "string",描述信息
fake: {
comments: undefined, // 0,评论条数
likes: undefined, // 0,点赞次数
sells: undefined, // 0,售卖次数
shares: undefined, // 0,分享次数
watchTimes: undefined, // 0观看次数
},
isAudio: undefined, // 是否音频小说
isVip: undefined, // true,是否VIp
newChapter: undefined, // 0,最新章节
price: undefined, // 0,售价,单位分
rank: undefined, // 0,排序
status: undefined, // 0,小说状态
tags: [], // 0 小说标签
title: undefined, // string 标题
topics: undefined, // 0 小说话题
updateStatus: undefined, // 小说更新状态
noneChapter: undefined, // 免费章节
novelNumber: undefined, //评分
circleId: undefined,
circleRank: undefined, //圈子排序
actors: undefined, //登场人物
addedTime: undefined, //上架时间
lastWatchTime: undefined, //上次观看时间
monthWatchTimes: undefined, //月观看次数,每月一号重置
weekWatchTimes: undefined, //周观看次数,每周一重置
newTime: undefined, //最新章节更新时间
wordTotalCount: undefined, //小说总字数
publishId: undefined, //漫画发布者ID
// roleList: [{
// comicsId: undefined,
// roleName: undefined
// }]
},
topicsList: this.$store.state.novels.novelsTopicList,
labelList: [],
rules: {
// sort: [{ required: true, message: '必填', trigger: 'blur' }],
},
resData: [],
};
},
async mounted() {
this.title = this.data.title;
if (this.title === '编辑') {
this.dialogForm = { ...this.data.data };
// if (!this.dialogForm.roleList.length) {
// this.dialogForm.roleList.push({
// comicsId: undefined,
// roleName: undefined
// })
// console.log(this.dialogForm,"dialogForm")
// }
this.dialogForm.price = changeMoneyYuan(this.dialogForm.price);
this.dialogForm.author = arryToString(this.data.data.author);
this.dialogForm.actors = arryToString(this.data.data.actors);
}
this.getNovelsLabelsList();
// this.getList()
},
methods: {
// TODO:请求小说标签列表数据
// getList() {
// this.loading = true
// novelsCvList({ pageNum: 1, pageSize: 50 }).then((res) => {
// if (res.code === 200) {
// this.resData = res.data.list
// } else {
// this.$message.error('请求列表失败!')
// this.resData = []
// this.total = 0
// }
// this.loading = false
// })
// },
// addSectionItem() {
// this.dialogForm.roleList.push({
// comicsId: undefined,
// roleName: undefined
// })
// },
delSectionItem(index) {
this.dialogForm.roleList.splice(index, 1);
},
// TODO:请求小说标签列表
async getNovelsLabelsList() {
console.log('tianjia1');
this.labelList = this.title === '编辑' ? this.data.data.tagName : [];
const param = {
pageNum: 1,
// pageSize: 500,
status: true,
};
novelsLabelsList(param).then(res => {
if (res.code === 200) {
// if (this.title === '编辑') {
// for (let tagindex = 0; tagindex < this.data.data.tagName.length; tagindex++) {
// const tag = this.data.data.tagName[tagindex]
// let e = 0
// for (let index = 0; index < this.labelList.length; index++) {
// const element = this.labelList[index]
// if (element.id === tag.id) {
// e = 1
// }
// }
// if (e === 0) {
// this.labelList.push(tag)
// }
// }
// res.data.forEach(item => {
// });
// this.labelList = res.data
// } else {
// this.labelList = res.data
// }
this.labelList = res.data;
}
});
},
// TODO:新增小说列表数据
novelsAddFun(data) {
novelsAdd(data).then(res => {
if (res.code === 200) {
this.$message.success('新增成功');
this.Visible = false;
} else {
this.$message.error('新增失败');
}
});
},
// TODO:编辑小说列表数据
novelsUpdateFun(data) {
novelsUpdate(data).then(res => {
if (res.code === 200) {
this.$message.success('编辑成功');
this.Visible = false;
} else {
this.$message.error('编辑失败');
}
});
},
changeCoverImg(data) {
this.dialogForm.coverImg = data;
},
onRemove(data) {
this.dialogForm[data] = undefined;
},
close() {
this.$emit('close');
},
// 提交按钮
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
const data = JSON.parse(JSON.stringify(this.dialogForm));
data.price = data.price ? changeMoneyFen(data.price) : 0;
data.author = stringToArry(data.author);
data.actors = stringToArry(data.actors);
data.circleId = data.circleId ? data.circleId : undefined;
if (this.title === '编辑') {
this.novelsUpdateFun(data);
} else {
this.novelsAddFun(data);
}
}
});
},
},
};
</script>
@@ -0,0 +1,72 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-05-17 14:17:25
* @LastEditTime: 2022-06-09 11:04:13
* @LastEditors:
* @FilePath: /novels-admin/src/views/novelsManagement/novels/components/EditCom.vue
-->
<template>
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="Visible" @close="close" center class="ac-dialog" width="500px">
<el-form :inline="true" :model="form" class="demo-form-inline" label-position="right" label-width="100px" ref="form">
<el-row :gutter="24">
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<el-form-item label="用户ID">
<el-input v-model.number="form.userId" />
</el-form-item>
</el-col>
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<el-form-item label="评论内容">
<el-input v-model="form.text" type="textarea" style="width:300px" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="dialog-footer" slot="footer">
<el-button @click="Visible=false"> </el-button>
<el-button @click="submit('form')" type="primary"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsAddComment } from '@/api/novelsManagement/novels'
export default {
name: 'EditCom',
props: ['data'],
data() {
return {
Visible: true,
title: '',
// 表单数据
form: {
userId: undefined, // 用户id
novelId: undefined, //小说ID
text: undefined, //评论
},
}
},
mounted() {
this.title = this.data.title
this.form.novelId = this.data.data.id
},
methods: {
//TODO:添加评论
submit(formName) {
novelsAddComment(this.form).then((res) => {
if (res.code === 200) {
this.$message.success('评论成功')
this.close()
} else {
this.$message.error('评论失败')
}
})
},
// 关闭编辑
close() {
this.$emit('close', false)
},
},
}
</script>
@@ -0,0 +1,95 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-04-06 17:32:20
* @LastEditTime: 2022-06-09 11:08:45
* @LastEditors: Please set LastEditors
* @FilePath: /novels-admin/src/views/novelsManagement/novels/components/setTag.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说标签">
<el-select placeholder="请选择小说标题" v-model="form.tags" value-key="id" filterable multiple>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in labelList" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsAddTags } from '@/api/novelsManagement/novels'
import { novelsLabelsList } from '@/api/novelsManagement/novelsTopic'
export default {
name: 'SetTag',
props: ['data'],
data() {
return {
MediaSatusList: [],
Visible: true,
title: '',
// 表单数据
form: {
tags: [] // 0 小说标签
},
//
rules: {},
labelList: []
}
},
mounted() {
this.getComicLabelsList()
},
methods: {
// TODO:请求小说标签列表
async getComicLabelsList() {
const param = {
pageNum: 1,
status: true
}
novelsLabelsList(param).then((res) => {
if (res.code === 200) {
this.labelList = res.data
}
})
},
// TODO:批量增加小说标签
submit() {
if (this.data.length) {
const novelIds = []
this.data.forEach((item) => {
novelIds.push(item.id)
})
const param = {
novelIds: novelIds,
tags: this.form.tags
}
novelsAddTags(param).then((res) => {
if (res.code === 200) {
this.$message.success('增加标签成功')
} else {
this.$message.error('增加标签失败')
}
this.Visible = false
})
} else {
this.$message.error('未选择小说')
}
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
@@ -0,0 +1,110 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-04-06 17:32:20
* @LastEditTime: 2022-06-09 11:08:45
* @LastEditors: Please set LastEditors
* @FilePath: /novels-admin/src/views/novelsManagement/novels/components/setTag.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false"
@close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px"
label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="上传小说">
<el-upload
class="upload-demo"
ref="upload"
action="#"
:limit="1"
accept=".txt"
:file-list="form.fileList"
:on-change="uploadChange"
:on-remove="uploadRemove"
:auto-upload="false">
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">只能上传txt文件</div>
</el-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsAddTxtNovel} from '@/api/novelsManagement/novels'
import * as jschadet from 'jschardet'
export default {
name: 'Addtotal',
props: ['data'],
data() {
return {
MediaSatusList: [],
Visible: true,
title: '',
// 表单数据
form: {
fileList: [],
},
rules: {},
labelList: []
}
},
methods: {
uploadChange( file, fileList) {
this.form.fileList = fileList
},
uploadRemove(){
this.form.fileList = []
},
submit() {
if (!this.form.fileList.length){
this.$message.warning('请上传小说!')
return
}
const file = this.form.fileList[0].raw;
const reader = new FileReader();
reader.readAsBinaryString(file);
reader.addEventListener('load', (event) => {
let content = ''
const txtBinary = event.target.result;
const encoding = jschadet.detect(txtBinary)
if (encoding && encoding.encoding) {
const buf = new Buffer(txtBinary, 'binary')
const decoder = new TextDecoder(encoding.encoding);
content = decoder.decode(buf);
const param = {
novelId: this.data.data.id,
txt: content
}
novelsAddTxtNovel(param).then((res) => {
if (res.code === 200) {
this.$message.success('增加成功')
} else {
this.$message.error('增加失败')
}
this.Visible = false
})
} else {
console.error('Failed to detect file encoding.');
}
});
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
@@ -0,0 +1,100 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否VIP" prop="status">
<el-select placeholder="请选择信息分类" clearable v-model="form.isVip" style="width: 180px">
<el-option label="非VIP小说" :value="false" />
<el-option label="VIP小说" :value="true" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频状态" prop="status">
<el-select placeholder="请选择小说状态" clearable v-model="form.status" style="width: 180px">
<el-option v-for="item in MediaSatusList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsUpdate } from '@/api/novelsManagement/novels'
import { MediaSatusList } from '@/filters/novelsManagement/novelsTopic'
export default {
name: 'batch',
props: ['data'],
data() {
return {
MediaSatusList: MediaSatusList(),
Visible: true,
title: '',
// 表单数据
form: {
isVip: undefined,
status: undefined,
},
//
dates: [],
rules: {
isVip: undefined,
status: undefined
}
}
},
methods: {
// 提交按钮
submit() {
if (this.data.length) {
this.data.forEach((item) => {
const data = {
...item
}
data.isVip = this.form.isVip
data.status = this.form.status
novelsUpdate(data).then((res) => {
if (res.code === 200) {
this.$message({
type: 'success',
message: item.id + '修改成功'
})
} else {
this.$message({
type: 'error',
message: item.id + '修改失败'
})
}
})
})
} else {
this.$message({
type: 'error',
message: '未选择小说'
})
}
this.Visible = false
},
// 关闭编辑
close() {
this.$emit('close')
},
},
mounted() {},
}
</script>
@@ -0,0 +1,173 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="80px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说ID" prop="comicsId">
<el-input v-model.number="form.comicsId" placeholder="请输入小说ID" disabled style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="章节序列" prop="chapterNum">
<el-input v-model.number="form.chapterNum" placeholder="请输入章节序列" style="width: 180px">
<template slot="prepend"></template>
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="章节标题" prop="title">
<el-input v-model="form.title" placeholder="请输入章节标题" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="章节字数" prop="wordCount">
<el-input v-model.number="form.wordCount" placeholder="请输入章节字数" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否启用" prop="status">
<el-switch v-model="form.status" active-color="#13ce66" inactive-color="#ff4949" active-text="开启" inactive-text="关闭"></el-switch>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="最新章节" prop="isNew">
<el-switch v-model="form.isNew" active-color="#13ce66" inactive-color="#ff4949" active-text="最新" inactive-text="非最新"></el-switch>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="媒资库ID" prop="fileId">
<el-input v-model="form.fileId" placeholder="请输入小说媒资库ID" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="章节描述" prop="desc">
<el-input placeholder="请输入章节描述" v-model="form.desc" type="textarea" style="width: 520px" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="内容" prop="content">
<el-input v-model="form.content" :autosize="{ minRows: 2, maxRows: 4 }" placeholder="请输入内容" type="textarea" style="width: 520px" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsChapterAdd, novelsChapterUpdate } from '@/api/novelsManagement/novelsChapter';
export default {
name: 'ChapterAddOrEdit',
props: ['data'],
data() {
return {
Visible: true,
title: '',
// 表单数据
form: {
content: undefined, //[]内容
chapterNum: undefined, // 0,第几章节
comicsId: undefined, // 0,小说ID
desc: undefined, // "string",章节描述
isNew: undefined, // true,是否为最新章节
pageNum: undefined, // 0,章节页数
status: undefined, // true,是否启用
title: undefined, // "string",章节标题
fileId: undefined, // '媒资库id'
wordCount: undefined, //小说字数
},
rules: {},
isUploadIng: false,
isAddReqLoading: false,
};
},
mounted() {
this.title = this.data.title;
if (this.title === '编辑') {
this.form = { ...this.data.data };
// this.form.jmid
} else {
this.form.jmid = this.data.data.jmid;
this.form.comicsId = this.data.data.id;
}
},
methods: {
//TODO:新增小说章节列表数据
add(data) {
if (this.isUploadIng) {
this.$message('图片上传中,稍后尝试');
return false;
}
if (this.isAddReqLoading) {
this.$message('小说添加中');
return false;
}
this.isAddReqLoading = true;
novelsChapterAdd(data)
.then(res => {
// this.Visible = false
if (res.code === 200) {
this.$message.success('新增成功');
this.Visible = false;
this.isAddReqLoading = false;
} else {
this.isAddReqLoading = false;
this.$message.error(res.tip);
}
})
.catch(error => {
this.isAddReqLoading = false;
this.$message.error(error.message);
});
},
//TODO:编辑小说章节列表数据
update(data) {
novelsChapterUpdate(data).then(res => {
if (res.code === 200) {
this.$message.success('更新成功');
this.Visible = false;
} else {
this.$message.error('更新失败');
}
});
},
// 提交按钮
submit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
if (this.title === '新增') {
this.add(this.form);
} else if (this.title === '编辑') {
this.update(this.form);
}
} else {
return false;
}
});
},
// 关闭编辑
close() {
this.$emit('close');
},
},
};
</script>
<style lang="scss">
.upLoadFormItem {
label {
text-align: center;
}
}
</style>
@@ -0,0 +1,223 @@
<template>
<div>
<el-dialog title="小说章节列表" :visible.sync="Visible" width="90%" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-row class="table-form">
<el-form :inline="true" :model="searchData" class="form-inline" size="mini">
<el-form-item>
<el-input placeholder="请输入章节名称" clearable v-model.trim="searchData.title" @clear="onClear('title')" />
</el-form-item>
<el-form-item>
<el-select placeholder="请选择是否启用" clearable v-model="searchData.status" @clear="onClear('status')">
<el-option label="启用" :value="true" />
<el-option label="未启用" :value="false" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="展示顺序" clearable v-model="searchData.sort" @clear="onClear('sort')">
<el-option label="正序" :value="true" />
<el-option label="倒序" :value="false" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="onSearch" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="add" icon="el-icon-circle-plus-outline" plain type="success">新增</el-button>
<el-button @click="getList" icon="el-icon-refresh" plain type="info">刷新</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table :data="resData" element-loading-text="拼命加载中" border height="550" highlight-current-row style="width: 100%" v-loading="loading">
<el-table-column align="center" label="标题" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" label="小说ID" width="80">
<template slot-scope="scope">{{ scope.row.comicsId }}</template>
</el-table-column>
<el-table-column align="center" label="媒资库ID" width="80">
<template slot-scope="scope">{{ scope.row.fileId }}</template>
</el-table-column>
<el-table-column align="center" label="章节序列" width="80">
<template slot-scope="scope">{{ scope.row.chapterNum }}</template>
</el-table-column>
<el-table-column align="center" label="章节字数" width="80">
<template slot-scope="scope">{{ scope.row.wordCount }}</template>
</el-table-column>
<el-table-column align="center" label="是否最新章节" width="90">
<template slot-scope="scope">
<el-button :type="scope.row.isNew ? 'success' : 'danger'" plain size="mini">{{ scope.row.isNew ? '最新' : '非最新' }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="是否启用" width="90">
<template slot-scope="scope">
<el-button :type="scope.row.status ? 'success' : 'danger'" plain size="mini">{{ scope.row.status ? '启用' : '未启用' }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="180">
<template slot-scope="scope">{{ scope.row.createdAt | BeiJingTime }} </template>
</el-table-column>
<el-table-column align="center" label="更新时间" width="180">
<template slot-scope="scope">{{ scope.row.updatedAt | BeiJingTime }} </template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="180">
<template slot-scope="scope">
<el-button @click="handleEdit(scope.$index, scope.row)" size="mini" type="primary">编辑 </el-button>
<el-button @click="handleDelete(scope.$index, scope.row)" size="mini" type="danger">删除 </el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 100]"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"
/>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="Visible = false"> </el-button>
</div>
</el-dialog>
<ChapterAddOrEdit :data="editData" v-if="editVisible" @close="closeEdit" />
</div>
</template>
<script>
import { novelsChapterList, novelsChapterDel } from '@/api/novelsManagement/novelsChapter';
import ShowImg from '@/components/ShowImg/index.vue';
import ChapterAddOrEdit from './chapterAddOrEdit.vue';
export default {
name: 'ChapterList',
props: ['data'],
components: {
ShowImg,
ChapterAddOrEdit,
},
data() {
return {
Visible: true,
// 表单数据
searchData: {
pageNum: 1,
pageSize: 10,
title: undefined, //"string",
status: undefined, // true
id: undefined,
sort: true,
},
resData: [],
total: 0,
loading: false, // 列表加载状态
editVisible: false,
editData: {
title: '新增',
data: {},
},
};
},
mounted() {
this.searchData.id = this.data.data.id;
this.getList();
},
methods: {
//TODO:请求小说章节列表数据
getList() {
this.loading = true;
novelsChapterList(this.searchData).then(res => {
if (res.code === 200) {
this.resData = res.data.list;
this.total = res.data.count;
} else {
this.$message.error('请求列表失败!');
this.resData = [];
this.total = 0;
}
this.loading = false;
});
},
//TODO:删除小说章节列表数据
handleDelete(index, row) {
this.$confirm('确定删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
novelsChapterDel({ novelChapterId: row.id }).then(res => {
if (res.code === 200) {
this.getList();
this.$message.success('成功删除!');
} else {
this.$message.error(res.tip);
}
});
});
},
onSearch() {
this.searchData.pageNum = 1;
this.searchData.pageSize = 10;
this.getList();
},
// 关闭编辑
close() {
this.$emit('close');
},
// 新增按钮
add() {
this.editVisible = true;
this.editData = {
title: '新增',
data: {
id: this.data.data.id,
jmid: this.data.data.jmid,
},
};
},
// 编辑按钮
handleEdit(index, row) {
this.editData = {
title: '编辑',
data: row,
};
this.editVisible = true;
},
// 关闭编辑弹窗
closeEdit() {
this.editData = {
title: '新增',
data: {},
};
this.editVisible = false;
this.getList();
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val;
this.getList();
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val;
this.getList();
},
// 清空某一项筛选列表
onClear(key) {
this.searchData[key] = undefined;
this.getList();
},
},
};
</script>
@@ -0,0 +1,103 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-04-06 17:32:20
* @LastEditTime: 2022-06-09 11:08:45
* @LastEditors: Please set LastEditors
* @FilePath: /novels-admin/src/views/novelsManagement/novels/components/setTag.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="小说主题" prop="status">
<el-select placeholder="请选择小说主题" clearable v-model="form.topics" style="width: 180px" multiple filterable>
<el-option v-for="item in MediaSatusList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="" prop="flag">
<el-switch v-model="form.flag" active-text="增加" inactive-text="删除" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { novelsAddTopics } from '@/api/novelsManagement/novels'
import { novelsTopicList } from '@/api/novelsManagement/novelsTopic'
export default {
name: 'SetTag',
props: ['data'],
data() {
return {
MediaSatusList: [],
Visible: true,
title: '',
// 表单数据
form: {
topics: undefined,
flag: true
},
rules: {}
}
},
mounted() {
this.getNovelsTopicList()
},
methods: {
// TODO:批量设置小说主题
submit() {
if (this.data.length) {
const novelIds = []
this.data.forEach((item) => {
novelIds.push(item.id)
})
const param = {
novelIds: novelIds,
flag: this.form.flag,
topicsIds: this.form.topics
}
novelsAddTopics(param).then((res) => {
if (res.code === 200) {
this.$message.success('设置标签成功')
} else {
this.$message.error('设置标签失败')
}
this.Visible = false
})
} else {
this.$message.error('未选择小说')
}
},
// TODO:请求小说主题列表数据
getNovelsTopicList(val) {
const param = {
pageNum: 1,
pageSize: 5000
}
novelsTopicList(param).then((res) => {
if (res.code === 200) {
this.MediaSatusList = res.data.list
} else {
this.$message.error('请求小说主题列表失败')
}
})
},
// 关闭编辑
close() {
this.$emit('close')
},
},
}
</script>
+540
View File
@@ -0,0 +1,540 @@
<template>
<div class="pf-warpper">
<el-row class="table-form">
<!-- 查询条件 -->
<el-form :inline="true" :model="searchData" class="form-inline" label-width="80px" size="mini">
<el-form-item>
<el-input placeholder="请输入小说ID" clearable v-model.number="searchData.id" @clear="onClear('id')" />
</el-form-item>
<el-form-item>
<el-input placeholder="请输入小说标题" clearable v-model.trim="searchData.title" @clear="onClear('title')" />
</el-form-item>
<el-form-item>
<el-input placeholder="请输入小说作者" clearable v-model.trim="searchData.author" @clear="onClear('author')" />
</el-form-item>
<el-form-item>
<el-input placeholder="请输入小说唯一标识" clearable v-model.trim="searchData.jmid" @clear="onClear('jmid')" />
</el-form-item>
<el-form-item>
<el-select placeholder="请选择小说上架状态" clearable v-model.number="searchData.status" @clear="onClear('status')">
<el-option label="待上架" :value="0" />
<el-option label="上架" :value="1" />
<el-option label="下架" :value="2" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择小说更新状态" clearable v-model.number="searchData.updateStatus" @clear="onClear('updateStatus')">
<el-option label="待发布" :value="0" />
<el-option label="连载中" :value="1" />
<el-option label="已完结" :value="2" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择小说主题" clearable v-model.number="searchData.topicId" @clear="onClear('topicId')" filterable>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in topicIdList" />
</el-select>
</el-form-item>
<el-form-item>
<el-input placeholder="请输入小说标签" clearable v-model.trim="searchData.tagStr" @clear="onClear('tagStr')" />
</el-form-item>
<el-form-item>
<el-select placeholder="请选择小说付费类型" clearable v-model="searchData.novelPayType" @clear="onClear('novelPayType')">
<el-option label="免费" :value="0" />
<el-option label="会员" :value="1" />
<el-option label="金币" :value="2" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="排序方式" clearable v-model.number="searchData.sort" @clear="onClear('sort')">
<el-option label="上架时间" :value="0" />
<el-option label="更新时间" :value="1" />
<el-option label="观看次数排序" :value="2" />
<el-option label="收藏次数排序" :value="3" />
<el-option label="章节数量排序" :value="4" />
<el-option label="图片数量排序" :value="5" />
<el-option label="虚假观看数排序" :value="6" />
<el-option label="周观看次数" :value="7" />
<el-option label="月观看次数" :value="8" />
</el-select>
</el-form-item>
<el-form-item>
<el-select placeholder="请选择小说类型" clearable v-model="searchData.novelType" @clear="onClear('novelType')">
<el-option label="文本" :value="1" />
<el-option label="有声" :value="2" />
<el-option label="asm" :value="3" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="onSearch" icon="el-icon-search" plain type="primary">搜索</el-button>
<el-button @click="handleAdd()" icon="el-icon-circle-plus-outline" plain type="success">新增</el-button>
<el-button @click="getData" icon="el-icon-refresh" plain type="info">刷新</el-button>
<el-button @click="setTag" icon="el-icon-edit-outline" plain type="warning">批量设置主题</el-button>
<el-button @click="setTags" icon="el-icon-edit-outline" plain type="warning">批量添加标签</el-button>
<el-button @click="batch" icon="el-icon-edit-outline" plain type="warning">批量设置小说</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<!-- 展示列表 -->
<el-table :data="tableData" border height="750" highlight-current-row style="width: 100%" @selection-change="handleSelectionChange" :row-style="{ height: '70px' }">
<el-table-column type="selection" width="50" fixed="left"> </el-table-column>
<el-table-column align="center" label="ID">
<template slot-scope="scope">{{ scope.row.id }}</template>
</el-table-column>
<!-- <el-table-column align="center" label="唯一标识">-->
<!-- <template slot-scope="scope">{{ scope.row.jmid }}</template>-->
<!-- </el-table-column>-->
<el-table-column align="center" label="排序">
<template slot-scope="scope">{{ scope.row.rank }}</template>
</el-table-column>
<el-table-column align="center" label="小说标题" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" label="封面">
<template slot-scope="scope">
<ShowImg style="width: 40px; height: 40px; margin: 0 auto; line-height: 40px" :urls="scope.row.coverImg"></ShowImg>
</template>
</el-table-column>
<el-table-column align="center" label="小说作者" width="200">
<template slot-scope="scope">
<el-tag v-for="(item, index) in scope.row.author" :key="index">{{ item }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="章节数量">
<template slot-scope="scope">{{ scope.row.chapterCount }}</template>
</el-table-column>
<el-table-column align="center" label="最新章节">
<template slot-scope="scope">{{ scope.row.newChapter }}</template>
</el-table-column>
<el-table-column align="center" label="最新章节更新时间">
<template slot-scope="scope">{{ scope.row.newTime | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="小说总字数">
<template slot-scope="scope">{{ scope.row.wordTotalCount }}</template>
</el-table-column>
<el-table-column align="center" label="页数">
<template slot-scope="scope">{{ scope.row.pageCount }}</template>
</el-table-column>
<el-table-column align="center" label="售价">
<template slot-scope="scope">{{ scope.row.price | changeMoneyYuan }}</template>
</el-table-column>
<el-table-column align="center" label="免费章节">
<template slot-scope="scope">{{ scope.row.noneChapter }}</template>
</el-table-column>
<el-table-column align="center" label="周观看次数">
<template slot-scope="scope">{{ scope.row.weekWatchTimes }}</template>
</el-table-column>
<el-table-column align="center" label="月观看次数">
<template slot-scope="scope">{{ scope.row.monthWatchTimes }}</template>
</el-table-column>
<el-table-column align="center" label="最后观看时间">
<template slot-scope="scope">{{ scope.row.lastWatchTime | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="小说发布者ID">
<template slot-scope="scope">{{ scope.row.publishId }}</template>
</el-table-column>
<!-- <el-table-column align="center" label="圈子">
<template slot-scope="scope">{{ scope.row.circleId | changeName(circleList, 'id', 'name') }}</template>
</el-table-column> -->
<el-table-column align="center" label="描述信息" width="300" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.desc }}</template>
</el-table-column>
<el-table-column align="center" label="是否VIP" width="100">
<template slot-scope="scope">
<el-button :type="scope.row.isVip ? 'success' : 'danger'" plain size="mini">{{ scope.row.isVip ? 'VIP' : '非VIP' }}</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="上架状态">
<template slot-scope="scope">{{ scope.row.status | changeStatus }}</template>
</el-table-column>
<el-table-column align="center" label="上架时间" width="150">
<template slot-scope="scope">{{ scope.row.addedTime | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="更新状态">
<template slot-scope="scope">{{ scope.row.updateStatus | changeUpdateStatus }}</template>
</el-table-column>
<el-table-column align="center" label="小说主题" width="300">
<template slot-scope="scope">
<el-tag :key="index" v-for="(item, index) in scope.row.topics" type="success">{{ item | changeName(topicIdList, 'id', 'name') }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="小说标签" width="300">
<template slot-scope="scope">
<el-tag :key="index" v-for="(item, index) in scope.row.tagName" type="success">{{ item.name }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="是否音频小说" width="80">
<template slot-scope="scope">{{ scope.row.isAudio ? '是' : '否' }} </template>
</el-table-column>
<!-- <el-table-column align="center" label="配音角色" width="300">-->
<!-- <template slot-scope="scope">-->
<!-- <template>-->
<!-- <el-table :data="scope.row.roleList" max-height="200" border style="width: 100%">-->
<!-- <el-table-column align="center" prop="comicsCvId" label="CV-id" width="135">-->
<!-- <template slot-scope="scopes">{{-->
<!-- scopes.row.comicsCvId-->
<!-- }}</template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" prop="roleName" label="配音角色" width="135">-->
<!-- <template slot-scope="scopes">{{-->
<!-- scopes.row.roleName-->
<!-- }}</template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- </template>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column align="center" label="评分">
<template slot-scope="scope">{{ scope.row.novelNumber }}</template>
</el-table-column>
<el-table-column align="center" label="真实信息">
<el-table-column align="center" label="评论数">
<template slot-scope="scope">{{ scope.row.real.comments }}</template>
</el-table-column>
<el-table-column align="center" label="点赞数">
<template slot-scope="scope">{{ scope.row.real.likes }}</template>
</el-table-column>
<el-table-column align="center" label="售卖数">
<template slot-scope="scope">{{ scope.row.real.sells }}</template>
</el-table-column>
<el-table-column align="center" label="分享数">
<template slot-scope="scope">{{ scope.row.real.shares }}</template>
</el-table-column>
<el-table-column align="center" label="观看数">
<template slot-scope="scope">{{ scope.row.real.watchTimes }}</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="虚拟信息">
<el-table-column align="center" label="评论数">
<template slot-scope="scope">{{ scope.row.fake.comments }}</template>
</el-table-column>
<el-table-column align="center" label="点赞数">
<template slot-scope="scope">{{ scope.row.fake.likes }}</template>
</el-table-column>
<el-table-column align="center" label="售卖数">
<template slot-scope="scope">{{ scope.row.fake.sells }}</template>
</el-table-column>
<el-table-column align="center" label="分享数">
<template slot-scope="scope">{{ scope.row.fake.shares }}</template>
</el-table-column>
<el-table-column align="center" label="观看数">
<template slot-scope="scope">{{ scope.row.fake.watchTimes }}</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="创建时间" width="150">
<template slot-scope="scope">{{ scope.row.createdAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" label="更新时间" width="150">
<template slot-scope="scope">{{ scope.row.updatedAt | BeiJingTime }}</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="550">
<template slot-scope="scope">
<el-button @click="onAddComment(scope.row)" size="mini" type="success">添加评论</el-button>
<el-button @click="addTotal(scope.$index, scope.row)" size="mini" type="primary">整本添加</el-button>
<el-button @click="showChapterList(scope.$index, scope.row)" size="mini" type="primary">查看章节列表</el-button>
<el-button @click="topNovels(scope.$index, scope.row)" size="mini" type="success">最新置顶</el-button>
<el-button @click="handleEdit(scope.$index, scope.row)" size="mini" type="primary">编辑</el-button>
<el-button @click="handleDelete(scope.$index, scope.row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<!-- 分页 -->
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 100]"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"/>
</div>
<!-- 新增/编辑弹出框 -->
<Edit :data="editData" v-if="dialogFormVisible" @close="closeEdit" :circleList="circleList"></Edit>
<ChapterList :data="editData" v-if="chapterListVisible" @close="closeEdit" />
<SetTag :data="selectBatch" v-if="setTagVisible" @close="closeEdit"></SetTag>
<EditCom :data="editData" v-if="editComVisible" :objectype="6" @close="closeEdit" />
<AddTags :data="selectBatch" v-if="tagsVisible" @close="closeEdit" />
<AddTotal :data="editData" v-if="addTotalVisible" @close="closeEdit" />
<Batch :data="selectBatch" v-if="batchVisible" @close="closeEdit"></Batch>
</div>
</template>
<script>
import { novelsList, novelsDel, novelsNewOne } from '@/api/novelsManagement/novels'
import { novelsTopicList } from '@/api/novelsManagement/novelsTopic'
import { novelsTagList } from '@/api/novelsManagement/novelsTag'
import { circleListSearch } from '@/api/user/circleList'
import ChapterList from './components/chapterList'
import ShowImg from '@/components/ShowImg/index.vue'
import Edit from './components/AddOrEdit'
import SetTag from './components/setTag'
import EditCom from '@/views/videoManagement/videoList/components/videoComment.vue'
import AddTags from './components/addTags'
import Batch from './components/batch'
import AddTotal from './components/addTotal'
export default {
name: 'Novels',
components: {
Edit,
ShowImg,
ChapterList,
SetTag,
EditCom,
AddTags,
AddTotal,
Batch
},
data() {
return {
// 请求列表筛选参数
searchData: {
id: undefined,
status: undefined, // 激活状态
pageNum: 1,
pageSize: 10,
novelPayType: undefined, // true 是否VIp
sort: undefined, // integer 排序,0创建时间,1rank排序,2观看数量排序,3收藏数量排序
tagId: undefined, // integer 标签
title: undefined, // "string",标题
topicId: undefined, // integer 主题
author: undefined, // 小说作者
tagStr: undefined,
novelType: undefined
},
tableData: [],
total: 0,
dialogFormVisible: false,
chapterListVisible: false,
editComVisible: false, // 评论弹出框
setTagVisible: false,
tagsVisible: false, // 批量添加标签
addTotalVisible: false, // 整本添加
batchVisible: false, // 批量设置小说
editData: {},
topicIdList: [],
tagIdList: [],
selectBatch: [],
circleList: []
}
},
filters: {
changeStatus(val) {
switch (val) {
case 0:
return '待上架'
case 1:
return '上架'
case 2:
return '取消上架'
case 3:
return '待审核'
case 4:
return '拒绝'
}
},
changeUpdateStatus(val) {
switch (val) {
case 0:
return '待发布'
case 1:
return '连载中'
case 2:
return '已完结'
}
}
},
async mounted() {
// this.getNovelsTagList()
this.getNovelsTopicList()
await this.getData()
// this.getCircleListSearch();
},
methods: {
// TODO:请求小说主题列表数据
getNovelsTopicList() {
const param = {
pageNum: 1,
pageSize: 500,
status: true
}
novelsTopicList(param).then(res => {
if (res.code === 200) {
this.topicIdList = res.data.list
this.$store.dispatch('novels/setNovelsTopicList', res.data.list)
} else {
this.topicIdList = []
this.$store.dispatch('novels/setNovelsTopicList', [])
this.$message.error('请求小说主题列表失败')
}
})
},
// 批量设置
batch() {
this.batchVisible = true
},
// TODO:请求小说标签列表数据
getNovelsTagList() {
const param = {
pageNum: 1,
pageSize: 10000
}
novelsTagList(param).then(res => {
if (res.code === 200) {
this.tagIdList = res.data.list
this.$store.dispatch('novels/setNovelsTagList', res.data.list)
} else {
this.tagIdList = []
this.$store.dispatch('novels/setNovelsTagList', [])
this.$message.error('请求小说标签列表失败!')
}
})
},
// TODO:请求小说列表数据
getData() {
novelsList(this.searchData).then(res => {
if (res.code === 200) {
this.tableData = res.data.list
this.total = res.data.count
} else {
this.tableData = []
this.total = 0
this.$message.error('请求小说列表数据失败')
}
})
},
// TODO:小说置顶
topNovels(index, row) {
novelsNewOne({ id: row.id }).then(res => {
if (res.code === 200) {
this.$message.success('置顶成功')
} else {
this.$message.error('置顶失败')
}
})
},
// TODO:删除小说列表数据
handleDelete(index, row) {
this.$confirm('确定删除?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
novelsDel({ novelId: row.id }).then(res => {
if (res.code === 200) {
this.getData({ pageNum: 1 }) // 刷新商品列表
this.$message.success('删除成功')
} else {
this.$message.error('删除失败')
}
})
})
},
// TODO:请求圈子列表数据
getCircleListSearch() {
circleListSearch({ pageNum: 1, pageSize: 5000 }).then(res => {
if (res.code === 200) {
this.circleList = res.data.list
} else {
this.$message.error('请求圈子列表失败!')
this.circleList = []
}
})
},
onSearch() {
this.searchData.pageNum = 1
this.getData()
},
handleSelectionChange(val) {
this.selectBatch = val
},
setTag() {
this.setTagVisible = true
},
setTags() {
this.tagsVisible = true
},
showChapterList(index, row) {
this.editData = {
title: '视频列表',
type: 3,
data: row
}
this.chapterListVisible = true
},
addTotal(index, row) {
this.editData = {
title: '整本添加',
data: row
}
this.addTotalVisible = true
},
// 列表编辑按钮点击事件
handleAdd() {
this.editData = {
title: '新增',
data: {}
}
this.dialogFormVisible = true
},
// 列表编辑按钮点击事件
handleEdit(index, row) {
this.editData = {
title: '编辑',
data: row
}
this.dialogFormVisible = true
},
closeEdit() {
this.editData = {
title: '新增',
data: {}
}
this.editComVisible = false
this.setTagVisible = false
this.dialogFormVisible = false
this.chapterListVisible = false
this.tagsVisible = false
this.addTotalVisible = false
this.batchVisible = false
this.getData()
},
onClear(key) {
this.searchData[key] = undefined
this.getData()
},
// 切换每页显示的条数触发
handleSizeChange(val) {
this.searchData.pageSize = val
this.getData()
},
// 切换页码时触发
handleCurrentChange(val) {
this.searchData.pageNum = val
this.getData()
},
onAddComment(row) {
this.editData = {
title: '添加评论',
data: row
}
this.editComVisible = true
}
}
}
</script>