lrf402788946 4 år sedan
förälder
incheckning
96b1814de9

+ 3 - 1
src/plugins/components.js

@@ -1,10 +1,12 @@
 import Vue from 'vue';
 import Vue from 'vue';
 import dataTable from '@common/src/components/frame/filter-page-table.vue';
 import dataTable from '@common/src/components/frame/filter-page-table.vue';
 import dataForm from '@common/src/components/frame/form.vue';
 import dataForm from '@common/src/components/frame/form.vue';
-console.log(dataTable);
+import upload from '@common/src/components/frame/upload.vue';
 const Plugin = (vue) => {
 const Plugin = (vue) => {
+  vue.prototype.$dev_mode = process.env.NODE_ENV === 'development';
   vue.component('data-table', dataTable);
   vue.component('data-table', dataTable);
   vue.component('data-form', dataForm);
   vue.component('data-form', dataForm);
+  vue.component('upload', upload);
 };
 };
 
 
 Vue.use(Plugin);
 Vue.use(Plugin);

+ 15 - 9
src/router/index.js

@@ -58,27 +58,33 @@ const web = [
     component: () => import('../views/login.vue'),
     component: () => import('../views/login.vue'),
   },
   },
   {
   {
-    path: '/adminCnter/homeIndex',
-    name: 'adminCnter',
-    component: () => import('../views/adminCnter/index.vue'),
+    path: '/adminCenter/homeIndex',
+    name: 'adminCenter',
+    component: () => import('../views/adminCenter/index.vue'),
     children: [
     children: [
       {
       {
-        path: '/adminCnter/homeIndex',
+        path: '/adminCenter/homeIndex',
         name: 'admin_homeIndex',
         name: 'admin_homeIndex',
         meta: { title: '首页' },
         meta: { title: '首页' },
-        component: () => import('../views/adminCnter/homeIndex/index.vue'),
+        component: () => import('../views/adminCenter/homeIndex/index.vue'),
       },
       },
       {
       {
-        path: '/adminCnter/test',
+        path: '/adminCenter/test',
         name: 'admin_test',
         name: 'admin_test',
         meta: { title: '测试页面' },
         meta: { title: '测试页面' },
-        component: () => import('../views/adminCnter/test/index.vue'),
+        component: () => import('../views/adminCenter/test/index.vue'),
       },
       },
       {
       {
-        path: '/adminCnter/news',
+        path: '/adminCenter/news',
         name: 'admin_news',
         name: 'admin_news',
         meta: { title: '新闻管理' },
         meta: { title: '新闻管理' },
-        component: () => import('../views/adminCnter/news/index.vue'),
+        component: () => import('../views/adminCenter/news/index.vue'),
+      },
+      {
+        path: '/adminCenter/news/detail',
+        name: 'admin_detail',
+        meta: { title: '新闻管理' },
+        component: () => import('../views/adminCenter/news/detail.vue'),
       },
       },
     ],
     ],
   },
   },

src/views/adminCnter/homeIndex/index.vue → src/views/adminCenter/homeIndex/index.vue


src/views/adminCnter/index.vue → src/views/adminCenter/index.vue


+ 82 - 0
src/views/adminCenter/news/detail.vue

@@ -0,0 +1,82 @@
+<template>
+  <div id="detail">
+    <data-form :fields="fields" :data="data" @save="toSave">
+      <template #options="{ item }">
+        <template v-if="item.model === 'column_name'">
+          <el-option v-for="(i, index) in typeList" :key="`columns-name-${index}`" :label="i" :value="i"></el-option>
+        </template>
+      </template>
+      <template #custom="{ item }">
+        <template v-if="item.model === 'image'">
+          <upload :data="data[item.model]" url="/files/cysci/news_image/upload"></upload>
+        </template>
+        <template v-if="item.model === 'fileUrl'"> upload </template>
+      </template>
+    </data-form>
+  </div>
+</template>
+
+<script>
+const _ = require('lodash');
+const { newsColumn } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: news } = createNamespacedHelpers('news');
+export default {
+  name: 'newsDetail',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      typeList: newsColumn,
+      data: {},
+      fields: [
+        { label: '栏目名称', model: 'column_name', type: 'select' },
+        { label: '标题', model: 'title' },
+        { label: '发布时间', model: 'release_time', type: 'datetime' },
+        { label: '来源', model: 'origin' },
+        { label: '内容', model: 'content' },
+        { label: '图片', model: 'image', custom: true },
+        { label: '附件', model: 'fileUrl', custom: true },
+      ],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...news(['fetch', 'create', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `data`, res.data);
+      }
+    },
+    async toSave({ data }) {
+      let dup = _.cloneDeep(data);
+      let res;
+      if (_.get(dup, 'id')) {
+        res = await this.update(dup);
+      } else {
+        res = await this.create(dup);
+      }
+      if (this.$checkRes(res, '保存成功', '保存失败')) {
+        if (!this.$dev_mode) this.$router.push('/adminCenter/news');
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user', 'menuParams']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 85 - 0
src/views/adminCenter/news/index.vue

@@ -0,0 +1,85 @@
+<template>
+  <div id="news-index">
+    <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @edit="toEdit" @delete="toDelete">
+      <template #selfbtn>
+        <el-button type="primary" size="mini" @click="toAdd">添加新闻</el-button>
+      </template>
+      <template #options="{ item }">
+        <template v-if="item.prop === 'column_name'">
+          <el-option v-for="(i, index) in typeList" :key="`columns-name-${index}`" :label="i" :value="i"></el-option>
+        </template>
+      </template>
+    </data-table>
+  </div>
+</template>
+
+<script>
+const { newsColumn } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: news } = createNamespacedHelpers('news');
+export default {
+  name: 'newsIndex',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '修改',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          type: 'danger',
+        },
+      ],
+      fields: [
+        { label: '栏目名称', prop: 'column_name', filter: 'select' },
+        { label: '标题', prop: 'title', filter: true },
+        { label: '来源', prop: 'origin' },
+        { label: '发布时间', prop: 'release_time' },
+      ],
+      typeList: newsColumn,
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...news(['query', 'delete']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toAdd() {
+      this.$router.push('/adminCenter/news/detail');
+    },
+    toEdit({ data }) {
+      this.$router.push({ path: '/adminCenter/news/detail', query: { id: data._id } });
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data._id);
+      if (this.$checkRes(res, '删除成功', '删除失败')) {
+        this.search();
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user', 'menuParams']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

src/views/adminCnter/test/index.vue → src/views/adminCenter/test/index.vue


+ 0 - 52
src/views/adminCnter/news/index.vue

@@ -1,52 +0,0 @@
-<template>
-  <div id="news-index">
-    <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search"></data-table>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'newsIndex',
-  props: {},
-  components: {},
-  data: function () {
-    return {
-      list: [],
-      total: 0,
-      opera: [
-        {
-          label: '审核',
-          method: 'check',
-        },
-      ],
-      fields: [
-        { label: '产品名称', prop: 'name' },
-        { label: '类型', prop: 'type', format: (i) => (i == '1' ? '技术成果' : i == '2' ? '商务服务' : '科技需求') },
-        { label: '联系人', prop: 'contacts' },
-        { label: '联系电话', prop: 'phone' },
-        { label: '所属领域', prop: 'field' },
-        { label: '合作方式', prop: 'cooperation' },
-        { label: '审核状态', prop: 'dockStatus', format: (i) => (i == '1' ? '已通过' : i == '2' ? '已拒绝' : '未审核') },
-      ],
-    };
-  },
-  created() {},
-  methods: {
-    async search() {
-      console.log('in function:');
-    },
-  },
-  computed: {
-    ...mapState(['user', 'menuParams']),
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-
-<style lang="less" scoped></style>