Forráskód Böngészése

无效应对模块

zhuliu 1 éve
szülő
commit
9ceff434f2
25 módosított fájl, 1367 hozzáadás és 223 törlés
  1. 15 0
      package-lock.json
  2. 1 0
      package.json
  3. 2 2
      src/api/index.js
  4. 93 0
      src/api/newApi/report.js
  5. 23 6
      src/utils/common.js
  6. 1 1
      src/views/components/import/task/components/index.vue
  7. 4 4
      src/views/layout/index.vue
  8. 8 3
      src/views/layout/mixins/index.js
  9. 137 26
      src/views/report/InvalidResponse/components/Evidence/evidence.vue
  10. 6 2
      src/views/report/InvalidResponse/components/Evidence/index.vue
  11. 165 25
      src/views/report/InvalidResponse/components/ManualImport/manualImport.vue
  12. 121 0
      src/views/report/InvalidResponse/components/dialog/addInvalidResponse.vue
  13. 75 46
      src/views/report/InvalidResponse/components/dialog/editEvidence.vue
  14. 95 27
      src/views/report/InvalidResponse/components/dialog/editFlowPath.vue
  15. 82 0
      src/views/report/InvalidResponse/components/draggable/index.vue
  16. 57 73
      src/views/report/InvalidResponse/components/flowPath/flowPath.vue
  17. 6 2
      src/views/report/InvalidResponse/components/flowPath/index.vue
  18. 30 0
      src/views/report/InvalidResponse/components/powerManage/index.vue
  19. 230 0
      src/views/report/InvalidResponse/components/powerManage/powerManage.vue
  20. 30 0
      src/views/report/InvalidResponse/components/reasonsAndEvidence/index.vue
  21. 148 0
      src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue
  22. 4 2
      src/views/report/components/details/components/basicMessage.vue
  23. 4 4
      src/views/report/components/details/index.vue
  24. 15 0
      src/views/report/components/dialog/addAndEditReport.vue
  25. 15 0
      src/views/report/components/dialog/lookReport.vue

+ 15 - 0
package-lock.json

@@ -12573,6 +12573,21 @@
       "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
       "dev": true
     },
+    "vuedraggable": {
+      "version": "2.24.3",
+      "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-2.24.3.tgz",
+      "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+      "requires": {
+        "sortablejs": "1.10.2"
+      },
+      "dependencies": {
+        "sortablejs": {
+          "version": "1.10.2",
+          "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.10.2.tgz",
+          "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+        }
+      }
+    },
     "vuex": {
       "version": "3.6.2",
       "resolved": "https://registry.nlark.com/vuex/download/vuex-3.6.2.tgz",

+ 1 - 0
package.json

@@ -28,6 +28,7 @@
     "vue": "^2.6.11",
     "vue-i18n": "^8.11.2",
     "vue-router": "^3.2.0",
+    "vuedraggable": "^2.24.3",
     "vuex": "^3.4.0",
     "vuex-persistedstate": "^4.1.0"
   },

+ 2 - 2
src/api/index.js

@@ -21,7 +21,7 @@ import highlight from './highlight';
 import matters from './matters';
 import importPatent from './importPatent'
 
-import InvalidResponse from "./InvalidResponse";
+// import InvalidResponse from "./InvalidResponse";
 
 
 // 新系统新接口文件
@@ -59,7 +59,7 @@ export default {
   ...importPatent,
   ...highlight,
   ...matters,
-  ...InvalidResponse,
+  // ...InvalidResponse,
 
   ...event,
   ...product,

+ 93 - 0
src/api/newApi/report.js

@@ -263,5 +263,98 @@ export default {
   },
 
 
+  /**
+   * 无效应对
+   * 添加非专利对比文献
+   */
+  addNotPatent(data) {
+    return axios.post("/xiaoshi/compareLiterature/addNotPatent", data);
+  }, 
+  /**
+    * 无效应对
+    * 手动批量添加对比文献接口 
+  */
+  batchAdd(data) {
+    return axios.post("/xiaoshi/compareLiterature/batchAdd", data);
+  },
+  /**
+    * 无效应对
+    * 批量编辑对比文献接口 
+  */
+  updateCompareLiteratureBatch(data) {
+    return axios.post("/xiaoshi/compareLiterature/updateCompareLiteratureBatch", data);
+  },
+  /**
+    * 无效应对
+    * 查询对比文献接口 
+  */
+  queryCompareLiterature(data) {
+    return axios.post("/xiaoshi/compareLiterature/queryCompareLiterature", data);
+  },
+  /**
+    * 无效应对
+    * 更新对比文献顺序接口 
+  */
+  updateLiteratureOrder(data) {
+    return axios.post("/xiaoshi/compareLiterature/updateLiteratureOrder", data);
+  },
+  /**
+    * 无效应对
+    * 拆分权利要求并保存接口 
+  */
+  splitClaim(data) {
+    return axios.post("/xiaoshi/patentClaim/splitClaim", data);
+  }, 
+   /**
+    * 无效应对
+    * 查询权利要求接口
+  */
+   queryClaim(data) {
+    return axios.post("/xiaoshi/patentClaim/queryClaim", data);
+  }, 
+   /**
+    * 无效应对
+    * 添加保存权利要求接口
+  */
+   addClaim(data) {
+    return axios.post("/xiaoshi/patentClaim/addClaim", data);
+  },
+  
+  /**
+    * 无效应对
+    * 查询无效事务接口
+  */
+  queryReportAffair(data) {
+    return axios.post("/xiaoshi/reportAffair/queryReportAffair", data);
+  },
+  /**
+      * 无效应对
+      * 删除无效事务接口
+    */
+  deleteReportAffair(data) {
+    return axios.post("/xiaoshi/reportAffair/deleteReportAffair", data);
+  },
+  /**
+    * 无效应对
+    * 添加无效请求书接口
+  */
+  addInvalidRequestFile(data) {
+    return axios.post("/xiaoshi/reportAffair/addInvalidRequestFile", data);
+  },
+  /**
+    * 无效应对
+    * 编辑无效请求书接口
+  */
+  updateInvalidRequestFile(data) {
+    return axios.post("/xiaoshi/reportAffair/updateInvalidRequestFile", data);
+  },
+  /**
+    * 无效应对
+    * 添加无效法条
+  */
+  addInvalidStatutes(data) {
+    return axios.post("/xiaoshi/invalidStatutes/addInvalidStatutes", data);
+  },
+
 
 };

+ 23 - 6
src/utils/common.js

@@ -307,7 +307,8 @@ export default {
   },
   // 校验文件是否全部上传并处理文件的guid
   allUploadFile(form) {
-    let allUpload = this.validFile(form)
+    var arr =[]
+    let allUpload = this.validFile(form.systemFileList,arr)
     if (allUpload) {
       Message.warning('文件未全部上传,请耐心等待')
       return false
@@ -317,13 +318,29 @@ export default {
     })
   },
   //校验文件是否全部上传
-  validFile(form) {
-    if (form.systemFileList && form.systemFileList.length > 0) {
-      return form.systemFileList.filter(item => {
-        return !item.guid
-      }).length > 0
+  validFile(data,arr) {
+    if (data && data.length > 0) {
+      for(var i =0;i<data.length;i++){
+        if(data[i].guid){
+          arr.push(data[i].guid)
+        }else{
+          return true
+        }
+      }
+      return false
     } else {
       return false
     }
   },
+  //校验是否全部上传
+  checkUploadFile(data) {
+    var arr = []
+    let allUpload = this.validFile(data,arr)
+    if (allUpload) {
+      Message.warning('文件未全部上传,请耐心等待')
+      return false
+    }
+
+    return arr
+  },
 }

+ 1 - 1
src/views/components/import/task/components/index.vue

@@ -212,7 +212,7 @@ export default {
           }
           if (data.complete) {
             // if(data.taskType!=2){
-              this.$message.success(`导入任务完成`)
+              // this.$message.success(`导入任务完成`)
             //    for(var i = 0;i<this.tableData.length;i++){
             //     if(this.tableData[i].complete==true){
             //       this.tableData.splice(i,1)

+ 4 - 4
src/views/layout/index.vue

@@ -18,10 +18,10 @@
       </el-header>
       <el-main class="main">
         <section class="wrapper" >
-          <!-- <keep-alive>
-            <router-view id="view" v-if="$route.meta.keepAlive"></router-view>
-          </keep-alive> -->
-          <router-view id="view" v-if="!$route.meta.keepAlive"></router-view>
+          <keep-alive>
+            <router-view id="view"></router-view>
+          </keep-alive>
+          <!-- <router-view id="view" v-if="!$route.meta.keepAlive"></router-view> -->
           <contextMenu></contextMenu>
         </section>
       </el-main>

+ 8 - 3
src/views/layout/mixins/index.js

@@ -10,9 +10,14 @@ export const webSocket = {
       webSocket.onopen = () => {
         console.log('WebSocket连接成功')
       }
-      // webSocket.onmessage = async (e) => {
-      //   console.log(e)
-      // }
+      webSocket.onmessage = async (e) => {
+        const { code, data, message } = JSON.parse(e.data)
+        if(code == 903){
+          if (data.complete) {
+              this.$message.success(`导入任务完成`)
+          }
+        }
+      }
       webSocket.onerror = () => {
         console.log('WebSocket连接失败')
       }

+ 137 - 26
src/views/report/InvalidResponse/components/Evidence/evidence.vue

@@ -16,76 +16,78 @@
             </div>
             
         </el-header>
-        <el-main>
-            <el-table :data="tableData" border style="width: 100%">
-                <el-table-column prop="id" label="序号" width="80" align="center"></el-table-column>
-                <el-table-column prop="content" label="专利号/标题" align="center">
+        <el-main v-DivHeight="getDivHeight">
+            <el-table :data="tableData" border :maxHeight="tableHeight" style="width: 100%">
+                <el-table-column prop="sysOrder" label="序号" width="80" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.content}}
+                            <span>D{{ scope.row.sysOrder }}</span>
+                            <span>
+                                <my-draggable :list="tableData" :check="scope.row.id" @change="changeOrder" @update="updateOrder"></my-draggable>
+                            </span>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="author" label="权利人/作者" align="center">
+                <el-table-column prop="name" label="专利号/标题" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.author}}
+                            {{scope.row.name}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="publicNo" label="公开号" align="center">
+                <el-table-column prop="authorName" label="权利人/作者" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.publicNo}}
+                            {{scope.row.authorName}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="publicDate" label="公开日" align="center">
+                <el-table-column prop="publicNo" label="公开号" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.publicDate}}
+                            {{scope.row.publicNo}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="publicDate" label="申请日" align="center">
+                <el-table-column prop="publicDate" label="公开日" align="center">
                     <template slot-scope="scope">
                         <div>
                             {{scope.row.publicDate}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="type" label="文献类型" align="center">
+                <el-table-column prop="appDate" label="申请日" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.type}}
+                            {{scope.row.appDate}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="type" label="是否适格" align="center">
+                <el-table-column prop="type" label="文献类型" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.type}}
+                            {{scope.row.type==1?'非专利文献':'专利文献'}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="type" label="是否认可" align="center">
+                <el-table-column prop="fitType" label="是否适格" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.type}}
+                            {{fitType[scope.row.fitType]}}
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="remark" label="备注" align="center">
+                <el-table-column prop="description" label="备注" align="center">
                     <template slot-scope="scope">
                         <div>
-                            {{scope.row.remark}}
+                            {{scope.row.description}}
                         </div>
                     </template>
                 </el-table-column>
                 <el-table-column label="操作" align="center">
                     <template slot-scope="scope">
                         <div>
-                            <el-button @click="upload(scope.row)" type="text" size="small">上传文件</el-button>
+                            <el-button @click="edit(scope.row)" type="text" size="small">编辑</el-button>
                             <el-button @click="remove(scope)" type="text" size="small">删除</el-button>
                         </div>
                     </template>
@@ -94,16 +96,20 @@
         </el-main>
     </el-container>
 
-    <edit-Evidence ref="editEvidence" @save="getList"></edit-Evidence>
+    <edit-Evidence ref="editEvidence" :projectId="projectId" @save="getList"></edit-Evidence>
   </div>
 </template>
 
 <script>
 import editEvidence from '../dialog/editEvidence.vue';
+import { getTableHeight } from '@/views/components/mixins'
+import myDraggable from '../draggable'
 export default {
   components: {
-    editEvidence
+    editEvidence,
+    myDraggable
   },
+  mixins:[getTableHeight],
   props: {
     projectId:{
         default:0
@@ -111,7 +117,15 @@ export default {
   },
   data() {
     return {
-        tableData:[]
+        tableData:[],
+        queryParams:{
+            projectId:this.projectId,
+        },
+        fitType:{
+            0:'不适格',
+            1:'抵触申请',
+            2:'现有技术'
+        }
     };
   },
   watch: {},
@@ -123,7 +137,15 @@ export default {
   methods: {
     //获取证据文献
     getList(){
-
+        this.$api.queryCompareLiterature(this.queryParams).then(response=>{
+            if(response.code == 200){
+                this.tableData = response.data.data.sort((a,b)=>{
+                    return a.sysOrder - b.sysOrder
+                })
+            }
+        }).catch(error=>{
+            this.tableData = []
+        })
     },
     //上传证据文献
     andClick(option){
@@ -168,7 +190,96 @@ export default {
     remove(row){
 
     },
-    
+    //编辑
+    edit(row){
+        this.addLiterature(row)
+    },
+    /**
+     * 交换位置
+     * @param {*} now 和谁交换,交换后的排序
+     * @param {*} old 交换前的
+     */
+    changeOrder(now,old){
+        var nowIndex = this.tableData.findIndex(item=>{
+            return item.id == now
+        })
+        var oldIndex = this.tableData.findIndex(item=>{
+            return item.id == old
+        })
+        if(nowIndex == -1 || oldIndex == -1){
+            return
+        }
+        // var order = this.tableData[nowIndex].sysOrder
+        // this.tableData[nowIndex].sysOrder = this.tableData[oldIndex].sysOrder
+        // this.tableData[oldIndex].sysOrder = order
+        var data = [
+            {
+                id:now,
+                sysOrder:this.tableData[oldIndex].sysOrder
+            },
+            {
+                id:old,
+                sysOrder:this.tableData[nowIndex].sysOrder
+            }
+        ]
+        this.updateLiteratureOrder(data)
+    },
+    /**
+     * 拖动排序
+     * @param {*} now 拖动后的位置
+     * @param {*} old 拖动前的位置
+     */
+    updateOrder(now,old){
+        if(now == old){
+            return
+        }
+        var min = 0,
+        max = 0,
+        type=true,
+        currentOrder = null
+        if(now<old){//上移
+            min = now
+            max = old
+        }else{//下移
+            min = old
+            max = now
+            type = false
+        }
+        currentOrder = this.tableData[now].sysOrder
+        var data = []
+        for(var i = min;i<= max;i++){
+            var order = this.tableData[i].sysOrder
+            var obj = {
+                id:this.tableData[i].id
+            }
+            if(type){
+                if(i == max){
+                    obj.sysOrder = currentOrder
+                }else{
+                    obj.sysOrder = Number(order)+1
+                }
+            }else{
+                if(i == min){
+                    obj.sysOrder = currentOrder
+                }else{
+                    obj.sysOrder = Number(order)-1
+                }
+            }
+            data.push(obj)
+        }
+        this.updateLiteratureOrder(data)
+    },
+    //更新排序
+    updateLiteratureOrder(dtoList){
+        this.$api.updateLiteratureOrder(dtoList).then(response=>{
+            if(response.code == 200){
+                this.$message.success('更新排序成功')
+                this.getList()
+            }
+        }).catch(error=>{
+            this.$message.error('更新排序失败')
+        })
+    }
   },
 };
 </script>

+ 6 - 2
src/views/report/InvalidResponse/components/Evidence/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="height_100">
-    <evidence></evidence>
+    <evidence :projectId="projectId"></evidence>
   </div>
 </template>
 
@@ -16,7 +16,11 @@ export default {
     };
   },
   watch: {},
-  computed: {},
+  computed: {
+    projectId(){
+        return this.$route.query.projectId
+    }
+  },
   created() {},
   mounted() {},
   methods: {},

+ 165 - 25
src/views/report/InvalidResponse/components/ManualImport/manualImport.vue

@@ -2,24 +2,32 @@
   <div class="height_100">
     <el-container>
         <el-header>
-            <div>
-                <el-button type="primary">添加</el-button>
-                <el-button type="primary">保存</el-button>
+            <div class="head">
+                <el-button type="primary" size="small" class="margin-right_10" @click="add">添加</el-button>
+                <el-button type="primary" size="small" class="margin-right_10" :loading="btnLoading" @click="save">保存</el-button>
             </div>
         </el-header>
         <el-main>
             <el-table :data="tableData" border style="width: 100%">
-                <el-table-column prop="id" label="序号" width="120" align="center">
+                <el-table-column prop="order" label="序号" width="120" align="center">
                     <template slot-scope="scope">
                         <div>
-                            <el-input  v-model="scope.row.id" placeholder="请输入序号"></el-input>
+                            <el-input  v-model="scope.row.order" @blur="check(scope.row)" placeholder="请输入序号"></el-input>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="content" label="专利号/标题" align="center">
+                <el-table-column prop="name" label="专利号/标题" align="center">
+                    <template slot="header">
+                        <span>专利号/标题</span>
+                        <span class="margin-left_10">
+                            <el-tooltip class="item" effect="dark" content="专利文献则输入专利号,非专利文献输入文献标题" placement="top">
+                                <i class="el-icon-info"></i>
+                            </el-tooltip>
+                        </span>
+                    </template>
                     <template slot-scope="scope">
                         <div>
-                            <el-input v-model="scope.row.content" placeholder="请输入专利号/标题"></el-input>
+                            <el-input v-model="scope.row.name" placeholder="请输入专利号/标题"></el-input>
                         </div>
                     </template>
                 </el-table-column>
@@ -27,38 +35,62 @@
                     <template slot-scope="scope">
                         <div>
                             <el-select v-model="scope.row.type" placeholder="请选择">
-                                <el-option label="专利"  value="专利"></el-option>
-                                <el-option label="非专利"  value="非专利"></el-option>
+                                <el-option label="专利"  value="0"></el-option>
+                                <el-option label="非专利"  value="1"></el-option>
                             </el-select>
                         </div>
                     </template>
                 </el-table-column>
                 <el-table-column prop="publicDate" label="公开日" align="center">
+                    <template slot="header">
+                        <span>公开日</span>
+                        <span class="margin-left_10">
+                            <el-tooltip class="item" effect="dark" content="专利文献不需要选择公开日,非专利文献需要选择公开日(出版日)" placement="top">
+                                <i class="el-icon-info"></i>
+                            </el-tooltip>
+                        </span>
+                    </template>
                     <template slot-scope="scope">
                         <div>
-                            <el-date-picker v-model="scope.row.publicDate" style="width: 100%" type="date" placeholder="选择日期"></el-date-picker>
+                            <el-date-picker v-if="scope.row.type == 1" v-model="scope.row.publicDate" style="width: 100%" type="date" placeholder="选择日期"></el-date-picker>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="author" label="权利人/作者" align="center">
+                <el-table-column prop="authorName" label="权利人/作者" align="center">
+                    <template slot="header">
+                        <span>权利人/作者</span>
+                        <span class="margin-left_10">
+                            <el-tooltip class="item" effect="dark" content="专利文献不需要输入权利人/作者,非专利文献需要文献作者" placement="top">
+                                <i class="el-icon-info"></i>
+                            </el-tooltip>
+                        </span>
+                    </template>
                     <template slot-scope="scope">
                         <div>
-                            <el-input v-model="scope.row.author" placeholder="请输入权利人/作者"></el-input>
+                            <el-input v-if="scope.row.type == 1" v-model="scope.row.authorName" placeholder="请输入权利人/作者"></el-input>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="remark" label="备注" align="center">
+                <el-table-column prop="description" label="备注" align="center">
                     <template slot-scope="scope">
                         <div>
-                            <el-input v-model="scope.row.remark" placeholder="请输入备注"></el-input>
+                            <el-input v-model="scope.row.description" placeholder="请输入备注"></el-input>
                         </div>
                     </template>
                 </el-table-column>
                 <el-table-column label="操作" align="center">
                     <template slot-scope="scope">
-                        <div>
-                            <el-button @click="upload(scope.row)" type="text" size="small">上传文件</el-button>
-                            <el-button type="" @click="remove(scope)" type="text" size="small">移除</el-button>
+                        <div class="caozuo">
+                            <el-upload
+                                class="margin-right_10"
+                                action="#"
+                                :auto-upload="false"
+                                :limit="1"
+                                :on-change="(file,fileList)=>upload(file,fileList,scope.row)"
+                            >
+                                <el-button type="text" size="small">点击上传</el-button>
+                            </el-upload>
+                            <el-button @click="remove(scope)" type="text" size="small">移除</el-button>
                         </div>
                     </template>
                 </el-table-column>
@@ -71,30 +103,138 @@
 <script>
 export default {
   components: {},
-  props: {},
+  props: {
+    projectId:{
+        default:0
+    }
+  },
   data() {
     return {
-        tableData:[
-            {
-                type:'专利'
-            }
-        ],
+        tableData:[],
+        btnLoading:false,
+        evidences:[]
     };
   },
   watch: {},
   computed: {},
   created() {},
-  mounted() {},
+  async mounted() {
+    await this.getEvidence()
+    this.add()
+  },
   methods: {
+    //获取已添加的证据文献
+    getEvidence(){
+        var params = {
+            projectId:this.projectId
+        }
+        this.$api.queryCompareLiterature(params).then(response=>{
+            if(response.code == 200){
+                this.evidences = response.data.data.sort((a,b)=>{
+                    return a.sysOrder - b.sysOrder
+                })
+            }
+        }).catch(error=>{
+            this.evidences = []
+        })
+    },
+    /**
+     * 校验序号
+     * @param {*} row 
+     */
+    check(row){
+        var num = row.order.replace(/[^d]/g, "");
+        var data = this.evidences.concat(this.tableData)
+        var index = data.findIndex(item=>{
+            return item.sysOrder == num && item.order!=row.order
+        })
+        if(index != -1){
+            row.sysOrder = num
+        }else{
+            this.$message.warning('已存在该序号文献!')
+            row.order = `D${row.sysOrder}`
+        }
+    },
+    //移除
     remove(scope){
         var index = scope.$index
         this.tableData.splice(index,1)
     },
-    upload(row){
+    //上传文件
+    upload(file,fileList,row){
+        let formData = new FormData()
+        formData.append('sourceId',this.$constants.sourceId)
+        formData.append('files',file.raw)
+        this.$api.uploadFile(formData).then(response=>{
+            if(response.code == 200){
+                row.fileGuid = response.data[0]
+            }
+        })
+    },
+    //添加
+    add(){
+        var order = 1
+        if(this.tableData.length == 0){
+            if(this.evidences.length != 0){
+                var currentOrder = this.evidences[this.evidences.length - 1].sysOrder
+                order = Number(currentOrder) + 1
+            }
+        }else{
+            var currentOrder = this.tableData[this.tableData.length - 1].sysOrder
+            order = Number(currentOrder) + 1
+        }
+        this.tableData.push(
+            {
+                sysOrder:order,
+                order : `D${order}`,
+                projectId:this.projectId,
+                type:'0',
+            }
+        )
+    },
+    //保存
+    save(){
 
+        var data = this.tableData.filter(item=>{
+            return item.name
+        })
+        var params = {
+            updateBatchLiteratureDTOs:data,
+            projectId:this.projectId
+        }
+        this.btnLoading = true
+        this.$api.updateCompareLiteratureBatch(params).then(response=>{
+            if(response.code == 200){
+                this.$message.success('任务已发起,等待导入中...')
+                this.btnLoading  = false
+            }
+        }).catch(error=>{
+            this.$message.error('任务添加失败')
+            this.btnLoading  =false
+        })
     },
+    comeBack(){
+        this.$confirm('是否返回证据文献清单', '提示', {
+          confirmButtonText: '是',
+          cancelButtonText: '否',
+          type: 'info'
+        }).then(() => {
+            // this.$router.back()
+        }).catch(err => {
+          
+      })
+    }
   },
 };
 </script>
 <style lang="scss" scoped>
+.head{
+    width: 100%;
+    display: flex;
+    flex-direction: row-reverse;
+}
+.caozuo{
+    display: flex;
+    justify-content: center;
+}
 </style>

+ 121 - 0
src/views/report/InvalidResponse/components/dialog/addInvalidResponse.vue

@@ -0,0 +1,121 @@
+<template>
+  <div>
+    <el-dialog  :title="title" :visible.sync="showDialog" width="600px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
+        <el-form :model="form" :rules="rules" ref="form" label-width="80px" label-position="left">
+            <template v-if="type == 1">
+                <div>
+                    <el-form-item  label="无效理由" prop="name">
+                        <el-select v-model="form.statutesId" placeholder="请选择" style="width:100%">
+                            <el-option
+                                v-for="item in provisions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item  label="权要" prop="name">
+                        <el-select v-model="form.claimIds" multiple placeholder="请选择" style="width:100%">
+                            <el-option
+                                v-for="item in claims"
+                                :key="item.sysOrder"
+                                :label="`权要${Number(item.sysOrder)+1}`"
+                                :value="item.sysOrder+''"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </div>
+            </template>
+        </el-form>
+        
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="handleClose">取 消</el-button>
+          <el-button type="primary" :loading="btnLoading" @click="submit" >确 定</el-button>
+        </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    projectId:{
+        default:0
+    }
+  },
+  data() {
+    return {
+        type:null,
+        form:{},
+        title:'',
+        showDialog:false,
+        claims:[],
+        rules:{},
+        btnLoading:false,
+    };
+  },
+  watch: {},
+  computed: {
+    provisions(){
+        return this.$store.state.dictMessage.dictMessage.STATUTE || []
+    }
+  },
+  created() {},
+  mounted() {
+    this.getClaims()
+  },
+  methods: {
+    //获取权要
+    getClaims(){
+        var params = {
+            projectId:this.projectId
+        }
+        this.$api.queryClaim(params).then(response=>{
+            if(response.code == 200){
+                this.claims = response.data.data
+            }
+        }).catch(error=>{
+            this.claims = []
+        })
+    },
+    //打开弹窗
+    open(type,title,data){
+        this.type = type
+        this.title = title
+        this.form = data
+        this.showDialog = true
+    },
+    //关闭弹窗
+    handleClose(){
+        this.showDialog = false
+    },
+    //提交
+    submit(){
+        this.btnLoading = true
+        switch(this.type){
+            case '1':
+                this.addInvalidStatutes()
+                break;
+        }
+    },
+    //添加无效理由
+    addInvalidStatutes(){
+        this.form.projectId = this.projectId
+        this.$api.addInvalidStatutes(this.form).then(response=>{
+            if(response.code == 200){
+                this.btnLoading = false
+                this.handleClose()
+                this.$emit('save',true)
+            }
+        }).catch(error=>{
+            this.btnLoading = false
+        })
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 75 - 46
src/views/report/InvalidResponse/components/dialog/editEvidence.vue

@@ -2,29 +2,40 @@
   <div>
     <el-dialog  :title="form.id?'编辑证据文献':'添加证据文献'" :visible.sync="showDialog" width="600px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
         <el-form :model="form" :rules="rules" ref="form" label-width="80px" label-position="left">
-            <el-form-item  label="文献名称">
-              <el-input  v-model="form.name" autocomplete="off" placeholder="请输入文献名称"></el-input>
-            </el-form-item>
-            <el-form-item  label="公开日">
-                <el-date-picker v-model="form.publicDate" value-format="yyyy-MM-dd" type="date"  placeholder="请选择时间" style="width: 100%;"></el-date-picker>
-            </el-form-item>
-            <el-form-item  label="作者">
-              <el-input  v-model="form.author" autocomplete="off" placeholder="请输入作者名称"></el-input>
-            </el-form-item>
-            <el-form-item  label="附件">
-                <template>
-                    <div> 
-                        <myUpload :file-list="form.systemFileList" :limit="1" :autoUpload="true" @on-change="onChange" @on-remove="onRemove"></myUpload>
-                    </div>
-                </template>
-            </el-form-item>
-            <el-form-item  label="备注">
-              <el-input type="textarea" v-model="form.remark" autocomplete="off" placeholder="请输入备注"></el-input>
+            <template v-if="form.type == 1">
+                <div>
+                    <el-form-item  label="文献名称" prop="name">
+                        <el-input  v-model="form.name" autocomplete="off" placeholder="请输入文献名称"></el-input>
+                    </el-form-item>
+                    <el-form-item  label="公开日" prop="publicDate">
+                        <el-date-picker v-model="form.publicDate" value-format="yyyy-MM-dd" type="date"  placeholder="请选择时间" style="width: 100%;"></el-date-picker>
+                    </el-form-item>
+                    <el-form-item  label="作者" prop="authorName">
+                        <el-input  v-model="form.authorName" autocomplete="off" placeholder="请输入作者名称"></el-input>
+                    </el-form-item>
+                    <el-form-item  label="附件">
+                        <template>
+                            <div> 
+                                <myUpload :file-list="form.systemFile?[form.systemFile]:[]" :limit="1" :autoUpload="true" @on-change="onChange" @on-remove="onRemove"></myUpload>
+                            </div>
+                        </template>
+                    </el-form-item>
+                </div>
+            </template>
+            <template v-else>
+                <div>
+                    <el-form-item  label="专利号" prop="name">
+                        <el-input  v-model="form.name" autocomplete="off" placeholder="请输入专利号"></el-input>
+                    </el-form-item>
+                </div>
+            </template>
+            <el-form-item  label="备注" prop="description">
+              <el-input type="textarea" v-model="form.description" autocomplete="off" placeholder="请输入备注"></el-input>
             </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
           <el-button @click="handleClose">取 消</el-button>
-          <el-button type="primary" @click="submit" >确 定</el-button>
+          <el-button type="primary" :loading="btnLoading" @click="submit" >确 定</el-button>
         </span>
     </el-dialog>
   </div>
@@ -33,13 +44,18 @@
 <script>
 export default {
   components: {},
-  props: {},
+  props: {
+    projectId:{
+        default:0
+    }
+  },
   data() {
     return {
         form:{},
         showDialog:false,
+        btnLoading:false,
         rules: {
-          fileName:[{required : false , message:'请输入文献名称',trigger:'blur'}]
+            name:[{required : false , message:'请输入文献名称',trigger:'blur'}]
         }
     };
   },
@@ -59,39 +75,52 @@ export default {
     },
     //切换文件
     onChange(file, fileList){
-        if (file.guid && this.form.systemFileList && this.form.systemFileList.length > 0) {
-            let index = this.form.systemFileList.findIndex(item => {
-                return item.uid == file.uid
-            })
-            if (index != -1) {
-                this.form.systemFileList.splice(index, 1, file)
-            } else {
-                this.form.systemFileList.push(file.raw)
-            }
-        } else {
-            this.form.systemFileList.push(file.raw)
-        }
+        this.form.systemFile=file.raw
     },
     //移除文件
     onRemove(file, fileList){
-        if (file.guid) {
-            let a = this.form.systemFileList.findIndex(item => {
-                return item.guid == file.guid
-            })
-            this.form.systemFileList.splice(a, 1)
-        } else {
-            let a = this.form.systemFileList.findIndex(item => {
-                return item.uid == file.uid
-            })
-            this.form.systemFileList.splice(a, 1)
-        }
+        this.form.systemFile=null
     },
     //提交
     submit(){
         this.$refs.form.validate((valid) => {
           if (valid) {
-            this.$emit('save',true)
-            this.handleClose()
+            var guids = this.$commonJS.checkUploadFile([this.form.systemFile])
+            if(!guids){
+                return false
+            }
+            this.form.fileGuid = guids.length>0?guids[0]:''
+            this.form.projectId = this.projectId
+            this.btnLoading = true
+            if(this.form.id){
+                var a = {
+                    updateBatchLiteratureDTOs:[this.form],
+                    projectId:this.projectId
+                }
+                this.$api.updateCompareLiteratureBatch(a).then(response=>{
+                    if(response.code == 200){
+                        this.$emit('save',true)
+                        this.$message.success('编辑成功')
+                        this.btnLoading = false
+                        this.handleClose()
+                    }
+                }).catch(error=>{
+                    this.$message.error('修改失败')
+                    this.btnLoading = false
+                })
+            }else{
+                this.$api.addNotPatent(this.form).then(response=>{
+                    if(response.code == 200){
+                        this.$emit('save',true)
+                        this.$message.success('添加成功')
+                        this.btnLoading = false
+                        this.handleClose()
+                    }
+                }).catch(error=>{
+                    this.$message.error('添加失败')
+                    this.btnLoading = false
+                })
+            }
           } else {
             return false;
           }

+ 95 - 27
src/views/report/InvalidResponse/components/dialog/editFlowPath.vue

@@ -1,11 +1,11 @@
 <template>
     <div class="responseDialog">
-      <el-dialog  :title="form.id?'编辑' +title[form.processType]:'添加' +title[form.processType]" :visible.sync="showDialog" width="500px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
-        <el-form  :model="form" :rules="rules" ref="reportForm" label-width="120px" label-position="left" v-loading="loading">
-          <el-form-item :label="timeType[form.processType]">
-            <el-date-picker v-model="form.occuredTime" value-format="yyyy-MM-dd" type="date"  placeholder="请选择时间" style="width: 100%;"></el-date-picker>
+      <el-dialog  :title="(form.id?'编辑':'添加') +type.title" :visible.sync="showDialog" width="700px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
+        <el-form  :model="form" :rules="rules" ref="form" label-width="120px" label-position="left" v-loading="loading">
+          <el-form-item :label="type.time">
+            <el-date-picker v-model="form[type.timeField]" value-format="yyyy-MM-dd" type="date"  placeholder="请选择时间" style="width: 100%;"></el-date-picker>
           </el-form-item>
-          <template v-if="form.processType==0">
+          <template v-if="type.type==0">
             <el-form-item  label="地点">
               <el-input  v-model="form.address" autocomplete="off" placeholder="请输入地点"></el-input>
             </el-form-item>
@@ -13,6 +13,13 @@
               <el-input  v-model="form.participants" autocomplete="off" placeholder="请输入参与人"></el-input>
             </el-form-item>
           </template>
+          <template v-if="type.type ==1">
+            <div>
+                <el-form-item label="发文日">
+                    <el-date-picker v-model="form.invalidFileSendDate" value-format="yyyy-MM-dd" type="date"  placeholder="请选择时间" style="width: 100%;"></el-date-picker>
+                </el-form-item>
+            </div>
+          </template>
           <el-form-item label="附件:">
             <template>
               <div> 
@@ -21,7 +28,7 @@
             </template>
           </el-form-item>
           <el-form-item label="备注内容:">
-            <el-input type='textarea' v-model="form.remark" autocomplete="off" placeholder="请输入备注"></el-input>
+            <el-input type='textarea' v-model="form.description" autocomplete="off" placeholder="请输入备注"></el-input>
           </el-form-item>
         </el-form>
   
@@ -35,29 +42,51 @@
   
 <script>
   export default {
-    props:['reportId'],
+    props:{
+        projectId:{
+            default:0
+        }
+    },
     data() {
       return {
         showDialog: false,
         loading: false,
         form: {},
         rules: {},
-        Already: [],
         file: [],
         isFinish: false,
-        timeType: {
-          '1': '提出无效时间',
-          '2': '陈述答复时间',
-          '0': '口审时间',
-          '3': '无效决定时间',
-          '4': '发起诉讼时间',
-        },
-        title: {
-          '1': '无效请求书',
-          '2': '陈述意见书',
-          '0': '口审记录',
-          '3': '无效决定书',
-          '4': '行政诉讼书',
+        type:{},
+        types:{
+            0:{
+                type:'0',
+                title:'口审记录',
+                time:'口审时间',
+                timeField:'invalidRequestDate'
+            },
+            1:{
+                type:'1',
+                title:'无效请求书',
+                time:'提出无效时间',
+                timeField:'invalidRequestDate'
+            },
+            2:{
+                type:'2',
+                title:'陈述意见书',
+                time:'陈述答复时间',
+                timeField:'invalidRequestDate'
+            },
+            3:{
+                type:'3',
+                title:'无效决定书',
+                time:'无效决定时间',
+                timeField:'invalidRequestDate'
+            },
+            4:{
+                type:'4',
+                title:'行政诉讼书',
+                time:'发起诉讼时间',
+                timeField:'invalidRequestDate'
+            },
         },
         rules: {
           fileName:[{required : false , message:'请输入文献名称',trigger:'blur'}]
@@ -70,23 +99,59 @@
   
     },
     methods: {
-        open(form) {
+        open(type,form) {
+            this.type = this.types[type]
             this.form = JSON.parse(JSON.stringify(form))
-            
             this.showDialog=true
         },
         // 弹窗确定
         finish() {
-
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var guids = this.$commonJS.checkUploadFile(this.form.systemFileList)
+                    if(!guids){
+                      return false
+                    }
+                    this.form.projectId = this.projectId
+                    this.form.fileGuids = guids
+                    switch(this.type.type){
+                        case '0':
+                            break;
+                        case '1':
+                            this.addInvalidProcess()
+                            break;
+                        case '2':
+                            break;
+                        case '3':
+                            break;
+                        case '4':
+                            break;
+                    }
+                } else {
+                    return false;
+                }
+            });
+            
         },
         // 上传无效请求书
-        addInvalidProcess(formData) {
-            
+        addInvalidProcess() {
+          var api = ''
+          if(this.form.id){
+            api = 'updateInvalidRequestFile'
+          }else{
+            api = 'addInvalidRequestFile'
+          }
+          this.$api[api](this.form).then(response=>{
+            if(response.code == 200){
+              this.$emit('save',true)
+              this.handleClose()
+            }
+          }) 
         },
 
         // 关闭弹窗
         handleClose() {
-            
+            this.showDialog=false
         },
         //切换文件
         onChange(file, fileList){
@@ -100,6 +165,9 @@
                     this.form.systemFileList.push(file.raw)
                 }
             } else {
+              if(!this.form.systemFileList){
+                this.form.systemFileList = []
+              }
                 this.form.systemFileList.push(file.raw)
             }
         },

+ 82 - 0
src/views/report/InvalidResponse/components/draggable/index.vue

@@ -0,0 +1,82 @@
+<template>
+
+    <el-popover
+        placement="top-start"
+        title="排序"
+        width="200"
+        ref="draggablePopover"
+        trigger="click"
+    >
+    <el-radio-group v-model="radio" @input="change">
+    <draggable ref="el" v-model="tableData" @end="end">
+            <div v-for="item in tableData" :key="item.id" class="item">
+                <el-radio :label="item.id">{{ item.name }}</el-radio>
+            </div>
+    </draggable>
+</el-radio-group>
+    <span slot="reference">
+        <i class="el-icon-arrow-right" v-if="show" @click="show = !show"></i>
+        <i class="el-icon-arrow-down" v-else @click="show = !show"></i>
+    </span>
+  </el-popover>
+    
+
+</template>
+
+<script>
+import draggable from 'vuedraggable'
+export default {
+  components: {
+    draggable
+  },
+  props: {
+    list:{
+        default:[]
+    },
+    check:{
+        default:''
+    },
+
+  },
+  data() {
+    return {
+        show:true,
+        tableData:JSON.parse(JSON.stringify(this.list)),
+        radio:this.check
+    };
+  },
+  watch: {
+    list(){
+        this.tableData = JSON.parse(JSON.stringify(this.list))
+    },
+    check(){
+        this.radio = this.check
+    },
+  },
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    end(val){
+        var newIndex = val.newIndex
+        var oldIndex = val.oldIndex
+        this.$emit('update',newIndex,oldIndex)
+        // this.closePopover()
+    },
+    change(val){
+        this.$emit('change',val,this.check)
+        // this.closePopover()
+    },
+    //关闭弹窗
+    closePopover(){
+        this.$refs.draggablePopover.doClose()
+        this.show = true
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.item{
+    line-height: 30px;
+}
+</style>

+ 57 - 73
src/views/report/InvalidResponse/components/flowPath/flowPath.vue

@@ -1,7 +1,7 @@
 <template>
   <div >
     <!-- 无效流程 -->
-    <div style="display: flex;justify-content: end;margin-bottom: 10px;" v-if=" $reportPermission(reportId,[0,1])">
+    <div style="display: flex;justify-content: end;margin-bottom: 10px;" >
       <!-- <el-button type="primary" size="small" @click="addOption">添加陈述意见</el-button> -->
       <el-dropdown @command="handleCommand">
         <el-button type="primary" size="small">
@@ -20,24 +20,31 @@
     </div>
     <div >
       <el-timeline>
-        <el-timeline-item v-for="item in timelineList" :timestamp="item.date" placement="top">
+        <el-timeline-item v-for="item in timelineList" :timestamp="item.occurredTime" :key="item.id" placement="top">
           <el-card>
             <div>
-              <span>{{ timeType[item.processType] }}:</span><span>{{ item.occuredTime.slice(0,10) }}</span>
-              <div style="float: right;" v-if=" $reportPermission(reportId,[0,1])">
+              <span>{{ timeType[item.affairType] }}:</span><span>{{ item.occurredTime.slice(0,10) }}</span>
+              <div style="float: right;">
                   <span style="margin-right: 10px;"  @click="edit(item)"><el-link>编辑</el-link></span>
                   <span  @click="dele(item)"><el-link>删除</el-link></span>
               </div>
             </div>
-            <div v-if="item.processType==0">
+            
+            <div v-if="item.affairType==0">
               <p><span>地点:</span><span>{{ item.oralExam.address }}</span></p>
               <p><span>参与人:</span><span>{{ item.oralExam.participants }}</span></p>
             </div>
-            <div v-if="item.processType!=0" style="margin-top: 35px;">
-              <div v-if="item.reportFile" class="upload-file">
-                <div  style="margin:0;display:flex;justify-content:space-around;">
-                  <p style="margin:0;width:calc(100% - 40px);overflow: hidden;white-space: nowrap;text-overflow:ellipsis;cursor: pointer;">{{item.reportFile.name?item.reportFile.name+'.'+item.reportFile.suffix:item.reportFile.fileName}}</p> 
-                  <myMenu :data="item.reportFile" @delFile="delFile(item)" :isDelete="true" ></myMenu>
+            <div v-if="item.affairType==1">
+              <p><span>发文日:</span><span>{{ item.invalidRequestFileVO.invalidFileSendDate }}</span></p>
+            </div>
+            <div>
+              备注:{{ item.description }}
+            </div>
+            <div v-if="item.affairType!=0" style="margin-top: 10px;">
+              <div v-if="item.systemFileList" class="upload-file">
+                <div v-for="(file, index) in item.systemFileList" :key="index" style="margin:0;display:flex;justify-content:space-around;">
+                  <p style="margin:0;width:calc(100% - 40px);overflow: hidden;white-space: nowrap;text-overflow:ellipsis;cursor: pointer;">{{file.originalName}}</p> 
+                  <myMenu :data="file" @delFile="delFile(file,item)" :isDelete="true" ></myMenu>
                 </div>
               </div>
             </div>
@@ -46,7 +53,7 @@
       </el-timeline>
     </div>
 
-    <responseDialog ref="responseDialog" :reportId="reportId" @isFinish="handleFinish" :deleFile="deleFile"></responseDialog>
+    <responseDialog ref="responseDialog" :projectId="projectId" @save="getList"></responseDialog>
   </div>
 </template>
 
@@ -54,7 +61,7 @@
 import responseDialog from '../dialog/editFlowPath.vue'
 
 export default {
-  props:['reportId','signPatentNo'],
+  props:['projectId','signPatentNo'],
   components: {
     responseDialog,
   },
@@ -72,106 +79,83 @@ export default {
         '3': '无效决定时间',
         '4': '发起诉讼时间',
       },
-      deleFile: false,
-      // tableHeight:0,
     }
   },
   computed: {},
   watch: {},
   mounted() {
     this.getList()
-    // this.getHeight()
   },
   methods: {
-    //添加陈述意见
-    addOption(){
-      var queryParams = {
-        reportId:this.reportId,
-        signPatentNo:this.signPatentNo,
-        size: 1,
-        current: 1,
-      }
-      this.$api.queryProof(queryParams).then((res) => {
-        if (res.code==200) {
-          // this.tableData=res.data[0].id
-          var router = this.$router.resolve({
-            path: '/checkFileDetails/' +res.data[0].id,
-          })
-          let params = this.$s.getSession('params')
-          params.type=7
-          params.reportType=7
-          params.aid=res.data[0].id
-          params.signPatentNo=this.signPatentNo
-          params.reportId=this.reportId
-          this.$s.setSession('params', params)
-          window.open(router.href, '_blank');
-            }
-      }).catch((error) => {
-        
-      })
-      
-    },
-    // getHeight() {
-    //   let a = document.body.clientHeight
-    //   this.tableHeight=a
-    // },
+
     getList() {
-      this.queryParams.reportId = this.reportId
+      this.queryParams.projectId = this.projectId
       // 1正序
       this.queryParams.orderBy = 1
-      this.$api.queryInvalidProcess(this.queryParams).then((res) => {
+      this.$api.queryReportAffair(this.queryParams).then((res) => {
         if (res.code==200) {
-          this.timelineList = res.data
+          this.timelineList = res.data.data
         }
       }).catch((error) => {
         
       })
     },
-    handleFinish() {
-      this.getList()
-    },
+
     // 删除文件
-    delFile(item) {
-      // var index = this.form.files.findIndex(item => {
-      //   return item.id == id
-      // })
-      // if (index != -1) {
-      item.reportFile = {}
-      this.form = item
-      this.deleFile=!this.deleFile
-      //   this.submit()
-      // }
+    delFile(file,item) {
+      var index = item.systemFileList.findIndex(i=>{
+        return item.guid == file.guid
+      })
+      if(index !=-1){
+        item.systemFileList.splice(index,1)
+      }
+      var form = {
+        description:item.description,
+        systemFileList:item.systemFileList,
+        ...item[field[item.affairType]]
+      }
     },
     // 编辑
     edit(item) {
-      var form = JSON.parse(JSON.stringify(item))
-      this.$refs.responseDialog.open(form)
+      var field= {
+        1:'invalidRequestFileVO'
+      }
+      var form = {
+        id:item.id,
+        projectId:item.projectId,
+        affairType:item.affairType,
+        description:item.description,
+        systemFileList:item.systemFileList,
+        ...item[field[item.affairType]]
+      }
+      this.$refs.responseDialog.open(item.affairType,form)
     },
     // 删除
     dele(item) {
-      let a = {
-        id:item.id
-      }
+      var ids = [item.id]
       this.$confirm('确认删除本条数据吗?', '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          this.$api.deleteInvalidProcess(a).then((res) => {
+          this.$api.deleteReportAffair(ids).then((res) => {
             if (res.code==200) {
               this.$message.success('删除成功')
               this.getList()
             }
           })
         }).catch(err => {
+          this.$message.error('删除失败')
       })
       
     },
     // 添加
-    handleCommand(ev) {
-      var form = {}
-      form.processType = ev
-      this.$refs.responseDialog.open(form)
+    handleCommand(option) {
+      var form = {
+        systemFileList:[]
+      }
+      form.type = option
+      this.$refs.responseDialog.open(option,form)
     },
   },
 }

+ 6 - 2
src/views/report/InvalidResponse/components/flowPath/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="height_100">
-    <flow-Path></flow-Path>
+    <flow-Path :projectId="projectId"></flow-Path>
   </div>
 </template>
 
@@ -16,7 +16,11 @@ export default {
     };
   },
   watch: {},
-  computed: {},
+  computed: {
+    projectId(){
+        return this.$route.query.projectId
+    }
+  },
   created() {},
   mounted() {},
   methods: {},

+ 30 - 0
src/views/report/InvalidResponse/components/powerManage/index.vue

@@ -0,0 +1,30 @@
+<template>
+    <div class="height_100">
+      <power-Manage :projectId="projectId"></power-Manage>
+    </div>
+</template>
+  
+<script>
+  import powerManage from './powerManage.vue';
+  export default {
+    components: {
+        powerManage
+    },
+    props: {},
+    data() {
+      return {
+      };
+    },
+    watch: {},
+    computed: {
+      projectId(){
+          return this.$route.query.projectId
+      }
+    },
+    created() {},
+    mounted() {},
+    methods: {},
+  };
+  </script>
+  <style lang="scss" scoped>
+  </style>

+ 230 - 0
src/views/report/InvalidResponse/components/powerManage/powerManage.vue

@@ -0,0 +1,230 @@
+<template>
+  <div class="height_100">
+    <el-container>
+        <el-header>
+            <div class="head">
+                <el-button type="primary" size="small" v-if="isEdit" @click="cancel" class="margin-right_10">取消编辑</el-button>
+                <el-button type="primary" size="small" v-if="isEdit" @click="save" class="margin-right_10">保存</el-button>
+                <el-button type="primary" size="small" v-else @click="edit" class="margin-right_10">编辑</el-button>
+            </div>
+        </el-header>
+        <el-main v-DivHeight="getDivHeight">
+            <el-table v-loading="loading" :data="tableData" :maxHeight="tableHeight - 45" border :header-cell-style="{'text-align':'center'}" style="width: 100%">
+                <el-table-column prop="sysOrder"  label="序号" width="100" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            权要{{ scope.row.sysOrder+1 }}
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="content" label="原权要内容" > 
+                    <template slot-scope="scope">
+                        <div>
+                            <el-input type="textarea" v-model="scope.row.content" v-if="isEdit" @blur="changeClaimOptionType($event,scope.row)"></el-input>
+                            <span v-else>{{ scope.row.content }}</span> 
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="parentOrder" label="父权要" align="center"> 
+                    <template slot-scope="scope">
+                        <div>
+                            <el-select  v-if="isEdit" v-model="scope.row.parentOrderIds" multiple placeholder="请选择" @change="changeParentOrder($event,scope.row)" style="width:100%">
+                                <el-option
+                                    v-for="item in tableData"
+                                    :key="item.sysOrder"
+                                    :label="`权要${Number(item.sysOrder)+1}`"
+                                    :value="item.sysOrder+''">
+                                </el-option>
+                                <el-option
+                                    label="主权要"
+                                    value="-1">
+                                </el-option>
+                            </el-select>
+                            <span v-else>{{ getParentOrder(scope.row) }}</span> 
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="claimType" label="权要类型" align="center"> 
+                    <template slot-scope="scope">
+                        <div>
+                            <el-select  v-if="isEdit" v-model.number="scope.row.claimType" placeholder="请选择" @change="changeClaimOptionType($event,scope.row)" style="width:100%">
+                                <el-option
+                                    v-for="item in claimType"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value">
+                                </el-option>
+                            </el-select>
+                            <span v-else>{{ getClaimData(scope.row) }}</span> 
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" width="200" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            <el-button type="text" v-if="isEdit" @click="del(scope)">删除</el-button>
+                            <el-button type="text" v-if="isEdit" @click="add(scope)">在下方增加一行</el-button>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-main>
+    </el-container>
+
+    
+  </div>
+</template>
+
+<script>
+import { getTableHeight } from '@/views/components/mixins'
+export default {
+  components: {},
+  mixins:[getTableHeight],
+  props: {
+    projectId:{
+        default:0
+    }
+  },
+  data() {
+    return {
+        tableData:[],
+        loading:false,
+        isEdit:false,
+        claimType:[
+            {
+                value:1,
+                label:'主权利要求'
+            },
+            {
+                value:0,
+                label:'附属权利要求'
+            }
+        ]
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    //获取权要
+    getList(){
+        var params = {
+            projectId:this.projectId
+        }
+        this.loading = true
+        this.$api.queryClaim(params).then(response=>{
+            if(response.code == 200){
+                this.tableData = response.data.data
+                this.loading = false
+            }
+        }).catch(error=>{
+            this.tableData = []
+            this.loading = false
+        })
+    },
+    //编辑
+    edit(){
+        this.isEdit = true
+    },
+    //保存
+    save(){
+        var params = {
+            addClaimDTOs:this.tableData,
+            projectId:this.projectId
+        }
+        this.$api.addClaim(params).then(response=>{
+            if(response.code == 200){
+                this.isEdit = false
+                this.$message.success('保存成功')
+                this.getList()
+            }
+        }).catch(error=>{
+            this.$message.error('保存失败')
+        })
+    },
+    //取消编辑
+    cancel(){
+        this.isEdit = false
+        this.getList()
+    },
+    //删除当前一行
+    del(scope){
+        var index = scope.$index
+        this.tableData.splice(index,1)
+        this.updateClaimOrder(index-1,1)
+    },
+    //在下方新增一行
+    add(scope){
+        var index = scope.$index
+        var data = JSON.parse(JSON.stringify(scope.row))
+        data.sysOrder = Number(data.sysOrder) + 1
+        data.optionType = 2
+        data.content = ''
+        this.tableData.splice(index+1,0,data)
+        this.updateClaimOrder(index+1,2)
+    },
+    //更新权要序号
+    updateClaimOrder(index,type){
+        for(var i = index+1;i<this.tableData.length;i++){
+            if(type == 1){
+                this.tableData[i].sysOrder = Number(this.tableData[i].sysOrder) - 1
+            }else if(type == 2){
+                this.tableData[i].sysOrder = Number(this.tableData[i].sysOrder) + 1
+            }
+            if(this.tableData[i].optionType != 2){
+                this.tableData[i].optionType = 1
+            }
+        }
+    },
+    //切换父权要
+    changeParentOrder(value,row){
+        this.changeClaimOptionType()
+        row.parentOrder = row.parentOrderIds.join(',')
+    },
+    changeClaimOptionType(value,row){
+        if(row.optionType != 2){
+            row.optionType = 1
+        }
+    },
+    //获取父权要
+    getParentOrder(row){
+        if(row.claimType == 1){
+            this.$set(row,'parentOrderIds',['-1'])
+            return '主权要'
+        }
+        var arr = row.parentOrder.split(/,|,/)
+        this.$set(row,'parentOrderIds',arr)
+        // row.parentOrderIds = arr
+        var parentOrder = ''
+        arr.forEach((item,index) => {
+            var num = Number(item)+1
+            parentOrder = parentOrder + `权要${num}`
+            if(index != arr.length - 1){
+                parentOrder = parentOrder + '、'
+            }
+        });
+        return parentOrder
+    },
+    //获取权利要求类型
+    getClaimData(row){
+        var obj = this.claimType.find(item=>{
+            return item.value == row.claimType
+        })
+        if(obj){
+            return obj.label
+        }
+        return ''
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.head{
+    width:100%;
+    display: flex;
+    flex-direction: row-reverse;
+}
+</style>

+ 30 - 0
src/views/report/InvalidResponse/components/reasonsAndEvidence/index.vue

@@ -0,0 +1,30 @@
+<template>
+  <div class="height_100">
+    <reasonsAndEvidence :projectId="projectId"></reasonsAndEvidence>
+  </div>
+</template>
+
+<script>
+import reasonsAndEvidence from './reasonsAndEvidence.vue';
+export default {
+  components: {
+    reasonsAndEvidence
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {
+    projectId(){
+        return this.$route.query.projectId
+    }
+  },
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 148 - 0
src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="height_100">
+    <el-container>
+        <el-header>
+            <div class="head">
+                <el-dropdown split-button type="primary" size="small" @command="handleCommand"  @click="handleCommand('1')">
+                    <span>
+                        添加无效理由
+                    </span>
+                    <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item command="2">添加证据组合</el-dropdown-item>
+                        <el-dropdown-item command="3">添加复审委决定</el-dropdown-item>
+                        <el-dropdown-item command="4">添加法院意见</el-dropdown-item>
+                        <el-dropdown-item command="5">添加第二次无效证据</el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
+            </div>
+        </el-header>
+        <el-main>
+            <el-table :data="tableData" border style="width: 100%">
+                <el-table-column prop="content" label="权要/说明书/附图" width="120" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            {{scope.row.content}}
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="无效法条" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="type" label="证据组合" align="center"></el-table-column>
+                <el-table-column prop="publicDate" label="特征内容" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="authorName" label="无效证据" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            <el-input v-if="scope.row.type == 1" v-model="scope.row.authorName" placeholder="请输入权利人/作者"></el-input>
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="description" label="答辩意见" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                           
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="description" label="复审委意见" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                           
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="description" label="复审委决定" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                           
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            <el-button @click="remove(scope)" type="text" size="small">移除</el-button>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-main>
+    </el-container>
+    <add-InvalidResponse ref="addInvalidResponse" :projectId="projectId" @save="getList"></add-InvalidResponse>
+  </div>
+</template>
+
+<script>
+import addInvalidResponse from '../dialog/addInvalidResponse.vue';
+export default {
+  components: {
+    addInvalidResponse
+  },
+  props: {
+    projectId:{
+        default:0
+    }
+  },
+  data() {
+    return {
+        tableData:[]
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    this.getList()
+  },
+  methods: {
+ 
+    //获取无效理由和证据
+    getList(){
+
+    },
+    handleCommand(option){
+        switch(option){
+            case '1'://添加无效理由(无效法条)
+            case '2'://添加证据组合
+                this.addInvalidResponse(option)
+                break;
+            case '3'://添加复审委决定
+                break;
+            case '4'://添加法院意见
+                break;
+            case '5'://添加第二次无效证据
+                break;
+        }
+    },
+    //添加无效理由、证据组合
+    addInvalidResponse(type){
+        var titles = {
+            1:'添加无效理由',
+            2:'添加证据组合'
+        }
+        var form = {
+            statutesId:'',
+            claimIds:[]
+        }
+        this.$refs.addInvalidResponse.open(type,titles[type],form)
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.head{
+    width: 100%;
+    display: flex;
+    flex-direction: row-reverse;
+}
+</style>

+ 4 - 2
src/views/report/components/details/components/basicMessage.vue

@@ -145,7 +145,7 @@
       </el-form-item>
     </el-form>
 
-    <flow-Path></flow-Path>
+    <flow-Path :projectId="projectId"></flow-Path>
   </div>
 </template>
   
@@ -157,7 +157,9 @@ export default {
     flowPath
   },
   props: {
-    projectId: ''
+    projectId:{
+      default:0
+    }
   },
   data() {
     return {

+ 4 - 4
src/views/report/components/details/index.vue

@@ -121,14 +121,14 @@ export default {
         //无效应对
         {
           label: '权利要求管理',
-          name: "right",
-          path: 'report/avoid/components/direction.vue',
+          name: "powerManage",
+          path: 'report/InvalidResponse/components/powerManage/powerManage.vue',
           reportType: [7]
         },
         {
           label: '无效理由和证据',
-          name: "direction",
-          path: 'report/avoid/components/direction.vue',
+          name: "reasonsAndEvidence",
+          path: 'report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue',
           reportType: [7]
         },
         {

+ 15 - 0
src/views/report/components/dialog/addAndEditReport.vue

@@ -920,6 +920,7 @@ export default {
           this.$emit('getList', '新增成功')
           // response.data是创建成功后返回的报告id
           this.handleClose(response.data)
+          this.splitClaim(response.data)
         }
       }).catch(error => {
         // 如果报告未创建成功,则赋值
@@ -964,6 +965,20 @@ export default {
       this.isEndTime = true
     },
 
+    //拆分权利要求并拆分
+    splitClaim(id){
+      if(this.form.reportType != 7){
+        return false
+      }
+      var params = {
+        projectId : id
+      }
+      this.$api.splitClaim(params).then(response=>{
+        if(response.code == 200){
+
+        }
+      })
+    },
 
   },
 

+ 15 - 0
src/views/report/components/dialog/lookReport.vue

@@ -78,12 +78,27 @@ export default {
           this.$message.success('任务已处理')
           this.$emit('isSuccess', '成功')
           this.handleClose()
+          this.splitClaim()
         }
       })
     },
     handleClose() {
       this.showDialog = false
     },
+     //拆分权利要求并拆分
+     splitClaim(){
+      if(this.btn.value != 0 || this.row.reportType != 7){
+        return false
+      }
+      var params = {
+        projectId : this.row.projectId
+      }
+      this.$api.splitClaim(params).then(response=>{
+        if(response.code == 200){
+
+        }
+      })
+    },
   },
 }
 </script>