فهرست منبع

专利申请修改

guhongwei 3 سال پیش
والد
کامیت
a8295cb289

+ 1 - 0
src/layout/apply/agent-1.vue

@@ -4,6 +4,7 @@
       <el-col :span="24" class="main">
         <van-col span="24" class="one">
           <van-form @submit="onSubmit">
+            <van-field v-model="form.status" name="status" label="数据状态" readonly style="display: none" />
             <van-field v-model="form.id" name="id" label="数据id" readonly style="display: none" />
             <van-field name="agent_url" label="文件" :rules="[{ required: true, message: '上传文件' }]">
               <template #input>

+ 72 - 0
src/layout/apply/check-3.vue

@@ -0,0 +1,72 @@
+<template>
+  <div id="check-3">
+    <van-row>
+      <van-col span="24" class="main">
+        <van-col span="24" class="one">
+          <van-form @submit="onSubmit">
+            <van-field v-model="form.id" name="id" label="数据id" readonly style="display: none" />
+            <van-field v-model="form.name" name="name" label="发明名称" readonly />
+            <van-field name="status" label="审核状态">
+              <template #input>
+                <van-radio-group v-model="form.status" direction="horizontal">
+                  <van-radio name="4">通过</van-radio>
+                  <van-radio name="-3">拒绝</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field
+              v-model="form.remark"
+              name="remark"
+              rows="1"
+              autosize
+              label="审核意见"
+              type="textarea"
+              maxlength="100"
+              placeholder="审核意见"
+              show-word-limit
+              :rules="[{ required: true, message: '审核意见' }]"
+            />
+            <div style="margin: 16px">
+              <van-button round block type="info" native-type="submit">提交</van-button>
+            </div>
+          </van-form>
+        </van-col>
+      </van-col>
+    </van-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'check-3',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {};
+  },
+  created() {},
+  methods: {
+    onSubmit(value) {
+      this.$emit('onSubmit', value);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 1 - 1
src/layout/apply/form-1.vue

@@ -94,7 +94,7 @@
               label="针对本发明技术方案,是否还有别的替代方案"
               placeholder="针对本发明技术方案,是否还有别的替代方案"
             />
-            <van-field name="check_url" label="审查文件" :rules="[{ required: true, message: '审查文件' }]">
+            <van-field name="check_url" label="审查文件" :rules="[{ required: false, message: '审查文件' }]">
               <template #input>
                 <van-uploader
                   :fileList="form.check_url"

+ 8 - 4
src/layout/apply/list-1.vue

@@ -21,7 +21,7 @@
             <van-button size="small" type="info" @click="toView(item)">查看信息</van-button>
             <van-button size="small" type="info" @click="toResult(item)">审核结果</van-button>
             <van-button size="small" type="info" @click="toAgain(item)" v-if="item.status == '-1' || item.status == '-2'">重申</van-button>
-            <van-button size="small" type="info" @click="toAgent(item)" v-if="item.status == '2'">申请文件</van-button>
+            <van-button size="small" type="info" @click="toAgent(item)" v-if="item.status == '2' || item.status == '-3'">申请文件</van-button>
             <van-button size="small" type="info" @click="toGzj(item)">国知局反馈信息</van-button>
           </van-col>
         </van-col>
@@ -66,10 +66,14 @@ export default {
     // 整理状态
     getStu(status) {
       if (status == '0') return '待审中';
-      else if (status == '1') return '机构审核通过,管理员待审中';
+      else if (status == '1') return '机构审批通过,待管理员审查受理';
       else if (status == '-1') return '机构审核未通过';
-      else if (status == '2') return '管理员审核通过';
-      else if (status == '-2') return '管理员审核未通过';
+      else if (status == '2') return '已通过管理员审查受理,请及时上传申请文件';
+      else if (status == '-2') return '未通过管理员审查受理';
+      else if (status == '3') return '文件已上传,待形式审查';
+      else if (status == '-3') return '未通过管理员形式审查';
+      else if (status == '4') return '通过管理员形式审查,待上传国知局';
+      else if (status == '5') return '已上传到国知局';
     },
   },
   computed: {

+ 8 - 4
src/layout/apply/list-2.vue

@@ -20,7 +20,7 @@
           <van-col span="24" class="btn">
             <van-button size="small" type="info" @click="toView(item)">查看信息</van-button>
             <van-button size="small" type="info" @click="download(item.check_url)">审查文件</van-button>
-            <van-button size="small" type="info" @click="toCheck(item)" v-if="item.status == '0'">申请审</van-button>
+            <van-button size="small" type="info" @click="toCheck(item)" v-if="item.status == '0'">申请审</van-button>
           </van-col>
         </van-col>
       </van-col>
@@ -52,10 +52,14 @@ export default {
     // 整理状态
     getStu(status) {
       if (status == '0') return '待审中';
-      else if (status == '1') return '机构审核通过,管理员待审中';
+      else if (status == '1') return '待审查受理';
       else if (status == '-1') return '机构审核未通过';
-      else if (status == '2') return '管理员审核通过';
-      else if (status == '-2') return '管理员审核未通过';
+      else if (status == '2') return '待上传申请文件';
+      else if (status == '-2') return '未通过审查受理';
+      else if (status == '3') return '文件已上传,待形式审查';
+      else if (status == '-3') return '未通过形式审查';
+      else if (status == '4') return '通过形式审查,待上传国知局';
+      else if (status == '5') return '已上传到国知局';
     },
     // 审查文件下载
     download(data) {

+ 20 - 6
src/layout/apply/list-3.vue

@@ -19,9 +19,11 @@
           </van-col>
           <van-col span="24" class="btn">
             <van-button size="small" type="info" @click="toView(item)">查看信息</van-button>
-            <van-button size="small" type="info" @click="download(item.check_url)">审查文件</van-button>
-            <van-button size="small" type="info" @click="toCheck(item)" v-if="item.status == '1'">申请审核</van-button>
-            <van-button size="small" type="info" @click="download(item.agent_url)" v-if="item.status == '2'">申请文件</van-button>
+            <!-- <van-button size="small" type="info" @click="download(item.check_url)">审查文件</van-button> -->
+            <van-button size="small" type="info" @click="toCheck(item)" v-if="item.status == '1'">审查受理</van-button>
+            <van-button size="small" type="info" @click="download(item.agent_url)" v-if="item.status == '3'">申请文件</van-button>
+            <van-button size="small" type="info" @click="formCheck(item)" v-if="item.status == '3'">形式审查</van-button>
+            <van-button size="small" type="info" @click="gzjSubmit(item)" v-if="item.status == '4'">确认上传</van-button>
           </van-col>
         </van-col>
       </van-col>
@@ -50,13 +52,25 @@ export default {
     toCheck(data) {
       this.$emit('toCheck', data);
     },
+    // 形式审查
+    formCheck(data) {
+      this.$emit('formCheck', data);
+    },
+    // 确认上传
+    gzjSubmit(data) {
+      this.$emit('gzjSubmit', data);
+    },
     // 整理状态
     getStu(status) {
       if (status == '0') return '待审中';
-      else if (status == '1') return '机构审核通过,管理员待审中';
+      else if (status == '1') return '待审查受理';
       else if (status == '-1') return '机构审核未通过';
-      else if (status == '2') return '管理员审核通过';
-      else if (status == '-2') return '管理员审核未通过';
+      else if (status == '2') return '待上传申请文件';
+      else if (status == '-2') return '未通过审查受理';
+      else if (status == '3') return '文件已上传,待形式审查';
+      else if (status == '-3') return '未通过形式审查';
+      else if (status == '4') return '通过形式审查,待上传国知局';
+      else if (status == '5') return '已上传到国知局';
     },
     // 审查文件下载
     download(data) {

+ 32 - 2
src/views/patent/admin/examine/patent.vue

@@ -2,12 +2,13 @@
   <div id="patent">
     <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" :rightArrow="false" :useNav="false">
       <template v-slot:info>
-        <list-3 :list="list" @toView="toView" @toCheck="toCheck"></list-3>
+        <list-3 :list="list" @toView="toView" @toCheck="toCheck" @formCheck="formCheck" @gzjSubmit="gzjSubmit"></list-3>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button>
       <info-1 :info="info" v-if="dialog.type == '1'"></info-1>
       <check-2 :form="form" v-if="dialog.type == '2'" @onSubmit="checkSubmit"></check-2>
+      <check-3 :form="form" v-if="dialog.type == '3'" @onSubmit="formSubmit"></check-3>
     </van-dialog>
   </div>
 </template>
@@ -16,6 +17,7 @@
 import list3 from '@/layout/apply/list-3.vue';
 import info1 from '@/layout/apply/info-1.vue';
 import check2 from '@/layout/apply/check-2.vue';
+import check3 from '@/layout/apply/check-3.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: patentapply } = createNamespacedHelpers('patentapply');
@@ -28,6 +30,7 @@ export default {
     list3,
     info1,
     check2,
+    check3,
   },
   data: function () {
     return {
@@ -80,7 +83,34 @@ export default {
         this.$toast({ type: `fail`, message: `${res.errmsg}` });
       }
     },
-
+    // 形式审查
+    formCheck(data) {
+      let dialog = { show: true, title: '形式审查', type: '3' };
+      this.$set(this, `dialog`, dialog);
+      this.$set(this, `form`, data);
+    },
+    async formSubmit(data) {
+      const res = await this.check(data);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `审核成功` });
+        this.search();
+        let dialog = { show: false, title: '形式审查', type: '3' };
+        this.$set(this, `dialog`, dialog);
+      } else {
+        this.$toast({ type: `fail`, message: `${res.errmsg}` });
+      }
+    },
+    // 确认上传
+    async gzjSubmit(data) {
+      data.status = '5';
+      const res = await this.check(data);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+        this.search();
+      } else {
+        this.$toast({ type: `fail`, message: `${res.errmsg}` });
+      }
+    },
     // 返回
     back() {
       this.$router.push({ path: '/patent/index' });

+ 131 - 0
src/views/patent/user/apply/apply/index copy.vue

@@ -0,0 +1,131 @@
+<template>
+  <div id="index">
+    <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" @add="add" :useNav="false">
+      <template v-slot:info>
+        <list-1 :list="list" @toView="toView" @toResult="toResult" @toAgain="toAgain" @toAgent="toAgent" @toGzj="toGzj"></list-1>
+      </template>
+    </admin-frame>
+    <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button>
+      <info-1 :info="info" v-if="dialog.type == '1'"></info-1>
+      <result-1 :info="info" v-else-if="dialog.type == '2'"></result-1>
+      <agent-1 :form="form" v-else-if="dialog.type == '3'" @onSubmit="agentSubmit"></agent-1>
+    </van-dialog>
+  </div>
+</template>
+
+<script>
+import list1 from '@/layout/apply/list-1.vue';
+import info1 from '@/layout/apply/info-1.vue';
+import result1 from '@/layout/apply/result-1.vue';
+import agent1 from '@/layout/apply/agent-1.vue';
+import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: patentapply } = createNamespacedHelpers('patentapply');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    adminFrame,
+    list1,
+    info1,
+    result1,
+    agent1,
+  },
+  data: function () {
+    return {
+      list: [],
+      limit: 5,
+      total: 0,
+      // 弹框
+      dialog: { show: false, title: '详细信息', type: '1' },
+      // 详细信息
+      info: {},
+      // 申请文件
+      form: {},
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...patentapply(['query', 'update']),
+    async search({ skip = 0, limit = this.limit, ...info } = {}) {
+      let res = await this.query({ skip, limit, user_id: this.user._id, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 查看信息
+    toView(data) {
+      data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
+      data.contact = JSON.stringify(data.contact.map((i) => i.name));
+      let dialog = { show: true, title: '详细信息', type: '1' };
+      this.$set(this, `dialog`, dialog);
+      this.$set(this, `info`, data);
+    },
+    // 查看结果
+    toResult(data) {
+      let dialog = { show: true, title: '审核结果', type: '2' };
+      this.$set(this, `dialog`, dialog);
+      this.$set(this, `info`, data);
+    },
+    // 重新申请
+    toAgain(data) {
+      this.$router.push({ path: '/patent/user/apply/apply/detail', query: { id: data.id } });
+    },
+    // 申请文件
+    toAgent(data) {
+      let dialog = { show: true, title: '申请文件', type: '3' };
+      this.$set(this, `dialog`, dialog);
+      this.$set(this, `form`, data);
+    },
+    // 提交申请文件
+    async agentSubmit(data) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作成功` });
+        this.search();
+        let dialog = { show: false, title: '申请文件', type: '3' };
+        this.$set(this, `dialog`, dialog);
+      } else {
+        this.$toast({ type: `success`, message: `${res.errmsg}` });
+      }
+    },
+    // 国知局反馈信息
+    toGzj(data) {
+      this.$router.push({ path: '/patent/user/apply/apply/gzjDetail', query: { name: data.name, create_number: data.create_number } });
+    },
+    // 添加
+    add() {
+      this.$router.push({ path: '/patent/user/apply/apply/detail' });
+    },
+    // 返回
+    back() {
+      this.$router.push({ path: '/patent/index' });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.dialog {
+  /deep/.van-dialog__content {
+    max-height: 350px;
+    overflow-y: auto;
+  }
+}
+</style>

+ 75 - 11
src/views/patent/user/apply/apply/index.vue

@@ -1,8 +1,24 @@
 <template>
   <div id="index">
-    <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" @add="add" :useNav="false">
+    <admin-frame
+      @search="search"
+      :limit="limit"
+      :total="total"
+      topType="2"
+      :usePage="active == '0' ? false : true"
+      @back="back"
+      :rightArrow="false"
+      :useNav="false"
+    >
       <template v-slot:info>
-        <list-1 :list="list" @toView="toView" @toResult="toResult" @toAgain="toAgain" @toAgent="toAgent" @toGzj="toGzj"></list-1>
+        <van-tabs v-model="active">
+          <van-tab title="审批单">
+            <form-1 :form="form" @onSubmit="onSubmit"></form-1>
+          </van-tab>
+          <van-tab title="已申请">
+            <list-1 :list="list" @toView="toView" @toResult="toResult" @toGzj="toGzj" @toAgain="toAgain" @toAgent="toAgent"></list-1>
+          </van-tab>
+        </van-tabs>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button>
@@ -14,6 +30,7 @@
 </template>
 
 <script>
+import form1 from '@/layout/apply/form-1.vue';
 import list1 from '@/layout/apply/list-1.vue';
 import info1 from '@/layout/apply/info-1.vue';
 import result1 from '@/layout/apply/result-1.vue';
@@ -26,6 +43,7 @@ export default {
   props: {},
   components: {
     adminFrame,
+    form1,
     list1,
     info1,
     result1,
@@ -33,22 +51,27 @@ export default {
   },
   data: function () {
     return {
+      active: 0,
+      // 列表
       list: [],
-      limit: 5,
+      limit: 4,
       total: 0,
+      // 专利申请
+      form: {
+        questions: {},
+      },
       // 弹框
       dialog: { show: false, title: '详细信息', type: '1' },
       // 详细信息
       info: {},
-      // 申请文件
-      form: {},
     };
   },
   async created() {
+    await this.searchOther();
     await this.search();
   },
   methods: {
-    ...patentapply(['query', 'update']),
+    ...patentapply(['query', 'fetch', 'create', 'update']),
     async search({ skip = 0, limit = this.limit, ...info } = {}) {
       let res = await this.query({ skip, limit, user_id: this.user._id, ...info });
       if (this.$checkRes(res)) {
@@ -56,6 +79,47 @@ export default {
         this.$set(this, `total`, res.total);
       }
     },
+    // 提交申请
+    async onSubmit({ data }) {
+      if (data.id) {
+        if (data.status == '-1') data.status = '0';
+        else if (data.status == '-2') data.status = '1';
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$toast({ type: `success`, message: `重新申请成功` });
+          this.searchOther();
+          this.search();
+        } else {
+          this.$toast({ type: `success`, message: `${res.errmsg}` });
+        }
+      } else {
+        // 是否需要机构,0:不需要,1:需要
+        if (data.is_mech == '0') data.status = '1';
+        else if (data.is_mech == '1') data.status = '0';
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          this.$toast({ type: `success`, message: `专利申请成功` });
+          this.searchOther();
+          this.search();
+        } else {
+          this.$toast({ type: `success`, message: `${res.errmsg}` });
+        }
+      }
+    },
+    // 查询form表单信息
+    searchOther() {
+      let data = {
+        user_id: this.user._id,
+        is_mech: '0',
+        apply_name: this.user.name,
+        inventor: [{ user_id: this.user._id, name: this.user.name }],
+        contact: [{ user_id: this.user._id, name: this.user.name }],
+        phone: this.user.phone,
+        email: this.user.email,
+        questions: {},
+      };
+      this.$set(this, `form`, data);
+    },
     // 查看信息
     toView(data) {
       data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
@@ -72,7 +136,9 @@ export default {
     },
     // 重新申请
     toAgain(data) {
-      this.$router.push({ path: '/patent/user/apply/apply/detail', query: { id: data.id } });
+      this.$set(this, `form`, data);
+      this.active = 0;
+      // this.$router.push({ path: '/patent/user/apply/apply/detail', query: { id: data.id } });
     },
     // 申请文件
     toAgent(data) {
@@ -82,6 +148,8 @@ export default {
     },
     // 提交申请文件
     async agentSubmit(data) {
+      if (data.status == '2') data.status = '3';
+      else if (data.status == '-3') data.status = '3';
       let res = await this.update(data);
       if (this.$checkRes(res)) {
         this.$toast({ type: `success`, message: `操作成功` });
@@ -96,10 +164,6 @@ export default {
     toGzj(data) {
       this.$router.push({ path: '/patent/user/apply/apply/gzjDetail', query: { name: data.name, create_number: data.create_number } });
     },
-    // 添加
-    add() {
-      this.$router.push({ path: '/patent/user/apply/apply/detail' });
-    },
     // 返回
     back() {
       this.$router.push({ path: '/patent/index' });