|
|
|
|
@ -1,162 +1,543 @@
|
|
|
|
|
<template>
|
|
|
|
|
<!-- 基于 Element UI 新增和修改弹窗 -->
|
|
|
|
|
<!-- 供应商资质详情弹窗 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
:title="!dataForm.id ? '添加' : '修改'"
|
|
|
|
|
title="供应商资质详情"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
:visible.sync="visible">
|
|
|
|
|
<!-- 新增和修改表单 -->
|
|
|
|
|
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataSubmit()" label-width="100px">
|
|
|
|
|
<!-- <el-form-item label="供应商id" prop="custId">
|
|
|
|
|
<el-input v-model="dataForm.custId" placeholder="供应商id"></el-input>
|
|
|
|
|
</el-form-item>-->
|
|
|
|
|
<el-form-item label="供应商名称" prop="custName">
|
|
|
|
|
<el-input v-model="dataForm.custName" placeholder="供应商名称"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<!-- <el-form-item label="资质id" prop="qualifyId">
|
|
|
|
|
<el-input v-model="dataForm.qualifyId" placeholder="资质id"></el-input>
|
|
|
|
|
</el-form-item>-->
|
|
|
|
|
<el-form-item label="资质名称" prop="qualifyName">
|
|
|
|
|
<el-input v-model="dataForm.qualifyName" placeholder="资质名称"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<!-- <el-form-item label="文件id" prop="fileId">
|
|
|
|
|
<el-input v-model="dataForm.fileId" placeholder="文件id"></el-input>
|
|
|
|
|
</el-form-item>-->
|
|
|
|
|
<el-form-item label="提交日期" prop="submitDate">
|
|
|
|
|
<el-input v-model="dataForm.submitDate" placeholder="提交日期"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="资质文件" prop="file">
|
|
|
|
|
<FileUploadVO v-model="dataForm.file" ></FileUploadVO>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="是否通过" prop="isPass">
|
|
|
|
|
<el-input v-model="dataForm.isPass" placeholder="是否通过"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="不通过原因" prop="passContent">
|
|
|
|
|
<el-input v-model="dataForm.passContent" placeholder="不通过原因"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="状态" prop="status">
|
|
|
|
|
<el-input v-model="dataForm.status" placeholder="状态"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="dataForm.remark" placeholder="备注"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
:visible.sync="visible"
|
|
|
|
|
width="80%">
|
|
|
|
|
<!-- 供应商基础信息展示 -->
|
|
|
|
|
<div class="base-info">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">客户代码:</span>
|
|
|
|
|
<span class="value">{{ dataForm.custCode }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">客户名称:</span>
|
|
|
|
|
<span class="value">{{ dataForm.custName }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">营业执照号码:</span>
|
|
|
|
|
<span class="value">{{ dataForm.licenseNumber || '' }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">联系方式:</span>
|
|
|
|
|
<span class="value">{{ dataForm.contactWay }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">联系人:</span>
|
|
|
|
|
<span class="value">{{ dataForm.contactPerson || '' }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">供应商类型:</span>
|
|
|
|
|
<span class="value">{{ dataForm.supplierType || '' }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 资质列表展示 -->
|
|
|
|
|
<div class="qualify-list" v-if="qualifyList.length > 0">
|
|
|
|
|
<div v-for="(qualify, index) in qualifyList" :key="index" class="qualify-item">
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">资质类型:</span>
|
|
|
|
|
<span class="value">{{ qualify.qualifyType === '1' ? '基础资质' : '其他资质' }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">资质名称:</span>
|
|
|
|
|
<span class="value">{{ qualify.qualifyName }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">是否必填:</span>
|
|
|
|
|
<span class="value required" v-if="qualify.isRequired === '1'">是</span>
|
|
|
|
|
<span class="value" v-else>否</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-divider></el-divider>
|
|
|
|
|
|
|
|
|
|
<div v-if="qualify.cmCustQualifyFileList && qualify.cmCustQualifyFileList.length > 0">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">提交日期:</span>
|
|
|
|
|
<span class="value">{{ qualify.cmCustQualifyFileList[0].submitDate || '' }}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">是否通过:</span>
|
|
|
|
|
<span class="value success" v-if="qualify.cmCustQualifyFileList[0].isPass === '1'">是</span>
|
|
|
|
|
<span class="value danger" v-else-if="qualify.cmCustQualifyFileList[0].isPass === '0'">否</span>
|
|
|
|
|
<span class="value" v-else>-</span>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">状态:</span>
|
|
|
|
|
<el-tag :type="getStatusType(qualify.cmCustQualifyFileList[0].status)">
|
|
|
|
|
{{ getStatusText(qualify.cmCustQualifyFileList[0].status) }}
|
|
|
|
|
</el-tag>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
<el-divider></el-divider>
|
|
|
|
|
|
|
|
|
|
<div class="file-section">
|
|
|
|
|
<div class="info-item">
|
|
|
|
|
<span class="label">不通过原因:</span>
|
|
|
|
|
<span class="value" v-if="qualify.cmCustQualifyFileList[0].status === '0'">
|
|
|
|
|
{{ qualify.cmCustQualifyFileList[0].remark || '无' }}
|
|
|
|
|
</span>
|
|
|
|
|
<span class="value" v-else>-</span>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 处理qualify.cmCustQualifyFileList中的files,每个cmCustQualifyFileList可能有多个files -->
|
|
|
|
|
<!-- 使用FileUploadVO组件进行文件上传和预览 -->
|
|
|
|
|
<div v-for="(qualifyFile, fileIndex) in qualify.cmCustQualifyFileList" :key="fileIndex" class="file-group"
|
|
|
|
|
style="margin-bottom: 20px;">
|
|
|
|
|
<div v-if="qualify.cmCustQualifyFileList.length > 1" class="file-group-header">
|
|
|
|
|
<span style="font-weight: 500; color: #606266;">文件组 {{ fileIndex + 1 }}</span>
|
|
|
|
|
<el-button type="danger" size="small" @click="deleteQualifyFile(qualify, fileIndex)"
|
|
|
|
|
style="float: right; margin-top: -5px;">删除文件组</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else class="file-group-header">
|
|
|
|
|
<el-button type="danger" size="small" @click="deleteQualifyFile(qualify, fileIndex)"
|
|
|
|
|
style="float: right; margin-top: -5px;">删除文件组</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
<FileUploadVO
|
|
|
|
|
:value="formatFilesForUploadVO(qualifyFile.files || [])"
|
|
|
|
|
@input="updateFileList($event, qualify, fileIndex)"
|
|
|
|
|
></FileUploadVO>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else class="no-file">
|
|
|
|
|
<span>暂无上传文件</span>
|
|
|
|
|
<el-button type="primary" size="small" @click="addNewQualifyFile(qualify)" style="margin-left: 10px;">上传文件
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else class="no-data">
|
|
|
|
|
<el-empty description="暂无资质信息"></el-empty>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="visible = false">取消</el-button>
|
|
|
|
|
<el-button type="primary" @click="dataSubmit()">确定</el-button>
|
|
|
|
|
<el-button @click="visible = false">关闭</el-button>
|
|
|
|
|
<el-button type="primary" @click="saveQualifyFiles" :loading="loading">保存</el-button>
|
|
|
|
|
</span>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import * as api from '@/api/cmcustqualifyfile.js'
|
|
|
|
|
import FileUploadVO from '@/components/FileUploadVO/index.vue'
|
|
|
|
|
export default {
|
|
|
|
|
import {cmcustDetailApi, cmcustUpdateApiByFiles} from '@/api/cmcust.js'
|
|
|
|
|
import {cmcustqualifyfileDeleteApi} from '@/api/cmcustqualifyfile.js'
|
|
|
|
|
import FileUploadVO from '@/components/FileUploadVO/index.vue'
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
FileUploadVO
|
|
|
|
|
},
|
|
|
|
|
data () {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
visible: false,
|
|
|
|
|
loading: false,
|
|
|
|
|
dataForm: {
|
|
|
|
|
id: 0,
|
|
|
|
|
custId: '' ,
|
|
|
|
|
custName: '' ,
|
|
|
|
|
qualifyId: '' ,
|
|
|
|
|
qualifyName: '' ,
|
|
|
|
|
fileId: '' ,
|
|
|
|
|
fileUrl: '',
|
|
|
|
|
submitDate: '' ,
|
|
|
|
|
isPass: '' ,
|
|
|
|
|
passContent: '' ,
|
|
|
|
|
status: '' ,
|
|
|
|
|
remark: '' ,
|
|
|
|
|
custName: '',
|
|
|
|
|
custCode: '',
|
|
|
|
|
contactPerson: '',
|
|
|
|
|
contactWay: '',
|
|
|
|
|
licenseNumber: '',
|
|
|
|
|
supplierType: '',
|
|
|
|
|
createTime: '',
|
|
|
|
|
qualifyStatus: '',
|
|
|
|
|
remark: ''
|
|
|
|
|
},
|
|
|
|
|
fileList: [],
|
|
|
|
|
dataRule: {
|
|
|
|
|
custName: [
|
|
|
|
|
{ required: true, message: '供应商名称 为必填项', trigger: 'blur' }
|
|
|
|
|
],
|
|
|
|
|
qualifyName: [
|
|
|
|
|
{ required: true, message: '资质名称 为必填项', trigger: 'blur' }
|
|
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
qualifyList: []
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
init (id) { // 初始化表单验证规则
|
|
|
|
|
this.dataForm.id = id || 0
|
|
|
|
|
this.visible = true
|
|
|
|
|
this.$nextTick(function() {
|
|
|
|
|
this.$refs['dataForm'].resetFields()
|
|
|
|
|
if (this.dataForm.id) {
|
|
|
|
|
api.cmcustqualifyfileDetailApi(id).then(function(res) {
|
|
|
|
|
this.dataForm = res;
|
|
|
|
|
// 初始化文件列表
|
|
|
|
|
if (res.fileId && res.fileUrl) {
|
|
|
|
|
this.fileList = [{
|
|
|
|
|
id: res.fileId,
|
|
|
|
|
oldName: res.fileUrl.split('/').pop() || '未知文件',
|
|
|
|
|
attachFileUrl: res.fileUrl
|
|
|
|
|
}];
|
|
|
|
|
} else if (res.fileId) {
|
|
|
|
|
this.fileList = [{
|
|
|
|
|
id: res.fileId,
|
|
|
|
|
oldName: '未知文件',
|
|
|
|
|
attachFileUrl: res.fileId
|
|
|
|
|
}];
|
|
|
|
|
} else {
|
|
|
|
|
this.fileList = [];
|
|
|
|
|
}
|
|
|
|
|
}.bind(this))
|
|
|
|
|
} else {
|
|
|
|
|
this.fileList = [];
|
|
|
|
|
|
|
|
|
|
// 添加新的资质文件
|
|
|
|
|
addNewQualifyFile(qualify) {
|
|
|
|
|
// 初始化cmCustQualifyFileList数组(如果不存在)
|
|
|
|
|
if (!qualify.cmCustQualifyFileList) {
|
|
|
|
|
qualify.cmCustQualifyFileList = []
|
|
|
|
|
}
|
|
|
|
|
}.bind(this))
|
|
|
|
|
|
|
|
|
|
// 添加一个新的文件对象,包含空的files数组
|
|
|
|
|
qualify.cmCustQualifyFileList.push({
|
|
|
|
|
files: [],
|
|
|
|
|
submitDate: this.formatDateToYmdHms(new Date()), // 调用工具函数格式化
|
|
|
|
|
status: '2', // 待审核状态
|
|
|
|
|
isPass: '0',
|
|
|
|
|
remark: ''
|
|
|
|
|
});
|
|
|
|
|
// 可以在这里添加文件上传后的保存逻辑
|
|
|
|
|
this.$message.success('新增资质文件项成功')
|
|
|
|
|
},
|
|
|
|
|
// 表单数据提交
|
|
|
|
|
dataSubmit () {
|
|
|
|
|
this.$refs['dataForm'].validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
// 从fileList中获取文件信息并更新到dataForm
|
|
|
|
|
if (this.fileList && this.fileList.length > 0) {
|
|
|
|
|
const file = this.fileList[0];
|
|
|
|
|
this.dataForm.fileId = file.id || '';
|
|
|
|
|
this.dataForm.fileUrl = file.attachFileUrl || '';
|
|
|
|
|
} else {
|
|
|
|
|
this.dataForm.fileId = '';
|
|
|
|
|
this.dataForm.fileUrl = '';
|
|
|
|
|
// 日期格式化工具函数(推荐抽离复用)
|
|
|
|
|
formatDateToYmdHms(date) {
|
|
|
|
|
const year = date.getFullYear();
|
|
|
|
|
// 月份/日期/小时/分钟/秒 补零(确保两位数)
|
|
|
|
|
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需+1
|
|
|
|
|
const day = String(date.getDate()).padStart(2, '0');
|
|
|
|
|
const hour = String(date.getHours()).padStart(2, '0'); // 若需12小时制:date.getHours() % 12,不足12补0
|
|
|
|
|
const minute = String(date.getMinutes()).padStart(2, '0');
|
|
|
|
|
const second = String(date.getSeconds()).padStart(2, '0');
|
|
|
|
|
|
|
|
|
|
// 返回 yyyy-MM-dd hh:mm:ss 格式(注意:hh是12小时制,HH是24小时制,根据需求选择)
|
|
|
|
|
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
|
|
|
|
|
},
|
|
|
|
|
// 保存资质文件
|
|
|
|
|
saveQualifyFiles() {
|
|
|
|
|
// 准备保存数据
|
|
|
|
|
const saveData = {
|
|
|
|
|
id: this.dataForm.id,
|
|
|
|
|
cmCustQualifyList: this.qualifyList
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.$confirm('确认要' + (this.dataForm.id ? '修改' : '新增') + '吗?', '提示', {
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
cancelButtonText: '取消',
|
|
|
|
|
type: 'warning'
|
|
|
|
|
}).then(function() {
|
|
|
|
|
if (this.dataForm.id) {
|
|
|
|
|
api.cmcustqualifyfileUpdateApi(this.dataForm).then(function(res) {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
this.$message.success('操作成功')
|
|
|
|
|
this.loading = true
|
|
|
|
|
|
|
|
|
|
console.log('保存的数据:', saveData)
|
|
|
|
|
|
|
|
|
|
// 调用保存API
|
|
|
|
|
cmcustUpdateApiByFiles(saveData)
|
|
|
|
|
.then(res => {
|
|
|
|
|
console.log('保存API返回结果:', res)
|
|
|
|
|
// 由于API可能返回null但请求实际上成功,修改判断逻辑
|
|
|
|
|
if (res) {
|
|
|
|
|
// 如果有响应对象,检查code
|
|
|
|
|
if (res.code === 200 || res.code === undefined) {
|
|
|
|
|
this.$message.success('保存成功')
|
|
|
|
|
this.visible = false
|
|
|
|
|
this.$emit('refreshDataList')
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error(res.msg || '操作失败')
|
|
|
|
|
this.$message.error(res.message || '保存失败')
|
|
|
|
|
}
|
|
|
|
|
}.bind(this))
|
|
|
|
|
} else {
|
|
|
|
|
api.cmcustqualifyfileCreateApi(this.dataForm).then(function(res) {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
this.$message.success('操作成功')
|
|
|
|
|
// 如果返回null但请求成功(根据网络请求状态),视为成功
|
|
|
|
|
this.$message.success('保存成功')
|
|
|
|
|
this.visible = false
|
|
|
|
|
this.$emit('refreshDataList')
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error(res.msg || '操作失败')
|
|
|
|
|
}
|
|
|
|
|
}.bind(this))
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
console.error('保存失败:', err)
|
|
|
|
|
this.$message.error('保存失败,请重试')
|
|
|
|
|
})
|
|
|
|
|
.finally(() => {
|
|
|
|
|
this.loading = false
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 打开弹窗并加载数据
|
|
|
|
|
init(id) {
|
|
|
|
|
this.dataForm.id = id || 0
|
|
|
|
|
this.visible = true
|
|
|
|
|
this.qualifyList = []
|
|
|
|
|
if (this.dataForm.id) {
|
|
|
|
|
cmcustDetailApi(id).then(res => {
|
|
|
|
|
console.log('接口返回数据:', res)
|
|
|
|
|
// 设置基础信息
|
|
|
|
|
this.dataForm = {
|
|
|
|
|
id: res.id || 0,
|
|
|
|
|
custName: res.custName || '',
|
|
|
|
|
custCode: res.custCode || '',
|
|
|
|
|
contactPerson: res.contactPerson || '',
|
|
|
|
|
contactWay: res.contactWay || '',
|
|
|
|
|
licenseNumber: res.licenseNumber || '',
|
|
|
|
|
supplierType: res.supplierType || '',
|
|
|
|
|
createTime: res.createTime || '',
|
|
|
|
|
qualifyStatus: res.qualifyStatus || '',
|
|
|
|
|
remark: res.remark || ''
|
|
|
|
|
}
|
|
|
|
|
}.bind(this))
|
|
|
|
|
|
|
|
|
|
// 设置资质列表
|
|
|
|
|
if (res.cmCustQualifyList && Array.isArray(res.cmCustQualifyList)) {
|
|
|
|
|
this.qualifyList = res.cmCustQualifyList
|
|
|
|
|
}
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
console.error('获取供应商详情失败:', err)
|
|
|
|
|
this.$message.error('获取供应商详情失败')
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取状态文本
|
|
|
|
|
getStatusText(status) {
|
|
|
|
|
const statusMap = {
|
|
|
|
|
'0': '未通过',
|
|
|
|
|
'1': '已通过',
|
|
|
|
|
'2': '待审核'
|
|
|
|
|
}
|
|
|
|
|
return statusMap[String(status)] || '-'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取状态标签类型
|
|
|
|
|
getStatusType(status) {
|
|
|
|
|
const typeMap = {
|
|
|
|
|
'0': 'danger',
|
|
|
|
|
'1': 'success',
|
|
|
|
|
'2': 'warning'
|
|
|
|
|
}
|
|
|
|
|
return typeMap[String(status)] || 'info'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取资质状态文本
|
|
|
|
|
getQualifyStatusText(status) {
|
|
|
|
|
if (!status && status !== 0 && status !== '0') {
|
|
|
|
|
return '未知状态'
|
|
|
|
|
}
|
|
|
|
|
const statusMap = {
|
|
|
|
|
'0': '未提交',
|
|
|
|
|
'1': '部分提交',
|
|
|
|
|
'2': '已提交未审核',
|
|
|
|
|
'3': '审核通过',
|
|
|
|
|
'4': '审核未通过'
|
|
|
|
|
}
|
|
|
|
|
return statusMap[String(status)] || '未知状态'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取资质状态标签类型
|
|
|
|
|
getQualifyStatusType(status) {
|
|
|
|
|
if (!status && status !== 0 && status !== '0') {
|
|
|
|
|
return 'info'
|
|
|
|
|
}
|
|
|
|
|
const typeMap = {
|
|
|
|
|
'0': 'info',
|
|
|
|
|
'1': 'warning',
|
|
|
|
|
'2': 'warning',
|
|
|
|
|
'3': 'success',
|
|
|
|
|
'4': 'danger'
|
|
|
|
|
}
|
|
|
|
|
return typeMap[String(status)] || 'info'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 转换文件数据格式以适配FileUploadVO组件
|
|
|
|
|
formatFilesForUploadVO(files) {
|
|
|
|
|
console.log('原始文件数据:', files)
|
|
|
|
|
if (!files || !Array.isArray(files)) {
|
|
|
|
|
return []
|
|
|
|
|
}
|
|
|
|
|
return files.map(file => {
|
|
|
|
|
// 优先使用sattDir作为文件访问路径
|
|
|
|
|
let attachFileUrl = file.sattDir || file.attDir || file.filePath || file.url || ''
|
|
|
|
|
|
|
|
|
|
// 如果sattDir存在,直接使用,不再进行路径处理
|
|
|
|
|
// 如果sattDir不存在,才考虑路径标准化
|
|
|
|
|
if (!file.sattDir && attachFileUrl && !attachFileUrl.startsWith('http')) {
|
|
|
|
|
// 处理重复路径问题
|
|
|
|
|
attachFileUrl = attachFileUrl.replace(/(\/file\/public\/cm\/)+/g, '/file/public/cm/')
|
|
|
|
|
attachFileUrl = attachFileUrl.replace(/(file\/public\/cm\/)+/g, 'file/public/cm/')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 确保大数值ID以字符串形式传递
|
|
|
|
|
const attId = file.id || file.fileId || ''
|
|
|
|
|
const fileId = file.id || file.fileId || ''
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
// 兼容SystemAttachment的字段名称
|
|
|
|
|
attId: attId.toString(), // 确保转换为字符串
|
|
|
|
|
fileId: fileId.toString(), // 确保转换为字符串
|
|
|
|
|
name: file.name || file.fileName || '',
|
|
|
|
|
oldName: file.name || file.fileName || '',
|
|
|
|
|
attachFileUrl: attachFileUrl,
|
|
|
|
|
attDir: file.attDir || file.filePath || file.url || '',
|
|
|
|
|
attSize: file.attSize || '',
|
|
|
|
|
attType: file.attType || '',
|
|
|
|
|
remark: file.remark || '',
|
|
|
|
|
uid: file.id || file.fileId || new Date().getTime()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 更新文件列表,将上传后的文件保存到qualify.cmCustQualifyFileList中的files数组
|
|
|
|
|
updateFileList(newFiles, qualify, fileIndex) {
|
|
|
|
|
console.log('更新文件列表:', newFiles, qualify, fileIndex)
|
|
|
|
|
|
|
|
|
|
// 确保qualify.cmCustQualifyFileList和files数组存在
|
|
|
|
|
if (!qualify.cmCustQualifyFileList) {
|
|
|
|
|
qualify.cmCustQualifyFileList = []
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!qualify.cmCustQualifyFileList[fileIndex]) {
|
|
|
|
|
qualify.cmCustQualifyFileList[fileIndex] = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 将FileUploadVO组件返回的文件格式转换回后端SystemAttachment需要的格式
|
|
|
|
|
const formattedFiles = newFiles.map(file => {
|
|
|
|
|
// 处理文件路径,确保符合后端要求的格式
|
|
|
|
|
let attDir = file.attDir || file.attachFileUrl || ''
|
|
|
|
|
// 如果路径以/file/public/开头,去掉这个前缀,因为后端存储格式不需要
|
|
|
|
|
if (attDir.startsWith('/file/public/')) {
|
|
|
|
|
attDir = attDir.replace('/file/public/', '')
|
|
|
|
|
} else if (attDir.startsWith('/file/')) {
|
|
|
|
|
attDir = attDir.replace('/file/', '')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 确保大数值ID以字符串形式传递,避免Integer溢出问题
|
|
|
|
|
const attId = file.id || file.fileId || ''
|
|
|
|
|
const fileId = file.id || file.fileId || ''
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
// 严格按照SystemAttachment的字段要求设置
|
|
|
|
|
attId: attId.toString(), // 确保转换为字符串
|
|
|
|
|
fileId: fileId.toString(), // 附件id,确保转换为字符串
|
|
|
|
|
name: file.name || file.oldName || '', // 附件名称
|
|
|
|
|
attDir: attDir, // 附件路径
|
|
|
|
|
attSize: file.attSize || '', // 附件大小
|
|
|
|
|
attType: file.attType || '', // 附件类型
|
|
|
|
|
// 保留原有字段以保持兼容性
|
|
|
|
|
fileName: file.name || file.oldName || '',
|
|
|
|
|
filePath: attDir,
|
|
|
|
|
url: attDir,
|
|
|
|
|
createTime: null,
|
|
|
|
|
createdBy: null,
|
|
|
|
|
createTimeStr: null,
|
|
|
|
|
delFlag: '0',
|
|
|
|
|
updateBy: null,
|
|
|
|
|
updateTime: null,
|
|
|
|
|
i18nCode: '',
|
|
|
|
|
i18nLanguage: '',
|
|
|
|
|
originalFileName: file.name || file.oldName || '',
|
|
|
|
|
position: 0,
|
|
|
|
|
remark: file.remark || '',
|
|
|
|
|
sort: 0,
|
|
|
|
|
status: ''
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 更新files数组
|
|
|
|
|
qualify.cmCustQualifyFileList[fileIndex].files = formattedFiles
|
|
|
|
|
|
|
|
|
|
console.log('更新后的文件数组:', qualify.cmCustQualifyFileList[fileIndex].files)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 删除资质文件
|
|
|
|
|
deleteQualifyFile(qualify, fileIndex) {
|
|
|
|
|
const qualifyFile = qualify.cmCustQualifyFileList[fileIndex]
|
|
|
|
|
|
|
|
|
|
// 显示确认对话框
|
|
|
|
|
this.$confirm('确定要删除这个资质文件吗?', '提示', {
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
cancelButtonText: '取消',
|
|
|
|
|
type: 'warning'
|
|
|
|
|
}).then(() => {
|
|
|
|
|
// 检查是否有ID,如果有则调用删除接口
|
|
|
|
|
if (qualifyFile && qualifyFile.id) {
|
|
|
|
|
this.loading = true
|
|
|
|
|
let ids = [qualifyFile.id]
|
|
|
|
|
cmcustqualifyfileDeleteApi(ids)
|
|
|
|
|
.then(res => {
|
|
|
|
|
// 从数组中删除该项
|
|
|
|
|
qualify.cmCustQualifyFileList.splice(fileIndex, 1)
|
|
|
|
|
this.$message.success('删除成功')
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
// 如果没有ID,直接从数组中删除
|
|
|
|
|
qualify.cmCustQualifyFileList.splice(fileIndex, 1)
|
|
|
|
|
this.$message.success('删除成功')
|
|
|
|
|
}
|
|
|
|
|
}).catch(() => {
|
|
|
|
|
// 取消删除操作
|
|
|
|
|
this.$message.info('已取消删除')
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
.base-info {
|
|
|
|
|
margin-bottom: 20px;
|
|
|
|
|
padding: 15px;
|
|
|
|
|
background-color: #f5f7fa;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
line-height: 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item .label {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
color: #606266;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item .value {
|
|
|
|
|
color: #303133;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item .value.required {
|
|
|
|
|
color: #409eff;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item .value.success {
|
|
|
|
|
color: #67c23a;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info-item .value.danger {
|
|
|
|
|
color: #f56c6c;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.qualify-list {
|
|
|
|
|
margin-bottom: 15px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.qualify-item {
|
|
|
|
|
margin-bottom: 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.file-section {
|
|
|
|
|
margin-top: 15px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.file-group {
|
|
|
|
|
border: 1px solid #ebeef5;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 15px;
|
|
|
|
|
background-color: #fafafa;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.file-group-header {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
padding-bottom: 5px;
|
|
|
|
|
border-bottom: 1px solid #ebeef5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* FileUploadVO组件的样式已由组件内部定义 */
|
|
|
|
|
|
|
|
|
|
.no-file {
|
|
|
|
|
padding: 20px 0;
|
|
|
|
|
text-align: center;
|
|
|
|
|
color: #909399;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.no-data {
|
|
|
|
|
padding: 40px 0;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|