lrf402788946 4 лет назад
Родитель
Сommit
9f287b37e2

+ 2 - 2
src/plugins/components.js

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

+ 13 - 1
src/router/index.js

@@ -82,10 +82,22 @@ const web = [
       },
       {
         path: '/adminCenter/news/detail',
-        name: 'admin_detail',
+        name: 'admin_news_detail',
         meta: { title: '新闻管理' },
         component: () => import('../views/adminCenter/news/detail.vue'),
       },
+      {
+        path: '/adminCenter/product',
+        name: 'admin_product',
+        meta: { title: '科技成果' },
+        component: () => import('../views/adminCenter/product/index.vue'),
+      },
+      {
+        path: '/adminCenter/product/detail',
+        name: 'admin_product_detail',
+        meta: { title: '科技成果' },
+        component: () => import('../views/adminCenter/product/detail.vue'),
+      },
     ],
   },
 ];

+ 2 - 0
src/store/index.js

@@ -4,6 +4,7 @@ import * as ustate from '@common/src/store/user/state';
 import * as umutations from '@common/src/store/user/mutations';
 import login from '@common/src/store/login';
 import news from '@common/src/store/news';
+import product from '@common/src/store/product';
 
 Vue.use(Vuex);
 
@@ -14,5 +15,6 @@ export default new Vuex.Store({
   modules: {
     login,
     news,
+    product,
   },
 });

+ 10 - 4
src/views/adminCenter/news/detail.vue

@@ -1,6 +1,7 @@
 <template>
+  <!-- TODO: 内容的富文本还需要写;上传没有查看,需要完善 -->
   <div id="detail">
-    <data-form :fields="fields" :data="data" @save="toSave">
+    <data-form :fields="fields" :data="data" @save="toSave" returns="/adminCenter/news">
       <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>
@@ -8,9 +9,11 @@
       </template>
       <template #custom="{ item }">
         <template v-if="item.model === 'image'">
-          <upload :data="data[item.model]" url="/files/cysci/news_image/upload"></upload>
+          <e-upload url="/files/cysci/news_image/upload" v-model="data[item.model]"></e-upload>
+        </template>
+        <template v-if="item.model === 'fileUrl'">
+          <e-upload url="/files/cysci/news_file/upload" v-model="data[item.model]" type="text"></e-upload>
         </template>
-        <template v-if="item.model === 'fileUrl'"> upload </template>
       </template>
     </data-form>
   </div>
@@ -28,7 +31,10 @@ export default {
   data: function () {
     return {
       typeList: newsColumn,
-      data: {},
+      data: {
+        image: [],
+        fileUrl: [],
+      },
       fields: [
         { label: '栏目名称', model: 'column_name', type: 'select' },
         { label: '标题', model: 'title' },

+ 30 - 0
src/views/adminCenter/product/detail.vue

@@ -0,0 +1,30 @@
+<template>
+  <div id="detail">
+    <p>detail</p>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'productDetail',
+  props: {},
+  components: {},
+  data: function () {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user', 'menuParams']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 90 - 0
src/views/adminCenter/product/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <div id="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>
+    </data-table>
+  </div>
+</template>
+
+<script>
+const { productType } = require('@common/dict/index');
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('product');
+export default {
+  name: 'productIndex',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      opera: [
+        {
+          label: '修改',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          type: 'danger',
+        },
+      ],
+      fields: [
+        { label: '名称', prop: 'name', filter: true },
+        { label: '企业名称', prop: 'company', filter: true },
+        {
+          label: '类型',
+          prop: 'type',
+          format: (i) => {
+            const r = productType.find((f) => f.value === i);
+            if (r) return r.label;
+            return '';
+          },
+        },
+        { label: '所属领域', prop: 'field' },
+        { label: '联系人', prop: 'contacts' },
+        { label: '联系电话', prop: 'phone' },
+      ],
+      typeList: productType,
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...product(['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/product/detail');
+    },
+    toEdit({ data }) {
+      this.$router.push({ path: '/adminCenter/product/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>