|
@@ -2,15 +2,15 @@
|
|
<div class="box">
|
|
<div class="box">
|
|
<el-card class="box-card">
|
|
<el-card class="box-card">
|
|
<div slot="header" class="clearfix">
|
|
<div slot="header" class="clearfix">
|
|
- <span>期刊栏目</span>
|
|
|
|
- <el-button style="float: right; padding: 3px 0" type="text" @click="addcontents">添加期刊</el-button>
|
|
|
|
|
|
+ <span>期刊目录</span>
|
|
|
|
+ <el-button style="float: right; padding: 3px 0" type="text" @click="addcatalogue">添加期刊</el-button>
|
|
</div>
|
|
</div>
|
|
<div class="main">
|
|
<div class="main">
|
|
- <filterList ref="filterList" :tableData="contents" :filed="filed" @edit="filtereEdit" @delete="filterDelete" @query="filterQuery" :total="Total">
|
|
|
|
|
|
+ <filterList ref="filterList" :tableData="catalogue" :filed="filed" @edit="filtereEdit" @delete="filterDelete" @query="filterQuery" :total="Total">
|
|
<template v-slot:search="{ item, formInline }">
|
|
<template v-slot:search="{ item, formInline }">
|
|
<el-select clearable v-if="item.name == 'bind'" v-model="formInline[item.name]" placeholder="请选择">
|
|
<el-select clearable v-if="item.name == 'bind'" v-model="formInline[item.name]" placeholder="请选择">
|
|
<el-option
|
|
<el-option
|
|
- v-for="i in columnList"
|
|
|
|
|
|
+ v-for="i in journalList"
|
|
:key="i.value"
|
|
:key="i.value"
|
|
:label="i.name"
|
|
:label="i.name"
|
|
:value="i.code">
|
|
:value="i.code">
|
|
@@ -24,30 +24,18 @@
|
|
<template v-slot:windowMain>
|
|
<template v-slot:windowMain>
|
|
<formData ref="formData" :filed="formfiled" :data="formdata" :rules="formrules" @save="formSave" v-if="visibleSync">
|
|
<formData ref="formData" :filed="formfiled" :data="formdata" :rules="formrules" @save="formSave" v-if="visibleSync">
|
|
<template v-slot:formItem="{ item, formdata }">
|
|
<template v-slot:formItem="{ item, formdata }">
|
|
- <!-- 缩略图 -->
|
|
|
|
- <el-upload
|
|
|
|
- v-if="item.name == 'thumbnail'"
|
|
|
|
- class="avatar-uploader"
|
|
|
|
- action="/api/files/avatar/upload"
|
|
|
|
- :show-file-list="false"
|
|
|
|
- :headers="myHeaders"
|
|
|
|
- :on-success="handleAvatarSuccess"
|
|
|
|
- :before-upload="beforeAvatarUpload">
|
|
|
|
- <img v-if="formdata[item.name] && formdata[item.name] !== ''" :src="formdata[item.name]" class="avatar">
|
|
|
|
- <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
|
- </el-upload>
|
|
|
|
<!-- 富文本 -->
|
|
<!-- 富文本 -->
|
|
<editoritem v-if="item.name == 'content'" @change="editChage" :value="formdata[item.name]"></editoritem>
|
|
<editoritem v-if="item.name == 'content'" @change="editChage" :value="formdata[item.name]"></editoritem>
|
|
<!-- 附件上传 -->
|
|
<!-- 附件上传 -->
|
|
<el-upload
|
|
<el-upload
|
|
- v-if="item.name == 'annex'"
|
|
|
|
|
|
+ v-if="item.name == 'url'"
|
|
:headers="myHeaders"
|
|
:headers="myHeaders"
|
|
class="upload-demo"
|
|
class="upload-demo"
|
|
action="/api/files/avatar/upload"
|
|
action="/api/files/avatar/upload"
|
|
:on-success="handleAnnexSuccess"
|
|
:on-success="handleAnnexSuccess"
|
|
:on-remove="handleRemove"
|
|
:on-remove="handleRemove"
|
|
:file-list="fileList">
|
|
:file-list="fileList">
|
|
- <el-button size="small" type="primary">附件上传</el-button>
|
|
|
|
|
|
+ <el-button size="small" type="primary">PDF上传</el-button>
|
|
</el-upload>
|
|
</el-upload>
|
|
</template>
|
|
</template>
|
|
</formData>
|
|
</formData>
|
|
@@ -62,6 +50,10 @@ import formData from '@components/formData/index.vue';
|
|
import editoritem from '@components/editoritem.vue';
|
|
import editoritem from '@components/editoritem.vue';
|
|
import { mapState, mapActions } from 'vuex';
|
|
import { mapState, mapActions } from 'vuex';
|
|
const token = sessionStorage.getItem('token');
|
|
const token = sessionStorage.getItem('token');
|
|
|
|
+// .env配置
|
|
|
|
+const config = {
|
|
|
|
+ pdf: eval(process.env.VUE_APP_PDF ?? false)
|
|
|
|
+};
|
|
export default {
|
|
export default {
|
|
components: {
|
|
components: {
|
|
filterList,
|
|
filterList,
|
|
@@ -76,81 +68,89 @@ export default {
|
|
title: '',
|
|
title: '',
|
|
visibleSync: false,
|
|
visibleSync: false,
|
|
filed: [
|
|
filed: [
|
|
- { name: 'title', label: '标题', filter: true },
|
|
|
|
- { name: 'bind', label: '绑定栏目', formater: 'slot', filter: true },
|
|
|
|
- { name: 'visit', label: '访问量' }
|
|
|
|
|
|
+ { name: 'name', label: '标题', filter: true },
|
|
|
|
+ { name: 'status', label: '状态', filter: true, formater: 'dict:journalStatus' },
|
|
|
|
+ { name: 'bind', label: '期刊栏目', formater: 'slot', filter: true }
|
|
],
|
|
],
|
|
formdata: {},
|
|
formdata: {},
|
|
formfiled: [
|
|
formfiled: [
|
|
- { name: 'thumbnail', label: '缩略图', formater: 'slot' },
|
|
|
|
- { name: 'title', label: '标题' },
|
|
|
|
|
|
+ { name: 'name', label: '标题' },
|
|
{ name: 'describe', label: '描述' },
|
|
{ name: 'describe', label: '描述' },
|
|
- { name: 'bind', label: '绑定栏目', formater: 'dict:column' },
|
|
|
|
|
|
+ { name: 'status', label: '状态', formater: 'dict:journalStatus' },
|
|
{ name: 'date', label: '时间', formater: 'date:datetime' },
|
|
{ name: 'date', label: '时间', formater: 'date:datetime' },
|
|
- { name: 'content', label: '内容', formater: 'slot' },
|
|
|
|
- { name: 'annex', label: '附件', formater: 'slot' }
|
|
|
|
|
|
+ { name: 'column', label: '栏目', formater: 'dict:journalcolumn' },
|
|
|
|
+ { name: 'bind', label: '期刊栏目', formater: 'dict:journalQuery' },
|
|
|
|
+ ...(config.pdf ? [{ name: 'url', label: 'PDF上传', formater: 'slot' }] : [{ name: 'content', label: '内容', formater: 'slot' }])
|
|
],
|
|
],
|
|
formrules: {
|
|
formrules: {
|
|
thumbnail: [
|
|
thumbnail: [
|
|
{ required: true, message: '请上传缩略图', trigger: 'chage' }
|
|
{ required: true, message: '请上传缩略图', trigger: 'chage' }
|
|
],
|
|
],
|
|
- title: [
|
|
|
|
|
|
+ name: [
|
|
{ required: true, message: '请输入标题', trigger: 'blur' }
|
|
{ required: true, message: '请输入标题', trigger: 'blur' }
|
|
],
|
|
],
|
|
describe: [
|
|
describe: [
|
|
{ required: true, message: '请输入描述', trigger: 'blur' }
|
|
{ required: true, message: '请输入描述', trigger: 'blur' }
|
|
],
|
|
],
|
|
- bind: [
|
|
|
|
- { required: true, message: '请绑定栏目', trigger: 'chage' }
|
|
|
|
|
|
+ status: [
|
|
|
|
+ { required: true, message: '请选择状态', trigger: 'chage' }
|
|
],
|
|
],
|
|
date: [
|
|
date: [
|
|
{ required: true, message: '请输入时间', trigger: 'blur' }
|
|
{ required: true, message: '请输入时间', trigger: 'blur' }
|
|
],
|
|
],
|
|
- content: [
|
|
|
|
- { required: true, message: '请输入内容', trigger: 'blur' }
|
|
|
|
|
|
+ column: [
|
|
|
|
+ { required: true, message: '请输选择栏目', trigger: 'chage' }
|
|
|
|
+ ],
|
|
|
|
+ bind: [
|
|
|
|
+ { required: true, message: '请输选择栏目', trigger: 'chage' }
|
|
|
|
+ ],
|
|
|
|
+ url: [
|
|
|
|
+ { required: true, message: '请输选择PDF', trigger: 'chage' }
|
|
]
|
|
]
|
|
}
|
|
}
|
|
};
|
|
};
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
- ...mapState(['contentsList', 'Total', 'columnList']),
|
|
|
|
- contents() {
|
|
|
|
- this.contentsList.map(p => {
|
|
|
|
- const findName = this.columnList.find(e => e.code == p.bind);
|
|
|
|
|
|
+ ...mapState(['catalogueList', 'Total', 'journalList']),
|
|
|
|
+ catalogue() {
|
|
|
|
+ this.catalogueList.map(p => {
|
|
|
|
+ const findName = this.journalList.find(e => e.code == p.bind);
|
|
if (findName) p.bind = findName?.name;
|
|
if (findName) p.bind = findName?.name;
|
|
return p;
|
|
return p;
|
|
});
|
|
});
|
|
- return this.contentsList;
|
|
|
|
|
|
+ return this.catalogueList;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
async mounted() {
|
|
async mounted() {
|
|
await this.filterQuery();
|
|
await this.filterQuery();
|
|
|
|
+ await this.statusQuery();
|
|
await this.columnQuery();
|
|
await this.columnQuery();
|
|
|
|
+ await this.journalQuery();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- ...mapActions(['contentsQuery', 'contentsCreate', 'contentsUpdate', 'contentsDelete', 'contentsQuery', 'contentsFetch', 'columnQuery']),
|
|
|
|
|
|
+ ...mapActions(['catalogueQuery', 'catalogueCreate', 'catalogueUpdate', 'catalogueDelete', 'catalogueQuery', 'catalogueFetch', 'statusQuery', 'columnQuery', 'journalQuery']),
|
|
// 添加
|
|
// 添加
|
|
- addcontents () {
|
|
|
|
|
|
+ addcatalogue () {
|
|
this.formdata = {};
|
|
this.formdata = {};
|
|
- this.title = '添加文章';
|
|
|
|
|
|
+ this.title = '添加期刊';
|
|
this.visibleSync = true;
|
|
this.visibleSync = true;
|
|
},
|
|
},
|
|
// 修改
|
|
// 修改
|
|
async filtereEdit (e) {
|
|
async filtereEdit (e) {
|
|
- const res = await this.contentsFetch({ id: e._id });
|
|
|
|
|
|
+ const res = await this.catalogueFetch({ id: e._id });
|
|
this.formdata = res.data;
|
|
this.formdata = res.data;
|
|
- this.title = '修改文章';
|
|
|
|
|
|
+ this.title = '修改期刊';
|
|
this.visibleSync = true;
|
|
this.visibleSync = true;
|
|
},
|
|
},
|
|
// 删除
|
|
// 删除
|
|
async filterDelete (e) {
|
|
async filterDelete (e) {
|
|
- const res = await this.contentsDelete({ id: e?._id });
|
|
|
|
|
|
+ const res = await this.catalogueDelete({ id: e?._id });
|
|
this.$resChange(res, '删除成功');
|
|
this.$resChange(res, '删除成功');
|
|
this.filterQuery();
|
|
this.filterQuery();
|
|
},
|
|
},
|
|
// 查询
|
|
// 查询
|
|
async filterQuery ({ filter = {}, paging = { content: 0, size: 10 } } = {}) {
|
|
async filterQuery ({ filter = {}, paging = { content: 0, size: 10 } } = {}) {
|
|
- await this.contentsQuery({ filter, paging });
|
|
|
|
|
|
+ await this.catalogueQuery({ filter, paging });
|
|
},
|
|
},
|
|
// 表单保存
|
|
// 表单保存
|
|
async formSave (e) {
|
|
async formSave (e) {
|
|
@@ -162,11 +162,11 @@ export default {
|
|
let res, msg;
|
|
let res, msg;
|
|
// 修改
|
|
// 修改
|
|
if (e._id) {
|
|
if (e._id) {
|
|
- res = await this.contentsUpdate(e);
|
|
|
|
- msg = '文章修改成功';
|
|
|
|
|
|
+ res = await this.catalogueUpdate(e);
|
|
|
|
+ msg = '期刊修改成功';
|
|
} else {
|
|
} else {
|
|
- res = await this.contentsCreate(e);
|
|
|
|
- msg = '文章修改成功';
|
|
|
|
|
|
+ res = await this.catalogueCreate(e);
|
|
|
|
+ msg = '期刊修改成功';
|
|
}
|
|
}
|
|
this.$resChange(res, msg);
|
|
this.$resChange(res, msg);
|
|
this.filterQuery();
|
|
this.filterQuery();
|
|
@@ -178,7 +178,7 @@ export default {
|
|
},
|
|
},
|
|
// 附件上传
|
|
// 附件上传
|
|
handleAnnexSuccess(res, file) {
|
|
handleAnnexSuccess(res, file) {
|
|
- this.$refs.formData.setForm('annex', res.data.filePath);
|
|
|
|
|
|
+ this.$refs.formData.setForm('url', res.data.filePath);
|
|
this.fileList.push({ name: res.data.name, url: res.data.filePath });
|
|
this.fileList.push({ name: res.data.name, url: res.data.filePath });
|
|
},
|
|
},
|
|
// 删除附件列表
|
|
// 删除附件列表
|