Browse Source

会计和评估 签章管理

sangwenwei 1 year ago
parent
commit
f962d25db8

+ 7 - 0
src/api/cw/projectRecords/ProjectRecordsService.js

@@ -16,6 +16,13 @@ export default {
 			params: params,
 		});
 	},
+	getList: function (params) {
+		return request({
+			url: prefix + "/cwProjectRecords/getList",
+			method: "get",
+			params: params,
+		});
+	},
 	list2: function (params) {
 		return request({
 			url: prefix + "/cwProjectRecords/newList",

+ 74 - 0
src/api/cw/signatureDaily/SignatureReportService.js

@@ -0,0 +1,74 @@
+import request from "@/utils/httpRequest";
+import { FINANCE_PATH as prefix } from "../../AppPath";
+
+
+export default class SignatureDailyService {
+  list (param) {
+    return request({
+      url: prefix + '/cw/signatureReport/list',
+      method: 'get',
+      params: param
+    })
+  }
+
+  saveForm (param) {
+    return request({
+      url: prefix + '/cw/signatureReport/save',
+      method: 'post',
+      data: param
+    })
+  }
+  findById (id) {
+    return request({
+      url: prefix + '/cw/signatureReport/findById',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  remove (id) {
+    return request({
+      url: prefix + '/cw/signatureReport/remove',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  updateStatusById (param) {
+    return request({
+      url: prefix + '/cw/signatureReport/updateStatusById',
+      method: 'post',
+      data: param
+    })
+  }
+
+  exportFile (params) {
+    return request({
+      url: prefix + '/cw/signatureReport/exportFile',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  }
+	saveFlowableParam (inputForm) {
+		return request({
+			url: prefix + `/cw/signatureReport/saveFlowableParam`,
+			method: 'post',
+			data: inputForm
+		})
+	}
+
+	getAuditNodeById (id) {
+		return request({
+			url: prefix + '/cw/signatureReport/getAuditNodeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+	getSignatureTypeById(id) {
+		return request({
+			url: prefix + '/cw/signatureReport/getSignatureTypeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+}

+ 74 - 0
src/api/program/signatureDaily/SignatureDailyService.js

@@ -0,0 +1,74 @@
+import request from "@/utils/httpRequest";
+import { ASSESS_PATH as prefix } from "../../AppPath";
+
+
+export default class SignatureDailyService {
+  list (param) {
+    return request({
+      url: prefix + '/assess/signatureDaily/list',
+      method: 'get',
+      params: param
+    })
+  }
+
+  saveForm (param) {
+    return request({
+      url: prefix + '/assess/signatureDaily/save',
+      method: 'post',
+      data: param
+    })
+  }
+  findById (id) {
+    return request({
+      url: prefix + '/assess/signatureDaily/findById',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  remove (id) {
+    return request({
+      url: prefix + '/assess/signatureDaily/remove',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  updateStatusById (param) {
+    return request({
+      url: prefix + '/assess/signatureDaily/updateStatusById',
+      method: 'post',
+      data: param
+    })
+  }
+
+  exportFile (params) {
+    return request({
+      url: prefix + '/assess/signatureDaily/exportFile',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  }
+	saveFlowableParam (inputForm) {
+		return request({
+			url: prefix + `/assess/signatureDaily/saveFlowableParam`,
+			method: 'post',
+			data: inputForm
+		})
+	}
+
+	getAuditNodeById (id) {
+		return request({
+			url: prefix + '/assess/signatureDaily/getAuditNodeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+	getSignatureTypeById(id) {
+		return request({
+			url: prefix + '/assess/signatureDaily/getSignatureTypeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+}

+ 75 - 0
src/api/program/signatureDaily/SignatureReportService.js

@@ -0,0 +1,75 @@
+import request from "@/utils/httpRequest";
+import { ASSESS_PATH as prefix } from "../../AppPath";
+
+
+export default class SignatureDailyService {
+  list (param) {
+    return request({
+      url: prefix + '/assess/signatureReport/list',
+      method: 'get',
+      params: param
+    })
+  }
+
+  saveForm (param) {
+    return request({
+      url: prefix + '/assess/signatureReport/save',
+      method: 'post',
+      data: param
+    })
+  }
+  findById (id) {
+    return request({
+      url: prefix + '/assess/signatureReport/findById',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  remove (id) {
+    return request({
+      url: prefix + '/assess/signatureReport/remove',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  updateStatusById (param) {
+    return request({
+      url: prefix + '/assess/signatureReport/updateStatusById',
+      method: 'post',
+      data: param
+    })
+  }
+
+  exportFile (params) {
+    return request({
+      url: prefix + '/assess/signatureReport/exportFile',
+      method: 'get',
+      params: params,
+      responseType: 'blob'
+    })
+  }
+
+	saveFlowableParam (inputForm) {
+		return request({
+			url: prefix + `/assess/signatureReport/saveFlowableParam`,
+			method: 'post',
+			data: inputForm
+		})
+	}
+
+	getAuditNodeById (id) {
+		return request({
+			url: prefix + '/assess/signatureReport/getAuditNodeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+	getSignatureTypeById(id) {
+		return request({
+			url: prefix + '/assess/signatureReport/getSignatureTypeById',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
+}

+ 435 - 0
src/views/common/SignatureUpLoadComponent.vue

@@ -0,0 +1,435 @@
+<!--文件上传组件-->
+<template>
+  <div :key="uploadKey">
+<!--    <el-divider v-if="showDivider" content-position="left"><i class="el-icon-document"></i> {{dividerName}}</el-divider>-->
+	  <el-divider content-position="left"><i class="el-icon-document" style="color: red">*</i>
+		  签章附件信息
+	  </el-divider>
+	  <el-upload ref="upload" style="display: inline-block; :show-header='status'" action=""
+               :limit="999" :http-request="httpRequest"
+               multiple
+               :on-exceed="(files, fileList) =>{
+                      $message.warning(`当前限制选择 999 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+                     }"
+               :show-file-list="false"
+               :on-change="changes"
+               :on-progress="uploadVideoProcess"
+               :file-list="fileList">
+		<template v-if="auth==='view'&&uploadFlag===false" #tip>
+			<el-button :loading="loading" type="primary" size="default" :disabled="true"> 点击上传 </el-button>
+		</template>
+		<template v-else #trigger>
+			<el-button :loading="loading" type="primary" size="default"> 点击上传 </el-button>
+		</template>
+    </el-upload>
+	  <el-button v-if="showSign" :loading="loading" type="info" style="float: right;" @click="clickSign">签章</el-button>
+    <div style="height: calc(100% - 80px);margin-top: 10px">
+      <!-- 进度条 -->
+      <el-progress style="margin-left: 5em" v-if="progressFlag" :percentage="loadProgress"></el-progress>
+      <el-table
+        ref="uploadTable"
+        v-loading="loading"
+        :key="tableKey"
+        :data="dataListNew">
+        <el-table-column type="seq" width="40"></el-table-column>
+        <el-table-column label="文件名称" prop="name" align="center">
+          <template #default="scope">
+            <div v-if="ifName(scope.row) === true">
+              <el-image
+                style="width: 30px; height: 30px;padding-top: 4px;"
+                :src="scope.row.lsUrl"
+                :preview-src-list="[scope.row.lsUrl]"
+				:preview-teleported="true"
+              ></el-image>
+            </div>
+            <div v-else>
+              <el-link  type="primary" :underline="false" @click="showFile(scope.row)">{{scope.row.name}}</el-link>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="创建人" prop="createBy.name" align="center"></el-table-column>
+        <el-table-column label="创建时间" prop="createTime" align="center"></el-table-column>
+        <el-table-column label="文件大小" prop="size" align="center">
+          <template #default="scope">
+            {{getSize(scope.row.size)}}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="200px" fixed="right" align="center">
+          <template  #default="scope">
+            <el-button text type="primary" key="01" icon="el-icon-download" size="small" @click="toHref(scope.row)" >下载</el-button>
+            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index,fileList)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>
+<!--            <el-button v-if="createBy===scope.row.createBy.name" type="text"  icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index)" :disabled="auth==='view'&&delFlag === false">删除2</el-button>-->
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+<!--    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" :zIndex=9999></el-image-viewer>-->
+  </div>
+</template>
+
+<script>
+  // eslint-disable-next-line no-unused-vars
+  import OSSSerivce, {
+    httpRequest,
+    // eslint-disable-next-line no-unused-vars
+    handleRemove,
+    fileName,
+    exnameFix,
+    // eslint-disable-next-line no-unused-vars
+    beforeAvatarUpload,
+    // eslint-disable-next-line no-unused-vars
+    openWindowOnUrl,
+    // eslint-disable-next-line no-unused-vars
+    toHref
+  } from '@/api/sys/OSSService'
+  // import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+  import moment from 'moment'
+  export default {
+    data () {
+      return {
+		  uploadKey: '',
+        progressFlag: false,
+        loadProgress: 0,
+        fileList: [],
+        dataList: [],
+        dataListNew: [],
+        url: '',
+        showViewer: false,
+        ossService: null,
+        auth: '',
+        directory: 'public',
+        maxValue: 300,
+        tableKey: '',
+        fileLoading: true,
+        dividerName: '',
+        uploadFlag: false,
+        delFlag: false,
+        createBy: '',
+        showDivider: true,
+        loading: false,
+        dataListLength: '',
+	    showSign: false,
+      }
+    },
+    watch: {
+    },
+    created () {
+      this.ossService = new OSSSerivce()
+    },
+    components: {
+      // ElImageViewer
+    },
+    mounted () {
+      window.onPreview = this.onPreview
+    },
+    methods: {
+      /**
+       * dividerName: 组件中divider的名称赋值
+       * showDivider: ‘附件‘Divider是否展示
+       *     注:值为空时,默认值为true
+       *    showDivider=false时 ‘附件‘Divider隐藏
+       **/
+      setDividerName (dividerName, showDivider) {
+        if (this.commonJS.isNotEmpty(dividerName)) {
+          this.dividerName = dividerName
+        }
+        if (this.commonJS.isNotEmpty(showDivider)) {
+          if (showDivider === false) {
+            this.showDivider = false
+          } else {
+            this.showDivider = true
+          }
+        } else {
+          this.showDivider = true
+        }
+      },
+      /**
+       * 文件上传组件初始化
+       * @param auth
+       *    auth的值为"view"时,不可上传/编辑文件
+       *    auth为其他值时,可上传/编辑文件
+       * @param fileList  要显示到文件上传列表中的文件。
+       *    注:文件必须要有url属性并且文件的url属性值必须是在oss中的路径值
+       *    例:'/attachment-file/xxx/xxx/2022/9/08/xxx.jpg'
+       * @param directory  要存放到oss的哪个文件夹下。
+       *    注:值为空时,默认存放到"public"文件夹
+       * @param maxValue  上传文件允许的最大值,单位:MB
+       *    注:值为空时,默认值为300MB
+       * @param dividerName  组件中divider的名称
+       *    注:值为空时,默认值为‘附件’
+       * @param uploadFlag  ‘上传文件’按钮是否禁用
+       *    注:值为空时,默认值为false
+       *    auth=view&&uploadFlag=false时 ‘上传文件’按钮禁用
+       * @param delFlag  ‘删除’按钮是否禁用
+       *    注:值为空时,默认值为false
+       *    auth=view&&delFlag=false时 ‘删除’按钮禁用
+       * @param showDivider  ‘附件‘Divider是否展示
+       *    注:值为空时,默认值为true
+       *    showDivider=false时 ‘附件‘Divider隐藏
+	   *    * @param showSign ‘签章’按钮 是否展示
+	   *    注:值为空时,默认值为false 不展示
+	   *    showSign=audit的时候 ‘签章’按钮展示
+       */
+      async newUpload (auth, fileList, directory, maxValue, dividerName, uploadFlag, delFlag, showDivider,showSign) {
+		  if (this.commonJS.isEmpty(showSign)) {
+			  this.showSign = false
+		  } else {
+			  if (showSign === 'audit') {
+				  this.showSign = true
+			  } else {
+				  this.showSign = false
+			  }
+		  }
+        await this.fileLoadingFalse()
+        if (this.commonJS.isEmpty(fileList)) {
+          this.fileLoading = true
+        } else {
+          this.dataListLength = fileList.length
+        }
+        if (this.commonJS.isEmpty(dividerName)) {
+          this.dividerName = '附件'
+        } else {
+          this.dividerName = dividerName
+        }
+        if (directory !== undefined && directory !== null && directory !== '' && directory !== {}) {
+          this.directory = directory
+        } else {
+          this.directory = 'public'
+        }
+        if (maxValue !== undefined && maxValue !== null && maxValue !== '' && maxValue !== 0) {
+          this.maxValue = maxValue
+        } else {
+          this.maxValue = 300
+        }
+        this.auth = auth
+        if (this.commonJS.isEmpty(uploadFlag)) {
+          this.uploadFlag = false
+        } else {
+          if (uploadFlag !== true && uploadFlag !== false) {
+            this.uploadFlag = false
+          } else {
+            this.uploadFlag = uploadFlag
+          }
+        }
+        if (this.commonJS.isEmpty(delFlag)) {
+          this.delFlag = false
+        } else {
+          if (delFlag !== true && delFlag !== false) {
+            this.delFlag = false
+            this.createBy = delFlag
+          } else {
+            this.delFlag = delFlag
+          }
+        }
+        for await (let item of fileList) {
+          await this.ossService.getFileSizeByUrl(item.url).then((data) => {
+            item.lsUrl = data.url
+            item.size = data.size
+            this.dataList.push(item)
+            this.dataListNew.push(item)
+            if (this.dataListNew.length === fileList.length) {
+              this.fileLoading = true
+            }
+          })
+        }
+        // this.dataList = JSON.parse(JSON.stringify(fileList))
+        // this.dataListNew = JSON.parse(JSON.stringify(fileList))
+        if (this.commonJS.isEmpty(showDivider)) {
+          this.showDivider = true
+        } else {
+          if (showDivider === false) {
+            this.showDivider = false
+          } else {
+            this.showDivider = true
+          }
+        }
+      },
+      async httpRequest (file) {
+        await httpRequest(file, fileName(file), this.directory, this.maxValue)
+      },
+      uploadVideoProcess (event, file, fileList) {
+        this.progressFlag = true // 显示进度条
+        this.loadProgress = parseInt(event.percent) // 动态获取文件上传进度
+        if (this.loadProgress >= 100) {
+          this.loadProgress = 100
+          setTimeout(() => {
+            this.progressFlag = false
+          }, 1000) // 一秒后关闭进度条
+        }
+      },
+      getSize (value) {
+        if (this.commonJS.isEmpty(value)) {
+          return '0 B'
+        } else {
+          let val = parseInt(value)
+          if (this.commonJS.isEmpty(val)) {
+            return '0 B'
+          }
+          if (isNaN(val)) {
+            return '0 B'
+          }
+          if (val === 0) {
+            return '0 B'
+          }
+          let k = 1024
+          let sizes = ['B', 'KB', 'MB', 'GB', 'PB', 'TB', 'EB', 'ZB', 'YB']
+          let i = Math.floor(Math.log(val) / Math.log(k))
+			let result = val / Math.pow(k, i);
+			let kb = parseFloat(result.toPrecision(3));
+          return kb + '' + sizes[i]
+        }
+      },
+		async changes (file, fileList) {
+			if (!exnameFix(file, '1', 'doc,docx,pdf')) {
+				for (let i = 0; i <this.dataListNew.length ; i++) {
+					this.deleteById(this.dataListNew[i],i,this.dataListNew)
+				}
+				this.fileList = []
+				this.dataListNew = []
+				// this.$message.error('文件仅支持 xml 格式!')
+				return
+			}
+			// if (file.status !== 'ready') {
+			//   return
+			// }
+			if (!beforeAvatarUpload(file, fileList, this.maxValue)) {
+				this.$message.error('文件大小不能超过 ' + this.maxValue + ' MB!')
+				return
+			}
+			this.dataListNew = []
+			this.dataList.forEach((item) => {
+				this.dataListNew.push(item)
+			})
+			var fileListNames = []
+			for (let fileItem of this.fileList) {
+				fileListNames.push(fileItem.name)
+			}
+			for (let item of fileList) {
+				if(fileListNames.length === 0 || fileListNames.indexOf(item.name) === -1){
+					this.fileList.push(item)
+				}
+				item.createTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+				item.createBy = {
+					id: '',
+					name: ''
+				}
+				item.createBy.id = this.$store.state.user.id
+				item.createBy.name = this.$store.state.user.name
+				this.dataListNew.push(item)
+			}
+			for (let item of this.dataListNew) {
+				if (item.raw !== undefined && item.raw !== null && item.raw !== {}) {
+					item.url = item.raw.url
+					if (item.raw.url !== undefined && item.raw.url !== null && item.raw.url !== {}) {
+						this.ossService.getTemporaryUrl(item.raw.url).then((data) => {
+							item.lsUrl = data
+						})
+					}
+				}
+			}
+		},
+      showFile (row) {
+      	console.log('row', row)
+        openWindowOnUrl(row)
+      },
+      onPreview (url) {
+        this.url = url
+        this.showViewer = true
+      },
+      // 关闭查看器
+      closeViewer () {
+        this.url = ''
+        this.showViewer = false
+      },
+      toHref (row) {
+        toHref(row)
+      },
+		async deleteById (row, index,fileList) {
+			// this.$refs.upload.handleRemove(this.dataListNew[index])
+			await this.dataListNew.splice(index, 1)
+			await this.dataList.splice(index, 1)
+			if (this.commonJS.isNotEmpty(row.id)) {
+				this.ossService.deleteMsgById(row.id)
+			}
+			var newFileList = [];
+			for (var i = 0; i < fileList.length; i++) {
+				if (fileList[i].name !== row.name) {
+					newFileList.push(fileList[i])
+				}
+			}
+			this.fileList = newFileList;
+
+		},
+      /**
+       * 关闭dialog时使用  清除el-upload中上传的文件
+       */
+      clearUpload () {
+        this.$refs.upload.clearFiles()
+        this.dataList = []
+        this.dataListNew = []
+        this.createBy = ''
+      },
+      /**
+       * 获取当前文件列表中的文件数据
+       */
+      getDataList () {
+        return this.dataListNew
+      },
+      /**
+       * 判断进度条是否结束,附件是否加载完成
+       * @returns {boolean}
+       */
+      checkProgress () {
+        if (this.progressFlag === true) {
+          this.$message.warning('请等待附件上传完成再进行操作')
+          return true
+        }
+        if (this.fileLoading === false) {
+          this.$message.warning('请等待附件加载完成再进行操作')
+          if (this.dataListLength === this.dataListNew.length) {
+            this.fileLoading = true
+          }
+          return true
+        }
+        return false
+      },
+      ifName (row) {
+        if (this.commonJS.isEmpty(row.name)) {
+          row.name = '---'
+          return false
+        }
+        let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
+        if (suffix === 'doc' || suffix === 'docx') {
+          return false
+        } else {
+          return false
+        }
+      },
+      fileLoadingFalse () {
+        this.fileLoading = false
+      },
+      // 开启/关闭页面的加载中状态
+      changeLoading (loading) {
+        if (this.commonJS.isNotEmpty(loading)) {
+          this.loading = loading
+        } else {
+          this.loading = false
+        }
+      },
+		// 隐藏签章按钮
+		hideSign () {
+			this.showSign = false
+		},
+		// 点击签章按钮事件
+		clickSign () {
+			this.$emit('clickSign')
+		},
+    }
+  }
+</script>
+<style>
+  .el-divider__text {
+    font-size: 16px;
+    font-weight: bold;
+  }
+</style>

+ 175 - 0
src/views/cw/signatureDaily/ProgramPageForm.vue

@@ -0,0 +1,175 @@
+<template>
+  <div>
+    <el-dialog
+      :title="项目信息"
+      :close-on-click-modal="false"
+	  draggable
+      width="1100px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+		<el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="项目名称" prop="projectName">
+				<el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+			</el-form-item>
+			<el-form-item label="项目编号" prop="projectNumber">
+				<el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+			</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="list()"  icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<vxe-table
+			border="inner"
+			auto-resize
+			resizable
+			height="550px"
+			:loading="loading"
+			ref="projectTable"
+			show-header-overflow
+			show-overflow
+			highlight-hover-row
+			:menu-config="{}"
+			:print-config="{}"
+			:sort-config="{remote:true}"
+			:data="dataList"
+			:row-config="{isCurrent: true}"
+			:checkbox-config="{trigger: 'row'}"
+		>
+			<vxe-column type="seq" width="60" title="序号"></vxe-column>
+			<vxe-column type="checkbox" width="60px"></vxe-column>
+			<vxe-column min-width="160" align="center" title="项目名称" field="projectName" show-overflow="title"></vxe-column>
+			<vxe-column min-width="160" align="center" title="项目编号" field="projectNumber"></vxe-column>
+			<vxe-column min-width="160" align="center" title="报告号" field="reportNo"></vxe-column>
+			<vxe-column min-width="160" align="center" title="委托方" field="clientContactsName"></vxe-column>
+			<vxe-column min-width="160" align="center" title="创建人" field="createName"></vxe-column>
+			<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
+
+		</vxe-table>
+		<vxe-pager
+			background
+			:current-page="tablePage.currentPage"
+			:page-size="tablePage.pageSize"
+			:total="tablePage.total"
+			:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+			:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+			@page-change="currentChangeHandle">
+		</vxe-pager>
+
+
+
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="getProgram()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import projectRecordsService from '@/api/cw/projectRecords/ProjectRecordsService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          name: '',
+          no: '',
+          createBy: '',
+          projectMasterName: '',
+          projectNumber: '',
+          projectName: '',
+          createDates: [],
+		  reportNo: '',
+          status: ''
+        },
+        checkType: '',
+        detail: '',
+        isShow: true,
+        num: true,// num为true是多选,false是单选
+		reportType:''
+      }
+    },
+    created () {
+    },
+    components: {
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.list()
+      },
+      // 表单提交
+      getProgram () {
+        let rows
+	    rows = this.$refs.projectTable.getCheckboxRecords()
+        this.close()
+        this.$emit('getProgram', rows)
+      },
+      list () {
+        this.loading = true
+        this.searchForm.status = '5'
+        projectRecordsService.getList({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+			console.log('data',this.dataList)
+        })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        this.detail = ''
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

+ 384 - 0
src/views/cw/signatureDaily/SignatureDailyDia.vue

@@ -0,0 +1,384 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+	  <el-dialog
+		  :title="title"
+		  :close-on-click-modal="false"
+		  draggable
+		  width="1200px"
+		  @close="close"
+		  append-to-body
+		  @keyup.enter.native="doSubmit"
+		  v-model="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'||method==='view'"
+             label-width="160px" @submit.native.prevent>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        基本信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_daily')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+		  <template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		  </template>
+	  </el-dialog>
+  </div>
+</template>
+
+<script>
+  import SignatureDailyService from '@/api/cw/signatureDaily/SignatureDailyService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  },
+			  keyWatch: '',
+		  }
+	  },
+	  SignatureDailyService: null,
+	  created() {
+		  this.signatureDailyService = new SignatureDailyService()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  if (method === 'add') {
+			    this.title = `新建日常签章`
+			  } else if (method === 'edit') {
+			    this.title = '修改日常签章'
+			  } else if (method === 'view') {
+			    this.title = '查看日常签章信息'
+			  }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily')
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+					  this.doSubmit('agree', callback)
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  this.signatureDailyService.saveForm(this.inputForm).then((data) => {
+						  this.$refs.inputForm.resetFields()
+						  this.close()
+						  this.$emit('refreshDataList')
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+
+
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureDailyService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureDailyService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 520 - 0
src/views/cw/signatureDaily/SignatureReportDia.vue

@@ -0,0 +1,520 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+	  <el-dialog
+		  :title="title"
+		  :close-on-click-modal="false"
+		  draggable
+		  width="1200px"
+		  @close="close"
+		  append-to-body
+		  @keyup.enter.native="doSubmit"
+		  v-model="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"
+             label-width="160px" @submit.native.prevent>
+		<el-divider content-position="left"><i class="el-icon-document"></i>
+			签章项目信息
+			<el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" @click="insertEvent()"  plain>
+				新增
+			</el-button>
+		</el-divider>
+		<el-row  :gutter="15">
+			<el-col :span="24">
+				<vxe-table
+					border
+					show-overflow
+					ref="baseTable"
+					:key="baseKey"
+					class="vxe-table-element"
+					:data="inputForm.projectList"
+					style="margin-left: 5em"
+					@cell-click=""
+					@edit-closed=""
+					keep-source
+					highlight-current-row
+					:edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true, icon: '-'}"
+				>
+					<vxe-table-column field="projectName" align="center" title="项目名称" :edit-render="{}" show-overflow="title">
+						<template v-slot:edit="scope">
+							<el-input @focus="openProgramPageForm(scope.$rowIndex)" placeholder="请填写项目名称" :readonly="true" v-model="scope.row.projectName"/>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reportNo" align="center" title="报告号"></vxe-table-column>
+					<vxe-table-column field="contractName" align="center" title="合同名称"></vxe-table-column>
+					<vxe-table-column field="projectNumber" align="center" title="项目编号" ></vxe-table-column>
+					  <vxe-table-column field="clientContactsName" title="委托方" ></vxe-table-column>
+					<vxe-table-column title="操作" align="center" width="100">
+						<template v-slot="scope">
+							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex)">删除</el-button>
+						</template>
+					</vxe-table-column>
+				</vxe-table>
+			</el-col>
+		</el-row>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        签章基础信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_project_report')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+	<ProgramPageForm ref="programPageForm" @getProgram="getProgram"></ProgramPageForm>
+		  <template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		  </template>
+	  </el-dialog>
+  </div>
+</template>
+
+<script>
+  import SignatureReportService from '@/api/cw/signatureDaily/SignatureReportService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  import ProgramPageForm from "./ProgramPageForm";
+  import CommonApi from '@/api/cw/common/CommonApi'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  },
+			  keyWatch: '',
+			  programRow: '',
+			  baseKey: '',
+		  }
+	  },
+	  SignatureReportService: null,
+	  commonApi: null,
+	  created() {
+		  this.signatureReportService = new SignatureReportService()
+		  this.commonApi = new CommonApi()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+		  ProgramPageForm
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  }
+			  if (method === 'add') {
+				  this.title = `新建日常签章`
+			  } else if (method === 'edit') {
+				  this.title = '修改日常签章'
+			  } else if (method === 'view') {
+				  this.title = '查看日常签章信息'
+			  }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.inputForm.projectList = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily')
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+				  	this.inputForm.status = '2'
+					  this.$refs['inputForm'].validate((valid) => {
+						  if (valid) {
+							  this.loading = true
+							  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+							  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+								  this.loading = false
+								  this.$message.error('请上传签章附件')
+								  throw new Error()
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+								  this.loading = false
+								  this.$message.error('请选择签章项目')
+								  throw new Error()
+							  }
+							  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data) => {
+								  if (this.commonJS.isNotEmpty(data)) {
+									  if (data === '办公室审批') {
+										  this.inputForm.status = '5'
+									  }
+								  }
+								  console.log('this.inputForm',this.inputForm)
+								  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+									  if (status === 'start' || status === 'reapply') {
+										  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [财务-报告签章]`
+									  }
+									  this.inputForm.id = data.businessId
+									  console.log('data22', data)
+									  callback(data.businessTable, data.businessId, this.inputForm)
+									  this.loading = false
+								  }).catch(() => {
+									  this.loading = false
+								  })
+							  })
+						  } else {
+							  this.loading = false
+						  }
+					  })
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.loading = false
+						  this.$message.error('请选择签章项目')
+						  throw new Error()
+					  }
+
+					  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+						  this.$refs.inputForm.resetFields()
+						  this.close()
+						  this.$emit('refreshDataList')
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureReportService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureReportService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+		  insertEvent() {
+			  this.$refs.baseTable.insertAt({})
+			  this.inputForm.projectList.push({})
+			  this.baseKey = Math.random()
+		  },
+		  // 删除
+		  removeEvent(row, rowIndex) {
+			  this.$refs.baseTable.remove(row)
+			  this.inputForm.projectList.splice(rowIndex, 1)
+		  },
+		  openProgramPageForm(rowIndex) {
+			  this.$refs.programPageForm.init()
+			  this.programRow = rowIndex
+		  },
+		  getProgram(rows) {
+			  rows.forEach((item, index) => {
+				  if (index === 0) {
+					  let r = this.inputForm.projectList[this.programRow]
+					  r.projectName = item.projectName
+					  r.contractName = item.contractName
+					  r.projectNumber = item.projectNumber
+					  r.id = item.id
+					  r.reportNo = item.reportNo
+					  r.clientContactsName = item.clientContactsName
+					  this.inputForm.projectList[this.programRow] = r
+				  } else {
+					  let r = {
+						  projectName: item.projectName,
+						  contractName: item.contractName,
+						  projectNumber: item.projectNumber,
+						  id: item.id,
+						  reportNo: item.reportNo,
+						  clientContactsName:item.clientContactsName,
+					  }
+					  this.$refs.baseTable.insertAt(r)
+					  this.inputForm.projectList.push(r)
+					  this.baseKey = Math.random()
+				  }
+			  })
+			  this.$forceUpdate()
+			  this.programRow = ''
+		  },
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 580 - 0
src/views/cw/signatureDaily/SignatureReportFormTask.vue

@@ -0,0 +1,580 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+             label-width="160px" @submit.native.prevent>
+		<el-divider content-position="left"><i class="el-icon-document"></i>
+			签章项目信息
+			<el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" @click="insertEvent()"  plain>
+				新增
+			</el-button>
+		</el-divider>
+		<el-row  :gutter="15">
+			<el-col :span="24">
+				<vxe-table
+					border
+					show-overflow
+					ref="baseTable"
+					:key="baseKey"
+					class="vxe-table-element"
+					:data="inputForm.projectList"
+					style="margin-left: 5em"
+					@cell-click=""
+					@edit-closed=""
+					keep-source
+					highlight-current-row
+					:edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true, icon: '-'}"
+				>
+					<vxe-table-column field="projectName" align="center" title="项目名称" :edit-render="{}" show-overflow="title">
+						<template v-slot:edit="scope">
+							<el-input @focus="openProgramPageForm(scope.$rowIndex)" placeholder="请填写项目名称" :readonly="true" v-model="scope.row.projectName"/>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reportNo" align="center" title="报告号"></vxe-table-column>
+					<vxe-table-column field="contractName" align="center" title="合同名称"></vxe-table-column>
+					<vxe-table-column field="projectNumber" align="center" title="项目编号" ></vxe-table-column>
+					  <vxe-table-column field="clientContactsName" title="委托方" ></vxe-table-column>
+					<vxe-table-column title="操作" align="center" width="100">
+						<template v-slot="scope">
+							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex)">删除</el-button>
+						</template>
+					</vxe-table-column>
+				</vxe-table>
+			</el-col>
+		</el-row>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        签章基础信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_project_report')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent" @clickSign="clickSign"></UpLoadComponent>
+	<ProgramPageForm ref="programPageForm" @getProgram="getProgram"></ProgramPageForm>
+  </div>
+</template>
+
+<script>
+  import SignatureReportService from '@/api/cw/signatureDaily/SignatureReportService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  import ProgramPageForm from "./ProgramPageForm";
+  import CommonApi from '@/api/cw/common/CommonApi'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  },
+			  keyWatch: '',
+			  programRow: '',
+			  baseKey: '',
+		  }
+	  },
+	  SignatureReportService: null,
+	  commonApi: null,
+	  created() {
+		  this.signatureReportService = new SignatureReportService()
+		  this.commonApi = new CommonApi()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+		  ProgramPageForm
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  }
+			  // if (method === 'add') {
+			  //   this.title = `新建发票`
+			  // } else if (method === 'edit') {
+			  //   this.title = '修改发票'
+			  // } else if (method === 'view') {
+			  //   this.title = '查看发票信息'
+			  // }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.inputForm.projectList = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((da) => {
+						  if (da === '办公室审批'){
+							  if (this.commonJS.isNotEmpty(this.inputForm.files) && this.status === 'audit'){
+								  this.$refs.uploadComponent.newUpload('view', this.inputForm.files, 'signatureReport', null, null, null, null, false, 'audit')
+								  this.$emit('callBackFunc', 'hide')
+								  this.jobScheduler()
+							  }else {
+								  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureReport', null, null, null, null, false, false)
+							  }
+						  }else {
+							  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureReport', null, null, null, null, false, false)
+						  }
+					  })
+
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+				  	this.inputForm.status = '2'
+					  this.$refs['inputForm'].validate((valid) => {
+						  if (valid) {
+							  this.loading = true
+							  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+							  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+								  this.loading = false
+								  this.$message.error('请上传签章附件')
+								  throw new Error()
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+								  this.loading = false
+								  this.$message.error('请选择签章项目')
+								  throw new Error()
+							  }
+							  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data) => {
+								  if (this.commonJS.isNotEmpty(data)) {
+									  if (data === '办公室审批') {
+										  this.inputForm.status = '5'
+									  }
+								  }
+								  console.log('this.inputForm',this.inputForm)
+								  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+									  if (status === 'start' || status === 'reapply') {
+										  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [财务-报告签章]`
+									  }
+									  this.inputForm.id = data.businessId
+									  console.log('data22', data)
+									  callback(data.businessTable, data.businessId, this.inputForm)
+									  this.loading = false
+								  }).catch(() => {
+									  this.loading = false
+								  })
+							  })
+						  } else {
+							  this.loading = false
+						  }
+					  })
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  }
+			  if (status === 'save') {
+				  // 暂存
+				  this.loading = true
+				  this.inputForm.status = '1'
+				  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+				  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+					  callback(data.businessTable, data.businessId, this.inputForm)
+					  this.loading = false
+				  }).catch(() => {
+					  this.loading = false
+				  })
+				  return
+			  } else if (status === 'start') {
+				  // 送审  待审核
+				  this.inputForm.status = '2'
+			  } else if (status === 'agree') {
+				  this.inputForm.status = '2'
+			  } else if (status === 'reapply') {
+				  this.inputForm.status = '2'
+			  }
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.loading = false
+						  this.$message.error('请选择签章项目')
+						  throw new Error()
+					  }
+
+					  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+						  if (status === 'start' || status === 'reapply') {
+							  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [财务-报告签章]`
+						  }
+						  this.inputForm.id = data.businessId
+						  console.log('data22', data)
+						  callback(data.businessTable, data.businessId, this.inputForm)
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureReportService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureReportService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+		  insertEvent() {
+			  this.$refs.baseTable.insertAt({})
+			  this.inputForm.projectList.push({})
+			  this.baseKey = Math.random()
+		  },
+		  // 删除
+		  removeEvent(row, rowIndex) {
+			  this.$refs.baseTable.remove(row)
+			  this.inputForm.projectList.splice(rowIndex, 1)
+		  },
+		  openProgramPageForm(rowIndex) {
+			  this.$refs.programPageForm.init()
+			  this.programRow = rowIndex
+		  },
+		  getProgram(rows) {
+			  rows.forEach((item, index) => {
+				  if (index === 0) {
+					  let r = this.inputForm.projectList[this.programRow]
+					  r.projectName = item.projectName
+					  r.contractName = item.contractName
+					  r.projectNumber = item.projectNumber
+					  r.id = item.id
+					  r.reportNo = item.reportNo
+					  r.clientContactsName = item.clientContactsName
+					  this.inputForm.projectList[this.programRow] = r
+				  } else {
+					  let r = {
+						  projectName: item.projectName,
+						  contractName: item.contractName,
+						  projectNumber: item.projectNumber,
+						  id: item.id,
+						  reportNo: item.reportNo,
+						  clientContactsName:item.clientContactsName,
+					  }
+					  this.$refs.baseTable.insertAt(r)
+					  this.inputForm.projectList.push(r)
+					  this.baseKey = Math.random()
+				  }
+			  })
+			  this.$forceUpdate()
+			  this.programRow = ''
+		  },
+
+		  clickSign () {
+			  console.log('2312321')
+			  this.signatureReportService.saveFlowableParam(this.inputForm).then((data) => {
+				  window.open(data, '_blank')
+			  })
+		  },
+
+		  jobScheduler () {
+			  this.interVal = setInterval(() => {
+				  console.log('正在访问签章状态...')
+				  console.log(this.inputForm)
+				  this.signatureReportService.getAuditNodeById(this.inputForm.id).then((data) => {
+					  console.log('进来了', data)
+					  if (data.success === true) {
+						  this.signatureReportService.getSignatureTypeById(this.inputForm.id).then((sign) => {
+							  console.log('sign',sign)
+							  if (sign.signatureType === 1) {
+								  console.log('sign.signatureType', sign.signatureType)
+								  console.log('签章已完成,展示‘同意’按钮')
+								  this.$emit('callBackFunc', 'show')
+								  this.$refs.uploadComponent.hideSign() // 隐藏签章按钮
+								  clearInterval(this.interVal)
+								  this.showConfirm() // 提示签章操作已完成
+							  }
+						  })
+					  }
+				  })
+			  }, 2000)
+		  },
+		  showConfirm () {
+			  this.$confirm(`签章操作已完成,请进行审核操作`, '提示', {
+				  confirmButtonText: '确定',
+				  type: 'warning'
+			  })
+		  }
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 540 - 0
src/views/cw/signatureDaily/SignatureReportList.vue

@@ -0,0 +1,540 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="签章描述" prop="signatureName">
+				<el-input v-model="searchForm.signatureName" placeholder="请输入签章描述" clearable>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="签章类型" prop="signatureType">
+				<el-select v-model="searchForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('signature_project_report')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item label="创建时间" prop="dates">
+				<el-date-picker
+					style=""
+					placement="bottom-start"
+					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 v-if="showHideItem" label="创建人" prop="createById">
+				<UserSelect :limit='1' :modelValue="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+			</el-form-item>
+
+			<el-form-item v-if="showHideItem" label="签章状态" prop="status">
+				<el-select v-model="searchForm.status" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('status')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="部门" prop="officeId">
+				<SelectTree
+					ref="officeTree"
+					:props="{
+                value: 'id',             // ID字段名
+                label: 'name',         // 显示名称
+                children: 'children'    // 子级字段名
+              }"
+					:url="`/system-server/sys/office/treeData?type=2`"
+					:value="searchForm.officeId"
+					:clearable="true"
+					:accordion="true"
+					size="default"
+					@getValue="(value,label) => {searchForm.officeId=label}"/>
+			</el-form-item>
+
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<div class="jp-table top" style="">
+			<vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('signature:daily:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+<!--					<el-button v-if="hasPermission('cw:reimbursement:info:del')" type="danger"  icon="el-icon-delete" @click="del()" :disabled="$refs.infoTable && $refs.infoTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 80px)">
+				<vxe-table
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="infoTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					:sort-config="{remote:true}"
+					: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']
+                  }"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+<!--					<vxe-column type="checkbox" width="60" ></vxe-column>-->
+					<vxe-column min-width="130" title="签章编号" field="number" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('cw:reimbursement:info:view')" @click="view(scope.row.id)">{{scope.row.number}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column width="130" title="签章描述" field="signatureName" align="center"></vxe-column>
+					<vxe-column width="130" title="签章项目" field="projectName" align="center"></vxe-column>
+					<vxe-column min-width="130" title="签章类型" field="signatureType" align="center">
+						<template #default="scope">
+							{{$dictUtils.getDictLabel('signature_project_report', scope.row.signatureType, '')}}
+						</template>
+					</vxe-column>
+					<vxe-column min-width="100" title="签章人" field="createName" align="center"></vxe-column>
+					<vxe-column min-width="100" title="创建日期" field="createTime" align="center"></vxe-column>
+					<vxe-column min-width="100" title="状态" fixed="right" align="center" field="status">
+						<template #default="scope">
+							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.status, '未开始')}} </el-button>
+						</template>
+					</vxe-column>
+
+					<vxe-column title="操作" min-width="130px" fixed="right" align="center">
+						<template  #default="scope">
+							<div v-if="isAdmin">
+								<el-button v-if=" (scope.row.status === '5' )" text type="primary" @click="editForm(scope.row)">修改</el-button>
+								<el-button v-if=" (scope.row.status === '5')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+							</div>
+							<div v-else>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '1' || scope.row.status === '3' )" text type="primary"   @click="edit(scope.row)">修改</el-button>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
+								<el-button v-if="hasPermission('signature:daily:del') && scope.row.createById === $store.state.user.id && (scope.row.status === '1')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+								<!--              审核-->
+								<el-button v-if="scope.row.status==='2' && checkIsAudit(scope.row)" text type="primary"  @click="examine(scope.row)">审核</el-button>
+								<!--              被驳回后当前申请人重新调整-->
+								<el-button v-if="scope.row.createById === $store.state.user.id&&scope.row.status === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
+							</div>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+
+				<SignatureReportDia ref="signatureReportDia" @refreshDataList="refreshList"></SignatureReportDia>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import SignatureReportService from '@/api/cw/signatureDaily/SignatureReportService'
+	import UserSelect from '@/components/userSelect'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import SignatureReportDia from "./SignatureReportDia";
+	import taskService from '@/api/flowable/TaskService'
+	import processService from '@/api/flowable/ProcessService'
+	import pick from 'lodash.pick'
+
+	import userService from '@/api/sys/UserService'
+
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				visable: false,
+				gridData: [],
+				searchForm: {
+					signatureName:'',
+					signatureType:'',
+					createById:'',
+					officeId:'',
+					datas:[],
+					status:''
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				loading: false,
+				isAdmin: false,
+				processDefinitionId:'',
+				procDefKey:''
+			}
+		},
+		SignatureReportService: null,
+		created () {
+			this.signatureReportService = new SignatureReportService()
+		},
+		components: {
+			SelectTree,
+			UserSelect,
+			SignatureReportDia
+		},
+		mounted () {
+			this.$nextTick(() => {
+				//将表格和工具栏进行关联
+				const $table = this.$refs.infoTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			})
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.create = this.$store.state.user.id
+				console.log('createId', this.$store.state.user)
+				return this.$store.state.user
+			}
+		},
+		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 = '展示'
+				}
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+
+			// 新增
+			add () {
+				// 读取流程表单
+				let tabTitle = `发起流程【会计-报告签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报告签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					status: 'startAndHold'}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: 'startAndHold',
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessId: 'false',
+							isShow: false,
+							routePath: '/cw/signatureDaily/SignatureReportList'
+						}
+					})
+				})
+
+			},
+			// 修改
+			edit (row) {
+				// 暂存修改
+				let status = ''
+				if (row.status === '1') {
+					status = 'startAndHold'
+				}
+				// 撤回或者驳回修改
+				if (row.status === '3') {
+					status = 'startAndClose'
+				} else if (row.status === '4') {
+					status = 'reapplyFlag'
+				}
+				// 读取流程表单
+				let tabTitle = `发起流程【会计-报告签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [会计-报告签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					businessId: row.id,
+					businessTable: 'cw_signature_project_report_relation',
+					status: status
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: status,
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessTable: 'cw_signature_project_report_relation',
+							businessId: row.id,
+							isShow: false,
+							routePath: '/cw/signatureDaily/SignatureReportList'
+						}
+					})
+				})
+			},
+			// 撤回
+			reback (row) {
+				this.$confirm(`确定撤回流程吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					processService.revokeProcIns(row.procInsId).then((data) => {
+						let param = {status: '3', id: row.id}
+						this.signatureReportService.updateStatusById(param)
+						this.$message.success('回退成功')
+						this.refreshList()
+					})
+				})
+			},
+			// 查看
+			view (id) {
+				this.$refs.signatureReportDia.init('view', id)
+			},
+			editForm (row) {
+				this.$refs.signatureReportDia.init('edit', row.id)
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.signatureReportService.list({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.loading = false
+				})
+				this.checkIsAdmin()
+				processService.getByName('财务-报告签章').then((data) => {
+					if (!this.commonJS.isEmpty(data.id)) {
+						this.processDefinitionId = data.id
+						this.procDefKey = data.key
+					}
+				})
+
+
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.infoTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.signatureReportService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+			// 流程详情
+			detail (row) {
+				taskService.getTaskDef({
+					procInsId: row.procInsId,
+					procDefId: this.processDefinitionId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '流程详情',
+							formTitle: '流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+
+			},
+			openProgramPageForm (rowIndex) {
+				// 打开单选组件
+				this.$refs.projectChooseForm.init(null, false)
+			},
+
+			// 下载文档
+			exportFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销审批列表信息')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 下载文档
+			exportInvoiceReimbursementFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportInvoiceReimbursementFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销数电发票报销列表')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 自定义服务端导出
+			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.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.signatureReportService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename)
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 驳回后调整
+			adjust (row) {
+				console.log('row', row)
+				this.signatureReportService.findById(row.id).then((data) => {
+					console.log('data', data)
+					if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核
+			examine (row) {
+				this.signatureReportService.findById(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核或重新调整跳转
+			todo (row) {
+				console.log('row.taskId', row.taskId)
+				let cUser = false
+				taskService.getTaskDefInfo({
+					taskId: row.taskId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+							isShow: false,
+							formReadOnly: true,
+							formTitle: `${data.taskName}`,
+							cUser: cUser,
+							title: `审批【${data.taskName || ''}】`,
+							routePath: '/cw/signatureDaily/SignatureReportList'   // 数据处理后需要跳转的页面路径
+						}
+					})
+				})
+			},
+			// 查询当前登录人是否是数据的审核人
+			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
+			}
+		}
+	}
+</script>

+ 9 - 1
src/views/flowable/task/TaskForm.vue

@@ -759,6 +759,10 @@ export default {
 		// Process_1708926975266 会计-撤回签章
 		// Process_1709102298565 盛所会计-报销申请
 		// Process_1709104787957 盛所项目-报销申请
+		// Process_1709605863764 财务-日常办公签章
+		// Process_1709716622665 评估-日常办公签章
+		// Process_1709606246355 财务-报告签章
+		// Process_1709716869089 评估-报告签章
 		// 驳回
 		reject(vars) {
 			if (this.procDefId.includes('Process_1667978088459') ||
@@ -838,7 +842,11 @@ export default {
 				this.procDefId.includes('Process_1706680660857') ||
 				this.procDefId.includes('Process_1708926975266') ||
 				this.procDefId.includes('Process_1709102298565') ||
-				this.procDefId.includes('Process_1709104787957')
+				this.procDefId.includes('Process_1709104787957') ||
+				this.procDefId.includes('Process_1709605863764') ||
+				this.procDefId.includes('Process_1709606246355') ||
+				this.procDefId.includes('Process_1709716622665') ||
+				this.procDefId.includes('Process_1709716869089')
 			) {
 				console.log('进入新版驳回')
 				this.$confirm(`确定驳回流程吗?`, '提示', {

+ 176 - 0
src/views/program/signatureDaily/ProgramPageForm.vue

@@ -0,0 +1,176 @@
+<template>
+  <div>
+    <el-dialog
+      :title="项目信息"
+      :close-on-click-modal="false"
+	  draggable
+      width="1100px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+		<el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="项目名称" prop="projectName">
+				<el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+			</el-form-item>
+			<el-form-item label="项目编号" prop="projectNumber">
+				<el-input v-model="searchForm.projectNumber" placeholder="请输入项目编号" clearable></el-input>
+			</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="list()"  icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<vxe-table
+			border="inner"
+			auto-resize
+			resizable
+			height="550px"
+			:loading="loading"
+			ref="projectTable"
+			show-header-overflow
+			show-overflow
+			highlight-hover-row
+			:menu-config="{}"
+			:print-config="{}"
+			:sort-config="{remote:true}"
+			:data="dataList"
+			:row-config="{isCurrent: true}"
+			:checkbox-config="{trigger: 'row'}"
+		>
+			<vxe-column type="seq" width="60" title="序号"></vxe-column>
+			<vxe-column type="checkbox" width="60px"></vxe-column>
+			<vxe-column min-width="160" align="center" title="项目名称" field="name" show-overflow="title"></vxe-column>
+			<vxe-column min-width="160" align="center" title="项目编号" field="no"></vxe-column>
+			<vxe-column min-width="160" align="center" title="报告号" field="reportNo"></vxe-column>
+			<vxe-column min-width="160" align="center" title="委托方" field="clientName"></vxe-column>
+			<vxe-column min-width="160" align="center" title="创建人" field="createById"></vxe-column>
+			<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
+
+		</vxe-table>
+		<vxe-pager
+			background
+			:current-page="tablePage.currentPage"
+			:page-size="tablePage.pageSize"
+			:total="tablePage.total"
+			:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+			:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+			@page-change="currentChangeHandle">
+		</vxe-pager>
+
+
+
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="getProgram()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		</template>
+
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+ import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        dataList: [],
+        searchForm: {
+          name: '',
+          no: '',
+          createBy: '',
+          projectMasterName: '',
+          projectNumber: '',
+          projectName: '',
+          createDates: [],
+		  reportNo: '',
+          status: ''
+        },
+        checkType: '',
+        detail: '',
+        isShow: true,
+        num: true,// num为true是多选,false是单选
+		reportType:''
+      }
+    },
+	  programProjectListInfoService: null,
+    created () {
+		this.programProjectListInfoService = new ProgramProjectListInfoService()
+    },
+    components: {
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.list()
+      },
+      // 表单提交
+      getProgram () {
+        let rows
+	    rows = this.$refs.projectTable.getCheckboxRecords()
+        this.close()
+        this.$emit('getProgram', rows)
+      },
+      list () {
+        this.loading = true
+		  this.programProjectListInfoService.list({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.loading = false
+			console.log('data',this.dataList)
+        })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        this.detail = ''
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style>
+  .messageZindex {
+    z-index:9999 !important;
+  }
+</style>

+ 384 - 0
src/views/program/signatureDaily/SignatureDailyDia.vue

@@ -0,0 +1,384 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+	  <el-dialog
+		  :title="title"
+		  :close-on-click-modal="false"
+		  draggable
+		  width="1200px"
+		  @close="close"
+		  append-to-body
+		  @keyup.enter.native="doSubmit"
+		  v-model="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'||method==='view'"
+             label-width="160px" @submit.native.prevent>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        基本信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_daily')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+		  <template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		  </template>
+	  </el-dialog>
+  </div>
+</template>
+
+<script>
+  import SignatureDailyService from '@/api/program/signatureDaily/SignatureDailyService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  },
+			  keyWatch: '',
+		  }
+	  },
+	  SignatureDailyService: null,
+	  created() {
+		  this.signatureDailyService = new SignatureDailyService()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  if (method === 'add') {
+			    this.title = `新建日常签章`
+			  } else if (method === 'edit') {
+			    this.title = '修改日常签章'
+			  } else if (method === 'view') {
+			    this.title = '查看日常签章信息'
+			  }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily')
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+					  this.doSubmit('agree', callback)
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  this.signatureDailyService.saveForm(this.inputForm).then((data) => {
+						  this.$refs.inputForm.resetFields()
+						  this.close()
+						  this.$emit('refreshDataList')
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+
+
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureDailyService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureDailyService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 447 - 0
src/views/program/signatureDaily/SignatureDailyFormTask.vue

@@ -0,0 +1,447 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+             label-width="160px" @submit.native.prevent>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        基本信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_daily')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent" @clickSign="clickSign"></UpLoadComponent>
+
+  </div>
+</template>
+
+<script>
+  import SignatureDailyService from '@/api/program/signatureDaily/SignatureDailyService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  import CommonApi from '@/api/cw/common/CommonApi'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  procInsId:''
+			  },
+			  keyWatch: '',
+		  }
+	  },
+	  SignatureDailyService: null,
+	  CommonApi: null,
+	  created() {
+		  this.signatureDailyService = new SignatureDailyService()
+		  this.commonApi = new CommonApi()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  procInsId:''
+			  }
+			  // if (method === 'add') {
+			  //   this.title = `新建发票`
+			  // } else if (method === 'edit') {
+			  //   this.title = '修改发票'
+			  // } else if (method === 'view') {
+			  //   this.title = '查看发票信息'
+			  // }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+						  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((da) => {
+							  if (da === '办公室审批') {
+								  if (this.commonJS.isNotEmpty(this.inputForm.files) && this.status === 'audit') {
+									  this.$refs.uploadComponent.newUpload('view', this.inputForm.files, 'signatureDaily', null, null, null, null, false, 'audit')
+									  this.$emit('callBackFunc', 'hide')
+									  this.jobScheduler()
+								  } else {
+									  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily', null, null, null, null, false, false)
+								  }
+							  } else {
+								  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily', null, null, null, null, false, false)
+							  }
+						  })
+
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+					  this.doSubmit('agree', callback)
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  }
+			  if (status === 'save') {
+				  // 暂存
+				  this.loading = true
+				  this.inputForm.status = '1'
+				  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+				  this.signatureDailyService.saveForm(this.inputForm).then((data) => {
+					  callback(data.businessTable, data.businessId, this.inputForm)
+					  this.loading = false
+				  }).catch(() => {
+					  this.loading = false
+				  })
+				  return
+			  } else if (status === 'start') {
+				  // 送审  待审核
+				  this.inputForm.status = '2'
+			  } else if (status === 'agree') {
+				  this.inputForm.status = '5'
+			  } else if (status === 'reapply') {
+				  this.inputForm.status = '2'
+			  }
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  this.signatureDailyService.saveForm(this.inputForm).then((data) => {
+						  if (status === 'start' || status === 'reapply') {
+							  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [评估-日常签章]`
+						  }
+						  this.inputForm.id = data.businessId
+						  console.log('data22', data)
+						  callback(data.businessTable, data.businessId, this.inputForm)
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureDailyService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureDailyService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureDailyService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+		  clickSign () {
+			  console.log('2312321')
+			  this.signatureDailyService.saveFlowableParam(this.inputForm).then((data) => {
+				  window.open(data, '_blank')
+			  })
+		  },
+
+		  jobScheduler () {
+			  this.interVal = setInterval(() => {
+				  console.log('正在访问签章状态...')
+				  console.log(this.inputForm)
+				  this.signatureDailyService.getAuditNodeById(this.inputForm.id).then((data) => {
+					  console.log('进来了', data)
+					  if (data.success === true) {
+						  this.signatureDailyService.getSignatureTypeById(this.inputForm.id).then((sign) => {
+							  console.log('sign',sign)
+							  if (sign.signatureType === 1) {
+								  console.log('sign.signatureType', sign.signatureType)
+								  console.log('签章已完成,展示‘同意’按钮')
+								  this.$emit('callBackFunc', 'show')
+								  this.$refs.uploadComponent.hideSign() // 隐藏签章按钮
+								  clearInterval(this.interVal)
+								  this.showConfirm() // 提示签章操作已完成
+							  }
+						  })
+					  }
+				  })
+			  }, 2000)
+		  },
+		  showConfirm () {
+			  this.$confirm(`签章操作已完成,请进行审核操作`, '提示', {
+				  confirmButtonText: '确定',
+				  type: 'warning'
+			  })
+		  }
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 546 - 0
src/views/program/signatureDaily/SignatureDailyList.vue

@@ -0,0 +1,546 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="签章描述" prop="signatureName">
+				<el-input v-model="searchForm.signatureName" placeholder="请输入签章描述" clearable>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="签章类型" prop="signatureType">
+				<el-select v-model="searchForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('signature_daily')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item label="创建时间" prop="dates">
+				<el-date-picker
+					style=""
+					placement="bottom-start"
+					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 v-if="showHideItem" label="创建人" prop="createById">
+				<UserSelect :limit='1' :modelValue="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+			</el-form-item>
+
+			<el-form-item v-if="showHideItem" label="签章状态" prop="status">
+				<el-select v-model="searchForm.status" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('status')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="部门" prop="officeId">
+				<SelectTree
+					ref="officeTree"
+					:props="{
+                value: 'id',             // ID字段名
+                label: 'name',         // 显示名称
+                children: 'children'    // 子级字段名
+              }"
+					:url="`/system-server/sys/office/treeData?type=2`"
+					:value="searchForm.officeId"
+					:clearable="true"
+					:accordion="true"
+					size="default"
+					@getValue="(value,label) => {searchForm.officeId=label}"/>
+			</el-form-item>
+
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<div class="jp-table top" style="">
+			<vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('signature:daily:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+<!--					<el-button v-if="hasPermission('cw:reimbursement:info:del')" type="danger"  icon="el-icon-delete" @click="del()" :disabled="$refs.infoTable && $refs.infoTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 80px)">
+				<vxe-table
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="infoTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					:sort-config="{remote:true}"
+					: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']
+                  }"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+<!--					<vxe-column type="checkbox" width="60" ></vxe-column>-->
+					<vxe-column min-width="130" title="签章编号" field="number" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('signature:daily:view')" @click="view(scope.row.id)">{{scope.row.number}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column width="130" title="签章描述" field="signatureName" align="center"></vxe-column>
+					<vxe-column min-width="130" title="签章类型" field="signatureType" align="center">
+						<template #default="scope">
+							{{$dictUtils.getDictLabel('signature_daily', scope.row.signatureType, '')}}
+						</template>
+					</vxe-column>
+					<vxe-column min-width="100" title="签章人" field="createName" align="center"></vxe-column>
+					<vxe-column min-width="100" title="创建日期" field="createTime" align="center"></vxe-column>
+					<vxe-column min-width="100" title="状态" fixed="right" align="center" field="status">
+						<template #default="scope">
+							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.status, '未开始')}} </el-button>
+						</template>
+					</vxe-column>
+
+					<vxe-column title="操作" min-width="130px" fixed="right" align="center">
+						<template  #default="scope">
+							<div v-if="isAdmin">
+								<el-button v-if=" (scope.row.status === '5' )" text type="primary" @click="editForm(scope.row)">修改</el-button>
+								<el-button v-if=" (scope.row.status === '5')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+							</div>
+							<div v-else>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '1' || scope.row.status === '3' )" text type="primary"   @click="edit(scope.row)">修改</el-button>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
+								<el-button v-if="hasPermission('signature:daily:del') && scope.row.createById === $store.state.user.id && (scope.row.status === '1')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+								<!--              审核-->
+								<el-button v-if="scope.row.status==='2' && checkIsAudit(scope.row)" text type="primary"  @click="examine(scope.row)">审核</el-button>
+								<!--              被驳回后当前申请人重新调整-->
+								<el-button v-if="scope.row.createById === $store.state.user.id&&scope.row.status === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
+							</div>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+
+				<SignatureDailyDia ref="signatureDailyDia" @refreshDataList="refreshList"></SignatureDailyDia>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import SignatureDailyService from '@/api/program/signatureDaily/SignatureDailyService'
+	import UserSelect from '@/components/userSelect'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import SignatureDailyDia from "./SignatureDailyDia";
+	import taskService from '@/api/flowable/TaskService'
+	import processService from '@/api/flowable/ProcessService'
+	import pick from 'lodash.pick'
+
+	import userService from '@/api/sys/UserService'
+
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				visable: false,
+				gridData: [],
+				searchForm: {
+					signatureName:'',
+					signatureType:'',
+					createById:'',
+					officeId:'',
+					datas:[],
+					status:''
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				loading: false,
+				isAdmin: false,
+				processDefinitionId:'',
+				procDefKey:''
+			}
+		},
+		SignatureDailyService: null,
+		created () {
+			this.signatureDailyService = new SignatureDailyService()
+		},
+		components: {
+			SelectTree,
+			UserSelect,
+			SignatureDailyDia
+		},
+		mounted () {
+			this.$nextTick(() => {
+				//将表格和工具栏进行关联
+				const $table = this.$refs.infoTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			})
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.create = this.$store.state.user.id
+				console.log('createId', this.$store.state.user)
+				return this.$store.state.user
+			}
+		},
+		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 = '展示'
+				}
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+
+			viewContract (id) {
+				this.$refs.contractNameForm.init('view', id)
+			},
+			// 新增
+			add () {
+				// 读取流程表单
+				let tabTitle = `发起流程【评估-日常签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-日常签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					status: 'startAndHold'}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: 'startAndHold',
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessId: 'false',
+							isShow: false,
+							routePath: '/program/signatureDaily/SignatureDailyList'
+						}
+					})
+				})
+
+			},
+			// 修改
+			edit (row) {
+				// 暂存修改
+				let status = ''
+				if (row.status === '1') {
+					status = 'startAndHold'
+				}
+				// 撤回或者驳回修改
+				if (row.status === '3') {
+					status = 'startAndClose'
+				} else if (row.status === '4') {
+					status = 'reapplyFlag'
+				}
+				// 读取流程表单
+				let tabTitle = `发起流程【评估-日常签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-日常签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					businessId: row.id,
+					businessTable: 'signature_daily_office_work',
+					status: status
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: status,
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessTable: 'signature_daily_office_work',
+							businessId: row.id,
+							isShow: false,
+							routePath: '/program/signatureDaily/SignatureDailyList'
+						}
+					})
+				})
+			},
+			// 撤回
+			reback (row) {
+				this.$confirm(`确定撤回流程吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					processService.revokeProcIns(row.procInsId).then((data) => {
+						let param = {status: '3', id: row.id}
+						this.signatureDailyService.updateStatusById(param)
+						this.$message.success('回退成功')
+						this.refreshList()
+					})
+				})
+			},
+			// 查看
+			view (id) {
+				this.$refs.signatureDailyDia.init('view', id)
+			},
+			editForm (row) {
+				this.$refs.signatureDailyDia.init('edit', row.id)
+			},
+			// 查看报销项目
+			viewProject (id) {
+				this.$refs.projectListForm.init(id)
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.signatureDailyService.list({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.loading = false
+				})
+				this.checkIsAdmin()
+				processService.getByName('评估-日常办公签章').then((data) => {
+					if (!this.commonJS.isEmpty(data.id)) {
+						this.processDefinitionId = data.id
+						this.procDefKey = data.key
+					}
+				})
+
+
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.infoTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.signatureDailyService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+			// 流程详情
+			detail (row) {
+				taskService.getTaskDef({
+					procInsId: row.procInsId,
+					procDefId: this.processDefinitionId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '流程详情',
+							formTitle: '流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+
+			},
+			openProgramPageForm (rowIndex) {
+				// 打开单选组件
+				this.$refs.projectChooseForm.init(null, false)
+			},
+
+			// 下载文档
+			exportFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销审批列表信息')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 下载文档
+			exportInvoiceReimbursementFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportInvoiceReimbursementFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销数电发票报销列表')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 自定义服务端导出
+			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.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.reimbursementApprovalService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename)
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 驳回后调整
+			adjust (row) {
+				console.log('row', row)
+				this.signatureDailyService.findById(row.id).then((data) => {
+					console.log('data', data)
+					if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核
+			examine (row) {
+				this.signatureDailyService.findById(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核或重新调整跳转
+			todo (row) {
+				console.log('row.taskId', row.taskId)
+				let cUser = false
+				taskService.getTaskDefInfo({
+					taskId: row.taskId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+							isShow: false,
+							formReadOnly: true,
+							formTitle: `${data.taskName}`,
+							cUser: cUser,
+							title: `审批【${data.taskName || ''}】`,
+							routePath: '/program/signatureDaily/SignatureDailyList'   // 数据处理后需要跳转的页面路径
+						}
+					})
+				})
+			},
+			// 查询当前登录人是否是数据的审核人
+			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
+			}
+		}
+	}
+</script>

+ 520 - 0
src/views/program/signatureDaily/SignatureReportDia.vue

@@ -0,0 +1,520 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+	  <el-dialog
+		  :title="title"
+		  :close-on-click-modal="false"
+		  draggable
+		  width="1200px"
+		  @close="close"
+		  append-to-body
+		  @keyup.enter.native="doSubmit"
+		  v-model="visible">
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"
+             label-width="160px" @submit.native.prevent>
+		<el-divider content-position="left"><i class="el-icon-document"></i>
+			签章项目信息
+			<el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" @click="insertEvent()"  plain>
+				新增
+			</el-button>
+		</el-divider>
+		<el-row  :gutter="15">
+			<el-col :span="24">
+				<vxe-table
+					border
+					show-overflow
+					ref="baseTable"
+					:key="baseKey"
+					class="vxe-table-element"
+					:data="inputForm.projectList"
+					style="margin-left: 5em"
+					@cell-click=""
+					@edit-closed=""
+					keep-source
+					highlight-current-row
+					:edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true, icon: '-'}"
+				>
+					<vxe-table-column field="name" align="center" title="项目名称" :edit-render="{}" show-overflow="title">
+						<template v-slot:edit="scope">
+							<el-input @focus="openProgramPageForm(scope.$rowIndex)" placeholder="请填写项目名称" :readonly="true" v-model="scope.row.name"/>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reportNo" align="center" title="报告号"></vxe-table-column>
+					<vxe-table-column field="contractName" align="center" title="合同名称"></vxe-table-column>
+					<vxe-table-column field="no" align="center" title="项目编号" ></vxe-table-column>
+					  <vxe-table-column field="clientName" title="委托方" ></vxe-table-column>
+					<vxe-table-column title="操作" align="center" width="100">
+						<template v-slot="scope">
+							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex)">删除</el-button>
+						</template>
+					</vxe-table-column>
+				</vxe-table>
+			</el-col>
+		</el-row>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        签章基础信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_project_report')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+	<ProgramPageForm ref="programPageForm" @getProgram="getProgram"></ProgramPageForm>
+		  <template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+		  </template>
+	  </el-dialog>
+  </div>
+</template>
+
+<script>
+  import SignatureReportService from '@/api/program/signatureDaily/SignatureReportService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  import ProgramPageForm from "./ProgramPageForm";
+  import CommonApi from '@/api/cw/common/CommonApi'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  },
+			  keyWatch: '',
+			  programRow: '',
+			  baseKey: '',
+		  }
+	  },
+	  SignatureReportService: null,
+	  commonApi: null,
+	  created() {
+		  this.signatureReportService = new SignatureReportService()
+		  this.commonApi = new CommonApi()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+		  ProgramPageForm
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  }
+			  if (method === 'add') {
+				  this.title = `新建日常签章`
+			  } else if (method === 'edit') {
+				  this.title = '修改日常签章'
+			  } else if (method === 'view') {
+				  this.title = '查看日常签章信息'
+			  }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.inputForm.projectList = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureDaily')
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+				  	this.inputForm.status = '2'
+					  this.$refs['inputForm'].validate((valid) => {
+						  if (valid) {
+							  this.loading = true
+							  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+							  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+								  this.loading = false
+								  this.$message.error('请上传签章附件')
+								  throw new Error()
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+								  this.loading = false
+								  this.$message.error('请选择签章项目')
+								  throw new Error()
+							  }
+							  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data) => {
+								  if (this.commonJS.isNotEmpty(data)) {
+									  if (data === '办公室审批') {
+										  this.inputForm.status = '5'
+									  }
+								  }
+								  console.log('this.inputForm',this.inputForm)
+								  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+									  if (status === 'start' || status === 'reapply') {
+										  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [财务-报告签章]`
+									  }
+									  this.inputForm.id = data.businessId
+									  console.log('data22', data)
+									  callback(data.businessTable, data.businessId, this.inputForm)
+									  this.loading = false
+								  }).catch(() => {
+									  this.loading = false
+								  })
+							  })
+						  } else {
+							  this.loading = false
+						  }
+					  })
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.loading = false
+						  this.$message.error('请选择签章项目')
+						  throw new Error()
+					  }
+
+					  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+						  this.$refs.inputForm.resetFields()
+						  this.close()
+						  this.$emit('refreshDataList')
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureReportService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureReportService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+		  insertEvent() {
+			  this.$refs.baseTable.insertAt({})
+			  this.inputForm.projectList.push({})
+			  this.baseKey = Math.random()
+		  },
+		  // 删除
+		  removeEvent(row, rowIndex) {
+			  this.$refs.baseTable.remove(row)
+			  this.inputForm.projectList.splice(rowIndex, 1)
+		  },
+		  openProgramPageForm(rowIndex) {
+			  this.$refs.programPageForm.init()
+			  this.programRow = rowIndex
+		  },
+		  getProgram(rows) {
+			  rows.forEach((item, index) => {
+				  if (index === 0) {
+					  let r = this.inputForm.projectList[this.programRow]
+					  r.projectName = item.projectName
+					  r.contractName = item.contractName
+					  r.projectNumber = item.projectNumber
+					  r.id = item.id
+					  r.reportNo = item.reportNo
+					  r.clientContactsName = item.clientContactsName
+					  this.inputForm.projectList[this.programRow] = r
+				  } else {
+					  let r = {
+						  projectName: item.projectName,
+						  contractName: item.contractName,
+						  projectNumber: item.projectNumber,
+						  id: item.id,
+						  reportNo: item.reportNo,
+						  clientContactsName:item.clientContactsName,
+					  }
+					  this.$refs.baseTable.insertAt(r)
+					  this.inputForm.projectList.push(r)
+					  this.baseKey = Math.random()
+				  }
+			  })
+			  this.$forceUpdate()
+			  this.programRow = ''
+		  },
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 578 - 0
src/views/program/signatureDaily/SignatureReportFormTask.vue

@@ -0,0 +1,578 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+  <div>
+    <el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+             label-width="160px" @submit.native.prevent>
+		<el-divider content-position="left"><i class="el-icon-document"></i>
+			签章项目信息
+			<el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" @click="insertEvent()"  plain>
+				新增
+			</el-button>
+		</el-divider>
+		<el-row  :gutter="15">
+			<el-col :span="24">
+				<vxe-table
+					border
+					show-overflow
+					ref="baseTable"
+					:key="baseKey"
+					class="vxe-table-element"
+					:data="inputForm.projectList"
+					style="margin-left: 5em"
+					@cell-click=""
+					@edit-closed=""
+					keep-source
+					highlight-current-row
+					:edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true, icon: '-'}"
+				>
+					<vxe-table-column field="name" align="center" title="项目名称" :edit-render="{}" show-overflow="title">
+						<template v-slot:edit="scope">
+							<el-input @focus="openProgramPageForm(scope.$rowIndex)" placeholder="请填写项目名称" :readonly="true" v-model="scope.row.name"/>
+						</template>
+					</vxe-table-column>
+					<vxe-table-column field="reportNo" align="center" title="报告号"></vxe-table-column>
+					<vxe-table-column field="contractName" align="center" title="合同名称"></vxe-table-column>
+					<vxe-table-column field="no" align="center" title="项目编号" ></vxe-table-column>
+					  <vxe-table-column field="clientName" title="委托方" ></vxe-table-column>
+					<vxe-table-column title="操作" align="center" width="100">
+						<template v-slot="scope">
+							<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex)">删除</el-button>
+						</template>
+					</vxe-table-column>
+				</vxe-table>
+			</el-col>
+		</el-row>
+      <el-divider content-position="left"><i class="el-icon-document"></i>
+        签章基础信息
+      </el-divider>
+      <el-row  :gutter="15">
+
+        <el-col :span="12">
+          <el-form-item label="签章描述" prop="signatureName"
+                        :rules="[{required: true, message:'签章描述不能为空', trigger:'blur'}
+               ]">
+            <el-input  placeholder="请填写签章描述" v-model="inputForm.signatureName" clearable></el-input>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="签章编号" prop="number"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写签章编号" v-model="inputForm.number" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+        <el-col :span="12">
+          <el-form-item label="签章类型" prop="signatureType"
+                        :rules="[
+                        {required: true, message:'签章类型不能为空', trigger:'change'}
+               ]">
+			  <el-select v-model="inputForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+				  <el-option
+					  v-for="item in $dictUtils.getDictList('signature_project_report')"
+					  :key="item.value"
+					  :label="item.label"
+					  :value="item.value">
+				  </el-option>
+			  </el-select>
+          </el-form-item>
+        </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建人" prop="createName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建人" v-model="inputForm.createName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="所属部门" prop="officeName"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写所属部门" v-model="inputForm.officeName" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="12">
+			  <el-form-item label="创建日期" prop="createTime"
+							:rules="[
+               ]">
+				  <el-input :disabled="true" placeholder="请填写创建日期" v-model="inputForm.createTime" clearable></el-input>
+			  </el-form-item>
+		  </el-col>
+		  <el-col :span="24">
+			  <el-form-item label="备注" prop="remarks"
+							:rules="[
+               ]">
+				  <el-input maxlength="500"  type="textarea" placeholder="请填写备注" v-model="inputForm.remarks" show-word-limit></el-input>
+			  </el-form-item>
+		  </el-col>
+      </el-row>
+
+
+
+    </el-form>
+    <!--        附件-->
+    <UpLoadComponent ref="uploadComponent" @clickSign="clickSign"></UpLoadComponent>
+	<ProgramPageForm ref="programPageForm" @getProgram="getProgram"></ProgramPageForm>
+  </div>
+</template>
+
+<script>
+  import SignatureReportService from '@/api/program/signatureDaily/SignatureReportService'
+  import UpLoadComponent from '@/views/common/SignatureUpLoadComponent'
+  import ProgramPageForm from "./ProgramPageForm";
+  import CommonApi from '@/api/cw/common/CommonApi'
+  export default {
+	  props: {
+		  businessId: {
+			  type: String,
+			  default: ''
+		  },
+		  formReadOnly: {
+			  type: Boolean,
+			  default: false
+		  },
+		  status: {
+			  type: String,
+			  default: ''
+		  }
+	  },
+	  data() {
+		  return {
+			  bj1: '',
+			  title: '',
+			  method: '',
+			  visible: false,
+			  loading: false,
+			  dialogFormVisible: false,
+			  inputForm: {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  },
+			  keyWatch: '',
+			  programRow: '',
+			  baseKey: '',
+		  }
+	  },
+	  SignatureReportService: null,
+	  commonApi: null,
+	  created() {
+		  this.signatureReportService = new SignatureReportService()
+		  this.commonApi = new CommonApi()
+	  },
+	  mounted() {
+	  },
+	  components: {
+		  UpLoadComponent,
+		  ProgramPageForm
+	  },
+	  computed: {
+		  bus: {
+			  get() {
+				  this.$refs.uploadComponent.setDividerName('附件')
+				  return this.businessId
+			  },
+			  set(val) {
+				  this.businessId = val
+			  },
+		  }
+	  },
+	  watch: {
+		  'keyWatch': {
+			  handler(newVal) {
+				  if (this.commonJS.isNotEmpty(this.bus)) {
+					  this.init('', this.bus)
+				  } else {
+					  this.$nextTick(() => {
+						  this.$refs.inputForm.resetFields()
+					  })
+				  }
+			  }
+		  },
+		  'loading': {
+			  handler(newVal) {
+				  this.$emit('changeLoading', newVal)
+				  this.$refs.uploadComponent.changeLoading(newVal)
+			  }
+		  }
+	  },
+	  methods: {
+		  getKeyWatch(keyWatch) {
+			  this.keyWatch = keyWatch
+		  },
+		  init(method, id) {
+			  this.importVisible = false
+			  this.method = method
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+				  projectList:[],
+				  procInsId:''
+			  }
+			  // if (method === 'add') {
+			  //   this.title = `新建发票`
+			  // } else if (method === 'edit') {
+			  //   this.title = '修改发票'
+			  // } else if (method === 'view') {
+			  //   this.title = '查看发票信息'
+			  // }
+			  this.inputForm.id = id
+			  this.visible = true
+			  this.loading = false
+			  this.$nextTick(() => {
+				  this.$refs.inputForm.resetFields()
+				  this.loading = true
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  this.$refs.uploadComponent.clearUpload()
+					  this.inputForm = this.recover(this.inputForm, data)
+					  this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					  if (this.commonJS.isEmpty(this.inputForm.createName)) {
+						  this.inputForm.createName = this.$store.state.user.name
+						  this.inputForm.officeName = this.$store.state.user.office.name
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.createTime)) {
+						  this.inputForm.createTime = this.moment(new Date()).format("YYYY-MM-DD")
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.inputForm.files = []
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.inputForm.projectList = []
+					  }
+					  if (this.status === 'audit' || this.status === 'taskFormDetail') {
+						  method = 'view'
+					  }
+					  console.log('this.inputForm',this.inputForm)
+					  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((da) => {
+						  if (da === '办公室审批'){
+							  if (this.commonJS.isNotEmpty(this.inputForm.files) && this.status === 'audit'){
+								  this.$refs.uploadComponent.newUpload('view', this.inputForm.files, 'signatureReport', null, null, null, null, false, 'audit')
+								  this.$emit('callBackFunc', 'hide')
+								  this.jobScheduler()
+							  }else {
+								  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureReport', null, null, null, null, false, false)
+							  }
+						  }else {
+							  this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'signatureReport', null, null, null, null, false, false)
+						  }
+					  })
+					  this.loading = false
+				  })
+			  })
+		  },
+		  saveForm(callback) {
+			  this.doSubmit('save', callback)
+		  },
+		  startForm(callback) {
+			  this.loading = true
+			  if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+				  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+					  if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						  this.loading = false
+						  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						  throw new Error()
+					  } else {
+						  this.doSubmit('start', callback)
+					  }
+				  })
+			  } else {
+				  this.doSubmit('start', callback)
+			  }
+		  },
+		  async agreeForm(callback) {
+			  console.log('进入方法')
+			  this.loading = true
+			  await  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error()
+				  } else {
+				  	this.inputForm.status = '2'
+					  this.$refs['inputForm'].validate((valid) => {
+						  if (valid) {
+							  this.loading = true
+							  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+							  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+								  this.loading = false
+								  this.$message.error('请上传签章附件')
+								  throw new Error()
+							  }
+							  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+								  this.loading = false
+								  this.$message.error('请选择签章项目')
+								  throw new Error()
+							  }
+							  this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data) => {
+								  if (this.commonJS.isNotEmpty(data)) {
+									  if (data === '办公室审批') {
+										  this.inputForm.status = '5'
+									  }
+								  }
+								  console.log('this.inputForm',this.inputForm)
+								  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+									  if (status === 'start' || status === 'reapply') {
+										  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [评估-报告签章]`
+									  }
+									  this.inputForm.id = data.businessId
+									  console.log('data22', data)
+									  callback(data.businessTable, data.businessId, this.inputForm)
+									  this.loading = false
+								  }).catch(() => {
+									  this.loading = false
+								  })
+							  })
+						  } else {
+							  this.loading = false
+						  }
+					  })
+				  }
+			  })
+		  },
+		  reapplyForm(callback) {
+			  this.loading = true
+			  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+				  if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+					  this.loading = false
+					  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					  throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+				  } else {
+					  this.doSubmit('reapply', callback)
+				  }
+			  })
+		  },
+		  // 表单提交
+		  async doSubmit(status, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  }
+			  if (status === 'save') {
+				  // 暂存
+				  this.loading = true
+				  this.inputForm.status = '1'
+				  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+				  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+					  callback(data.businessTable, data.businessId, this.inputForm)
+					  this.loading = false
+				  }).catch(() => {
+					  this.loading = false
+				  })
+				  return
+			  } else if (status === 'start') {
+				  // 送审  待审核
+				  this.inputForm.status = '2'
+			  } else if (status === 'agree') {
+				  this.inputForm.status = '2'
+			  } else if (status === 'reapply') {
+				  this.inputForm.status = '2'
+			  }
+			  this.$refs['inputForm'].validate((valid) => {
+				  if (valid) {
+					  this.loading = true
+					  this.inputForm.files = this.$refs.uploadComponent.getDataList()
+					  if (this.commonJS.isEmpty(this.inputForm.files) || this.inputForm.files.length === 0) {
+						  this.loading = false
+						  this.$message.error('请上传签章附件')
+						  throw new Error()
+					  }
+					  if (this.commonJS.isEmpty(this.inputForm.projectList) || this.inputForm.projectList.length === 0) {
+						  this.loading = false
+						  this.$message.error('请选择签章项目')
+						  throw new Error()
+					  }
+
+					  this.signatureReportService.saveForm(this.inputForm).then((data) => {
+						  if (status === 'start' || status === 'reapply') {
+							  this.inputForm.title = `${this.$store.state.user.name} 发起了 ${data.number} [财务-报告签章]`
+						  }
+						  this.inputForm.id = data.businessId
+						  console.log('data22', data)
+						  callback(data.businessTable, data.businessId, this.inputForm)
+						  this.loading = false
+					  }).catch(() => {
+						  this.loading = false
+					  })
+				  } else {
+					  this.loading = false
+				  }
+			  })
+		  },
+		  close() {
+			  this.$refs.uploadComponent.clearUpload()
+			  this.$refs.inputForm.resetFields()
+			  this.inputForm = {
+				  id: '',
+				  signatureName:'',
+				  signatureType:'',
+				  number:'',
+				  createName:'',
+				  officeName:'',
+				  createTime:'',
+				  remarks: '',
+				  name: '',
+				  status: '',
+				  files: [],
+			  }
+			  this.visible = false
+		  },
+
+		  async updateStatusById(type, callback) {
+			  this.loading = true
+			  if (await this.$refs.uploadComponent.checkProgress()) {
+				  this.loading = false
+				  throw new Error()
+			  } else {
+				  if (type === 'reject' || type === 'reback') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // if (type === 'agree') {
+							  //   // 同意
+							  //   this.inputForm.status = '5'
+							  // }
+							  if (type === 'reject') {
+								  // 驳回
+								  this.inputForm.status = '4'
+							  }
+							  if (type === 'reback') {
+								  // 撤回
+								  this.inputForm.status = '3'
+							  }
+							  if (type === 'reject' || type === 'reback') {
+								  let param = {status: this.inputForm.status, id: this.inputForm.id}
+								  this.signatureReportService.updateStatusById(param).then(() => {
+									  this.loading = false
+									  callback()
+								  })
+							  }
+						  }
+					  })
+				  } else if (type === 'hold') {
+					  this.signatureReportService.findById(this.inputForm.id).then((data) => {
+						  if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
+							  this.loading = false
+							  this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							  throw new Error()
+						  } else {
+							  // 终止
+							  let param = {status: '1', id: this.inputForm.id}
+							  this.signatureReportService.updateStatusById(param).then(() => {
+								  this.loading = false
+								  callback()
+							  })
+						  }
+					  })
+				  }
+			  }
+		  },
+		  insertEvent() {
+			  this.$refs.baseTable.insertAt({})
+			  this.inputForm.projectList.push({})
+			  this.baseKey = Math.random()
+		  },
+		  // 删除
+		  removeEvent(row, rowIndex) {
+			  this.$refs.baseTable.remove(row)
+			  this.inputForm.projectList.splice(rowIndex, 1)
+		  },
+		  openProgramPageForm(rowIndex) {
+			  this.$refs.programPageForm.init()
+			  this.programRow = rowIndex
+		  },
+		  getProgram(rows) {
+			  rows.forEach((item, index) => {
+				  if (index === 0) {
+					  let r = this.inputForm.projectList[this.programRow]
+					  r.name = item.name
+					  r.contractName = item.contractName
+					  r.no = item.no
+					  r.id = item.id
+					  r.reportNo = item.reportNo
+					  r.clientName = item.clientName
+					  this.inputForm.projectList[this.programRow] = r
+				  } else {
+					  let r = {
+						  name: item.name,
+						  contractName: item.contractName,
+						  no: item.no,
+						  id: item.id,
+						  reportNo: item.reportNo,
+						  clientName:item.clientName,
+					  }
+					  this.$refs.baseTable.insertAt(r)
+					  this.inputForm.projectList.push(r)
+					  this.baseKey = Math.random()
+				  }
+			  })
+			  this.$forceUpdate()
+			  this.programRow = ''
+		  },
+		  clickSign () {
+			  console.log('2312321')
+			  this.signatureReportService.saveFlowableParam(this.inputForm).then((data) => {
+				  window.open(data, '_blank')
+			  })
+		  },
+
+		  jobScheduler () {
+			  this.interVal = setInterval(() => {
+				  console.log('正在访问签章状态...')
+				  console.log(this.inputForm)
+				  this.signatureReportService.getAuditNodeById(this.inputForm.id).then((data) => {
+					  console.log('进来了', data)
+					  if (data.success === true) {
+						  this.signatureReportService.getSignatureTypeById(this.inputForm.id).then((sign) => {
+							  console.log('sign',sign)
+							  if (sign.signatureType === 1) {
+								  console.log('sign.signatureType', sign.signatureType)
+								  console.log('签章已完成,展示‘同意’按钮')
+								  this.$emit('callBackFunc', 'show')
+								  this.$refs.uploadComponent.hideSign() // 隐藏签章按钮
+								  clearInterval(this.interVal)
+								  this.showConfirm() // 提示签章操作已完成
+							  }
+						  })
+					  }
+				  })
+			  }, 2000)
+		  },
+		  showConfirm () {
+			  this.$confirm(`签章操作已完成,请进行审核操作`, '提示', {
+				  confirmButtonText: '确定',
+				  type: 'warning'
+			  })
+		  }
+
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-input-number .el-input__inner {
+    text-align: left;
+  }
+  /deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+	  font-weight:700;
+  }
+</style>

+ 540 - 0
src/views/program/signatureDaily/SignatureReportList.vue

@@ -0,0 +1,540 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="签章描述" prop="signatureName">
+				<el-input v-model="searchForm.signatureName" placeholder="请输入签章描述" clearable>
+				</el-input>
+			</el-form-item>
+			<el-form-item label="签章类型" prop="signatureType">
+				<el-select v-model="searchForm.signatureType" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('signature_project_report')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item label="创建时间" prop="dates">
+				<el-date-picker
+					style=""
+					placement="bottom-start"
+					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 v-if="showHideItem" label="创建人" prop="createById">
+				<UserSelect :limit='1' :modelValue="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+			</el-form-item>
+
+			<el-form-item v-if="showHideItem" label="签章状态" prop="status">
+				<el-select v-model="searchForm.status" placeholder="请选择" style="width:100%;" clearable>
+					<el-option
+						v-for="item in $dictUtils.getDictList('status')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="部门" prop="officeId">
+				<SelectTree
+					ref="officeTree"
+					:props="{
+                value: 'id',             // ID字段名
+                label: 'name',         // 显示名称
+                children: 'children'    // 子级字段名
+              }"
+					:url="`/system-server/sys/office/treeData?type=2`"
+					:value="searchForm.officeId"
+					:clearable="true"
+					:accordion="true"
+					size="default"
+					@getValue="(value,label) => {searchForm.officeId=label}"/>
+			</el-form-item>
+
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<div class="jp-table top" style="">
+			<vxe-toolbar :refresh="{query: refreshList}" ref="toolbarRef" export custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('signature:daily:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+<!--					<el-button v-if="hasPermission('cw:reimbursement:info:del')" type="danger"  icon="el-icon-delete" @click="del()" :disabled="$refs.infoTable && $refs.infoTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 80px)">
+				<vxe-table
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="infoTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					:sort-config="{remote:true}"
+					: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']
+                  }"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+<!--					<vxe-column type="checkbox" width="60" ></vxe-column>-->
+					<vxe-column min-width="130" title="签章编号" field="number" align="center">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" v-if="hasPermission('signature:report:view')" @click="view(scope.row.id)">{{scope.row.number}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column width="130" title="签章描述" field="signatureName" align="center"></vxe-column>
+					<vxe-column width="130" title="签章项目" field="projectName" align="center"></vxe-column>
+					<vxe-column min-width="130" title="签章类型" field="signatureType" align="center">
+						<template #default="scope">
+							{{$dictUtils.getDictLabel('signature_project_report', scope.row.signatureType, '')}}
+						</template>
+					</vxe-column>
+					<vxe-column min-width="100" title="签章人" field="createName" align="center"></vxe-column>
+					<vxe-column min-width="100" title="创建日期" field="createTime" align="center"></vxe-column>
+					<vxe-column min-width="100" title="状态" fixed="right" align="center" field="status">
+						<template #default="scope">
+							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("status", scope.row.status, '未开始')}} </el-button>
+						</template>
+					</vxe-column>
+
+					<vxe-column title="操作" min-width="130px" fixed="right" align="center">
+						<template  #default="scope">
+							<div v-if="isAdmin">
+								<el-button v-if=" (scope.row.status === '5' )" text type="primary" @click="editForm(scope.row)">修改</el-button>
+								<el-button v-if=" (scope.row.status === '5')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+							</div>
+							<div v-else>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '1' || scope.row.status === '3' )" text type="primary"   @click="edit(scope.row)">修改</el-button>
+								<el-button v-if="hasPermission('signature:daily:edit') && scope.row.createById === $store.state.user.id && (scope.row.status === '2')" text type="primary"  @click="reback(scope.row)">撤回</el-button>
+								<el-button v-if="hasPermission('signature:daily:del') && scope.row.createById === $store.state.user.id && (scope.row.status === '1')" text type="primary"  @click="del(scope.row.id)">删除</el-button>
+								<!--              审核-->
+								<el-button v-if="scope.row.status==='2' && checkIsAudit(scope.row)" text type="primary"  @click="examine(scope.row)">审核</el-button>
+								<!--              被驳回后当前申请人重新调整-->
+								<el-button v-if="scope.row.createById === $store.state.user.id&&scope.row.status === '4'" text type="primary"  @click="adjust(scope.row)">驳回调整</el-button>
+							</div>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+
+				<SignatureReportDia ref="signatureReportDia" @refreshDataList="refreshList"></SignatureReportDia>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import SignatureReportService from '@/api/program/signatureDaily/SignatureReportService'
+	import UserSelect from '@/components/userSelect'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import SignatureReportDia from "./SignatureReportDia";
+	import taskService from '@/api/flowable/TaskService'
+	import processService from '@/api/flowable/ProcessService'
+	import pick from 'lodash.pick'
+
+	import userService from '@/api/sys/UserService'
+
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				visable: false,
+				gridData: [],
+				searchForm: {
+					signatureName:'',
+					signatureType:'',
+					createById:'',
+					officeId:'',
+					datas:[],
+					status:''
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				loading: false,
+				isAdmin: false,
+				processDefinitionId:'',
+				procDefKey:''
+			}
+		},
+		SignatureReportService: null,
+		created () {
+			this.signatureReportService = new SignatureReportService()
+		},
+		components: {
+			SelectTree,
+			UserSelect,
+			SignatureReportDia
+		},
+		mounted () {
+			this.$nextTick(() => {
+				//将表格和工具栏进行关联
+				const $table = this.$refs.infoTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			})
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.create = this.$store.state.user.id
+				console.log('createId', this.$store.state.user)
+				return this.$store.state.user
+			}
+		},
+		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 = '展示'
+				}
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+
+			// 新增
+			add () {
+				// 读取流程表单
+				let tabTitle = `发起流程【评估-报告签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-报告签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					status: 'startAndHold'}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: 'startAndHold',
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessId: 'false',
+							isShow: false,
+							routePath: '/program/signatureDaily/SignatureReportList'
+						}
+					})
+				})
+
+			},
+			// 修改
+			edit (row) {
+				// 暂存修改
+				let status = ''
+				if (row.status === '1') {
+					status = 'startAndHold'
+				}
+				// 撤回或者驳回修改
+				if (row.status === '3') {
+					status = 'startAndClose'
+				} else if (row.status === '4') {
+					status = 'reapplyFlag'
+				}
+				// 读取流程表单
+				let tabTitle = `发起流程【评估-报告签章】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [评估-报告签章]`
+				taskService.getTaskDef({ procDefId: this.processDefinitionId,
+					businessId: row.id,
+					businessTable: 'signature_project_report_relation',
+					status: status
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							procDefId: this.processDefinitionId,
+							procDefKey: this.procDefKey,
+							status: status,
+							title: tabTitle,
+							formType: data.formType,
+							formUrl: data.formUrl,
+							formTitle: processTitle,
+							businessTable: 'signature_project_report_relation',
+							businessId: row.id,
+							isShow: false,
+							routePath: '/program/signatureDaily/SignatureReportList'
+						}
+					})
+				})
+			},
+			// 撤回
+			reback (row) {
+				this.$confirm(`确定撤回流程吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					processService.revokeProcIns(row.procInsId).then((data) => {
+						let param = {status: '3', id: row.id}
+						this.signatureReportService.updateStatusById(param)
+						this.$message.success('回退成功')
+						this.refreshList()
+					})
+				})
+			},
+			// 查看
+			view (id) {
+				this.$refs.signatureReportDia.init('view', id)
+			},
+			editForm (row) {
+				this.$refs.signatureReportDia.init('edit', row.id)
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.signatureReportService.list({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.loading = false
+				})
+				this.checkIsAdmin()
+				processService.getByName('评估-报告签章').then((data) => {
+					if (!this.commonJS.isEmpty(data.id)) {
+						this.processDefinitionId = data.id
+						this.procDefKey = data.key
+					}
+				})
+
+
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.infoTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.signatureReportService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+			// 流程详情
+			detail (row) {
+				taskService.getTaskDef({
+					procInsId: row.procInsId,
+					procDefId: this.processDefinitionId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: '流程详情',
+							formTitle: '流程详情',
+							businessId: row.id,
+							status: 'reback'
+						}
+					})
+				})
+
+			},
+			openProgramPageForm (rowIndex) {
+				// 打开单选组件
+				this.$refs.projectChooseForm.init(null, false)
+			},
+
+			// 下载文档
+			exportFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销审批列表信息')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 下载文档
+			exportInvoiceReimbursementFile () {
+				this.loading = true
+				this.reimbursementApprovalService.exportInvoiceReimbursementFile({
+					'itemType': '1',
+					...this.searchForm
+				}).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, '会计-报销数电发票报销列表')
+					this.loading = false
+				}).catch(function (err) {
+					this.loading = false
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 自定义服务端导出
+			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.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.signatureReportService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename)
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+			// 驳回后调整
+			adjust (row) {
+				console.log('row', row)
+				this.signatureReportService.findById(row.id).then((data) => {
+					console.log('data', data)
+					if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核
+			examine (row) {
+				this.signatureReportService.findById(row.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						this.todo(row)
+					}
+				})
+			},
+			// 审核或重新调整跳转
+			todo (row) {
+				console.log('row.taskId', row.taskId)
+				let cUser = false
+				taskService.getTaskDefInfo({
+					taskId: row.taskId
+				}).then((data) => {
+					this.$router.push({
+						path: '/flowable/task/TaskForm',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId'),
+							isShow: false,
+							formReadOnly: true,
+							formTitle: `${data.taskName}`,
+							cUser: cUser,
+							title: `审批【${data.taskName || ''}】`,
+							routePath: '/program/signatureDaily/SignatureReportList'   // 数据处理后需要跳转的页面路径
+						}
+					})
+				})
+			},
+			// 查询当前登录人是否是数据的审核人
+			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
+			}
+		}
+	}
+</script>