Browse Source

项目三级校审

sangwenwei 1 year ago
parent
commit
b3d373da02

+ 49 - 0
src/api/jy/ProjectInfoService.js

@@ -68,5 +68,54 @@ export default class ProjectInfoService {
 		})
 	}
 
+	findByIdAudit(id){
+		return request({
+			url: prefix + '/jyProject/findByIdAudit',
+			method: 'get',
+			params: {id:id}
+		})
+	}
+
+	saveFormThree (inputForm) {
+		return request({
+			url: prefix + `/jyProject/saveFormThree`,
+			method: 'post',
+			data: inputForm
+		})
+	}
+
+	updateStatusByAuditId (data) {
+		return request({
+			url: prefix + '/jyProject/updateStatusByAuditId',
+			method: 'post',
+			data: data
+		})
+	}
+
+	/* 一级校审文档下载 */
+	downloadFirstAuditTpl (id, projectId) {
+		return request({
+			url: prefix + '/jyProject/downloadFirstAuditTpl',
+			method: 'get',
+			params: {id: id, projectId: projectId},
+		})
+	}
+	/* 二级校审文档下载 */
+	downloadSecondAuditTpl (id, projectId) {
+		return request({
+			url: prefix + '/jyProject/downloadSecondAuditTpl',
+			method: 'get',
+			params: {id: id, projectId: projectId},
+		})
+	}
+	/* 三级校审文档下载 */
+	downloadThirdlyAuditTpl (id, projectId) {
+		return request({
+			url: prefix + '/jyProject/downloadThirdlyAuditTpl',
+			method: 'get',
+			params: {id: id, projectId: projectId},
+		})
+	}
+
 
 }

+ 576 - 0
src/views/jy/project/ProjectAuditForm.vue

@@ -0,0 +1,576 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<div v-if="(inputForm.status === '5' ||inputForm.status === '7')&&(tabName === '一级校审'||tabName === '二级校审'||tabName === '三级校审')">
+			<el-row type="flex" justify="end">
+				<el-button @click="downloadFirstAuditTpl">下载</el-button>
+			</el-row>
+		</div>
+		<el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
+				 label-width="170px" @submit.native.prevent>
+
+			<el-row  :gutter="15">
+				<el-row  :gutter="15">
+					<el-col :span="24" >
+						<el-divider content-position="left"><i class="el-icon-document"></i>
+							合同信息
+						</el-divider>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="合同名称" prop="contractName"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.contractName" placeholder="请填写合同名称"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="合同金额(元)" prop="contractAmount"
+									  :rules="[
+                 ]">
+							  <el-input :disabled="true" v-model="inputForm.contractAmount" placeholder="请填写合同金额(元)"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="委托方" prop="primaryLinkman"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.primaryLinkman" placeholder="请填写委托方"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="合同类型(大类)" prop="contractTypeFirst"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.contractTypeFirst" placeholder="请填写合同类型(大类)"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="合同类型(小类)" prop="contractType"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.contractType" placeholder="请填写合同类型(小类)"></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-row>
+			<el-row  :gutter="15">
+				<el-row  :gutter="15">
+					<el-col :span="24" >
+						<el-divider content-position="left"><i class="el-icon-document"></i>
+							项目基本信息
+						</el-divider>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="项目名称" prop="projectName"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.projectName" placeholder="请填写项目名称"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="项目所在地" prop="projectPlace"
+									  :rules="[
+                 ]">
+							  <el-input :disabled="true" v-model="inputForm.projectPlace" placeholder="请填写项目所在地"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="建设地点" prop="buildPlace"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.buildPlace" placeholder="请填写建设地点"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="项目负责人" prop="projectLeader"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.projectLeader" placeholder="请填写项目负责人"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建人" prop="createByName"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.createByName" placeholder="请填写创建人"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建时间" prop="createTime"
+									  :rules="[
+                 ]">
+							<el-input :disabled="true" v-model="inputForm.createTime" placeholder="请填写创建时间"></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+
+			</el-row>
+			<el-row  :gutter="15">
+				<el-row  :gutter="15">
+					<el-col :span="24" >
+						<el-divider content-position="left"><i class="el-icon-document"></i>
+							审核人及审核和修改意见
+						</el-divider>
+					</el-col>
+					<el-col :span="12" >
+						<el-form-item label="审核人" prop="auditPeople"
+									  :rules="[
+                 ]">
+							<UserSelectSignatory style="width: 100%" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'|| method ==='view'"
+												 :readonly="true" :limit='1' :modelValue="inputForm.auditPeople"
+												 @update:modelValue='(value) => {inputForm.auditPeople = value}'></UserSelectSignatory>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24" >
+						<el-form-item label="审核意见" prop="initialAuditOpinion"
+									  :rules="[
+                 ]">
+							<el-input type="textarea" id="auditData"  :rows="4" :disabled="true" show-word-limit maxlength="500" v-model="inputForm.initialAuditOpinion" placeholder="请填写审核意见"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24" >
+						<el-form-item label="修改意见" prop="initialEditOpinion"
+									  :rules="[
+                 ]">
+							  <el-input type="textarea" id="editData"  :rows="4" :disabled="true" show-word-limit maxlength="500" v-model="inputForm.initialEditOpinion" placeholder="请填写修改意见"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24" v-show="inputForm.status === '2' && status ==='audit'?true:false">
+						<el-form-item label="审核意见" prop="auditOpinion"
+									  :rules="[
+                 ]">
+							<el-input :rows="4"  show-word-limit maxlength="500" type="textarea" v-model="inputForm.auditOpinion" placeholder="请填写审核意见"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24" v-show="inputForm.status === '4' && status !=='audit'?true:false">
+						<el-form-item label="修改意见" prop="editOpinion"
+									  :rules="[
+                 ]">
+							<el-input :rows="4"  show-word-limit maxlength="500" type="textarea" v-model="inputForm.editOpinion" placeholder="请填写修改意见"></el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-row>
+
+		</el-form>
+		<!--        附件-->
+		<UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+
+
+	</div>
+</template>
+
+<script>
+	import ProjectInfoService from "@/api/jy/ProjectInfoService";
+	import UserSelectSignatory from '../workClientInfo/clientUserSelect'
+	import UpLoadComponent from '@/views/common/UpLoadComponent'
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				title: '',
+				method: '',
+				visible: false,
+				loading: false,
+				inputForm: {
+					auditId1: '',
+					auditId2: '',
+					auditId3: '',
+					id: '',
+					contractName:'',
+					contractAmount:'',
+					primaryLinkman:'',
+					contractTypeFirst:'',
+					contractType:'',
+					projectName:'',
+					projectPlace:'',
+					buildPlace:'',
+					projectLeader:'',
+					createByName:'',
+					createTime:'',
+					initialAuditOpinion:'',
+					initialEditOpinion:'',
+					auditOpinion:'',
+					editOpinion:'',
+					workAttachmentDtoList:[],
+					auditPeople:'',
+					status:'',
+					projectId:''
+				},
+				keyWatch: '',
+				tabName:''
+
+			}
+		},
+		ProjectInfoService:null,
+		created () {
+			this.projectInfoService=new ProjectInfoService()
+		},
+		computed: {
+			bus: {
+				get () {
+					this.$refs.uploadComponent.setDividerName('附件')
+					return this.businessId
+
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					console.log('dsad')
+					if (this.bus) {
+						console.log('dsad',this.bus)
+						if (this.bus !== 'false') {
+							this.init('', this.bus)
+						}
+					} else {
+						this.$nextTick(() => {
+							this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+					this.$refs.uploadComponent.changeLoading(newVal)
+				}
+			}
+		},
+		components: {
+			UserSelectSignatory,
+			UpLoadComponent,
+		},
+		methods: {
+			getKeyWatch (keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init (method, id,tabName) {
+				this.tabName = tabName
+				this.method = method
+				console.log('method', method)
+				this.inputForm = {
+					auditId1: '',
+					auditId2: '',
+					auditId3: '',
+					id: '',
+					contractName:'',
+					contractAmount:'',
+					primaryLinkman:'',
+					contractTypeFirst:'',
+					contractType:'',
+					projectName:'',
+					projectPlace:'',
+					buildPlace:'',
+					projectLeader:'',
+					createByName:'',
+					createTime:'',
+					initialAuditOpinion:'',
+					initialEditOpinion:'',
+					auditOpinion:'',
+					editOpinion:'',
+					workAttachmentDtoList:[],
+					auditPeople:'',
+					status:'',
+					projectId:''
+				}
+				this.inputForm.id = id
+				this.visible = true
+				if (method === 'add') {
+					// this.inputForm.id = 'add'
+					this.title = `新建项目`
+				} else if (method === 'edit') {
+					this.title = '修改项目'
+				} else if (method === 'view') {
+					this.title = '查看项目详情'
+				}
+				this.loading = false
+				this.$nextTick(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = true
+					this.$refs.uploadComponent.clearUpload()
+					// this.$refs.archiveFile.clearUpload()
+					console.log('id',this.inputForm.id)
+						this.projectInfoService.findByIdAudit(this.inputForm.id).then((data) => {
+							this.inputForm = this.recover(this.inputForm, data)
+							this.inputForm.contractName=data.jyProjectList.contractName
+							this.inputForm.contractAmount=data.jyProjectList.contractAmount
+							this.inputForm.primaryLinkman=data.jyProjectList.primaryLinkman
+							this.inputForm.contractTypeFirst=data.jyProjectList.contractTypeFirst
+							this.inputForm.contractType=data.jyProjectList.contractType
+							this.inputForm.projectName=data.jyProjectList.name
+							this.inputForm.projectPlace=data.jyProjectList.place
+							this.inputForm.buildPlace=data.jyProjectList.buildPlace
+							this.inputForm.createByName=data.jyProjectList.createById
+							this.inputForm.createTime=data.jyProjectList.createTime
+							this.inputForm.projectLeader=data.jyProjectList.leader
+							this.inputForm.projectId=data.projectId
+
+							if (this.commonJS.isNotEmpty(data.initialAuditOpinion)){
+								this.inputForm.initialAuditOpinion=data.initialAuditOpinion.replace(/<br\/>/g, "\n")
+							}
+							if (this.commonJS.isNotEmpty(data.initialEditOpinion)){
+								this.inputForm.initialEditOpinion=data.initialEditOpinion.replace(/<br\/>/g, "\n")
+							}
+							console.log('data', data)
+							if (this.status === 'audit' || this.status === 'taskFormDetail') {
+								method = 'view'
+							}
+							console.log('method2',method)
+							this.$refs.uploadComponent.newUpload(method, this.inputForm.workAttachmentDtoList, 'jyProjectAudit', null, null, null, null, false)
+							// this.$refs.archiveFile.newUpload('view', [], 'cwWorkContract', null, null, null, null, false)
+							this.loading = false
+						})
+				})
+			},
+			close () {
+				this.$refs.uploadComponent.clearUpload()
+				this.inputForm = {
+					id1: '',
+					id2: '',
+					id3: '',
+					id: '',
+					contractName:'',
+					contractAmount:'',
+					primarkLinkman:'',
+					contractTypeFirst:'',
+					contractType:'',
+					projectName:'',
+					projectPlace:'',
+					buildPlace:'',
+					projectLeader:'',
+					createByName:'',
+					createTime:'',
+					initialAuditOpinion:'',
+					initialEditOpinion:'',
+					auditOpinion:'',
+					editOpinion:'',
+					workAttachmentDtoList:[],
+					status:'',
+				}
+				this.$refs.inputForm.resetFields()
+				this.visible = false
+			},
+			reapplyForm (callback) {
+				this.loading = true
+				this.projectInfoService.findByIdAudit(this.inputForm.id).then((data) => {
+					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+					} else {
+						this.startFormTrue(callback)
+					}
+				})
+			},
+			saveForm (callback) {
+				this.doSubmit('save', callback)
+			},
+			startForm (callback) {
+				this.loading = true
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.projectInfoService.findByIdAudit(this.inputForm.id).then((data) => {
+						if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3' && data.status !== '6') { // 审核状态不是“未发起”或“暂存”或“撤回”或"超期未发起",就弹出提示
+							this.loading = false
+							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+							throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						} else {
+							this.startFormTrue(callback)
+						}
+					})
+				} else {
+					this.startFormTrue(callback)
+				}
+			},
+			startFormTrue (callback) {
+				this.doSubmit('start', callback)
+			},
+			async agreeForm (callback) {
+				this.loading = true
+				await this.projectInfoService.findByIdAudit(this.inputForm.id).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.loading = false
+						this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
+						throw new Error()
+					} else {
+						this.doSubmit('agree', 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.workAttachmentDtoList = this.$refs.uploadComponent.getDataList()
+					this.projectInfoService.saveFormThree(this.inputForm).then((data) => {
+						this.inputForm.assignee = this.inputForm.auditPeople
+						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'
+					this.inputForm.auditDate = this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+				}
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						this.inputForm.workAttachmentDtoList = this.$refs.uploadComponent.getDataList()
+						this.projectInfoService.saveFormThree(this.inputForm).then((data) => {
+							this.inputForm.assignee = this.inputForm.auditPeople
+							this.inputForm.id = data.businessId
+							callback(data.businessTable, data.businessId, this.inputForm)
+							this.loading = false
+						}).catch(() => {
+							this.loading = false
+						})
+					} else {
+						this.loading = 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.projectInfoService.findByIdAudit(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'
+									this.loading = true
+									this.inputForm.workAttachmentDtoList = this.$refs.uploadComponent.getDataList()
+									this.projectInfoService.saveFormThree(this.inputForm).then((data) => {
+										this.loading = false
+									}).catch(() => {
+										this.loading = false
+									})
+									// return
+								}
+								if (type === 'reback') {
+									// 撤回
+									this.inputForm.status = '3'
+								}
+								if (type === 'reject' || type === 'reback') {
+									let param = {status: this.inputForm.status, id: this.inputForm.id}
+									this.loading = true
+									this.projectInfoService.updateStatusByAuditId(param).then(() => {
+										this.loading = false
+										callback()
+									})
+								}
+							}
+						})
+					} else if (type === 'hold') {
+						this.projectInfoService.findByIdAudit(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.projectInfoService.updateStatusByAuditId(param).then(() => {
+									this.loading = false
+									callback()
+								})
+							}
+						})
+					}
+				}
+			},
+			// 下载一级校审
+			downloadFirstAuditTpl () {
+				// this.$utils.downloadExcel('/sys/project/import/template')
+				this.loading = true
+				if (this.tabName === '一级校审') {
+					this.projectInfoService.downloadFirstAuditTpl(this.inputForm.id, this.inputForm.projectId).then((res) => {
+						// 将二进制流文件写入excel表,以下为重要步骤
+						this.$utils.downloadWord(res, this.tabName)
+						this.loading = false
+					}).catch(function (err) {
+						this.loading = false
+						if (err.response) {
+							console.log(err.response)
+						}
+					})
+				}
+				if (this.tabName === '二级校审') {
+					this.projectInfoService.downloadSecondAuditTpl(this.inputForm.id, this.inputForm.projectId).then((res) => {
+						// 将二进制流文件写入excel表,以下为重要步骤
+						this.$utils.downloadWord(res, this.tabName)
+						this.loading = false
+					}).catch(function (err) {
+						this.loading = false
+						if (err.response) {
+							console.log(err.response)
+						}
+					})
+				}
+				if (this.tabName === '三级校审') {
+					this.projectInfoService.downloadThirdlyAuditTpl(this.inputForm.id, this.inputForm.projectId).then((res) => {
+						// 将二进制流文件写入excel表,以下为重要步骤
+						this.$utils.downloadWord(res, this.tabName)
+						this.loading = false
+					}).catch(function (err) {
+						this.loading = false
+						if (err.response) {
+							console.log(err.response)
+						}
+					})
+				}
+			},
+
+		}
+	}
+</script>
+<style lang="scss">
+	.el-input-number .el-input__inner {
+		text-align: left;
+	}
+	.el-divider__text {
+		font-size: 16px;
+		font-weight: bold;
+	}
+
+</style>

+ 317 - 253
src/views/jy/project/ProjectDia.vue

@@ -8,292 +8,311 @@
 		  @close="close"
 		  @keyup.enter.native=""
 		  v-model="visible">
-		  <el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method === 'view'"
-				   label-width="170px" @submit.native.prevent>
-        <el-row  :gutter="15">
-			<el-col :span="24">
-				<el-form-item label="合同情况:" prop="contractStatus"
-							  :rules="[
+		  <el-tabs v-model="activeName" type="border-card" @tab-click="tabHandleClick">
+			  <el-tab-pane label="项目登记详情" name="programDetail">
+				  <el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method === 'view'"
+						   label-width="170px" @submit.native.prevent>
+					  <el-row  :gutter="15">
+						  <el-col :span="24">
+							  <el-form-item label="合同情况:" prop="contractStatus"
+											:rules="[
 							   {required: true, message:'请选择合同情况', trigger:'blur'}
                  ]">
-				<el-radio-group v-model="inputForm.contractStatus" class="ml-4">
-					<el-radio label="1" size="large">有合同</el-radio> <el-radio label="0" size="large">无合同</el-radio>
-				</el-radio-group>
-				</el-form-item>
-			</el-col>
-			<el-row  :gutter="15" v-show="inputForm.contractStatus === '1'">
-				<el-col :span="24" >
-					<el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
-					<el-form-item label="选择合同" prop="contractName"
-								  :rules="[
+								  <el-radio-group v-model="inputForm.contractStatus" class="ml-4">
+									  <el-radio label="1" size="large">有合同</el-radio> <el-radio label="0" size="large">无合同</el-radio>
+								  </el-radio-group>
+							  </el-form-item>
+						  </el-col>
+						  <el-row  :gutter="15" v-show="inputForm.contractStatus === '1'">
+							  <el-col :span="24" >
+								  <el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
+								  <el-form-item label="选择合同" prop="contractName"
+												:rules="[
                           {required: true, message:'合同不能为空', trigger:'blur'},
                           {required: true, message:'合同不能为空', trigger:'change'}
                  ]">
-						<el-input size="large" :readonly="true" @focus="openContractForm()" v-model="inputForm.contractName" placeholder="请选择合同">
-							<el-button slot="append" icon="el-icon-search" @click="openContractForm()"></el-button>
-						</el-input>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="合同名称" prop="contractName"
-								  :rules="[
+									  <el-input size="large" :readonly="true" @focus="openContractForm()" v-model="inputForm.contractName" placeholder="请选择合同">
+										  <el-button slot="append" icon="el-icon-search" @click="openContractForm()"></el-button>
+									  </el-input>
+								  </el-form-item>
+							  </el-col>
+							  <el-col :span="12">
+								  <el-form-item label="合同名称" prop="contractName"
+												:rules="[
                  ]">
-						<el-input :disabled="true" v-model="inputForm.contractName" placeholder="请填写合同名称"></el-input>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="合同金额(元)" prop="amount"
-								  :rules="[
+									  <el-input :disabled="true" v-model="inputForm.contractName" placeholder="请填写合同名称"></el-input>
+								  </el-form-item>
+							  </el-col>
+							  <el-col :span="12">
+								  <el-form-item label="合同金额(元)" prop="amount"
+												:rules="[
                  ]">
-						<!--              <el-input v-model="inputForm.amount" placeholder="请填写合同金额"></el-input>-->
-						<el-input-number
-							:disabled="true"
-							v-model="inputForm.amount"
-							controls-position="right"
-							:controls="false"
-							style="width:100%;"
-							:precision="2"
-							placeholder="请填写合同金额"
-							:step="0.01"
-							:min="0"
-							clearable>
-						</el-input-number>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="委托方" prop="clientName"
-								  :rules="[
+									  <!--              <el-input v-model="inputForm.amount" placeholder="请填写合同金额"></el-input>-->
+									  <el-input-number
+										  :disabled="true"
+										  v-model="inputForm.amount"
+										  controls-position="right"
+										  :controls="false"
+										  style="width:100%;"
+										  :precision="2"
+										  placeholder="请填写合同金额"
+										  :step="0.01"
+										  :min="0"
+										  clearable>
+									  </el-input-number>
+								  </el-form-item>
+							  </el-col>
+							  <el-col :span="12">
+								  <el-form-item label="委托方" prop="clientName"
+												:rules="[
                  ]">
-						<el-input :disabled="true" v-model="inputForm.clientName" placeholder="请填写委托方"></el-input>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="合同类型(大类)" prop="contractTypeFirst"
-								  :rules="[
+									  <el-input :disabled="true" v-model="inputForm.clientName" placeholder="请填写委托方"></el-input>
+								  </el-form-item>
+							  </el-col>
+							  <el-col :span="12">
+								  <el-form-item label="合同类型(大类)" prop="contractTypeFirst"
+												:rules="[
                  ]">
-						<el-input :disabled="true" v-model="inputForm.contractTypeFirst" placeholder="请填写合同类型(大类)"></el-input>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="合同类型(小类)" prop="contractType"
-								  :rules="[
+									  <el-input :disabled="true" v-model="inputForm.contractTypeFirst" placeholder="请填写合同类型(大类)"></el-input>
+								  </el-form-item>
+							  </el-col>
+							  <el-col :span="12">
+								  <el-form-item label="合同类型(小类)" prop="contractType"
+												:rules="[
                  ]">
-						<el-input :disabled="true" v-model="inputForm.contractType" placeholder="请填写合同类型(小类)"></el-input>
-					</el-form-item>
-				</el-col>
-			</el-row>
+									  <el-input :disabled="true" v-model="inputForm.contractType" placeholder="请填写合同类型(小类)"></el-input>
+								  </el-form-item>
+							  </el-col>
+						  </el-row>
 
-        </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="name"
-                          :rules="[
+					  </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="name"
+											:rules="[
                           {required: true, message:'项目名称不能为空', trigger:'blur'}
                  ]">
-              <el-input maxlength="64" v-model="inputForm.name" placeholder="请输入项目名称" clearable></el-input>
-            </el-form-item>
-          </el-col>
-			<el-col :span="12">
-				<el-form-item label="项目所在地" prop="projectPlace"
-							  :rules="[
+								  <el-input maxlength="64" v-model="inputForm.name" placeholder="请输入项目名称" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="项目所在地" prop="projectPlace"
+											:rules="[
                           {required: true, message:'项目所在地不能为空', trigger:'change'}
                  ]">
-					<SelectTree
-						ref="areaTree"
-						:props="{
+								  <SelectTree
+									  ref="areaTree"
+									  :props="{
                       value: 'id',             // ID字段名
                       label: 'name',         // 显示名称
                       children: 'children'    // 子级字段名
                     }"
-						url="/system-server/sys/area/treeData"
-						:value="inputForm.projectPlace"
-						:clearable="true"
-						size="large"
-						:accordion="true"
-						@getValue="(value) => {inputForm.projectPlace=value}"
-						/>
-				</el-form-item>
-			</el-col>
-          <el-col :span="12">
-            <el-form-item label="所在省份" prop="provience"
-                          :rules="[
+									  url="/system-server/sys/area/treeData"
+									  :value="inputForm.projectPlace"
+									  :clearable="true"
+									  size="large"
+									  :accordion="true"
+									  @getValue="(value) => {inputForm.projectPlace=value}"
+								  />
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="所在省份" prop="provience"
+											:rules="[
                  ]">
-              <el-input :disabled="true" v-model="provience" placeholder="请输入所在省份" clearable></el-input>
-            </el-form-item>
-          </el-col>
-			<el-col :span="12">
-				<el-form-item label="所在地级市" prop="city"
-							  :rules="[
+								  <el-input :disabled="true" v-model="provience" placeholder="请输入所在省份" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="所在地级市" prop="city"
+											:rules="[
                  ]">
-					<el-input :disabled="true" v-model="city" placeholder="请输入所在地级市" clearable></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :span="12">
-				<el-form-item label="所在区县" prop="con"
-							  :rules="[
+								  <el-input :disabled="true" v-model="city" placeholder="请输入所在地级市" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="所在区县" prop="con"
+											:rules="[
                  ]">
-					<el-input :disabled="true" v-model="con" placeholder="请输入所在区县" clearable></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :span="12">
-				<el-form-item label="建设地点" prop="buildPlace"
-							  :rules="[
+								  <el-input :disabled="true" v-model="con" placeholder="请输入所在区县" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="建设地点" prop="buildPlace"
+											:rules="[
                  ]">
-					<el-input  v-model="inputForm.buildPlace" placeholder="请输入建设地点" clearable></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :span="12">
-				<el-form-item label="项目负责人" prop="projectLeader"
-							  :rules="[
+								  <el-input  v-model="inputForm.buildPlace" placeholder="请输入建设地点" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="项目负责人" prop="projectLeader"
+											:rules="[
                           {required: true, message:'项目负责人不能为空', trigger:'change'}
                  ]">
-					<SelectUserTree
-						ref="companyTree"
-						size="large"
-						:props="{
+								  <SelectUserTree
+									  ref="companyTree"
+									  size="large"
+									  :props="{
                   value: 'id',             // ID字段名
                   label: 'name',         // 显示名称
                   children: 'children'    // 子级字段名
                 }"
-						:url="`/system-server/sys/user/treeUserDataJyOffice?type=2`"
-						:value="inputForm.projectLeader"
-						:clearable="true"
-						:accordion="true"
-						@getValue="(value) => {inputForm.projectLeader=value}"/>
-				</el-form-item>
-			</el-col>
-			<el-col :span="12">
-				<el-form-item label="创建人" prop="createByName"
-							  :rules="[
+									  :url="`/system-server/sys/user/treeUserDataJyOffice?type=2`"
+									  :value="inputForm.projectLeader"
+									  :clearable="true"
+									  :accordion="true"
+									  @getValue="(value) => {inputForm.projectLeader=value}"/>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="创建人" prop="createByName"
+											:rules="[
                    ]">
-					<el-input :disabled="true" v-model="inputForm.createByName" placeholder="请填写创建人" clearable></el-input>
-				</el-form-item>
-			</el-col>
-			<el-col :span="12">
-				<el-form-item label="创建时间" prop="createDate"
-							  :rules="[
+								  <el-input :disabled="true" v-model="inputForm.createByName" placeholder="请填写创建人" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="12">
+							  <el-form-item label="创建时间" prop="createDate"
+											:rules="[
                    ]">
-					<el-input :disabled="true" v-model="inputForm.createDate" placeholder="请填写创建时间" clearable></el-input>
-				</el-form-item>
-			</el-col>
+								  <el-input :disabled="true" v-model="inputForm.createDate" placeholder="请填写创建时间" clearable></el-input>
+							  </el-form-item>
+						  </el-col>
 
-          <el-col :span="24">
-            <el-form-item label="工程概况" prop="projectOverview"
-                          :rules="[
+						  <el-col :span="24">
+							  <el-form-item label="工程概况" prop="projectOverview"
+											:rules="[
                  ]">
-              <el-input type="textarea" v-model="inputForm.projectOverview" maxlength="500" placeholder="请输入工程概况" show-word-limit></el-input>
-            </el-form-item>
-          </el-col>
-			<el-col :span="24">
-				<el-form-item label="特殊要求" prop="special"
-							  :rules="[
+								  <el-input type="textarea" v-model="inputForm.projectOverview" maxlength="500" placeholder="请输入工程概况" show-word-limit></el-input>
+							  </el-form-item>
+						  </el-col>
+						  <el-col :span="24">
+							  <el-form-item label="特殊要求" prop="special"
+											:rules="[
                  ]">
-					<el-input type="textarea" v-model="inputForm.special" maxlength="500" placeholder="请输入特殊要求" show-word-limit></el-input>
-				</el-form-item>
-			</el-col>
-        </el-row>
-        <el-divider content-position="left"><i class="el-icon-document"></i>
-			<span><span style="color: red;border-top: 20px">*</span>委托方联系人信息</span>
-          <el-button style="margin-left: 20px" type="primary" :disabled="this.inputForm.contractStatus === '1'" size="default" @click="openContactForm()" plain>
-            新增
-          </el-button>
-        </el-divider>
-        <el-row  :gutter="15" >
-			<el-col :span="24">
-				<vxe-table
-					border
-					show-overflow
-					ref="clientTable"
-					class="vxe-table-element"
-					:data="inputForm.clientList"
-					style="margin-left: 5em"
-					:key="clientTableKey"
-					:edit-rules="validRulesClient"
-					highlight-current-row
-					:edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
-				>
-					<vxe-table-column field="name" title="联系人" :edit-render="{}"  align="center">
-						<template v-slot:edit="scope">
-							<el-input :disabled="true" v-model="scope.row.name" ></el-input>
-						</template>
-					</vxe-table-column>
-<!--					<vxe-table-column  align="center" field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">-->
-<!--						<template v-slot:edit="scope">-->
-<!--							<vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.clientType"  transfer>-->
-<!--								<vxe-option-->
-<!--									v-for="item in clientTypes"-->
-<!--									:key="item.value"-->
-<!--									:value="item.value"-->
-<!--									:label="item.label">-->
-<!--								</vxe-option>-->
-<!--							</vxe-select>-->
-<!--						</template>-->
-<!--					</vxe-table-column>-->
-					<vxe-table-column  align="center" field="linkPhone" title="联系方式1" :edit-render="{}">
-						<template v-slot:edit="scope">
-							<el-input :disabled="true" v-model="scope.row.linkPhone" ></el-input>
-						</template>
-					</vxe-table-column>
-					<vxe-table-column  align="center" field="linkMobile" title="联系方式2" :edit-render="{}">
-						<template v-slot:edit="scope">
-							<el-input :disabled="true" v-model="scope.row.linkMobile" ></el-input>
-						</template>
-					</vxe-table-column>
-					<vxe-table-column  align="center" field="position" title="职位" :edit-render="{}">
-						<template v-slot:edit="scope">
-							<el-input :disabled="true" v-model="scope.row.position" ></el-input>
-						</template>
-					</vxe-table-column>
-					<vxe-table-column  align="center" title="操作" width="100">
-						<template v-slot="scope">
-							<el-button size="large" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
-						</template>
-					</vxe-table-column>
-				</vxe-table>
-			</el-col>
-        </el-row>
-		  <el-row  :gutter="15" v-show=" method==='view' ">
-			  <el-col :span="24">
-        <el-divider content-position="left"><i class="el-icon-document"></i>
-          项目组成员
-        </el-divider>
-        <el-row  :gutter="15">
-			<el-col :span="24">
-				<vxe-table
-					border
-					show-footer
-					show-overflow
-					:footer-method="footerMethod"
-					ref="memberTable"
-					class="vxe-table-element"
-					:key="memberKey"
-					:data="inputForm.members"
-					style="margin-left: 5em"
-					@cell-click=""
-					:edit-rules="validRulesMember"
-					@edit-closed=""
-					highlight-current-row
-					:edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear:  status === 'audit' || status === 'taskFormDetail' ? true : false, icon: '#'}"
-				>
-					<vxe-table-column min-width="218" align="center" field="name" title="姓名"></vxe-table-column>
-					<vxe-table-column min-width="218" align="center" field="officeName" title="部门"></vxe-table-column>
-					<vxe-table-column min-width="218" align="center" field="roleName" title="角色"></vxe-table-column>
-					<vxe-table-column min-width="218" align="center" field="mobile" title="手机号"></vxe-table-column>
-					<vxe-table-column min-width="218" align="center" field="status" title="状态">
-						<template #default="scope">
-							<span v-if="scope.row.status === '0'" style="color: #67C23A">正常</span>
-							<span v-else>移除</span>
-						</template>
-					</vxe-table-column>
-				</vxe-table>
-			</el-col>
-        </el-row>
-			  </el-col>
-		  </el-row>
-		  </el-form>
-		  <!--        附件-->
-		  <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+								  <el-input type="textarea" v-model="inputForm.special" maxlength="500" placeholder="请输入特殊要求" show-word-limit></el-input>
+							  </el-form-item>
+						  </el-col>
+					  </el-row>
+					  <el-divider content-position="left"><i class="el-icon-document"></i>
+						  <span><span style="color: red;border-top: 20px">*</span>委托方联系人信息</span>
+						  <el-button style="margin-left: 20px" type="primary" :disabled="this.inputForm.contractStatus === '1'" size="default" @click="openContactForm()" plain>
+							  新增
+						  </el-button>
+					  </el-divider>
+					  <el-row  :gutter="15" >
+						  <el-col :span="24">
+							  <vxe-table
+								  border
+								  show-overflow
+								  ref="clientTable"
+								  class="vxe-table-element"
+								  :data="inputForm.clientList"
+								  style="margin-left: 5em"
+								  :key="clientTableKey"
+								  :edit-rules="validRulesClient"
+								  highlight-current-row
+								  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
+							  >
+								  <vxe-table-column field="name" title="联系人" :edit-render="{}"  align="center">
+									  <template v-slot:edit="scope">
+										  <el-input :disabled="true" v-model="scope.row.name" ></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <!--					<vxe-table-column  align="center" field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">-->
+								  <!--						<template v-slot:edit="scope">-->
+								  <!--							<vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.clientType"  transfer>-->
+								  <!--								<vxe-option-->
+								  <!--									v-for="item in clientTypes"-->
+								  <!--									:key="item.value"-->
+								  <!--									:value="item.value"-->
+								  <!--									:label="item.label">-->
+								  <!--								</vxe-option>-->
+								  <!--							</vxe-select>-->
+								  <!--						</template>-->
+								  <!--					</vxe-table-column>-->
+								  <vxe-table-column  align="center" field="linkPhone" title="联系方式1" :edit-render="{}">
+									  <template v-slot:edit="scope">
+										  <el-input :disabled="true" v-model="scope.row.linkPhone" ></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column  align="center" field="linkMobile" title="联系方式2" :edit-render="{}">
+									  <template v-slot:edit="scope">
+										  <el-input :disabled="true" v-model="scope.row.linkMobile" ></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column  align="center" field="position" title="职位" :edit-render="{}">
+									  <template v-slot:edit="scope">
+										  <el-input :disabled="true" v-model="scope.row.position" ></el-input>
+									  </template>
+								  </vxe-table-column>
+								  <vxe-table-column  align="center" title="操作" width="100">
+									  <template v-slot="scope">
+										  <el-button size="large" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
+									  </template>
+								  </vxe-table-column>
+							  </vxe-table>
+						  </el-col>
+					  </el-row>
+					  <el-row  :gutter="15" v-show=" method==='view' ">
+						  <el-col :span="24">
+							  <el-divider content-position="left"><i class="el-icon-document"></i>
+								  项目组成员
+							  </el-divider>
+							  <el-row  :gutter="15">
+								  <el-col :span="24">
+									  <vxe-table
+										  border
+										  show-footer
+										  show-overflow
+										  :footer-method="footerMethod"
+										  ref="memberTable"
+										  class="vxe-table-element"
+										  :key="memberKey"
+										  :data="inputForm.members"
+										  style="margin-left: 5em"
+										  @cell-click=""
+										  :edit-rules="validRulesMember"
+										  @edit-closed=""
+										  highlight-current-row
+										  :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear:  status === 'audit' || status === 'taskFormDetail' ? true : false, icon: '#'}"
+									  >
+										  <vxe-table-column min-width="218" align="center" field="name" title="姓名"></vxe-table-column>
+										  <vxe-table-column min-width="218" align="center" field="officeName" title="部门"></vxe-table-column>
+										  <vxe-table-column min-width="218" align="center" field="roleName" title="角色"></vxe-table-column>
+										  <vxe-table-column min-width="218" align="center" field="mobile" title="手机号"></vxe-table-column>
+										  <vxe-table-column min-width="218" align="center" field="status" title="状态">
+											  <template #default="scope">
+												  <span v-if="scope.row.status === '0'" style="color: #67C23A">正常</span>
+												  <span v-else>移除</span>
+											  </template>
+										  </vxe-table-column>
+									  </vxe-table>
+								  </el-col>
+							  </el-row>
+						  </el-col>
+					  </el-row>
+				  </el-form>
+				  <!--        附件-->
+				  <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+			  </el-tab-pane>
+			  <el-tab-pane label="一级校审" name="firstAudit">
+				  <ProjectAuditForm ref="projectThreeAuditForm" :formReadOnly="true"></ProjectAuditForm>
+			  </el-tab-pane>
+			  <el-tab-pane label="二级校审" name="secondAudit" >
+				  <ProjectAuditForm ref="secondAudit2" :formReadOnly="true"></ProjectAuditForm>
+			  </el-tab-pane>
+			  <el-tab-pane label="三级校审" name="thirdAudit" >
+				  <ProjectAuditForm ref="thirdAudit3" :formReadOnly="true"></ProjectAuditForm>
+			  </el-tab-pane>
+		  </el-tabs>
+		  <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>
 
       <ContractForm  ref="contractForm" @getContract="getContract"></ContractForm>
@@ -311,6 +330,7 @@
 	import ProjectInfoService from "@/api/jy/ProjectInfoService";
 	import UpLoadComponent from '@/views/common/UpLoadComponent'
 	import userService from '@/api/sys/UserService'
+	import ProjectAuditForm from './ProjectAuditForm'
   export default {
     props: {
       businessId: {
@@ -397,6 +417,7 @@
 		SelectTree,
 		SelectUserTree,
 		UpLoadComponent,
+		ProjectAuditForm
     },
     methods: {
 		getKeyWatch (keyWatch) {
@@ -502,7 +523,10 @@
 				this.inputForm.clientList.splice(rowIndex, 1)
 			}
 		},
-		init (method, id) {
+		init (method, id,auditId1, auditId2, auditId3) {
+			this.auditIdfirst = auditId1
+			this.auditIdsecond = auditId2
+			this.auditIdthird = auditId3
 			this.method = method
 			// console.log('method', method)
 			this.inputForm = {
@@ -808,6 +832,7 @@
 				members: [], // 成员列表
 				files: [], // 附件信息
 			}
+			this.activeName = 'programDetail'
 			this.$refs.uploadComponent.clearUpload()
 			this.$refs.inputForm.resetFields()
 			this.visible = false
@@ -820,6 +845,45 @@
 				setTimeout(() => { this.progressFlag = false }, 1000) // 一秒后关闭进度条
 			}
 		},
+		tabHandleClick (event) {
+			let paneName = event.props.name
+			if (paneName === 'firstAudit') {
+				if (this.commonJS.isNotEmpty(this.auditIdfirst)) {
+					this.$refs.projectThreeAuditForm.init('view', this.auditIdfirst, '一级校审')
+				}
+			}
+			if (paneName === 'secondAudit') {
+				if (this.commonJS.isNotEmpty(this.auditIdsecond)) {
+					this.$refs.secondAudit2.init('view', this.auditIdsecond, '二级校审')
+				}
+			}
+			if (paneName === 'thirdAudit') {
+				if (this.commonJS.isNotEmpty(this.auditIdthird)) {
+					this.$refs.thirdAudit3.init('view', this.auditIdthird, '三级校审')
+				}
+			}
+			if (paneName === 'archive') {
+				if (this.commonJS.isNotEmpty(this.archiveIdA)) {
+					console.log('建立了')
+					this.$refs.projectArchiveForm.init('view', this.archiveIdA)
+				}
+			}
+			if (paneName === 'freadBrowse') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.proofreadBrowseFormComponent.init('view', this.inputForm.id)
+				}
+			}
+			if (paneName === 'fread') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.proofreadFormComponent.init(this.inputForm.id)
+				}
+			}
+			if (paneName === 'issued') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.proofreadIssuedForm.init('view', this.inputForm.id, '报告签发单')
+				}
+			}
+		}
     }
   }
 </script>

+ 395 - 16
src/views/jy/project/ProjectList.vue

@@ -181,7 +181,7 @@
 							<el-button @click="registeredDetail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.status, '未登记')}} </el-button>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="120" align="center" title="一级校审" field="firstInstanceStatus">
+					<vxe-column min-width="150" align="center" title="一级校审" field="firstInstanceStatus">
 						<template #default="scope">
 							<el-button  @click="firstAuditDetail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.firstInstanceStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.firstInstanceStatus, '未登记')}} </el-button>
 						</template>
@@ -236,31 +236,31 @@
 							<!--              <el-button v-if="hasPermission('program:registered:edit')&&scope.row.status === '5' && commonJS.isEmpty(scope.row.reportNo) && scope.row.createBy === $store.state.user.id" text type="primary"  @click="saveReportNo(scope.row.id)">生成报告号</el-button>-->
 
 <!--							&lt;!&ndash; 一级校审  发起&ndash;&gt;-->
-							<el-button v-if="hasPermission('program:registered:edit')&&scope.row.status === '5' &&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&(scope.row.firstInstanceStatus === '0'||scope.row.firstInstanceStatus === '1'||scope.row.firstInstanceStatus === '3')" text type="primary"  @click="firstAuditPush(scope.row)">一级校审</el-button>
+							<el-button v-if="hasPermission('jy_project:info:edit')&& scope.row.status === '5' && (scope.row.firstInstanceStatus ==='0' || scope.row.firstInstanceStatus ==='3' ||scope.row.firstInstanceStatus ==='1'||scope.row.firstInstanceStatus ==='6') &&(scope.row.createBy === $store.state.user.id)" text type="primary"  @click="firstAuditPush(scope.row)">一级校审</el-button>
 <!--							&lt;!&ndash; 一级校审  撤回&ndash;&gt;-->
-							<el-button v-if="hasPermission('program:registered:edit')&&scope.row.firstInstanceStatus === '2' &&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))" text type="primary"  @click="firstAuditReback(scope.row)">校审撤回</el-button>
+							<el-button v-if="hasPermission('jy_project:info:edit')&&scope.row.firstInstanceStatus === '2' &&(scope.row.createBy === $store.state.user.id)" text type="primary"  @click="firstAuditReback(scope.row)">校审撤回</el-button>
 <!--							&lt;!&ndash; 一级校审  审核&ndash;&gt;-->
 							<el-button v-if="scope.row.firstInstanceStatus==='2' && checkIsAuditFirst(scope.row)" text type="primary"   @click="examineFirst(scope.row)">一级校审审核</el-button>
 <!--							&lt;!&ndash; 一级校审  被驳回后当前申请人重新调整&ndash;&gt;-->
-							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.firstInstanceStatus === '4'" text type="primary"   @click="adjustFirst(scope.row)">驳回调整</el-button>
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id)&&scope.row.firstInstanceStatus === '4'" text type="primary"   @click="adjustFirst(scope.row)">驳回调整</el-button>
 
 <!--							&lt;!&ndash; 二级校审  发起&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status1 === '5'&&(scope.row.status2 === '0'||scope.row.status2 === '1'||scope.row.status2 === '3')" text type="primary"  @click="secondAuditPush(scope.row)">二级校审</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id)&&(scope.row.firstInstanceStatus === '5' || scope.row.firstInstanceStatus === '7')&&(scope.row.secondInstanceStatus === '0'||scope.row.secondInstanceStatus === '1'||scope.row.secondInstanceStatus === '3')" text type="primary"  @click="secondAuditPush(scope.row)">二级校审</el-button>
 <!--							&lt;!&ndash; 二级校审  撤回&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&scope.row.status2 === '2'&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))" type="text"  @click="secondAuditReback(scope.row)">校审撤回</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&scope.row.secondInstanceStatus === '2'&&(scope.row.createBy === $store.state.user.id)" type="text"  @click="secondAuditReback(scope.row)">校审撤回</el-button>
 <!--							&lt;!&ndash; 二级校审  审核&ndash;&gt;-->
-<!--							<el-button v-if="scope.row.status2==='2' && checkIsAuditSecond(scope.row)" text type="primary"  @click="examineSecond(scope.row)">二级校审审核</el-button>-->
+							<el-button v-if="scope.row.secondInstanceStatus==='2' && checkIsAuditSecond(scope.row)" text type="primary"  @click="examineSecond(scope.row)">二级校审审核</el-button>
 <!--							&lt;!&ndash; 二级校审  被驳回后当前申请人重新调整&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status2 === '4'" text type="primary"  @click="adjustSecond(scope.row)">驳回调整</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id)&&scope.row.secondInstanceStatus === '4'" text type="primary"  @click="adjustSecond(scope.row)">驳回调整</el-button>
 
 <!--							&lt;!&ndash; 三级校审  发起&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status2 === '5' &&(scope.row.status3 === '0'||scope.row.status3 === '1'||scope.row.status3 === '3')" text type="primary"  @click="thirdAuditPush(scope.row)">三级校审</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id)&&scope.row.secondInstanceStatus === '5' &&(scope.row.thirdInstanceStatus === '0'||scope.row.thirdInstanceStatus === '1'||scope.row.thirdInstanceStatus === '3')" text type="primary"  @click="thirdAuditPush(scope.row)">三级校审</el-button>
 <!--							&lt;!&ndash; 三级校审  撤回&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status3 === '2'" text type="primary"  @click="thirdAuditReback(scope.row)">校审撤回</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.thirdInstanceStatus === '2'" text type="primary"  @click="thirdAuditReback(scope.row)">校审撤回</el-button>
 <!--							&lt;!&ndash; 三级校审  审核&ndash;&gt;-->
-<!--							<el-button v-if="scope.row.status3==='2' && checkIsAuditThird(scope.row)" text type="primary"   @click="examineThird(scope.row)">三级校审审核</el-button>-->
+							<el-button v-if="scope.row.thirdInstanceStatus==='2' && checkIsAuditThird(scope.row)" text type="primary"   @click="examineThird(scope.row)">三级校审审核</el-button>
 <!--							&lt;!&ndash; 三级校审  被驳回后当前申请人重新调整&ndash;&gt;-->
-<!--							<el-button v-if="hasPermission('program:registered:edit')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status3 === '4'" text type="primary"   @click="adjustThird(scope.row)">驳回调整</el-button>-->
+							<el-button v-if="hasPermission('jy_project:info:edit')&&(scope.row.createBy === $store.state.user.id)&&scope.row.thirdInstanceStatus === '4'" text type="primary"   @click="adjustThird(scope.row)">驳回调整</el-button>
 
 <!--							&lt;!&ndash;三神结束后,评估报告签发前进行资产评估项目(校对)&ndash;&gt;-->
 <!--							<el-button v-if="hasPermission('program:registered:proo')&&(scope.row.createBy === $store.state.user.id||haveProjectIds.includes(scope.row.id))&&scope.row.status3 === '5'&&scope.row.issuedStatus === '0'" text type="primary"  @click="proofread(scope.row.id)">校对</el-button>-->
@@ -368,7 +368,11 @@ export default {
 			procDefKey:'',
 			haveProjectIds:'',
 			processDefinitionId1:'',
-			procDefKey1:''
+			procDefKey1:'',
+			processDefinitionId2:'',
+			procDefKey2:'',
+			processDefinitionId3:'',
+			procDefKey3:'',
 		}
 	},
 	ProjectInfoService:null,
@@ -427,7 +431,7 @@ export default {
 		},
 		// 查看
 		view (row) {
-			this.$refs.projectDia.init('view', row.id)
+			this.$refs.projectDia.init('view', row.id,row.auditId1, row.auditId2, row.auditId3)
 		},
 		// 获取数据列表
 		refreshList () {
@@ -466,6 +470,18 @@ export default {
 					this.procDefKey1 = data.key
 				}
 			})
+			processService.getByName('嘉溢-项目二级校审').then((data) => {
+				if (!this.commonJS.isEmpty(data.id)) {
+					this.processDefinitionId2 = data.id
+					this.procDefKey2 = data.key
+				}
+			})
+			processService.getByName('嘉溢-项目三级校审').then((data) => {
+				if (!this.commonJS.isEmpty(data.id)) {
+					this.processDefinitionId3 = data.id
+					this.procDefKey3 = data.key
+				}
+			})
 		},
 		// 当前页
 		currentChangeHandle ({ currentPage, pageSize }) {
@@ -718,15 +734,378 @@ export default {
 						formType: data.formType,
 						formUrl: data.formUrl,
 						formTitle: processTitle,
-						businessTable: 'program_audit',
+						businessTable: 'jy_project_audit',
 						businessId: row.auditId1,
 						isShow: 'false',
 						status: status,
-						routePath: '/program/registered/ProjectList'
+						routePath: '/jy/project/ProjectList'
+					}
+				})
+			})
+		},
+		checkIsAuditFirst (row) {
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditUserIds1)) {
+				for (const userId of row.auditUserIds1) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		// 驳回后调整  一级校审
+		adjustFirst (row) {
+			this.projectInfoService.findByIdAudit(row.auditId1).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFirst(row)
+				}
+			})
+		},
+		// 审核  一级校审
+		examineFirst (row) {
+			this.projectInfoService.findByIdAudit(row.auditId1).then((data) => {
+				if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoFirst(row)
+				}
+			})
+		},
+		// 审核或重新调整跳转  一级校审
+		todoFirst (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdAudit1
+			}).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: '/jy/project/ProjectList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		// 查看一级校审审批流程结果
+		firstAuditDetail (row) {
+			if (row.firstInstanceStatus !== '0' && row.firstInstanceStatus !== '1') {
+				// eslint-disable-next-line eqeqeq
+				taskService.getTaskDef({
+					procInsId: row.procInsId1,
+					procDefId: this.processDefinitionId1
+				}).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.auditId1,
+							status: 'reback'
+						}
+					})
+				})
+			}
+		},
+		// 撤回一级校审
+		firstAuditReback (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => {
+				await this.projectInfoService.findByIdAudit(row.auditId1).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId1).then((data) => {
+							let form = {status: '3', id: row.auditId1}
+							this.projectInfoService.updateStatusByAuditId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 查询当前登录人是否是数据的审核人  二级校审
+		checkIsAuditSecond (row) {
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditUserIds2)) {
+				for (const userId of row.auditUserIds2) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+		// 发起二级校审
+		secondAuditPush (row) {
+			// 读取流程表单
+			let title = `发起流程【嘉溢-项目二级校审】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了[嘉溢-项目二级校审]`
+			let status = 'startAndHold'
+			if (row.secondInstanceStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.secondInstanceStatus === '4') {
+				status = 'reapplyFlag'
+			}
+			taskService.getTaskDef({ procDefId: this.processDefinitionId2,
+				businessId: row.auditId2,
+				businessTable: 'jy_project_audit'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionId2,
+						procDefKey: this.procDefKey2,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'jy_project_audit',
+						businessId: row.auditId2,
+						isShow: 'false',
+						status: status,
+						routePath: '/jy/project/ProjectList'
+					}
+				})
+			})
+		},
+		// 查看二级校审审批流程结果
+		secondAuditDetail (row) {
+			if (row.secondInstanceStatus !== '0' && row.secondInstanceStatus !== '1') {
+				// eslint-disable-next-line eqeqeq
+				taskService.getTaskDef({
+					procInsId: row.procInsId2,
+					procDefId: this.processDefinitionId2
+				}).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.auditId2,
+							status: 'reback'
+						}
+					})
+				})
+			}
+		},
+		// 撤回二级校审
+		secondAuditReback (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => {
+				await this.projectInfoService.findByIdAudit(row.auditId2).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId2).then((data) => {
+							let form = {status: '3', id: row.auditId2}
+							this.projectInfoService.updateStatusByAuditId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 驳回后调整  二级校审
+		adjustSecond (row) {
+			this.projectInfoService.findByIdAudit(row.auditId2).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoSecond(row)
+				}
+			})
+		},
+		// 审核  二级校审
+		examineSecond (row) {
+			this.projectInfoService.findByIdAudit(row.auditId2).then((data) => {
+				if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoSecond(row)
+				}
+			})
+		},
+		// 审核或重新调整跳转  二级校审
+		todoSecond (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdAudit2
+			}).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: '/jy/project/ProjectList'   // 数据处理后需要跳转的页面路径
+					}
+				})
+			})
+		},
+		// 发起三级校审
+		thirdAuditPush (row) {
+			// 读取流程表单
+			let title = `发起流程【嘉溢-项目三级校审】`
+			let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了[嘉溢-项目三级校审]`
+			let status = 'startAndHold'
+			if (row.thirdInstanceStatus === '3') {
+				status = 'startAndClose'
+			} else if (row.thirdInstanceStatus === '4') {
+				status = 'reapplyFlag'
+			}
+			taskService.getTaskDef({ procDefId: this.processDefinitionId3,
+				businessId: row.auditId3,
+				businessTable: 'jy_project_audit'}).then((data) => {
+				this.$router.push({
+					path: '/flowable/task/TaskForm',
+					query: {
+						...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						procDefId: this.processDefinitionId3,
+						procDefKey: this.procDefKey3,
+						title: title,
+						formType: data.formType,
+						formUrl: data.formUrl,
+						formTitle: processTitle,
+						businessTable: 'jy_project_audit',
+						businessId: row.auditId3,
+						isShow: 'false',
+						status: status,
+						routePath: '/jy/project/ProjectList'
+					}
+				})
+			})
+		},
+		// 查看三级校审审批流程结果
+		thirdAuditDetail (row) {
+			if (row.thirdInstanceStatus !== '0' && row.thirdInstanceStatus !== '1') {
+				// eslint-disable-next-line eqeqeq
+				taskService.getTaskDef({
+					procInsId: row.procInsId3,
+					procDefId: this.processDefinitionId3
+				}).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.auditId3,
+							status: 'reback'
+						}
+					})
+				})
+			}
+		},
+		// 撤回三级校审
+		thirdAuditReback (row) {
+			this.$confirm(`确定要撤回该申请吗?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(async () => {
+				await this.projectInfoService.findByIdAudit(row.auditId3).then((data) => {
+					if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+						this.$message.error('数据已发生改变或不存在,请刷新数据')
+						this.refreshList()
+					} else {
+						processService.revokeProcIns(row.procInsId3).then((data) => {
+							let form = {status: '3', id: row.auditId3}
+							this.projectInfoService.updateStatusByAuditId(form)
+							this.$message.success(data)
+							this.refreshList()
+						})
+					}
+				})
+			})
+		},
+		// 驳回后调整  三级校审
+		adjustThird (row) {
+			this.projectInfoService.findByIdAudit(row.auditId3).then((data) => {
+				if (data.status !== '4') { // status的值不等于“驳回”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoThird(row)
+				}
+			})
+		},
+		// 审核  三级校审
+		examineThird (row) {
+			this.projectInfoService.findByIdAudit(row.auditId3).then((data) => {
+				if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
+					this.$message.error('数据已发生改变或不存在,请刷新数据')
+					this.refreshList()
+				} else {
+					this.todoThird(row)
+				}
+			})
+		},
+		// 审核或重新调整跳转  三级校审
+		todoThird (row) {
+			let cUser = false
+			taskService.getTaskDefInfo({
+				taskId: row.taskIdAudit3
+			}).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: '/jy/project/ProjectList'   // 数据处理后需要跳转的页面路径
 					}
 				})
 			})
 		},
+		// 查询当前登录人是否是数据的审核人  三级校审
+		checkIsAuditThird (row) {
+			let loginUserId = this.$store.state.user.id  // 获取当前登录用户id
+			if (this.commonJS.isNotEmpty(row.auditUserIds3)) {
+				for (const userId of row.auditUserIds3) {
+					if (userId === loginUserId) {  // 当数据的审核人中包含当前登录人id时,返回true
+						return true
+					}
+				}
+			}
+			return false
+		},
+
 	}
 }
 </script>

+ 123 - 0
src/views/jy/workClientInfo/clientUserSelect/AccountantUserIndex.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./AccountantUserSelectDialog";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 123 - 0
src/views/jy/workClientInfo/clientUserSelect/AccountantUserIndex2.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./AccountantUserSelectDialog2";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 488 - 0
src/views/jy/workClientInfo/clientUserSelect/AccountantUserSelectDialog.vue

@@ -0,0 +1,488 @@
+<template>
+  <div>
+    <el-dialog
+    title="用户选择"
+    width="1000px"
+    :close-on-click-modal="false"
+    :append-to-body="true"
+	draggable
+     class="userDialog"
+    v-model="visible">
+    <el-container style="height: 500px">
+      <el-aside width="200px">
+
+        <el-card class="org">
+          <div slot="header" class="clearfix">
+            <el-input
+              placeholder="请输入组织机构过滤"
+              size="small"
+              v-model="filterText">
+            </el-input>
+          </div>
+           <el-tree
+            :data="officeTreeData"
+            :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+            default-expand-all
+            highlight-current
+            node-key="id"
+            :render-content="renderContent"
+            :filter-node-method="filterNode"
+            :expand-on-click-node="false"
+            @node-click="handleNodeClick"
+            ref="officeTree">
+          </el-tree>
+        </el-card>
+      </el-aside>
+
+    <el-container>
+      <el-header style="text-align: left; font-size: 12px;height:30px">
+        <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <el-form-item prop="loginName">
+              <el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+            </el-form-item>
+
+            <el-form-item>
+              <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+              <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+            </el-form-item>
+          </el-form>
+      </el-header>
+
+      <el-main>
+        <el-table
+          :data="dataList"
+          v-loading="loading"
+          size="small"
+          border
+          ref="userTable"
+          @selection-change="selectionChangeHandle"
+          @sort-change="sortChangeHandle"
+          height="calc(100% - 40px)"
+          style="width: 100%;">
+          <el-table-column
+            header-align="center"
+            align="center"
+            v-if="limit <= 1"
+            width="50">
+<!--              <template slot-scope="scope">-->
+<!--                  <el-radio :label="scope.row.id" :value="dataListAllSelections[0]&&dataListAllSelections[0].id" @change.native="getTemplateRow(scope.$index,scope.row)"><span></span></el-radio>-->
+<!--              </template>-->
+			  <template #default="scope">
+				  <el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+					  <el-radio :label="scope.row">
+						  <template #default="{ label }">
+							  <!-- 将label文本设置为空 -->
+							  <span></span>
+						  </template>
+					  </el-radio>
+				  </el-radio-group>
+			  </template>
+          </el-table-column>
+          <el-table-column
+            type="selection"
+            header-align="center"
+            v-if="limit > 1"
+            align="center"
+            width="50">
+          </el-table-column>
+          <el-table-column
+            prop="photo"
+            header-align="center"
+            align="center"
+            label="头像">
+            <template #default="scope">
+              <img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="loginName"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="90"
+            label="登录名">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            header-align="center"
+            align="真实姓名"
+            sortable="custom"
+            min-width="90"
+            label="用户名">
+          </el-table-column>
+          <el-table-column
+            prop="accountantUserCount"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="被选次数">
+
+            <!--用插槽的方法来改变颜色!-->
+            <template #default="scope">
+              <div v-if="scope.row.accountantUserFlag === 0">
+                {{ scope.row.accountantUserCount }}
+              </div>
+              <div v-else :style="{ color: scope.row.accountantUserCount>100 ? 'red' : 'black' }">
+                {{ scope.row.accountantUserCount }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="companyDTO.name"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="所属机构">
+          </el-table-column>
+          <el-table-column
+            prop="officeDTO.name"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="所属部门">
+          </el-table-column>
+          <el-table-column
+            prop="loginFlag"
+            header-align="center"
+            align="center"
+            min-width="100"
+            label="状态">
+            <template #default="scope">
+              <el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+              <el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          @size-change="sizeChangeHandle"
+          @current-change="currentChangeHandle"
+          :current-page="pageNo"
+          :page-sizes="[5, 10, 50, 100]"
+          :page-size="pageSize"
+          :total="total"
+          layout="total, sizes, prev, pager, next, jumper">
+        </el-pagination>
+      </el-main>
+    </el-container>
+
+    <el-aside width="200px">
+      <el-tag
+        :key="tag.id"
+        v-for="tag in dataListAllSelections"
+        closable
+        :disable-transitions="false"
+        @close="del(tag)">
+        {{tag.name}}
+      </el-tag>
+  </el-aside>
+</el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        searchForm: {
+          loginName: '',
+          accountantUserCount: '',
+          accountantUserFlag: '',
+          companyDTO: {
+            id: ''
+          },
+          officeDTO: {
+            id: ''
+          },
+          name: ''
+        },
+        filterText: '',
+        dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+        dataListSelections: [],
+        idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+        dataList: [],
+        dynamicTags: [],
+        officeTreeData: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orders: [],
+        loading: false,
+        visible: false
+      }
+    },
+    props: {
+      selectData: {
+        type: Array,
+        default: () => { return [] }
+      },
+      limit: {
+        type: Number,
+        default: 999999
+      }
+    },
+    watch: {
+      filterText (val) {
+        this.$refs.officeTree.filter(val)
+      }
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.$nextTick(() => {
+          this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+          this.refreshTree()
+          this.resetSearch()
+        })
+      },
+      renderContent (h, { node, data, store }) {
+		  return h('span', { class: 'custom-tree-node' }, [
+			  data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			  h('span', { class: 'text' }, node.label),
+		  ]);
+        // return (
+        //       <span class="custom-tree-node">
+        //         {
+        //           data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+        //         }
+        //         <span class="text">{node.label}</span>
+        //       </span>
+        // )
+      },
+      getTemplateRow (index, row) {                                 // 获取选中数据
+        this.dataListSelections = [row]
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+           // 设置选中的方法
+      setSelectRow () {
+        console.log('设置选中的方法')
+        if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+          this.$refs.userTable.clearSelection()
+          return
+        }
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        this.$refs.userTable.clearSelection()
+        for (var i = 0; i < this.dataList.length; i++) {
+          if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+                        // 设置选中,记住table组件需要使用ref="table"
+            this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+          }
+        }
+      },
+            // 记忆选择核心方法
+      changePageCoreRecordData () {
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let that = this
+              // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+        if (this.dataListAllSelections.length <= 0) {
+          this.dataListSelections.forEach(row => {
+            that.dataListAllSelections.push(row)
+          })
+          return
+        }
+                // 总选择里面的key集合
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        let selectIds = []
+                // 获取当前页选中的id
+        this.dataListSelections.forEach(row => {
+          selectIds.push(row[idKey])
+                  // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+          if (selectAllIds.indexOf(row[idKey]) < 0) {
+            that.dataListAllSelections.push(row)
+          }
+        })
+        let noSelectIds = []
+              // 得到当前页没有选中的id
+        this.dataList.forEach(row => {
+          if (selectIds.indexOf(row[idKey]) < 0) {
+            noSelectIds.push(row[idKey])
+          }
+        })
+        noSelectIds.forEach(id => {
+          if (selectAllIds.indexOf(id) >= 0) {
+            for (let i = 0; i < that.dataListAllSelections.length; i++) {
+              if (that.dataListAllSelections[i][idKey] === id) {
+                                // 如果总选择中有未被选中的,那么就删除这条
+                that.dataListAllSelections.splice(i, 1)
+                break
+              }
+            }
+          }
+        })
+      },
+     // 得到选中的所有数据
+      getAllSelectionData () {
+         // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+        this.changePageCoreRecordData()
+      },
+      filterNode (value, data) {
+        if (!value) return true
+        return data.name.indexOf(value) !== -1
+      },
+      del (tag) {
+        this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.searchForm.certType = '6'
+        if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+          this.searchForm.selectAll = 'true'
+        }
+        this.$http({
+          url: '/system-server/sys/user/list',
+          method: 'get',
+          params: {
+            'current': this.pageNo,
+            'size': this.pageSize,
+            'orders': this.orders,
+            ...this.searchForm
+          }
+        }).then((data) => {
+          this.dataList = data.records
+          this.total = data.total
+          this.pageNo = data.current
+          this.loading = false
+          this.$nextTick(() => {
+            this.setSelectRow()
+          })
+        })
+      },
+      refreshTree () {
+        this.$http({
+          url: `/system-server/sys/office/treeDataByUser`,
+          method: 'get'
+        }).then((data) => {
+          this.officeTreeData = data
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+       // 排序
+      sortChangeHandle (column) {
+        if (column.prop === 'officeDTO.name') {
+          column.prop = 'o.name'
+        }
+        if (column.prop === 'companyDTO.name') {
+          column.prop = 'c.name'
+        }
+        this.orders = []
+        if (column.order != null) {
+          this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+        }
+        this.refreshList()
+      },
+      handleNodeClick (data) {
+        if (data.type === '1') {
+          this.searchForm.companyDTO.id = data.id
+          this.searchForm.officeDTO.id = ''
+        } else {
+          this.searchForm.companyDTO.id = ''
+          this.searchForm.officeDTO.id = data.id
+        }
+        this.refreshList()
+      },
+      resetSearch () {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = ''
+        this.$refs.officeTree.setCurrentKey(null)
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      doSubmit () {
+        console.log('doSubmit')
+        if (this.dataListAllSelections.length === 0) {
+          this.$message.error(`请选择用户`)
+          return
+        }
+        if (this.limit < this.dataListAllSelections.length) {
+          this.$message.error(`你最多只能选择${this.limit}个用户`)
+          return
+        }
+        if (this.dataListAllSelections[0].accountantUserCount >= 100 && this.dataListAllSelections[0].accountantUserFlag === 1) {
+          this.$message.error(`请选择被选次数小于100次的签字注师人员`)
+          return
+        }
+        this.visible = false
+        this.$emit('doSubmit', this.dataListAllSelections)
+      }
+    }
+  }
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 488 - 0
src/views/jy/workClientInfo/clientUserSelect/AccountantUserSelectDialog2.vue

@@ -0,0 +1,488 @@
+<template>
+  <div>
+    <el-dialog
+      title="用户选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+	  draggable
+      class="userDialog"
+      v-model="visible">
+      <el-container style="height: 500px">
+        <el-aside width="200px">
+
+          <el-card class="org">
+            <div slot="header" class="clearfix">
+              <el-input
+                placeholder="请输入组织机构过滤"
+                size="small"
+                v-model="filterText">
+              </el-input>
+            </div>
+            <el-tree
+              :data="officeTreeData"
+              :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+              default-expand-all
+              highlight-current
+              node-key="id"
+              :render-content="renderContent"
+              :filter-node-method="filterNode"
+              :expand-on-click-node="false"
+              @node-click="handleNodeClick"
+              ref="officeTree">
+            </el-tree>
+          </el-card>
+        </el-aside>
+
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px;height:30px">
+            <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <el-form-item prop="loginName">
+                <el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+                <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="userTable"
+              @selection-change="selectionChangeHandle"
+              @sort-change="sortChangeHandle"
+              height="calc(100% - 40px)"
+              style="width: 100%;">
+              <el-table-column
+                header-align="center"
+                align="center"
+                v-if="limit <= 1"
+                width="50">
+<!--                <template #default="scope">-->
+<!--                  <el-radio :label="scope.row.id" :value="dataListAllSelections[0]&&dataListAllSelections[0].id" @change.native="getTemplateRow(scope.$index,scope.row)"><span></span></el-radio>-->
+<!--                </template>-->
+				  <template #default="scope">
+					  <el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+						  <el-radio :label="scope.row">
+							  <template #default="{ label }">
+								  <!-- 将label文本设置为空 -->
+								  <span></span>
+							  </template>
+						  </el-radio>
+					  </el-radio-group>
+				  </template>
+              </el-table-column>
+              <el-table-column
+                type="selection"
+                header-align="center"
+                v-if="limit > 1"
+                align="center"
+                width="50">
+              </el-table-column>
+              <el-table-column
+                prop="photo"
+                header-align="center"
+                align="center"
+                label="头像">
+                <template #default="scope">
+                  <img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="loginName"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="登录名">
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="真实姓名"
+                sortable="custom"
+                min-width="90"
+                label="用户名">
+              </el-table-column>
+              <el-table-column
+                prop="accountantUserCount"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="被选次数">
+
+                <!--用插槽的方法来改变颜色!-->
+                <template #default="scope">
+                  <div v-if="scope.row.accountantUserFlag === 0">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                  <div v-else :style="{ color: scope.row.accountantUserCount>100 ? 'red' : 'black' }">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="companyDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属机构">
+              </el-table-column>
+              <el-table-column
+                prop="officeDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属部门">
+              </el-table-column>
+              <el-table-column
+                prop="loginFlag"
+                header-align="center"
+                align="center"
+                min-width="100"
+                label="状态">
+                <template #default="scope">
+                  <el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+                  <el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 50, 100]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper">
+            </el-pagination>
+          </el-main>
+        </el-container>
+
+        <el-aside width="200px">
+          <el-tag
+            :key="tag.id"
+            v-for="tag in dataListAllSelections"
+            closable
+            :disable-transitions="false"
+            @close="del(tag)">
+            {{tag.name}}
+          </el-tag>
+        </el-aside>
+      </el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      searchForm: {
+        loginName: '',
+        accountantUserCount: '',
+        accountantUserFlag: '',
+        companyDTO: {
+          id: ''
+        },
+        officeDTO: {
+          id: ''
+        },
+        name: ''
+      },
+      filterText: '',
+      dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+      dataListSelections: [],
+      idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      dynamicTags: [],
+      officeTreeData: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false
+    }
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => { return [] }
+    },
+    limit: {
+      type: Number,
+      default: 999999
+    }
+  },
+  watch: {
+    filterText (val) {
+      this.$refs.officeTree.filter(val)
+    }
+  },
+  methods: {
+    init () {
+      this.visible = true
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+        this.refreshTree()
+        this.resetSearch()
+      })
+    },
+    renderContent (h, { node, data, store }) {
+		return h('span', { class: 'custom-tree-node' }, [
+			data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			h('span', { class: 'text' }, node.label),
+		]);
+      // return (
+      //   <span class="custom-tree-node">
+      //           {
+      //             data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+      //           }
+      //     <span class="text">{node.label}</span>
+      //         </span>
+      // )
+    },
+    getTemplateRow (index, row) {                                 // 获取选中数据
+      this.dataListSelections = [row]
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 设置选中的方法
+    setSelectRow () {
+      console.log('设置选中的方法')
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        this.$refs.userTable.clearSelection()
+        return
+      }
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      this.$refs.userTable.clearSelection()
+      for (var i = 0; i < this.dataList.length; i++) {
+        if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+        }
+      }
+    },
+    // 记忆选择核心方法
+    changePageCoreRecordData () {
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let that = this
+      // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+      if (this.dataListAllSelections.length <= 0) {
+        this.dataListSelections.forEach(row => {
+          that.dataListAllSelections.push(row)
+        })
+        return
+      }
+      // 总选择里面的key集合
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      let selectIds = []
+      // 获取当前页选中的id
+      this.dataListSelections.forEach(row => {
+        selectIds.push(row[idKey])
+        // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+        if (selectAllIds.indexOf(row[idKey]) < 0) {
+          that.dataListAllSelections.push(row)
+        }
+      })
+      let noSelectIds = []
+      // 得到当前页没有选中的id
+      this.dataList.forEach(row => {
+        if (selectIds.indexOf(row[idKey]) < 0) {
+          noSelectIds.push(row[idKey])
+        }
+      })
+      noSelectIds.forEach(id => {
+        if (selectAllIds.indexOf(id) >= 0) {
+          for (let i = 0; i < that.dataListAllSelections.length; i++) {
+            if (that.dataListAllSelections[i][idKey] === id) {
+              // 如果总选择中有未被选中的,那么就删除这条
+              that.dataListAllSelections.splice(i, 1)
+              break
+            }
+          }
+        }
+      })
+    },
+    // 得到选中的所有数据
+    getAllSelectionData () {
+      // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+      this.changePageCoreRecordData()
+    },
+    filterNode (value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    del (tag) {
+      this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+      this.$nextTick(() => {
+        this.setSelectRow()
+      })
+    },
+    // 获取数据列表
+    refreshList () {
+      this.loading = true
+      this.searchForm.certType = '6'
+      if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+        this.searchForm.selectAll = 'true'
+      }
+      this.$http({
+        url: '/system-server/sys/user/list2',
+        method: 'get',
+        params: {
+          'current': this.pageNo,
+          'size': this.pageSize,
+          'orders': this.orders,
+          ...this.searchForm
+        }
+      }).then((data) => {
+        this.dataList = data.records
+        this.total = data.total
+        this.pageNo = data.current
+        this.loading = false
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      })
+    },
+    refreshTree () {
+      this.$http({
+        url: `/system-server/sys/office/accessTreeData`,
+        method: 'get'
+      }).then((data) => {
+        this.officeTreeData = data
+      })
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageNo = 1
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageNo = val
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 多选
+    selectionChangeHandle (val) {
+      this.dataListSelections = val
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 排序
+    sortChangeHandle (column) {
+      if (column.prop === 'officeDTO.name') {
+        column.prop = 'o.name'
+      }
+      if (column.prop === 'companyDTO.name') {
+        column.prop = 'c.name'
+      }
+      this.orders = []
+      if (column.order != null) {
+        this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+      }
+      this.refreshList()
+    },
+    handleNodeClick (data) {
+      if (data.type === '1') {
+        this.searchForm.companyDTO.id = data.id
+        this.searchForm.officeDTO.id = ''
+      } else {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = data.id
+      }
+      this.refreshList()
+    },
+    resetSearch () {
+      this.searchForm.companyDTO.id = ''
+      this.searchForm.officeDTO.id = ''
+      this.$refs.officeTree.setCurrentKey(null)
+      this.$refs.searchForm.resetFields()
+      this.refreshList()
+    },
+    doSubmit () {
+      console.log('doSubmit')
+      if (this.dataListAllSelections.length === 0) {
+        this.$message.error(`请选择用户`)
+        return
+      }
+      if (this.limit < this.dataListAllSelections.length) {
+        this.$message.error(`你最多只能选择${this.limit}个用户`)
+        return
+      }
+      if (this.dataListAllSelections[0].accountantUserCount >= 100 && this.dataListAllSelections[0].accountantUserFlag === 1) {
+        this.$message.error(`请选择被选次数小于100次的签字注师人员`)
+        return
+      }
+      this.visible = false
+      this.$emit('doSubmit', this.dataListAllSelections)
+    }
+  }
+}
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 460 - 0
src/views/jy/workClientInfo/clientUserSelect/UserSelectDialog.vue

@@ -0,0 +1,460 @@
+<template>
+	<el-dialog
+		title="用户选择"
+		width="1000px"
+		:close-on-click-modal="false"
+		:append-to-body="true"
+		draggable
+		class="userDialog"
+		v-model="visible">
+		<el-container style="height: 500px">
+			<el-aside width="200px">
+
+				<el-card class="org">
+					<div slot="header" class="clearfix">
+						<el-input
+							placeholder="请输入组织机构过滤"
+							size="small"
+							v-model="filterText">
+						</el-input>
+					</div>
+					<el-tree
+						:data="officeTreeData"
+						:props="{
+						  value: 'id',             // ID字段名
+						  label: 'name',         // 显示名称
+						  children: 'children'    // 子级字段名
+                }"
+						default-expand-all
+						highlight-current
+						node-key="id"
+						:render-content="renderContent"
+						:filter-node-method="filterNode"
+						:expand-on-click-node="false"
+						@node-click="handleNodeClick"
+						ref="officeTree">
+					</el-tree>
+				</el-card>
+			</el-aside>
+
+			<el-container>
+				<el-header style="text-align: left; font-size: 12px;height:30px">
+					<el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+						<el-form-item prop="loginName">
+							<el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+						</el-form-item>
+
+						<el-form-item>
+							<el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+							<el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+						</el-form-item>
+					</el-form>
+				</el-header>
+
+				<el-main>
+					<el-table
+						:data="dataList"
+						v-loading="loading"
+						size="small"
+						border
+						ref="userTable"
+						@selection-change="selectionChangeHandle"
+						@sort-change="sortChangeHandle"
+						height="calc(100% - 40px)"
+						style="width: 100%;">
+						<el-table-column
+							header-align="center"
+							align="center"
+							v-if="limit <= 1"
+							width="50">
+							<template #default="scope">
+								<el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+									<el-radio :label="scope.row">
+										<template #default="{ label }">
+											<!-- 将label文本设置为空 -->
+											<span></span>
+										</template>
+									</el-radio>
+								</el-radio-group>
+<!--								<el-radio-group :value="dataListAllSelections[0]&&dataListAllSelections[0].id"  @change.native="getTemplateRow(scope.$index, scope.row)">-->
+<!--									<el-radio-->
+<!--										:label="scope.row.id"-->
+<!--										:value="dataListAllSelections[0]&&dataListAllSelections[0].id"-->
+<!--										@change.native="getTemplateRow(scope.$index,scope.row)">-->
+<!--										<span></span>-->
+<!--									</el-radio>-->
+<!--								</el-radio-group>-->
+							</template>
+						</el-table-column>
+						<el-table-column
+							type="selection"
+							header-align="center"
+							v-if="limit > 1"
+							align="center"
+							width="50">
+						</el-table-column>
+						<el-table-column
+							prop="photo"
+							header-align="center"
+							align="center"
+							label="头像">
+							<template #default="scope">
+								<img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+							</template>
+						</el-table-column>
+						<el-table-column
+							prop="loginName"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="90"
+							label="登录名">
+						</el-table-column>
+						<el-table-column
+							prop="name"
+							header-align="center"
+							align="真实姓名"
+							sortable="custom"
+							min-width="90"
+							label="用户名">
+						</el-table-column>
+						<el-table-column
+							prop="companyDTO.name"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="110"
+							label="所属机构">
+						</el-table-column>
+						<el-table-column
+							prop="officeDTO.name"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="110"
+							label="所属部门">
+						</el-table-column>
+						<el-table-column
+							prop="loginFlag"
+							header-align="center"
+							align="center"
+							min-width="100"
+							label="状态">
+							<template #default="scope">
+								<el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+								<el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+							</template>
+						</el-table-column>
+					</el-table>
+					<el-pagination
+						@size-change="sizeChangeHandle"
+						@current-change="currentChangeHandle"
+						:current-page="pageNo"
+						:page-sizes="[5, 10, 50, 100]"
+						:page-size="pageSize"
+						:total="total"
+						layout="total, sizes, prev, pager, next, jumper">
+					</el-pagination>
+				</el-main>
+			</el-container>
+
+			<el-aside width="200px">
+				<el-tag
+					:key="tag.id"
+					v-for="tag in dataListAllSelections"
+					closable
+					:disable-transitions="false"
+					@close="del(tag)">
+					{{tag.name}}
+				</el-tag>
+			</el-aside>
+		</el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        searchForm: {
+          loginName: '',
+          companyDTO: {
+            id: ''
+          },
+          officeDTO: {
+            id: ''
+          },
+          name: ''
+        },
+        filterText: '',
+        dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+        dataListSelections: [],
+        idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+        dataList: [],
+        dynamicTags: [],
+        officeTreeData: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orders: [],
+        loading: false,
+        visible: false
+      }
+    },
+    props: {
+      selectData: {
+        type: Array,
+        default: () => { return [] }
+      },
+      limit: {
+        type: Number,
+        default: 999999
+      }
+    },
+    watch: {
+      filterText (val) {
+        this.$refs.officeTree.filter(val)
+      }
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.$nextTick(() => {
+          this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+          this.refreshTree()
+          this.resetSearch()
+        })
+      },
+      renderContent (h, { node, data, store }) {
+		  return h('span', { class: 'custom-tree-node' }, [
+			  data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			  h('span', { class: 'text' }, node.label),
+		  ]);
+		  // return (
+        //       <span class="custom-tree-node">
+        //         {
+        //           data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+        //         }
+        //         <span class="text">{node.label}</span>
+        //       </span>
+        // )
+      },
+      getTemplateRow (index, row) {                                 // 获取选中数据
+        this.dataListSelections = [row]
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+           // 设置选中的方法
+      setSelectRow () {
+        if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+          this.$refs.userTable.clearSelection()
+          return
+        }
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        this.$refs.userTable.clearSelection()
+        for (var i = 0; i < this.dataList.length; i++) {
+          if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+                        // 设置选中,记住table组件需要使用ref="table"
+            this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+          }
+        }
+      },
+            // 记忆选择核心方法
+      changePageCoreRecordData () {
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let that = this
+              // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+        if (this.dataListAllSelections.length <= 0) {
+          this.dataListSelections.forEach(row => {
+            that.dataListAllSelections.push(row)
+          })
+          return
+        }
+                // 总选择里面的key集合
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        let selectIds = []
+                // 获取当前页选中的id
+        this.dataListSelections.forEach(row => {
+          selectIds.push(row[idKey])
+                  // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+          if (selectAllIds.indexOf(row[idKey]) < 0) {
+            that.dataListAllSelections.push(row)
+          }
+        })
+        let noSelectIds = []
+              // 得到当前页没有选中的id
+        this.dataList.forEach(row => {
+          if (selectIds.indexOf(row[idKey]) < 0) {
+            noSelectIds.push(row[idKey])
+          }
+        })
+        noSelectIds.forEach(id => {
+          if (selectAllIds.indexOf(id) >= 0) {
+            for (let i = 0; i < that.dataListAllSelections.length; i++) {
+              if (that.dataListAllSelections[i][idKey] === id) {
+                                // 如果总选择中有未被选中的,那么就删除这条
+                that.dataListAllSelections.splice(i, 1)
+                break
+              }
+            }
+          }
+        })
+      },
+     // 得到选中的所有数据
+      getAllSelectionData () {
+         // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+        this.changePageCoreRecordData()
+      },
+      filterNode (value, data) {
+        if (!value) return true
+        return data.name.indexOf(value) !== -1
+      },
+      del (tag) {
+        this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.searchForm.certType = '6'
+        if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+          this.searchForm.selectAll = 'true'
+        }
+        this.$http({
+          url: '/system-server/sys/user/list3',
+          method: 'get',
+          params: {
+            'current': this.pageNo,
+            'size': this.pageSize,
+            'orders': this.orders,
+            ...this.searchForm,
+          }
+        }).then((data) => {
+          this.dataList = data.records
+          this.total = data.total
+          this.pageNo = data.current
+          this.loading = false
+          this.$nextTick(() => {
+            this.setSelectRow()
+          })
+        })
+      },
+      refreshTree () {
+        this.$http({
+          url: `/system-server/sys/office/treeData`,
+          method: 'get',
+        }).then((data) => {
+          this.officeTreeData = data
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+       // 排序
+      sortChangeHandle (column) {
+        if (column.prop === 'officeDTO.name') {
+          column.prop = 'o.name'
+        }
+        if (column.prop === 'companyDTO.name') {
+          column.prop = 'c.name'
+        }
+        this.orders = []
+        if (column.order != null) {
+          this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+        }
+        this.refreshList()
+      },
+      handleNodeClick (data) {
+        if (data.type === '1') {
+          this.searchForm.companyDTO.id = data.id
+          this.searchForm.officeDTO.id = ''
+        } else {
+          this.searchForm.companyDTO.id = ''
+          this.searchForm.officeDTO.id = data.id
+        }
+        this.refreshList()
+      },
+      resetSearch () {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = ''
+        this.$refs.officeTree.setCurrentKey(null)
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      doSubmit () {
+        if (this.limit < this.dataListAllSelections.length) {
+          this.$message.error(`你最多只能选择${this.limit}个用户`)
+          return
+        }
+        this.visible = false
+        this.$emit('doSubmit', this.dataListAllSelections)
+      }
+    }
+  }
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 123 - 0
src/views/jy/workClientInfo/clientUserSelect/index.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./UserSelectDialog";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 3 - 3
src/views/materialManagement/userSeal/SignetList.vue

@@ -128,7 +128,7 @@
 			  <el-table :data="gridData" width="auto"  border="inner" highlight-current-row>
 				  <el-table-column property="name" label="项目名称" width="200" >
 					  <template #default="scope">
-						  <el-link  type="primary" :underline="false" @click="openProject(scope.row.id)">{{scope.row.name}}</el-link>
+						  <el-link  type="primary" :underline="false" @click="openProject(scope.row)">{{scope.row.name}}</el-link>
 					  </template>
 				  </el-table-column>
 				  <el-table-column property="no" label="项目编号" width="220" />
@@ -508,8 +508,8 @@ export default {
 			})
 		},
 		//查看项目信息
-		openProject(id){
-			this.$refs.projectDia.init('view', id)
+		openProject(row){
+			this.$refs.projectDia.init('view', row.id,row.auditId1, row.auditId2, row.auditId3)
 		}
     }
   }