zhuhao 1 年間 前
コミット
dc6a7eeb4e

+ 2 - 0
src/api/index.js

@@ -33,6 +33,7 @@ import project from "./newApi/project"
 import common from "./newApi/common"
 import newReport from "./newApi/report"
 import patentMining from "./newApi/patentMining"
+import task2 from "./newApi/task"
 
 export default {
   ...report,
@@ -66,4 +67,5 @@ export default {
   ...common,
   ...newReport,
   ...patentMining,
+  ...task2,
 }

+ 23 - 0
src/api/newApi/task.js

@@ -0,0 +1,23 @@
+
+import axios from "@/utils/axios";
+export default {
+
+  /**
+   * 任务查询
+   */
+  queryProjectTask(data) {
+    return axios.post("/xiaoshi/projectTask/queryProjectTask", data);
+  },
+  /**
+   * 专利挖掘审核
+   */
+  addProjectOpenExamineTask(data) {
+    return axios.post("/xiaoshi/projectTask/addProjectOpenExamineTask", data);
+  },
+  /**
+   * 专利挖掘文件分配任务/分配审核任务
+   */
+  addTask(data) {
+    return axios.post("/xiaoshi/projectTask/addTask", data);
+  },
+};

+ 4 - 0
src/views/components/dialog/examine.vue

@@ -95,6 +95,7 @@ export default {
         }
       }
       this.parentForm = data
+      // 任务类型
       this.form.type = type
       this.getPermissionPersonnel()
     },
@@ -130,6 +131,9 @@ export default {
             case 6://专利挖掘项目-文件分配任务审核
 
               break;
+            case 7://专利挖掘项目-文件列表审核任务
+
+              break;
 
             default:
               break;

+ 3 - 2
src/views/patentMining/components/details/index.vue

@@ -16,7 +16,8 @@
 
 <script>
 import BasicMessage from './basicMessage.vue'
-import ExcavateTaskIndex from '../excavateTask/excavateTask.vue'
+// import ExcavateTaskIndex from '../excavateTask/excavateTask.vue'
+import ExcavateTaskIndex from '../excavateTask/index.vue'
 import FileMessage from '../fileMessage.vue'
 export default {
   components: {
@@ -33,7 +34,7 @@ export default {
           path:'basicMessage'
         },
         {
-          label:'挖掘任务',
+          label:'任务清单',
           path:'ExcavateTaskIndex'
         },
         {

+ 19 - 15
src/views/patentMining/components/dialog/createTask.vue

@@ -4,28 +4,28 @@
     <el-dialog :title="title" :visible.sync="dialogVisible" width="500px" :before-close="handleClose"
       :close-on-click-modal="false">
       <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm">
-        <el-form-item label="任务名称:" prop="taskName">
-          <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
+        <el-form-item label="任务名称:" prop="name">
+          <el-input v-model="form.name" placeholder="请输入任务名称"></el-input>
         </el-form-item>
-        <el-form-item label="任务流程:" prop="taskPath">
-          <el-select v-model="form.taskPath" placeholder="请选择流程" style="width: 100%;">
+        <el-form-item label="任务流程:" prop="processId">
+          <el-select v-model="form.processId" placeholder="请选择流程" style="width: 100%;">
             <el-option v-for="item in pathOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="处理人:" prop="taskPerson">
-          <el-select v-model="form.headId" placeholder="请选择处理人" style="width: 100%;" filterable remote
+        <el-form-item label="处理人:" prop="handler">
+          <el-select v-model="form.handler" 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-select v-model="form.taskPerson" placeholder="请选择处理人" style="width: 100%;">
+          <!-- <el-select v-model="form.handler" placeholder="请选择处理人" style="width: 100%;">
             <el-option v-for="item in personOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select> -->
         </el-form-item>
-        <el-form-item label="截止时间:" prop="endTime">
-          <el-date-picker style="width: 100%" v-model="form.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
+        <el-form-item label="截止时间:" prop="deadLineTime">
+          <el-date-picker style="width: 100%" v-model="form.deadLineTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
             placeholder="请选择截止日期时间">
           </el-date-picker>
         </el-form-item>
@@ -47,7 +47,7 @@ import { personnelLoading } from '../mixins/index2'
 export default {
   mixins: [personnelLoading],
   components: {},
-  props: {},
+  props: ['id'],
   data() {
     return {
       dialogVisible: false,
@@ -65,10 +65,10 @@ export default {
         { label: '说明书规划撰写', value: '7' },
       ],//流程
       rules: {
-        taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' },],
-        taskPath: [{ required: true, message: '请选择流程', trigger: 'change' },],
-        taskPerson: [{ required: true, message: '请选择处理人', trigger: 'change' },],
-        endTime: [{ required: true, message: '请选择截止时间', trigger: 'change' },],
+        name: [{ required: true, message: '请输入任务名称', trigger: 'blur' },],
+        processId: [{ required: true, message: '请选择流程', trigger: 'change' },],
+        handler: [{ required: true, message: '请选择处理人', trigger: 'change' },],
+        deadLineTime: [{ required: true, message: '请选择截止时间', trigger: 'change' },],
       }
     };
   },
@@ -86,6 +86,9 @@ export default {
       //     this.title = '创建任务'
       // }
       this.title = '创建文件分配任务'
+      this.form.projectId = this.id//项目id
+      this.form.type = 6//分配任务
+      this.form.handlerType = 0//0内部人员1外部人员
       this.getPermissionPersonnel()
       this.dialogVisible = true
     },
@@ -99,9 +102,10 @@ export default {
     submit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.$api.submit(this.form).then(res => {
+          this.$api.addTask(this.form).then(res => {
             if (res.code == 200) {
               this.$message.success('创建文件分配任务成功')
+              this.$emit('isCreate','新增成功')
               this.handleClose()
             }
           })

+ 4 - 12
src/views/patentMining/components/dialog/handleTask2.vue

@@ -1,7 +1,7 @@
 <template>
   <!-- 处理挖掘任务2(文件分配任务弹窗) -->
   <div class="handleTask2">
-    <el-dialog ref="dialog" :title="title" :visible.sync="dialogVisible" width="800px" :before-close="handleClose"
+    <el-dialog ref="dialog" :title="title" :visible.sync="dialogVisible" width="900px" :before-close="handleClose"
       :close-on-click-modal="false">
 
       <el-form :model="form" status-icon :rules="rules" ref="form" label-position="top" label-width="120px"
@@ -11,7 +11,8 @@
             header-row-class-name="custom-table-header">
             <el-table-column prop="name" label="文件名称" align="center"></el-table-column>
             <el-table-column prop="time" label="文件上传时间" align="center"> </el-table-column>
-            <el-table-column prop="type" label="文件类型" align="center"> </el-table-column>
+            <el-table-column prop="fileType" label="文件类型" align="center"> </el-table-column>
+            <el-table-column prop="description" label="说明" align="center"> </el-table-column>
             <el-table-column label="操作" align="center" width="140">
               <el-button @click="deleteFile" size="small" type="text" style="color: red;">删除</el-button>
             </el-table-column>
@@ -51,13 +52,7 @@ export default {
   data() {
     return {
       title: '',
-      tableData: [
-        {
-          name: '创新文件',
-          time: '2023-10-8',
-          type: 'excel',
-        }
-      ],
+      tableData: [],
       form: {
         systemFileList: [],
       },
@@ -174,9 +169,6 @@ export default {
           this.$refs.examine.open(this.form,6)
         }
       })
-      // this.examineForm.name = this.$refs.dialog.title.split(':')[1]
-      // // this.examineForm.name =
-      // this.auditTask = true
     },
     // 审核弹窗发送的值
     handleTaskForm(val) {

+ 67 - 26
src/views/patentMining/components/dialog/uploadFile.vue

@@ -9,9 +9,9 @@
         <el-form-item label="最终文件:" prop="delivery" style="width: 20px;">
           <el-switch v-model="form.delivery" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
         </el-form-item>
-        <el-form-item label="文件类型:">
-          <el-select v-model="form.type" placeholder="请选择文件类型" style="width: 100%;">
-            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+        <el-form-item label="流程:">
+          <el-select v-model="form.taskPath" placeholder="请选择流程" style="width: 100%;">
+            <el-option v-for="item in pathOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
         </el-form-item>
@@ -20,42 +20,32 @@
             style="width: 100%;">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="是否审核:" prop="delivery">
-          <el-switch v-model="form.delivery2" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
-        </el-form-item>
-        <template v-if="form.delivery2">
-          <el-form-item label="审核人:">
-            <el-select v-model="form.type" 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-form-item label="审核备注:">
-            <el-input v-model="form.remark2" type="textarea" placeholder="请输入内容"></el-input>
-          </el-form-item>
-        </template>
 
         <el-form-item label="附件:" prop="delivery">
           <myUpload :file-list="form.systemFileList" @on-change="onchangeFile" @on-remove="onRemove"
             @on-preview="onPreview" style="height: 180px;" :autoUpload="true"></myUpload>
         </el-form-item>
         <el-form-item label="备注:">
-          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+          <el-input v-model="form.description" type="textarea" placeholder="请输入内容"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="handleClose" size="small">取 消</el-button>
         <el-button @click="submit" size="small" type="primary">确 定</el-button>
-
+        <el-button v-if="!form.id" @click="examine" size="small" type="primary">提交审核</el-button>
       </span>
     </el-dialog>
 
+    <examine ref="examine" @taskForm="handleTaskForm"></examine>
   </div>
 </template>
 
 <script>
+import examine from '@/views/components/dialog/examine.vue'
 export default {
-  components: {},
+  components: {
+    examine,
+  },
   props: {},
   data() {
     return {
@@ -64,13 +54,19 @@ export default {
       form: {
         systemFileList: [],
       },
+      pathOptions: [
+        { label: '创新点流程', value: '1' },
+        { label: '查新检索', value: '2' },
+        { label: '保护主题规划', value: '3' },
+        { label: '独权撰写', value: '4' },
+        { label: '从权撰写', value: '5' },
+        { label: '申请文件定稿', value: '6' },
+        { label: '说明书规划撰写', value: '7' },
+      ],//流程
       rules: {
         name: [{ required: true, message: '请输入文件名称', trigger: 'blur' },],
       },
-      options: [],
-      value: '',
       delivery: '',
-      fileList: [],
     };
   },
   watch: {},
@@ -78,13 +74,27 @@ export default {
   created() { },
   mounted() { },
   methods: {
+    //提交审核
+    examine() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.$refs.examine.open(this.form, 7)
+        }
+      })
+    },
+    // 审核弹窗发送的值
+    handleTaskForm(val) {
+      this.$emit('isSuccess', '新增成功')
+      this.handleClose()
+    },
     // 切换按钮
     onChangeFamily(val) {
       this.btn = val
     },
     //打开弹窗
     open(row) {
-      if (row.id) {
+      if (row && row.id) {
+        this.form = JSON.parse(JSON.stringify(row))
         this.title = '编辑文件'
       } else {
         this.title = '上传文件'
@@ -104,7 +114,38 @@ export default {
     submit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.handleClose()
+          // 判断文件是否都上传完毕
+          if (this.form.systemFileList && this.form.systemFileList.length > 0) {
+            this.form.fileGuids = []
+            for (let i = 0; i < this.form.systemFileList.length; i++) {
+              if (this.form.systemFileList[i].guid) {
+                this.form.fileGuids.push(this.form.systemFileList[i].guid)
+              } else {
+                this.$message.error('文件未全部上传,请耐心等待')
+                return false
+              }
+            }
+          } else {
+            return false
+          }
+          if (!this.form.id) {
+            this.$api.add(this.form).then(res => {
+              if (res.code == 200) {
+                this.$message.success('新增成功')
+                this.$emit('isSuccess', '新增成功')
+                this.handleClose()
+              }
+            })
+          } else {
+            this.$api.edit(this.form).then(res => {
+              if (res.code == 200) {
+                this.$message.success('更新成功')
+                this.$emit('isSuccess', '更新成功')
+                this.handleClose()
+              }
+            })
+          }
+
         } else {
           this.$message.error('信息未输入完整')
         }
@@ -134,7 +175,7 @@ export default {
       }
     },
     // 点击文件
-    onPreview(file){},
+    onPreview(file) { },
   },
 
 };

+ 7 - 1
src/views/patentMining/components/excavateTask/excavateTask.vue

@@ -58,7 +58,7 @@
       </el-footer>
     </el-container>
 
-    <createTask ref="createTaskDialog"></createTask>
+    <createTask ref="createTaskDialog" @isCreate="isCreate"></createTask>
     <handleTask1 ref="handleTask1Dialog"></handleTask1>
     <!-- <handleTask2 ref="handleTask2Dialog"></handleTask2> -->
     <handleTask2 ref="handleTask2Dialog" @isSuccess="isSuccess"></handleTask2>
@@ -182,6 +182,12 @@ export default {
     this.getColumn()
   },
   methods: {
+    // 子组件新增文件分配任务成功
+    isCreate(val) {
+      if (val == '新增成功') {
+        this.getList()
+      }
+    },
     // 子组件新增审核任务成功
     isSuccess(val) {
       if (val == '新增成功') {

+ 13 - 4
src/views/patentMining/components/excavateTask/index.vue

@@ -1,19 +1,28 @@
 <template>
   <div class="height_100">
-    <excavateTask :id="id"></excavateTask>
+    <!-- <excavateTask :id="id"></excavateTask> -->
+    <Table :type="1" :id="id" :obj="obj">
+    </Table>
+
+    <!-- <createTask ref="createTaskDialog" @isCreate="isCreate"></createTask> -->
   </div>
 </template>
 
 <script>
-import excavateTask from './excavateTask.vue'
+// import excavateTask from './excavateTask.vue'
+import Table from '@/views/task/components/table.vue'
+
 export default {
   props:['id'],
   components: {
-    excavateTask
+    // excavateTask
+    Table,
   },
   data() {
     return {
-
+      obj: {
+        search:{projectId:this.id},
+      },
     }
   },
   computed: {},

+ 150 - 48
src/views/patentMining/components/fileMessage.vue

@@ -4,7 +4,7 @@
     <el-container>
       <el-header style="display: flex;justify-content: space-between;align-items: center;">
         <div>
-          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption" ></mySearch>
+          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
         </div>
         <div style="display:flex;margin-right:10px">
           <!-- <el-button-group class="margin-left_10">
@@ -15,7 +15,8 @@
         </div>
       </el-header>
       <el-main>
-        <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header">
+        <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header"
+          @sort-change="sortChange">
           <el-table-column label="#" align="center" width="100px">
             <template slot-scope="scope">
               <div>
@@ -23,18 +24,23 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column prop="fileName" label="文件名称" align="center">
-            <!-- <template slot-scope="scope">
-              <div>
-                <el-link type="primary" @click="toDetails(scope.row)">{{ scope.row.name }}</el-link>
+
+
+          <el-table-column v-for="item in columnList" :key="item.value" :prop="item.value"
+            :render-header="$commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
+            <template slot-scope="scope">
+              <div v-if="['name'].includes(item.value)">
+                <el-link @click="handleItem(scope.row, item.value)">
+                  <span v-html="$commonJS.getColumnData(scope.row, item)"></span>
+                </el-link>
               </div>
-            </template> -->
+              <!-- <div v-else-if="['type'].includes(item.value)"
+                v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskType })"></div>
+              <div v-else-if="['status'].includes(item.value)"
+                v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskStatus })"></div> -->
+              <div v-else v-html="$commonJS.getColumnData(scope.row, item)"></div>
+            </template>
           </el-table-column>
-          <el-table-column prop="uploader" label="文件上传人" align="center"></el-table-column>
-          <el-table-column prop="status" label="文件状态" align="center"></el-table-column>
-          <el-table-column prop="uploadTime" label="文件上传时间" align="center"></el-table-column>
-          <el-table-column prop="type" label="文件类型" align="center"></el-table-column>
-          <el-table-column prop="endFile" label="是否最终文件" align="center"></el-table-column>
           <el-table-column label="操作" align="center" width="200px">
             <template slot-scope="scope">
               <div>
@@ -45,79 +51,175 @@
           </el-table-column>
         </el-table>
       </el-main>
-      <el-footer class="pagination"> 
-          <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
-            :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
-          </el-pagination>
+      <el-footer class="pagination">
+        <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+          :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
+        </el-pagination>
       </el-footer>
     </el-container>
 
-    <uploadFile ref="uploadFile"></uploadFile>
+    <uploadFile ref="uploadFile" :isSuccess="isSuccess"></uploadFile>
   </div>
 </template>
 
 <script>
 import uploadFile from './dialog/uploadFile.vue'
 export default {
+  props: ['id'],
   components: {
     uploadFile
   },
   data() {
     return {
+      // 数据源
       tableData: [
         {
-          fileName:'加热器',
-          uploader:'朱豪',
-          status:'处理中',
-          uploadTime:'2023-9-28 17:09',
-          type:'',
+          fileName: '加热器',
+          uploader: '朱豪',
+          status: '处理中',
+          uploadTime: '2023-9-28 17:09',
+          type: '',
           endFile: '否',
-          id:1
+          id: 1
         }
       ],
-      queryParams: {
-        current: 1,
-        size: 10,
-        total: 0,
-      },
-      searchFiled: [
+      // table栏位信息
+      columnList: [
+        {
+          name: "文件名称",
+          type: "String",
+          value: "fileName",
+        },
+        {
+          name: "文件上传人",
+          type: "Integer",
+          value: "uploader",
+        },
+        {
+          name: "文件状态",
+          type: "String",
+          value: "status",
+        },
         {
-          label: '文件名称',
-          value: 'fileName',
-          type: 1,
-          placeholder: '请输入文件名称'
+          name: "文件上传时间",
+          type: "DateTime",
+          value: "createTime",
         },
         {
-          label: '上传人',
-          value: 'createPerson',
-          type: 1,
-          placeholder: '请输入上传人名称'
+          name: "文件类型",
+          type: "String",
+          value: "type",
+        },
+        {
+          name: "是否最终文件",
+          type: "DateTime",
+          value: "endFile",
         },
       ],
-      searchOption: {}  
+      // 分页信息
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+      // 检索字段
+      searchFiled: [],
+      // 检索字符串
+      searchOption: {},
+      //排序字段
+      sort: [{ "orderBy": "createTime", "orderType": 1 }],
     }
   },
-  mounted() {
-    
+  async mounted() {
+    // 获取table栏位
+    // this.columnList = await this.$commonJS.getCustomField('projectTask')
+    // 获取栏位
+    // this.getColumn()
+    // this.getList()
   },
   methods: {
+    // 新增/更新文件列表成功
+    isSuccess(val) {
+      this.getList()
+    },
+    // 获取数据
+    getList() {
+      let searchOption = {
+        projectId: this.id,//固有检索
+        ...this.searchOption
+      }
+      let params = {
+        ...this.queryParams,//分页信息
+        searchQuery: this.$commonJS.objectToString(searchOption),//检索条件
+        orderDTOList: this.sort,//排序信息
+      }
+      this.$api.query(params).then(res => {
+        if (res.code == 200) {
+          this.tableData = res.data.data
+          this.queryParams.size = res.data.size
+          this.queryParams.current = res.data.current
+          this.queryParams.total = res.data.total
+        }
+      }).catch(error => {
+        this.tableData = []
+        this.queryParams.total = 0
+      })
+    },
     // 搜索
-    search(){},
-    // 上传文件
-    uploadFile() { 
-      this.$refs.uploadFile.open({})
+    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 = params
+      // 调用查询接口
+      this.queryParams.current = 1
+      this.getList()
+    },
+    //排序
+    sortChange({ column, prop, order }) {
+      //如需要多个字段排序,则不需要清空
+      var params = {
+        sort: this.sort,
+        column,
+        prop,
+        order,
+      }
+      this.sort = this.$commonJS.getSortData(params)
+      this.queryParams.current = 1
+      this.getList()
     },
-    // 编辑
+    // 上传文件按钮
+    uploadFile() {
+      this.$refs.uploadFile.open()
+    },
+    // 编辑文件按钮
     handleEdit(row) {
       this.$refs.uploadFile.open(row)
     },
     // 删除
-    handleDelete(row) { 
-      
+    handleDelete(row) {
+      this.handleDeletes([row.id])
+    },
+    handleDeletes(ids) {
+      this.$api.dele(params).then(res => {
+        if (res.code == 200) {
+          this.queryParams.current = 1
+          this.getList()
+        }
+      })
     },
     // 分页
     handleCurrentChange(val) {
-      
+      this.queryParams.current = val
+      this.getList()
     },
   },
 }

+ 57 - 36
src/views/patentMining/components/handleExamine/handleExamine.vue

@@ -51,30 +51,22 @@
           </el-table-column>
         </el-table>
         <div class="div_margin">说明:</div>
-        <el-input type="textarea" :rows="3" readonly v-model="row.textarea"></el-input>
+        <el-input type="textarea" :rows="3" readonly v-model="row.description"></el-input>
       </div>
       <div slot="right" style="height: 100%;width:100%;padding: 20px 10px 0 10px;">
         <div>审核:</div>
         <el-divider></el-divider>
-        <el-upload class="upload_demo" ref="upload" action="#" :auto-upload="false" :show-file-list="false"
-          :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove" :file-list="fileList">
-          <el-button size="small" type="primary">上传文件</el-button>
-        </el-upload>
-        <el-table :data="examineData" border style="width: 100%" header-row-class-name="custom-table-header">
-          <el-table-column prop="name" label="文件名称" align="center"></el-table-column>
-          <el-table-column prop="time" label="文件上传时间" align="center"> </el-table-column>
-          <el-table-column prop="type" label="文件类型" align="center"> </el-table-column>
-          <el-table-column label="操作" align="center">
-            <el-button @click="deleteFile" size="small" type="text" style="color: red;">删除</el-button>
-          </el-table-column>
-        </el-table>
+        <myUpload :file-list="form.systemFileList" @on-change="onchangeFile" @on-remove="onRemove" style="height: 180px;"
+          :autoUpload="true"></myUpload>
+
         <div class="div_margin">下一个审核人:</div>
-        <el-select v-model="nextPersonId" placeholder="请选择下一个审核人" style="width: 100%;">
-          <el-option v-for="item in personOptions" :key="item.value" :label="item.label" :value="item.value">
-          </el-option>
-        </el-select>
+        <el-select style="width:100%;" ref="select1" v-model="form.handler" clearable filterable remote
+            :remote-method="remoteMethodPerson" v-SelectLazyLoading="lazyLoadingPerson">
+            <el-option v-for="item in personnelList.data" :key="item.id" :label="item.name" :value="item.id"
+              placeholder="请选择审核人"></el-option>
+          </el-select>
         <div class="div_margin">审核意见:</div>
-        <el-input type="textarea" :rows="3" v-model="reviewComments" style="margin-bottom: 20px;"></el-input>
+        <el-input type="textarea" :rows="3" v-model="form.description" style="margin-bottom: 20px;"></el-input>
         <el-button type="primary" size="small" @click="sure" style="float: right;">确 认</el-button>
       </div>
     </myView>
@@ -82,7 +74,9 @@
 </template>
 
 <script>
+import {personnelLoading} from '../mixins/index2'
 export default {
+  mixins:[personnelLoading],
   props: ['row'],
   data() {
     return {
@@ -93,33 +87,60 @@ export default {
           type: 'excel',
         }
       ],//任务详情文件
-      examineData: [
-        {
-          name: '创新文件2',
-          time: '2023-10-10',
-          type: 'excel',
-        }
-      ],//审核文件
-      reviewComments: '',//评审意见
+      
       nextPersonId: '',//下一个审核人
       personOptions: '',//下一个审核人数组
-      fileList: [],//文件数组
+      form: {
+        systemFileList: [],//文件数组
+        description: '',//审核意见
+      },
+      
     }
   },
   mounted() {
-
+    this.getPermissionPersonnel()
   },
   methods: {
     // 审核确认
-    sure() { },
-    // 删除文件
-    deleteFile(row) { },
-    // 上传文件
-    onChange(file, fileList) { },
-    handlePreview(file, fileList) { },
-    handleRemove(file, fileList) { },
+    sure() { 
+      window.open("about:blank", "_top").close()
+
+      // let params = {
+        
+      // }
+      // this.$api.sure(params).then(res => {
+      //   if (res.code == 200 ) {
+      //     this.$message.success('提交审核成功')
+      //   }
+      // })
+    },
+    // 上传的文件监听
+    onchangeFile(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)
+        }
+      } 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) {
+        this.form.systemFileList.splice(index, 1)
+      }
+    },
     // 引用
-    handleQuote(row) { },
+    handleQuote(row) { 
+      this.form.systemFileList.push(row)
+    },
     // 引用下拉菜单胡处理
     handleCommand(ev, row) {
       switch (ev) {

+ 10 - 6
src/views/patentMining/components/mixins/index2.js

@@ -18,7 +18,7 @@ export const column = {
         {
           name: "任务类型",
           type: "Integer",
-          value: "taskType",
+          value: "type",
         },
         {
           name: "发起人",
@@ -28,7 +28,7 @@ export const column = {
         {
           name: "处理人",
           type: "String",
-          value: "handlePerson",
+          value: "handlerName",
         },
         {
           name: "创建时间",
@@ -62,15 +62,19 @@ export const column = {
     // 遍历栏位为数组类型
     getArrJoin(data, type) {
       if (!data) {
-        return false
+        return '--'
       }
-      if (data.constructor == Array) {
+      
+      if (data.constructor == 'Array') {
+        if (data.length == 0) {
+          return '--'
+        }
         let arr = data.map(item => {
           return item[type]
         })
         return arr.join('、')
       } else {
-        console.log(type[data]);
+        // console.log(type[data]);
         return type[data]
       }
     },
@@ -78,7 +82,7 @@ export const column = {
 }
 
 
-// 专利挖掘-负责人懒加载
+// 专利挖掘-人员-懒加载
 export const personnelLoading = {
   data() {
     return {

+ 29 - 0
src/views/task/components/mixins/task.js

@@ -0,0 +1,29 @@
+// 专利挖掘相关方法
+export const taskPatentMining = {
+  data() {
+    return {
+      
+    }
+  },
+  mounted() {
+    
+  },
+  methods: {
+    // 新增文件分配任务成功
+    isCreate(val) {
+      if (val == '新增成功') {
+        this.getList()
+      }
+    },
+    // 新增审核任务成功(文件审核任务)
+    isSuccess(val) {
+      if (val == '新增成功') {
+        this.getList()
+      }
+    },
+    // 创建任务事件
+    createTask() {
+      this.$refs.createTaskDialog.open({})
+    },
+  },
+}

+ 379 - 0
src/views/task/components/table.vue

@@ -0,0 +1,379 @@
+<template>
+  <div class="height_100">
+    <el-container>
+      <el-header style="display: flex;justify-content: space-between;align-items: center;">
+        <div>
+          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
+        </div>
+        <div style="display:flex;margin-right:10px">
+          <el-button v-if="type == 1" type="primary" size="small" @click="createTask">创建任务</el-button>
+        </div>
+      </el-header>
+      <el-main class="height_100">
+        <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header"
+          @sort-change="sortChange">
+          <el-table-column label="#" align="center" width="80px">
+            <template slot-scope="scope">
+              <div>
+                {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column v-for="item in columnList" :key="item.value" :prop="item.value"
+            :render-header="$commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
+            <template slot-scope="scope">
+              <div v-if="['name'].includes(item.value)">
+                <el-link @click="handleItem(scope.row, item.value)">
+                  <span v-html="$commonJS.getColumnData(scope.row, item)"></span>
+                </el-link>
+              </div>
+              <div v-else-if="['type'].includes(item.value)"
+                v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskType })"></div>
+              <div v-else-if="['status'].includes(item.value)"
+                v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskStatus })"></div>
+              <div v-else v-html="$commonJS.getColumnData(scope.row, item)"></div>
+            </template>
+          </el-table-column>
+
+          <el-table-column label="操作" align="center" width="180px">
+            <template slot-scope="scope">
+              <div>
+                <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)"
+                  @click="handleTask(scope.row)">
+                  <span v-if="scope.row.status == '已完成' || scope.row.handlerName != userinfo.name">查 看</span>
+                  <span v-else>处 理</span>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item command="1">查看审核记录</el-dropdown-item>
+                    <el-dropdown-item command="2" style="color: red;text-align: center;">删除</el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer class="pagination">
+        <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
+          :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
+        </el-pagination>
+      </el-footer>
+    </el-container>
+
+
+    <auditRecords ref="auditRecords"></auditRecords>
+    <createTask ref="createTaskDialog" :id="id" @isCreate="isCreate"></createTask>
+    <handleTask1 ref="handleTask1Dialog"></handleTask1>
+    <handleTask2 ref="handleTask2Dialog" @isSuccess="isSuccess"></handleTask2>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { column } from '@/views/patentMining/components/mixins/index2'
+import { taskPatentMining } from './mixins/task'
+import auditRecords from '@/views/patentMining/components/dialog/auditRecords.vue'
+import createTask from '@/views/patentMining/components/dialog/createTask.vue'
+import handleTask1 from '@/views/patentMining/components/dialog/handleTask1.vue'
+import handleTask2 from '@/views/patentMining/components/dialog/handleTask2.vue'
+export default {
+  mixins: [column, taskPatentMining],
+  props: ['type', 'id', 'obj'],
+  components: {
+    auditRecords,
+    createTask,
+    handleTask1,
+    handleTask2,
+  },
+  data() {
+    return {
+      // table数据
+      tableData: [
+        {
+          name: '加热器专利挖掘1',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlerName: '张三',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘2',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlerName: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘3',
+          taskType: '2',
+          createPerson: '张三',
+          handlerName: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成'
+        },
+        {
+          name: '加热器专利挖掘4',
+          taskType: '3',
+          createPerson: '朱豪',
+          handlerName: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '未完成',
+          taskPath: '创新点梳理',
+          endTime: '2023-10-10',
+        },
+        {
+          name: '加热器专利挖掘5',
+          taskType: '1',
+          createPerson: '张三',
+          handlerName: '朱豪',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '已完成'
+        },
+        {
+          name: '加热器专利挖掘6',
+          taskType: '1',
+          createPerson: '朱豪',
+          handlerName: '张三',
+          createTime: '2023-9-28 13:52',
+          endTime: '2023-9-28 18:02',
+          status: '已完成'
+        },
+      ],
+      // 分页及总数信息
+      queryParams: {
+        current: 1,
+        size: 10,
+        total: 0,
+      },
+      // 检索字段
+      searchFiled: [],
+      // 检索字符串
+      searchOption: {},
+      //排序字段
+      sort: [{ "orderBy": "createTime", "orderType": 1 }],
+      // 检索字段标识
+      searchType: {
+        1: 'projectTask',//专利挖掘任务清单检索字段
+      },
+      // 任务类型
+      taskType: {
+        0: '标引任务',
+        1: '项目开卷审核任务',
+        2: '检索条件任务',
+        3: '对比任务',
+        4: '协同任务',
+        5: '任务审核任务',
+        6: '文件分配任务',
+      },
+      // 任务状态
+      taskStatus: {
+        1: '审核中',
+        2: '处理中',
+        3: '已完成',
+        4: '缺少资料',
+        5: '取消',
+      },
+    }
+  },
+  computed: {
+    ...mapGetters(['webSocket', 'userinfo']),
+  },
+  async mounted() {
+    // 获取table栏位
+    this.columnList = await this.$commonJS.getCustomField('projectTask')
+    // 获取栏位
+    this.getColumn()
+    this.getList()
+  },
+  methods: {
+    // 请求数据
+    getList() {
+      let searchOption = {
+        ...this.obj.search,//固有检索字段
+        ...this.searchOption
+      }
+      let params = {
+        ...this.queryParams,//分页信息
+        searchQuery: this.$commonJS.objectToString(searchOption),//检索条件
+        orderDTOList: this.sort,//排序信息
+      }
+
+      this.$api.queryProjectTask(params).then(response => {
+        if (response.code == 200) {
+          this.tableData = response.data.data
+          this.queryParams.current = response.data.current
+          this.queryParams.size = response.data.size
+          this.queryParams.total = response.data.total
+        }
+      }).catch(error => {
+        // this.tableData = []
+        this.queryParams.total = 0
+      })
+    },
+    // 分页
+    handleCurrentChange(val) {
+      this.queryParams.current = val
+      this.getList()
+    },
+    // 操作栏下拉菜单按钮
+    handleCommand(ev, row) {
+      switch (ev) {
+        case '1'://查看审核记录
+          this.$refs.auditRecords.open(row.id)
+          break;
+        case '2'://删除任务
+          this.deleteTask(row)
+          break;
+
+        default:
+          break;
+      }
+    },
+    // 删除任务
+    deleteTask(row) {
+      this.deleteTasks([row.id])
+    },
+    deleteTasks(ids) {
+      this.$api.dele(ids).then(response => {
+        if (response.code == 200) {
+          this.$message.success('删除成功')
+          this.queryParams.current = 1
+          this.getList()
+        }
+      })
+    },
+    //处理任务 
+    handleTask(row) {
+
+
+      if (row.handlerName != this.userinfo.name) {// 负责人不是自己
+
+      } else {
+        if (row.status != 3) {
+          this.handleTypeTask(row)
+        }
+      }
+
+
+
+      // if (row.handlerName != this.userinfo.name) {// 负责人不是自己
+      //   if (row.taskType == '1') {// 项目审核任务
+      //     this.$refs.handleTask1Dialog.open(row, false)
+      //   } else if (row.taskType == '2') {//文件分配任务
+      //     this.$refs.handleTask2Dialog.open(row, false)
+      //   }
+      // } else {//未完成状态
+      //   if (row.taskType == '1') {// 项目审核任务
+      //     this.$refs.handleTask1Dialog.open(row, true)
+      //   } else if (row.taskType == '2') {//文件分配任务
+      //     this.$refs.handleTask2Dialog.open(row, true)
+      //   } else {//文件审核任务
+      //     let router = this.$router.resolve({
+      //       path: '/handleExamine',
+      //       query: {
+      //         row: JSON.stringify(row)
+      //       }
+      //     })
+      //     window.open(router.href, '_blank')
+      //   }
+      // }
+    },
+    handleTypeTask(row) {
+      switch (row.type) {
+        case 1://项目开卷审核任务
+          this.getPatentMining()
+          break;
+        case 5://任务审核任务
+          let router = this.$router.resolve({
+            path: '/handleExamine',
+            query: {
+              row: JSON.stringify(row)
+            }
+          })
+          window.open(router.href, '_blank')
+          break;
+        case 6://文件分配任务
+          this.$refs.handleTask2Dialog.open(row, true)
+          break;
+
+        default:
+          break;
+      }
+    },
+    // 获取挖掘项目
+    getPatentMining() {
+      let params = {
+        current: 1,
+        size:10,
+        searchQuery: `id=${this.id}`,//检索条件
+      }
+      this.$api.queryPatentDigProject(params).then(res => {
+        if (res.code == 200) {
+          this.$refs.handleTask1Dialog.open(res.data.data[0], 1)
+        }
+      })
+    },
+    // 左侧搜索
+    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 = params
+      // 调用查询接口
+      this.queryParams.current = 1
+      this.getList()
+    },
+    //排序
+    sortChange({ column, prop, order }) {
+      //如需要多个字段排序,则不需要清空
+      var params = {
+        sort: this.sort,
+        column,
+        prop,
+        order,
+      }
+      this.sort = this.$commonJS.getSortData(params)
+      this.queryParams.current = 1
+      this.getList()
+    },
+    //获取table栏位及分组字段、检索字段
+    async getColumn() {
+      let params = [this.searchType[this.type]]
+      await this.$api.getParamsCommon(params).then(res => {
+        if (res.code == 200) {
+          let conditionDTOList = JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
+          // 搜索字段
+          this.searchFiled = this.$commonJS.getField(conditionDTOList, (u) => u.ifSearch == true, {
+            label: 'name',
+            value: 'value',
+            type: 'type',
+          })
+
+        }
+      })
+      // this.showView = false
+      // this.$nextTick(() => {
+      //   this.showView = true
+      // })
+    },
+
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 0 - 169
src/views/task/components/view/table.vue

@@ -1,169 +0,0 @@
-<template>
-  <div class="eventTable">
-    <div>
-      <el-table :data="tableData" style="width: 100%" header-row-class-name="custom-table-header">
-        <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" :key="item.key" :prop="item.key" :label="item.name" align="center">
-          <template slot-scope="scope">
-            <div v-if="['name', 'eventNumber', 'projectNumber'].includes(item.key)">
-              <el-link @click="handleItem(scope.row,item.key)">{{ scope.row[item.key] }}</el-link>
-            </div>
-            <div v-else v-html="getColumnData(scope.row,item.key)"></div>
-          </template>
-        </el-table-column>
-
-        <el-table-column prop="operation" label="操作" align="center" width="180px">
-				  <template slot-scope="scope">	
-					<div>
-						 <span><el-button size="mini" @click="handleEdit(scope.row)">处理</el-button></span> 
-						 <span v-if="scope.row.type!=0">
-							 <el-popconfirm 
-								  style="margin-left: 10px;"
-									title="这一条任务确定完成吗?" 
-									confirm-button-text='确定'
-									cancel-button-text='取消'
-									@confirm="handleFinish(scope.row)">
-								<el-button size="mini" slot="reference"  type="primary">确认完成</el-button>
-								</el-popconfirm>
-						 </span>
-					</div>
-				  </template>
-			  </el-table-column>
-      </el-table>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    isOperate: {//控制显示
-      type: String,
-      default:''
-    },
-    tableData: {//数据
-      type: Array,
-      default: () => {
-        return [{ name: '123', eventNumber: '报告一', projectNumber: '张三', projectNumber1: '',}]
-      }
-    },
-    queryParams: {//分页信息
-      type: Object,
-      default: () => {
-        return {
-          size: 10,
-          current: 1,
-        }
-      }
-    },
-    column: {//显示栏位管理数组
-      type: Array,
-      default: () => {
-        return [
-          {
-            "key": "name",
-            "name": "任务名称",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "eventNumber",
-            "name": "所属项目",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "projectNumber",
-            "name": "处理人",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "projectNumber1",
-            "name": "发起人",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "projectNumber2",
-            "name": "期限",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "projectNumber3",
-            "name": "类型",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "projectNumber4",
-            "name": "创建人",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-          {
-            "key": "time",
-            "name": "创建时间",
-            "type": "list",
-            "order": 0,
-            "hidden": true
-          },
-        ]
-      }
-    }
-  },
-  data() {
-    return {
-      
-    };
-  },
-  watch: {
-    
-  },
-  mounted() {
-   
-  },
-  methods: {
-    handleFinish() { },
-    // 处理事件
-    handleEdit(){},
-    // 点击名称等事件
-    handleItem(row,key) {
-      // console.log(row,key);
-    },
-    // 
-    getColumnData(row,key) {
-      if (key == 'projectNumber1') {
-        if (row[key]) {
-          var a=''
-          row[key].forEach(item => {
-            a+=item.name + '</br>'
-          });
-          return a
-        } else {
-          return ''
-        }
-      }
-    },
-  },
-};
-</script>
-<style lang="scss">
-.eventTable {
-
-}
-</style>
-<style lang="scss" scoped></style>

+ 31 - 0
src/views/task/index.vue

@@ -0,0 +1,31 @@
+<template>
+  <div>
+    <table></table>
+  </div>
+</template>
+
+<script>
+import table from './components/table.vue'
+export default {
+  components: {
+    table
+  },
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    type(){},
+    id(){},
+  },
+  mounted() {
+
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>