Przeglądaj źródła

事件、报告删除优化,专利挖掘新增等

zhuhao 1 rok temu
rodzic
commit
201d72364e

+ 2 - 0
src/api/index.js

@@ -32,6 +32,7 @@ import file from "./newApi/file"
 import project from "./newApi/project"
 import common from "./newApi/common"
 import newReport from "./newApi/report"
+import patentMining from "./newApi/patentMining"
 
 export default {
   ...report,
@@ -64,4 +65,5 @@ export default {
   ...project,
   ...common,
   ...newReport,
+  ...patentMining,
 }

+ 15 - 0
src/api/newApi/patentMining.js

@@ -0,0 +1,15 @@
+import axios from "@/utils/axios";
+export default {
+  /**
+   * 新增专利挖掘项目
+   */
+  addPatentDigProject(data) {
+    return axios.post("/xiaoshi/patentDigProject/addPatentDigProject", data);
+  },
+  /**
+   * 查询研发项目
+   */
+  getRdProjectByNumber(params) {
+    return axios.get("/xiaoshi/patentDigProject/getRdProjectByNumber", {params});
+  },
+};

+ 10 - 8
src/utils/model/upload/index.vue

@@ -10,7 +10,7 @@
           :multiple="multiple"
           :data="data"
           :name="name"
-          :show-file-list="showFileList"
+          :show-file-list="false"
           :accept="accept"
           :list-type="listType"
           :disabled="disabled"
@@ -71,7 +71,6 @@
             </div>
           </div>
           <div v-if="showDiscontent" class="list showList">
-            <!-- {{ discontent.map((item) => { return item.name;}).join(',') }} -->
             <div v-for="(item,index) in discontent" :key="item.name">{{ item.name }}<span v-if="index != discontent.length-1">,</span></div>
           </div>
         </div>
@@ -154,6 +153,7 @@ export default {
       type: Boolean,
       default: false,
     },
+    //文件列表
     fileList: {
       type: Array,
       default: () => {
@@ -204,6 +204,7 @@ export default {
           this.open()
         }
       });
+      //审核上传文件类型
       if (this.accept) {
         var arr = this.accept.split(/,|,/g);
         var fileType = file.name.substring(file.name.lastIndexOf("."));
@@ -214,8 +215,8 @@ export default {
           this.discontent.push(file);
           return false;
         }
-        
       }
+      //验证是否有重复文件
       if(this.fileList.length>0){
         var index = this.fileList.findIndex(item =>{
           return item.name == file.name || item.originalName == file.name
@@ -224,14 +225,15 @@ export default {
           this.exist.push(file)
           this.exist2.push(this.fileList[index])
           return false
-        }else{
-          if(this.autoUpload){
-            this.uploadFile(file)
-            return false
-          }
         }
       }
       this.$emit("on-change", file);
+      //是否立即上传
+      if (this.autoUpload) {
+        this.uploadFile(file)
+        return false
+      }
+      
     
     },
     onExceed(file, fileList) {

+ 5 - 3
src/views/event/components/index.vue

@@ -379,14 +379,16 @@ export default {
     },
     // 删除事件
     eventDelete(row,isLast) {
+      this.eventDeletes([row.id],isLast)
+    },
+    // 批量删除事件
+    eventDeletes(ids,isLast) {
       this.$confirm('此操作将删除该事件, 是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        // 调用接口
-        let params = [ row.id ]
-        this.$api.deleteEvent(params).then(res => {
+        this.$api.deleteEvent(ids).then(res => {
           if (res.code == 200) {
             this.getList()
             if(isLast){

+ 244 - 71
src/views/patentMining/components/dialog/addAndEditProject.vue

@@ -1,7 +1,40 @@
 <template>
   <div>
-    <el-dialog :title="title" :visible.sync="dialogVisible" width="800" :before-close="handleClose">
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="850" :before-close="handleClose">
       <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm">
+        <template>
+          <!-- 研发项目 -->
+          <el-divider content-position="left">研发项目</el-divider>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="研发编号:">
+                <el-autocomplete class="inline-input" v-model="form.rdnumber" value-key="name" v-SelectLazyLoading="load"
+                  :fetch-suggestions="querySearchQuestion" placeholder="请选择研发项目编号" :trigger-on-focus="false"
+                  style="width: 100%;">
+                </el-autocomplete>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="研发名称:" prop="rdName">
+                <el-input v-model="form.rdName" placeholder="请输入研发项目名称"></el-input>
+              </el-form-item>
+            </el-col>
+
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="产品:" prop="product">
+                <el-input v-model="form.product" placeholder="请输入产品名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="产品阶段:">
+                <el-input v-model="form.productPhase" placeholder="请输入产品阶段"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </template>
+        <el-divider content-position="left">挖掘项目</el-divider>
         <el-row>
           <el-col :span="12">
             <el-form-item label="项目名称:" prop="name">
@@ -15,96 +48,79 @@
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="12">
-            <el-form-item label="产品阶段:">
-              <el-input v-model="form.name" placeholder="请输入产品阶段"></el-input>
+          <!-- <el-col :span="12">
+            <el-form-item label="技术方向:">
+              <el-input v-model="form.productPhase" placeholder="请输入产品阶段"></el-input>
             </el-form-item>
-          </el-col>
-          <el-col :span="12">
+          </el-col> -->
+          <!-- <el-col :span="12">
             <el-form-item label="产出:">
-              <el-input v-model="form.type" placeholder="请输入产出"></el-input>
+              <el-input v-model="form.output" placeholder="请输入产出"></el-input>
             </el-form-item>
-          </el-col>
+          </el-col> -->
+
         </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="相关竞争对手:">
-              <el-input v-model="form.name" placeholder="请输入相关竞争对手"></el-input>
+              <el-input v-model="form.relatedCompetitors" placeholder="请输入相关竞争对手"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="技术关键词:">
-              <el-input v-model="form.type" placeholder="请输入技术关键词"></el-input>
+              <el-input v-model="form.technicalKeyword" placeholder="请输入技术关键词"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="参与人:">
-              <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="负责人:">
-              <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-                </el-option>
-              </el-select>
+            <el-form-item label="产出:">
+              <el-input v-model="form.output" placeholder="请输入产出"></el-input>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row>
           <el-col :span="12">
             <el-form-item label="是否检索:">
-              <el-switch v-model="form.delivery" active-color="#13ce66" inactive-color="#ff4949">
+              <el-switch v-model="form.ifSearch" active-color="#13ce66" inactive-color="#ff4949">
               </el-switch>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="是否审核:">
-              <el-switch v-model="form.delivery2" active-color="#13ce66" inactive-color="#ff4949">
+            <!-- <el-form-item label="是否审核:">
+              <el-switch v-model="form.examine" active-color="#13ce66" inactive-color="#ff4949">
               </el-switch>
+            </el-form-item> -->
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="参与人:">
+              <div class="manage">
+                <el-button size="small" @click="showDialog(2)">选择</el-button>
+                <div v-html="getNames(form.adminPersons)">
+
+                </div>
+              </div>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="负责人:">
+              <el-select v-model="form.headId" placeholder="请选择负责人" style="width: 100%;" filterable remote
+                :remote-method="remoteMethodPerson" v-SelectLazyLoading="lazyLoadingPerson"
+                :loading="personnelList.loading">
+                <el-option v-for="item in personnelList.data" :key="item.id" :label="item.name" :value="item.id">
+                </el-option>
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
-        <template v-if="form.delivery2">
-          <el-row >
-            <el-col :span="12">
-              <el-form-item label="审核人:">
-                <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
-                  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="截止时间:">
-                <el-date-picker style="width: 100%" v-model="form.endTime" type="datetime"
-                  value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择截止日期时间">
-                </el-date-picker>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="24">
-              <el-form-item label="审核备注:">
-                <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.remark"></el-input>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </template>
         <el-row>
           <el-col :span="24">
             <el-form-item label="附件:">
-              <el-upload ref="upload" class="upload-file" drag action="#" :auto-upload="false" :show-file-list="true"
-                :on-change="onChange" :on-remove="handleRemove" :on-preview="handlePreview">
-                <i :class="fileList.length != 0 ? 'el-icon-upload' : 'el-icon-refresh'"></i>
-                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-                <div class="el-upload__tip" slot="tip"></div>
-              </el-upload>
+              <myUpload :file-list="form.systemFileList" @on-change="onchange" @on-remove="onRemove"
+                style="height: 180px;" :autoUpload="true"></myUpload>
             </el-form-item>
           </el-col>
         </el-row>
@@ -139,21 +155,140 @@ export default {
       },
       options: [],//负责人数组
       value: '',//负责人
-      fileList: []//文件数组
+      //人员列表懒加载
+      personnelList: {
+        queryParams: {
+          current: 1,
+          size: 10
+        },
+        data: []
+      },
+      // 研发编号列表懒加载
+      rdNumberArr: {
+        queryParams: {
+          current: 1,
+          size: 10,
+        },
+        eventInput: '',
+        data: []
+      },
     };
   },
   watch: {},
   computed: {},
   created() { },
-  mounted() { },
+  mounted() {
+    // 获取人员列表
+    this.getPermissionPersonnel();
+  },
   methods: {
-    onChange(file, fileList) { },
-    handlePreview(file, fileList) { },
-    handleRemove(file, fileList) { },
+    // 打开参与人人员弹窗
+    showDialog() {
+      // this.$refs.choosePerson.open(this.form.adminIds,this.form.adminPersons)
+    },
+    // 处理参与人数据
+    getNames(row){
+      if(!row){
+        return ''
+      }
+      var arr = row.map(item=>{
+        return item.name
+      })
+      return arr.join('、')
+    },
+    // 研发编号懒加载方法
+    load() {
+      if (this.rdNumberArr.queryParams.current * this.rdNumberArr.queryParams.size >= this.rdNumberArr.queryParams.total) {
+        return false
+      }
+      this.rdNumberArr.queryParams.current++
+      this.getRdProjectByNumber()
+    },
+    // 查询研发编号
+    async getRdProjectByNumber() {
+      let searchValue = { name: this.rdNumberArr.eventInput }
+      let params = {
+        ...this.rdNumberArr.queryParams,//分页信息
+        searchQuery: this.$commonJS.objectToString(searchValue)//输入的建议
+      }
+      await this.$api.getRdProjectByNumber(params).then(res => {
+        if (res.code == 200) {
+          this.rdNumberArr.data.push(...res.data.data)
+          this.rdNumberArr.queryParams.total = res.data.total
+          this.rdNumberArr.cb(this.rdNumberArr.data);
+        }
+      })
+    },
+    //获取下拉建议研发编号数据
+    async querySearchQuestion(queryString, cb) {
+      this.rdNumberArr.queryParams.current = 1
+      this.rdNumberArr.eventInput = queryString
+      this.rdNumberArr.data = []
+      this.rdNumberArr.cb = cb
+      await this.getRdProjectByNumber()
+    },
+    // 人员列表远程搜索
+    remoteMethodPerson(query) {
+      this.personnelList.data = []
+      this.personnelList.queryParams.current = 1
+      this.personnelList.queryParams.name = query
+      this.getPermissionPersonnel()
+    },
+    // 获取所有人员列表懒加载
+    lazyLoadingPerson() {
+      if (this.personnelList.queryParams.current * this.personnelList.queryParams.size >= this.personnelList.queryParams.total) {
+        return false
+      }
+      this.personnelList.queryParams.current += 1
+      this.getPermissionPersonnel()
+    },
+    //获取所有人员列表(修改不要一次性获取,可以使用懒加载加远程搜索 )
+    getPermissionPersonnel() {
+      this.personnelList.loading = true;
+      this.$api.getPermissionPersonnel(this.personnelList.queryParams).then((response) => {
+        if (response.code == 200) {
+          this.personnelList.loading = false;
+          this.personnelList.data.push(...response.data)
+          this.personnelList.queryParams.total = response.pageColumn.total
+        }
+      })
+    },
+    // 上传的文件监听
+    onchange(file, fileList) {
+      if (file.guid) {
+        let index = this.form.systemFileList.findIndex(item => {
+          return item.uid == file.uid
+        })
+        if (index != -1) {
+          this.form.systemFileList.splice(index, 1, file)
+          this.form.fileGuids.push(file.guid)
+        }
+      } else {
+        this.form.systemFileList.push(file.raw)
+      }
+
+    },
+    // 删除上传的文件
+    onRemove(file, fileList) {
+      let index = this.form.systemFileList.findIndex(item => {
+        return item.uid == file.uid
+      })
+      if (index != -1) {
+        if (file.guid) {
+          let index2 = this.form.fileGuids.findIndex(item => {
+            return item == file.guid
+          })
+          if (index2 != -1) {
+            this.form.fileGuids.splice(index, 1)
+          }
+        }
+        this.form.systemFileList.splice(index, 1)
+      }
+    },
     //打开弹窗
     open(form) {
-      this.form = JSON.parse(JSON.stringify(form))
-      if (this.form.id) {
+      if (form && form.id) {
+        this.form = JSON.parse(JSON.stringify(form))
         this.title = '编辑专利挖掘项目'
       } else {
         this.title = '新增专利挖掘项目'
@@ -162,7 +297,7 @@ export default {
     },
     //关闭弹窗
     handleClose() {
-      this.$refs.upload.clearFiles()
+      // this.$refs.upload.clearFiles()
       this.$refs.form.resetFields()
       this.form = {}
       this.dialogVisible = false
@@ -171,13 +306,51 @@ export default {
     submit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.handleClose()
+          // 判断文件是否全部上传完毕
+          if ((this.form.fileGuids && this.form.fileGuids.length) != (this.form.systemFileList && this.form.systemFileList.length)) {
+            this.$message.error('您有文件未上传完毕,请您稍等片刻')
+            return false
+          }
+          if (!this.form.id) {//新增
+            if (this.form.examine) {//审核任务
+
+            } else {//不审核直接创建项目
+              this.$api.addPatentDigProject(this.form).then(res => {
+                if (res.code == 200) {
+                  this.$message.success('新增专利挖掘项目成功')
+                  this.$emit('isSuccess', true)
+                  this.handleClose()
+                }
+              })
+            }
+
+          } else {//编辑
+            this.$api.edit(this.form).then(res => {
+              if (res.code == 200) {
+                this.$message.success('更新专利挖掘项目成功')
+                this.$emit('isSuccess', true)
+                this.handleClose()
+              }
+            })
+          }
+
         } else {
           this.$message.error('信息未输入完整')
         }
       });
-      
-    }
+
+    },
+    // 审核任务
+    examine(data) {
+      let params = {
+
+      }
+      this.$api.task(params).then(res => {
+        if (res.code == 200) {
+
+        }
+      })
+    },
   },
 
 };

+ 39 - 28
src/views/patentMining/components/mixins/index.js

@@ -1,33 +1,44 @@
 import { checkVisual } from "@/views/home/components/mixins";
-export default{
-    mixins:[checkVisual],
-    props:{
-        tableData: {//数据
-            type: Array,
-            default: () => {
-              return [{ name: '123', eventNumber: '手机', projectNumber: '专题库一', projectNumber1: [{ name: '事件一' }]},]
-            }
-          },
-        queryParams: {//分页信息
-            type: Object,
-            default: () => {
-              return {
-                size: 10,
-                current: 1,
-              }
-            }
-        },
-    },  
-    computed:{
+export default {
+  mixins: [checkVisual],
+  props: {
+    tableData: {//数据
+      type: Array,
+      default: () => {
+        return [{ name: '123', eventNumber: '手机', projectNumber: '专题库一', projectNumber1: [{ name: '事件一' }] },]
+      }
+    },
+    queryParams: {//分页信息
+      type: Object,
+      default: () => {
+        return {
+          size: 10,
+          current: 1,
+        }
+      }
+    },
+  },
+  computed: {
 
+  },
+  methods: {
+    // 点击名称等事件
+    handleItem(row, key) {
+      // 跳转详情页面
+      let router = this.$router.resolve({
+        path: '/details',
+        query: {
+          name: row.name,
+          type: row.type,
+          status: row.status,
+          createPerson: row.createPerson,
+        }
+      })
+      window.open(router.href, '_blank')
     },
-    methods: {
-        // 点击名称等事件
-        handleItem(row,key) {
-        },
-        //操作列事件
-        handleCommand(option,row){
-            this.$emit('option', { option, row })
-        },
+    //操作列事件
+    handleCommand(option, row) {
+      this.$emit('option', { option, row })
     },
+  },
 }

+ 0 - 0
src/views/patentMining/components/view/card.vue


+ 51 - 18
src/views/patentMining/components/view/commonTable.vue

@@ -1,7 +1,28 @@
 <template>
   <div>
-    <el-table :data="tableData" border style="width: 100%" header-row-class-name="custom-table-header">
-      <el-table-column label="#" align="center" width="100px">
+    <el-table :data="tableData" border style="width: 100%" header-row-class-name="custom-table-header"
+      @sort-change="sortChange">
+
+      <el-table-column label="#" width="60" type="index" align="center">
+        <template slot-scope="scope">
+          <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+        </template>
+      </el-table-column>
+
+      <el-table-column v-for="item in column.filter(item => !item.ifHidden)" :key="item.value" :prop="item.value"
+        :label="item.name" align="center" sortable="custom">
+        <template slot-scope="scope">
+          <div v-if="['name'].includes(item.value)">
+            <el-link @click="handleItem(scope.row, item.value)">{{ scope.row[item.value] }}</el-link>
+          </div>
+          <div v-else-if="['scenarioId', 'eventDate'].includes(item.value)" v-html="getColumnData(scope.row, item.value)">
+          </div>
+          <div v-else>{{ scope.row[item.value] ? scope.row[item.value] : '--' }}</div>
+        </template>
+      </el-table-column>
+
+
+      <!--  <el-table-column label="#" align="center" width="100px">
         <template slot-scope="scope">
           <div>
             {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
@@ -20,14 +41,14 @@
       <el-table-column prop="type" label="技术关键词" align="center"></el-table-column>
       <el-table-column prop="type" label="相关竞争对手" align="center"></el-table-column>
       <el-table-column prop="status" label="状态" align="center"></el-table-column>
-      <el-table-column prop="createPerson" label="创建人" align="center"></el-table-column>
+      <el-table-column prop="createPerson" label="创建人" align="center"></el-table-column> -->
       <el-table-column label="操作" align="center" width="200px">
         <template slot-scope="scope">
           <div>
             <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)">
               <span @click="handleCommand('e', scope.row)">编辑</span>
               <el-dropdown-menu slot="dropdown" style="text-align: center;">
-                <el-dropdown-item divided class="color-red" command="1" >删除</el-dropdown-item>
+                <el-dropdown-item divided class="color-red" command="1">删除</el-dropdown-item>
               </el-dropdown-menu>
             </el-dropdown>
           </div>
@@ -40,10 +61,16 @@
 <script>
 import mixins from '../mixins'
 export default {
-  mixins:[mixins],
+  mixins: [mixins],
   components: {},
   props: {
-    
+    //显示栏位管理数组
+    column: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
   },
   data() {
     return {
@@ -55,20 +82,26 @@ export default {
   created() { },
   mounted() { },
   methods: {
-    // 跳转详情页面
-    toDetails(row) {
-      let router=this.$router.resolve({
-        path: '/details',
-        query: {
-          name: row.name,
-          type: row.type,
-          status: row.status,
-          createPerson: row.createPerson,
+    // 排序
+    sortChange({ column, prop, order }) {
+      this.$emit('sort', { column, prop, order })
+    },
+    // 数据处理
+    getColumnData(row,key) {
+      if (key == 'scenarioId') {
+        if (row.scenarioName) {
+          return row.scenarioName
+        } else {
+          return '--'
         }
-      })
-      window.open(router.href,'_blank')
+      }else if (key == 'eventDate') {
+        if (row.eventDate) {
+          return row.eventDate.slice(0, 10)
+        } else {
+          return '--'
+        }
+      }
     },
-
   },
 };
 </script>

+ 268 - 0
src/views/patentMining/components/viewIndex.vue

@@ -0,0 +1,268 @@
+<template>
+  <div class="patentMiningIndex">
+    <el-container>
+      <el-header>
+        <div>
+          <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption"
+            :disabled="!$permission('/workspace/project/check')"></mySearch>
+        </div>
+        <div style="display:flex;margin-right:10px">
+          <el-button-group class="margin-left_10" v-if="[2].indexOf(isOperate) == -1">
+            <el-button :type="viewType === 'commonTable' ? 'primary' : ''" @click="onChange2('commonTable')"
+              size="small">列表</el-button>
+            <el-button :type="viewType === 'commonCard' ? 'primary' : ''" @click="onChange2('commonCard')"
+              size="small">卡片</el-button>
+          </el-button-group>
+          <el-dropdown trigger="click" split-button type="primary" size="small">
+            <span @click="handleAdd">创建项目</span>
+            <el-dropdown-menu slot="dropdown" class="text-align_center">
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
+      </el-header>
+      <el-main>
+        <component :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList" :column="columnList"
+          :group="group" :queryParams="queryParams" @option="handleOption" @sort="handleSort"></component>
+      </el-main>
+      <el-footer class="pagination">
+        <div>
+          <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+            :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="total">
+          </el-pagination>
+        </div>
+      </el-footer>
+    </el-container>
+    <addAndEditProject ref="addAndEditProject" @isSuccess="isSuccess"></addAndEditProject>
+
+  </div>
+</template>
+  
+<script>
+import commonTable from './view/commonTable.vue';
+import addAndEditProject from './dialog/addAndEditProject.vue';
+export default {
+  components: {
+    commonTable,
+    addAndEditProject
+  },
+  props: {
+    isOperate: ''
+  },
+  data() {
+    return {
+      //当前组件名称
+      viewType: 'commonTable',
+      //专利挖掘项目数据集合
+      dataList: [
+        {
+          name: 'xxx有限公司',
+          type: '本公司专利数据库',
+          status: '进行中',
+          createPerson: '朱豪',
+          id: 1,
+        }
+      ],
+      //分页
+      queryParams: {
+        size: 10,
+        current: 0,
+      },
+      //当前分组的值
+      group: '',
+      // 分组字段数组
+      groupingOption:[],
+      //排序
+      sort: [ { "orderBy": "createTime", "orderType": 1 } ],
+      //总数
+      total: 0,
+      //检索字段
+      searchFiled: [
+        {
+          label: '项目名称',
+          value: 'name',
+          type: 1,
+          placeholder: '请输入项目名称'
+        },
+        {
+          label: '创建人',
+          value: 'createPerson',
+          type: 1,
+          placeholder: '请输入创建人名称'
+        },
+      ],
+      //检索条件
+      searchOption: {},
+      // table栏位信息
+      columnList: [],
+      // 获取
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  async mounted() {
+    // 获取table栏位
+    // this.columnList = await this.$commonJS.getCustomField('event')
+    //获取检索、分组字段
+    await this.getColumn()
+  },
+  methods: {
+    // 获取检索及分组栏位
+    async getColumn() {
+      let params = ['event']
+      await this.$api.getParamsCommon(params).then(res => {
+        if (res.code == 200) {
+          let conditionDTOList = JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
+          // 分组字段
+          this.groupingOption = this.$commonJS.getField(conditionDTOList, (u) => u.ifGroup == true, {
+            name: 'name',
+            value: 'value',
+          })
+          // 检索字段
+          this.searchFiled = this.$commonJS.getField(conditionDTOList, (u) => u.ifSearch == true, {
+            label: 'name',
+            value: 'value',
+            type: 'type',
+          })
+          //为array类型添加选项
+          // var obj = this.searchFiled.find(item => { return item.label == '应用场景' })
+          // if (obj) {
+          //   obj.options = this.scene.map(item => {
+          //     return {
+          //       label: item.name,
+          //       value: item.id
+          //     }
+          //   })
+          // }
+        }
+      })
+      this.showView = false
+      this.$nextTick(() => {
+        this.showView = true
+      })
+    },
+    // 新增、编辑成功信息
+    isSuccess(val) {
+      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.searchQuery=params
+      // 调用查询接口
+      this.queryParams.current = 1
+      this.getList()
+    },
+    //排序
+    handleSort({ column, prop, order }) {
+      this.sort=[]//如需要多个字段排序,则不需要清空
+      if (order == 'null') {
+        return;
+      }
+      var orderType = {
+        ascending: 0,
+        descending:1
+      }
+      var params = this.sort.find(item => {
+        return item.orderBy == prop
+      })
+      if (params) {
+        params.orderType = orderType[order]
+      } else {
+        params = {}
+        params.orderBy = prop
+        params.orderType = orderType[order]
+        this.sort.push(params)
+      }
+      this.queryParams.current = 1
+      this.getList()
+    },
+    //分页
+    handleCurrentChange(val) {
+      this.queryParams.current = val;
+      this.getList();
+    },
+    //获取专利挖掘项目数据列表
+    getList() {
+      let params = {
+        ...this.queryParams,//分页信息
+        searchQuery: this.$commonJS.objectToString(this.searchOption.searchQuery || {}),//检索条件
+        orderDTOList: this.sort,//排序
+      }
+      this.$api.query(params).then(res => {
+        if (res.code == 200) {
+          this.dataList = res.data.data
+          this.total = res.data.total
+        }
+      }).catch(error => {
+        this.dataList = []
+        this.total = 0
+        this.$message.error(error.message)
+      })
+    },
+    //创建项目按钮,添加其他企业专利数据库
+    handleAdd() {
+      this.$refs.addAndEditProject.open()
+    },
+    //切换视图
+    onChange2(val) {
+      this.viewType = val
+      this.queryParams.current=1
+      this.getList()
+    },
+    //操作列
+    handleOption({ option, row }) {
+      switch (option) {
+        case '0'://设置定时任务
+          // this.$refs.addAndEditDB.open(row, true)
+          break;
+        case '1'://删除
+          this.projectDelete()
+          break;
+        case 'e'://编辑
+          this.$refs.addAndEditProject.open(row)
+          break;
+      }
+    },
+    // 删除项目
+    projectDelete(row,isLast) {
+      this.$confirm('此操作将删除该项目, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        // 调用接口
+        let params = [ row.id ]
+        this.$api.deleteEvent(params).then(res => {
+          if (res.code == 200) {
+            this.getList()
+            // if(isLast){
+            //   this.isGrouping()
+            // }
+            // this.handleMessage = '删除成功'
+            // this.clearMessage()
+            this.$message.success('删除成功!');
+          }
+        })
+      }).catch(() => {
+        this.$message.info('已取消删除');
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.patentMiningIndex {
+  height: 100%;
+}
+</style>

+ 165 - 140
src/views/patentMining/index.vue

@@ -1,149 +1,174 @@
 <template>
-    <div>
-      <el-container>
-          <el-header>
-              <div>
-                <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption" :disabled="!$permission('/workspace/project/check')"></mySearch>  
-              </div>
-              <div style="display:flex;margin-right:10px">
-                  <el-button-group class="margin-left_10" v-if="[2].indexOf(isOperate) == -1">
-                    <el-button :type="viewType === 'commonTable' ? 'primary' : ''" @click="onChange2('commonTable')" size="small">列表</el-button>
-                    <el-button :type="viewType === 'commonCard' ? 'primary' : ''" @click="onChange2('commonCard')" size="small">卡片</el-button>
-                  </el-button-group>
-                  <el-dropdown trigger="click" split-button type="primary" size="small">
-                      <span @click="handleAdd">创建项目</span>
-                      <el-dropdown-menu slot="dropdown" class="text-align_center">
-                      </el-dropdown-menu>
-                  </el-dropdown>
-              </div>
-          </el-header>
-          <el-main>
-              <component :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList" :group="group" :queryParams="queryParams" @option="handleOption" @sort="handleSort"></component> 
-          </el-main>
-          <el-footer class="pagination">
-              <div>
-                  <el-pagination
-                      background
-                      layout="total, prev, pager, next, jumper"
-                      :current-page.sync="queryParams.current"
-                      :page-size.sync="queryParams.size"
-                      @current-change="handleCurrentChange"
-                      :total="total">
-                  </el-pagination>
-              </div>
-          </el-footer>
-      </el-container>
-      <addAndEditProject ref="addAndEditProject"></addAndEditProject>
+  <div>
+    <viewIndex ></viewIndex>
+  </div>
+</template>
+
+<script>
+import viewIndex from './components/viewIndex.vue'
+export default {
+  components: {
+    viewIndex,
+  },
+  computed:{},
+  mounted() {
+
+  },
+  methods: {
+    
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>
+
+
+
 
-    </div>
+<!-- <template>
+  <div>
+    <el-container>
+      <el-header>
+        <div>
+          <mySearch style="width:500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption"
+            :disabled="!$permission('/workspace/project/check')"></mySearch>
+        </div>
+        <div style="display:flex;margin-right:10px">
+          <el-button-group class="margin-left_10" v-if="[2].indexOf(isOperate) == -1">
+            <el-button :type="viewType === 'commonTable' ? 'primary' : ''" @click="onChange2('commonTable')"
+              size="small">列表</el-button>
+            <el-button :type="viewType === 'commonCard' ? 'primary' : ''" @click="onChange2('commonCard')"
+              size="small">卡片</el-button>
+          </el-button-group>
+          <el-dropdown trigger="click" split-button type="primary" size="small">
+            <span @click="handleAdd">创建项目</span>
+            <el-dropdown-menu slot="dropdown" class="text-align_center">
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
+      </el-header>
+      <el-main>
+        <component :is="viewType" v-bind="$attrs" v-on="$listeners" :isOperate="isOperate" :tableData="dataList"
+          :group="group" :queryParams="queryParams" @option="handleOption" @sort="handleSort"></component>
+      </el-main>
+      <el-footer class="pagination">
+        <div>
+          <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+            :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="total">
+          </el-pagination>
+        </div>
+      </el-footer>
+    </el-container>
+    <addAndEditProject ref="addAndEditProject"></addAndEditProject>
+
+  </div>
 </template>
   
 <script>
-  import commonTable from './components/view/commonTable.vue';
-  import addAndEditProject from './components/dialog/addAndEditProject.vue';
-  export default {
-    components: {
-      commonTable,
-      addAndEditProject
-    },
-    props: {
-      isOperate:''
-    },
-    data() {
-      return {
-          //当前组件名称
-          viewType:'commonTable',
-          //专利挖掘项目数据集合
-          dataList:[
-            {
-              name: 'xxx有限公司',
-              type: '本公司专利数据库',
-              status: '进行中',
-              createPerson: '朱豪',
-              id:1,
-            }
-          ],
-          //分页
-          queryParams:{
-              size:10,
-              current:0,
-          },
-          //分组
-          group:'',
-          //排序
-          sort:[
-            {
-              "orderBy": "createTime",
-              "orderType": 1
-            }
-          ],
-          //总数
-          total:0,
-          //检索字段
-          searchFiled:[
-              {
-                  label:'项目名称',
-                  value:'name',
-                  type:1,
-                  placeholder:'请输入项目名称'
-              },
-              {
-                  label:'创建人',
-                  value:'createPerson',
-                  type:1,
-                  placeholder:'请输入创建人名称'
-              },
-          ],
-          //检索条件
-          searchOption:{}
-      };
-    },
-    watch: {},
-    computed: {},
-    created() {},
-    mounted() {},
-    methods: {
-      //获取检索组件传过来的数据
-      search(val){
-  
-      },
-      //排序
-      handleSort(sort) {
-        this.sort = { ...sort }
-        this.getList()
-      },
-      //操作列
-      handleOption({ option, row }) {
-        switch (option) {
-          case '0'://设置定时任务
-              this.$refs.addAndEditDB.open(row,true)
-              break;
-          case '1'://删除
-              break;
-          case 'e'://编辑
-              this.$refs.addAndEditProject.open(row)
-            break;
+import commonTable from './components/view/commonTable.vue';
+import addAndEditProject from './components/dialog/addAndEditProject.vue';
+export default {
+  components: {
+    commonTable,
+    addAndEditProject
+  },
+  props: {
+    isOperate: ''
+  },
+  data() {
+    return {
+      //当前组件名称
+      viewType: 'commonTable',
+      //专利挖掘项目数据集合
+      dataList: [
+        {
+          name: 'xxx有限公司',
+          type: '本公司专利数据库',
+          status: '进行中',
+          createPerson: '朱豪',
+          id: 1,
         }
-      },
+      ],
       //分页
-      handleCurrentChange(val) {
-        this.queryParams.current = val;
-        this.getList();
-      },
-      //获取专利挖掘项目数据列表
-      getList(){
-  
-      },
-      //添加其他企业专利数据库
-      handleAdd(){
-          this.$refs.addAndEditProject.open({})
-      },
-      //切换视图
-      onChange2(val){
-        this.viewType = val
+      queryParams: {
+        size: 10,
+        current: 0,
       },
+      //分组
+      group: '',
+      //排序
+      sort: [
+        {
+          "orderBy": "createTime",
+          "orderType": 1
+        }
+      ],
+      //总数
+      total: 0,
+      //检索字段
+      searchFiled: [
+        {
+          label: '项目名称',
+          value: 'name',
+          type: 1,
+          placeholder: '请输入项目名称'
+        },
+        {
+          label: '创建人',
+          value: 'createPerson',
+          type: 1,
+          placeholder: '请输入创建人名称'
+        },
+      ],
+      //检索条件
+      searchOption: {}
+    };
+  },
+  watch: {},
+  computed: {},
+  created() { },
+  mounted() { },
+  methods: {
+    //获取检索组件传过来的数据
+    search(val) {
+
+    },
+    //排序
+    handleSort(sort) {
+      this.sort = { ...sort }
+      this.getList()
+    },
+    //操作列
+    handleOption({ option, row }) {
+      switch (option) {
+        case '0'://设置定时任务
+          this.$refs.addAndEditDB.open(row, true)
+          break;
+        case '1'://删除
+          break;
+        case 'e'://编辑
+          this.$refs.addAndEditProject.open(row)
+          break;
+      }
+    },
+    //分页
+    handleCurrentChange(val) {
+      this.queryParams.current = val;
+      this.getList();
+    },
+    //获取专利挖掘项目数据列表
+    getList() {
+
+    },
+    //添加其他企业专利数据库
+    handleAdd() {
+      this.$refs.addAndEditProject.open({})
+    },
+    //切换视图
+    onChange2(val) {
+      this.viewType = val
     },
-  };
-  </script>
-  <style lang="scss" scoped>
-  </style>
+  },
+};
+</script>
+<style lang="scss" scoped></style> -->

+ 1 - 1
src/views/product/components/dialog/addEditCategory.vue

@@ -13,7 +13,7 @@
           <div class="manage">
             <el-button size="small" @click="showDialog(2)">选择</el-button>
             <div v-html="getNames(form.adminPersons)">
-
+              
             </div>
           </div>
           

+ 1 - 1
src/views/report/components/dialog/addAndEditReport.vue

@@ -279,7 +279,7 @@ export default {
       //需要复制的选项集合
       copyList: [],
       //人员列表
-      personnelList: [],
+      // personnelList: [],
       //客户列表
       clientList: [],
       //上传文件列表

+ 23 - 11
src/views/report/components/index.vue

@@ -31,6 +31,7 @@
                 v-if="$permission('/pcs/report/add/' + item.permission)">{{ item.dictChildLabel }}</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
+          <el-button type="primary" size="small" @click="showField">显示栏位管理</el-button>
         </div>
       </el-header>
       <el-main id="patent-list-container" class="main" v-loading="loading">
@@ -47,6 +48,7 @@
       </el-footer>
     </el-container>
     <CreateReport ref="ReportForm" @getList="isGetList"></CreateReport>
+    <fields ref="field" type="reportProject" @getFieldList="getFieldList"></fields>
   </div>
 </template>
 
@@ -56,6 +58,7 @@ import Card from './view/card.vue'
 import visual from './view/visual.vue'
 import mergeTable from './view/mergeTable.vue'
 import CreateReport from './dialog/addAndEditReport.vue'
+import fields from '@/views/components/dialog/fields.vue';
 export default {
   components: {
     Table,
@@ -63,6 +66,7 @@ export default {
     visual,
     CreateReport,
     mergeTable,
+    fields,
   },
   props: {
     isOperate: ''
@@ -217,15 +221,19 @@ export default {
     // this.getReportSearch()
   },
   methods: {
+    // 显示栏位管理组件返回数据
+    getFieldList(val) {
+      this.columnList=val
+    },
+    // 显示栏位管理
+    showField() {
+      this.$refs.field.open(this.columnList)
+    },
     //获取table栏位及分组字段、检索字段
     async getColumn() {
       let params = ['reportProject']
       await this.$api.getParamsCommon(params).then(res => {
         if (res.code == 200) {
-          // 显示栏位
-          // this.columnList = res.data[0].conditionDTOList.filter(item => {
-          //   return item.name != 'Id' && item.ifShow == true
-          // })
           // 分组字段
           let conditionDTOList= JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
           // this.groupingOption = conditionDTOList.filter(item => {
@@ -241,8 +249,8 @@ export default {
             value: 'value',
             type:'type',
           })
-          //为应用场景添加选项
-          // var obj = this.searchFiled.find(item=>{return item.label == '应用场景'})
+          //先获取报告类型,报告状态,相关事件,再为报告类型,报告状态,相关事件添加选项
+          // var obj = this.searchFiled.find(item=>{return  item.label == '应用场景'})
           // if(obj){
           //   obj.options = this.scene.map(item=>{
           //     return {
@@ -305,12 +313,12 @@ export default {
       }
       this.$api.queryReportProject(params).then(res => {
         if (res.code == 200) {
-          this.dataList = res.data
-          this.total = res.total
+          this.dataList = res.data.data
+          this.total = res.data.total
         }
       }).catch(error => {
         this.dataList = []
-        this.total = 0
+        this.data.total = 0
         this.$message.error(error.message)
       })
     },
@@ -483,14 +491,18 @@ export default {
           break
       }
     },
-    // 删除报告
+    // 删除
     handleDelete(row) {
+      this.handleDeletes([row.id])
+    },
+    // 批量删除报告
+    handleDeletes(ids) {
       this.$confirm('此操作将永久删除该报告, 是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        this.$api.dele(params).then(res => {
+        this.$api.dele(ids).then(res => {
           if (res.code == 200) {
             this.$message.success('删除报告成功')
             this.getList()

+ 8 - 8
src/views/report/components/view/table.vue

@@ -8,13 +8,13 @@
           </template>
         </el-table-column>
 
-        <el-table-column v-for="item in column" :key="item.key" :prop="item.key" :label="item.name" sortable="custom" align="center">
+        <el-table-column v-for="item in column" :key="item.value" :prop="item.value" :label="item.name" sortable="custom" align="center">
           <template slot-scope="scope">
-            <div v-if="['name'].includes(item.key)">
-              <el-link @click="handleItem(scope.row,item.key)">{{ scope.row[item.key] }}</el-link>
+            <div v-if="['name'].includes(item.value)">
+              <el-link @click="handleItem(scope.row,item.value)">{{ scope.row[item.value] }}</el-link>
             </div>
-            <!-- <div v-else v-html="getColumnData(scope.row,item.key)"></div> -->
-            <div v-else>{{ scope.row[item.key] }}</div>
+            <div v-else-if="['eventNames'].includes(item.value)" v-html="getColumnData(scope.row,item.key)"></div>
+            <div v-else>{{ scope.row[item.value] }}</div>
           </template>
         </el-table-column>
 
@@ -76,7 +76,7 @@ export default {
     
   },
   mounted() {
-   console.log(this.column);
+    
   },
   methods: {
     // 排序
@@ -85,7 +85,7 @@ export default {
     },
     // 获取栏位数据
     getColumnData(row,key) {
-      if (key == 'projectNumber1') {
+      if (key == 'eventNames') {
         if (row[key]) {
           var a=''
           row[key].forEach(item => {
@@ -93,7 +93,7 @@ export default {
           });
           return a
         } else {
-          return ''
+          return '--'
         }
       }
     },