浏览代码

侵权报告协同

zhuhao 1 年之前
父节点
当前提交
e035dc2fd4

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

@@ -111,6 +111,24 @@ export default {
   getPatentNoByTaskId(params) {
     return axios.get("/xiaoshi/projectTask/getPatentNoByTaskId", {params});
   },
+  /**
+   * 保存侵权报告协同任务对比结果??
+   */
+  addTortTaskResult(data) {
+    return axios.post("/xiaoshi/tort/addTortTaskResult", data);
+  },
+  /**
+   * 查询侵权报告协同任务对比结果
+   */
+  getAllTortTaskResult(params) {
+    return axios.get("/xiaoshi/tort/getAllTortTaskResult", {params});
+  },
+  /**
+   * 侵权报告协同任务确认结果的保存
+   */
+  addFinalTortResult(data) {
+    return axios.post("/xiaoshi/tort/addFinalTortResult", data);
+  },
 
 
 

+ 1 - 1
src/router/index.js

@@ -313,7 +313,7 @@ const routes = [
             },
             component:() => import('@/views/report/tort/components/informationEntry/index.vue'),
           },
-          // 产品信息录入
+          // 确认结果以及协同人处理结果
           {
             path: '/tortTeamWork',
             name:"tortTeamWork",

+ 85 - 0
src/views/components/identificationCode/index.vue

@@ -0,0 +1,85 @@
+<template>
+  <!-- 外部人员输入识别码 -->
+  <div>
+    <div style="width:500px;height:300px;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;">
+      <img src="@/assets/logo-3.png" alt="" style="width:300px;margin:0 100px 30px">
+      <div style="background:white;height:150px;padding:20px;">
+        <p>请输入识别码:</p>
+        <div class="input">
+          <p class="code" style="display:inline-block;width:80%">
+            <el-input v-model="code" placeholder="请输入识别码" @input="change"></el-input>
+            <span v-if="show">{{ content }}</span>
+          </p>
+          <el-button type="primary" @click="submit" style="display:inline-block;margin-left:20px">提交</el-button>
+        </div>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+  data() {
+    return {
+      show: false,
+      content: "",
+      code: '',
+      btnLoading: "",
+      coordination: true,
+    }
+  },
+  methods: {
+    submit() {
+      if (this.code) {
+        this.$api.getTaskByCode({ code: this.code }).then(res => {
+          if (res.code == 200) {
+            // 进入专利列表页面
+            let a = this.$router.resolve({
+              path: '/tortTeamWork',
+              query: {
+                taskId: res.data.id,//任务id
+                projectId: res.data.projectId,//项目id
+                isTaskLook:2,//处理
+              }
+            })
+            this.$store.commit("COORDINATION", this.coordination)
+            window.open(a.href, "_blank")
+          } else {
+            document.getElementsByClassName("el-input__inner")[0].style.border = "1px solid red"
+            this.show = true;
+            this.content = "识别码错误"
+          }
+        }).catch(error => {
+          document.getElementsByClassName("el-input__inner")[0].style.border = "1px solid red"
+          this.show = true;
+          this.content = "识别码错误"
+        })
+
+      } else {
+        document.getElementsByClassName("el-input__inner")[0].style.border = "1px solid red"
+        this.show = true;
+        this.content = "请输入识别码"
+      }
+    },
+    change() {
+      document.getElementsByClassName("el-input__inner")[0].style.border = "1px solid #DCDFE6"
+      this.show = false;
+    },
+  }
+}
+</script>
+<style>
+.code {
+  position: relative;
+}
+
+.code span {
+  position: absolute;
+  top: calc(100% + 10px);
+  left: 0px;
+  color: red;
+  font-size: 12px;
+}
+</style>

+ 258 - 0
src/views/components/patent/components/customFields.vue

@@ -0,0 +1,258 @@
+<template>
+  <div class="patent-tree-filter">
+    <el-container>
+      <el-header class="patent-query-filter-header">
+        <!-- 已读、未读、全部 -->
+        <div class="query-read-status" style="margin: 0px 5px 0px 5px;" v-for="(item, key) in readList" :key="key"
+          :class="{ 'query-read-status_is-active': readStatus[key].value == returnData.read }"
+          @click="handleReadQuery(readStatus[key].value)">
+          <span class="a">(<span class="b">{{ item }}</span>)</span>
+          <span class="c">{{ readStatus[key].label }}</span>
+        </div>
+      </el-header>
+      <el-main class="patent-tree-filter-main">
+        <template v-if="field.length > 0">
+          <el-collapse v-model="activeNames" @change="handleChange" style="margin: 0px 5px 0px 5px;">
+            <el-collapse-item v-for="item in field" :title="item.name" :name="item.id" :key="item.id"
+              v-if="sourceQuery[item.id] && item.type != 2">
+              <div class="patent-query-filter-search">
+                <div class="patent-query-filter-search-input">
+                  <el-input v-if="item.type != 6" v-model="sourceQuery[item.id].name" size="small"
+                    placeholder="请输入查询内容"></el-input>
+                  <div v-else-if="!item.type" class="year-data-picker">
+                    <el-date-picker clear-icon size="small" v-model="sourceQuery[item.id].datePicker[0]" type="year"
+                      value-format="yyyy" placeholder="请选择时间"></el-date-picker>
+                    <span style="margin: 5px;">至</span>
+                    <el-date-picker clear-icon size="small" v-model="sourceQuery[item.id].datePicker[1]" type="year"
+                      value-format="yyyy" placeholder="请选择时间"></el-date-picker>
+                  </div>
+                </div>
+                <el-button v-if="item.type != 6" @click="handleSearch(item)" size="small" type="primary"
+                  icon="el-icon-search" circle></el-button>
+              </div>
+              <el-checkbox-group v-if="item.type != 6" v-model="sourceQuery[item.id].checked" @change="onChange(item.id)">
+                <div class="source-checkbox">
+                  <el-checkbox v-for="source in sourceData[item.id]" :label="source.key" :key="source.id">
+                    <span class="source-checkbox-label" :title="source.label">{{ source.label }}</span>
+                    <span class="source-checkbox-count">({{ source.count }})</span>
+                  </el-checkbox>
+                </div>
+              </el-checkbox-group>
+
+              <el-tree v-else @check-change="onChangeTree" :ref="item.id" :data="item.option" show-checkbox node-key="id"
+                check-strictly default-expand-all>
+                <div class="custom-filter-tree-node" slot-scope="{ node, data }">
+                  <span class="name">{{ data.name }}</span>
+                  <span class="total">({{ getCount(item.id, data.id) }})</span>
+                </div>
+              </el-tree>
+
+              <div class="patent-query-filter-search-bottom" v-if="item.type != 6">
+                <el-button type="success" size="small" @click="handleSelectAll(item)">全选</el-button>
+                <el-button type="danger" size="small" @click="handleSelectCancel(item)">取消</el-button>
+                <el-button v-if="!sourceQuery[item.id].isEnd" type="primary" size="small" @click="handleLoadMore(item)"
+                  :loading="sourceQuery[item.id].loading">加载更多</el-button>
+                <span v-else></span>
+              </div>
+            </el-collapse-item>
+
+          </el-collapse>
+        </template>
+
+        <template v-else>
+          <div class="no-data">暂无数据</div>
+        </template>
+      </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+// import { patentQueryMixins } from "@/views/task/components/mixins";
+// import { getTreeLastChildren, getTreeDataList } from "@/utils";
+
+export default {
+  // mixins: [patentQueryMixins],
+  // props:["reportId","taskId","isHidden"],
+  data() {
+    return {
+      // isHidden: true,// 是都显示已读、未读、全部
+      readList: [],//已读未读全部
+      activeNames: '',//展示哪一个面板
+      // 已读未读状态信息
+      readStatus: {
+        all: {
+          label: "全部",
+          value:"3"
+        },
+        read:  {
+          label: "已读",
+          value:"1"
+        },
+        noRead:  {
+          label: "未读",
+          value:"0"
+        },
+      },  
+      sourceQuery: [],
+      // 分页信息
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+    }
+  },
+  watch: {
+
+  },
+  mounted() {
+
+  },
+  methods: {
+    // 加载更多
+    handleLoadMore(){},
+    // 全选
+    handleSelectAll(){},
+    // 取消
+    handleSelectCancel(){},
+    // 点击节点发生的变化
+    onChangeTree(val){},
+    // 点击面版
+    handleChange(val){},
+    // 点击已读、未读、全部
+    handleReadQuery(val) { },
+
+  }
+}
+</script>
+
+<style lang="scss">
+.patent-tree-filter {
+  height: 100%;
+
+  .patent-tree-filter-main {
+    height: 100%;
+    padding: 10px 0;
+
+    .no-data {
+      text-align: center;
+      color: #6b6868;
+    }
+  }
+
+  .change-show-type {
+    font-size: 13px;
+
+    .change-show-type-info {
+      color: #6b6868;
+      padding-left: 10px;
+    }
+
+    .el-form-item__label {
+      padding: 0 !important;
+      line-height: 20px;
+    }
+
+    .el-form-item__content {
+      height: 30px;
+      line-height: 30px;
+    }
+  }
+}
+
+.patent-query-filter-search {
+  display: flex;
+}
+
+.patent-query-filter-search-input {
+  margin-right: 5px;
+}
+
+.patent-query-filter-search-bottom {
+  text-align: center;
+  margin-top: 10px;
+}
+
+.year-data-picker {
+  width: 200px;
+  display: flex;
+  justify-content: space-between;
+
+  .el-input__prefix {
+    display: none;
+  }
+
+  .el-input__inner {
+    padding: 10px;
+    text-align: center;
+  }
+}
+
+.year-data-input {
+  width: 100px;
+}
+
+.source-checkbox {
+  margin-top: 10px;
+
+  span {
+    display: inline-block;
+    font-size: 13px;
+  }
+
+  .el-checkbox {
+    display: block;
+  }
+
+  .el-checkbox__label {
+    position: relative;
+    top: 5px;
+  }
+
+  .source-checkbox-count {
+    color: #409EFF;
+    position: relative;
+    top: -4px;
+    left: 10px;
+  }
+
+  .source-checkbox-label {
+    max-width: 190px;
+    padding-left: 5px;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+  }
+}
+
+.query-read-status {
+  font-size: 12px;
+  height: 25px;
+  line-height: 25px;
+  cursor: pointer;
+  background: #dcdcdc;
+  border-radius: 3px;
+  padding: 0 5px;
+
+  span {
+    display: inline-block;
+  }
+
+  .a {}
+
+  .b {
+    text-align: center;
+    width: 30px;
+  }
+
+  .c {
+    padding-left: 5px;
+  }
+}
+
+.query-read-status_is-active {
+  background: #409EFF !important;
+  color: #ffffff !important;
+}
+</style>

+ 47 - 0
src/views/components/patent/components/index.vue

@@ -0,0 +1,47 @@
+<template>
+  <!-- 任务专利列表页面 -->
+  <div class="height_100">
+    <el-container>
+      <el-aside width="200px" class="height_100">
+        <customFields></customFields>
+      </el-aside>
+      <el-container>
+        <el-header>
+
+        </el-header>
+        <el-main>
+
+        </el-main>
+        <el-footer>
+
+        </el-footer>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import customFields from './customFields.vue';
+export default {
+  props: {
+    taskId:'',
+  },
+  components: {
+    customFields,
+  },
+  data() {
+    return {
+
+    }
+  },
+  computed: {},
+  mounted() {
+
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 24 - 0
src/views/components/patent/index.vue

@@ -0,0 +1,24 @@
+<template>
+  <div>
+
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  computed: {},
+  mounted() {
+
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 1 - 1
src/views/report/avoid/components/avoidDirection.vue

@@ -9,7 +9,7 @@
       <el-main style="padding:20px;height: calc(100% - 100px);">
         <!-- 拆分特征公用组件 -->
         <splitPage style="height: calc(100% - 103px);overflow: auto;" :tableData="tableData"
-          :word="{ patentNo: patentNo, projectId: projectId }" :columnList="columnList" @splitSelect="splitSelect"
+        :patentNo="patentNo" :projectId="projectId" :columnList="columnList" @splitSelect="splitSelect"
           @isSave="isSave"></splitPage>
 
         <!-- 回避设计总体方向 -->

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

@@ -68,14 +68,14 @@ export default {
         },
         {
           label:'标的产品信息',
-          name:'productMessage',
-          path:'report/components/details/components/splitDetails.vue',
+          name:'informationEntry',
+          path:'report/tort/components/informationEntry/indexMenu.vue',
           reportType:[3,4]
         },
         {
           label:'专利与产品关联比对',
           name:'productMessage',
-          path:'report/components/details/components/splitDetails.vue',
+          path:'report/tort/components/tortContrast.vue',
           reportType:[3,4]
         },
         {
@@ -106,7 +106,8 @@ export default {
       var menu = menus.filter(item=>{
         return item.reportType.indexOf(Number(this.reportType))!=-1
       })
-        this.menuList.splice(1,0,...menu)
+      this.menuList.splice(1, 0, ...menu)
+        console.log(this.menuList);
         this.getComponents()
     },
     getComponents(){

+ 4 - 11
src/views/report/components/dialog/teamwork.vue

@@ -86,15 +86,8 @@ export default {
   mixins: [personnelLoading],
   props: {
     // 信息(patentNo,reportId)
-    word: {
-      type: Object,
-      default: () => {
-        return {
-          patentNo: '',
-          projectId: ''
-        }
-      }
-    },
+    patentNo:'',
+    projectId:'',
   },
   data() {
     //校验协同人是否为空
@@ -184,7 +177,7 @@ export default {
       this.isEndTime=false
       this.$refs.clientForm.validate((valid) => {
         if (valid) {
-          this.form.projectId=this.word.projectId//项目id
+          this.form.projectId=this.projectId//项目id
           // 判断是否为外部人员
           if (this.form.handler.includes('@')) {//是邮箱为1
             this.form.handlerType = 1
@@ -192,10 +185,10 @@ export default {
             this.form.handlerType = 0
           }
           this.people()
-          console.log(this.form);
           this.$api.addTortTask(this.form).then(res => {
             if (res.code == 200) {
               this.$message.success('发送协同任务成功')
+              this.close()
             }
           })
         }

+ 78 - 26
src/views/report/components/splitPage/splitPage.vue

@@ -35,7 +35,7 @@
           <div>
             <slot name="handleRight"></slot>
           </div>
-          <div v-if="isEdit || isPartEdit">
+          <div v-if="isEdit || isResult!=2">
             <el-button @click="save" type="primary">保存</el-button>
           </div>
         </div>
@@ -43,18 +43,18 @@
       <el-main>
         <el-table :data="tableData2" border ref="table" height="calc(100%)" :span-method="objectSpanMethod"
           v-loading="loading" style="width: 100%">
-          <el-table-column prop="pRightName" label="权要" width="180" align="center">
+          <el-table-column prop="pRightName" label="权要" align="center">
             <template slot-scope="scope">
               <!-- <el-tooltip class="item" effect="dark"
                 :content="rightList.length > 0 ? rightList.filter(item => { return item.sort == scope.row.rightSort })[0].content : '暂无数据'"
                 placement="top"> -->
-                <el-tooltip class="item" effect="dark" :content="scope.row.pContent" placement="top">
+              <el-tooltip class="item" effect="dark" :content="scope.row.pContent" placement="top">
                 <span>{{ scope.row.pRightName }}</span>
               </el-tooltip>
             </template>
           </el-table-column>
 
-          <el-table-column prop="content" label="特征" width="300" align="center">
+          <el-table-column prop="content" label="特征" min-width="300" align="center">
             <template slot-scope="scope">
               <div v-if="isEdit">
                 <el-checkbox-group v-model="checkList">
@@ -80,28 +80,34 @@
           </el-table-column>
 
           <!-- 父组件传递栏位 -->
-          <el-table-column v-for="item in columnList" :key="item.value" :prop="item.value" :label="item.name"
+          <el-table-column v-for="(item,index) in columnList" :key="index" :prop="item.value" :label="item.name"
             align="center">
 
             <template slot-scope="scope">
 
               <div v-if="item.type == 'String'">
-                <div v-if="isEdit || isPartEdit">
-                  <myRichText style="text-align:left" v-model="scope.row[item.value]" :placeholder="'请输入' + item.name">
+                <div v-if="isEdit || item.disabled">
+                  <myRichText style="text-align:left" :value="getColumnData(scope.row,item)" @input="getValue($event,scope.row,item)"  :placeholder="'请输入' + item.name">
                   </myRichText>
                 </div>
-                <div v-else v-html="scope.row[item.value]"></div>
+                <div v-else v-html="getColumnData(scope.row,item)"></div>
               </div>
 
-              <div v-else>
-                <div v-if="isEdit || isPartEdit">
-                  <el-select v-model="scope.row[item.value]" placeholder="请选择">
+              <div v-else-if="item.type == 'Array'">
+                <div v-if="isEdit || item.disabled">
+                  <el-select :value="getColumnData(scope.row,item)" @input="getValue($event,scope.row,item)" placeholder="请选择">
                     <el-option v-for="optionItem in item.options" :key="optionItem.value" :label="optionItem.label"
                       :value="optionItem.value">
                     </el-option>
                   </el-select>
                 </div>
-                <div v-else v-html="scope.row[item.value]"></div>
+                <div v-else v-html="getColumnData(scope.row,item)"></div>
+              </div>
+              <div v-if="item.type == 'btn'">
+                <span v-for="(btn,index) in item.btn" :key="index">
+                  <component :is="btn.type" @click="$emit('changeResult',scope.row)">{{ btn.name }}</component>  
+                </span>
+                
               </div>
 
             </template>
@@ -121,15 +127,8 @@
 export default {
   props: {
     // 信息(patentNo,reportId)
-    word: {
-      type: Object,
-      default: () => {
-        return {
-          patentNo: '',
-          projectId: ''
-        }
-      }
-    },
+    patentNo: '',
+    projectId: '',
     // 数据源
     tableData: {
       type: Array,
@@ -149,10 +148,7 @@ export default {
         return []
       }
     },
-    isPartEdit: {
-      type: Boolean,
-      default: true
-    }
+    isResult:'',
   },
   data() {
     return {
@@ -190,12 +186,68 @@ export default {
   async mounted() {
     //获取权要
     this.getRight()
+    if (this.tableData.length > 0) {
+      this.typeSelect(this.showType)
+    }
   },
   methods: {
+    // 获取数据
+    getColumnData(row, field) {
+      if (typeof field.value == 'string') {
+        return row[field.value]
+      } else {
+        var str = row
+        if (field.value && field.value.length > 0) {
+          try {
+            field.value.forEach(item => {
+              if (!str[item]) {
+                throw Error();
+              }
+              str = str[item]
+            })
+          }
+          catch(e) {
+            return ''
+          }
+          
+        }
+        return str
+      }
+      
+    },
+    getValue(value,row,field) {
+      if (typeof field.value == 'string') {
+         row[field.value] = value
+      } else {
+        var str = row
+        if (field.value && field.value.length > 0) {
+          try {
+            field.value.forEach((item, index) => {
+              if (index == field.value.length - 1) {
+                str[item] = value
+                return
+              } else {
+                if (!str[item]) {
+                    str[item] = {}
+                }
+              }
+              str = str[item]
+            })
+          }
+          catch(e) {
+            return ''
+          }
+          
+        }
+      }
+    },
     //获取权要
     getRight() {
+      if (this.rightList.length > 0) {
+        return false
+      }
       let params = {
-        patentNo: this.word.patentNo,
+        patentNo: this.patentNo,
       }
       this.$api.getPatentRight(params).then(res => {
         if (res.code == 200) {

+ 4 - 4
src/views/report/tort/components/informationEntry/index.vue

@@ -1,8 +1,8 @@
 <template>
   <div>
-    <informationEntry :word="{ patentNo: patentNo, projectId: projectId }" :reportType="reportType" :isSave="isSave">
+    <informationEntry :patentNo="patentNo" :projectId="projectId" :reportType="reportType" :isSave="isSave">
       <div slot="save">
-        <el-button type="primary" @click="isSave">保存</el-button>
+        <el-button type="primary" @click="save">保存</el-button>
       </div>
     </informationEntry>
   </div>
@@ -27,14 +27,14 @@ export default {
       return this.$route.query.reportId
     },
     reportType() {
-      return this.$route.query.reportId
+      return this.$route.query.reportType
     }
   },
   mounted() {
 
   },
   methods: {
-    isSave() {
+    save() {
       this.isSave = !this.isSave
     },
   },

+ 45 - 0
src/views/report/tort/components/informationEntry/indexMenu.vue

@@ -0,0 +1,45 @@
+<template>
+  <div>
+    <informationEntry :patentNo="patentNo" :projectId="projectId" :reportType="reportType" :isSave="isSave" :isFormEdit="isEdit" @handleEdit="handleEdit">
+      <div  slot="save" >
+        <el-button v-if="isEdit" type="primary" @click="save">保存</el-button>
+        <el-button v-else @click="edit">编辑</el-button>
+      </div>
+      <div  slot="edit" >
+        
+      </div>
+    </informationEntry>
+  </div>
+</template>
+
+<script>
+import informationEntry from './informationEntry.vue';
+export default {
+  props:['patentNo','projectId','reportType'],
+  components: {
+    informationEntry
+  },
+  data() {
+    return {
+      isSave: false,
+      isEdit:false
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    handleEdit(val) {
+      this.isEdit=val
+    },
+    edit() {
+      this.isEdit = !this.isEdit
+    },
+    save() {
+      this.isSave = !this.isSave
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 16 - 20
src/views/report/tort/components/informationEntry/informationEntry.vue

@@ -20,7 +20,7 @@
           <el-input v-model="form.productDescription" placeholder="请输入标的说明"></el-input>
         </el-form-item>
 
-        <el-form-item v-if="reportType == 4" label="调查区域:" prop="surveyArea">
+        <el-form-item v-if="reportType == 3" label="调查区域:" prop="surveyArea">
           <el-input v-model="form.surveyArea" placeholder="请输入调查区域"></el-input>
         </el-form-item>
         <el-form-item label="产品图:">
@@ -42,7 +42,7 @@
             </span>
           </el-upload>
         </el-form-item>
-        <el-form-item v-if="reportType == 4" label="检索策略:">
+        <el-form-item v-if="reportType == 3" label="检索策略:">
           <el-input v-model="form.searchPolicy" placeholder="请输入检索策略"></el-input>
         </el-form-item>
         <el-form-item label="检索截止日期:">
@@ -50,7 +50,7 @@
             placeholder="请选择检索截止日期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item v-if="reportType == 4" label="关注企业/发明人/技术方向:">
+        <el-form-item v-if="reportType == 3" label="关注企业/发明人/技术方向:">
           <el-input v-model="form.focusInformation" placeholder="请输入关注企业/发明人/技术方向"></el-input>
         </el-form-item>
         <el-form-item label="备注:">
@@ -65,7 +65,7 @@
         <el-form-item label="标的说明:">
           <span>{{ form.productDescription }}</span>
         </el-form-item>
-        <el-form-item v-if="reportType == 4" label="调查区域:" prop="surveyArea">
+        <el-form-item v-if="reportType == 3" label="调查区域:" prop="surveyArea">
           <span>{{ form.surveyArea }}</span>
         </el-form-item>
         <el-form-item label="产品图:">
@@ -87,13 +87,13 @@
             </span>
           </el-upload>
         </el-form-item>
-        <el-form-item v-if="reportType == 4" label="检索策略:">
+        <el-form-item v-if="reportType == 3" label="检索策略:">
           <span>{{ form.searchPolicy }}</span>
         </el-form-item>
         <el-form-item label="检索截止日期:">
           <span>{{ form.deadLine }}</span>
         </el-form-item>
-        <el-form-item v-if="reportType == 4" label="关注企业/发明人/技术方向:">
+        <el-form-item v-if="reportType == 3" label="关注企业/发明人/技术方向:">
           <span>{{ form.focusInformation }}</span>
         </el-form-item>
         <el-form-item label="备注:">
@@ -109,15 +109,8 @@
 export default {
   props: {
     // 信息(patentNo,reportId)
-    word: {
-      type: Object,
-      default: () => {
-        return {
-          patentNo: '',
-          projectId: ''
-        }
-      }
-    },
+    patentNo: '',
+    projectId: '',
     // 报告类型
     reportType: '',
     // 是否可以编辑
@@ -126,7 +119,7 @@ export default {
       default: true
     },
     isSave: {
-      type:Boolean
+      type: Boolean
     }
   },
   data() {
@@ -145,7 +138,7 @@ export default {
   },
   watch: {
     isSave(val) {
-      this.isSave()
+      this.isSaveForm()
     },
   },
   mounted() {
@@ -159,7 +152,8 @@ export default {
     // 获取数据
     getList() {
       let params = {
-        ...this.word,
+        patentNo: this.patentNo,
+        projectId: this.projectId,
       }
       this.$api.getProductMessage(params).then(res => {
         if (res.code == 200) {
@@ -175,16 +169,18 @@ export default {
       })
     },
     // 保存
-    isSave() {
+    isSaveForm() {
       // 判断文件是否都上传完毕
       this.$commonJS.allUploadFile(this.form)
       let params = {
-        ...this.word,
+        patentNo: this.patentNo,
+        projectId: this.projectId,
         ...this.form
       }
       this.$api.addProductMessage(params).then(res => {
         if (res.code == 200) {
           this.$message.success('保存成功')
+          this.$emit('handleEdit',false)
         }
       })
     },

+ 167 - 49
src/views/report/tort/components/tortContrast.vue

@@ -10,7 +10,7 @@
           </div>
         </el-tooltip>
         <el-tooltip content="协同办公" placement="right">
-          <div @click="coordination" class="iconBtn">
+          <div v-if="!taskId" @click="coordination" class="iconBtn">
             <i class="el-icon-s-custom"></i>
           </div>
         </el-tooltip>
@@ -36,18 +36,21 @@
           </el-header>
           <el-main style="padding-top: 0px !important">
 
-            <component :is="viewType" style="height: calc(100% - 0px);overflow: auto;" :tableData="tableData"
-              :word="{ patentNo: patentNo, projectId: projectId }" :reportType="reportType" :columnList="columnList"
-              @splitSelect="splitSelect" @isSave="isSave"></component>
+            <component :is="viewType" style="height: calc(100% - -10px);overflow: auto;" :tableData="tableData"
+              :patentNo="patentNo" :projectId="projectId" :reportType="reportType" :columnList="columnList"
+              @splitSelect="splitSelect" @isSave="isSave" :isEdit="taskId ? false : true" :isResult="isResult" @changeResult="changeResult"
+              ></component>
 
           </el-main>
         </el-container>
 
-        <div v-show="look" slot="right"></div>
+        <div v-show="look" slot="right" style="height: 100%;width:100%;">
+          <!-- <patentDetailsPage :projectId="projectId"></patentDetailsPage> -->
+        </div>
       </myView>
     </div>
 
-    <teamwork ref="teamwork" :word="{ patentNo: patentNo, projectId: projectId }"></teamwork>
+    <teamwork ref="teamwork" :patentNo="patentNo" :projectId="projectId"></teamwork>
   </div>
 </template>
 
@@ -56,13 +59,16 @@ import { patentDetails } from '../../components/mixins/index2'
 import splitPage from '../../components/splitPage/splitPage.vue'
 import informationEntry from './informationEntry/informationEntry.vue'
 import teamwork from '../../components/dialog/teamwork.vue'
+import patentDetailsPage from '@/views/project/patentDetails/components/patentDetails.vue'
 export default {
-  props: ['patentNo', 'projectId', 'reportType'],
+  //isTaskLook只有处理或查看协同时传递//isConfirm只有确认协同结果时传递
+  props: ['patentNo', 'projectId', 'reportType', 'taskId', 'isResult'],
   mixins: [patentDetails],
   components: {
     splitPage,
     informationEntry,
     teamwork,
+    patentDetailsPage,
   },
   data() {
     return {
@@ -75,12 +81,12 @@ export default {
         {
           name: "标的说明(可粘贴图片)",
           type: "String",
-          value: "targetDescription",
+          value: ['originalRecordVO','targetDescription'],
         },
         {
           name: "比对结果",
           type: "Array",
-          value: "compareResult",
+          value: ['originalRecordVO','compareResult'],
           options: [
             {
               value: 0,
@@ -100,78 +106,190 @@ export default {
         {
           name: "比对说明(可粘贴图片)",
           type: "String",
-          value: "compareDescription",
+          value: ['originalRecordVO','compareDescription'],
         },
       ],
       // 查看详情
-      look: false
+      look: false,
     }
   },
   mounted() {
+    
+    this.getColumn()
     this.getList()
   },
   methods: {
+    getColumn() {
+      var a = {
+        1: '处理协同结果',
+        2: '查看协同结果',
+        3: '确认结果'
+      }
+      // var b = 3
+      var  confirmColumn= [
+      {
+          name: "协同标的说明(可粘贴图片)",
+          type: "String",
+          value: ['originalRecordVO','targetDescription'],
+        },
+        {
+          name: "协同比对结果",
+          type: "Array",
+          value:['originalRecordVO','compareResult'],
+          options: [
+            {
+              value: 0,
+              label: '字面相同'
+            }, {
+              value: 1,
+              label: '等同'
+            }, {
+              value: 2,
+              label: '不相同'
+            }, {
+              value: 3,
+              label: '待确定'
+            }
+          ],
+        },
+        {
+          name: "协同比对说明(可粘贴图片)",
+          type: "String",
+          value: ['originalRecordVO','compareDescription'],
+        },
+      ]
+      switch (this.isResult) {
+        case '1':
+          this.columnList.forEach(item => {
+            item.disabled = true
+          })
+          break;
+        case '2':
+          this.columnList = this.columnList.concat(confirmColumn)
+          break;
+        case '3':
+          this.columnList.forEach(item => {
+            item.disabled = true
+          })
+          confirmColumn.push(
+            {
+              type: 'btn',
+              name:'操作',
+              btn: [
+                {
+                  type: 'elButton',
+                  name:'确认结果',
+                }
+              ]
+            }
+          )
+          this.columnList = this.columnList.concat(confirmColumn)
+          break;
+      }
+    },
+    changeResult(row) {
+      console.log(row)
+    },
     // 查看详情
     lookDetails() {
       this.look = !this.look
     },
     // 协同办公
-    coordination() { 
+    coordination() {
       this.$refs.teamwork.open()
     },
     // 返回
-    goBack() { },
+    goBack() { 
+      if (this.taskId) {
+        this.$router.replace({
+          path: '/myTask',
+        })
+      } else {
+        this.$router.replace({
+          path: '/AllReport',
+        })
+      }
+    },
     // 切换产品信息
     handleSwitch() {
-      this.viewType == 'splitPage' ? this.viewType = 'informationEntry' : this.viewType = 'splitPage'
+      this.viewType = (this.viewType == 'splitPage' ? 'informationEntry' : 'splitPage')
     },
     // 保存结果
     isSave(val) {
-      let params = {
-        projectId: this.projectId,
-        tortDTOS: val,
-      }
-      this.$api.addTortCompareRecord(params).then(res => {
-        if (res.code == 200) {
-          this.$message.success('保存成功')
+      if (this.taskId) {//确认协同结果保存
+      } else if (this.taskId && this.isTaskLook) {//处理或查看协同结果保存
+        let params = {
+          taskId: this.taskId,
+          tortDTOS: val,
         }
-      })
+        this.$api.addTortTaskResult(params).then(res => {
+          if (res.code == 200) {
+            this.$message.success('保存成功')
+          }
+        })
+      } else {//侵权报告拆分保存
+        let params = {
+          projectId: this.projectId,
+          tortDTOS: val,
+        }
+        this.$api.addTortCompareRecord(params).then(res => {
+          if (res.code == 200) {
+            this.$message.success('保存成功')
+          }
+        })
+      }
     },
     // 拆分信息
     splitSelect(split) {
       this.getList(split, true)
     },
+    // 获取数据
     getList(split = { splitType: '1', splitBy: '2' }, ifReSplit = false) {
-      let params = {
-        ifReSplit: ifReSplit,
-        projectId: Number(this.projectId),
-        ...split,//拆分条件
+      let params = {}
+      if (this.taskId) {//确认协同结果,处理协同
+        params = {
+          taskId: this.taskId
+        }
+        this.$api.getAllTortTaskResult(params).then(res => {
+          if (res.code == 200) {
+            this.getInterface(res)
+          }
+        })
+      }else {//侵权报告拆分
+        params = {
+          ifReSplit: ifReSplit,
+          projectId: Number(this.projectId),
+          ...split,//拆分条件
+        }
+        this.$api.getTortCompareRecord(params).then(res => {
+          if (res.code == 200) {
+            this.getInterface(res)
+          }
+        })
       }
-      this.$api.getTortCompareRecord(params).then(res => {
-        if (res.code == 200) {
-          this.wholeContent = res.data.wholeContent
-          if (res.data.tortRightVOS.length > 0) {
-            var data = []
-            res.data.tortRightVOS.forEach(RightVosItem => {
-              if (RightVosItem.tortVOS.length > 0) {
-                RightVosItem.tortVOS.forEach(FeaturesItem => {
-                  FeaturesItem.pRightName = RightVosItem.rightName
-                  FeaturesItem.pSignPatentNo = RightVosItem.signPatentNo
-                  FeaturesItem.pPatentNo = RightVosItem.patentNo
-                  FeaturesItem.pContentOut = RightVosItem.contentOut
-                  FeaturesItem.pContent = RightVosItem.content
-                  FeaturesItem.pProjectId = RightVosItem.projectId
-                  FeaturesItem.pType = RightVosItem.type
-                  FeaturesItem.pSort = RightVosItem.sort
-                  this.hasOwn(FeaturesItem)
-                  data.push(FeaturesItem)
-                })
-              }
+    },
+    // 处理获取的数据
+    getInterface(res) {
+      if (res.data.tortRightVOS.length > 0) {
+        var data = []
+        res.data.tortRightVOS.forEach(RightVosItem => {
+          if (RightVosItem.tortVOS.length > 0) {
+            RightVosItem.tortVOS.forEach(FeaturesItem => {
+              FeaturesItem.pRightName = RightVosItem.rightName
+              FeaturesItem.pSignPatentNo = RightVosItem.signPatentNo
+              FeaturesItem.pPatentNo = RightVosItem.patentNo
+              FeaturesItem.pContentOut = RightVosItem.contentOut
+              FeaturesItem.pContent = RightVosItem.content
+              FeaturesItem.pProjectId = RightVosItem.projectId
+              FeaturesItem.pType = RightVosItem.type
+              FeaturesItem.pSort = RightVosItem.sort
+              this.hasOwn(FeaturesItem)
+              data.push(FeaturesItem)
             })
-            this.tableData = data
           }
-        }
-      })
+        })
+        this.tableData = data
+      }
     },
     hasOwn(item) {
       if (!item.hasOwnProperty("explainText")) {

+ 13 - 8
src/views/report/tort/components/tortTeamWork/index.vue

@@ -1,18 +1,20 @@
 <template>
+  <!-- 确认结果以及协同人处理结果 -->
   <div>
-    <tortTeamWork :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></tortTeamWork>
+    <!-- <tortTeamWork :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></tortTeamWork> -->
+    <tortContrast :patentNo="patentNo" :projectId="projectId" :taskId="taskId" :isResult="isResult"></tortContrast>
   </div>
 </template>
 
 <script>
-import tortTeamWork from './tortTeamWork.vue'
+import tortContrast from '../tortContrast.vue'
 export default {
   components: {
-    tortTeamWork
+    tortContrast
   },
   data() {
     return {
-      patentNo:'',
+      patentNo:null,
     }
   },
   computed: {
@@ -25,16 +27,19 @@ export default {
     taskId() {
       return this.$route.query.taskId
     },
+    isResult() {
+      return this.$route.query.isResult
+    },
   },
-  mounted() {
-    this.getPatentNo()
+  async mounted() {
+    await this.getPatentNo()
   },
   methods: {
-    getPatentNo() {
+    async getPatentNo() {
       let params = {
         taskId:this.taskId
       }
-      this.$api.getPatentNoByTaskId(params).then(res => {
+      await this.$api.getPatentNoByTaskId(params).then(res => {
         if (res.code == 200) {
           this.patentNo = res.data
         }

+ 0 - 192
src/views/report/tort/components/tortTeamWork/tortTeamWork.vue

@@ -1,192 +0,0 @@
-<template>
-  <div class="tortTeamWork height_100">
-    <div class="height_100" style="display: flex;">
-      <div class="iconBtnList">
-        <el-tooltip content="返回" placement="right">
-          <div @click="goBack" class="iconBtn">
-            <i class="el-icon-back"></i>
-          </div>
-        </el-tooltip>
-        <el-tooltip content="查看详情" placement="right">
-          <div @click="lookDetails" class="iconBtn">
-            <i class="el-icon-c-scale-to-original"></i>
-          </div>
-        </el-tooltip>
-      </div>
-      <myView style="height: 100%;width: calc(100% - 50px);" position="row" :showView="look">
-        <el-container slot="left">
-          <el-header class="headerBtn">
-            <div style="width: 100%;display:flex;justify-content: space-between;align-items: center;">
-              <div>
-                <p v-if="viewType == 'splitPage'"> 标的专利号:<el-link type="primary" @click="toPatentDetails(patentNo)">{{
-                  patentNo }}</el-link> </p>
-              </div>
-              <div>
-                <el-link type="primary" @click="handleSwitch">{{ viewType == 'splitPage' ? '切换产品信息' : '切换产品特征'
-                }}</el-link>
-              </div>
-            </div>
-          </el-header>
-          <el-main style="padding-top: 0px !important">
-
-            <component :is="viewType" style="height: calc(100% - 0px);overflow: auto;" :tableData="tableData" :isEdit="false"
-              :word="{ patentNo: patentNo,projectId:projectId }" :columnList="columnList"
-              @isSave="isSave"></component>
-
-          </el-main>
-        </el-container>
-
-        <div v-show="look" slot="right"></div>
-      </myView>
-    </div>
-  </div>
-</template>
-
-<script>
-import splitPage from '../../../components/splitPage/splitPage.vue'
-import informationEntry from '../informationEntry/informationEntry.vue'
-export default {
-  props: ['patentNo','projectId','taskId'],
-  components: {
-    splitPage,
-    informationEntry,
-  },
-  data() {
-    return {
-      // 视图
-      viewType: 'splitPage',
-      // 数据
-      tableData: [],
-      // 栏位
-      columnList: [
-        {
-          name: "标的说明(可粘贴图片)",
-          type: "String",
-          value: "targetDescription",
-        },
-        {
-          name: "比对结果",
-          type: "Array",
-          value: "compareResult",
-          options: [
-            {
-              value: 0,
-              label: '字面相同'
-            }, {
-              value: 1,
-              label: '等同'
-            }, {
-              value: 2,
-              label: '不相同'
-            }, {
-              value: 3,
-              label: '待确定'
-            }
-          ],
-        },
-        {
-          name: "比对说明(可粘贴图片)",
-          type: "String",
-          value: "compareDescription",
-        },
-      ],
-      // 查看详情
-      look: false
-    }
-  },
-  computed: {},
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 查看详情
-    lookDetails() {
-      this.look = !this.look
-    },
-    // 返回
-    goBack() { },
-    // 切换产品信息
-    handleSwitch() {
-      this.viewType == 'splitPage' ? this.viewType = 'informationEntry' : this.viewType = 'splitPage'
-    },
-    // 保存对比结果
-    isSave(val) {
-      let params = {
-        projectId: this.projectId,
-        tortDTOS: val,
-      }
-      this.$api.addTortCompareRecord(params).then(res => {
-        if (res.code == 200) {
-          this.$message.success('保存成功')
-        }
-      })
-    },
-    getList(split = { splitType: '1', splitBy: '2' }, ifReSplit = false) {
-      let params = {
-        taskId:this.taskId
-      }
-      this.$api.getTortTaskResult(params).then(res => {
-        if (res.code == 200) {
-          this.wholeContent = res.data.wholeContent
-          if (res.data.tortRightVOS.length > 0) {
-            var data = []
-            res.data.tortRightVOS.forEach(RightVosItem => {
-              if (RightVosItem.tortVOS.length > 0) {
-                RightVosItem.tortVOS.forEach(FeaturesItem => {
-                  FeaturesItem.pRightName = RightVosItem.rightName
-                  FeaturesItem.pSignPatentNo = RightVosItem.signPatentNo
-                  FeaturesItem.pPatentNo = RightVosItem.patentNo
-                  FeaturesItem.pContentOut = RightVosItem.contentOut
-                  FeaturesItem.pContent = RightVosItem.content
-                  FeaturesItem.pProjectId = RightVosItem.projectId
-                  FeaturesItem.pType = RightVosItem.type
-                  FeaturesItem.pSort = RightVosItem.sort
-                  this.hasOwn(FeaturesItem)
-                  data.push(FeaturesItem)
-                })
-              }
-            })
-            this.tableData = data
-          }
-        }
-      })
-    },
-    hasOwn(item) {
-      if (!item.hasOwnProperty("explainText")) {
-        item.explainText = ''
-      }
-    },
-  },
-}
-</script>
-<style lang="scss">
-.tortTeamWork {
-  .headerBtn {
-    height: 35px !important;
-    border: none;
-    padding: 15px !important;
-  }
-}
-</style>
-<style lang="scss" scoped>
-.tortTeamWork {
-  .iconBtnList {
-    width: 50px;
-    border-right: 1px solid #ccc;
-
-    .iconBtn {
-      width: 100%;
-      height: 50px;
-      text-align: center;
-      line-height: 50px;
-      font-size: 22px;
-      background: #ccc;
-      border-bottom: 1px solid #ffffff;
-    }
-
-    .iconBtn:hover {
-      background: #316192;
-    }
-  }
-}
-</style>

+ 23 - 5
src/views/task/components/index.vue

@@ -45,10 +45,13 @@
                   <span v-else>处 理</span>
                   <el-dropdown-menu slot="dropdown" style="text-align: center;">
                     <el-dropdown-item command="1" v-if="[6].includes(scope.row.type)">查看审核记录</el-dropdown-item>
-                    <el-dropdown-item command="4" v-if="scope.row.status != 3 || scope.row.createName == userinfo.name">编
+                    <el-dropdown-item command="4"
+                      v-if="scope.row.status != 3 && (scope.row.createName == userinfo.name && [1, 5, 6, 7].includes(scope.row.type))">编
                       辑</el-dropdown-item>
-                    <el-dropdown-item command="3" v-if="[6].includes(scope.row.type) && scope.row.status == 2">完
+                    <el-dropdown-item command="3" v-if="[4, 6].includes(scope.row.type) && scope.row.status == 2">完
                       成</el-dropdown-item>
+                    <el-dropdown-item command="5"
+                      v-if="[4].includes(scope.row.type) && scope.row.status == 2 && scope.row.createName == userinfo.name">确认协同结果</el-dropdown-item>
                     <el-dropdown-item command="2"
                       v-if="scope.row.createName == userinfo.name || (scope.row.type == 5 && !scope.row.handlerName.includes('@'))"
                       divided style="color: red;">取 消</el-dropdown-item>
@@ -82,7 +85,6 @@ import auditRecords from '@/views/patentMining/components/dialog/auditRecords.vu
 import createTask from '@/views/patentMining/components/dialog/createTask.vue'
 import handleTask1 from '@/views/patentMining/components/dialog/handleTask1.vue'
 import handleTask2 from '@/views/patentMining/components/dialog/handleTask2.vue'
-import file from '@/api/newApi/file'
 export default {
   mixins: [column, optionsData, taskPatentMining],
   // type区分是从哪里进入
@@ -226,11 +228,26 @@ export default {
         case '4'://编辑任务
           this.handleEdit(row)
           break;
+        case '5'://确认协同结果
+          this.handleConfirm(row)
+          break;
 
         default:
           break;
       }
     },
+    // 确认协同结果
+    handleConfirm(row) {
+      let router = this.$router.resolve({
+        path: '/tortTeamWork',
+        query: {
+          taskId: row.id,
+          projectId: row.projectId,
+          isResult: 3
+        }
+      })
+      window.open(router.href, '_blank')
+    },
     // 编辑任务
     handleEdit(row) {
       this.$refs.createTaskDialog.open(row)
@@ -282,7 +299,7 @@ export default {
           this.getPatentMining(row, str == '查看' ? 1 : 2)
           break;
         case 4://协同任务
-          this.teamworkTask(row, str == '查看' ? 1 : 2)
+          this.teamworkTask(row, str == '查看' ? 2 : 1)
           break;
         case 5://任务审核任务
         case 7://文件审核任务
@@ -302,7 +319,8 @@ export default {
         path: '/tortTeamWork',
         query: {
           taskId: row.id,
-          projectId:row.projectId,
+          projectId: row.projectId,
+          isResult: val
         }
       })
       window.open(router.href, '_blank')