guhongwei 4 年之前
父节点
当前提交
634d2edea8

+ 60 - 0
src/views/superAdminCenter/Journ/index.vue

@@ -0,0 +1,60 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="8" class="column">
+          <column @setCategory="data => (columnid = data)" @setList="data => (categoryList = data)"></column>
+        </el-col>
+        <el-col :span="16" class="news">
+          <news :columnid="columnid" :categoryList="categoryList"></news>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import column from './parts/column.vue';
+import news from './parts/news.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    column,
+    news,
+  },
+  data: function() {
+    return {
+      columnid: undefined,
+      categoryList: [],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  min-height: 750px;
+  padding: 0 15px 0 0;
+  .column {
+    min-height: 750px;
+    border: 1px solid #ccc;
+    margin: 0 10px 0 0;
+  }
+  .news {
+    width: 65%;
+    min-height: 750px;
+    border: 1px solid #ccc;
+  }
+}
+</style>

+ 147 - 0
src/views/superAdminCenter/Journ/parts/column.vue

@@ -0,0 +1,147 @@
+<template>
+  <div id="column">
+    <el-row>
+      <el-col :span="24" class="column">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="title">
+            栏目管理
+          </el-col>
+          <el-col :span="12" class="btn">
+            <el-button type="primary" size="mini" @click="drawer = true">添加</el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @rowClick="rowClick" :usePage="false"></data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-drawer title="栏目管理" :visible.sync="drawer" direction="rtl" @closed="handleClose" :destroy-on-close="true">
+      <data-form :fields="fields" :data="form" :rules="{}" @save="drawerSave" :isNew="drawerIsNew">
+        <template #options="{item}">
+          <template v-if="item.model === 'site'">
+            <el-option v-for="(i, index) in siteList" :key="index" :label="i.name" :value="i.site"></el-option>
+          </template>
+        </template>
+      </data-form>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import dataForm from '@/components/form.vue';
+import dataTable from '@/components/data-table.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: journcolumn } = createNamespacedHelpers('journcolumn');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'column',
+  props: {},
+  components: {
+    dataTable,
+    dataForm,
+  },
+  data: function() {
+    return {
+      opera: [
+        {
+          label: '编辑',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          confirm: true,
+        },
+      ],
+      fields: [
+        { label: '名称', prop: 'title', model: 'title' },
+        { label: '位置', prop: 'site', model: 'site', type: 'select' },
+      ],
+      list: [],
+      total: 0,
+      drawerIsNew: true,
+      drawer: false,
+      form: {},
+      // 栏目位置列表
+      siteList: [
+        { name: '科技咨讯', site: 'kjzx' },
+        { name: '工作动态', site: 'gzdt' },
+        { name: '通知通告', site: 'tztg' },
+        { name: '技术前沿', site: 'jsqy' },
+      ],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...journcolumn(['query', 'create', 'update', 'delete']),
+    async search() {
+      const res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+        this.$emit('setList', res.data);
+      }
+    },
+    toEdit({ data }) {
+      this.$set(this, 'form', data);
+      this.drawer = true;
+      this.drawerIsNew = false;
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+    // 提交
+    async drawerSave({ data, isNew }) {
+      let res;
+      let msg;
+      if (isNew) {
+        res = await this.create(data);
+        msg = '栏目创建成功';
+      } else {
+        res = await this.update(data);
+        msg = '栏目修改成功';
+      }
+      if (this.$checkRes(res, msg, res.errmsg)) {
+        this.handleClose();
+        this.search();
+      }
+    },
+    // 取消
+    handleClose() {
+      this.drawer = false;
+      this.form = {};
+      this.drawerIsNew = true;
+    },
+    // 选择栏目
+    rowClick(row) {
+      this.$emit('setCategory', row.id);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.column {
+  .top {
+    padding: 10px 0;
+    .title {
+      padding: 2px 10px;
+      font-size: 18px;
+      font-weight: bold;
+    }
+    .btn {
+      text-align: right;
+      padding: 0 10px 0 0;
+    }
+  }
+}
+</style>

+ 244 - 0
src/views/superAdminCenter/Journ/parts/news.vue

@@ -0,0 +1,244 @@
+<template>
+  <div id="news">
+    <el-row>
+      <el-col :span="24" class="column">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="title">
+            {{ column_name || '信息管理' }}
+          </el-col>
+          <el-col :span="12" class="btn">
+            <el-button type="primary" size="mini" @click="drawer = true">添加</el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <data-table :fields="fields" :data="list" :total="total" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="信息管理" :visible.sync="drawer" @closed="handleClose">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="所属栏目" prop="column_id">
+          <el-select v-model="form.column_id" placeholder="请选择" @change="changecol">
+            <el-option v-for="(i, index) in column" :key="index" :label="i.title" :value="i.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="类型" v-if="site == 'kjzx'">
+          <el-radio-group v-model="form.type">
+            <el-radio label="国家"></el-radio>
+            <el-radio label="科学院"></el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="名称" prop="title">
+          <el-input v-model="form.title" placeholder="请输入信息名称"></el-input>
+        </el-form-item>
+        <el-form-item label="信息来源">
+          <el-input v-model="form.orgin" placeholder="请输入信息来源"></el-input>
+        </el-form-item>
+        <el-form-item label="图片">
+          <upload :limit="1" :data="form.picture" type="picture" :url="'/files/picture/upload'" @upload="uploadSuccess"></upload>
+        </el-form-item>
+        <el-form-item label="内容">
+          <wang-editor v-model="form.content" placeholder="请输入信息内容"></wang-editor>
+        </el-form-item>
+        <el-form-item label="发布时间">
+          <el-date-picker type="date" placeholder="请选择" value-format="yyyy-MM-dd" v-model="form.publish_time"></el-date-picker>
+        </el-form-item>
+        <el-form-item label="附件">
+          <uploadfile
+            :limit="1"
+            :data="form.filepath"
+            type="filepath"
+            listType=""
+            :url="'/files/filepath/upload'"
+            @upload="uploadSuccess"
+            @delete="uploadDelete"
+          ></uploadfile>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="drawerSave">保存</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import WangEditor from '@/components/wang-editor.vue';
+import upload from '@/components/uploadone.vue';
+import uploadfile from '@/components/uploaddock.vue';
+import dataTable from '@/components/data-table.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: journcolumn } = createNamespacedHelpers('journcolumn');
+const { mapActions: journnews } = createNamespacedHelpers('journnews');
+export default {
+  name: 'news',
+  props: {
+    columnid: String,
+    categoryList: Array,
+  },
+  components: {
+    dataTable,
+    WangEditor,
+    upload,
+    uploadfile,
+  },
+  data: function() {
+    return {
+      // 列表
+      opera: [
+        {
+          label: '编辑',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          confirm: true,
+        },
+      ],
+      fields: [
+        { label: '所属栏目', prop: 'column_name' },
+        { label: '标题', prop: 'title' },
+        { label: '来源', prop: 'orgin' },
+        { label: '时间', prop: 'publish_time' },
+      ],
+      list: [],
+      total: 0,
+      drawer: false,
+      form: {},
+      rules: {
+        column_id: [{ required: true, message: '请选择活动区域', trigger: 'change' }],
+        title: [{ required: true, message: '请输入信息名称', trigger: 'blur' }],
+      },
+      // 栏目列表
+      column: [],
+      // 位置
+      site: '',
+      column_name: '',
+    };
+  },
+  async created() {
+    await this.searchcol();
+    await this.search();
+  },
+  methods: {
+    ...journcolumn({ journcolumnQuery: 'query' }),
+    ...journnews(['query', 'create', 'update', 'delete']),
+    // 查询列表
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      if (this.columnid) {
+        info.column_id = this.columnid;
+      }
+      let user = this.user;
+      if (user.code == 'JLCJGLY') {
+        const res = await this.query({ skip, limit, ...info });
+        if (this.$checkRes(res)) {
+          this.$set(this, `list`, res.data);
+          this.$set(this, `total`, res.total);
+        }
+      } else {
+        info.uid = user.uid;
+        const res = await this.query({ skip, limit, ...info });
+        if (this.$checkRes(res)) {
+          this.$set(this, `list`, res.data);
+          this.$set(this, `total`, res.total);
+        }
+      }
+    },
+    // 修改
+    toEdit({ data }) {
+      this.$set(this, 'form', data);
+      this.drawer = true;
+    },
+    // 删除
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+    // 提交
+    async drawerSave() {
+      let data = this.form;
+      if (data.id) {
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '修改信息成功',
+            type: 'success',
+          });
+          this.handleClose();
+          this.search();
+        }
+      } else {
+        data.uid = this.user.uid;
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '创建信息成功',
+            type: 'success',
+          });
+          this.handleClose();
+          this.search();
+        }
+      }
+    },
+    // 取消
+    handleClose() {
+      this.form = {};
+      this.drawer = false;
+    },
+    // 查询栏目
+    async searchcol() {
+      let res = await this.journcolumnQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `column`, res.data);
+      }
+    },
+    // 图片
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+    // 删除图片
+    uploadDelete(index) {
+      this.$set(this.form, `filepath`, null);
+    },
+    // 栏目选择
+    changecol(value) {
+      let column = this.column.find(f => f.id == value);
+      if (column) this.$set(this.form, `column_name`, column.title);
+      this.$set(this, `site`, column.site);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {
+    columnid: {
+      handler(val) {
+        if (val) {
+          this.search();
+          let column = this.column.find(f => f.id == this.columnid);
+          if (column) this.$set(this, `column_name`, column.title);
+        }
+      },
+      immediate: true,
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.column {
+  .top {
+    padding: 10px 0;
+    .title {
+      padding: 2px 10px;
+      font-size: 18px;
+      font-weight: bold;
+    }
+    .btn {
+      text-align: right;
+      padding: 0 10px 0 0;
+    }
+  }
+}
+</style>

+ 2 - 0
src/views/superAdminCenter/index.vue

@@ -48,6 +48,7 @@ import bindWx from './bindWx/index.vue';
 import notice from './notice/index.vue';
 import productSolicit from './productSolicit/index.vue';
 import updatepwd from './xiugai/xiugai.vue';
+import Journ from './Journ/index.vue';
 import heads from '@/layout/userCenter/heads.vue';
 import foot from '@/layout/live/foot.vue';
 
@@ -78,6 +79,7 @@ export default {
     menus,
     top,
     updatepwd,
+    Journ,
   },
   data: function() {
     return {