nxdt-uniapp/pages/violationManagenment/violationApprove.vue

283 lines
10 KiB
Vue
Raw Normal View History

2025-01-16 17:36:46 +08:00
<template>
<view>
<Navbar :title="opt.title" />
<div class="tabs" v-if="!opt.isRecord">
<u-tabs :list="tabList" @click="handleTab" lineWidth="40"></u-tabs>
</div>
<div class="content">
<div v-if="currentTab == 0">
<u-form :model="formData" ref="uForm" labelWidth="auto" labelPosition="left">
<Title title="处罚单信息" />
<u-form-item label="处罚编号" prop="violationCode">
<u-input v-model="formData.violationCode" placeholder="处罚编号" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="责任人" prop="directorName">
<u-input v-model="formData.directorName" placeholder="责任人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="受罚工程" prop="proName">
<u-input v-model="formData.proName" placeholder="受罚工程" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="受罚承包商" prop="consName">
<u-input v-model="formData.consName" placeholder="受罚承包商" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="承包商责任人" prop="personName">
<u-input v-model="formData.personName" placeholder="承包商责任人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="处罚原因" prop="punishmentReason">
<u-textarea v-model="formData.punishmentReason" placeholder="处罚原因" autoHeight disabled></u-textarea>
</u-form-item>
<u-form-item label="处罚依据" prop="punishmentBasis">
<u-textarea v-model="formData.punishmentBasis" placeholder="处罚依据" autoHeight disabled></u-textarea>
</u-form-item>
<u-form-item label="处罚金额" prop="money">
<u-input v-model="formData.money" placeholder="处罚金额" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="大写" prop="moneyUpper">
<u-input v-model="formData.moneyUpper" placeholder="大写" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="监督部门" prop="deptName">
<u-input v-model="formData.deptName" placeholder="监督部门" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="签发人" prop="signerName">
<u-input v-model="formData.signerName" placeholder="签发人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="接收人" prop="receiveName">
<u-input v-model="formData.receiveName" placeholder="接收人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="监督人" prop="supervisorName">
<u-input v-model="formData.supervisorName" placeholder="监督人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="发现人" prop="findName">
<u-input v-model="formData.findName" placeholder="发现人" border="bottom" disabled></u-input>
</u-form-item>
<u-form-item label="备注" prop="remark">
<u-textarea v-model="formData.remark" placeholder="备注" autoHeight disabled></u-textarea>
</u-form-item>
<Title title="回传信息" />
<u-form-item label="违章原因" prop="violationReasonReply">
<u-textarea v-model="formData.violationReasonReply" placeholder="违章原因" autoHeight disabled></u-textarea>
</u-form-item>
<u-form-item label="改进方法" prop="improvementContent">
<u-textarea v-model="formData.improvementContent" placeholder="改进方法" autoHeight disabled></u-textarea>
</u-form-item>
<u-form-item label="改进照片" prop="improvedPhotoList" labelPosition="top">
<div class="img-wrap">
<div class="img-item" v-for="(item, index) in formData.improvedPhotoList" :key="index">
<u-image :src="item.url" width="28vw" height="100" @click="handleImg(item)" />
</div>
</div>
</u-form-item>
<u-form-item label="罚款上交凭证" prop="receiptOfFinePhotoList" labelPosition="top">
<div class="img-wrap">
<div class="img-item" v-for="(item, index) in formData.receiptOfFinePhotoList" :key="index">
<div>
<u-image :src="item.url" width="43vw" height="100" @click="handleImg(item)" />
</div>
</div>
</div>
</u-form-item>
</u-form>
</div>
<div v-else-if="currentTab == 1">
<Title title="审批意见" />
<u-textarea
v-model="approvalOpinion"
placeholder="请输入内容"
count
height="105"
@blur="filter"
:disabled="!opt.isApprove"
/>
<Title title="审批记录" />
<Steps :data="approvalRecordList" />
<TabbarBtn
v-if="opt.isApprove"
:showBtn="opt.finalCheck != 0 ? true : false"
@reject="appReject"
@handlePermit="handleAppPermit"
@handleEnd="handleAppEnd"
/>
</div>
</div>
<u-loading-page :loading="isLoading" icon-size="39" style="z-index: 99999"></u-loading-page>
</view>
</template>
<script>
import config from '@/config'
import { filterInput } from '@/utils/regular'
import Steps from 'pages/component/Steps'
import TabbarBtn from 'pages/projectApproval/component/TabbarBtn'
import { getViolationPunishDetails, approvalHistory, submitPersonApproval } from '@/api/hiddenDangerViolation'
export default {
components: { Steps, TabbarBtn },
data() {
return {
isLoading: false,
opt: {},
currentTab: 0,
tabList: [{ name: '处罚单信息' }, { name: '审批信息' }],
formData: {
// 处罚单信息
violationCode: '', // 处罚编号
directorName: '', // 责任人
proName: '', // 受罚工程
consName: '', // 受罚承包商
personName: '', // 承包商责任人
punishmentReason: '', // 处罚原因
punishmentBasis: '', // 处罚依据
money: '', // 处罚金额
moneyUpper: '', // 处罚金额大写
deptName: '', // 监督部门
signerName: '', // 签发人
receiveName: '', // 接收人
supervisorName: '', // 监督人
findName: '', // 发现人
remark: '', // 备注
// 回传信息
violationReasonReply: '', // 违章原因
improvementContent: '', // 改进方法
improvedPhotoList: [], // 改进照片
receiptOfFinePhotoList: [] // 罚款上交凭证
},
approvalOpinion: '', // 审批意见
approvalRecordList: [] // 审批记录
}
},
onLoad(opt) {
this.opt = JSON.parse(opt.params)
this.currentTab = this.opt.isRecord ? 1 : 0
console.log('🚀 ~ onLoad ~ this.opt', this.opt)
this.getDetail()
this.getApprovalHistory()
},
methods: {
// 获取详情
async getDetail() {
this.isLoading = true
try {
const params = { violationId: this.opt.violationId }
console.log('🚀 ~ getDetail ~ params', params)
const res = await getViolationPunishDetails(params)
console.log('🚀 ~ getDetail ~ res', res)
this.formData = { ...this.formData, ...res.data }
if (this.formData.improvedPhotoList.length > 0) {
this.formData.improvedPhotoList.forEach(item => {
item.url = config.fileUrl + item.url
})
}
if (this.formData.receiptOfFinePhotoList.length > 0) {
this.formData.receiptOfFinePhotoList.forEach(item => {
item.url = config.fileUrl + item.url
})
}
} catch (error) {
console.log('🚀 ~ getDetail ~ error', error)
} finally {
this.isLoading = false
}
},
// 获取审批记录
async getApprovalHistory() {
try {
const params = { taskId: this.opt.taskId, checkType: this.opt.isRecord ? 2 : 1 }
console.log('🚀 ~ 审批记录 ~ params:', params)
const res = await approvalHistory(params)
console.log('🚀 ~ 审批记录 ~ res:', res)
this.approvalRecordList = res.data
} catch (error) {
console.log('获取审批记录失败', error)
}
},
handleTab(item) {
console.log('🚀 ~ handleTab ~ item', item)
this.currentTab = item.index
},
// 过滤输入特殊字符
filter() {
this.approvalOpinion = filterInput(this.approvalOpinion)
},
// 预览图片
handleImg(item) {
console.log('🚀 ~ handleImg ~ item', item)
uni.previewImage({
urls: [item.url]
})
},
// 审批驳回
appReject(val) {
console.log('审批驳回原因:', val)
const params = {
reason: this.approvalOpinion,
rejectReason: val,
agree: '2'
}
this.approval(params, '审批驳回')
},
// 审批通过
handleAppPermit() {
console.log('审批通过')
const params = {
reason: this.approvalOpinion,
agree: '1'
}
this.approval(params, '审批通过')
},
// 审批结束
handleAppEnd() {
console.log('审批结束')
const params = {
reason: this.approvalOpinion,
agree: '3'
}
this.approval(params, '审批通过')
},
async approval(param, text) {
try {
this.isLoading = true
const params = {
...param,
proId: this.opt.proId,
taskId: this.opt.taskId,
procInstId: this.opt.procInsId,
taskType: this.opt.checkLevelId == '1' ? 14 : this.opt.checkLevelId == '2' ? 15 : 16,
uuid: this.opt.violationId
}
console.log('🚀 ~ 审批 ~ params:', params)
const res = await submitPersonApproval(params)
console.log('🚀 ~ 审批 ~ res:', res)
uni.showToast({
title: text,
icon: 'success',
duration: 1500
})
setTimeout(() => {
this.isLoading = false
uni.navigateBack()
}, 200)
} catch (error) {
this.isLoading = false
console.log('🚀 ~ 审批 ~ error:', error)
}
}
}
}
</script>
<style lang="scss">
.content {
padding: 20px;
.img-wrap {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.img-item {
margin: 5px 0;
}
}
}
</style>