Parcourir la source

吉林专利市场更新

guhongwei il y a 3 ans
Parent
commit
fa73659683
52 fichiers modifiés avec 643 ajouts et 761 suppressions
  1. BIN
      public/专利数据模板.xlsx
  2. 13 5
      src/layout/analysis/result-1.vue
  3. 9 112
      src/layout/apply/form-1.vue
  4. 13 5
      src/layout/apply/result-1.vue
  5. 13 11
      src/layout/assessment/form-1.vue
  6. 13 5
      src/layout/assessment/result-1.vue
  7. 52 46
      src/layout/patentInfo/form-1.vue
  8. 1 0
      src/layout/patentInfo/info-1.vue
  9. 1 0
      src/layout/patentInfo/list-1.vue
  10. 0 20
      src/layout/patentInfo/list-2.vue
  11. 1 1
      src/layout/patentInfo/search-1.vue
  12. 91 0
      src/layout/patentInfo/speed-1.vue
  13. 1 0
      src/layout/question/form-1.vue
  14. 3 13
      src/layout/question/info-1.vue
  15. 36 0
      src/layout/question/list-1.vue
  16. 0 113
      src/layout/question/list-2.vue
  17. 1 0
      src/layout/question/upload-1.vue
  18. 1 1
      src/layout/safe/form-1.vue
  19. 17 2
      src/layout/safe/list-1.vue
  20. 0 112
      src/layout/safe/list-2.vue
  21. 13 5
      src/layout/safe/result-1.vue
  22. 10 3
      src/views/account/agentmech/index.vue
  23. 5 1
      src/views/account/agentmech/parts/list-1.vue
  24. 10 3
      src/views/account/answertea/index.vue
  25. 5 1
      src/views/account/answertea/parts/list-1.vue
  26. 1 1
      src/views/account/mechanism/detail.vue
  27. 11 4
      src/views/account/mechanism/index.vue
  28. 1 1
      src/views/account/mechanism/parts/detail_1.vue
  29. 7 1
      src/views/account/mechanism/parts/list_1.vue
  30. 22 12
      src/views/account/users/detail.vue
  31. 27 13
      src/views/account/users/index.vue
  32. 126 0
      src/views/account/users/parts/form-1.vue
  33. 10 6
      src/views/account/users/parts/personal-1.vue
  34. 0 79
      src/views/account/users/parts/personal-detail.vue
  35. 1 1
      src/views/patent/admin/adminBtn.vue
  36. 0 142
      src/views/patent/admin/examine/patent copy.vue
  37. 0 2
      src/views/patent/admin/examine/patent.vue
  38. 3 3
      src/views/patent/admin/message/question.vue
  39. 0 1
      src/views/patent/admin/patent/assessment.vue
  40. 1 1
      src/views/patent/admin/patent/detail.vue
  41. 35 1
      src/views/patent/admin/patent/import.vue
  42. 33 4
      src/views/patent/admin/patent/index.vue
  43. 3 4
      src/views/patent/admin/safeg/index.vue
  44. 0 2
      src/views/patent/agentmech/examine/patent.vue
  45. 3 3
      src/views/patent/answertea/message/question.vue
  46. 0 2
      src/views/patent/mech/examine/patent.vue
  47. 4 5
      src/views/patent/mech/patent/information/index.vue
  48. 34 4
      src/views/patent/mech/patent/navigation/index.vue
  49. 0 2
      src/views/patent/user/apply/apply/index.vue
  50. 0 1
      src/views/patent/user/apply/assessment/index.vue
  51. 12 5
      src/views/patent/user/chat/index.vue
  52. 0 2
      src/views/patent/user/patent/safe/index.vue

BIN
public/专利数据模板.xlsx


+ 13 - 5
src/layout/analysis/result-1.vue

@@ -3,7 +3,7 @@
     <van-row>
       <van-col span="24" class="main">
         <van-col span="24" class="one">
-          <van-steps direction="vertical" :active="info.status">
+          <van-steps direction="vertical" :active="step">
             <van-step v-for="(item, index) in info.record" :key="index">
               <p>{{ item.word }}</p>
               <p>审核时间:{{ item.time }}</p>
@@ -25,10 +25,16 @@ export default {
   },
   components: {},
   data: function () {
-    return {};
+    return {
+      step: 0,
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    searchStep(data) {
+      this.$set(this, `step`, data.length - 1);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -36,10 +42,12 @@ export default {
     return { title: this.$route.meta.title };
   },
   watch: {
-    test: {
+    info: {
       deep: true,
       immediate: true,
-      handler(val) {},
+      handler(val) {
+        if (val) this.searchStep(val.record);
+      },
     },
   },
 };

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

@@ -28,32 +28,14 @@
                 </van-radio-group>
               </template>
             </van-field>
-            <van-col span="24" class="inventor">
-              <van-col span="24" class="txt">发明人</van-col>
-              <van-col span="24" class="btn">
-                <van-button type="info" size="small" @click.prevent="toSelect('inventor')">选择发明人</van-button>
-                <van-button type="info" size="small" @click.prevent="toAdd('inventor')">添加发明人</van-button>
-              </van-col>
-              <van-col span="24" class="list">
-                <van-col span="12" class="list_1" v-for="(item, index) in form.inventor" :key="index">
-                  <p class="textOver">{{ index + 1 }}-{{ item.name }}</p>
-                  <van-button type="danger" size="mini" @click.prevent="delInv(item, 'inventor')">删除</van-button>
-                </van-col>
-              </van-col>
-            </van-col>
-            <van-col span="24" class="inventor">
-              <van-col span="24" class="txt">技术联系人</van-col>
-              <van-col span="24" class="btn">
-                <van-button type="info" size="small" @click.prevent="toSelect('contact')">选择技术联系人</van-button>
-                <van-button type="info" size="small" @click.prevent="toAdd('contact')">添加技术联系人</van-button>
-              </van-col>
-              <van-col span="24" class="list">
-                <van-col span="12" class="list_1" v-for="(item, index) in form.contact" :key="index">
-                  <p class="textOver">{{ index + 1 }}-{{ item.name }}</p>
-                  <van-button type="danger" size="mini" @click.prevent="delInv(item, 'contact')">删除</van-button>
-                </van-col>
-              </van-col>
-            </van-col>
+            <van-field v-model="form.inventor" name="inventor" label="发明人" placeholder="发明人" :rules="[{ required: true, message: '请填写发明人' }]" />
+            <van-field
+              v-model="form.contact"
+              name="contact"
+              label="技术联系人"
+              placeholder="技术联系人"
+              :rules="[{ required: true, message: '请填写技术联系人' }]"
+            />
             <van-field v-model="form.phone" name="phone" label="联系电话" placeholder="联系电话" :rules="[{ required: true, message: '请填写联系电话' }]" />
             <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="电子邮箱" :rules="[{ required: true, message: '请填写电子邮箱' }]" />
             <van-field name="check_url" label="审查文件" :rules="[{ required: true, message: '审查文件' }]">
@@ -82,42 +64,6 @@
         </van-col>
       </van-col>
     </van-row>
-    <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
-      <van-col span="24" class="one" v-if="dialog.type == '1'">
-        <van-col span="24" class="one_1">
-          <van-search v-model="searchName" show-action placeholder="请输入联系电话" @search="searchUser">
-            <template #action>
-              <div @click="searchUser">搜索</div>
-            </template>
-          </van-search>
-        </van-col>
-        <van-col span="24" class="one_2">
-          <van-col span="24" class="list" v-for="(item, index) in list" :key="index">
-            <van-col span="24" class="name"> {{ item.name }} </van-col>
-            <van-col span="24" class="other">
-              <van-col span="24" class="otherInfo">
-                联系电话:<span>{{ item.phone }}</span>
-              </van-col>
-            </van-col>
-            <van-col span="24" class="btn">
-              <van-button type="info" size="mini" @click="conFirm(item)">确认选择</van-button>
-            </van-col>
-          </van-col>
-          <van-col span="24" class="page">
-            <page @search="searchUser" :limit="limit" :total="total"></page>
-          </van-col>
-        </van-col>
-      </van-col>
-      <van-col span="24" class="two" v-else-if="dialog.type == '2'">
-        <van-form @submit="userSubmit">
-          <van-field v-model="addForm.name" name="name" label="姓名" placeholder="姓名" :rules="[{ required: true, message: '姓名' }]" />
-          <van-field v-model="addForm.phone" name="phone" label="联系电话" placeholder="联系电话" :rules="[{ required: true, message: '联系电话' }]" />
-          <van-col span="24" class="btn">
-            <van-button size="small" type="info" native-type="submit">确认添加</van-button>
-          </van-col>
-        </van-form>
-      </van-col>
-    </van-dialog>
   </div>
 </template>
 
@@ -142,22 +88,11 @@ export default {
       // 机构
       oneShow: false,
       mechList: [],
-      // 发明人&技术联系人
-      dialog: { show: false, titla: '查询用户', type: '1' },
-      type: '',
-      // 查询
-      searchName: '',
-      list: [],
-      limit: 3,
-      total: 0,
-      // 添加发明人&技术联系人
-      addForm: {},
     };
   },
 
   async created() {
     await this.searchOther();
-    await this.searchUser();
   },
   methods: {
     ...adminLogin({ adminQuery: 'query' }),
@@ -189,43 +124,6 @@ export default {
       this.$set(this.form, `mech_name`, values.name);
       this.oneShow = false;
     },
-    // 查询用户
-    async searchUser({ skip = 0, limit = this.limit, ...info } = {}) {
-      if (this.searchName) info.phone = this.searchName;
-      let res = await this.personalQuery({ skip, limit, code: this.user.code, ...info });
-      if (this.$checkRes(res)) {
-        this.$set(this, `list`, res.data);
-        this.$set(this, `total`, res.total);
-      }
-    },
-    // 发明人,技术联系人
-    toSelect(type) {
-      this.$set(this, `type`, type);
-      let dialog = { show: true, title: '查询用户', type: '1' };
-      this.$set(this, `dialog`, dialog);
-    },
-    // 确认选择
-    conFirm(data) {
-      let user = { user_id: data.id, name: data.name };
-      if (this.type == 'inventor') this.form.inventor.push(user);
-      else if (this.type == 'contact') this.form.contact.push(user);
-      this.dialog = { show: false, title: '查询用户', type: '1' };
-    },
-    // 添加发明人&技术联系人
-    toAdd(type) {
-      this.$set(this, `type`, type);
-      this.dialog = { show: true, title: '添加用户', type: '2' };
-    },
-    // 确认添加
-    userSubmit(value) {
-      if (this.type == 'inventor') this.form.inventor.push(value);
-      else if (this.type == 'contact') this.form.contact.push(value);
-      this.dialog = { show: false, title: '添加用户', type: '2' };
-    },
-    // 删除发明人&技术联系人
-    delInv(data, type) {
-      this.form[type].splice(this.form[type].indexOf(data), 1);
-    },
     // 查询其他信息
     async searchOther() {
       // 查询管理员信息
@@ -239,8 +137,7 @@ export default {
         user_id: this.user.id,
         user_name: this.user.name,
         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 }],
+        contact: this.user.name,
         phone: this.user.phone,
         email: this.user.email,
         questions: {},

+ 13 - 5
src/layout/apply/result-1.vue

@@ -3,7 +3,7 @@
     <van-row>
       <van-col span="24" class="main">
         <van-col span="24" class="one">
-          <van-steps direction="vertical" :active="info.status">
+          <van-steps direction="vertical" :active="step">
             <van-step v-for="(item, index) in info.record" :key="index">
               <p>{{ item.word }}</p>
               <p>审核时间:{{ item.time }}</p>
@@ -25,10 +25,16 @@ export default {
   },
   components: {},
   data: function () {
-    return {};
+    return {
+      step: 0,
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    searchStep(data) {
+      this.$set(this, `step`, data.length - 1);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -36,10 +42,12 @@ export default {
     return { title: this.$route.meta.title };
   },
   watch: {
-    test: {
+    info: {
       deep: true,
       immediate: true,
-      handler(val) {},
+      handler(val) {
+        if (val) this.searchStep(val.record);
+      },
     },
   },
 };

+ 13 - 11
src/layout/assessment/form-1.vue

@@ -14,7 +14,7 @@
             <van-field v-model="form.patent_id" name="patent_id" label="专利id" style="display: none" />
             <van-field v-model="form.create_number" name="create_number" label="申请号" readonly />
             <van-field v-model="form.patent_name" name="patent_name" label="专利名称" readonly />
-            <van-field v-model="form.inventors" name="inventor" label="发明人" readonly />
+            <van-field v-model="form.inventor" name="inventor" label="发明人" readonly />
             <van-field v-model="form.type" name="type" label="专利类型" readonly />
             <van-field v-model="form.contact" name="contact" label="联系人" placeholder="请输入联系人" :rules="[{ required: true, message: '请输入联系人' }]" />
             <van-field
@@ -39,6 +39,7 @@
               placeholder="请输入应用领域"
               type="textarea"
               autosize
+              rows="1"
               :rules="[{ required: true, message: '请输入应用领域' }]"
             />
             <van-field
@@ -48,11 +49,12 @@
               placeholder="请输入技术说明"
               type="textarea"
               autosize
+              rows="1"
               :rules="[{ required: true, message: '请输入技术说明' }]"
             />
-            <van-field v-model="form.shared_value" name="shared_value" label="合享价值度" type="textarea" autosize readonly />
-            <van-field v-model="form.techol_stable" name="techol_stable" label="技术稳定性" type="textarea" autosize readonly />
-            <van-field v-model="form.techol_advanced" name="techol_advanced" label="技术先进性" type="textarea" autosize readonly />
+            <van-field v-model="form.shared_value" name="shared_value" label="合享价值度" readonly />
+            <van-field v-model="form.techol_stable" name="techol_stable" label="技术稳定性" readonly />
+            <van-field v-model="form.techol_advanced" name="techol_advanced" label="技术先进性" readonly />
             <van-col span="24" class="btn">
               <van-button type="info" size="small" native-type="submit">提交申请</van-button>
             </van-col>
@@ -81,9 +83,7 @@ export default {
   data: function () {
     return {
       adminInfo: {},
-      form: {
-        inventor: [],
-      },
+      form: {},
       // 弹框
       dialog: { show: false, title: '查询专利', type: '1' },
     };
@@ -104,7 +104,7 @@ export default {
           let res = await this.create(data);
           if (this.$checkRes(res)) {
             this.$toast({ type: `success`, message: `操作完成` });
-            this.form = { inventor: [] };
+            this.form = {};
           }
         }
       }
@@ -123,7 +123,6 @@ export default {
         patent_id: value.id,
         create_number: value.create_number,
         patent_name: value.name,
-        inventors: JSON.stringify(value.inventor.map((i) => i.name)),
         inventor: value.inventor,
         type: value.type,
         contact: this.user.name,
@@ -146,7 +145,10 @@ export default {
     // 查询专利信息
     async searchPatent() {
       let res = await this.patentFetch(this.patent_id);
-      if (this.$checkRes(res)) this.conPatent(res.data);
+      if (this.$checkRes(res)) {
+        this.searchOther();
+        this.conPatent(res.data);
+      }
     },
   },
   computed: {
@@ -160,7 +162,7 @@ export default {
       deep: true,
       immediate: true,
       handler(val) {
-        this.searchPatent();
+        if (val) this.searchPatent();
       },
     },
   },

+ 13 - 5
src/layout/assessment/result-1.vue

@@ -3,7 +3,7 @@
     <van-row>
       <van-col span="24" class="main">
         <van-col span="24" class="one">
-          <van-steps direction="vertical" :active="info.status">
+          <van-steps direction="vertical" :active="step">
             <van-step v-for="(item, index) in info.record" :key="index">
               <p>{{ item.word }}</p>
               <p>审核时间:{{ item.time }}</p>
@@ -25,10 +25,16 @@ export default {
   },
   components: {},
   data: function () {
-    return {};
+    return {
+      step: 0,
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    searchStep(data) {
+      this.$set(this, `step`, data.length - 1);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -36,10 +42,12 @@ export default {
     return { title: this.$route.meta.title };
   },
   watch: {
-    test: {
+    info: {
       deep: true,
       immediate: true,
-      handler(val) {},
+      handler(val) {
+        if (val) this.searchStep(val.record);
+      },
     },
   },
 };

+ 52 - 46
src/layout/patentInfo/form-1.vue

@@ -3,7 +3,7 @@
     <van-row>
       <van-col span="24" class="main">
         <van-col span="24" class="one">
-          <van-form @submit="onSubmit" label-width="6em">
+          <van-form @submit="onSubmit" label-width="7em">
             <van-field
               v-model="form.create_number"
               name="create_number"
@@ -34,18 +34,16 @@
               @click="selectDate('success_date')"
               :rules="[{ required: false, message: '公开(公告)日' }]"
             />
-            <van-col span="24" class="inventor">
-              <van-col span="24" class="txt">发明人</van-col>
-              <van-col span="24" class="btn">
-                <van-button type="info" size="small" @click.prevent="toSelect('inventor')">选择发明人</van-button>
-              </van-col>
-              <van-col span="24" class="list">
-                <van-col span="12" class="list_1" v-for="(item, index) in form.inventor" :key="index">
-                  <p class="textOver">{{ index + 1 }}-{{ item.name }}</p>
-                  <van-button type="danger" size="mini" @click.prevent="delInv(item, 'inventor')">删除</van-button>
-                </van-col>
-              </van-col>
-            </van-col>
+            <van-field
+              v-model="form.inventor"
+              name="inventor"
+              label="发明人"
+              placeholder="请输入发明人"
+              type="textarea"
+              autosize
+              rows="1"
+              :rules="[{ required: true, message: '请输入发明人' }]"
+            />
             <van-field
               v-model="form.agent"
               name="agent"
@@ -99,7 +97,6 @@
               <template #input>
                 <van-radio-group v-model="form.type" direction="horizontal">
                   <van-radio name="发明申请">发明申请</van-radio>
-                  <van-radio name="发明授权">发明授权</van-radio>
                   <van-radio name="实用新型">实用新型</van-radio>
                   <van-radio name="外观设计">外观设计</van-radio>
                   <van-radio name="PCT国际申请号">PCT国际申请号</van-radio>
@@ -316,6 +313,18 @@
             />
             <!-- 选择日期公用弹框 -->
             <van-calendar v-model="calendarShow" @confirm="calendarCon" :min-date="minDate" :max-date="maxDate" />
+            <van-col span="24" class="inventor">
+              <van-col span="24" class="txt">专利关联用户</van-col>
+              <van-col span="24" class="btn">
+                <van-button type="info" size="small" @click.prevent="toSelect('user_id')">选择用户</van-button>
+              </van-col>
+              <van-col span="24" class="list">
+                <van-col span="12" class="list_1" v-for="(item, index) in form.user_id" :key="index">
+                  <p class="textOver">{{ index + 1 }}-{{ item.name }}</p>
+                  <van-button type="danger" size="mini" @click.prevent="delInv(item, 'user_id')">删除</van-button>
+                </van-col>
+              </van-col>
+            </van-col>
             <van-col span="24" class="btn">
               <van-button type="info" size="small" native-type="submit">提交信息</van-button>
             </van-col>
@@ -324,7 +333,7 @@
       </van-col>
     </van-row>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
-      <van-col span="24" class="one" v-if="dialog.type == '1'">
+      <van-col span="24" class="one">
         <van-col span="24" class="one_1">
           <van-search v-model="searchName" show-action placeholder="请输入联系电话" @search="searchUser">
             <template #action>
@@ -355,8 +364,8 @@
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: personal } = createNamespacedHelpers('personal');
 const { mapActions: upload } = createNamespacedHelpers('upload');
+const { mapActions: personal } = createNamespacedHelpers('personal');
 var moment = require('moment');
 export default {
   name: 'form-1',
@@ -370,16 +379,13 @@ export default {
       maxDate: new Date(2050, 10, 1),
       calendarShow: false,
       calendar_type: '',
-      // 发明人
-      dialog: { show: false, titla: '查询用户', type: '1' },
+      // 关联用户
       type: '',
-      // 查询
       searchName: '',
       list: [],
       limit: 3,
       total: 0,
-      // 添加发明人
-      addForm: {},
+      dialog: { show: false, titla: '查询用户' },
     };
   },
   async created() {
@@ -391,30 +397,6 @@ export default {
     onSubmit(value) {
       if (value) this.$emit('onSubmit', { data: this.form });
     },
-    // 查询用户
-    async searchUser({ skip = 0, limit = this.limit, ...info } = {}) {
-      if (this.searchName) info.phone = this.searchName;
-      let res = await this.personalQuery({ skip, limit, ...info });
-      if (this.$checkRes(res)) {
-        this.$set(this, `list`, res.data);
-        this.$set(this, `total`, res.total);
-      }
-    },
-    // 发明人,技术联系人
-    toSelect(type) {
-      this.$set(this, `type`, type);
-      this.dialog = { show: true, title: '查询用户', type: '1' };
-    },
-    // 确认选择
-    conFirm(data) {
-      let user = { user_id: data.id, name: data.name };
-      if (this.type == 'inventor') this.form[this.type].push(user);
-      this.dialog = { show: false, title: '查询用户', type: '1' };
-    },
-    // 删除发明人&技术联系人
-    delInv(data, type) {
-      this.form[type].splice(this.form[type].indexOf(data), 1);
-    },
     // 打开选择日期弹框
     selectDate(type) {
       this.$set(this, `calendar_type`, type);
@@ -436,6 +418,30 @@ export default {
       const index = this.form[model].findIndex((f) => _.isEqual(f, file));
       this.form[model].splice(index, 1);
     },
+    // 关联用户
+    toSelect(type) {
+      this.$set(this, `type`, type);
+      this.dialog = { show: true, titla: '查询用户' };
+    },
+    // 确认选择用户
+    conFirm(data) {
+      let user = { user_id: data.id, name: data.name };
+      if (this.type == 'user_id') this.form[this.type].push(user);
+      this.dialog = { show: false, title: '查询用户' };
+    },
+    // 删除关联用户
+    delInv(data, type) {
+      this.form[type].splice(this.form[type].indexOf(data), 1);
+    },
+    // 查询用户
+    async searchUser({ skip = 0, limit = this.limit, ...info } = {}) {
+      if (this.searchName) info.phone = this.searchName;
+      let res = await this.personalQuery({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
   },
   computed: {
     ...mapState(['user']),
@@ -463,7 +469,7 @@ export default {
     .inventor {
       background-color: #ffffff;
       .txt {
-        padding: 5px 0px 0 18px;
+        padding: 5px 0px 0 15px;
         font-size: 14px;
         color: #666;
       }

+ 1 - 0
src/layout/patentInfo/info-1.vue

@@ -69,6 +69,7 @@ export default {
     searchImg(data) {
       if (data && data.length > 0) {
         var url = data.map((item) => item.url)[0];
+        console.log(url);
         this.$set(this, `img_url`, url);
       } else {
         var url = require('@/assets/fmzl.jpg');

+ 1 - 0
src/layout/patentInfo/list-1.vue

@@ -18,6 +18,7 @@
             <van-button type="info" size="small" @click="toView(item)">详细信息</van-button>
             <template v-if="user.role == '1'">
               <van-button type="info" size="small" @click="toEdit(item)">修改信息</van-button>
+              <van-button type="danger" size="small" @click="toDel(item)">删除信息</van-button>
             </template>
             <template v-else-if="user.role == '3'">
               <van-button type="info" size="small" @click="toAssess(item)" v-if="item.term != '失效'">价值评估</van-button>

+ 0 - 20
src/layout/patentInfo/list-2.vue

@@ -38,26 +38,6 @@ export default {
     toView(data) {
       this.$emit('toView', data);
     },
-    // 修改信息
-    toEdit(data) {
-      this.$emit('toEdit', data);
-    },
-    // 刪除信息
-    toDel(data) {
-      this.$emit('toDel', data);
-    },
-    // 国知局反馈信息
-    toGzj(data) {
-      this.$router.push({ path: '/patent/user/apply/apply/gzjDetail', query: { name: data.name, create_number: data.create_number } });
-    },
-    // 价值评估
-    toAssess(data) {
-      this.$router.push({ path: '/patent/user/apply/assessment', query: { id: data.id } });
-    },
-    // 专利交易
-    toTrans(data) {
-      this.$router.push({ path: '/patent/user/patent/information/trans_create', query: { id: data.id } });
-    },
     // 过滤时间
     getDate(val) {
       let newDate = moment(val).format('YYYY-MM-DD');

+ 1 - 1
src/layout/patentInfo/search-1.vue

@@ -38,7 +38,7 @@
                 </van-radio-group>
               </template>
             </van-field>
-            <van-field v-model="searchForm.single_inventor" name="single_inventor" label="发明人" placeholder="请输入发明人" />
+            <van-field v-model="searchForm.inventor" name="inventor" label="发明人" placeholder="请输入发明人" />
             <van-field v-model="searchForm.first_inventor" name="first_inventor" label="第一发明人" placeholder="请输入第一发明人" />
             <van-field v-model="searchForm.apply_city" name="apply_city" label="申请人地市" placeholder="请输入申请人地市" />
             <van-field

+ 91 - 0
src/layout/patentInfo/speed-1.vue

@@ -0,0 +1,91 @@
+<template>
+  <div id="list-1">
+    <van-row>
+      <van-col span="24" class="main">
+        <van-col span="24" class="list" v-for="(item, index) in list" :key="index">
+          <van-col span="24" class="title textOver">
+            {{ item.title }}
+          </van-col>
+          <van-col span="24" class="other">
+            <van-col span="24" class="otherInfo">
+              下载进度:<span>{{ item.progress || '暂无' }}</span>
+            </van-col>
+          </van-col>
+          <van-col span="24" class="btn">
+            <van-button type="info" size="small" @click="download(item.uri)">下载文件</van-button>
+          </van-col>
+        </van-col>
+      </van-col>
+    </van-row>
+  </div>
+</template>
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const moment = require('moment');
+export default {
+  name: 'list-1',
+  props: { list: { type: Array } },
+  components: {},
+  data: function () {
+    return {};
+  },
+  created() {},
+  methods: {
+    // 详细信息
+    download(data) {
+      if (data) {
+        window.location.href = `${process.env.VUE_APP_HOST}${data}`;
+      } else {
+        this.$toast({ type: `fail`, message: `未上传文件` });
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  margin: 8px 0 0 0;
+  .list {
+    background-color: #fff;
+    margin: 0 0 10px 0;
+    box-shadow: 0 0 5px #f1f1f1;
+    padding: 8px;
+    .title {
+      font-size: 16px;
+      font-weight: bold;
+      margin: 0 0 5px 0;
+    }
+    .other {
+      margin: 0 0 5px 0;
+      .otherInfo {
+        font-size: 14px;
+        color: #666;
+        margin: 0 0 5px 0;
+        span {
+          color: #000;
+        }
+      }
+    }
+    .btn {
+      text-align: center;
+      .van-button {
+        margin: 0 10px 5px 10px;
+      }
+    }
+  }
+}
+</style>

+ 1 - 0
src/layout/question/form-1.vue

@@ -24,6 +24,7 @@
             placeholder="请填写问题说明"
             autosize
             type="textarea"
+            rows="1"
             :rules="[{ required: true, message: '问题说明' }]"
           />
           <van-field name="ask_file" label="问题文件" :rules="[{ required: true, message: '问题文件' }]">

+ 3 - 13
src/layout/question/info-1.vue

@@ -7,14 +7,13 @@
             <van-field v-model="info.name" name="name" label="问题名称" readonly />
             <van-field v-model="info.ask_name" name="ask_name" label="发问人" readonly />
             <van-field v-model="info.ask_date" name="ask_date" label="发问时间" readonly />
-            <van-field v-model="info.ask_explain" name="ask_explain" label="问题说明" autosize type="textarea" readonly />
+            <van-field v-model="info.ask_explain" name="ask_explain" label="问题说明" autosize type="textarea" rows="1" readonly />
             <van-field v-model="info.answer_name" name="answer_name" label="答题人" readonly />
             <van-field v-model="info.answer_date" name="answer_date" label="答题时间" readonly />
-            <van-field v-model="info.answer_explain" name="ask_explain" label="答题说明" autosize type="textarea" readonly />
+            <van-field v-model="info.answer_explain" name="ask_explain" label="答题说明" autosize type="textarea" rows="1" readonly />
             <van-col span="24" class="btn">
-              <van-button type="info" size="small" @click="download(info.ask_file)" v-if="info.ask_id != user.id">问题文件下载</van-button>
+              <van-button type="info" size="small" @click="download(info.ask_file)">问题文件下载</van-button>
               <van-button type="info" size="small" @click="download(info.answer_file)" v-if="info.status == '3' || info.status == '4'">答案文件下载</van-button>
-              <van-button type="info" size="small" @click="onSubmit()" v-if="info.status == '3' && info.ask_id == user.id">信息已读</van-button>
             </van-col>
           </van-form>
         </van-col>
@@ -39,15 +38,6 @@ export default {
     onSubmit() {
       this.$emit('onSubmit', { data: this.info });
     },
-    // 问题文件下载
-    askDownload(data) {
-      if (data && data.length > 0) {
-        let url = data.map((i) => i.url);
-        window.location.href = `${process.env.VUE_APP_HOST}${url[0]}`;
-      } else {
-        this.$toast({ type: `fail`, message: `非正常文件,无法下载` });
-      }
-    },
     // 下载文件
     download(data) {
       if (data && data.length > 0) {

+ 36 - 0
src/layout/question/list-1.vue

@@ -18,6 +18,17 @@
         </van-col>
         <van-col span="24" class="btn">
           <van-button type="info" size="small" @click="toView(item)">查看信息</van-button>
+          <template v-if="user.role == '1'">
+            <van-button type="info" size="small" @click="toAssign(item)" v-if="item.status == '0'">工作分派</van-button>
+            <van-button type="info" size="small" @click="toIssue(item)" v-if="item.status == '2'">答案下发</van-button>
+          </template>
+          <template v-if="user.role == '3'">
+            <van-button type="danger" size="small" @click="toDel(item)">删除信息</van-button>
+            <van-button type="info" size="small" @click="toRead(item)" v-if="item.status == '3'">信息已读</van-button>
+          </template>
+          <template v-if="user.role == '5'">
+            <van-button type="info" size="small" @click="toUpload(item)" v-if="item.status == '1'">答案上传</van-button>
+          </template>
         </van-col>
       </van-col>
     </van-col>
@@ -37,9 +48,34 @@ export default {
   },
   created() {},
   methods: {
+    // 公共
+    // 查看信息
     toView(data) {
       this.$emit('toView', data);
     },
+    // 个人用户
+    // 删除信息
+    toDel(data) {
+      this.$emit('toDel', data);
+    },
+    // 信息已读
+    toRead(data) {
+      this.$emit('toRead', data);
+    },
+    // 管理員
+    // 工作分派
+    toAssign(data) {
+      this.$emit('toAssign', data);
+    },
+    // 答题老师
+    //答案上传
+    toUpload(data) {
+      this.$emit('toUpload', data);
+    },
+    // 答案下发
+    toIssue(data) {
+      this.$emit('toIssue', data);
+    },
     // 整理状态
     getStu(data) {
       if (data == '0') return '待受理';

+ 0 - 113
src/layout/question/list-2.vue

@@ -1,113 +0,0 @@
-<template>
-  <div id="list-2">
-    <van-col span="24" class="main">
-      <van-col span="24" class="list" v-for="(item, index) in list" :key="index">
-        <van-col span="24" class="title">
-          {{ item.name }}
-        </van-col>
-        <van-col span="24" class="other">
-          <van-col span="24" class="otherInfo">
-            发问时间:<span>{{ item.ask_date || '暂无' }}</span>
-          </van-col>
-          <van-col span="24" class="otherInfo">
-            答题时间:<span>{{ item.answer_date || '暂无' }}</span>
-          </van-col>
-          <van-col span="24" class="otherInfo">
-            问题状态:<span>{{ getStu(item.status) }}</span>
-          </van-col>
-        </van-col>
-        <van-col span="24" class="btn">
-          <van-button type="info" size="small" @click="toView(item)">查看信息</van-button>
-          <van-button type="info" size="small" @click="toAssign(item)" v-if="item.status == '0'">工作分派</van-button>
-          <van-button type="info" size="small" @click="toUpload(item)" v-if="item.status == '1' && item.answer_id == user.id">答案上传</van-button>
-          <van-button type="info" size="small" @click="toIssue(item)" v-if="item.status == '2' && item.answer_id != user.id">答案下发</van-button>
-        </van-col>
-      </van-col>
-    </van-col>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'list-2',
-  props: {
-    list: { type: Array },
-  },
-  components: {},
-  data: function () {
-    return {};
-  },
-  created() {},
-  methods: {
-    toView(data) {
-      this.$emit('toView', data);
-    },
-    // 工作分派
-    toAssign(data) {
-      this.$emit('toAssign', data);
-    },
-    //答案上传
-    toUpload(data) {
-      this.$emit('toUpload', data);
-    },
-    // 答案下发
-    toIssue(data) {
-      this.$emit('toIssue', data);
-    },
-    // 整理状态
-    getStu(data) {
-      if (data == '0') return '待受理';
-      else if (data == '1') return '已分配,待作答';
-      else if (data == '2') return '已作答,待下发';
-      else if (data == '3') return '已下发,待阅读';
-      else if (data == '4') return '已阅读';
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-  watch: {
-    test: {
-      deep: true,
-      immediate: true,
-      handler(val) {},
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .list {
-    background-color: #fff;
-    margin: 0 0 8px 0;
-    padding: 8px;
-    border-radius: 5px;
-    .title {
-      font-size: 16px;
-      font-weight: bold;
-      margin: 0 0 5px 0;
-    }
-    .other {
-      .otherInfo {
-        font-size: 14px;
-        color: #666;
-        margin: 0 0 5px 0;
-        span {
-          color: #000;
-        }
-      }
-    }
-    .btn {
-      text-align: center;
-      .van-button {
-        margin: 0 10px;
-      }
-    }
-  }
-}
-</style>

+ 1 - 0
src/layout/question/upload-1.vue

@@ -22,6 +22,7 @@
               label="答题说明"
               autosize
               type="textarea"
+              rows="1"
               :rules="[{ required: true, message: '答题说明' }]"
             />
             <van-field name="answer_file" label="答题文件" :rules="[{ required: true, message: '答题文件' }]">

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

@@ -10,7 +10,7 @@
             <van-field v-model="form.name" name="name" label="发明名称" placeholder="发明名称" readonly />
             <van-field v-model="form.apply_personal" name="apply_personal" label="专利申请人" placeholder="专利申请人" readonly />
             <van-field v-model="form.type" name="type" label="申请类型" placeholder="申请类型" readonly />
-            <van-field v-model="form.inventors" name="inventors" label="发明人" readonly />
+            <van-field v-model="form.inventor" name="inventors" label="发明人" readonly />
             <van-field v-model="form.contact" name="contact" label="联系人" placeholder="联系人" :rules="[{ required: true, message: '联系人' }]" />
             <van-field v-model="form.phone" name="phone" label="联系人电话" placeholder="联系人电话" :rules="[{ required: true, message: '联系人电话' }]" />
             <van-field v-model="form.email" name="email" label="联系人邮箱" placeholder="联系人邮箱" :rules="[{ required: true, message: '联系人邮箱' }]" />

+ 17 - 2
src/layout/safe/list-1.vue

@@ -16,8 +16,14 @@
               </van-col>
               <van-col span="24" class="btn">
                 <van-button type="info" size="small" @click="toView(item)">查看信息</van-button>
-                <van-button type="info" size="small" @click="toResult(item)" v-if="item.status == '1' || item.status == '-1'">审核结果</van-button>
-                <van-button type="info" size="small" @click="download(item.file)" v-if="item.status == '2'">报告下载</van-button>
+                <template v-if="user.role == '1'">
+                  <van-button type="info" size="small" @click="toCheck(item)" v-if="item.status == '0'">审核申请</van-button>
+                  <van-button type="info" size="small" @click="toFile(item)" v-if="item.status == '1'">报告文件</van-button>
+                </template>
+                <template v-if="user.role == '3'">
+                  <van-button type="info" size="small" @click="toResult(item)">审核结果</van-button>
+                  <van-button type="info" size="small" @click="download(item.file)" v-if="item.status == '2'">报告下载</van-button>
+                </template>
               </van-col>
             </van-col>
           </van-col>
@@ -57,6 +63,15 @@ export default {
         this.$toast({ type: `fail`, message: `未上传文件` });
       }
     },
+    // 管理员
+    // 审核申请
+    toCheck(data) {
+      this.$emit('toCheck', data);
+    },
+    // 报告文件
+    toFile(data) {
+      this.$emit('toFile', data);
+    },
     // 状态
     getStu(data) {
       if (data == '0') return '待审中';

+ 0 - 112
src/layout/safe/list-2.vue

@@ -1,112 +0,0 @@
-<template>
-  <div id="list-2">
-    <van-row>
-      <van-col span="24" class="main">
-        <van-col :span="24" class="one">
-          <van-col :span="24" class="list" v-for="(item, index) in list" :key="index">
-            <van-col span="24" class="title textOver">
-              {{ item.name }}
-            </van-col>
-            <van-col span="24" class="other">
-              <van-col span="24" class="otherInfo">
-                专利申请号:<span>{{ item.create_number || '暂无' }}</span>
-              </van-col>
-              <van-col span="24" class="otherInfo">
-                状态:<span>{{ getStu(item.status) }}</span>
-              </van-col>
-              <van-col span="24" class="btn">
-                <van-button type="info" size="small" @click="toView(item)">查看信息</van-button>
-                <van-button type="info" size="small" @click="toCheck(item)" v-if="item.status == '0'">审核申请</van-button>
-                <van-button type="info" size="small" @click="toFile(item)" v-if="item.status == '1'">报告文件</van-button>
-              </van-col>
-            </van-col>
-          </van-col>
-        </van-col>
-      </van-col>
-    </van-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'list-2',
-  props: {
-    list: { type: Array },
-  },
-  components: {},
-  data: function () {
-    return {};
-  },
-  created() {},
-  methods: {
-    // 查看信息
-    toView(data) {
-      this.$emit('toView', data);
-    },
-    // 审核申请
-    toCheck(data) {
-      this.$emit('toCheck', data);
-    },
-    // 报告文件
-    toFile(data) {
-      this.$emit('toFile', data);
-    },
-    // 状态
-    getStu(data) {
-      if (data == '0') return '待审中';
-      else if (data == '1') return '审核通过,请等待报告文件';
-      else if (data == '-1') return '审核未通过';
-      else if (data == '2') return '报告已发,请及时下载查看';
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-  watch: {
-    test: {
-      deep: true,
-      immediate: true,
-      handler(val) {},
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .one {
-    .list {
-      background-color: #fff;
-      margin: 0 0 10px 0;
-      box-shadow: 0 0 5px #f1f1f1;
-      padding: 8px;
-      .title {
-        font-size: 16px;
-        font-weight: bold;
-        margin: 0 0 5px 0;
-      }
-      .other {
-        margin: 0 0 5px 0;
-        .otherInfo {
-          font-size: 14px;
-          color: #666;
-          margin: 0 0 5px 0;
-          span {
-            color: #000;
-          }
-        }
-      }
-      .btn {
-        text-align: center;
-        .van-button {
-          margin: 0 8px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 13 - 5
src/layout/safe/result-1.vue

@@ -3,7 +3,7 @@
     <van-row>
       <van-col span="24" class="main">
         <van-col span="24" class="one">
-          <van-steps direction="vertical" :active="info.status">
+          <van-steps direction="vertical" :active="step">
             <van-step v-for="(item, index) in info.record" :key="index">
               <p>{{ item.word }}</p>
               <p>审核时间:{{ item.time }}</p>
@@ -25,10 +25,16 @@ export default {
   },
   components: {},
   data: function () {
-    return {};
+    return {
+      step: 0,
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    searchStep(data) {
+      this.$set(this, `step`, data.length - 1);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
@@ -36,10 +42,12 @@ export default {
     return { title: this.$route.meta.title };
   },
   watch: {
-    test: {
+    info: {
       deep: true,
       immediate: true,
-      handler(val) {},
+      handler(val) {
+        if (val) this.searchStep(val.record);
+      },
     },
   },
 };

+ 10 - 3
src/views/account/agentmech/index.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" @add="toAdd" :useNav="false">
       <template v-slot:info>
-        <list-1 :list="list" @toEdit="toEdit"></list-1>
+        <list-1 :list="list" @toEdit="toEdit" @toDel="toDel"></list-1>
       </template>
     </admin-frame>
   </div>
@@ -28,7 +28,7 @@ export default {
     this.search();
   },
   methods: {
-    ...agent_mech(['query']),
+    ...agent_mech(['query', 'delete']),
     async search({ skip = 0, limit = this.limit, searchName, ...info } = {}) {
       if (searchName) info.name = searchName;
       let res = await this.query({ skip, limit, pid: this.user.id, ...info });
@@ -45,7 +45,14 @@ export default {
     toEdit(data) {
       this.$router.push({ path: `/account/agentmech/detail`, query: { id: data.id } });
     },
-    // 返回
+    // 删除
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+        this.search();
+      }
+    }, // 返回
     back() {
       this.$router.push({ path: `/account/index` });
     },

+ 5 - 1
src/views/account/agentmech/parts/list-1.vue

@@ -14,7 +14,8 @@
           </van-col>
         </van-col>
         <van-col span="24" class="btn">
-          <van-button type="info" size="small" @click="toEdit(item)">编辑信息</van-button>
+          <van-button type="info" size="small" @click="toEdit(item)">修改信息</van-button>
+          <van-button type="danger" size="small" @click="toDel(item)">删除信息</van-button>
         </van-col>
       </van-col>
     </van-col>
@@ -37,6 +38,9 @@ export default {
     toEdit(data) {
       this.$emit('toEdit', data);
     },
+    toDel(data) {
+      this.$emit('toDel', data);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 10 - 3
src/views/account/answertea/index.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" @add="toAdd" :useNav="false">
       <template v-slot:info>
-        <list-1 :list="list" @toEdit="toEdit"></list-1>
+        <list-1 :list="list" @toEdit="toEdit" @toDel="toDel"></list-1>
       </template>
     </admin-frame>
   </div>
@@ -28,7 +28,7 @@ export default {
     this.search();
   },
   methods: {
-    ...answer_tea(['query']),
+    ...answer_tea(['query', 'delete']),
     async search({ skip = 0, limit = this.limit, searchName, ...info } = {}) {
       if (searchName) info.name = searchName;
       let res = await this.query({ skip, limit, ...info });
@@ -45,7 +45,14 @@ export default {
     toEdit(data) {
       this.$router.push({ path: `/account/answertea/detail`, query: { id: data.id } });
     },
-    // 返回
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+        this.search();
+      }
+    }, // 返回
+
     back() {
       this.$router.push({ path: `/account/index` });
     },

+ 5 - 1
src/views/account/answertea/parts/list-1.vue

@@ -14,7 +14,8 @@
           </van-col>
         </van-col>
         <van-col span="24" class="btn">
-          <van-button type="info" size="small" @click="toEdit(item)">编辑信息</van-button>
+          <van-button type="info" size="small" @click="toEdit(item)">修改信息</van-button>
+          <van-button type="danger" size="small" @click="toDel(item)">删除信息</van-button>
         </van-col>
       </van-col>
     </van-col>
@@ -37,6 +38,9 @@ export default {
     toEdit(data) {
       this.$emit('toEdit', data);
     },
+    toDel(data) {
+      this.$emit('toDel', data);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 1 - 1
src/views/account/mechanism/detail.vue

@@ -30,7 +30,7 @@ export default {
     await this.search();
   },
   methods: {
-    ...adminLogin(['query', 'fetch', 'update', 'delete', 'create']),
+    ...adminLogin(['query', 'fetch', 'update', 'create']),
     async search() {
       let res = await this.query({ role: '1', code: this.user.code });
       if (this.$checkRes(res)) {

+ 11 - 4
src/views/account/mechanism/index.vue

@@ -1,8 +1,8 @@
 <template>
   <div id="index">
-    <admin-frame @search="search" :limit="limit" :total="total" topType="2" @add="add" @back="back" :useNav="false">
+    <admin-frame @search="search" :limit="limit" :total="total" topType="2" @add="toAdd" @back="back" :useNav="false">
       <template v-slot:info>
-        <list-1 :list="list" @toEdit="toEdit"></list-1>
+        <list-1 :list="list" @toEdit="toEdit" @toDel="toDel"></list-1>
       </template>
     </admin-frame>
   </div>
@@ -40,14 +40,21 @@ export default {
       }
     },
     // 添加
-    add() {
+    toAdd() {
       this.$router.push({ path: `/account/mechanism/detail` });
     },
     // 编辑
     toEdit(data) {
       this.$router.push({ path: `/account/mechanism/detail`, query: { id: data.id } });
     },
-
+    // 删除
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `删除成功` });
+        this.search();
+      }
+    },
     back() {
       this.$router.push({ path: `/account/index` });
     },

+ 1 - 1
src/views/account/mechanism/parts/detail_1.vue

@@ -12,7 +12,7 @@
           <van-field v-model="form.deptname" name="deptname" label="机构名称" :rules="[{ required: true, message: '机构名称' }]" />
           <van-field v-model="form.name" name="name" label="姓名" :rules="[{ required: true, message: '姓名' }]" />
           <van-field v-model="form.phone" name="phone" label="手机号" :rules="[{ required: true, message: '手机号' }]" />
-          <van-field v-model="form.passwd" name="passwd" label="密码" type="password" :rules="[{ required: true, message: '密码' }]" />
+          <van-field v-model="form.passwd" name="passwd" label="密码" type="password" :rules="[{ required: true, message: '密码' }]" v-if="!form.id" />
           <div style="margin: 16px">
             <van-button round block type="info" native-type="submit">提交</van-button>
           </div>

+ 7 - 1
src/views/account/mechanism/parts/list_1.vue

@@ -17,7 +17,8 @@
           </van-col>
         </van-col>
         <van-col span="24" class="btn">
-          <van-button type="info" size="small" @click="toEdit(item)">编辑信息</van-button>
+          <van-button type="info" size="small" @click="toEdit(item)">修改信息</van-button>
+          <van-button type="danger" size="small" @click="toDel(item)">删除信息</van-button>
         </van-col>
       </van-col>
     </van-col>
@@ -37,9 +38,14 @@ export default {
   },
   created() {},
   methods: {
+    // 编辑信息
     toEdit(data) {
       this.$emit('toEdit', data);
     },
+    // 删除信息
+    toDel(data) {
+      this.$emit('toDel', data);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 22 - 12
src/views/account/users/detail.vue

@@ -2,14 +2,14 @@
   <div id="detail">
     <admin-frame :usePage="false" topType="2" :rightArrow="false" @back="back" :useNav="false">
       <template v-slot:info>
-        <personal-detail :form="form" @onSubmit="onSubmit"></personal-detail>
+        <form-1 :form="form" @onSubmit="onSubmit"></form-1>
       </template>
     </admin-frame>
   </div>
 </template>
 
 <script>
-import personalDetail from './parts/personal-detail.vue';
+import form1 from './parts/form-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: personal } = createNamespacedHelpers('personal');
@@ -18,7 +18,7 @@ export default {
   props: {},
   components: {
     adminFrame,
-    personalDetail,
+    form1,
   },
   data: function () {
     return {
@@ -29,19 +29,29 @@ export default {
     await this.search();
   },
   methods: {
-    ...personal(['fetch', 'update']),
+    ...personal(['fetch', 'create', 'update']),
     async search() {
-      let res = await this.fetch(this.id);
-      if (this.$checkRes(res)) {
-        this.$set(this, `form`, res.data);
+      if (this.id) {
+        let res = await this.fetch(this.id);
+        if (this.$checkRes(res)) {
+          this.$set(this, `form`, res.data);
+        }
       }
     },
     // 審核
-    async onSubmit(data) {
-      let res = await this.update(data);
-      if (this.$checkRes(res)) {
-        this.$toast({ type: `success`, message: `操作成功` });
-        this.back();
+    async onSubmit({ data }) {
+      if (this.id) {
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$toast({ type: `success`, message: `操作成功` });
+          this.back();
+        }
+      } else {
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          this.$toast({ type: `success`, message: `操作成功` });
+          this.back();
+        }
       }
     },
     back() {

+ 27 - 13
src/views/account/users/index.vue

@@ -3,24 +3,25 @@
     <admin-frame @search="search" :limit="limit" :total="total" topType="3" @back="back" :rightArrow="false" :useNav="false">
       <template v-slot:info>
         <van-col span="24" v-if="user.role == '1'" class="one">
+          <van-button type="info" size="small" @click="toAdd()">添加用戶</van-button>
           <van-button type="info" size="small" @click="toImport()">批量注册用户</van-button>
           <van-button type="info" size="small" @click="tpExport()">批量导出用户</van-button>
         </van-col>
-        <personal-1 :list="list" @toCheck="toCheck" @toPatent="toPatent"></personal-1>
+        <van-col span="24" class="two"> <list-1 :list="list" @toEdit="toEdit" @toDel="toDel" @toPatent="toPatent"></list-1> </van-col>
       </template>
     </admin-frame>
   </div>
 </template>
 
 <script>
-import personal1 from './parts/personal-1.vue';
+import list1 from './parts/list-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: personal } = createNamespacedHelpers('personal');
 export default {
   name: 'index',
   props: {},
-  components: { adminFrame, personal1 },
+  components: { adminFrame, list1 },
   data: function () {
     return {
       list: [],
@@ -32,34 +33,47 @@ export default {
     this.search();
   },
   methods: {
-    ...personal(['query', 'export']),
+    ...personal(['query', 'delete', 'export']),
     async search({ skip = 0, limit = this.limit, searchName, ...info } = {}) {
       if (searchName) info.phone = searchName;
-      let res = await this.query({ skip, limit, code: this.user.code, ...info });
+      if (this.user.role != '1') info.code = this.user.code;
+      let res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
         this.$set(this, `list`, res.data);
         this.$set(this, `total`, res.total);
       }
     },
-    // 查看信息
-    toCheck(data) {
-      this.$router.push({ path: `/account/users/detail`, query: { id: data.id } });
-    },
-    // 专利信息
-    toPatent(data) {
-      this.$router.push({ path: `/account/patent/index`, query: { id: data._id } });
+    // 添加用户
+    toAdd() {
+      this.$router.push({ path: `/account/users/detail` });
     },
     // 批量注册用户
     toImport() {
       this.$router.push({ path: `/account/users/import_user` });
     },
-    // 导出用户
+    // 批量导出用户
     async tpExport() {
       let res = await this.export();
       if (this.$checkRes(res)) {
         window.location.href = `${process.env.VUE_APP_HOST}/${res.data}`;
       }
     },
+    // 编辑/审核
+    toEdit(data) {
+      this.$router.push({ path: `/account/users/detail`, query: { id: data.id } });
+    },
+    // 删除用户
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+        this.search();
+      }
+    },
+    // 专利信息
+    toPatent(data) {
+      this.$router.push({ path: `/account/patent/index`, query: { id: data._id } });
+    },
     // 返回
     back() {
       this.$router.push({ path: `/account/index` });

+ 126 - 0
src/views/account/users/parts/form-1.vue

@@ -0,0 +1,126 @@
+<template>
+  <div id="form-1">
+    <van-row>
+      <van-col span="24" class="main">
+        <van-form @submit="onSubmit" label-width="4em">
+          <van-field
+            readonly
+            clickable
+            name="picker"
+            :value="form.code"
+            label="邀请码"
+            placeholder="点击选择"
+            @click="oneShow = true"
+            :rules="[{ required: true, message: '请选择邀请码' }]"
+          />
+          <van-popup v-model="oneShow" position="bottom">
+            <van-picker show-toolbar :columns="adminList" value-key="name" @confirm="oneFim" @cancel="oneShow = false" />
+          </van-popup>
+          <van-field v-model="form.name" name="name" label="姓名" placeholder="请填写姓名" :rules="[{ required: true, message: '姓名' }]" />
+          <van-field v-model="form.phone" name="phone" label="手机号" placeholder="请填写手机号" :rules="[{ required: true, message: '手机号' }]" />
+          <van-field
+            v-model="form.password"
+            type="password"
+            name="password"
+            label="登录密码"
+            placeholder="请填写登录密码"
+            :rules="[{ required: true, message: '登录密码' }]"
+            v-if="!form.id"
+          />
+          <van-field v-model="form.card" name="card" label="身份证号" placeholder="请填写身份证号" />
+          <van-field v-model="form.email" name="email" label="电子邮箱" placeholder="请填写电子邮箱" />
+          <van-field v-model="form.addr" name="addr" label="联系地址" placeholder="请填写联系地址" />
+          <van-field v-model="form.zwzc" name="zwzc" label="职务职称" placeholder="请填写职务职称" />
+          <van-field v-model="form.school" name="school" label="院校" placeholder="请填写院校" />
+          <van-field v-model="form.major" name="major" label="专业" placeholder="请填写专业" />
+          <van-field readonly clickable name="juris" :value="form.juris" label="所属辖区" placeholder="点击选择" @click="twoShow = true" />
+          <van-popup v-model="twoShow" position="bottom">
+            <van-picker show-toolbar :columns="jurisList" @confirm="twoFim" @cancel="twoShow = false" />
+          </van-popup>
+          <van-field name="status" label="审核状态" :rules="[{ required: true, message: '审核状态' }]">
+            <template #input>
+              <van-radio-group v-model="form.status" direction="horizontal">
+                <van-radio name="0">待审</van-radio>
+                <van-radio name="1">通过</van-radio>
+                <van-radio name="2">拒绝</van-radio>
+              </van-radio-group>
+            </template>
+          </van-field>
+          <div class="btn">
+            <van-button type="primary" size="small" native-type="submit">提交保存</van-button>
+          </div>
+        </van-form>
+      </van-col>
+    </van-row>
+  </div>
+</template>
+
+<script>
+import { juris } from '@common/dict/index';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: adminLogin } = createNamespacedHelpers('adminLogin');
+export default {
+  name: 'form-1',
+  props: {
+    form: {},
+  },
+  components: {},
+  data: function () {
+    return {
+      // 管理用户
+      oneShow: false,
+      adminList: [],
+      // 所属辖区
+      twoShow: false,
+      jurisList: juris,
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...adminLogin(['query']),
+    async search() {
+      let p1 = await this.query({ code: this.user.code });
+      let p2 = await this.query({ pid: this.user.id });
+      if (p1.errcode == '0' || p1.errcode == '0') {
+        let data = p1.data.concat(p2.data);
+        if (data) this.$set(this, `adminList`, data);
+      }
+    },
+    onSubmit(value) {
+      if (value) this.$emit('onSubmit', { data: this.form });
+    },
+    // 确认选择
+    oneFim(value) {
+      this.$set(this.form, `code`, value.code);
+      this.oneShow = false;
+    },
+    // 确认选择辖区
+    twoFim(value) {
+      this.$set(this.form, `juris`, value);
+      this.twoShow = false;
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.btn {
+  text-align: center;
+  margin: 10px 0;
+}
+</style>

+ 10 - 6
src/views/account/users/parts/personal-1.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="personal-1">
+  <div id="list-1">
     <van-col span="24" class="main">
       <van-col span="24" class="list" v-for="(item, index) in list" :key="index">
         <van-col span="24" class="title">
@@ -17,8 +17,9 @@
           </van-col>
         </van-col>
         <van-col span="24" class="btn">
-          <van-button type="info" size="small" @click="toCheck(item)">审核信息</van-button>
-          <van-button type="info" size="small" @click="toPatent(item)">查看专利</van-button>
+          <van-button type="info" size="small" @click="toEdit(item)">修改/审核</van-button>
+          <van-button type="danger" size="small" @click="toDel(item)" v-if="user.role == '1'">删除信息</van-button>
+          <!-- <van-button type="info" size="small" @click="toPatent(item)">查看专利</van-button> -->
         </van-col>
       </van-col>
     </van-col>
@@ -28,7 +29,7 @@
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
-  name: 'personal-1',
+  name: 'list-1',
   props: {
     list: { type: Array },
   },
@@ -38,8 +39,11 @@ export default {
   },
   created() {},
   methods: {
-    toCheck(data) {
-      this.$emit('toCheck', data);
+    toEdit(data) {
+      this.$emit('toEdit', data);
+    },
+    toDel(data) {
+      this.$emit('toDel', data);
     },
     toPatent(data) {
       this.$emit('toPatent', data);

+ 0 - 79
src/views/account/users/parts/personal-detail.vue

@@ -1,79 +0,0 @@
-<template>
-  <div id="personal-detail">
-    <van-row>
-      <van-col span="24" class="main">
-        <van-form @submit="onSubmit" label-width="4em">
-          <van-field v-model="form.name" name="name" label="姓名" readonly />
-          <van-field v-model="form.phone" name="phone" label="手机号" readonly />
-          <van-field v-model="form.code" name="code" label="邀请码" readonly />
-          <van-field v-model="form.card" name="card" label="身份证号" readonly />
-          <van-field v-model="form.email" name="email" label="电子邮箱" readonly />
-          <van-field v-model="form.addr" name="addr" label="联系地址" readonly />
-          <van-field v-model="form.zwzc" name="zwzc" label="职务职称" readonly />
-          <van-field v-model="form.school" name="school" label="院校" readonly />
-          <van-field v-model="form.major" name="major" label="专业" readonly />
-          <van-field v-model="form.office_phone" name="office_phone" label="办公电话" readonly />
-          <van-field v-model="form.juris" name="juris" label="所属辖区" readonly />
-          <van-field name="status" label="状态">
-            <template #input>
-              <van-radio-group v-model="form.status" direction="horizontal">
-                <van-radio name="0">待审</van-radio>
-                <van-radio name="1">通过</van-radio>
-                <van-radio name="2">拒绝</van-radio>
-              </van-radio-group>
-            </template>
-          </van-field>
-          <div style="margin: 16px">
-            <van-button round block type="info" native-type="submit">提交</van-button>
-          </div>
-        </van-form>
-      </van-col>
-    </van-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'personal-detail',
-  props: {
-    form: { type: Object },
-  },
-  components: {},
-  data: function () {
-    return {
-      showPicker: false,
-      jurisList: ['长春新区', '净月区', '汽开区', '经开区', '高新区', '南关区', '朝阳区', '宽城区', '二道区', '绿园区', '双阳区', '九台区'],
-    };
-  },
-  created() {},
-  methods: {
-    onSubmit() {
-      this.$emit('onSubmit', this.form);
-    },
-    // 选择辖区
-    onConfirm(value) {
-      this.$set(this.form, `juris`, value);
-      this.showPicker = false;
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-    id() {
-      return this.$route.query.id;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-  watch: {
-    test: {
-      deep: true,
-      immediate: true,
-      handler(val) {},
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped></style>

+ 1 - 1
src/views/patent/admin/adminBtn.vue

@@ -5,9 +5,9 @@
         <van-col span="24" class="one">
           <van-divider content-position="left" :style="{ color: '#1989fa', borderColor: '#1989fa' }">我的消息</van-divider>
           <van-col span="24" class="one_1">
+            <van-cell title="通知管理" @click="pathBtn('admin/message', 'notice')" is-link />
             <van-cell title="问题管理" @click="pathBtn('admin/message', 'question')" is-link />
             <!-- <van-cell title="咨询服务" @click="pathBtn('admin/message', 'service')" is-link /> -->
-            <van-cell title="通知管理" @click="pathBtn('admin/message', 'notice')" is-link />
             <van-cell title="审核通知" @click="pathBtn('admin/message', 'examine')" is-link />
             <van-cell title="专利预警" @click="pathBtn('admin/message', 'warning')" is-link />
           </van-col>

+ 0 - 142
src/views/patent/admin/examine/patent copy.vue

@@ -1,142 +0,0 @@
-<template>
-  <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" @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 cancel-button-text="返回">
-      <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>
-
-<script>
-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');
-var moment = require('moment');
-export default {
-  name: 'patent',
-  props: {},
-  components: {
-    adminFrame,
-    list3,
-    info1,
-    check2,
-    check3,
-  },
-  data: function () {
-    return {
-      list: [],
-      limit: 5,
-      total: 0,
-      // 弹框
-      dialog: { show: false, title: '详细信息', type: '1' },
-      // 详细信息
-      info: {},
-      // 申请审核
-      form: {},
-    };
-  },
-  async created() {
-    await this.search();
-  },
-  methods: {
-    ...patentapply(['query', 'check']),
-    async search({ skip = 0, limit = this.limit, ...info } = {}) {
-      let res = await this.query({ skip, limit, ...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);
-    },
-    // 申请审核
-    toCheck(data) {
-      let dialog = { show: true, title: '申请审核', type: '2' };
-      this.$set(this, `dialog`, dialog);
-      this.$set(this, `form`, data);
-    },
-    // 提交审核
-    async checkSubmit(data) {
-      const res = await this.check(data);
-      if (this.$checkRes(res)) {
-        this.$toast({ type: `success`, message: `审核成功` });
-        this.search();
-        let dialog = { show: false, title: '申请审核', type: '2' };
-        this.$set(this, `dialog`, dialog);
-      } else {
-        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' });
-    },
-  },
-  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>

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

@@ -56,8 +56,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
-        res.data.contact = JSON.stringify(res.data.contact.map((i) => i.name));
         if (res.data.questions == undefined) res.data.questions = {};
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };

+ 3 - 3
src/views/patent/admin/message/question.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <admin-frame @search="search" :limt="limit" :total="total" topType="3" @back="back" :useNav="false">
       <template v-slot:info>
-        <list-2 :list="list" @toView="toView" @toAssign="toAssign" @toIssue="toIssue"></list-2>
+        <list-1 :list="list" @toView="toView" @toAssign="toAssign" @toIssue="toIssue"></list-1>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
@@ -13,7 +13,7 @@
 </template>
 
 <script>
-import list2 from '@/layout/question/list-2.vue';
+import list1 from '@/layout/question/list-1.vue';
 import info1 from '@/layout/question/info-1.vue';
 import assign1 from '@/layout/question/assign-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
@@ -24,7 +24,7 @@ export default {
   props: {},
   components: {
     adminFrame,
-    list2,
+    list1,
     info1,
     assign1,
   },

+ 0 - 1
src/views/patent/admin/patent/assessment.vue

@@ -59,7 +59,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };
       }

+ 1 - 1
src/views/patent/admin/patent/detail.vue

@@ -23,7 +23,7 @@ export default {
   data: function () {
     return {
       form: {
-        inventor: [],
+        user_id: [],
         // create_number: '申请号',
         // create_date: '2021-11-18',
         // success_number: '公开号',

+ 35 - 1
src/views/patent/admin/patent/import.vue

@@ -7,6 +7,20 @@
         </van-col>
         <van-col span="24" class="two">
           <van-form @submit="onSubmit">
+            <van-field v-model="form.code" name="code" label="机构code" style="display: none" />
+            <van-field
+              readonly
+              clickable
+              :value="form.mech_name"
+              name="mech_name"
+              label="选择机构"
+              placeholder="点击选择"
+              @click="oneShow = true"
+              :rules="[{ required: true, message: '请选择' }]"
+            />
+            <van-popup v-model="oneShow" position="bottom">
+              <van-picker show-toolbar :columns="mechList" value-key="name" @confirm="oneCom" @cancel="oneShow = false" />
+            </van-popup>
             <van-field name="uri" label="文件">
               <template #input>
                 <van-uploader
@@ -36,6 +50,7 @@
 <script>
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: adminLogin } = createNamespacedHelpers('adminLogin');
 const { mapActions: patentinfo } = createNamespacedHelpers('patentinfo');
 const { mapActions: upload } = createNamespacedHelpers('upload');
 export default {
@@ -49,12 +64,18 @@ export default {
       form: {},
       loading: false,
       list: [],
+      // 机构
+      mechList: [],
+      oneShow: false,
     };
   },
-  created() {},
+  created() {
+    this.searchOther();
+  },
   methods: {
     ...upload(['upload']),
     ...patentinfo(['toImport']),
+    ...adminLogin({ adminQuery: 'query' }),
     // 提交导入
     async onSubmit(values) {
       let data = values;
@@ -90,6 +111,19 @@ export default {
       const index = this.form[model].findIndex((f) => _.isEqual(f, file));
       this.form[model].splice(index, 1);
     },
+    // 查詢机构信息
+    async searchOther() {
+      let res = await this.adminQuery({ pid: this.user.id });
+      if (this.$checkRes(res)) {
+        this.$set(this, `mechList`, res.data);
+      }
+    },
+    // 确认选择
+    oneCom(value) {
+      this.$set(this.form, `code`, value.code);
+      this.$set(this.form, `mech_name`, value.name);
+      this.oneShow = false;
+    },
   },
   computed: {
     ...mapState(['user']),

+ 33 - 4
src/views/patent/admin/patent/index.vue

@@ -4,14 +4,17 @@
       <template v-slot:info>
         <van-col span="24" class="one">
           <van-button type="info" size="small" @click="toImport()">导入专利</van-button>
+          <van-button type="info" size="small" @click="downPatent()">下载专利</van-button>
+          <van-button type="info" size="small" @click="downSpeed()">下载进度</van-button>
         </van-col>
         <van-col span="24" class="two">
-          <list-1 :list="list" @toView="toView" @toEdit="toEdit"></list-1>
+          <list-1 :list="list" @toView="toView" @toEdit="toEdit" @toDel="toDel"></list-1>
         </van-col>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
       <info-1 :info="info" v-if="dialog.type == '1'"></info-1>
+      <speed-1 :list="speedList" v-if="dialog.type == '2'"></speed-1>
     </van-dialog>
   </div>
 </template>
@@ -19,13 +22,15 @@
 <script>
 import list1 from '@/layout/patentInfo/list-1.vue';
 import info1 from '@/layout/patentInfo/info-1.vue';
+import speed1 from '@/layout/patentInfo/speed-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: patentinfo } = createNamespacedHelpers('patentinfo');
+const { mapActions: mission } = createNamespacedHelpers('mission');
 export default {
   name: 'index',
   props: {},
-  components: { adminFrame, list1, info1 },
+  components: { adminFrame, list1, info1, speed1 },
   data: function () {
     return {
       list: [],
@@ -35,13 +40,16 @@ export default {
       dialog: { show: false, title: '详细信息', type: '1' },
       // 详细信息
       info: {},
+      // 下载专利进度
+      speedList: [],
     };
   },
   created() {
     this.search();
   },
   methods: {
-    ...patentinfo(['query', 'delete']),
+    ...patentinfo(['query', 'delete', 'toExport']),
+    ...mission({ missionQuery: 'query' }),
     async search({ skip = 0, limit = this.limit, ...info } = {}) {
       let res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
@@ -51,7 +59,6 @@ export default {
     },
     // 详细信息
     toView(data) {
-      data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
       this.$set(this, `info`, data);
       this.dialog = { show: true, title: '详细信息', type: '1' };
     },
@@ -59,6 +66,13 @@ export default {
     toEdit(data) {
       this.$router.push({ path: '/patent/admin/patent/detail', query: { id: data.id } });
     },
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `删除成功` });
+        this.search();
+      }
+    },
     // 添加
     toAdd() {
       this.$router.push({ path: '/patent/admin/patent/detail' });
@@ -67,6 +81,21 @@ export default {
     toImport() {
       this.$router.push({ path: '/patent/admin/patent/import' });
     },
+    // 下载专利
+    async downPatent() {
+      let res = await this.toExport({ ...this.searchForm, user: this.user.id });
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+      }
+    },
+    // 下载进度
+    async downSpeed() {
+      let res = await this.missionQuery({ user: this.user.id });
+      if (this.$checkRes(res)) {
+        this.$set(this, `speedList`, res.data);
+        this.dialog = { show: true, title: '下载进度', type: '2' };
+      }
+    },
     // 返回
     back() {
       this.$router.push({ path: '/patent/index' });

+ 3 - 4
src/views/patent/admin/safeg/index.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" :rightArrow="false" :useNav="false">
       <template v-slot:info>
-        <list-2 :list="list" @toView="toView" @toCheck="toCheck" @toFile="toFile"></list-2>
+        <list-1 :list="list" @toView="toView" @toCheck="toCheck" @toFile="toFile"></list-1>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
@@ -14,7 +14,7 @@
 </template>
 
 <script>
-import list2 from '@/layout/safe/list-2.vue';
+import list1 from '@/layout/safe/list-1.vue';
 import info1 from '@/layout/safe/info-1.vue';
 import check1 from '@/layout/safe/check-1.vue';
 import file1 from '@/layout/safe/file-1.vue';
@@ -26,7 +26,7 @@ export default {
   props: {},
   components: {
     adminFrame,
-    list2,
+    list1,
     info1,
     check1,
     file1,
@@ -58,7 +58,6 @@ export default {
     },
     // 查看信息
     toView(data) {
-      data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
       this.$set(this, `info`, data);
       let dialog = { show: true, title: '详细信息', type: '1' };
       this.$set(this, `dialog`, dialog);

+ 0 - 2
src/views/patent/agentmech/examine/patent.vue

@@ -58,8 +58,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
-        res.data.contact = JSON.stringify(res.data.contact.map((i) => i.name));
         if (res.data.questions == undefined) res.data.questions = {};
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };

+ 3 - 3
src/views/patent/answertea/message/question.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <admin-frame @search="search" :limt="limit" :total="total" topType="3" @back="back" :useNav="false">
       <template v-slot:info>
-        <list-2 :list="list" @toView="toView" @toUpload="toUpload"></list-2>
+        <list-1 :list="list" @toView="toView" @toUpload="toUpload"></list-1>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
@@ -13,7 +13,7 @@
 </template>
 
 <script>
-import list2 from '@/layout/question/list-2.vue';
+import list1 from '@/layout/question/list-1.vue';
 import info1 from '@/layout/question/info-1.vue';
 import upload1 from '@/layout/question/upload-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
@@ -24,7 +24,7 @@ export default {
   props: {},
   components: {
     adminFrame,
-    list2,
+    list1,
     info1,
     upload1,
   },

+ 0 - 2
src/views/patent/mech/examine/patent.vue

@@ -56,8 +56,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
-        res.data.contact = JSON.stringify(res.data.contact.map((i) => i.name));
         if (res.data.questions == undefined) res.data.questions = {};
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };

+ 4 - 5
src/views/patent/mech/patent/information/index.vue

@@ -63,7 +63,7 @@ export default {
     ...patentinfo(['query', 'queryByOrg']),
     async search({ skip = 0, limit = this.limit, ...info } = {}) {
       info.term = this.active ? this.active : '有效';
-      info.code = this.user.code;
+      info.first_apply = this.user.deptname;
       let res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
         console.log(res);
@@ -78,18 +78,17 @@ export default {
     },
     // 查看信息
     toView(data) {
-      data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
       this.$set(this, `info`, data);
       let dialog = { show: true, title: '详细信息', type: '1' };
       this.$set(this, `dialog`, dialog);
     },
     // 查询总数a
     async searchOther({ skip = 0, limit = this.limit, ...info } = {}) {
-      let res = await this.query({ skip, limit, term: '有效', code: this.user.code, ...info });
+      let res = await this.query({ skip, limit, term: '有效', first_apply: this.user.deptname, ...info });
       if (this.$checkRes(res)) this.$set(this, `total1`, res.total);
-      res = await this.query({ skip, limit, term: '审中', code: this.user.code, ...info });
+      res = await this.query({ skip, limit, term: '审中', first_apply: this.user.deptname, ...info });
       if (this.$checkRes(res)) this.$set(this, `total2`, res.total);
-      res = await this.query({ skip, limit, term: '失效', code: this.user.code, ...info });
+      res = await this.query({ skip, limit, term: '失效', first_apply: this.user.deptname, ...info });
       if (this.$checkRes(res)) this.$set(this, `total3`, res.total);
     }, // 返回
     back() {

+ 34 - 4
src/views/patent/mech/patent/navigation/index.vue

@@ -3,7 +3,10 @@
     <admin-frame @search="search" :limit="limit" :total="total" topType="2" @back="back" :rightArrow="false" :useNav="false">
       <template v-slot:info>
         <van-col span="24" class="one">
-          <van-button type="info" size="small" @click="toSearch">查询条件</van-button>
+          <span class="total">({{ total }})</span>
+          <van-button type="info" size="small" @click="toSearch()">查询条件</van-button>
+          <van-button type="info" size="small" @click="downPatent()">下载专利</van-button>
+          <van-button type="info" size="small" @click="downSpeed()">下载进度</van-button>
         </van-col>
         <van-col span="24">
           <list-1 :list="list" @toView="toView"></list-1>
@@ -13,6 +16,7 @@
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
       <search-1 v-if="dialog.type == '1'" :searchForm="searchForm" @reseat="reseat" @onSubmit="onSubmit"></search-1>
       <info-1 v-else-if="dialog.type == '2'" :info="info"></info-1>
+      <speed-1 :list="speedList" v-if="dialog.type == '2'"></speed-1>
     </van-dialog>
   </div>
 </template>
@@ -21,9 +25,11 @@
 import search1 from '@/layout/patentInfo/search-1.vue';
 import list1 from '@/layout/patentInfo/list-1.vue';
 import info1 from '@/layout/patentInfo/info-1.vue';
+import speed1 from '@/layout/patentInfo/speed-1.vue';
 import adminFrame from '@frame/src/components/mobile-frame/mobile-main.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: patentinfo } = createNamespacedHelpers('patentinfo');
+const { mapActions: mission } = createNamespacedHelpers('mission');
 export default {
   name: 'index',
   props: {},
@@ -32,6 +38,7 @@ export default {
     list1,
     search1,
     info1,
+    speed1,
   },
   data: function () {
     return {
@@ -50,9 +57,10 @@ export default {
     await this.search();
   },
   methods: {
-    ...patentinfo(['query', 'fetch']),
+    ...patentinfo(['query', 'fetch', 'toExport']),
+    ...mission({ missionQuery: 'query' }),
     async search({ skip = 0, limit = this.limit, ...info } = {}) {
-      let res = await this.query({ skip, limit, code: this.user.code, ...this.searchForm, ...info });
+      let res = await this.query({ skip, limit, first_apply: this.user.deptname, ...this.searchForm, ...info });
       if (this.$checkRes(res)) {
         this.$set(this, `list`, res.data);
         this.$set(this, `total`, res.total);
@@ -62,7 +70,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '2' };
       }
@@ -83,6 +90,21 @@ export default {
       let dialog = { show: false, title: '查询条件', type: '1' };
       this.$set(this, `dialog`, dialog);
     },
+    // 下载专利
+    async downPatent() {
+      let res = await this.toExport({ ...this.searchForm, user: this.user.id });
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+      }
+    },
+    // 下载进度
+    async downSpeed() {
+      let res = await this.missionQuery({ user: this.user.id });
+      if (this.$checkRes(res)) {
+        this.$set(this, `speedList`, res.data);
+        this.dialog = { show: true, title: '下载进度', type: '2' };
+      }
+    },
     // 返回
     back() {
       this.$router.push({ path: '/patent/index' });
@@ -109,6 +131,14 @@ export default {
   background-color: #ffffff;
   text-align: center;
   padding: 8px 0;
+  .van-button {
+    margin: 0 5px;
+  }
+  .total {
+    position: relative;
+    padding: 0 8px;
+    top: 5px;
+  }
 }
 .dialog {
   /deep/.van-dialog__content {

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

@@ -73,8 +73,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
-        res.data.contact = JSON.stringify(res.data.contact.map((i) => i.name));
         if (res.data.questions == undefined) res.data.questions = {};
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };

+ 0 - 1
src/views/patent/user/apply/assessment/index.vue

@@ -72,7 +72,6 @@ export default {
     async toView(data) {
       let res = await this.fetch(data.id);
       if (this.$checkRes(res)) {
-        res.data.inventor = JSON.stringify(res.data.inventor.map((i) => i.name));
         this.$set(this, `info`, res.data);
         this.dialog = { show: true, title: '详细信息', type: '1' };
       }

+ 12 - 5
src/views/patent/user/chat/index.vue

@@ -2,11 +2,11 @@
   <div id="index">
     <admin-frame @search="search" :limt="limit" :total="total" topType="2" @back="back" @add="toAdd" :useNav="false">
       <template v-slot:info>
-        <list-1 :list="list" @toView="toView"></list-1>
+        <list-1 :list="list" @toView="toView" @toDel="toDel" @toRead="toRead"></list-1>
       </template>
     </admin-frame>
     <van-dialog class="dialog" v-model="dialog.show" :title="dialog.title" :show-confirm-button="false" show-cancel-button cancel-button-text="返回">
-      <info-1 :info="info" v-if="dialog.type == '1'" @onSubmit="onSubmit"></info-1>
+      <info-1 :info="info" v-if="dialog.type == '1'"></info-1>
     </van-dialog>
   </div>
 </template>
@@ -39,7 +39,7 @@ export default {
     this.search();
   },
   methods: {
-    ...problem_service(['query', 'update']),
+    ...problem_service(['query', 'update', 'delete']),
     async search({ skip = 0, limit = this.limit, ...info } = {}) {
       let res = await this.query({ skip, limit, ask_id: this.user.id, ...info });
       if (this.$checkRes(res)) {
@@ -56,14 +56,21 @@ export default {
       this.$set(this, `info`, data);
       this.dialog = { show: true, title: '详细信息', type: '1' };
     },
+    // 删除信息
+    async toDel(data) {
+      let res = await this.delete(data.id);
+      if (this.$checkRes(res)) {
+        this.$toast({ type: `success`, message: `操作完成` });
+        this.search();
+      }
+    },
     // 已读
-    async onSubmit({ data }) {
+    async toRead(data) {
       data.status = '4';
       let res = await this.update(data);
       if (this.$checkRes(res)) {
         this.$toast({ type: `success`, message: `操作完成` });
         this.search();
-        this.dialog = { show: false, title: '详细信息', type: '1' };
       }
     },
     // 返回

+ 0 - 2
src/views/patent/user/patent/safe/index.vue

@@ -144,7 +144,6 @@ export default {
         apply_personal: data.apply_personal,
         type: data.type,
         inventor: data.inventor,
-        inventors: JSON.stringify(data.inventor.map((i) => i.name)),
         contact: this.user.name,
         phone: this.user.phone,
         email: this.user.email,
@@ -156,7 +155,6 @@ export default {
     },
     // 查看信息
     toView(data) {
-      data.inventor = JSON.stringify(data.inventor.map((i) => i.name));
       this.$set(this, `info`, data);
       let dialog = { show: true, title: '详细信息', type: '2' };
       this.$set(this, `dialog`, dialog);