Browse Source

合并申请人、权利人

zhuliu 1 year ago
parent
commit
5d007d12a2

+ 0 - 241
src/views/project/patentCollection/components/drawer/MergeInventor.vue

@@ -1,241 +0,0 @@
-<template>
-  <!-- 合并发明人,合并权利人/申请人 -->
-  <!-- 暂时没有用到 -->
-  <div class="">
-    <el-drawer class="custom-drawer-form" :title="mergeType == 2?'合并发明人':'合并申请人/权利人'" size="1000px" :visible.sync="drawer" direction="rtl"
-      :before-close="close" destroy-on-close>
-      <el-container class="patent-inventor-merge">
-        <el-header style="display:flex;align-items:center;justify-content: space-between;">
-          <div>
-            <el-form :inline="true" class="margin-left_20">
-              <el-form-item label="名称">
-                <el-input v-model="queryParams.name" size="small" placeholder="请输入名称"></el-input>
-              </el-form-item>
-              <el-form-item>
-                <el-button type="primary" size="small" @click="init">查询</el-button>
-              </el-form-item>
-            </el-form>
-            <!-- 后端没有根据检索式检索 -->
-            <!-- <mySearch style="width: 500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption">
-            </mySearch> -->
-          </div>
-          <div>
-            <el-button type="primary" size="small" @click="handleAdd()">新增</el-button>
-          </div>
-        </el-header>
-        <el-main class="container-common-main">
-          <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header">
-            <el-table-column type="index" label="#" width="55" align="center"></el-table-column>
-            <el-table-column prop="name" label="名称" align="center" show-overflow-tooltip></el-table-column>
-            <template v-if="mergeType == 0">
-              <el-table-column prop="country" label="国家" align="center" show-overflow-tooltip></el-table-column>
-              <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column>
-            </template>
-            <el-table-column prop="createTime" label="更新时间" align="center" show-overflow-tooltip> </el-table-column>
-            <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
-            <el-table-column label="操作" align="center" width="150">
-              <template slot-scope="scope">
-                <el-dropdown split-button type="primary" size="small">
-                  <span @click="handleEdit(scope.row)">编辑</span>
-                  <el-dropdown-menu slot="dropdown" class="text-align_center">
-                    <el-dropdown-item class="color-red" @click.native="handleDelete(scope.row)">删除</el-dropdown-item>
-                  </el-dropdown-menu>
-                </el-dropdown>
-              </template>
-            </el-table-column>
-          </el-table>
-          <div class="pagination">
-            <el-pagination :current-page.sync="queryParams.pageNum" :page-size="queryParams.pageSize" :total="total"
-              @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
-          </div>
-        </el-main>
-        <el-footer class="footer-common">
-          <el-button @click="close">关 闭</el-button>
-        </el-footer>
-      </el-container>
-    </el-drawer>
-
-    <mergeDialog ref="mergeDialog" :projectId="projectId" @close="close2"></mergeDialog>
-  </div>
-</template>
-
-<script>
-import mergeDialog from './merge.vue'
-export default {
-  components: {
-    mergeDialog,
-  },
-  data() {
-    return {
-      drawer: false,
-      loading: false,
-      total: 0,
-      tableData: [],
-      projectId: 0,
-      queryParams: {
-        pageSize: 10,
-        pageNum: 1,
-      },
-      //检索字段
-      searchFiled: [
-        {
-          label: '名称',
-          value: 'name',
-          type: 'String',
-        }
-      ],
-      //检索条件
-      searchOption: {},
-      // 判断是2发明人还是0权利人/申请人
-      mergeType: '',
-    }
-  },
-  mounted() {
-  },
-  methods: {
-    init(){
-      this.queryParams.pageNum = 1
-      this.getList()
-    },
-    // 子组件传来的消息
-    close2() {
-      this.getList()
-    },
-    // 编辑合并弹窗
-    handleEdit(row) {
-      row.mergeType = this.mergeType
-      this.$refs.mergeDialog.open(row, '编辑合并')
-    },
-    // 打开新增弹窗
-    handleAdd() {
-      this.$refs.mergeDialog.open({
-        mergeType: this.mergeType,
-      }, '新增合并')
-    },
-    // 打开合并发明人抽屉弹窗
-    open(obj) {
-      this.projectId = obj.projectId
-      this.mergeType = obj.type
-      this.drawer = true
-      this.getList()
-    },
-    //获取检索条件检索
-    search(val) {
-      let params = {}
-      val.forEach(item => {
-        if (item.type == 3) {
-          params[item.value] = item.searchValue.map(itemValue => {
-            return itemValue.value
-          })
-        } else {
-          params[item.value] = item.searchValue.label
-        }
-      })
-      // 返回条件对象
-      this.searchOption = this.$commonJS.ArrayToArray(val)
-      // 调用查询接口
-      this.queryParams.current = 1
-      this.getList()
-    },
-    // 获取表格数据
-    getList() {
-      this.loading = true
-      let params = {
-        projectId: this.projectId,
-        ...this.queryParams,
-        searchQuery: this.$commonJS.objectToString(this.searchOption || {}),//检索条件
-        type: this.mergeType,//2是发明人0是申请人/权利人
-      }
-      this.$api.selectMergePerson(params).then(response => {
-        if (response.code == 200) {
-          this.tableData = response.data.data
-          this.total = response.data.total
-          this.loading = false
-        }
-      }).catch(error => {
-        this.loading = false
-      })
-    },
-    // 分页信息
-    handleCurrentChange(val) {
-      this.queryParams.pageNum = val;
-      this.getList();
-    },
-    // 关闭抽屉弹窗
-    close() {
-      this.drawer = false
-      this.$emit('mergeClose')
-    },
-    // 删除表格数据
-    handleDelete(row) {
-      this.$confirm('确认删除本条数据吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.loading = true
-        let params = {
-          id: row.id,
-          type: 2,
-        }
-        this.$api.delMergePerson(params).then(response => {
-          if (response.code == 200) {
-            this.$message.success('删除成功')
-            this.loading = false
-            this.getList()
-          }
-        }).catch(error => {
-          this.loading = false
-        })
-      })
-    },
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    // 打开新增弹窗
-    // handleAdd() {
-    //   this.$refs.mergeDialog.open({
-    //     // mergedName: [],
-    //     mergeType: 1,
-    //   }, '新增合并')
-    //   // this.$refs.patentInventorMergeManageDrawer.open({
-    //   //   projectId: this.queryParams.projectId,
-    //   //   // mergedName: [],
-    //   //   name: '',
-    //   //   remark: '',
-    //   // }, '新增合并')
-    // },
-    // // 编辑合并弹窗
-    // handleEdit(row) {
-    //   row.mergeType = 1
-    //   this.$refs.mergeDialog.open(row, '编辑合并')
-    //   // row.projectId = this.projectId
-    //   // this.$refs.patentInventorMergeManageDrawer.open(row, '编辑合并')
-    // },
-
-  }
-}
-</script>
-
-<style lang="scss">
-.patent-inventor-merge {
-  .pagination {
-    text-align: center;
-    margin: 20px 0;
-  }
-}
-</style>

+ 585 - 0
src/views/project/patentCollection/components/drawer/merge copy 2.vue

@@ -0,0 +1,585 @@
+<template>
+  <div>
+    <el-drawer class="custom-drawer-form" :title="title" size="1000px" :visible.sync="drawer" direction="rtl"
+      :before-close="close" destroy-on-close>
+      <el-container>
+        <el-header style="display:flex;align-items:center;justify-content: space-between;">
+          <!-- 检索 -->
+          <div>
+            <!-- <el-form :inline="true" class="margin-left_20">
+              <el-form-item label="名称">
+                <el-input v-model="queryParams.name" size="small" placeholder="请输入名称" clearable @clear="getList"></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" size="small" @click="getList">查询</el-button>
+              </el-form-item>
+            </el-form> -->
+            <!-- 后端没有根据检索式检索 -->
+            <mySearch style="width: 500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption">
+            </mySearch>
+          </div>
+          <el-button type="primary" size="small" @click="handleMerge">合并</el-button>
+        </el-header>
+        <el-main class="container-common-main">
+          <!-- <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header"
+            v-el-table-infinite-scroll="getList" :infinite-scroll-distance="10" :infinite-scroll-disabled="disabled"> -->
+          <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header" @sort-change="sortChange">
+            <el-table-column align="center" width="60">
+              <template slot-scope="scope">
+                <el-checkbox @change="onChange(scope.row)" v-if="refresh"
+                  :checked="mergedList.indexOf(scope.row.name) !== -1"></el-checkbox>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="名称" sortable align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column label="操作" align="center" width="100">
+              <template slot-scope="scope" v-if="scope.row.mergeId">
+                <el-button  type="text" size="small"
+                  @click="handleEdit(scope.row)">编辑</el-button>
+                <el-button type="text" size="small"
+                  @click="handleDelete1(scope.row)" style="color: red;">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="pagination" style="margin-top: 20px;">
+            <el-pagination :current-page.sync="queryParams.pageNum" :page-size="queryParams.pageSize" :total="total"
+              @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
+          </div>
+        </el-main>
+        <el-footer class="footer-common">
+          <el-button @click="close">关 闭</el-button>
+        </el-footer>
+      </el-container>
+    </el-drawer>
+
+    <el-dialog :title="mergeTitle" :visible.sync="visible" width="500px" append-to-body destroy-on-close
+      :before-close="closeDialog" top="3vh">
+      <div class="patent-applicant-merge-select">
+        <template v-if="ruleForm.id">
+          <el-divider content-position="left">基本信息</el-divider>
+          <div style="display:flex;justify-content: flex-end;margin: 10px 0 10px 0px;">
+            <el-button type="primary" size="small" :loading="btnLoading" @click="handleSave">保存</el-button>
+          </div>
+        </template>
+        <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px">
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="ruleForm.name" placeholder="请输入名称"></el-input>
+          </el-form-item>
+          <template v-if="mergeType == 0">
+            <el-form-item label="简称" prop="abbreviation">
+              <el-input v-model="ruleForm.abbreviation" placeholder="请输入名称"></el-input>
+            </el-form-item>
+            <el-form-item label="国家" prop="country" >
+              <el-select v-model="ruleForm.country" @change="changeCountry" placeholder="请选择" filterable class="width_100">
+                <el-option v-for="(item, index) in commonData" :label="item.label" :key="index"
+                  :value="item.label"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="省/直辖市" prop="province" v-if="ruleForm.country=='中国'">
+              <el-cascader ref="myCascader" @change="changeCas" v-model="ruleForm.provinceOld" :options="areaOptions"
+                class="width_100"></el-cascader>
+            </el-form-item>
+          </template>
+          <el-form-item label="详细地址" prop="address">
+            <el-input v-model="ruleForm.address" placeholder="请输入地址"></el-input>
+          </el-form-item>
+          <el-form-item label="备注" prop="remark">
+            <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
+          </el-form-item>
+        </el-form>
+        <template v-if="ruleForm.id">
+          <div style="margin: 20px 0px;">
+            <el-divider content-position="left">合并信息</el-divider>
+          </div>
+          <el-table :data="ruleForm.mergedName" border header-row-class-name="custom-table-header">
+            <el-table-column prop="name" label="合并人名称" align="center" show-overflow-tooltip>
+              <template slot-scope="scope">
+                <div>
+                  {{ scope.row }}
+                </div>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column prop="country" label="国家" align="center" width="150"
+              show-overflow-tooltip></el-table-column>
+            <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column> -->
+            <el-table-column label="操作" align="center">
+              <template slot-scope="scope">
+                <el-link type="danger" @click="handleDelete(scope.row)">移除</el-link>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">关 闭</el-button>
+        <el-button v-if="!ruleForm.id" :loading="btnLoading" type="primary" @click="handleSave">确认</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  components: {
+  },
+  props: {
+    projectId: '',
+  },
+  data() {
+    return {
+      // 抽屉标题
+      title: '',
+      // 控制抽屉开关
+      drawer: false,
+      // 查询表格的loading
+      loading: false,
+      // 表格的数据源
+      tableData: [],
+      // 存放勾选的值的数据(已合并的)
+      mergedData: {},
+      mergedList: [],
+      //检索字段
+      searchFiled: [
+        {
+          label: '名称',
+          value: 'name',
+          type: 'String',
+        }
+      ],
+      //检索条件
+      searchOption: {},
+      //禁用懒加载
+      disabled: true,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+      // 总条数
+      total: 0,
+      // 判断是2发明人还是0申请人与权利人
+      mergeType: null,
+      // 刷新
+      refresh: true,
+      // 排序
+      sort:[],
+      /**编辑合并人及基本信息 start*/
+      // 控制弹窗开关
+      visible: false,
+      // 弹窗的title
+      mergeTitle: '',
+      // 基本信息的数据
+      ruleForm: {},
+      // 校验
+      rules: {
+        name: [{ required: true, message: '请输入名称', trigger: 'blur' },],
+      },
+      // 国家
+      commonData: {},
+      // 省市区地址
+      areaOptions: [],
+      // 合并信息的数据源
+      // mergeTable: [],
+      // 国家
+      commonData: {},
+      // 地区
+      areaTree: [],
+      /**编辑合并人及基本信息 end*/
+      btnLoading:false
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+    changeCountry(val){
+      if(val != '中国'){
+        this.$set(this.ruleForm,'provinceOld','')
+      }
+    },
+    // 表格排序 等后端
+    sortChange({ column, prop, order }) {
+      let obj = {
+        orderBy: prop,
+        orderType:order
+      }
+      this.sort=[obj]
+      // this.getList()
+    },
+    changeCas(val) {
+      this.ruleForm.province = this.$refs.myCascader.getCheckedNodes()[0].pathLabels[0]
+    },
+    // 移除合并人员 
+    handleDelete(row) {
+      let params = {
+        projectId: this.projectId,
+        name: this.ruleForm.name,
+        delName: row,
+        type: this.mergeType,
+      }
+      this.$confirm('此操作将删除该人员, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$api.delMergedName(params).then(res => {
+          if (res.code == 200) {
+            this.$message.success('移除人员成功')
+            this.$emit('close')
+
+            let index = this.ruleForm.mergedName.findIndex(item => {
+              return item == row
+            })
+            if (index != -1) {
+              this.ruleForm.mergedName.splice(index, 1)
+            }
+            // this.getMerge(this.ruleForm)
+          }
+        })
+      }).catch(() => {
+        this.$message.info('已取消操作');
+      });
+
+    },
+    // 查询合并的数据
+    getMerge(row) {
+      let params = {
+        projectId: this.projectId,
+        id: row.mergeId,
+        type: this.mergeType,
+      }
+      this.$api.selectMergePersonDetail(params).then(res => {
+        if (res.code == 200) {
+          this.ruleForm = res.data
+          this.getShowProvince()
+        }
+      })
+    },
+    // 获取省市区并显示
+    getShowProvince() {
+      if (this.ruleForm.province) {
+        let obj = this.areaOptions.find(item => {
+          return item.label == this.ruleForm.province
+        })
+        this.ruleForm.provinceOld = [obj.value]
+      }
+    },
+    // 编辑合并的信息
+    handleEdit(row) {
+      this.getMerge(row)
+      this.mergeTitle = '编辑合并'
+      this.visible = true
+    },
+     // 删除表格数据
+     handleDelete1(row) {
+      this.$confirm('确认删除本条数据吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading = true
+        let params = {
+          id: row.mergeId,
+          type: this.mergeType,
+        }
+        this.$api.delMergePerson(params).then(response => {
+          if (response.code == 200) {
+            this.$message.success('删除成功')
+            // this.loading = false
+            this.getList()
+          }
+        }).catch(error => {
+          this.$message.error('删除失败')
+          this.loading = false
+        })
+      })
+    },
+    // 关闭弹窗
+    closeDialog() {
+      this.$refs.ruleForm.resetFields()
+      // if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length == 0) {
+      if (this.ruleForm.id) {
+        this.ruleForm = {
+          needMergedName: [],
+          mergedName: [],
+        }
+        this.$set(this, 'mergedList', [])
+        this.refresh = false
+        this.$nextTick(() => {
+          this.refresh = true
+        })
+      }
+      this.visible = false
+    },
+    // 弹窗中的完成和保存事件
+    handleSave() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          this.ruleForm.projectId = this.projectId
+          this.ruleForm.type = this.mergeType
+          this.btnLoading = true
+          // if (this.title.indexOf('新增') != -1) {//新增
+          if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length == 0) {//新增
+            // this.ruleForm.mergedName = this.mergedName
+            this.$api.mergePerson(this.ruleForm).then(res => {
+              if (res.code == 200) {
+                this.$message.success('合并成功')
+                this.$emit('close')
+                this.mergedList = []
+                this.btnLoading = false
+                this.closeDialog()
+                // this.close()
+                this.getList()
+              }
+            }).catch(error=>{
+              this.$message.error('合并失败')
+              this.btnLoading = false
+            })
+          } else {
+            if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length > 0) {//
+              this.$api.mergePersonAgain(this.ruleForm).then(res => {
+                if (res.code == 200) {
+                  this.$message.success('编辑成功')
+                  this.$emit('close')
+                  this.btnLoading = false
+                  this.closeDialog()
+                  // this.close()
+                  this.getList()
+                }
+              }).catch(error=>{
+                this.$message.error('编辑失败')
+                this.btnLoading = false
+              })
+            } else {
+              this.$api.updateMergePerson(this.ruleForm).then(res => {
+                if (res.code == 200) {
+                  this.$message.success('编辑成功')
+                  this.$emit('close')
+                  this.btnLoading = false
+                  this.closeDialog()
+                  // this.close()
+                  this.getList()
+
+                }
+              }).catch(error=>{
+                this.$message.error('编辑失败')
+                this.btnLoading = false
+              })
+            }
+          }
+        }
+      })
+    },
+    onChange(row) {
+      const index = this.mergedList.indexOf(row.name)
+      if (index === -1) {
+        this.mergedList.push(row.name)
+      } else {
+        this.mergedList.splice(index, 1)
+      }
+      if (row.mergeId) {//已合并过的名称
+        const index2 = this.ruleForm.needMergedName.indexOf(row.name)
+        if (index2 === -1) {
+          this.ruleForm.needMergedName.push(row.name)
+        } else {
+          this.ruleForm.needMergedName.splice(index, 1)
+        }
+        for (let k in row) {
+          this.$set(this.mergedData, [k], row[k])
+        }
+      } else {//未合并的名称
+        const index3 = this.ruleForm.mergedName.indexOf(row.name)
+        if (index3 === -1) {
+          this.ruleForm.mergedName.push(row.name)
+        } else {
+          this.ruleForm.mergedName.splice(index, 1)
+        }
+      }
+    },
+    // 合并事件
+    handleMerge() {
+      if (this.mergedList.length === 0) {
+        let text = this.mergeType == 2 ? '请选择发明人' : '请选择申请人/权利人'
+        this.$message.error(text)
+        return false
+      }
+
+      // if (this.title.indexOf('新增') != -1) {//新增
+      if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length > 0) {//编辑直接合并,不填写信息
+
+        this.mergeTitle = '编辑合并'
+        if (this.ruleForm.needMergedName.length > 0) {
+          for (let k in this.mergedData) {
+            this.$set(this.ruleForm, [k], this.mergedData[k])
+          }
+          this.getShowProvince()
+        } else {
+          for (let k in this.mergedData) {
+            this.$set(this.ruleForm, [k], '')
+          }
+        }
+        this.visible = true
+      } else {//新增
+        this.ruleForm.id = null
+        this.mergeTitle = '新增合并'
+        this.visible = true
+      }
+    },
+    // 打开抽屉
+    open(row, title) {
+      this.mergeType = row.mergeType
+      this.title = title
+      this.ruleForm.needMergedName = [],
+        this.ruleForm.mergedName = [],
+        this.getList()
+      this.drawer = true
+      // 获取国家和地区的数据
+      if (this.mergeType == 0) {
+        this.getAllCountry()
+        this.getAreaList()
+      }
+    },
+    //获取检索条件检索
+    search(val) {
+      let params = {}
+      val.forEach(item => {
+        if (item.type == 3) {
+          params[item.value] = item.searchValue.map(itemValue => {
+            return itemValue.value
+          })
+        } else {
+          params[item.value] = item.searchValue.label
+        }
+      })
+
+      // 返回条件对象
+      this.searchOption = this.$commonJS.ArrayToArray(val)
+      // 调用查询接口
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    handleCurrentChange(val) {
+      this.queryParams.pageNum = val;
+      this.getList();
+    },
+ 
+    //生成字符串
+    getString(val){
+      var data = []
+      if (val.constructor == Object) {
+        if (Object.keys(val).length > 0) {
+          Object.keys(val).forEach(item => {
+            data.push(
+              {
+                key: item,
+                value: val[item]
+              }
+            )
+          })
+        } else {
+          return ''
+        }
+      } else if (val.constructor == Array) {
+        if (val.length > 0) {
+          data = val
+        } else {
+          return ''
+        }
+      } else {
+        return val
+      }
+      var str = ''
+      data.forEach(item => {
+        var value = ''
+        if (Array.isArray(item.value)) {
+          value = '('
+          item.value.forEach((i,index)=>{
+            if(/\s/.test(i)){
+              value += `"${i}"`
+            }else{
+              value += i
+            }
+            if(index!= item.value.length- 1){
+              value += ' OR '
+            }
+          })
+          value += ')'
+        } else {
+          if (item.value) {
+            // var values = this.$commonJS.AddQuotationMarks(item.value)
+            // value = values.join('')
+            value = `(${item.value})`
+          } else {
+            return
+          }
+        }
+        var str2 = ''
+        if(item.key == 'name'){
+          if(this.mergeType == 2){
+            str2 = 'MINM=(' + value +')'
+          }else{
+            str2 = '(MATM=(' + value + ') OR MRHM=(' + value +'))'
+          }
+        }
+        
+        if (str) {
+          str = str + ' AND ' + str2
+        } else {
+          str = str + str2
+        }
+
+      })
+      return str
+    },
+    // 获取发明人或者申请人、权利人数据,包括已合并的数据
+    getList() {
+      let params = {
+        ...this.queryParams,//分页信息
+        searchQuery: this.getString(this.searchOption || []),//检索条件
+        projectId: this.projectId,//项目id
+        type: this.mergeType,
+      }
+      this.loading = true
+      this.$api.getMergePerson(params).then(res => {
+        if (res.code == 200) {
+          this.tableData = res.data.data
+          this.total = res.data.total
+          this.loading  =false
+          this.refresh = false
+          this.$nextTick(() => {
+            this.refresh = true
+          })
+        }
+      }).catch(error => {
+        this.tableData = []
+        this.total = 0
+        this.loading  =false
+      })
+    },
+    // 关闭抽屉
+    close() {
+      this.ruleForm = {
+        needMergedName: [],
+        mergedName: [],
+      }
+      this.mergedList = []
+      this.drawer = false
+    },
+    // 获取国家和地区
+    getAllCountry() {
+      this.$api.getAllCountry().then(response => {
+        this.commonData = response.data
+      })
+    },
+    // 获取中国所有地区(省、自治区、特别行政区)
+    getAreaList() {
+      this.$api.getAllProvince().then(response => {
+        this.areaOptions = response.data
+      })
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 146 - 130
src/views/project/patentCollection/components/drawer/merge.vue

@@ -26,11 +26,11 @@
           <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header" @sort-change="sortChange">
             <el-table-column align="center" width="60">
               <template slot-scope="scope">
-                <el-checkbox @change="onChange(scope.row)" v-if="refresh"
-                  :checked="mergedList.indexOf(scope.row.name) !== -1"></el-checkbox>
+                <el-checkbox @change="(val)=>onChange(val,scope.row)" v-if="refresh"
+                  :checked="mergedList.findIndex(item=> item.name == scope.row.name) !== -1"></el-checkbox>
               </template>
             </el-table-column>
-            <el-table-column prop="name" label="名称" sortable align="center" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="name" label="名称" align="center" show-overflow-tooltip></el-table-column>
             <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column>
             <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
             <el-table-column label="操作" align="center" width="100">
@@ -56,12 +56,12 @@
     <el-dialog :title="mergeTitle" :visible.sync="visible" width="500px" append-to-body destroy-on-close
       :before-close="closeDialog" top="3vh">
       <div class="patent-applicant-merge-select">
-        <template v-if="ruleForm.id">
+        <div  style="margin-bottom:20px">
           <el-divider content-position="left">基本信息</el-divider>
-          <div style="display:flex;justify-content: flex-end;margin: 10px 0 10px 0px;">
+          <!-- <div style="display:flex;justify-content: flex-end;margin: 10px 0 10px 0px;">
             <el-button type="primary" size="small" :loading="btnLoading" @click="handleSave">保存</el-button>
-          </div>
-        </template>
+          </div> -->
+        </div>
         <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px">
           <el-form-item label="名称" prop="name">
             <el-input v-model="ruleForm.name" placeholder="请输入名称"></el-input>
@@ -88,15 +88,18 @@
             <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
           </el-form-item>
         </el-form>
-        <template v-if="ruleForm.id">
-          <div style="margin: 20px 0px;">
+        <template >
+          <div style="margin: 20px 0px 0px 0px;">
             <el-divider content-position="left">合并信息</el-divider>
+            <div style="display:flex;justify-content: flex-end;margin: 10px 0 10px 0px;">
+              <el-button type="primary" size="small" @click="addName">新增</el-button>
+            </div>
           </div>
-          <el-table :data="ruleForm.mergedName" border header-row-class-name="custom-table-header">
+          <el-table :data="ruleFormTableData" border header-row-class-name="custom-table-header">
             <el-table-column prop="name" label="合并人名称" align="center" show-overflow-tooltip>
               <template slot-scope="scope">
                 <div>
-                  {{ scope.row }}
+                  {{ scope.row.name }}
                 </div>
               </template>
             </el-table-column>
@@ -105,7 +108,7 @@
             <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column> -->
             <el-table-column label="操作" align="center">
               <template slot-scope="scope">
-                <el-link type="danger" @click="handleDelete(scope.row)">移除</el-link>
+                <el-link type="danger" @click="handleDelete(scope)">移除</el-link>
               </template>
             </el-table-column>
           </el-table>
@@ -113,16 +116,19 @@
       </div>
       <div slot="footer" class="dialog-footer">
         <el-button @click="closeDialog">关 闭</el-button>
-        <el-button v-if="!ruleForm.id" :loading="btnLoading" type="primary" @click="handleSave">确认</el-button>
+        <!-- <el-button v-if="!ruleForm.id" :loading="btnLoading" type="primary" @click="handleSave">确认</el-button> -->
+        <el-button :loading="btnLoading" type="primary" @click="handleSave">确认</el-button>
       </div>
     </el-dialog>
-
+    <mergeTableDialog ref="mergeTableDialog" :projectId="projectId" :mergeType="mergeType" @checked="getChecked"></mergeTableDialog>
   </div>
 </template>
 
 <script>
+import mergeTableDialog from './mergeTableDialog.vue'
 export default {
   components: {
+    mergeTableDialog
   },
   props: {
     projectId: '',
@@ -137,8 +143,7 @@ export default {
       loading: false,
       // 表格的数据源
       tableData: [],
-      // 存放勾选的值的数据(已合并的)
-      mergedData: {},
+      // 存放勾选的值的数据
       mergedList: [],
       //检索字段
       searchFiled: [
@@ -170,7 +175,11 @@ export default {
       // 弹窗的title
       mergeTitle: '',
       // 基本信息的数据
-      ruleForm: {},
+      ruleForm: {
+        needMergedName: [],
+        mergedName: [],
+      },
+      ruleFormTableData:[],
       // 校验
       rules: {
         name: [{ required: true, message: '请输入名称', trigger: 'blur' },],
@@ -179,14 +188,10 @@ export default {
       commonData: {},
       // 省市区地址
       areaOptions: [],
-      // 合并信息的数据源
-      // mergeTable: [],
-      // 国家
-      commonData: {},
-      // 地区
-      areaTree: [],
       /**编辑合并人及基本信息 end*/
-      btnLoading:false
+      btnLoading:false,
+      //是否有修改
+      hasChange:false,
     }
   },
   mounted() {
@@ -211,11 +216,16 @@ export default {
       this.ruleForm.province = this.$refs.myCascader.getCheckedNodes()[0].pathLabels[0]
     },
     // 移除合并人员 
-    handleDelete(row) {
+    handleDelete(scope) {
+      var row = scope.row
+      if(!row.sign){
+        this.ruleFormTableData.splice(scope.$index, 1)
+        return
+      }
       let params = {
         projectId: this.projectId,
         name: this.ruleForm.name,
-        delName: row,
+        delName: row.name,
         type: this.mergeType,
       }
       this.$confirm('此操作将删除该人员, 是否继续?', '提示', {
@@ -226,12 +236,11 @@ export default {
         this.$api.delMergedName(params).then(res => {
           if (res.code == 200) {
             this.$message.success('移除人员成功')
-            this.$emit('close')
-
-            let index = this.ruleForm.mergedName.findIndex(item => {
-              return item == row
-            })
+            // this.$emit('close')
+            this.hasChange = true
+            let index = this.ruleForm.mergedName.indexOf(row.name)
             if (index != -1) {
+              this.ruleFormTableData.splice(scope.$index, 1)
               this.ruleForm.mergedName.splice(index, 1)
             }
             // this.getMerge(this.ruleForm)
@@ -252,6 +261,13 @@ export default {
       this.$api.selectMergePersonDetail(params).then(res => {
         if (res.code == 200) {
           this.ruleForm = res.data
+          var data = this.ruleForm.mergedName
+          this.ruleFormTableData = data.map(item=>{
+            return {
+              name:item,
+              sign:true
+            }
+          })
           this.getShowProvince()
         }
       })
@@ -298,19 +314,40 @@ export default {
     // 关闭弹窗
     closeDialog() {
       this.$refs.ruleForm.resetFields()
-      // if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length == 0) {
-      if (this.ruleForm.id) {
-        this.ruleForm = {
+      this.visible = false
+    },
+    clearRuleForm(){
+      this.ruleForm = {
           needMergedName: [],
           mergedName: [],
-        }
-        this.$set(this, 'mergedList', [])
-        this.refresh = false
-        this.$nextTick(() => {
-          this.refresh = true
-        })
       }
-      this.visible = false
+      this.$set(this, 'mergedList', [])
+      this.refresh = false
+      this.$nextTick(() => {
+        this.refresh = true
+      })
+    },
+    //编辑时候添加申请人
+    addName(){
+      var titles={
+        0:'选择申请人/权利人',
+        2:'选择发明人'
+      }
+      var data = this.ruleFormTableData.filter(item=>{
+        return !item.sign
+      })
+      var disabled = [
+        {
+          mergeId:this.ruleForm.mergeId
+        }
+      ]
+      this.$refs.mergeTableDialog.open(titles[this.mergeType],data,disabled)
+    },
+    getChecked(value){
+      var signData = this.ruleFormTableData.filter(item=>{
+        return item.sign
+      })
+      this.ruleFormTableData = signData.concat(value)
     },
     // 弹窗中的完成和保存事件
     handleSave() {
@@ -319,81 +356,69 @@ export default {
           this.ruleForm.projectId = this.projectId
           this.ruleForm.type = this.mergeType
           this.btnLoading = true
-          // if (this.title.indexOf('新增') != -1) {//新增
-          if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length == 0) {//新增
-            // this.ruleForm.mergedName = this.mergedName
-            this.$api.mergePerson(this.ruleForm).then(res => {
+          var api = ''
+          var message = {
+            success:'',
+            error:''
+          }
+          
+          if(this.mergedList.length>0){
+            for(var i =0;i<this.mergedList.length;i++){
+              var item = this.mergedList[i]
+              if(item.mergeId){
+                this.ruleForm.needMergedName.push(item.name)
+              }else{
+                this.ruleForm.mergedName.push(item.name)
+              }
+            }
+          }
+          if(this.ruleForm.id){//编辑
+            api = 'updateMergePerson'
+            message = {
+              success:'编辑成功',
+              error:'编辑失败'
+            }
+          }else{
+            if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length == 0) {//新增
+              api = 'mergePerson'
+              message = {
+                success:'合并成功',
+                error:'合并失败'
+              }
+            } else {
+                api = 'mergePersonAgain'
+                message = {
+                  success:'合并成功',
+                  error:'合并失败'
+                }
+            }
+          }
+          
+          this.$api[api](this.ruleForm).then(res => {
               if (res.code == 200) {
-                this.$message.success('合并成功')
-                this.$emit('close')
+                this.$message.success(message.success)
+                // this.$emit('close')
+                this.hasChange = true
                 this.mergedList = []
                 this.btnLoading = false
+                this.clearRuleForm()
                 this.closeDialog()
-                // this.close()
                 this.getList()
               }
             }).catch(error=>{
-              this.$message.error('合并失败')
+              this.$message.error(message.error)
               this.btnLoading = false
             })
-          } else {
-            if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length > 0) {//
-              this.$api.mergePersonAgain(this.ruleForm).then(res => {
-                if (res.code == 200) {
-                  this.$message.success('编辑成功')
-                  this.$emit('close')
-                  this.btnLoading = false
-                  this.closeDialog()
-                  // this.close()
-                  this.getList()
-                }
-              }).catch(error=>{
-                this.$message.error('编辑失败')
-                this.btnLoading = false
-              })
-            } else {
-              this.$api.updateMergePerson(this.ruleForm).then(res => {
-                if (res.code == 200) {
-                  this.$message.success('编辑成功')
-                  this.$emit('close')
-                  this.btnLoading = false
-                  this.closeDialog()
-                  // this.close()
-                  this.getList()
-
-                }
-              }).catch(error=>{
-                this.$message.error('编辑失败')
-                this.btnLoading = false
-              })
-            }
-          }
         }
       })
     },
-    onChange(row) {
-      const index = this.mergedList.indexOf(row.name)
-      if (index === -1) {
-        this.mergedList.push(row.name)
+    onChange(val,row) {
+      if (val) {
+        this.mergedList.push(row)
       } else {
-        this.mergedList.splice(index, 1)
-      }
-      if (row.mergeId) {//已合并过的名称
-        const index2 = this.ruleForm.needMergedName.indexOf(row.name)
-        if (index2 === -1) {
-          this.ruleForm.needMergedName.push(row.name)
-        } else {
-          this.ruleForm.needMergedName.splice(index, 1)
-        }
-        for (let k in row) {
-          this.$set(this.mergedData, [k], row[k])
-        }
-      } else {//未合并的名称
-        const index3 = this.ruleForm.mergedName.indexOf(row.name)
-        if (index3 === -1) {
-          this.ruleForm.mergedName.push(row.name)
-        } else {
-          this.ruleForm.mergedName.splice(index, 1)
+        var index = this.mergedList.findIndex(item => item.name == row.name)
+        if(index!=-1){
+         this.mergedList.splice(index, 1) 
         }
       }
     },
@@ -404,35 +429,21 @@ export default {
         this.$message.error(text)
         return false
       }
-
-      // if (this.title.indexOf('新增') != -1) {//新增
-      if (this.ruleForm.needMergedName && this.ruleForm.needMergedName.length > 0) {//编辑直接合并,不填写信息
-
-        this.mergeTitle = '编辑合并'
-        if (this.ruleForm.needMergedName.length > 0) {
-          for (let k in this.mergedData) {
-            this.$set(this.ruleForm, [k], this.mergedData[k])
-          }
-          this.getShowProvince()
-        } else {
-          for (let k in this.mergedData) {
-            this.$set(this.ruleForm, [k], '')
-          }
-        }
-        this.visible = true
-      } else {//新增
-        this.ruleForm.id = null
-        this.mergeTitle = '新增合并'
-        this.visible = true
+      this.mergeTitle = '合并'
+      var mergedData = this.mergedList[this.mergedList.length-1]
+      for (let k in mergedData) {
+        this.$set(this.ruleForm, [k], mergedData[k])
       }
+      this.getShowProvince()
+      this.ruleForm.id = null
+      this.ruleFormTableData = this.mergedList
+      this.visible = true
     },
     // 打开抽屉
     open(row, title) {
       this.mergeType = row.mergeType
       this.title = title
-      this.ruleForm.needMergedName = [],
-        this.ruleForm.mergedName = [],
-        this.getList()
+      this.getList()
       this.drawer = true
       // 获取国家和地区的数据
       if (this.mergeType == 0) {
@@ -559,11 +570,16 @@ export default {
     },
     // 关闭抽屉
     close() {
-      this.ruleForm = {
-        needMergedName: [],
-        mergedName: [],
-      }
+      this.queryParams ={
+        pageNum: 1,
+        pageSize: 10,
+      },
+      this.searchOption = {}
       this.mergedList = []
+      if(this.hasChange){
+        this.$emit('close')
+        this.hasChange = false
+      }
       this.drawer = false
     },
     // 获取国家和地区

+ 225 - 0
src/views/project/patentCollection/components/drawer/mergeTableDialog.vue

@@ -0,0 +1,225 @@
+<template>
+  <div>
+    <el-dialog :title="title" :visible.sync="visible" width="800px" :before-close="cancel" :modal="false" :close-on-click-modal="false" :modal-append-to-body="false">
+        <el-container style="height:calc(100vh - 250px)">
+            <el-header style="display:flex;align-items:center;">
+            <!-- 检索 -->
+            <div>
+                <!-- 后端没有根据检索式检索 -->
+                <mySearch style="width: 500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption">
+                </mySearch>
+            </div>
+            </el-header>
+            <el-main>
+            <el-table v-loading="loading" :data="tableData" border header-row-class-name="custom-table-header">
+                <el-table-column align="center" width="60">
+                <template slot-scope="scope">
+                    <el-checkbox @change="(val)=>onChange(val,scope.row)" v-if="refresh"
+                        :disabled="disabled.findIndex(item=> item.mergeId == scope.row.mergeId) == -1"
+                    :checked="mergedList.findIndex(item=> item.name == scope.row.name) !== -1"></el-checkbox>
+                </template>
+                </el-table-column>
+                <el-table-column prop="name" label="名称" align="center" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="address" label="地址" align="center" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="remark" label="备注" align="center" show-overflow-tooltip></el-table-column>
+            </el-table>
+            </el-main>
+            <el-footer class="footer-common">
+                <div class="pagination" >
+                    <el-pagination :current-page.sync="queryParams.pageNum" :page-size="queryParams.pageSize" :total="total"
+                    @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
+                </div>
+            </el-footer>
+        </el-container>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="cancel">关 闭</el-button>
+            <el-button type="primary" @click="submit">确认</el-button>
+        </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    projectId:{
+
+    },
+    mergeType:{}
+  },
+  data() {
+    return {
+        visible:false,
+        title:'',
+        mergedList:[],
+        disabled:[],
+        tableData:[],
+        loading:false,
+        //检索字段
+        searchFiled: [
+            {
+            label: '名称',
+            value: 'name',
+            type: 'String',
+            }
+        ],
+        //检索条件
+        searchOption: {},
+        queryParams: {
+            pageNum: 1,
+            pageSize: 10,
+        },
+        // 总条数
+        total: 0,
+        refresh:true,
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    open(title,checked,disabled){
+        this.title=title
+        this.mergedList = checked || []
+        this.disabled=disabled||[]
+        this.getList()
+        this.visible = true
+    },
+    cancel(){
+        this.visible = false
+    },
+    handleCurrentChange(val) {
+      this.queryParams.pageNum = val;
+      this.getList();
+    },
+    //生成字符串
+    getString(val){
+      var data = []
+      if (val.constructor == Object) {
+        if (Object.keys(val).length > 0) {
+          Object.keys(val).forEach(item => {
+            data.push(
+              {
+                key: item,
+                value: val[item]
+              }
+            )
+          })
+        } else {
+          return ''
+        }
+      } else if (val.constructor == Array) {
+        if (val.length > 0) {
+          data = val
+        } else {
+          return ''
+        }
+      } else {
+        return val
+      }
+      var str = ''
+      data.forEach(item => {
+        var value = ''
+        if (Array.isArray(item.value)) {
+          value = '('
+          item.value.forEach((i,index)=>{
+            if(/\s/.test(i)){
+              value += `"${i}"`
+            }else{
+              value += i
+            }
+            if(index!= item.value.length- 1){
+              value += ' OR '
+            }
+          })
+          value += ')'
+        } else {
+          if (item.value) {
+            value = `(${item.value})`
+          } else {
+            return
+          }
+        }
+        var str2 = ''
+        if(item.key == 'name'){
+          if(this.mergeType == 2){
+            str2 = 'MINM=(' + value +')'
+          }else{
+            str2 = '(MATM=(' + value + ') OR MRHM=(' + value +'))'
+          }
+        }
+        
+        if (str) {
+          str = str + ' AND ' + str2
+        } else {
+          str = str + str2
+        }
+
+      })
+      return str
+    },
+    //获取检索条件检索
+    search(val) {
+      let params = {}
+      val.forEach(item => {
+        if (item.type == 3) {
+          params[item.value] = item.searchValue.map(itemValue => {
+            return itemValue.value
+          })
+        } else {
+          params[item.value] = item.searchValue.label
+        }
+      })
+
+      // 返回条件对象
+      this.searchOption = this.$commonJS.ArrayToArray(val)
+      // 调用查询接口
+      this.queryParams.pageNum = 1
+      this.getList()
+    },
+    // 获取发明人或者申请人、权利人数据,包括已合并的数据
+    getList() {
+      let params = {
+        ...this.queryParams,//分页信息
+        searchQuery: this.getString(this.searchOption || []),//检索条件
+        projectId: this.projectId,//项目id
+        type: this.mergeType,
+      }
+      this.loading = true
+      this.$api.getMergePerson(params).then(res => {
+        if (res.code == 200) {
+          this.tableData = res.data.data
+          this.total = res.data.total
+          this.loading  =false
+          this.refresh = false
+          this.$nextTick(() => {
+            this.refresh = true
+          })
+        }
+      }).catch(error => {
+        this.tableData = []
+        this.total = 0
+        this.loading  =false
+      })
+    },
+    onChange(val,row) {
+      if (val) {
+        this.mergedList.push(row)
+      } else {
+        var index = this.mergedList.findIndex(item => item.name == row.name)
+        if(index!=-1){
+         this.mergedList.splice(index, 1) 
+        }
+      }
+    },
+    submit(){
+        this.$emit('checked',this.mergedList)
+        this.cancel()
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 1 - 1
src/views/project/patentCollection/index.vue

@@ -235,7 +235,6 @@ import searchPatent from '@/views/report/components/patentList/components/search
 import reportFileDrawer from '@/views/report/components/drawer/reportFileDrawer.vue'
 import addAndEditReport from '@/views/report/components/dialog/addAndEditReport.vue'
 import PatentBatchIndexVue from './components/dialog/PatentBatchIndex.vue'
-// import patentInventorMergeDrawer from './components/drawer/MergeInventor.vue'
 import patentMergeDrawer from './components/drawer/merge.vue'
 import PatentIndexSetting from "./components/dialog/PatentIndexSetting"
 import PatentKeywordsHighlight from '../components/PatentKeywordsHighlight.vue'
@@ -890,6 +889,7 @@ export default {
     // 合并发明人、申请人、权利人后子组件发送的消息
     mergeClose() {
       this.getList()
+      this.$refs.customFields.refreshOptions(1)
     },