guhongwei 4 years ago
parent
commit
a7baad88c8

+ 4 - 0
src/store/index.js

@@ -50,6 +50,8 @@ import liveTechnicalColumn from './live/liveTechnicalColumn';
 import liveTechnicalNews from './live/liveTechnicalNews';
 // 网上调查
 import survey from './market/survey';
+// e专利
+import patent from './market/patent';
 
 Vue.use(Vuex);
 
@@ -104,5 +106,7 @@ export default new Vuex.Store({
     liveTechnicalNews,
     // 网上调查
     survey,
+    // e专利
+    patent,
   },
 });

+ 43 - 0
src/store/market/patent.js

@@ -0,0 +1,43 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  patentInfo: `/api/market/patent`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.patentInfo}`, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.patentInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.patentInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.patentInfo}/update/${id}`, data);
+    return res;
+  },
+
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.patentInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 1 - 0
src/views/market/detail/patentDetail.vue

@@ -132,6 +132,7 @@ export default {
           padding: 25% 0;
           font-size: 35px;
           font-weight: bold;
+          color: #ff0000;
         }
       }
     }

+ 11 - 5
src/views/market/index.vue

@@ -54,11 +54,9 @@ import business from './index/business.vue';
 import expert from './index/expert.vue';
 import roadshow from './index/roadshow.vue';
 import patent from './index/patent.vue';
-// 专利信息
-import { patentList } from '@/util/patent.js';
-
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: product } = createNamespacedHelpers('marketproduct');
+const { mapActions: patents } = createNamespacedHelpers('patent');
 const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
 const { mapActions: markettype } = createNamespacedHelpers('markettype');
 const { mapActions: newsroadshow } = createNamespacedHelpers('newsroadshow');
@@ -92,26 +90,34 @@ export default {
       // 项目路演
       roadshowList: [],
       // 专利
-      patentList: patentList,
+      patentList: [],
     };
   },
   created() {
-    // this.searchtype();
     this.search();
   },
   methods: {
     ...product({ newquery: 'newquery', productCreate: 'create', marketquery: 'marketquery' }),
+    ...patents({ patentQuery: 'query' }),
     ...expertsuser({ expertQuery: 'query', expertquery: 'expertquery' }),
     ...newsroadshow({ adshowQuery: 'query' }),
     async search() {
+      // 技术成果
       let res = await this.marketquery({ skip: 0, limit: 6, type: '1', status: '1' });
       if (this.$checkRes(res)) this.$set(this, `achieveList`, res.data);
+      // e专利
+      res = await this.patentQuery({ skip: 0, limit: 6 });
+      if (this.$checkRes(res)) this.$set(this, `patentList`, res.data);
+      // 科技需求
       res = await this.marketquery({ skip: 0, limit: 6, type: '0', status: '1' });
       if (this.$checkRes(res)) this.$set(this, `technologyList`, res.data);
+      // 在线服务
       res = await this.marketquery({ skip: 0, limit: 5, type: '2', status: '1' });
       if (this.$checkRes(res)) this.$set(this, `businessList`, res.data);
+      // 专家智库
       res = await this.expertquery({ skip: 0, limit: 8 });
       if (this.$checkRes(res)) this.$set(this, `expertList`, res.data);
+      // 项目路演
       res = await this.adshowQuery({ skip: 0 });
       if (this.$checkRes(res)) {
         this.$set(this, `roadshowList`, _.uniqBy(res.data, 'title'));

+ 9 - 7
src/views/market/marketlists.vue

@@ -139,10 +139,9 @@ import busiDetail from './detail/busiDetail.vue';
 import expeDetail from './detail/expeDetail.vue';
 import techDetail from './detail/techDetail.vue';
 import roadDetail from './detail/roadDetail.vue';
-// 专利信息
-import { patentList } from '@/util/patent.js';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: product } = createNamespacedHelpers('marketproduct');
+const { mapActions: patents } = createNamespacedHelpers('patent');
 const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
 const { mapActions: transaction } = createNamespacedHelpers('transaction');
 const { mapActions: markettype } = createNamespacedHelpers('markettype');
@@ -197,8 +196,8 @@ export default {
       // 其他单位列表
       dropList: [],
       // e专利
-      patentList: patentList,
-      patentTotal: 5,
+      patentList: [],
+      patentTotal: 0,
       patentDetail: {},
       // 商务服务
       businessList: [],
@@ -231,6 +230,7 @@ export default {
   },
   methods: {
     ...product({ productList: 'newquery', productFetch: 'newfetch' }),
+    ...patents({ patentQuery: 'query', patentFetch: 'fetch' }),
     ...expertsuser({ expertsuserList: 'query', expertsuserFetch: 'fetch' }),
     ...transaction({ transactioncreate: 'create', transactionfetch: 'fetch' }),
     ...markettype({ markettypeList: 'query' }),
@@ -276,7 +276,9 @@ export default {
         this.$set(this, `achieveList`, res.data);
         this.$set(this, `achieveTotal`, res.total);
       } else if (columnName == 'e专利') {
-        console.log('e专利');
+        let res = await this.patentQuery({ skip, limit, ...info });
+        if (this.$checkRes(res)) this.$set(this, `patentList`, res.data);
+        this.$set(this, `patentTotal`, res.total);
       } else if (columnName == '商务服务') {
         let res = await this.productList({ skip, type: '2', status: '1', ...info });
         if (this.$checkRes(res)) this.$set(this, `businessList`, res.data);
@@ -310,8 +312,8 @@ export default {
         let res = await this.productFetch(id);
         if (this.$checkRes(res)) this.$set(this, `achiDetail`, res.data);
       } else if (columnName == 'e专利') {
-        let res = this.patentList.find(i => i.id == id);
-        if (res) this.$set(this, `patentDetail`, res);
+        let res = await this.patentFetch(id);
+        if (this.$checkRes(res)) this.$set(this, `patentDetail`, res.data);
       } else if (columnName == '商务服务') {
         let res = await this.productFetch(id);
         if (this.$checkRes(res)) this.$set(this, `busiDetail`, res.data);

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

@@ -54,6 +54,7 @@ import monitor from './monitor/index.vue';
 import heads from '@/layout/userCenter/heads.vue';
 import foot from '@/layout/live/foot.vue';
 import scienceNews from './scienceNews/index.vue';
+import patent from './patent/index.vue';
 
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
@@ -86,6 +87,7 @@ export default {
     channel,
     monitor,
     scienceNews,
+    patent,
   },
   data: function() {
     return {

+ 203 - 0
src/views/superAdminCenter/patent/index.vue

@@ -0,0 +1,203 @@
+<template>
+  <div id="index">
+    <el-col :span="24">
+      <el-col :span="24" class="add" style="text-align:right;padding: 10px 20px;">
+        <el-button size="mini" type="primary" @click="toAdd" icon="el-icon-plus">添加{{ theme }}</el-button>
+      </el-col>
+      <el-col :span="24" class="main">
+        <data-table :fields="fields" :opera="opera" :data="list" :total="total" @edit="toEdit" @delete="toDelete" @query="search"></data-table>
+      </el-col>
+      <el-dialog :title="theme" width="60%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
+        <el-form ref="form" :rules="rules" :model="form" label-width="120px">
+          <el-form-item label="申请号" prop="app_number">
+            <el-input v-model="form.app_number" placeholder="请输入申请号"></el-input>
+          </el-form-item>
+          <el-form-item label="申请日" prop="create_date">
+            <el-date-picker v-model="form.create_date" placeholder="申请日" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"> </el-date-picker>
+          </el-form-item>
+          <el-form-item label="标题" prop="name">
+            <el-input v-model="form.name" placeholder="请输入标题"></el-input>
+          </el-form-item>
+          <el-form-item label="公开(公告号)" prop="number">
+            <el-input v-model="form.number" placeholder="请输入公开(公告号)"></el-input>
+          </el-form-item>
+          <el-form-item label="公开(公告)日" prop="complete_date">
+            <el-date-picker type="date" placeholder="公开(公告)日" value-format="yyyy-MM-dd" format="yyyy-MM-dd" v-model="form.complete_date"></el-date-picker>
+          </el-form-item>
+          <el-form-item label="发明人" prop="inventor">
+            <el-input v-model="form.inventor" placeholder="请输入发明人"></el-input>
+          </el-form-item>
+          <el-form-item label="发明人地址" prop="inventor_address">
+            <el-input v-model="form.inventor_address" placeholder="请输入发明人地址"></el-input>
+          </el-form-item>
+          <el-form-item label="专利有效性" prop="effective_date">
+            <el-input v-model="form.effective_date" placeholder="请输入专利有效性"></el-input>
+          </el-form-item>
+          <el-form-item label="代理人" prop="agency_person">
+            <el-input v-model="form.agency_person" placeholder="请输入代理人"></el-input>
+          </el-form-item>
+          <el-form-item label="代理机构" prop="agency">
+            <el-input v-model="form.agency" placeholder="请输入代理机构"></el-input>
+          </el-form-item>
+          <el-form-item label="摘要" prop="content">
+            <el-input
+              v-model="form.content"
+              type="textarea"
+              maxlength="500"
+              :autosize="{ minRows: 8, maxRows: 9 }"
+              show-word-limit
+              placeholder="请输入摘要"
+            ></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="onSubmit('form')">提交</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import dataTable from '@/components/data-table.vue';
+const { mapActions: patent } = createNamespacedHelpers('patent');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    dataTable,
+  },
+  data: function() {
+    return {
+      theme: 'e专利',
+      opera: [
+        {
+          label: '修改',
+          icon: 'el-icon-edit',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          icon: 'el-icon-delete',
+          method: 'delete',
+        },
+      ],
+      fields: [
+        { label: '申请号', prop: 'app_number', filter: 'input' },
+        { label: '专利号', prop: 'number', filter: 'input' },
+        { label: '名称', prop: 'name', filter: 'input' },
+        { label: '发明人', prop: 'inventor', filter: 'input' },
+        { label: '专利有效性', prop: 'effective_date' },
+        { label: '专利(公告)日', prop: 'complete_date' },
+      ],
+      list: [],
+      total: 0,
+      dialog: false,
+      // 添加信息
+      form: {},
+      rules: {
+        app_number: [{ required: true, message: '请输入专利号', trigger: 'blur' }],
+        create_date: [{ type: 'string', required: true, message: '请选择申请日期', trigger: 'change' }],
+        name: [{ required: true, message: '请输入专利名称', trigger: 'blur' }],
+        number: [{ required: true, message: '请输入专利号', trigger: 'blur' }],
+        complete_date: [{ type: 'string', required: true, message: '请选择专利(公告)日', trigger: 'change' }],
+        inventor: [{ required: true, message: '请输入发明人', trigger: 'blur' }],
+        inventor_address: [{ required: false, message: '请输入发明人地址', trigger: 'blur' }],
+        effective_date: [{ required: true, message: '请输入专利有效性', trigger: 'blur' }],
+        agency_person: [{ required: true, message: '请输入代理人', trigger: 'blur' }],
+        agency: [{ required: true, message: '请输入代理机构', trigger: 'blur' }],
+        content: [{ required: true, message: '请输入摘要', trigger: 'blur' }],
+      },
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...patent(['query', 'fetch', 'update', 'create', 'delete']),
+    // 列表
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let arr = await this.query({ skip, limit, ...info });
+      this.$set(this, `list`, arr.data);
+      this.$set(this, `total`, arr.total);
+    },
+    // 添加
+    toAdd() {
+      this.dialog = true;
+      this.form = {};
+    },
+    // 提交
+    onSubmit(formName) {
+      this.$refs[formName].validate(async valid => {
+        if (valid) {
+          let data = this.form;
+          if (data.id) {
+            let res = await this.update(data);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '修改信息成功',
+                type: 'success',
+              });
+              this.handleClose();
+            }
+          } else {
+            let res = await this.create(this.form);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '添加信息成功',
+                type: 'success',
+              });
+              this.handleClose();
+            }
+          }
+          this.search();
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 修改
+    toEdit({ data }) {
+      this.dialog = true;
+      this.$set(this, `form`, data);
+    },
+    // 删除
+    async toDelete({ data }) {
+      this.$confirm('您确定要删除此信息吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(async () => {
+          let res = await this.delete(data.id);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: '删除信息成功',
+              type: 'success',
+            });
+            this.search();
+          }
+        })
+        .catch(() => {});
+    },
+    // 取消
+    handleClose() {
+      this.form = {};
+      this.dialog = false;
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>