|
@@ -0,0 +1,417 @@
|
|
|
+<template>
|
|
|
+ <section class="report-examine v-w1200">
|
|
|
+ <el-form v-if="hasRecord" ref="form" :model="form" label-width="240px">
|
|
|
+ <el-form-item label="无政府采购严重违法行为记录证明:" prop="prove_purchase">
|
|
|
+ <el-upload
|
|
|
+ action="string"
|
|
|
+ :http-request="(file) => uploadFileHandle(file, 'prove_purchase')"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ accept="image/jpeg, image/jpg, image/png"
|
|
|
+ >
|
|
|
+ <div class="upload-container">
|
|
|
+ <div v-if="form.prove_purchase" class="avatar-container" @click.stop>
|
|
|
+ <img :src="domain + form.prove_purchase" class="avatar">
|
|
|
+ <i class="el-icon-delete" @click.stop="removeImg('prove_purchase')"></i>
|
|
|
+ </div>
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </div>
|
|
|
+ <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="有无政府采购严重违法行为:">
|
|
|
+ <el-radio-group v-model="form.prove_purchase_status">
|
|
|
+ <el-radio :label="0">无风险</el-radio>
|
|
|
+ <el-radio :label="1">有风险</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="·无被执行记录证明:" prop="prove_executed">
|
|
|
+ <el-upload
|
|
|
+ action="string"
|
|
|
+ :http-request="(file) => uploadFileHandle(file, 'prove_executed')"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ accept="image/jpeg, image/jpg, image/png"
|
|
|
+ >
|
|
|
+ <div class="upload-container">
|
|
|
+ <div v-if="form.prove_executed" class="avatar-container" @click.stop>
|
|
|
+ <img :src="domain + form.prove_executed" class="avatar">
|
|
|
+ <i class="el-icon-delete" @click.stop="removeImg('prove_executed')"></i>
|
|
|
+ </div>
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </div>
|
|
|
+ <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="有无被执行记录:">
|
|
|
+ <el-radio-group v-model="form.prove_executed_status">
|
|
|
+ <el-radio :label="0">无风险</el-radio>
|
|
|
+ <el-radio :label="1">有风险</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="无失信被执行记录证明:" prop="prove_dishonesty">
|
|
|
+ <el-upload
|
|
|
+ action="string"
|
|
|
+ :http-request="(file) => uploadFileHandle(file, 'prove_dishonesty')"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ accept="image/jpeg, image/jpg, image/png"
|
|
|
+ >
|
|
|
+ <div class="upload-container">
|
|
|
+ <div v-if="form.prove_dishonesty" class="avatar-container" @click.stop>
|
|
|
+ <img :src="domain + form.prove_dishonesty" class="avatar">
|
|
|
+ <i class="el-icon-delete" @click.stop="removeImg('prove_dishonesty')"></i>
|
|
|
+ </div>
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </div>
|
|
|
+ <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="有无失信被执行记录:">
|
|
|
+ <el-radio-group v-model="form.prove_dishonesty_status">
|
|
|
+ <el-radio :label="0">无风险</el-radio>
|
|
|
+ <el-radio :label="1">有风险</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="无安全生产严重失信记录证明:" prop="prove_produce">
|
|
|
+ <el-upload
|
|
|
+ action="string"
|
|
|
+ :http-request="(file) => uploadFileHandle(file, 'prove_produce')"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ accept="image/jpeg, image/jpg, image/png"
|
|
|
+ >
|
|
|
+ <div class="upload-container">
|
|
|
+ <div v-if="form.prove_produce" class="avatar-container" @click.stop>
|
|
|
+ <img :src="domain + form.prove_produce" class="avatar">
|
|
|
+ <i class="el-icon-delete" @click.stop="removeImg('prove_produce')"></i>
|
|
|
+ </div>
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </div>
|
|
|
+ <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="有无安全生产严重失信记录:">
|
|
|
+ <el-radio-group v-model="form.prove_produce_status">
|
|
|
+ <el-radio :label="0">无风险</el-radio>
|
|
|
+ <el-radio :label="1">有风险</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="信用中国:">
|
|
|
+ <el-upload
|
|
|
+ action="string"
|
|
|
+ :http-request="(file) => uploadFileHandle(file, 'creditchina')"
|
|
|
+ :limit="1"
|
|
|
+ :show-file-list="false"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
+ accept=".pdf"
|
|
|
+ >
|
|
|
+ <div class="upload-container">
|
|
|
+ <el-tag
|
|
|
+ v-if="form.creditchina"
|
|
|
+ type="success"
|
|
|
+ closable
|
|
|
+ @close="removePdf"
|
|
|
+ @click.stop="handlePreviewPdf(form.creditchina)"
|
|
|
+ >
|
|
|
+ {{ pdfName }}
|
|
|
+ </el-tag>
|
|
|
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
|
|
+ </div>
|
|
|
+ <div slot="tip" class="el-upload__tip">*只能上传pdf文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button :disabled="disabled" type="primary" @click="onSubmit">审核</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <Empty v-else>
|
|
|
+ <p>该记录不存在</p>
|
|
|
+ </Empty>
|
|
|
+ <el-dialog
|
|
|
+ title="提示"
|
|
|
+ :visible.sync="collectDialogVisible"
|
|
|
+ width="380px"
|
|
|
+ custom-class="collect-dialog"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ center>
|
|
|
+ <div class="dialog-content">
|
|
|
+ <p>该报告的表单信息已经收集过。</p>
|
|
|
+ <p v-if="reportInfo.confirmTime">表单提交时间: <span class="highlight-text">{{ reportInfo.confirmTime }}</span></p>
|
|
|
+ <p v-if="reportInfo.reportTime">报告生成时间: <span class="highlight-text">{{ reportInfo.reportTime }}</span></p>
|
|
|
+ <p v-if="reportInfo.emailTime">邮件发送时间: <span class="highlight-text">{{ reportInfo.emailTime }}</span></p>
|
|
|
+ </div>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="collectDialogVisible = false">我知道了</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ <el-dialog
|
|
|
+ title="提示"
|
|
|
+ :visible.sync="againDialogVisible"
|
|
|
+ width="380px"
|
|
|
+ custom-class="collect-dialog"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :close-on-press-escape="false"
|
|
|
+ center>
|
|
|
+ <div class="dialog-content">
|
|
|
+ <p>该报告的表单信息已经收集过,是否重新提交?</p>
|
|
|
+ </div>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="againDialogVisible = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="confirmFn">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ </section>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { Form, FormItem, Radio, RadioGroup, Button, Upload, Tag, Icon, Dialog } from 'element-ui'
|
|
|
+import { ajaxUploadFile, ajaxUpdateCreditReport, ajaxGetCreditReport } from '@/api/modules'
|
|
|
+import Empty from '@/components/common/Empty.vue'
|
|
|
+export default {
|
|
|
+ name: 'report-examine',
|
|
|
+ components: {
|
|
|
+ [Form.name]: Form,
|
|
|
+ [FormItem.name]: FormItem,
|
|
|
+ [Radio.name]: Radio,
|
|
|
+ [RadioGroup.name]: RadioGroup,
|
|
|
+ [Button.name]: Button,
|
|
|
+ [Upload.name]: Upload,
|
|
|
+ [Tag.name]: Tag,
|
|
|
+ [Icon.name]: Icon,
|
|
|
+ [Dialog.name]: Dialog,
|
|
|
+ Empty
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ hasRecord: true,
|
|
|
+ id: '',
|
|
|
+ form: {
|
|
|
+ prove_purchase: '',
|
|
|
+ prove_purchase_status: 0,
|
|
|
+ prove_executed: '',
|
|
|
+ prove_executed_status: 0,
|
|
|
+ prove_dishonesty: '',
|
|
|
+ prove_dishonesty_status: 0,
|
|
|
+ prove_produce: '',
|
|
|
+ prove_produce_status: 0,
|
|
|
+ creditchina: ''
|
|
|
+ },
|
|
|
+ pdfName: '',
|
|
|
+ domain: window.location.origin,
|
|
|
+ reportInfo: {
|
|
|
+ confirmTime: null,
|
|
|
+ reportTime: null,
|
|
|
+ emailTime: null,
|
|
|
+ status: 0
|
|
|
+ },
|
|
|
+ collectDialogVisible: false,
|
|
|
+ againDialogVisible: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ disabled() {
|
|
|
+ return !this.form.prove_purchase || !this.form.prove_executed || !this.form.prove_dishonesty || !this.form.prove_produce || !this.form.creditchina
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.id = this.$route.query?.id
|
|
|
+ if (this.id) {
|
|
|
+ this.getCreditReportForm()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async getCreditReportForm() {
|
|
|
+ const { data, status, msg } = await ajaxGetCreditReport({ id: this.id })
|
|
|
+ if (status === 1) {
|
|
|
+ this.hasRecord = true
|
|
|
+ const { prove_purchase, prove_purchase_status, prove_executed, prove_executed_status, prove_dishonesty, prove_dishonesty_status, prove_produce, prove_produce_status, creditchina } = data
|
|
|
+ this.reportInfo.status = data.status
|
|
|
+ if (data.status >= 0) {
|
|
|
+ this.form = {
|
|
|
+ prove_purchase,
|
|
|
+ prove_purchase_status,
|
|
|
+ prove_executed,
|
|
|
+ prove_executed_status,
|
|
|
+ prove_dishonesty,
|
|
|
+ prove_dishonesty_status,
|
|
|
+ prove_produce,
|
|
|
+ prove_produce_status,
|
|
|
+ creditchina
|
|
|
+ }
|
|
|
+ if(creditchina){
|
|
|
+ const filename = creditchina.split('/').pop()
|
|
|
+ this.pdfName = filename
|
|
|
+ }
|
|
|
+ this.reportInfo.confirmTime = data.submit_time
|
|
|
+ this.reportInfo.reportTime = data.complete_time
|
|
|
+ this.reportInfo.emailTime = data.send_mail_time
|
|
|
+ this.collectDialogVisible = true
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$toast(msg)
|
|
|
+ this.hasRecord = false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async uploadFileHandle(file, filed) {
|
|
|
+ const params = new FormData()
|
|
|
+ params.append('type', 'bidCreditReportFile')
|
|
|
+ params.append('bidCreditReportFile', file.file)
|
|
|
+ try {
|
|
|
+ const { error: code, url, filename } = await ajaxUploadFile(params)
|
|
|
+ if (code === 0 && url) {
|
|
|
+ this.form[filed] = url
|
|
|
+ if(filed === 'creditchina'){
|
|
|
+ this.pdfName = filename
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('上传失败:', error)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handlePreviewPdf(url) {
|
|
|
+ if (!url) return
|
|
|
+ const pdfUrl = window.location.origin + url
|
|
|
+ window.open(pdfUrl, '_blank')
|
|
|
+ },
|
|
|
+ removePdf() {
|
|
|
+ this.form.creditchina = ''
|
|
|
+ this.pdfName = ''
|
|
|
+ },
|
|
|
+ removeImg(file) {
|
|
|
+ this.form[file] = ''
|
|
|
+ },
|
|
|
+ beforeUpload(file) {
|
|
|
+ const isLt2M = file.size / 1024 / 1024 < 10
|
|
|
+ if (!isLt2M) {
|
|
|
+ this.$toast('上传文件大小不能超过 10MB!')
|
|
|
+ }
|
|
|
+ return isLt2M
|
|
|
+ },
|
|
|
+ async confirmFn() {
|
|
|
+ const { error_code: code, error_msg: msg } = await ajaxUpdateCreditReport({ ...this.form, id: this.id })
|
|
|
+ if (code === 0) {
|
|
|
+ this.$toast('提交成功')
|
|
|
+ window.location.reload()
|
|
|
+ } else {
|
|
|
+ this.$toast(msg)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onSubmit() {
|
|
|
+ if (this.reportInfo.status > 0) {
|
|
|
+ this.againDialogVisible = true
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ this.confirmFn()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.report-examine{
|
|
|
+ background: #fff;
|
|
|
+ ::v-deep{
|
|
|
+ .el-form{
|
|
|
+ padding: 30px;
|
|
|
+ }
|
|
|
+ .el-form-item:nth-child(odd){
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+ .el-upload__input{
|
|
|
+ display: none!important;
|
|
|
+ }
|
|
|
+ .upload-container{
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+ .avatar-uploader .el-upload {
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+ .avatar-uploader .el-upload:hover {
|
|
|
+ border-color: #409EFF;
|
|
|
+ }
|
|
|
+ .avatar-uploader-icon {
|
|
|
+ font-size: 28px;
|
|
|
+ color: #8c939d;
|
|
|
+ width: 120px;
|
|
|
+ height: 120px;
|
|
|
+ line-height: 120px;
|
|
|
+ text-align: center;
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
+ }
|
|
|
+ .avatar-container{
|
|
|
+ position: relative;
|
|
|
+ width: 120px;
|
|
|
+ height: 120px;
|
|
|
+ border: 1px dashed #d9d9d9;
|
|
|
+ border-radius: 6px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+ .el-icon-delete{
|
|
|
+ display: none;
|
|
|
+ position: absolute;
|
|
|
+ right: 2px;
|
|
|
+ top: 2px;
|
|
|
+ z-index: 10;
|
|
|
+ font-size: 22px;
|
|
|
+ color: #1d1d1d;
|
|
|
+ &:hover{
|
|
|
+ color: #1d1d1d;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .avatar {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ display: block;
|
|
|
+ z-index: 9;
|
|
|
+ }
|
|
|
+ .avatar-container:hover{
|
|
|
+ .el-icon-delete{
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+::v-deep{
|
|
|
+ .empty-container{
|
|
|
+ height: 500px;
|
|
|
+ }
|
|
|
+ .collect-dialog{
|
|
|
+ margin: 0 auto !important;
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ border-radius: 8px;
|
|
|
+ .el-dialog__body{
|
|
|
+ padding: 20px 30px;
|
|
|
+ }
|
|
|
+ .el-dialog__footer{
|
|
|
+ padding: 10px 30px 24px;
|
|
|
+ .el-button{
|
|
|
+ padding: 10px 40px;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .dialog-content{
|
|
|
+ p{
|
|
|
+ margin-bottom: 8px;
|
|
|
+ line-height: 24px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|