Browse Source

Merge remote-tracking branch 'origin/master'

user5 2 năm trước cách đây
mục cha
commit
c078b50e5e
37 tập tin đã thay đổi với 787 bổ sung244 xóa
  1. 7 0
      src/api/cw/reportManagement/ProjectReportService.js
  2. 8 0
      src/api/roster/RosterService.js
  3. 9 0
      src/views/modules/cw/invoice/InvoiceFormTask.vue
  4. 2 2
      src/views/modules/cw/projectRecords/ProjectRecordsForm.vue
  5. 1 0
      src/views/modules/cw/projectRecords/ProjectRecordsList.vue
  6. 11 3
      src/views/modules/cw/projectReportArchive/ProjectReportArchiveForm.vue
  7. 9 3
      src/views/modules/cw/projectReportArchive/ProjectReportArchiveList.vue
  8. 11 3
      src/views/modules/cw/projectReportArchive/ProjectReportArchiveTaskForm.vue
  9. 7 8
      src/views/modules/cw/reimbursementApproval/type/TypeList.vue
  10. 16 4
      src/views/modules/cw/reportCancellApply/ReportCancellApplyForm.vue
  11. 19 2
      src/views/modules/cw/reportCancellApply/ReportCancellApplyList.vue
  12. 16 5
      src/views/modules/cw/reportCancellApply/ReportCancellApplyTaskForm.vue
  13. 17 6
      src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedForm.vue
  14. 26 9
      src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedList.vue
  15. 15 4
      src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedTaskForm.vue
  16. 3 0
      src/views/modules/cw/reportManagement/ReportManagementAddForm.vue
  17. 3 0
      src/views/modules/cw/reportManagement/ReportManagementForm.vue
  18. 46 6
      src/views/modules/cw/reportManagement/ReportManagementList.vue
  19. 3 0
      src/views/modules/cw/reportManagement/ReportManagementSignatureForm.vue
  20. 3 0
      src/views/modules/cw/reportManagement/ReportManagementTaskForm.vue
  21. 22 6
      src/views/modules/cw/reportManagement/ReportServiceUnitForm.vue
  22. 3 0
      src/views/modules/cw/reportManagement/reportReview/ReportReviewForm.vue
  23. 1 1
      src/views/modules/cw/workClientInfo/WorkClientList.vue
  24. 15 13
      src/views/modules/cw/workContract/ContractRegistration.vue
  25. 9 0
      src/views/modules/finance/invoice/InvoiceFormTask.vue
  26. 13 4
      src/views/modules/flowable/task/TaskForm.vue
  27. 3 3
      src/views/modules/materialManagement/materialType/TypeList.vue
  28. 67 5
      src/views/modules/notify/MyNotifyList.vue
  29. 35 4
      src/views/modules/notify/NotifyList.vue
  30. 7 6
      src/views/modules/program/registered/ProjectForm.vue
  31. 83 27
      src/views/modules/program/registered/ProjectFormUpdate.vue
  32. 84 32
      src/views/modules/program/registered/RegisItemForm.vue
  33. 87 80
      src/views/modules/roster/RosterForm.vue
  34. 109 8
      src/views/modules/roster/RosterList.vue
  35. 2 0
      src/views/modules/zs/reimbursement/info/InfoForm.vue
  36. 14 0
      src/views/modules/zs/reimbursement/info/InfoList.vue
  37. 1 0
      src/views/modules/zs/reimbursement/info/ReimbursementForm.vue

+ 7 - 0
src/api/cw/reportManagement/ProjectReportService.js

@@ -152,4 +152,11 @@ export default class ProjectReportService {
       responseType: 'blob'
     })
   }
+  rebackSign (id) {
+    return request({
+      url: '/cwProjectReport/rebackSign',
+      method: 'get',
+      params: {reportId: id}
+    })
+  }
 }

+ 8 - 0
src/api/roster/RosterService.js

@@ -50,4 +50,12 @@ export default class RosterService {
       data: data
     })
   }
+  exportFile (params) {
+    return request({
+      url: '/roster/base/exportFile',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  }
 }

+ 9 - 0
src/views/modules/cw/invoice/InvoiceFormTask.vue

@@ -898,6 +898,15 @@
             throw new Error()
           }
         }
+        if (this.commonJS.isNotEmpty(this.inputForm.financeInvoiceBaseDTOList)) {
+          let i = this.inputForm.financeInvoiceBaseDTOList.length
+          for (let j = 0; j < i; j++) {
+            if (this.commonJS.isEmpty(this.inputForm.financeInvoiceBaseDTOList[j].programName)) {
+              this.$message.error('第' + (j + 1) + '行的基本信息不能为空')
+              throw new Error()
+            }
+          }
+        }
         if (this.inputForm.status === '5') {
           let acc = 0
           this.inputForm.financeInvoiceDetailDTOList.forEach((item, index) => {

+ 2 - 2
src/views/modules/cw/projectRecords/ProjectRecordsForm.vue

@@ -788,10 +788,10 @@
             if (this.commonJS.isEmpty(this.inputForm.cwProjectClientInfoDTOList)) {
               this.inputForm.cwProjectClientInfoDTOList = []
             }
-            if (this.commonJS.isEmpty(this.inputForm.projectMasterId)) {
+            if (this.commonJS.isEmpty(this.inputForm.projectMasterId) && this.method !== 'view') {
               this.inputForm.projectMasterId = JSON.parse(localStorage.getItem('user')).id
             }
-            if (this.commonJS.isEmpty(this.inputForm.projectLeaderId)) {
+            if (this.commonJS.isEmpty(this.inputForm.projectLeaderId) && this.method !== 'view') {
               this.inputForm.projectLeaderId = JSON.parse(localStorage.getItem('user')).id
             }
             if (this.commonJS.isEmpty(this.inputForm.projectMoney)) {

+ 1 - 0
src/views/modules/cw/projectRecords/ProjectRecordsList.vue

@@ -83,6 +83,7 @@
               <span v-else style="color: red">暂无合同</span>
             </template>
           </vxe-column>
+          <vxe-column min-width="160" align="center" title="客户名称" field="clientContactsName"></vxe-column>
           <vxe-column min-width="160" align="center" title="项目经理1" field="projectMasterName"></vxe-column>
           <vxe-column min-width="160" align="center" title="项目经理2" field="realHeaderName"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建人" field="createBy.name"></vxe-column>

+ 11 - 3
src/views/modules/cw/projectReportArchive/ProjectReportArchiveForm.vue

@@ -47,11 +47,19 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                  <el-form-item label="项目经理" prop="cwProjectRecordsDTO.projectMasterId"
+                  <el-form-item label="项目经理1" prop="cwProjectRecordsDTO.projectMasterName"
                                 :rules="[
                    ]">
-                    <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
-                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>
+                    <el-input :disabled="true" v-model="inputForm.cwProjectRecordsDTO.projectMasterName" placeholder="请填写项目经理1"></el-input>
+                    <!--                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>-->
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="项目经理2" prop="cwProjectRecordsDTO.realHeaderName"
+                                :rules="[
+                   ]">
+                    <el-input :disabled="true" v-model="inputForm.cwProjectRecordsDTO.realHeaderName" placeholder="请填写项目经理2"></el-input>
+                    <!--                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>-->
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">

+ 9 - 3
src/views/modules/cw/projectReportArchive/ProjectReportArchiveList.vue

@@ -11,10 +11,14 @@
       <el-form-item label="项目名称" prop="cwProjectRecordsDTO.projectName">
         <el-input size="small" v-model="searchForm.cwProjectRecordsDTO.projectName" placeholder="请输入项目名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="项目经理" prop="cwProjectRecordsDTO.projectMasterName">
+      <el-form-item label="项目经理1" prop="cwProjectRecordsDTO.projectMasterName">
 <!--        <el-input size="small" v-model="searchForm.cwProjectRecordsDTO.projectMasterName" placeholder="请输入项目经理" clearable></el-input>-->
         <UserSelect :limit='1' :userName="searchForm.cwProjectRecordsDTO.projectMasterName" @getValue='(value, label) => {searchForm.cwProjectRecordsDTO.projectMasterName = label}'></UserSelect>
       </el-form-item>
+      <el-form-item label="项目经理2" prop="cwProjectRecordsDTO.realHeaderName">
+        <!--        <el-input size="small" v-model="searchForm.cwProjectRecordsDTO.projectMasterName" placeholder="请输入项目经理" clearable></el-input>-->
+        <UserSelect :limit='1' :userName="searchForm.cwProjectRecordsDTO.realHeaderName" @getValue='(value, label) => {searchForm.cwProjectRecordsDTO.realHeaderName = label}'></UserSelect>
+      </el-form-item>
       <el-form-item label="档案年度" prop="year">
         <el-date-picker
           size="small"
@@ -142,7 +146,8 @@
             </template>
           </vxe-column>
           <vxe-column min-width="220" align="center" title="报告文号" field="reportNo"></vxe-column>
-          <vxe-column min-width="150" align="center" title="项目经理" field="cwProjectRecordsDTO.projectMasterName"></vxe-column>
+          <vxe-column min-width="150" align="center" title="项目经理1" field="cwProjectRecordsDTO.projectMasterName"></vxe-column>
+          <vxe-column min-width="150" align="center" title="项目经理2" field="cwProjectRecordsDTO.realHeaderName"></vxe-column>
           <vxe-column min-width="230" align="center" title="被审计单位" field="auditedUnitsName"></vxe-column>
           <vxe-column min-width="150" align="center" title="报告册数" field="reportNum"></vxe-column>
           <vxe-column min-width="150" align="center" title="底稿册数" field="papersNum"></vxe-column>
@@ -221,7 +226,8 @@
           name: '',
           cwProjectRecordsDTO: {
             projectName: '',
-            projectMasterName: ''
+            projectMasterName: '',
+            realHeaderName: ''
           },
           year: '',
           number: '',

+ 11 - 3
src/views/modules/cw/projectReportArchive/ProjectReportArchiveTaskForm.vue

@@ -38,11 +38,19 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                  <el-form-item label="项目经理" prop="cwProjectRecordsDTO.projectMasterId"
+                  <el-form-item label="项目经理1" prop="cwProjectRecordsDTO.projectMasterName"
                                 :rules="[
                    ]">
-                    <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
-                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>
+                    <el-input :disabled="true" v-model="inputForm.cwProjectRecordsDTO.projectMasterName" placeholder="请填写项目经理1"></el-input>
+<!--                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>-->
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="项目经理2" prop="cwProjectRecordsDTO.realHeaderName"
+                                :rules="[
+                   ]">
+                    <el-input :disabled="true" v-model="inputForm.cwProjectRecordsDTO.realHeaderName" placeholder="请填写项目经理2"></el-input>
+<!--                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>-->
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">

+ 7 - 8
src/views/modules/cw/reimbursementApproval/type/TypeList.vue

@@ -5,9 +5,9 @@
       <el-form-item label="报销内容名称" prop="name">
         <el-input size="small" v-model="searchForm.name" placeholder="请输入报销内容名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="序号" prop="sort">
-        <el-input size="small" v-model="searchForm.sort" placeholder="请输入序号" clearable></el-input>
-      </el-form-item>
+<!--      <el-form-item label="序号" prop="sort">-->
+<!--        <el-input size="small" v-model="searchForm.sort" placeholder="请输入序号" clearable></el-input>-->
+<!--      </el-form-item>-->
 
       <el-form-item>
         <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
@@ -41,9 +41,9 @@
           :checkbox-config="{}">
           <vxe-column type="seq" width="60" title="序号"></vxe-column>
           <vxe-column type="checkbox" width="40" ></vxe-column>
-          <vxe-column title="报销内容名称" field="name" align="left" tree-node></vxe-column>
-          <vxe-column title="关联部门" field="relateDepartment"></vxe-column>
-          <vxe-column width="100" title="序号" field="sort"></vxe-column>
+          <vxe-column min-width="200" title="报销内容名称" field="name" align="left" tree-node></vxe-column>
+          <vxe-column min-width="200" title="关联部门" field="relateDepartment" align="center"></vxe-column>
+          <vxe-column min-width="100" title="序号" field="sort" align="center"></vxe-column>
 
           <vxe-column title="操作" width="230px" fixed="right" align="center">
             <template  slot-scope="scope">
@@ -68,8 +68,7 @@
     data () {
       return {
         searchForm: {
-          name: '',
-          no: ''
+          name: ''
         },
         dataList: [],
         tablePage: {

+ 16 - 4
src/views/modules/cw/reportCancellApply/ReportCancellApplyForm.vue

@@ -41,10 +41,17 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                  <el-form-item label="项目经理" prop="projectMasterName"
+                  <el-form-item label="项目经理1" prop="projectMasterName"
                                 :rules="[
                    ]">
-                    <el-input :disabled="true" v-model="inputForm.projectMasterName" placeholder="请填写项目经理" clearable></el-input>
+                    <el-input :disabled="true" v-model="inputForm.projectMasterName" placeholder="请填写项目经理1" clearable></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="项目经理2" prop="projectMaster2Name"
+                                :rules="[
+                   ]">
+                    <el-input :disabled="true" v-model="inputForm.projectMaster2Name" placeholder="请填写项目经理2" clearable></el-input>
                   </el-form-item>
                 </el-col>
 
@@ -135,6 +142,7 @@
           cancellateReason: '',
           reportSponsor: '',
           projectMasterName: '',
+          projectMaster2Name: '',
           cwFileInfoList: [],
           servedUnitId: '',
           status: ''
@@ -252,6 +260,7 @@
           projectName: '',
           cancellateReason: '',
           reportSponsor: '',
+          projectMaster2Name: '',
           projectMasterName: ''
         }
         this.inputForm.id = id
@@ -416,7 +425,9 @@
           contractNum: '',
           payerSubject: '',
           paymentMethod: '',
-          contractId: ''
+          contractId: '',
+          projectMaster2Name: '',
+          projectMasterName: ''
         }
         // this.$refs.uploadComponent.clearUpload()
         this.$refs.inputForm.resetFields()
@@ -502,7 +513,8 @@
         // console.log('row', row)
         this.inputForm.projectName = row.projectName // 项目名称
         this.inputForm.projectId = row.id // 项目id
-        this.inputForm.projectMasterName = row.projectMasterName // 项目经理
+        this.inputForm.projectMasterName = row.projectMasterName // 项目经理1
+        this.inputForm.projectMaster2Name = row.projectMaster2Name // 项目经理2
         this.inputForm.reportNo = row.reportNo // 报告文号
         this.inputForm.reportNewLineId = row.reportNewLineId // 新建行id
         this.clearClientList()

+ 19 - 2
src/views/modules/cw/reportCancellApply/ReportCancellApplyList.vue

@@ -8,7 +8,7 @@
       <el-form-item label="项目名称" prop="projectName">
         <el-input size="small" v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="项目经理" prop="projectMasterId">
+      <el-form-item label="项目经理1" prop="projectMasterId">
         <SelectUserTree
           ref="companyTree"
           :props="{
@@ -23,6 +23,21 @@
           @getValue="(value) => {searchForm.projectMasterId=value}"/>
 <!--        <el-input size="small" v-model="searchForm.projectMaster" placeholder="请输入项目经理" clearable></el-input>-->
       </el-form-item>
+      <el-form-item label="项目经理2" prop="projectMaster2Id">
+        <SelectUserTree
+          ref="companyTree"
+          :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+          :url="`/sys/user/treeUserDataAllOffice?type=2`"
+          :value="searchForm.projectMaster2Id"
+          :clearable="true"
+          :accordion="true"
+          @getValue="(value) => {searchForm.projectMaster2Id=value}"/>
+        <!--        <el-input size="small" v-model="searchForm.projectMaster" placeholder="请输入项目经理" clearable></el-input>-->
+      </el-form-item>
 <!--      <el-form-item label="创建人" prop="createBy">-->
 <!--        <el-input size="small" v-model="searchForm.createBy" placeholder="请输入创建人" clearable></el-input>-->
 <!--      </el-form-item>-->
@@ -93,7 +108,8 @@
           <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
           <vxe-column min-width="160" align="center" title="项目名称" field="projectName"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告所属部门" field="departmentName"></vxe-column>
-          <vxe-column min-width="160" align="center" title="项目经理" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理1" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理2" field="projectMaster2Name"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告主办人" field="reportSponsor"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建人" field="userName"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
@@ -151,6 +167,7 @@
           projectNumber: '',
           projectName: '',
           projectMasterId: '',
+          projectMaster2Id: '',
           createBy: '',
           contractDates: []
         },

+ 16 - 5
src/views/modules/cw/reportCancellApply/ReportCancellApplyTaskForm.vue

@@ -32,10 +32,17 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="项目经理" prop="projectMasterName"
+              <el-form-item label="项目经理1" prop="projectMasterName"
                             :rules="[
                    ]">
-                <el-input :disabled="true" v-model="inputForm.projectMasterName" placeholder="请填写项目经理" clearable></el-input>
+                <el-input :disabled="true" v-model="inputForm.projectMasterName" placeholder="请填写项目经理1" clearable></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="项目经理2" prop="projectMaster2Name"
+                            :rules="[
+                   ]">
+                <el-input :disabled="true" v-model="inputForm.projectMaster2Name" placeholder="请填写项目经理2" clearable></el-input>
               </el-form-item>
             </el-col>
 
@@ -115,6 +122,7 @@
           cancellateReason: '',
           reportSponsor: '',
           projectMasterName: '',
+          projectMaster2Name: '',
           cwFileInfoList: [],
           servedUnitId: '',
           status: ''
@@ -189,7 +197,8 @@
           projectName: '',
           cancellateReason: '',
           reportSponsor: '',
-          projectMasterName: ''
+          projectMasterName: '',
+          projectMaster2Name: ''
         }
         this.inputForm.id = id
         this.loading = false
@@ -226,7 +235,8 @@
       getContract (row) {
         this.inputForm.projectName = row.projectName // 项目名称
         this.inputForm.projectId = row.id // 项目id
-        this.inputForm.projectMasterName = row.projectMasterName // 项目经理
+        this.inputForm.projectMasterName = row.projectMasterName // 项目经理1
+        this.inputForm.projectMaster2Name = row.projectMaster2Name // 项目经理2
         this.inputForm.reportNo = row.reportNo // 报告文号
         this.inputForm.reportNewLineId = row.reportNewLineId // 新建行id
         this.inputForm.reportSponsor = row.reportSponsor // 报告主办人
@@ -406,7 +416,8 @@
           projectName: '',
           cancellateReason: '',
           reportSponsor: '',
-          projectMasterName: ''
+          projectMasterName: '',
+          projectMaster2Name: ''
         }
         // this.$refs.uploadComponent.clearUpload()
         this.$refs.inputForm.resetFields()

+ 17 - 6
src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedForm.vue

@@ -49,13 +49,21 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                  <el-form-item label="项目经理" prop="cwProjectRecordsDTO.projectMasterId"
+                  <el-form-item label="项目经理1" prop="cwProjectRecordsDTO.projectMasterId"
                                 :rules="[
                    ]">
                     <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
                     <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>
                   </el-form-item>
                 </el-col>
+                <el-col :span="12">
+                  <el-form-item label="项目经理2" prop="cwProjectRecordsDTO.realHeader"
+                                :rules="[
+                   ]">
+                    <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
+                    <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.realHeader" @getValue='(value) => {inputForm.cwProjectRecordsDTO.realHeader = value}'></UserSelect>
+                  </el-form-item>
+                </el-col>
                 <!--            <el-col :span="12">-->
                 <!--              <el-form-item label="被审计单位" prop="auditedUnitsName"-->
                 <!--                            :rules="[-->
@@ -351,7 +359,8 @@
             procInsId: '',
             processDefinitionId: '',
             status: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',
@@ -457,10 +466,10 @@
       init (method, id) {
         this.visible = true
         if (method === 'edit') {
-          this.title = '项目信息修改'
+          this.title = '报告作废归档修改'
           this.method = method
         } else {
-          this.title = '项目详情'
+          this.title = '报告作废归档详情'
           this.method = 'view'
         }
         this.activeName = 'files'
@@ -505,7 +514,8 @@
             procInsId: '',
             processDefinitionId: '',
             status: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',
@@ -708,7 +718,8 @@
             procInsId: '',
             processDefinitionId: '',
             status: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',

+ 26 - 9
src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedList.vue

@@ -8,7 +8,7 @@
       <el-form-item label="项目名称" prop="projectName">
         <el-input size="small" v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="项目经理" prop="projectMasterId">
+      <el-form-item label="项目经理1" prop="projectMasterId">
         <SelectUserTree
           ref="companyTree"
           :props="{
@@ -23,6 +23,21 @@
           @getValue="(value) => {searchForm.projectMasterId=value}"/>
 <!--        <el-input size="small" v-model="searchForm.projectMaster" placeholder="请输入项目经理" clearable></el-input>-->
       </el-form-item>
+      <el-form-item label="项目经理2" prop="projectMaster2Id">
+        <SelectUserTree
+          ref="companyTree"
+          :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+          :url="`/sys/user/treeUserDataAllOffice?type=2`"
+          :value="searchForm.projectMaster2Id"
+          :clearable="true"
+          :accordion="true"
+          @getValue="(value) => {searchForm.projectMaster2Id=value}"/>
+        <!--        <el-input size="small" v-model="searchForm.projectMaster" placeholder="请输入项目经理" clearable></el-input>-->
+      </el-form-item>
 <!--      <el-form-item label="创建人" prop="createBy">-->
 <!--        <el-input size="small" v-model="searchForm.createBy" placeholder="请输入创建人" clearable></el-input>-->
 <!--      </el-form-item>-->
@@ -93,7 +108,8 @@
           <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
           <vxe-column min-width="160" align="center" title="项目名称" field="projectName"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告所属部门" field="departmentName"></vxe-column>
-          <vxe-column min-width="160" align="center" title="项目经理" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理1" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理2" field="projectMaster2Name"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告主办人" field="reportSponsor"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建人" field="userName"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
@@ -119,9 +135,9 @@
 
           <vxe-column title="操作" width="150px" fixed="right" align="center">
             <template  slot-scope="scope">
-              <el-button v-if="hasPermission('cw:cwProjectReport:filed')&&scope.row.createById === $store.state.user.id&&scope.row.status==='5'&& (scope.row.applyFileType === undefined || scope.row.applyFileType === '0')" type="text"  size="small" @click="archived(scope.row.id)">归档</el-button>
+              <el-button v-if="hasPermission('cw:cwProjectReport:filed')&&scope.row.createById === $store.state.user.id&&scope.row.status==='5'&& (scope.row.applyFileType === undefined || scope.row.applyFileType === '0')" type="text"  size="small" @click="archived(scope.row)">归档</el-button>
               <!--归档暂存修改-->
-              <el-button v-if="hasPermission('cw:cwProjectReport:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && scope.row.applyFileType === '1'" type="text" size="small" @click="archived(scope.row.id)">修改</el-button>
+              <el-button v-if="hasPermission('cw:cwProjectReport:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && scope.row.applyFileType === '1'" type="text" size="small" @click="archived(scope.row)">修改</el-button>
               <el-button v-else-if="hasPermission('cw:cwProjectReport:edit')&&isAdmin&&(scope.row.applyFileType==='1'||scope.row.applyFileType==='3'||scope.row.applyFileType==='5')" type="text"  size="small" @click="edit(scope.row.id)">修改</el-button>
               <!--纸质归档撤回驳回修改-->
               <el-button v-if="hasPermission('cw:cwProjectReport:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && (scope.row.applyFileType === '3' )" type="text" size="small" @click="paperFiledAndClose(scope.row.id)">修改</el-button>
@@ -168,6 +184,7 @@
           projectNumber: '',
           projectName: '',
           projectMasterId: '',
+          projectMaster2Id: '',
           createBy: '',
           contractDates: []
         },
@@ -456,15 +473,15 @@
         })
       } */
       // 报告作废归档
-      archived (id) {
+      archived (row) {
         this.processService.getByName('会计-报告作废归档').then(({data}) => {
           if (!this.commonJS.isEmpty(data.id)) {
             // console.log('data', data)
             // 读取流程表单
-            let tabTitle = `发起流程【会计-报告作废归档】`
-            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报告作废归档]`
+            let tabTitle = ' ' + row.reportNo + ' - ' + row.projectName
+            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 ` + tabTitle + '[会计-报告作废归档]'
             this.taskService.getTaskDef({ procDefId: data.id,
-              businessId: id,
+              businessId: row.id,
               businessTable: 'cw_project_report_cancell_apply_archived',
               status: 'startAndHoldFiled'}).then((reture) => {
                 this.$router.push({
@@ -479,7 +496,7 @@
                     formUrl: reture.data.formUrl,
                     formTitle: processTitle,
                     businessTable: 'cw_project_report_cancell_apply_archived',
-                    businessId: id,
+                    businessId: row.id,
                     isShow: false,
                     routePath: '/cw/reportCancellApplyArchived/ReportCancellApplyArchivedList'
                   }

+ 15 - 4
src/views/modules/cw/reportCancellApplyArchived/ReportCancellApplyArchivedTaskForm.vue

@@ -40,13 +40,21 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="项目经理" prop="cwProjectRecordsDTO.projectMasterId"
+              <el-form-item label="项目经理1" prop="cwProjectRecordsDTO.projectMasterId"
                             :rules="[
                    ]">
                 <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
                 <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.projectMasterId" @getValue='(value) => {inputForm.cwProjectRecordsDTO.projectMasterId = value}'></UserSelect>
               </el-form-item>
             </el-col>
+            <el-col :span="12">
+              <el-form-item label="项目经理2" prop="cwProjectRecordsDTO.realHeader"
+                            :rules="[
+                   ]">
+                <!--                    <el-input v-model="inputForm.projectMasterId" placeholder="请填写项目经理" clearable></el-input>-->
+                <UserSelect size="medium" :disabled="true" :limit='1' :value="inputForm.cwProjectRecordsDTO.realHeader" @getValue='(value) => {inputForm.cwProjectRecordsDTO.realHeader = value}'></UserSelect>
+              </el-form-item>
+            </el-col>
 <!--            <el-col :span="12">-->
 <!--              <el-form-item label="被审计单位" prop="auditedUnitsName"-->
 <!--                            :rules="[-->
@@ -328,7 +336,8 @@
             procInsId: '',
             processDefinitionId: '',
             applyFileType: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',
@@ -434,7 +443,8 @@
             procInsId: '',
             processDefinitionId: '',
             applyFileType: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',
@@ -709,7 +719,8 @@
             procInsId: '',
             processDefinitionId: '',
             status: '',
-            contractId: ''
+            contractId: '',
+            realHeader: ''
           },
           fileNumber: '',
           reportDate: '',

+ 3 - 0
src/views/modules/cw/reportManagement/ReportManagementAddForm.vue

@@ -754,6 +754,9 @@
           if (this.commonJS.isEmpty(this.inputForm.realCreate)) {
             this.inputForm.realCreate = JSON.parse(localStorage.getItem('user')).id
           }
+          if (this.commonJS.isEmpty(this.inputForm.signatureType) && this.method !== 'view') {
+            this.inputForm.signatureType = '1'
+          }
           this.$refs.enclosure.clearUpload()
           this.$refs.enclosure.newUpload(this.method, [], 'cwProjectReport', null, null, null, null, false)
           // this.$refs.archiveFile.clearUpload()

+ 3 - 0
src/views/modules/cw/reportManagement/ReportManagementForm.vue

@@ -1148,6 +1148,9 @@
             if (this.formReadOnly) {
               method = 'view'
             }
+            if (this.commonJS.isEmpty(this.inputForm.signatureType) && this.method !== 'view') {
+              this.inputForm.signatureType = '1'
+            }
             if (this.commonJS.isEmpty(data.details)) {
               this.reportReviewService.list('1').then(({data}) => { this.detailDivide(data) })
             } else {

+ 46 - 6
src/views/modules/cw/reportManagement/ReportManagementList.vue

@@ -8,7 +8,7 @@
       <el-form-item label="项目名称" prop="projectName">
         <el-input size="small" v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="项目经理" prop="projectMasterId">
+      <el-form-item label="项目经理1" prop="projectMasterId">
         <SelectUserTree
           ref="companyTree"
           :props="{
@@ -23,6 +23,21 @@
           @getValue="(value) => {searchForm.projectMasterId=value}"/>
 <!--        <el-input size="small" v-model="searchForm.projectMasterName" placeholder="请输入项目经理" clearable></el-input>-->
       </el-form-item>
+      <el-form-item label="项目经理2" prop="projectMaster2Id">
+        <SelectUserTree
+          ref="companyTree"
+          :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+          :url="`/sys/user/treeUserDataAllOffice?type=2`"
+          :value="searchForm.projectMaster2Id"
+          :clearable="true"
+          :accordion="true"
+          @getValue="(value) => {searchForm.projectMaster2Id=value}"/>
+        <!--        <el-input size="small" v-model="searchForm.projectMasterName" placeholder="请输入项目经理" clearable></el-input>-->
+      </el-form-item>
       <el-form-item label="创建人" prop="createBy">
         <SelectUserTree
           ref="companyTree"
@@ -124,9 +139,11 @@
           </vxe-column>
           <vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
           <vxe-column min-width="160" align="center" title="项目名称" field="projectName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="客户名称" field="servedUnitName"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告文号" field="reportNo"></vxe-column>
           <vxe-column min-width="160" align="center" title="报告所属部门" field="departmentName"></vxe-column>
-          <vxe-column min-width="160" align="center" title="项目经理" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理1" field="projectMasterName"></vxe-column>
+          <vxe-column min-width="160" align="center" title="项目经理2" field="projectMaster2Name"></vxe-column>
 <!--          <vxe-column min-width="160" align="center" title="报告主办人" field="reportSponsor"></vxe-column>-->
           <vxe-column min-width="160" align="center" title="创建人" field="userName"></vxe-column>
           <vxe-column min-width="160" align="center" title="创建时间" field="createDate"></vxe-column>
@@ -142,7 +159,7 @@
             <template slot-scope="scope">
               <el-button v-if="scope.row.signatureType === '1'"  type="text" @click="detailS(scope.row)" effect="dark" size="mini"
                           :type="$dictUtils.getDictLabel('cw_status_flag', scope.row.status1, '-')">
-                {{$dictUtils.getDictLabel("cw_status", scope.row.status1, '-')}}
+                {{scope.row.status1 === '5' ? '电子章已完成' : $dictUtils.getDictLabel("cw_status", scope.row.status1, '-')}}
               </el-button>
               <el-button v-else-if="scope.row.signatureType === '2'" type="text" @click="detailS2(scope.row)" effect="dark" size="mini"
                           :type="$dictUtils.getDictLabel('cw_project_report_sign_status_flag', scope.row.status2, '-')">
@@ -150,7 +167,7 @@
               </el-button>
               <el-button v-else-if="scope.row.signatureType === '3'" type="text" @click="detailS3(scope.row)" effect="dark" size="mini"
                          :type="$dictUtils.getDictLabel('cw_status_flag', scope.row.status3, '-')">
-                {{$dictUtils.getDictLabel("cw_status", scope.row.status3, '-')}}
+                {{scope.row.status3 === '5' ? '实体章已完成' : $dictUtils.getDictLabel("cw_status", scope.row.status3, '-')}}
               </el-button>
               <el-button v-else effect="dark" size="mini" >
                 未发起
@@ -188,6 +205,12 @@
 <!--              公章+执业章流程-->
               <el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||isAdmin||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && scope.row.reviewStatus === '5' && scope.row.signatureType === '2' && (scope.row.status2 === '0' || scope.row.status2 === '3')" type="text" size="small" @click="pushS2(scope.row)">公章+执业章</el-button>
               <el-button v-if="hasPermission('cw:workContract:filed') && (scope.row.createById === $store.state.user.id||isAdmin||haveProjectIds.includes(scope.row.projectId)) && scope.row.status === '5' && scope.row.reviewStatus === '5' && scope.row.signatureType === '2' && (scope.row.status2 === '2' || scope.row.status2 === '6' || scope.row.status2 === '7')" type="text" size="small" @click="rebackS2(scope.row)">撤回签章申请</el-button>
+<!--              签章撤回 (只有管理员在签章完成后可使用此功能)-->
+              <el-button v-if="(
+                                (scope.row.signatureType === '1' && scope.row.status1 === '5') ||
+                                (scope.row.signatureType === '2' && scope.row.status2 === '5') ||
+                                (scope.row.signatureType === '3' && scope.row.status3 === '5')
+                                ) && isAdmin" type="text" size="small" @click="rebackSign(scope.row)">撤回签章</el-button>
             </template>
           </vxe-column>
         </vxe-table>
@@ -233,6 +256,7 @@
           projectNumber: '',
           projectName: '',
           projectMasterId: '',
+          projectMaster2Id: '',
           createBy: '',
           contractDates: []
         },
@@ -566,8 +590,8 @@
       pushF (row) {
         // console.log('row', row)
         // 读取流程表单
-        let title = `发起流程【会计-报告复核】`
-        let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了[会计-报告复核]`
+        let title = ' ' + row.documentNo + ' - ' + row.projectName
+        let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了` + title + '[会计-报告复核]'
         let status = 'startAndClose'
         if (row.reviewStatus === '3') {
           status = 'startAndClose'
@@ -890,6 +914,22 @@
             // console.log(err.response)
           }
         })
+      },
+      // 撤回签章
+      rebackSign (row) {
+        this.$confirm(`确定要撤回已完成的签章吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.projectReportService.rebackSign(row.id).then(() => {
+            this.refreshList()
+            this.$message.success('签章已撤回')
+          }).catch(() => {
+            this.refreshList()
+            this.$message.error('签章已撤回')
+          })
+        })
       }
     }
   }

+ 3 - 0
src/views/modules/cw/reportManagement/ReportManagementSignatureForm.vue

@@ -789,6 +789,9 @@
             } else {
               this.method = 'false'
             }
+            if (this.commonJS.isEmpty(this.inputForm.signatureType) && this.method !== 'view') {
+              this.inputForm.signatureType = '1'
+            }
             if (this.commonJS.isNotEmpty(this.inputForm.signatureContractId) && this.status === 'audit' && this.commonJS.isNotEmpty(sFiles) && this.inputForm.signatureType !== '3') {
               // 签章按钮展示
               this.$refs.archiveFile.newUpload(this.method, data.cwFileInfoList, 'cwReportSignature', null, null, null, null, false, 'audit')

+ 3 - 0
src/views/modules/cw/reportManagement/ReportManagementTaskForm.vue

@@ -489,6 +489,9 @@
             if (this.status === 'audit' || this.status === 'taskFormDetail') {
               this.method = 'view'
             }
+            if (this.commonJS.isEmpty(this.inputForm.signatureType) && this.method !== 'view') {
+              this.inputForm.signatureType = '1'
+            }
             this.$refs.archiveFile.newUpload(this.method, data.cwFileInfoList, 'cwWorkContract', null, null, null, null, false)
             this.loading = false
           })

+ 22 - 6
src/views/modules/cw/reportManagement/ReportServiceUnitForm.vue

@@ -11,6 +11,20 @@
       @keyup.enter.native="getWorkClient"
       :visible.sync="visibleChoose">
       <div style="height: calc(100%);">
+        <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
+          <!-- 搜索框-->
+          <el-form-item label="客户名称" prop="name">
+            <el-input size="small" v-model="searchForm.name" placeholder="请输入客户名称" clearable></el-input>
+          </el-form-item>
+          <el-form-item label="客户编号" prop="no">
+            <el-input size="small" v-model="searchForm.no" placeholder="请输入客户编号" clearable></el-input>
+          </el-form-item>
+
+          <el-form-item>
+            <el-button type="primary" @click="list()" size="small" icon="el-icon-search">查询</el-button>
+            <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+          </el-form-item>
+        </el-form>
 
         <vxe-table
           border="inner"
@@ -77,7 +91,8 @@
         searchForm: {
           name: '',
           no: ''
-        }
+        },
+        projectId: ''
       }
     },
     // workClientService: null,
@@ -93,9 +108,10 @@
     methods: {
       init (id) {
         // console.log('projectID', id)
+        this.projectId = id
         this.title = '客户选择'
         this.visibleChoose = true
-        this.list(id)
+        this.list()
       },
       // 表单提交
       getWorkClient () {
@@ -107,14 +123,14 @@
           this.$emit('getWorkClientChoose', row)
         }
       },
-      list (id) {
+      list () {
         this.dataList = []
         this.loading = true
         this.projectReportService.clineList({
           'current': this.tablePage.currentPage,
           'size': this.tablePage.pageSize,
           'orders': this.tablePage.orders,
-          'projectId': id,
+          'projectId': this.projectId,
           ...this.searchForm
         }).then(({data}) => {
           // console.log('进来了projectReportService', data)
@@ -141,11 +157,11 @@
         this.list()
       },
       resetSearch () {
-        // this.$refs.searchForm.resetFields()
+        this.$refs.searchForm.resetFields()
         this.list()
       },
       close () {
-        // this.$refs.searchForm.resetFields()
+        this.$refs.searchForm.resetFields()
         this.visibleChoose = false
       }
     }

+ 3 - 0
src/views/modules/cw/reportManagement/reportReview/ReportReviewForm.vue

@@ -871,6 +871,9 @@
             } else {
               this.method = 'false'
             }
+            if (this.commonJS.isEmpty(this.inputForm.signatureType) && this.method !== 'view') {
+              this.inputForm.signatureType = '1'
+            }
             this.$refs.enclosure.newUpload(this.method, data.cwFileInfoList2, 'cwWorkContract', null, null, null, null, false)
             this.$refs.archiveFile.newUpload('view', data.cwFileInfoList, 'cwWorkContract', null, null, null, null, false)
             this.$refs.signatureFile.newUpload('view', data.signatureFileList, 'cwWorkContract', null, null, null, null, false)

+ 1 - 1
src/views/modules/cw/workClientInfo/WorkClientList.vue

@@ -123,7 +123,7 @@
             </template>
           </vxe-column>
           <vxe-column min-width="160" align="center" title="统一社会信用代码" field="uscCode"></vxe-column>
-          <vxe-column min-width="160" align="center" title="英文名称" field="englishName"></vxe-column>
+<!--          <vxe-column min-width="160" align="center" title="英文名称" field="englishName"></vxe-column>-->
           <vxe-column min-width="160" align="center" title="所属行业" field="industry">
             <template slot-scope="scope">
               {{$dictUtils.getDictLabel('cw_work_client_industry', scope.row.industry, '-')}}

+ 15 - 13
src/views/modules/cw/workContract/ContractRegistration.vue

@@ -132,6 +132,7 @@
             </template>
           </vxe-column>
           <vxe-column min-width="150" align="center" title="合同编号" field="contractNo"></vxe-column>
+          <vxe-column min-width="150" align="center" title="客户名称" field="clientContactsName"></vxe-column>
           <vxe-column min-width="150" align="center" title="案卷号" field="filedNo"></vxe-column>
           <vxe-column min-width="150" align="center" title="签约日期" field="signingDate"></vxe-column>
           <vxe-column min-width="150" align="center" title="合同金额(元)" field="contractAmount"></vxe-column>
@@ -178,15 +179,15 @@
               <!--归档撤回-->
 <!--              <el-button v-if="hasPermission('cw:workContract:back') && scope.row.status === '5' && scope.row.filedType === '2'" type="text"  size="small" @click="rebackFiled(scope.row)">撤回</el-button>-->
               <!--合同借用-->
-              <el-button v-if="hasPermission('cw:workContract:borrow') && scope.row.status === '5' && scope.row.filedPaperType === '5' && (scope.row.borrowType === undefined || scope.row.borrowType === '0' || scope.row.borrowType === '1')" type="text" size="small" @click="borrow(scope.row.id)">借用</el-button>
+              <el-button v-if="hasPermission('cw:workContract:borrow') && scope.row.status === '5' && scope.row.filedPaperType === '5' && (scope.row.borrowType === undefined || scope.row.borrowType === '0' || scope.row.borrowType === '1')" type="text" size="small" @click="borrow(scope.row)">借用</el-button>
               <!--借用撤回-->
               <el-button v-if="hasPermission('cw:workContract:back') && scope.row.status === '5' && scope.row.filedPaperType === '5' && scope.row.borrowType === '2'" type="text" size="small" @click="rebackBorrow(scope.row)">撤回借用申请</el-button>
               <!--借用归还-->
               <el-button v-if="hasPermission('cw:workContract:reture') && scope.row.status === '5' && scope.row.filedPaperType === '5'  && scope.row.borrowType === '5'" type="text" size="small" @click="retureBorrow(scope.row)">归还合同</el-button>
 
-              <el-button v-if="hasPermission('cw:workContract:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && (scope.row.filedPaperType === '0' || scope.row.filedPaperType === undefined)" type="text" size="small" @click="paperFiled(scope.row.id)">纸质归档</el-button>
+              <el-button v-if="hasPermission('cw:workContract:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && (scope.row.filedPaperType === '0' || scope.row.filedPaperType === undefined)" type="text" size="small" @click="paperFiled(scope.row)">纸质归档</el-button>
               <!--纸质归档暂存修改-->
-              <el-button v-if="hasPermission('cw:workContract:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && scope.row.filedPaperType === '1'" type="text" size="small" @click="paperFiled(scope.row.id)">纸质归档</el-button>
+              <el-button v-if="hasPermission('cw:workContract:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && scope.row.filedPaperType === '1'" type="text" size="small" @click="paperFiled(scope.row)">纸质归档</el-button>
               <!--纸质归档撤回驳回修改-->
               <el-button v-if="hasPermission('cw:workContract:filed') && scope.row.status === '5'  && scope.row.createId === $store.state.user.id && (scope.row.filedPaperType === '3')" type="text" size="small" @click="paperFiledAndClose(scope.row.id)">纸质归档</el-button>
               <!--纸质归档撤回-->
@@ -687,15 +688,15 @@
         }
       }, */
       // 借用
-      borrow (id) {
+      borrow (row) {
         this.processService.getByName('会计-合同借用').then(({data}) => {
           if (!this.commonJS.isEmpty(data.id)) {
             // console.log('data', data)
             // 读取流程表单
-            let tabTitle = `发起流程【会计-合同借用】`
-            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-合同借用]`
+            let tabTitle = ' ' + row.contractNo + ' - ' + row.contractName
+            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 ` + tabTitle + '[会计-合同借用]'
             this.taskService.getTaskDef({ procDefId: data.id,
-              businessId: id,
+              businessId: row.id,
               businessTable: 'cw_work_contract_borrow',
               status: 'startAndCloseBorrow'}).then((reture) => {
                 this.$router.push({
@@ -709,7 +710,7 @@
                     formUrl: reture.data.formUrl,
                     formTitle: processTitle,
                     businessTable: 'cw_work_contract_borrow',
-                    businessId: id,
+                    businessId: row.id,
                     isShow: false,
                     routePath: '/cw/workContract/ContractRegistration'
                   }
@@ -760,15 +761,16 @@
         })
       },
       // 纸质归档
-      paperFiled (id) {
+      paperFiled (row) {
+        console.log('row', row)
         this.processService.getByName('会计-合同纸质归档').then(({data}) => {
           if (!this.commonJS.isEmpty(data.id)) {
             // console.log('data', data)
             // 读取流程表单
-            let tabTitle = `发起流程【会计-合同纸质归档】`
-            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-合同纸质归档]`
+            let tabTitle = ' ' + row.contractNo + ' - ' + row.contractName
+            let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 ` + tabTitle + '[会计-合同纸质归档]'
             this.taskService.getTaskDef({ procDefId: data.id,
-              businessId: id,
+              businessId: row.id,
               businessTable: 'cw_work_contract_file_paper',
               status: 'startAndHoldFiled'}).then((reture) => {
                 this.$router.push({
@@ -783,7 +785,7 @@
                     formUrl: reture.data.formUrl,
                     formTitle: processTitle,
                     businessTable: 'cw_work_contract_file_paper',
-                    businessId: id,
+                    businessId: row.id,
                     isShow: false,
                     routePath: '/cw/workContract/ContractRegistration'
                   }

+ 9 - 0
src/views/modules/finance/invoice/InvoiceFormTask.vue

@@ -874,6 +874,15 @@
             throw new Error()
           }
         }
+        if (this.commonJS.isNotEmpty(this.inputForm.financeInvoiceBaseDTOList)) {
+          let i = this.inputForm.financeInvoiceBaseDTOList.length
+          for (let j = 0; j < i; j++) {
+            if (this.commonJS.isEmpty(this.inputForm.financeInvoiceBaseDTOList[j].programName)) {
+              this.$message.error('第' + (j + 1) + '行的基本信息不能为空')
+              throw new Error()
+            }
+          }
+        }
         if (this.inputForm.status === '5') {
           let acc = 0
           this.inputForm.financeInvoiceDetailDTOList.forEach((item, index) => {

+ 13 - 4
src/views/modules/flowable/task/TaskForm.vue

@@ -28,7 +28,7 @@
 
 
 <el-card style="margin-top:10px; padding-bottom:66px" v-if="!procInsId || taskId">
-    <el-form size="small" :model="auditForm"   ref="auditForm" label-width="120px">
+    <el-form size="small" :model="auditForm"  :loading="loading" ref="auditForm" label-width="120px">
       <el-col :span="16">
         <!--<el-form-item  v-if="!procInsId && isShow !== 'false'"  label="流程标题" prop="title">
           <el-input
@@ -84,8 +84,8 @@
 
   <template v-for="(button, index) in buttons">
       <template v-if="button.isHide === '0'">
-        <el-button type="primary"  v-if="button.code !== '_flow_print'"  :key="index" @click="submit(button, buttons)"  v-noMoreClick plain>{{button.name}}</el-button>
-        <el-button type="primary" v-if="button.code === '_flow_print'" v-print="printObj" :key="index" @click="submit(button, buttons)"  v-noMoreClick plain>{{button.name}}</el-button>
+        <el-button type="primary"  v-if="button.code !== '_flow_print'"  :key="index" @click="submit(button, buttons)" :loading="loading"  v-noMoreClick plain>{{button.name}}</el-button>
+        <el-button type="primary" v-if="button.code === '_flow_print'" v-print="printObj" :key="index" @click="submit(button, buttons)" :loading="loading" v-noMoreClick plain>{{button.name}}</el-button>
       </template>
   </template>
 </div>
@@ -990,6 +990,14 @@
             this.buttons = data.flowButtonList
           })
         }
+      },
+      // 开启/关闭taskForm页面的加载中状态
+      changeLoading (loading) {
+        if (this.commonJS.isNotEmpty(loading)) {
+          this.loading = loading
+        } else {
+          this.loading = false
+        }
       }
     },
     data () {
@@ -1026,7 +1034,8 @@
           userIds: null,
           assignee: null
         },
-        cUser: false
+        cUser: false,
+        loading: false
       }
     }
   }

+ 3 - 3
src/views/modules/materialManagement/materialType/TypeList.vue

@@ -5,9 +5,9 @@
       <el-form-item label="物资名称" prop="name">
         <el-input size="small" v-model="searchForm.name" placeholder="请输入物资名称" clearable></el-input>
       </el-form-item>
-      <el-form-item label="序号" prop="sort">
-        <el-input size="small" v-model="searchForm.sort" placeholder="请输入序号" clearable></el-input>
-      </el-form-item>
+<!--      <el-form-item label="序号" prop="sort">-->
+<!--        <el-input size="small" v-model="searchForm.sort" placeholder="请输入序号" clearable></el-input>-->
+<!--      </el-form-item>-->
 
       <el-form-item>
         <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>

+ 67 - 5
src/views/modules/notify/MyNotifyList.vue

@@ -2,9 +2,44 @@
   <div class="page">
       <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
             <!-- 搜索框-->
-		     <el-form-item prop="title">
+		     <el-form-item label="标题" prop="title">
                 <el-input size="small" v-model="searchForm.title" placeholder="标题" clearable></el-input>
 		     </el-form-item>
+        <el-form-item label="查阅状态" prop="readFlag">
+          <el-select size="small" v-model="searchForm.readFlag" placeholder="查阅状态" clearable>
+            <el-option
+              v-for="item in $dictUtils.getDictList('oa_notify_read')"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="类型" prop="type">
+          <el-select size="small" v-model="searchForm.type" placeholder="类型" clearable>
+            <el-option
+              v-for="item in $dictUtils.getDictList('oa_notify_type')"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="发布者" prop="createName">
+          <UserSelect :limit='1' :userName="searchForm.createName" @getValue='(value, label) => {searchForm.createName = label}'></UserSelect>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createDates">
+          <el-date-picker
+            placement="bottom-start"
+            format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            v-model="searchForm.createDates"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
           <el-form-item>
             <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
             <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
@@ -18,7 +53,11 @@
              <el-button :disabled="$refs.notifyTable && $refs.notifyTable.getCheckboxRecords().length === 0" type="warning" size="small" @click="portionRead()">标记为已读</el-button>
            </template>
          </vxe-toolbar>
-
+         <el-tabs v-model="activeName" @tab-click="handleClick">
+           <el-tab-pane label="全部" name="all"></el-tab-pane>
+           <el-tab-pane label="未读" name="read"></el-tab-pane>
+           <el-tab-pane label="已读" name="un_read"></el-tab-pane>
+         </el-tabs>
      <div style="height: calc(100% - 80px);">
         <vxe-table
             border="inner"
@@ -73,6 +112,7 @@
                  </span>
             </template>
           </vxe-column>
+          <vxe-column  min-width="180px"title="创建时间" field="createDate" align="center" ></vxe-column>
             <vxe-column title="操作" width="80" fixed="right" align="center">
                 <template  slot-scope="scope">
                     <el-button  type="text" size="mini" @click="view(scope.row.id)">查看</el-button>
@@ -99,11 +139,16 @@
 <script>
   import NotifyForm from './NotifyForm'
   import NotifyService from '@/api/notify/NotifyService'
+  import UserSelect from '@/components/userSelect'
   export default {
     data () {
       return {
         searchForm: {
-          title: ''
+          title: '',
+          type: '',
+          createName: '',
+          createDates: [],
+          readFlag: ''
         },
         dataList: [],
         tablePage: {
@@ -112,18 +157,22 @@
           pageSize: 10,
           orders: []
         },
-        loading: false
+        loading: false,
+        activeName: ''
       }
     },
     components: {
-      NotifyForm
+      NotifyForm,
+      UserSelect
     },
     notifyService: null,
     created () {
       this.notifyService = new NotifyService()
+      this.activeName = 'all'
     },
     activated () {
       this.refreshList()
+      this.activeName = 'all'
     },
 
     methods: {
@@ -162,6 +211,7 @@
         this.$refs.notifyForm.init('read', id)
       },
       resetSearch () {
+        this.activeName = 'all'
         this.$refs.searchForm.resetFields()
         this.refreshList()
       },
@@ -207,6 +257,18 @@
             this.refreshList()
           })
         })
+      },
+      handleClick (event) {
+        if (event.name === 'all') {
+          this.searchForm.readFlag = ''
+        }
+        if (event.name === 'read') {
+          this.searchForm.readFlag = '0'
+        }
+        if (event.name === 'un_read') {
+          this.searchForm.readFlag = '1'
+        }
+        this.refreshList()
       }
     }
   }

+ 35 - 4
src/views/modules/notify/NotifyList.vue

@@ -2,9 +2,34 @@
   <div class="page">
       <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
             <!-- 搜索框-->
-		     <el-form-item prop="title">
+		     <el-form-item label="标题" prop="title">
                 <el-input size="small" v-model="searchForm.title" placeholder="标题" clearable></el-input>
 		     </el-form-item>
+        <el-form-item label="类型" prop="type">
+          <el-select size="small" v-model="searchForm.type" placeholder="类型" clearable>
+            <el-option
+              v-for="item in $dictUtils.getDictList('oa_notify_type')"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="发布者" prop="createName">
+          <UserSelect :limit='1' :userName="searchForm.createName" @getValue='(value, label) => {searchForm.createName = label}'></UserSelect>
+        </el-form-item>
+        <el-form-item label="创建时间" prop="createDates">
+          <el-date-picker
+            placement="bottom-start"
+            format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            v-model="searchForm.createDates"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
           <el-form-item>
             <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
             <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
@@ -39,7 +64,7 @@
             :checkbox-config="{}">
             <vxe-column type="seq" width="60" title="序号"></vxe-column>
 <!--            <vxe-column type="checkbox"  width="40px"></vxe-column>-->
-            <vxe-column min-width="100px" title="标题" field="title" align="center" >
+            <vxe-column min-width="180px" title="标题" field="title" align="center" >
               <template slot-scope="scope">
                 <el-link  type="primary" :underline="false" v-if="hasPermission('notify:view')"  @click="view(scope.row.id)">{{scope.row.title}}</el-link>
                 <span v-else>{{scope.row.title}}</span>
@@ -76,6 +101,7 @@
                  </span>
               </template>
             </vxe-column>
+          <vxe-column  min-width="180px"title="创建时间" field="createDate" align="center" ></vxe-column>
           <vxe-column  width="100px"align="center" fixed="right" title="关闭状态" field="isClose" >
             <template slot-scope="scope">
               <span v-if="scope.row.isClose === '0'" style="color: #67C23A"> 未关闭 </span>
@@ -127,11 +153,15 @@
   import TaskService from '@/api/flowable/TaskService'
   import ProcessService from '@/api/flowable/ProcessService'
   import UserService from '@/api/sys/UserService'
+  import UserSelect from '@/components/userSelect'
   export default {
     data () {
       return {
         searchForm: {
-          title: ''
+          title: '',
+          type: '',
+          createName: '',
+          createDates: []
         },
         dataList: [],
         tablePage: {
@@ -147,7 +177,8 @@
       }
     },
     components: {
-      NotifyForm
+      NotifyForm,
+      UserSelect
     },
     notifyService: null,
     taskService: null,

+ 7 - 6
src/views/modules/program/registered/ProjectForm.vue

@@ -13,7 +13,7 @@
           <el-tabs v-model="activeName" type="border-card" @tab-click="tabHandleClick">
             <el-tab-pane label="项目登记详情" name="programDetail">
               <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
-                       label-width="220px" @submit.native.prevent>
+                       label-width="180px" @submit.native.prevent>
                 <el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
                 <el-row  :gutter="15">
                   <el-col :span="24">
@@ -536,7 +536,7 @@
                     @cell-click=""
                     @edit-closed=""
                     highlight-current-row
-                    :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+                    :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
                   >
                     <vxe-table-column field="contacts" title="联系人" :edit-render="{}">
                       <template v-slot:edit="scope">
@@ -545,7 +545,7 @@
                     </vxe-table-column>
                     <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">
                       <template v-slot:edit="scope">
-                        <vxe-select v-model="scope.row.clientType"  transfer>
+                        <vxe-select :disabled="method==='view'" v-model="scope.row.clientType"  transfer>
                           <vxe-option
                             v-for="item in clientTypes"
                             :key="item.value"
@@ -603,7 +603,7 @@
                     @cell-click=""
                     @edit-closed=""
                     highlight-current-row
-                    :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+                    :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
                   >
                     <vxe-table-column field="name" title="姓名" :edit-render="{}">
                       <template v-slot:edit="scope">
@@ -613,6 +613,7 @@
                     <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}">
                       <template v-slot:edit="scope">
                         <vxe-input
+                          :disabled="method==='view'"
                           v-model="scope.row.workHours"
                           type="float"
                           digits="1"
@@ -623,7 +624,7 @@
                     </vxe-table-column>
                     <vxe-table-column field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
                       <template v-slot:edit="scope">
-                        <vxe-select v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
+                        <vxe-select :disabled="method==='view'" v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
                           <vxe-option
                             v-for="item in $dictUtils.getDictList('program_registered_member_type')"
                             :key="item.value"
@@ -635,7 +636,7 @@
                     </vxe-table-column>
                     <vxe-table-column field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
                       <template v-slot:edit="scope">
-                        <vxe-select v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
+                        <vxe-select :disabled="method==='view'" v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
                           <vxe-option
                             v-for="item in $dictUtils.getDictList('program_registered_member_position')"
                             :key="item.value"

+ 83 - 27
src/views/modules/program/registered/ProjectFormUpdate.vue

@@ -9,7 +9,7 @@
       @keyup.enter.native=""
       :visible.sync="visible">
       <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
-               label-width="220px" @submit.native.prevent>
+               label-width="180px" @submit.native.prevent>
         <el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
         <el-row  :gutter="15">
           <el-col :span="24">
@@ -100,7 +100,7 @@
           <el-col :span="12">
             <el-form-item label="项目类型" prop="projectMould"
                           :rules="[
-                          {required: true, message:'项目类型不能为空', trigger:'blur'}
+                          {required: true, message:'项目类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.projectMould" placeholder="请选择项目类型" clearable style="width: 100%;">
                 <el-option
@@ -122,7 +122,7 @@
           <el-col :span="12">
             <el-form-item label="报告类型" prop="reportType"
                           :rules="[
-                          {required: true, message:'报告类型不能为空', trigger:'blur'}
+                          {required: true, message:'报告类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.reportType" placeholder="请选择报告类型" clearable style="width: 100%;">
                 <el-option
@@ -199,7 +199,7 @@
           <el-col :span="12">
             <el-form-item label="项目所在地" prop="location"
                           :rules="[
-                          {required: true, message:'项目所在地不能为空', trigger:'blur'}
+                          {required: true, message:'项目所在地不能为空', trigger:'change'}
                  ]">
               <SelectTree
                 ref="areaTree"
@@ -262,7 +262,7 @@
           <el-col :span="12">
             <el-form-item label="项目来源" prop="projectSource"
                           :rules="[
-                          {required: true, message:'项目来源不能为空', trigger:'blur'}
+                          {required: true, message:'项目来源不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.projectSource" placeholder="请选择项目来源" clearable style="width: 100%;">
                 <el-option
@@ -317,7 +317,7 @@
           <el-col :span="12">
             <el-form-item label="项目负责人" prop="projectManager"
                           :rules="[
-                          {required: true, message:'项目负责人不能为空', trigger:'blur'}
+                          {required: true, message:'项目负责人不能为空', trigger:'change'}
                  ]">
               <SelectUserTree
                 ref="companyTree"
@@ -355,7 +355,7 @@
           <el-col :span="12">
             <el-form-item label="风险项目类型" prop="delegateProjectType"
                           :rules="[
-                          {required: true, message:'风险项目类型不能为空', trigger:'blur'}
+                          {required: true, message:'风险项目类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.delegateProjectType" placeholder="请选择风险项目类型" clearable style="width: 100%">
                 <el-option-group
@@ -530,14 +530,14 @@
             @cell-click=""
             @edit-closed=""
             highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
           >
-            <vxe-table-column field="contacts" title="联系人" :edit-render="{}">
+            <vxe-table-column field="contacts" title="联系人" :edit-render="{}" align="center">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.contacts" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">
+            <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}" align="center">
               <template v-slot:edit="scope">
                 <vxe-select v-model="scope.row.clientType"  transfer>
                   <vxe-option
@@ -549,27 +549,27 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}">
+            <vxe-table-column field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}" align="center">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.linkMobilePhoneFirst" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}">
+            <vxe-table-column field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}" align="center">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.linkMobilePhoneSecoed" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="job" title="职位" :edit-render="{}">
+            <vxe-table-column field="job" title="职位" :edit-render="{}" align="center">
               <template v-slot:edit="scope">
                 <el-input v-model="scope.row.job" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="remarks" title="备注" :edit-render="{}">
+            <vxe-table-column field="remarks" title="备注" :edit-render="{}" align="center">
               <template v-slot:edit="scope">
                 <el-input v-model="scope.row.remarks" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column title="操作" width="100">
+            <vxe-table-column title="操作" width="100" align="center">
               <template v-slot="scope">
                 <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
               </template>
@@ -594,17 +594,23 @@
             class="vxe-table-element"
             :data="inputForm.members"
             style="margin-left: 5em"
+            :key="memberKey"
             @cell-click=""
             @edit-closed=""
             highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: false, icon: '#'}"
           >
-            <vxe-table-column field="name" title="姓名" :edit-render="{}">
+            <vxe-table-column field="name"  title="姓名" :edit-render="{name: '$input'}" align="center">
               <template v-slot:edit="scope">
-                <el-input v-model="scope.row.name" ></el-input>
+                <vxe-input v-model="scope.row.name" :disabled="commonJS.isNotEmpty(scope.row.userId)"  style="width: 100%" class="my-search">
+                  <template #suffix>
+<!--                    <i class="el-icon-search" @click="openUserSearch(scope.$rowIndex)"></i>-->
+                    <vxe-button  @click="openUserSearch(scope.$rowIndex)" type="text" content="" icon="el-icon-search" ></vxe-button>
+                  </template>
+                </vxe-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}">
+            <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}" align="center">
               <template v-slot:edit="scope">
                 <vxe-input
                   v-model="scope.row.workHours"
@@ -615,7 +621,7 @@
                 </vxe-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
+            <vxe-table-column align="center" field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
               <template v-slot:edit="scope">
                 <vxe-select v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
                   <vxe-option
@@ -627,7 +633,7 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
+            <vxe-table-column align="center" field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
               <template v-slot:edit="scope">
                 <vxe-select v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
                   <vxe-option
@@ -639,7 +645,7 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column title="操作" width="100">
+            <vxe-table-column title="操作" width="100" align="center">
               <template v-slot="scope">
                 <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'member')">删除</el-button>
               </template>
@@ -657,6 +663,7 @@
     <ContractForm  ref="contractForm" @getContract="getContract"></ContractForm>
     <WorkClientForm  ref="workClientForm" @getWorkClient="getWorkClient"></WorkClientForm>
     <ContactForm  ref="contactForm" @getContact="getContact"></ContactForm>
+    <UserSelectDialog ref="userSelectDialog" @doSubmit="getMember" :limit="1"></UserSelectDialog>
   </div>
 </template>
 
@@ -670,6 +677,7 @@
   import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import XEUtils from 'xe-utils'
+  import UserSelectDialog from '@/components/userSelect/UserSelectDialog'
   export default {
     data () {
       return {
@@ -742,9 +750,11 @@
           clientList: [] // 项目直接对接联系人
         },
         clientTypes: [
-          {value: 1, label: '委托人'},
-          {value: 2, label: '项目对接人'}
-        ]
+          {value: '1', label: '委托人'},
+          {value: '2', label: '项目对接人'}
+        ],
+        tableIndex: '',
+        memberKey: ''
       }
     },
     programTypeDictService: null,
@@ -759,7 +769,8 @@
       UpLoadComponent,
       WorkClientForm,
       ContactForm,
-      SelectTree
+      SelectTree,
+      UserSelectDialog
     },
     methods: {
       init (method, id) {
@@ -1109,12 +1120,57 @@
           })
         ]
         return footerData
+      },
+      // 打开用户选择组件
+      openUserSearch (index) {
+        this.tableIndex = index
+        this.$refs.userSelectDialog.init()
+      },
+      // 用户选择组件回显
+      getMember (member) {
+        if (this.commonJS.isNotEmpty(member)) {
+          if (this.commonJS.isNotEmpty(this.inputForm.members)) {
+            this.inputForm.members.forEach((item, index) => {
+              if (index !== this.tableIndex) {
+                if (item.userId === member[0].id) {
+                  this.$message.error('列表中已存在此人员,请重新选择')
+                  throw new Error('列表中已存在此人员,请重新选择')
+                }
+              }
+            })
+          }
+          this.inputForm.members[this.tableIndex].userId = member[0].id
+          this.inputForm.members[this.tableIndex].name = member[0].name
+          this.memberKey = Math.random()
+        }
       }
     }
   }
 </script>
 <style scoped>
-  /deep/ .el-input-number .el-input__inner {
+  /deep/  .el-input-number .el-input__inner {
     text-align: left;
   }
+  /*/deep/  .vxe-input .vxe-input--suffix {*/
+  /*  right: 0.09em;*/
+  /*}*/
+  /*/deep/  .my-search.vxe-input {*/
+  /*  height: 34px;*/
+  /*  width: 300px;*/
+  /*}*/
+  /*/deep/  .my-search.vxe-input .vxe-input--suffix {*/
+  /*  width: 50px;*/
+  /*  height: 32px;*/
+  /*  top: 1px;*/
+  /*  text-align: center;*/
+  /*  border-left: 1px solid #dcdfe6;*/
+  /*  background-color: #f5f7fa;*/
+  /*  cursor: pointer;*/
+  /*}*/
+  /*/deep/  .my-search.vxe-input .vxe-input--inner {*/
+  /*  padding-right: 72px;*/
+  /*  border: 1px solid #dcdfe6;*/
+  /*}*/
 </style>
+
+

+ 84 - 32
src/views/modules/program/registered/RegisItemForm.vue

@@ -1,6 +1,6 @@
 <template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
   <div>
-      <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="formReadOnly"
+      <el-form size="middle" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
                label-width="220px" @submit.native.prevent>
         <el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
         <el-row  :gutter="15">
@@ -92,7 +92,7 @@
           <el-col :span="12">
             <el-form-item label="项目类型" prop="projectMould"
                           :rules="[
-                          {required: true, message:'项目类型不能为空', trigger:'blur'}
+                          {required: true, message:'项目类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.projectMould" placeholder="请选择项目类型" clearable style="width: 100%;">
                 <el-option
@@ -114,7 +114,7 @@
           <el-col :span="12">
             <el-form-item label="报告类型" prop="reportType"
                           :rules="[
-                          {required: true, message:'报告类型不能为空', trigger:'blur'}
+                          {required: true, message:'报告类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.reportType" placeholder="请选择报告类型" clearable style="width: 100%;">
                 <el-option
@@ -191,7 +191,7 @@
           <el-col :span="12">
             <el-form-item label="项目所在地" prop="location"
                           :rules="[
-                          {required: true, message:'项目所在地不能为空', trigger:'blur'}
+                          {required: true, message:'项目所在地不能为空', trigger:'change'}
                  ]">
               <SelectTree
                 ref="areaTree"
@@ -254,7 +254,7 @@
           <el-col :span="12">
             <el-form-item label="项目来源" prop="projectSource"
                           :rules="[
-                          {required: true, message:'项目来源不能为空', trigger:'blur'}
+                          {required: true, message:'项目来源不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.projectSource" placeholder="请选择项目来源" clearable style="width: 100%;">
                 <el-option
@@ -309,7 +309,7 @@
           <el-col :span="12">
             <el-form-item label="项目负责人" prop="projectManager"
                           :rules="[
-                          {required: true, message:'项目负责人不能为空', trigger:'blur'}
+                          {required: true, message:'项目负责人不能为空', trigger:'change'}
                  ]">
               <SelectUserTree
                 ref="companyTree"
@@ -347,7 +347,7 @@
           <el-col :span="12">
             <el-form-item label="风险项目类型" prop="delegateProjectType"
                           :rules="[
-                          {required: true, message:'风险项目类型不能为空', trigger:'blur'}
+                          {required: true, message:'风险项目类型不能为空', trigger:'change'}
                  ]">
               <el-select v-model="inputForm.delegateProjectType" placeholder="请选择风险项目类型" clearable style="width: 100%">
                 <el-option-group
@@ -549,7 +549,7 @@
 <!--        </el-row>-->
         <el-divider content-position="left"><i class="el-icon-document"></i>
           委托方联系人和项目直接对接人
-          <el-button style="margin-left: 20px" type="primary" :disabled="formReadOnly" size="mini" @click="openContactForm('0')" plain>
+          <el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" size="mini" @click="openContactForm('0')" plain>
             新增
           </el-button>
         </el-divider>
@@ -563,18 +563,19 @@
             style="margin-left: 5em"
             :key="clientTableKey"
             @cell-click=""
+            :edit-rules="validRulesClient"
             @edit-closed=""
             highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
           >
-            <vxe-table-column field="contacts" title="联系人" :edit-render="{}">
+            <vxe-table-column field="contacts" title="联系人" :edit-render="{}"  align="center">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.contacts" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">
+            <vxe-table-column  align="center" field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">
               <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.clientType"  transfer>
+                <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.clientType"  transfer>
                   <vxe-option
                     v-for="item in clientTypes"
                     :key="item.value"
@@ -584,27 +585,27 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}">
+            <vxe-table-column  align="center" field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.linkMobilePhoneFirst" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}">
+            <vxe-table-column  align="center" field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}">
               <template v-slot:edit="scope">
                 <el-input :disabled="true" v-model="scope.row.linkMobilePhoneSecoed" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="job" title="职位" :edit-render="{}">
+            <vxe-table-column  align="center" field="job" title="职位" :edit-render="{}">
               <template v-slot:edit="scope">
                 <el-input v-model="scope.row.job" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="remarks" title="备注" :edit-render="{}">
+            <vxe-table-column  align="center" field="remarks" title="备注" :edit-render="{}">
               <template v-slot:edit="scope">
                 <el-input v-model="scope.row.remarks" ></el-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column title="操作" width="100">
+            <vxe-table-column  align="center" title="操作" width="100">
               <template v-slot="scope">
                 <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
               </template>
@@ -614,7 +615,7 @@
 
         <el-divider content-position="left"><i class="el-icon-document"></i>
           项目组成员
-          <el-button style="margin-left: 20px" type="primary" :disabled="formReadOnly" size="mini" @click="insertEvent('member')" plain>
+          <el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" size="mini" @click="insertEvent('member')" plain>
             新增
           </el-button>
         </el-divider>
@@ -626,21 +627,28 @@
             :footer-method="footerMethod"
             ref="memberTable"
             class="vxe-table-element"
+            :key="memberKey"
             :data="inputForm.members"
             style="margin-left: 5em"
             @cell-click=""
+            :edit-rules="validRulesMember"
             @edit-closed=""
             highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true}"
+            :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear:  status === 'audit' || status === 'taskFormDetail' ? true : false, icon: '#'}"
           >
-            <vxe-table-column field="name" title="姓名" :edit-render="{}">
+            <vxe-table-column field="name" title="姓名" :edit-render="{name: '$input'}" align="center">
               <template v-slot:edit="scope">
-                <el-input v-model="scope.row.name" ></el-input>
+                <vxe-input v-model="scope.row.name" :disabled="commonJS.isNotEmpty(scope.row.userId) || status === 'audit' || status === 'taskFormDetail'"  style="width: 100%">
+                  <template #suffix>
+                    <vxe-button :disabled="status === 'audit' || status === 'taskFormDetail'" @click="openUserSearch(scope.$rowIndex)" type="text" content="" icon="el-icon-search" ></vxe-button>
+                  </template>
+                </vxe-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}">
+            <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}"  align="center">
               <template v-slot:edit="scope">
                 <vxe-input
+                  :disabled="status === 'audit' || status === 'taskFormDetail'"
                   v-model="scope.row.workHours"
                   type="float"
                   digits="1"
@@ -649,9 +657,9 @@
                 </vxe-input>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
+            <vxe-table-column  align="center" field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
               <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
+                <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
                   <vxe-option
                     v-for="item in $dictUtils.getDictList('program_registered_member_type')"
                     :key="item.value"
@@ -661,9 +669,9 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
+            <vxe-table-column align="center" field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
               <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
+                <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
                   <vxe-option
                     v-for="item in $dictUtils.getDictList('program_registered_member_position')"
                     :key="item.value"
@@ -673,7 +681,7 @@
                 </vxe-select>
               </template>
             </vxe-table-column>
-            <vxe-table-column title="操作" width="100">
+            <vxe-table-column align="center" title="操作" width="100">
               <template v-slot="scope">
                 <el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'member')">删除</el-button>
               </template>
@@ -686,6 +694,8 @@
       <ContractForm  ref="contractForm" @getContract="getContract"></ContractForm>
       <WorkClientForm  ref="workClientForm" @getWorkClient="getWorkClient"></WorkClientForm>
       <ContactForm  ref="contactForm" @getContact="getContact"></ContactForm>
+    <UserSelectDialog ref="userSelectDialog" @doSubmit="getMember" :limit="1"></UserSelectDialog>
+
   </div>
 </template>
 
@@ -699,6 +709,8 @@
   import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
   import XEUtils from 'xe-utils'
+  import UserSelectDialog from '@/components/userSelect/UserSelectDialog'
+
   export default {
     props: {
       businessId: {
@@ -708,6 +720,10 @@
       formReadOnly: {
         type: Boolean,
         default: false
+      },
+      status: {
+        type: String,
+        default: ''
       }
     },
     data () {
@@ -783,11 +799,23 @@
           clientList: [] // 项目直接对接联系人
         },
         clientTypes: [
-          {value: 1, label: '委托人'},
-          {value: 2, label: '项目对接人'}
+          {value: '1', label: '委托人'},
+          {value: '2', label: '项目对接人'}
         ],
         keyWatch: '',
-        clientTableKey: 'default'
+        clientTableKey: 'default',
+        tableIndex: '',
+        memberKey: '',
+        validRulesMember: {
+          name: [
+            {required: true, message: '姓名不能为空'}
+          ]
+        },
+        validRulesClient: {
+          clientType: [
+            {required: true, message: '人员类型不能为空'}
+          ]
+        }
       }
     },
     programTypeDictService: null,
@@ -830,7 +858,8 @@
       UpLoadComponent,
       WorkClientForm,
       ContactForm,
-      SelectTree
+      SelectTree,
+      UserSelectDialog
     },
     methods: {
       getKeyWatch (keyWatch) {
@@ -953,7 +982,7 @@
               this.inputForm.links = []
               this.inputForm.clientList = []
             }
-            if (this.formReadOnly === true) {
+            if (this.status === 'audit' || this.status === 'taskFormDetail') {
               method = 'view'
             }
 
@@ -1474,6 +1503,29 @@
       },
       clearPropertyHolder () {
         this.inputForm.propertyHolder = ''
+      },
+      // 打开用户选择组件
+      openUserSearch (index) {
+        this.tableIndex = index
+        this.$refs.userSelectDialog.init()
+      },
+      // 用户选择组件回显
+      getMember (member) {
+        if (this.commonJS.isNotEmpty(member)) {
+          if (this.commonJS.isNotEmpty(this.inputForm.members)) {
+            this.inputForm.members.forEach((item, index) => {
+              if (index !== this.tableIndex) {
+                if (item.userId === member[0].id) {
+                  this.$message.error('列表中已存在此人员,请重新选择')
+                  throw new Error('列表中已存在此人员,请重新选择')
+                }
+              }
+            })
+          }
+          this.inputForm.members[this.tableIndex].userId = member[0].id
+          this.inputForm.members[this.tableIndex].name = member[0].name
+          this.memberKey = Math.random()
+        }
       }
     }
   }

+ 87 - 80
src/views/modules/roster/RosterForm.vue

@@ -382,7 +382,7 @@
             <el-form-item label="民族" prop="ethnic"
                           :rules="[
                  ]">
-              <el-select v-model="inputForm.ethnic" placeholder="请选择民族" style="width:100%;">
+              <el-select v-model="inputForm.ethnic" filterable placeholder="请选择民族" style="width:100%;">
                 <el-option
                   v-for="item in $dictUtils.getDictList('ethnic')"
                   :key="item.value"
@@ -607,7 +607,7 @@
               <el-form-item label="工资卡开户银行" :prop="'rosterBankCardsDTOList[' + index_bank + '].payrollCardOpenBank'"
                             :rules="[
                ]">
-                <el-select v-model="inputForm.rosterBankCardsDTOList[index_bank].payrollCardOpenBank" placeholder="请选择工资卡开户银行"  style="width: 100%;">
+                <el-select v-model="inputForm.rosterBankCardsDTOList[index_bank].payrollCardOpenBank" filterable placeholder="请选择工资卡开户银行"  style="width: 100%;">
                   <el-option
                     v-for="item in $dictUtils.getDictList('bank_name')"
                     :key="item.value"
@@ -1005,7 +1005,7 @@
               <el-form-item label="证书类型" :prop="'rosterCertificateDTOList[' + index_certificate + '].certType'"
                             :rules="[
                ]">
-                <el-select v-model="inputForm.rosterCertificateDTOList[index_certificate].certType" placeholder="请选择证书类型"  style="width: 100%;">
+                <el-select v-model="inputForm.rosterCertificateDTOList[index_certificate].certType" filterable placeholder="请选择证书类型"  style="width: 100%;">
                   <el-option
                     v-for="item in $dictUtils.getDictList('cert_type')"
                     :key="item.value"
@@ -1127,8 +1127,9 @@
             <el-col :span="12">
               <el-form-item label="证书类型" :prop="'certDTOList[' + index_certDto + '].type'"
                             :rules="[
+                            {required: true, message: '证书类型不能为空', trigger: 'change'}
              ]">
-                <el-select v-model="inputForm.certDTOList[index_certDto].type" @change="changeType(index_certDto)" placeholder="请选择证书类型"  style="width: 100%;">
+                <el-select v-model="inputForm.certDTOList[index_certDto].type" filterable @change="changeType(index_certDto)" placeholder="请选择证书类型"  style="width: 100%;">
                   <el-option
                     v-for="item in $dictUtils.getDictList('sys_cert_type')"
                     :key="item.value"
@@ -1141,6 +1142,7 @@
             <el-col :span="12">
               <el-form-item label="证书编号" :prop="'certDTOList[' + index_certDto + '].no'"
                             :rules="[
+                            {required: true, message: '证书编号不能为空', trigger: 'change'}
              ]">
                 <el-input v-model="inputForm.certDTOList[index_certDto].no" placeholder="请填写证书编号"     clearable></el-input>
               </el-form-item>
@@ -1181,6 +1183,7 @@
             <el-col :span="12">
               <el-form-item label="到期日期" :prop="'certDTOList[' + index_certDto + '].expireDate'"
                             :rules="[
+                            {required: true, message: '到期日期不能为空', trigger: 'blur'}
              ]">
                 <el-date-picker
                   placement="bottom-start"
@@ -1318,7 +1321,7 @@
               <el-form-item label="民族" prop="ethnic"
                             :rules="[
                  ]">
-                <el-select v-model="inputForm.ethnic" placeholder="请选择民族" style="width:100%;">
+                <el-select v-model="inputForm.ethnic" filterable placeholder="请选择民族" style="width:100%;">
                   <el-option
                     v-for="item in $dictUtils.getDictList('ethnic')"
                     :key="item.value"
@@ -1846,6 +1849,8 @@
           companyId: '',
           manageOfficeIds: ''
         }
+        this.keydiv1 = Math.random()
+        this.keydiv2 = Math.random()
         this.visible = false
       },
       queryAllPosition () {
@@ -2161,85 +2166,87 @@
           // 给所属公司一个默认值
           if (this.commonJS.isNotEmpty(this.companyList)) {
             if (this.commonJS.isNotEmpty(this.companyList[0])) {
-              this.inputForm.companyId = this.companyList[0].id
+              if (this.commonJS.isEmpty(this.inputForm.companyId)) {
+                this.inputForm.companyId = this.companyList[0].id
+              }
             }
           }
         }
         // 切换为游客
-        if (event === '2') {
-          this.inputForm = {
-            id: this.inputForm.id,
-            name: this.inputForm.name,
-            certificatesType: this.inputForm.certificatesType,
-            idCard: this.inputForm.idCard,
-            certificatesFront: this.inputForm.certificatesFront,
-            certificatesBack: this.inputForm.certificatesBack,
-            mobile: this.inputForm.mobile,
-            sex: this.inputForm.sex,
-            ethnic: this.inputForm.ethnic,
-            bloodType: this.inputForm.bloodType,
-            qq: this.inputForm.qq,
-            wechat: this.inputForm.wechat,
-            email: this.inputForm.email,
-            remarks: this.inputForm.remarks,
-            certificatesFrontLsUrl: this.inputForm.certificatesFrontLsUrl,
-            certificatesBackLsUrl: this.inputForm.certificatesBackLsUrl,
-            officeId: '',
-            jobPositionId: '',
-            positionId: '',
-            rankId: '',
-            jobNo: '',
-            contractType: '',
-            workerType: '',
-            onboardingDate: '',
-            seniority: '',
-            contractCompany: '',
-            birthDate: '',
-            workPlace: '',
-            contactAddress: '',
-            employmentSituation: '',
-            workingHour: '',
-            accountType: '',
-            accountAddr: '',
-            origin: '',
-            liveAddr: '',
-            highestEducation: '',
-            politicalFace: '',
-            maritalStatus: '',
-            emergencyContactName: '',
-            emergencyContactTel: '',
-            spouseName: '',
-            childName: '',
-            rosterContractDTO: {
-              baseId: '',
-              beginDate: '',
-              endDate: '',
-              workEmail: '',
-              workMobile: '',
-              probationPeriodEndDate: '',
-              probationPeriodMonth: ''
-            },
-            rosterBankCardsDTOList: [],
-            rosterEducateDTOList: [],
-            rosterWorkDTOList: [],
-            rosterFamilyDTOList: [],
-            rosterCertificateDTOList: [],
-            rosterFilesDTOList: [],
-            headshot: '',
-            headshotLsUrl: '',
-            rosterLeadershipDTO: {
-              baseId: '',
-              debriefType: '',
-              supervisorId: ''
-            },
-            personType: '',
-            certDTOList: [],
-            postIdList: [],
-            roleIdList: [],
-            companyId: '',
-            manageOfficeIds: ''
-          }
-        }
+        // if (event === '2') {
+        //   this.inputForm = {
+        //     id: this.inputForm.id,
+        //     name: this.inputForm.name,
+        //     certificatesType: this.inputForm.certificatesType,
+        //     idCard: this.inputForm.idCard,
+        //     certificatesFront: this.inputForm.certificatesFront,
+        //     certificatesBack: this.inputForm.certificatesBack,
+        //     mobile: this.inputForm.mobile,
+        //     sex: this.inputForm.sex,
+        //     ethnic: this.inputForm.ethnic,
+        //     bloodType: this.inputForm.bloodType,
+        //     qq: this.inputForm.qq,
+        //     wechat: this.inputForm.wechat,
+        //     email: this.inputForm.email,
+        //     remarks: this.inputForm.remarks,
+        //     certificatesFrontLsUrl: this.inputForm.certificatesFrontLsUrl,
+        //     certificatesBackLsUrl: this.inputForm.certificatesBackLsUrl,
+        //     officeId: '',
+        //     jobPositionId: '',
+        //     positionId: '',
+        //     rankId: '',
+        //     jobNo: '',
+        //     contractType: '',
+        //     workerType: '',
+        //     onboardingDate: '',
+        //     seniority: '',
+        //     contractCompany: '',
+        //     birthDate: '',
+        //     workPlace: '',
+        //     contactAddress: '',
+        //     employmentSituation: '',
+        //     workingHour: '',
+        //     accountType: '',
+        //     accountAddr: '',
+        //     origin: '',
+        //     liveAddr: '',
+        //     highestEducation: '',
+        //     politicalFace: '',
+        //     maritalStatus: '',
+        //     emergencyContactName: '',
+        //     emergencyContactTel: '',
+        //     spouseName: '',
+        //     childName: '',
+        //     rosterContractDTO: {
+        //       baseId: '',
+        //       beginDate: '',
+        //       endDate: '',
+        //       workEmail: '',
+        //       workMobile: '',
+        //       probationPeriodEndDate: '',
+        //       probationPeriodMonth: ''
+        //     },
+        //     rosterBankCardsDTOList: [],
+        //     rosterEducateDTOList: [],
+        //     rosterWorkDTOList: [],
+        //     rosterFamilyDTOList: [],
+        //     rosterCertificateDTOList: [],
+        //     rosterFilesDTOList: [],
+        //     headshot: '',
+        //     headshotLsUrl: '',
+        //     rosterLeadershipDTO: {
+        //       baseId: '',
+        //       debriefType: '',
+        //       supervisorId: ''
+        //     },
+        //     personType: '',
+        //     certDTOList: [],
+        //     postIdList: [],
+        //     roleIdList: [],
+        //     companyId: '',
+        //     manageOfficeIds: ''
+        //   }
+        // }
         this.keydiv1 = Math.random()
         this.keydiv2 = Math.random()
       },

+ 109 - 8
src/views/modules/roster/RosterList.vue

@@ -2,22 +2,61 @@
   <div class="page">
     <el-form size="small" :inline="true" class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
       <!-- 搜索框-->
-      <el-form-item prop="name">
+      <el-form-item label="姓名" prop="name">
         <el-input size="small" v-model="searchForm.name" placeholder="姓名" clearable></el-input>
       </el-form-item>
-      <el-form-item prop="mobile">
+      <el-form-item label="电话号码" prop="mobile">
         <el-input size="small" v-model="searchForm.mobile" placeholder="手机号码" clearable></el-input>
       </el-form-item>
-      <el-form-item prop="idCard">
+      <el-form-item label="证件号" prop="idCard">
         <el-input size="small" v-model="searchForm.idCard" placeholder="证件号" clearable></el-input>
       </el-form-item>
+      <el-form-item v-if="showHideItem" label="部门" prop="officeSelect">
+        <SelectTree
+          ref="officeTree"
+          :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+          size="small"
+          :url="`/sys/office/treeData?type=2`"
+          :value="searchForm.officeSelect"
+          :clearable="true"
+          :accordion="true"
+          @getValue="(value) => {searchForm.officeSelect=value}"/>
+      </el-form-item>
+      <el-form-item v-if="showHideItem" label="岗位" prop="postSelect">
+        <el-select v-model="searchForm.postSelect" size="small" filterable @change="$forceUpdate()" style="width:100%" placeholder="岗位" clearable>
+          <el-option
+            v-for="item in postList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="showHideItem" label="入职日期" prop="dates">
+        <el-date-picker
+          style=""
+          placement="bottom-start"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          v-model="searchForm.dates"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+      </el-form-item>
       <el-form-item>
+        <el-button type="default" @click="showHide" size="small" :icon="showHideIcon">{{showHideName}}</el-button>
         <el-button type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
         <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
       </el-form-item>
     </el-form>
     <div class="bg-white top">
-      <vxe-toolbar :refresh="{query: refreshList}" import custom>
+      <vxe-toolbar :refresh="{query: refreshList}" import export custom>
         <template #buttons>
           <el-button v-if="hasPermission('roster:base:add')" type="primary" size="small" icon="el-icon-plus" @click="add()">新建</el-button>
           <el-button v-if="hasPermission('roster:base:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.rosterTable && $refs.rosterTable.getCheckboxRecords().length === 0" plain>删除</el-button>
@@ -43,7 +82,14 @@
           highlight-hover-row
           :menu-config="{}"
           :print-config="{}"
-          :export-config="{}"
+          :export-config="{
+                    remote: true,
+                    filename: `花名册数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    sheetName: `花名册数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    exportMethod: exportMethod,
+                    types: ['xlsx'],
+                    modes: ['current', 'selected', 'all']
+                  }"
           @sort-change="sortChangeHandle"
           :sort-config="{remote:true}"
           :data="dataList"
@@ -107,13 +153,21 @@
 <script>
   import RosterService from '@/api/roster/RosterService'
   import RosterForm from './RosterForm'
+  import PostService from '@/api/sys/PostService'
+  import SelectTree from '@/components/treeSelect/treeSelect.vue'
   export default {
     data () {
       return {
+        showHideItem: false,
+        showHideIcon: 'el-icon-arrow-down',
+        showHideName: '展示',
         searchForm: {
           name: '',
           idCard: '',
-          mobile: ''
+          mobile: '',
+          officeSelect: '',
+          postSelect: '',
+          dates: []
         },
         dataList: [],
         tablePage: {
@@ -128,21 +182,38 @@
         activeValue: '',
         showButton: false,
         disableButton: true,
-        personType: ''
+        personType: '',
+        postList: []
       }
     },
     rosterService: null,
+    postService: null,
     created () {
       this.rosterService = new RosterService()
+      this.postService = new PostService()
       this.addTabs()
+      this.queryAllPost()
     },
     components: {
-      RosterForm
+      RosterForm,
+      SelectTree
     },
     activated () {
+      this.queryAllPost()
       this.refreshList()
     },
     methods: {
+      showHide () {
+        if (this.showHideItem === false) {
+          this.showHideItem = true
+          this.showHideIcon = 'el-icon-arrow-up'
+          this.showHideName = '隐藏'
+        } else {
+          this.showHideItem = false
+          this.showHideIcon = 'el-icon-arrow-down'
+          this.showHideName = '展示'
+        }
+      },
       // 获取数据列表
       refreshList () {
         this.loading = true
@@ -268,6 +339,36 @@
           this.refreshList()
           this.loading = false
         })
+      },
+      queryAllPost () {  //  查询所有岗位
+        this.postService.list({current: 1, size: -1}).then(({data}) => {
+          this.postList = data.records
+        })
+      },
+      // 自定义服务端导出
+      exportMethod ({ options }) {
+        // 传给服务端的参数
+        const params = {
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm,
+          filename: options.filename,
+          sheetName: options.sheetName,
+          isHeader: options.isHeader,
+          original: options.original,
+          mode: options.mode,
+          selectIds: options.mode === 'selected' ? options.data.map(item => item.id) : [],
+          exportFields: options.columns.map(column => column.property)
+        }
+        return this.rosterService.exportFile(params).then((res) => {
+          // 将二进制流文件写入excel表,以下为重要步骤
+          this.$utils.downloadExcel(res.data, options.filename)
+        }).catch(function (err) {
+          if (err.response) {
+            console.log(err.response)
+          }
+        })
       }
     }
   }

+ 2 - 0
src/views/modules/zs/reimbursement/info/InfoForm.vue

@@ -611,6 +611,8 @@
       MaterialManagementDialog
     },
     methods: {
+      getUpload () {
+      },
       init (method, id) {
         this.method = method
         this.inputForm = {

+ 14 - 0
src/views/modules/zs/reimbursement/info/InfoList.vue

@@ -165,6 +165,8 @@
               <el-button v-if="hasPermission('zsReimbursement:info:edit') && scope.row.createId === $store.state.user.id && (scope.row.type === '4')" type="text"  size="small" @click="todo(scope.row)">驳回调整</el-button>
               <el-button v-if="hasPermission('zsReimbursement:info:edit') && scope.row.createId === $store.state.user.id && (scope.row.type === '2')" type="text"  size="small" @click="reback(scope.row)">撤回</el-button>
               <el-button v-if="hasPermission('zsReimbursement:info:del') && scope.row.createId === $store.state.user.id && (scope.row.type === '1')" type="text"  size="small" @click="del(scope.row.id)">删除</el-button>
+              <el-button v-if="checkIsAudit(scope.row)" type="text"  size="small" @click="todo(scope.row)">审核</el-button>
+
             </template>
           </vxe-column>
         </vxe-table>
@@ -552,6 +554,18 @@
             console.log(err.response)
           }
         })
+      },
+      // 查询当前登录人是否是数据的审核人
+      checkIsAudit (row) {
+        let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+        if (this.commonJS.isNotEmpty(row.auditUserIds)) {
+          for (const userId of row.auditUserIds) {
+            if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+              return true
+            }
+          }
+        }
+        return false
       }
     }
   }

+ 1 - 0
src/views/modules/zs/reimbursement/info/ReimbursementForm.vue

@@ -771,6 +771,7 @@
         this.$nextTick(() => {
           this.loading = true
           this.$refs.inputForm.resetFields()
+          this.$refs.uploadComponent.clearUpload()
           this.reimbursementService.findById(this.inputForm.id).then(({data}) => {
             if (this.status === 'audit' || this.status === 'taskFormDetail') {
               method = 'view'