Explorar o código

完成期刊目录

asd123a20 %!s(int64=3) %!d(string=hai) anos
pai
achega
26be0dbd70

+ 2 - 1
admin-journal-catalogue/.env

@@ -1,2 +1,3 @@
 # 窗口使用弹出还是抽屉 (dialog And drawer)
 # 窗口使用弹出还是抽屉 (dialog And drawer)
-VUE_APP_WINDOW=dialog
+VUE_APP_WINDOW=dialog
+VUE_APP_PDF=false

+ 2 - 1
admin-journal-catalogue/.eslintrc.js

@@ -18,6 +18,7 @@ module.exports = {
     'no-extra-semi': 2,
     'no-extra-semi': 2,
     semi: [2, 'always'],
     semi: [2, 'always'],
     'space-before-function-paren': [0, 'always'],
     'space-before-function-paren': [0, 'always'],
-    eqeqeq: 0
+    eqeqeq: 0,
+    'no-eval': [0, { allowIndirect: true }]
   }
   }
 };
 };

+ 42 - 24
admin-journal-catalogue/src/store/index.js

@@ -2,58 +2,76 @@ import Vue from 'vue';
 import Vuex from 'vuex';
 import Vuex from 'vuex';
 import $axios from '@lib/axios.js';
 import $axios from '@lib/axios.js';
 const api = {
 const api = {
-  contentsCreate: '/api/journal/contents/create',
-  contentsUpdate: '/api/journal/contents/update',
-  contentsDelete: '/api/journal/contents/delete',
-  contentsQuery: '/api/journal/contents/query',
-  contentsFetch: '/api/journal/contents/fetch',
-  columnQuery: '/api/journal/column/query'
+  catalogueCreate: '/api/journal/catalogue/create',
+  catalogueUpdate: '/api/journal/catalogue/update',
+  catalogueDelete: '/api/journal/catalogue/delete',
+  catalogueQuery: '/api/journal/catalogue/query',
+  catalogueFetch: '/api/journal/catalogue/fetch',
+  dictQuery: '/api/code/dictionary/query',
+  journalQuery: '/api/journal/intact/query'
 };
 };
 Vue.use(Vuex);
 Vue.use(Vuex);
 const state = () => ({
 const state = () => ({
   Total: 0,
   Total: 0,
-  contentsList: [],
-  columnList: [],
+  catalogueList: [],
+  journalList: [],
   dict: {}
   dict: {}
 });
 });
 
 
 const actions = {
 const actions = {
-  async contentsCreate ({ commit }, payload) {
-    const res = await $axios.post(api.contentsCreate, payload);
+  async catalogueCreate ({ commit }, payload) {
+    const res = await $axios.post(api.catalogueCreate, payload);
     return res;
     return res;
   },
   },
-  async contentsUpdate ({ commit }, payload) {
-    const res = await $axios.post(api.contentsUpdate, { ...payload, id: payload._id });
+  async catalogueUpdate ({ commit }, payload) {
+    const res = await $axios.post(api.catalogueUpdate, { ...payload, id: payload._id });
     return res;
     return res;
   },
   },
-  async contentsDelete ({ commit }, { id }) {
-    const res = await $axios.delete(`${api.contentsDelete}/${id}`);
+  async catalogueDelete ({ commit }, { id }) {
+    const res = await $axios.delete(`${api.catalogueDelete}/${id}`);
     return res;
     return res;
   },
   },
-  async contentsQuery ({ commit }, { filter, paging } = {}) {
-    const res = await $axios.get(api.contentsQuery, { ...filter, skip: paging.page, limit: paging.size });
-    commit('contentsQuery', res);
+  async catalogueQuery ({ commit }, { filter, paging } = {}) {
+    const res = await $axios.get(api.catalogueQuery, { ...filter, skip: paging.page, limit: paging.size });
+    commit('catalogueQuery', res);
     return res;
     return res;
   },
   },
-  async contentsFetch ({ commit }, payload) {
-    const res = await $axios.get(api.contentsFetch, payload);
+  async catalogueFetch ({ commit }, payload) {
+    const res = await $axios.get(api.catalogueFetch, payload);
+    return res;
+  },
+  async statusQuery ({ commit }) {
+    const res = await $axios.get(api.dictQuery, { parentCode: 'journalStatus' });
+    commit('statusQuery', res);
     return res;
     return res;
   },
   },
   async columnQuery ({ commit }) {
   async columnQuery ({ commit }) {
-    const res = await $axios.get(api.columnQuery);
+    const res = await $axios.get(api.dictQuery, { parentCode: 'journalcolumn' });
     commit('columnQuery', res);
     commit('columnQuery', res);
     return res;
     return res;
+  },
+  async journalQuery ({ commit }, payload) {
+    const res = await $axios.get(api.journalQuery, payload);
+    commit('journalQuery', res);
+    return res;
   }
   }
 };
 };
 
 
 const mutations = {
 const mutations = {
-  contentsQuery(state, payload) {
-    state.contentsList = payload.data;
+  catalogueQuery(state, payload) {
+    state.catalogueList = payload.data;
     state.Total = payload.total;
     state.Total = payload.total;
   },
   },
+  statusQuery(state, payload) {
+    state.dict.journalStatus = payload.data;
+  },
   columnQuery(state, payload) {
   columnQuery(state, payload) {
-    state.columnList = payload.data;
-    state.dict.column = payload.data;
+    state.dict.journalcolumn = payload.data;
+  },
+  journalQuery(state, payload) {
+    payload.data = payload.data.map(e => ({ ...e, code: e._id }));
+    state.dict.journalQuery = payload.data;
+    state.journalList = payload.data;
   }
   }
 };
 };
 
 

+ 48 - 48
admin-journal-catalogue/src/views/home.vue

@@ -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 });
     },
     },
     // 删除附件列表
     // 删除附件列表

+ 1 - 5
admin-journal-intact/src/views/home.vue

@@ -77,7 +77,7 @@ export default {
       visibleSync: false,
       visibleSync: false,
       filed: [
       filed: [
         { name: 'name', label: '标题', filter: true },
         { name: 'name', label: '标题', filter: true },
-        { name: 'status', label: '状态', filter: true },
+        { name: 'status', label: '状态', filter: true, formater: 'dict:journalStatus' },
         { name: 'visit', label: '访问量' }
         { name: 'visit', label: '访问量' }
       ],
       ],
       formdata: {},
       formdata: {},
@@ -181,10 +181,6 @@ export default {
       this.filterQuery();
       this.filterQuery();
       this.visibleSync = false;
       this.visibleSync = false;
     },
     },
-    // 富文本改变
-    editChage (e) {
-      this.$refs.formData.setForm('content', e);
-    },
     // 附件上传
     // 附件上传
     handleAnnexSuccess(res, file) {
     handleAnnexSuccess(res, file) {
       this.$refs.formData.setForm('url', res.data.filePath);
       this.$refs.formData.setForm('url', res.data.filePath);