<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
	<div>
		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
				 label-width="160px" @submit.native.prevent>
			<el-divider content-position="left"><i class="el-icon-document"></i>
				<span style="color: red;border-top: 20px">*</span>关联项目
				<el-button style="margin-left: 20px" type="primary" :disabled="status === 'audit' || status === 'taskFormDetail'" @click="insertEvent('base')"  plain>
					新增
				</el-button>
			</el-divider>
			<el-row  :gutter="15">
				<el-col :span="24">
					<vxe-table
						border
						:footer-method="footerMethod2"
						show-overflow
						show-footer
						ref="baseTable"
						:key="baseKey"
						class="vxe-table-element"
						:data="inputForm.projectList"
						style="margin-left: 5em"
						@cell-click=""
						@edit-closed=""
						keep-source
						highlight-current-row
						:edit-rules="tableRules"
						:edit-config="{trigger: 'click', mode: 'cell', showStatus: true, autoClear: true, icon: '-'}"
					>
						<vxe-table-column field="name" align="center" title="项目名称" :edit-render="{}" show-overflow="title">
							<template v-slot:edit="scope">
								<el-input  :disabled="status === 'audit' || status === 'taskFormDetail'" @focus="openProgramPageForm(scope.$rowIndex)" placeholder="请填写项目名称" :readonly="true" v-model="scope.row.name"/>
							</template>
						</vxe-table-column>
						<vxe-table-column field="no" align="center" title="项目编号" :edit-render="{}">
							<template v-slot:edit="scope">
								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
							</template>
						</vxe-table-column>
						<vxe-table-column field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
							<template v-slot:edit="scope">
								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
							</template>
						</vxe-table-column>
						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
							<template v-slot:edit="scope">
								<el-input :disabled="true" placeholder="请填写创建时间" v-model="scope.row.createTime"/>
							</template>
						</vxe-table-column>
						<vxe-table-column title="操作" align="center" width="100">
							<template v-slot="scope">
								<el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'base')">删除</el-button>
							</template>
						</vxe-table-column>
					</vxe-table>
				</el-col>
			</el-row>
			<el-divider content-position="left"><i class="el-icon-document"></i>
				基本信息
			</el-divider>
			<el-row  :gutter="15">
				<el-col :span="12">
					<el-form-item label="申请人" prop="createByName"
								  :rules="[ ]">
						<el-input :disabled="true" v-model="inputForm.createByName" ></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" ></el-input>
					</el-form-item>
				</el-col>
				<el-col :span="12">
					<el-form-item label="用印类型" prop="types"
								  :rules="[
							 {required: true, message:'用印类型不能为空', trigger:'blur'}
							]">
						<el-cascader style="width: 100%" v-model="inputForm.types" :options="typeData" @change="handleChange" placeholder="请选择"  clearable />
					</el-form-item>
				</el-col>
				<el-col :span="12">
					<el-form-item label="用印份数" prop="number"
								  :rules="[
							 {required: true, message:'用印份数不能为空', trigger:'blur'}

							]">
						<el-input oninput="value=value.replace(/[^\d]/g,'')" :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="inputForm.number" placeholder="请输入用印份数" ></el-input>
					</el-form-item>
				</el-col>

				<el-col :span="24">
					<el-form-item label="说明" prop="remarks"
								  :rules="[
                        {required: true, message:'说明不能为空', trigger:'blur'}
               ]">
						<el-input type="textarea" placeholder="请输入说明"  maxlength="500"  style="width:100%" v-model="inputForm.remarks" show-word-limit></el-input>
					</el-form-item>
				</el-col>
			</el-row>
		</el-form>
		<!--        附件-->
		<UpLoadComponent ref="uploadComponent"></UpLoadComponent>
		<ProjectForm ref="projectForm" @getProgram="getProgram"></ProjectForm>

	</div>
</template>

<script>
	import XEUtils from 'xe-utils'
	import SignetService from '@/api/jy/SignetService'
	import UpLoadComponent from '@/views/common/UpLoadComponent'
	import ProjectForm from './ProjectForm'
	import dictService from "@/api/sys/dictService";
	export default {
		props: {
			businessId: {
				type: String,
				default: ''
			},
			formReadOnly: {
				type: Boolean,
				default: false
			},
			status: {
				type: String,
				default: ''
			}
		},
		data () {
			return {
				title: '',
				method: '',
				loading: false,
				inputForm:{
					id:'',
					projectList:[],
					name:'',
					no:'',
					projectLeader:'',
					projectCreateDate:'',
					createById:this.$store.state.user.id,
					createByName:this.$store.state.user.name,
					createDate:this.moment(new Date()).format('YYYY-MM-DD'),
					remarks:'',
					files: [], // 附件信息
					types:[], //用印类型
					number:'', //用印份数
					projectId:'',
				},
				programRow:'',
				baseKey:'',
				typeData:[],
				keyWatch: '',

			}
		},
		SignetService: null,
		created () {
			console.log('jld ')
			this.signetService = new SignetService()
			this.getTypeList()
		},
		mounted () {
		},
		activated () {
			this.getTypeList()
		},
		components: {
			UpLoadComponent,
			ProjectForm,
		},
		computed: {
			bus: {
				get () {
					this.$refs.uploadComponent.setDividerName('附件')
					return this.businessId
				},
				set (val) {
					this.businessId = val
				}
			}
		},
		watch: {
			'keyWatch': {
				handler (newVal) {
					console.log('几里路')
					if (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)
				}
			}
		},
		methods: {
			getKeyWatch(keyWatch) {
				this.keyWatch = keyWatch
			},
			init(method, id) {
				this.method = method
				this.inputForm={
					id:'',
					projectList:[],
					name:'',
					no:'',
					projectLeader:'',
					projectCreateDate:'',
					createById:'',
					createByName:'',
					createDate:'',
					remarks:'',
					files: [], // 附件信息
					types:[], //用印类型
					number:'', //用印份数
					projectId:'',
				}
				this.typeData.forEach(option => {
					option.disabled = false
				})
				this.inputForm.id = id
				this.loading = false
				this.$nextTick(() => {
					this.$refs.inputForm.resetFields()
					this.loading = true
					if (this.commonJS.isNotEmpty(this.inputForm.id)) {
						console.log('this.inputForm.id', this.inputForm.id)
						this.signetService.queryById(this.inputForm.id).then((data)=>{
							console.log('s',data)
							this.$refs.uploadComponent.clearUpload()
							this.inputForm = this.recover(this.inputForm, data)
							var list=data.projectList
							this.inputForm.projectList=list
							this.inputForm.types=data.types
							this.inputForm.createById=data.createById
							if (this.commonJS.isEmpty(this.inputForm.createDate)) {
								this.inputForm.createDate = this.moment(new Date()).format('YYYY-MM-DD')
							}
						})
						this.$refs.uploadComponent.newUpload(method, this.inputForm.types, 'jySeal')
						this.loading = false
					}
				})
			},
			saveForm(callback) {
				this.doSubmit('save', callback)
			},
			startForm(callback) {
				this.loading = true
				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
					this.signetService.queryById(this.inputForm.id).then((data) => {
						if (data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”，就弹出提示
							this.loading = false
							this.$message.error('任务数据已发生改变或不存在，请在待办任务中确认此任务是否存在')
							throw new Error()
						} else {
							this.doSubmit('start', callback)
						}
					})
				} else {
					this.doSubmit('start', callback)
				}
			},
			async agreeForm(callback) {
				console.log('进入方法')
				this.loading = true
				await this.signetService.queryById(this.inputForm.id).then((data) => {
					if (data.status !== '2' ) { // status的值不等于“审核中”，就弹出提示
						this.loading = false
						this.$message.error('任务数据已发生改变或不存在，请在待办任务中确认此任务是否存在')
						throw new Error()
					} else {
						if (this.$store.state.user.name==='leader'){
							this.inputForm.status= '5'
						}else {
							this.inputForm.status= '2'
						}
							let param = {status: this.inputForm.status, id: this.inputForm.id}
							this.inputForm=JSON.stringify(this.inputForm)
							this.signetService.updateStatusById(param).then(() => {
								callback(data.businessTable, data.businessId, this.inputForm)
								this.loading = false
							})
					}
				})
			},
			reapplyForm(callback) {
				this.loading = true
				this.signetService.queryById(this.inputForm.id).then((data) => {
					if (data.status !== '4') { // 审核状态不是“驳回”，就弹出提示
						this.loading = false
						this.$message.error('任务数据已发生改变或不存在，请在待办任务中确认此任务是否存在')
						throw new Error('任务数据已发生改变或不存在，请在待办任务中确认此任务是否存在')
					} else {
						this.doSubmit('reapply', callback)
					}
				})
			},
			// 表单提交
			async doSubmit(status, callback) {
				this.loading = true
				console.log('5',this.inputForm)
				if (status === 'save') {
					// 暂存
					this.loading = true
					this.inputForm.status = '1'
					this.inputForm.workAttachmentDtoList = this.$refs.uploadComponent.getDataList()
					if (this.commonJS.isEmpty(this.inputForm.reportType)) {
						this.$message.error('请选择报备类型')
						this.loading = false
					}
					if (this.commonJS.isEmpty(this.inputForm.types)) {
						this.$message.error('请选择用印类型')
						this.loading = false
					}
					this.signetService.saveForm(this.inputForm).then((data) => {
						callback(data.businessTable, data.businessId, this.inputForm)
						this.loading = false
					}).catch(() => {
						this.loading = false
					})
					return
				} else if (status === 'start') {
					if (this.commonJS.isEmpty(this.inputForm.projectList)) {
						this.$message.error('请选择关联项目')
						this.loading = false
					}
					if (this.commonJS.isEmpty(this.inputForm.types)) {
						this.$message.error('请选择用印类型')
						this.loading = false
					}
					if (this.commonJS.isEmpty(this.inputForm.number)) {
						this.$message.error('请输入用印份数')
						this.loading = false
					}
					if (this.commonJS.isEmpty(this.inputForm.remarks)) {
						this.$message.error('请输入说明')
						this.loading = false
					}
					// 送审  待审核
					this.inputForm.status = '2'
				} else if (status === 'agree') {
					if (this.$store.state.user.name==='leader'){
						this.inputForm.status= '5'
					}else {
						this.inputForm.status= '2'
					}
				} else if (status === 'reapply') {
					this.inputForm.status = '2'
				}
				this.$refs['inputForm'].validate((valid) => {
					if (valid) {
						this.loading = true
						this.inputForm.files = this.$refs.uploadComponent.getDataList()
						// this.inputForm=JSON.stringify(this.inputForm)
						this.signetService.saveForm(this.inputForm).then((data) => {
							this.inputForm.id = data.businessId
							console.log('data22', data)
							callback(data.businessTable, data.businessId, this.inputForm)
							this.$refs.inputForm.resetFields()
							this.loading = false
						}).catch(() => {
							this.$refs.inputForm.resetFields()
							this.loading = false
						})
					} else {
						this.loading = false
					}
				})
			},
			close() {
				this.$refs.uploadComponent.clearUpload()
				this.$refs.inputForm.resetFields()
				this.inputForm = {
					id:'',
					projectList:[],
					name:'',
					no:'',
					projectLeader:'',
					projectCreateDate:'',
					createById:'',
					createByName:'',
					createDate:'',
					remarks:'',
					files: [], // 附件信息
					types:[], //用印类型
					number:'', //用印份数
					projectId:'',
				}
				this.visible = false
			},
			insertEvent(type) {
				if (type === 'base') {
					this.$refs.baseTable.insertAt({})
					this.inputForm.projectList.push({})
					this.baseKey = Math.random()
				}
				console.log('22',this.inputForm.projectList)
			},
			// 删除
			removeEvent(row, rowIndex, type) {
				if (type === 'base') {
					this.$refs.baseTable.remove(row)
					this.inputForm.projectList.splice(rowIndex, 1)
				}
			},
			openProgramPageForm(rowIndex) {
				this.$refs.projectForm.init()
				this.programRow = rowIndex
				console.log('11',this.programRow)
			},
			getProgram(rows) {
				console.log('1',rows)
				rows.forEach((item, index) => {
					this.inputForm.programId = item.id
					if (index === 0) {
						let r = this.inputForm.projectList[this.programRow]
						r.projectId=item.id
						r.name = item.name
						r.no = item.no
						r.projectLeader = item.projectLeader
						r.createTime = item.createTime
						console.log('2',this.inputForm.projectList[this.programRow])
					} else {
						let r = {
							projectId: item.id,
							name: item.name,
							no: item.no,
							projectLeader: item.projectLeader,
							createTime: item.createTime,
						}
						this.$refs.baseTable.insertAt(r)
						this.inputForm.projectList.push(r)
						this.baseKey = Math.random()
					}

				})
				this.$forceUpdate()
				this.programRow = ''
				// this.inputForm.reconciliationArea = this.inputForm.financeInvoiceBaseDTOList[0].location
			},
			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.signetService.queryById(this.inputForm.id).then((data) => {
							if (data.status !== '2') { // status的值不等于“审核中”，就弹出提示
								this.loading = false
								this.$message.error('任务数据已发生改变或不存在，请在待办任务中确认此任务是否存在')
								throw new Error()
							} else {
								// if (type === 'agree') {
								//   // 同意
								//   this.inputForm.status = '5'
								// }
								if (type === 'reject') {
									// 驳回
									this.inputForm.status = '4'
								}
								if (type === 'reback') {
									// 撤回
									this.inputForm.status = '3'
								}
								if (type === 'reject' || type === 'reback') {
									let param = {status: this.inputForm.status, id: this.inputForm.id}
									this.signetService.updateStatusById(param).then(() => {
										this.loading = false
										callback()
									})
								}
							}
						})
					} else if (type === 'hold') {
						this.signetService.queryById(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}
								financeInvoiceService.updateStatusById(param).then(() => {
									this.loading = false
									callback()
								})
							}
						})
					}
				}
			},
			addRedStar(h, { column }) {
				return [
					h('span', { style: 'color: #F56C6C' }, '*'),
					h('span', ' ' + column.label)
				];
			},
			getTypeList(){
				console.log(111)
				dictService.getTypeData().then((data)=>{
					console.log('a',data)
					this.typeData=data
				})
			}
		}
	}
</script>
<style scoped>
	/deep/ .el-input-number .el-input__inner {
		text-align: left;
	}
	/deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
		font-weight:700;
	}
</style>
