<!-- 计量资料详情 --> <script name="TechnologyDataDetail" lang="ts" setup> import { ElLoading, ElMessage, ElMessageBox, dayjs } from 'element-plus' import type { IFileInfo } from './data-interface' import useUserStore from '@/store/modules/user' import { UploadFile } from '@/api/file' import { addFileMeter, updateFileMeter } from '@/api/resource/fileTechnology' import { getPhotoUrl } from '@/api/system/tool' import showPhoto from '@/components/showPhoto/index.vue' import { getDictByCode } from '@/api/system/dict' import type { dictType } from '@/global' // 从路由中传过来的参数 const type = ref<string>('') const id = ref<string>('') // 获取用户信息 const userInfo = useUserStore() const route = useRoute() const router = useRouter() const title = ref('') const basicFormRef = ref() const meterFileInfo = ref<IFileInfo>({ id: '', fileNo: '', fileName: '', versionNo: '', createUserId: '', createUserName: '', createTime: '', remark: '', file: '', fileType: '', // 文件类型 }) const meterFileRules = ref({ fileNo: [{ required: true, message: '文件编号不能为空', trigger: 'blur' }], fileName: [{ required: true, message: '文件名称不能为空', trigger: 'blur' }], versionNo: [{ required: true, message: '版本号不能为空', trigger: 'blur' }], file: [{ required: true, message: '文件附件不能为空', trigger: 'blur' }], fileType: [{ required: true, message: '文件类型不能为空', trigger: 'blur' }], }) // 表单验证规则 const minioFileUrl = ref<string>('') // -----------------------------------------字典-------------------------------------------------------------- const fileTypeList = ref<dictType[]>([]) // 文件类型 // 查询字典 const getDict = async () => { // 文件类型 getDictByCode('resourceSystemDataFileType').then((response) => { fileTypeList.value = response.data }) } getDict() // ------------------------------------------------------------------------------------------------ const resetForm = () => { sessionStorage.removeItem('meterFileInfo') // 返回列表时 将缓存中的数据删除 router.go(-1) } // 添加 const saveFileDataForm = () => { // 将创建时间改为提交的时间 meterFileInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') addFileMeter(meterFileInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') type.value = 'detail' title.value = '计量资料(详情)' } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 编辑 const updateFileDataById = () => { updateFileMeter(meterFileInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') type.value = 'detail' title.value = '计量资料(详情)' } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 保存 const saveForm = async () => { if (!basicFormRef) { return } await basicFormRef.value.validate((valid: boolean, fields: any) => { if (valid === true) { ElMessageBox.confirm( '确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then(() => { if (type.value === 'create') { saveFileDataForm() } else if (type.value === 'update') { updateFileDataById() } }) } }) } // 上传请求 const uploadQuarterlyEvaluateFile: any = (file: any) => { // if (file.file.type !== 'application/pdf') { // ElMessage.warning('请上传pdf格式') // return // } const fd = new FormData() fd.append('multipartFile', file.file) const loading = ElLoading.service({ lock: true, background: 'rgba(255, 255, 255, 0.8)', }) UploadFile(fd).then((res) => { if (res.code === 200) { ElMessage.success('上传成功') meterFileInfo.value.file = res.data[0] loading.close() basicFormRef.value.validateField('file', () => {}) } }).catch(() => { loading.close() ElMessage.error('上传失败') }) } // 预览文件 const previewFileSystem = (url: string) => { console.log(url) } const initDialog = (params: any) => { // 从路由中获取参数 type.value = params.type id.value = params.id !== undefined ? params.id : '' switch (params.type) { case 'create' : title.value = '计量资料(新增)' // 创建人和创建时间设置默认值 meterFileInfo.value.createUserId = userInfo.id meterFileInfo.value.createUserName = userInfo.name meterFileInfo.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') break case 'update': title.value = '计量资料(编辑)' id.value = params.id meterFileInfo.value = JSON.parse(sessionStorage.getItem('meterFileInfo')!) break case 'detail': title.value = '计量资料(详情)' id.value = params.id meterFileInfo.value = JSON.parse(sessionStorage.getItem('meterFileInfo')!) break default: title.value = '' break } } watch(() => meterFileInfo.value.file, (newVal) => { if (newVal !== '') { getPhotoUrl(newVal).then((res) => { if (res.code === 200) { minioFileUrl.value = res.data } }) } }) onMounted(async () => { initDialog(route.query) }) </script> <template> <app-container> <detail-page :title="`${title}`"> <template #btns> <el-button v-if="type !== 'detail'" type="primary" @click="saveForm()"> 保存 </el-button> <el-button type="info" @click="resetForm()"> 关闭 </el-button> </template> <el-form ref="basicFormRef" :model="meterFileInfo" :rules="meterFileRules" label-position="right" label-width="110px" border stripe> <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="文件编号" prop="fileNo"> <el-input v-model="meterFileInfo.fileNo" placeholder="请输入文件编号" tabindex="1" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件类型" prop="fileType"> <el-select v-model="meterFileInfo.fileType" :placeholder="type === 'detail' ? ' ' : '请选择文件类型'" :disabled="type === 'detail'" class="full-width-input" > <el-option v-for="item of fileTypeList" :key="item.value" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件名称" prop="fileName"> <el-input v-model="meterFileInfo.fileName" :clearable="true" placeholder="请输入文件名称" tabindex="2" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="版本号" prop="versionNo"> <el-input v-model="meterFileInfo.versionNo" :clearable="true" placeholder="请输入文件版本号" tabindex="3" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="创建人"> <el-input v-model="meterFileInfo.createUserName" :disabled="true" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="创建时间"> <el-input v-model="meterFileInfo.createTime" :disabled="true" /> </el-form-item> </el-col> </el-row> <!-- 第二行 --> <el-row :gutter="24"> <el-col :span="18"> <el-form-item label="备注"> <el-input v-model="meterFileInfo.remark" placeholder="请输入备注信息" tabindex="4" type="textarea" :clearable="true" :disabled="type === 'detail'" :rows="2" /> </el-form-item> </el-col> </el-row> <!-- 第四行 --> <el-row :gutter="24"> <el-col :span="20"> <el-form-item label="文件附件" prop="file"> <el-input v-model="meterFileInfo.file" type="hidden" /> <!-- {{ meterFileInfo.file }} --> <show-photo v-if="meterFileInfo.file" :minio-file-name="meterFileInfo.file" /> <el-upload :show-file-list="false" :http-request="uploadQuarterlyEvaluateFile" style="width: 50%; margin-left: 20px;" > <el-button v-if="type !== 'detail'" type="primary"> <template v-if="meterFileInfo.file !== ''"> 更换附件 </template> <template v-else> 上传 </template> </el-button> </el-upload> </el-form-item> </el-col> </el-row> </el-form> </detail-page> </app-container> </template>