You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
9.4 KiB
185 lines
9.4 KiB
var __rest = (this && this.__rest) || function (s, e) { |
|
var t = {}; |
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) |
|
t[p] = s[p]; |
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") |
|
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { |
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) |
|
t[p[i]] = s[p[i]]; |
|
} |
|
return t; |
|
}; |
|
import { jsx as _jsx } from "react/jsx-runtime"; |
|
import { ProFormUploadButton } from '@ant-design/pro-components'; |
|
import { PlusOutlined } from '@ant-design/icons'; |
|
import { formatImageUrl, getToken } from "@component/utils"; |
|
import { omit, some } from 'lodash'; |
|
import match from 'mime-match'; |
|
import { message, Upload } from 'antd'; |
|
import { getPreviewIcon, isImageUrl } from '@component/utils'; |
|
import axios from 'axios'; |
|
import download from "downloadjs"; |
|
const TYPE = [ |
|
{ imgTypeName: '第三方服务机构签约相关文件', imgType: 'RPC4100001' }, |
|
{ imgTypeName: '第三方服务机构营业执照', imgType: 'RPC4100002' }, |
|
{ imgTypeName: '第三方服务机构服务协议', imgType: 'RPC4100003' }, |
|
{ imgTypeName: '第三方服务机构附件', imgType: 'RPC4100004' }, |
|
{ imgTypeName: '专家资质证书照片', imgType: 'RPC4100005' }, |
|
{ imgTypeName: '专家签名图片', imgType: 'RPC4100006' }, |
|
{ imgTypeName: '服务申请附件', imgType: 'RPC4100007' }, |
|
{ imgTypeName: '隐患现场照片', imgType: 'RPC4100008' }, |
|
{ imgTypeName: '隐患整改照片', imgType: 'RPC4100009' }, |
|
{ imgTypeName: '风险现场照片', imgType: 'RPC4100010' }, |
|
{ imgTypeName: '风险管控照片', imgType: 'RPC4100011' }, |
|
{ imgTypeName: '风险/隐患跟踪照片', imgType: 'RPC4100012' }, |
|
{ imgTypeName: '事故预防服务签到照片', imgType: 'RPC4100013' }, |
|
{ |
|
imgTypeName: '事故预防服务现场照片/管理现状附件/过程文件', |
|
imgType: 'RPC4100014', |
|
}, |
|
{ imgTypeName: '事故预防服务现场视频', imgType: 'RPC4100015' }, |
|
{ imgTypeName: '事故预防服务现场课件/训练内容', imgType: 'RPC4100016' }, |
|
{ imgTypeName: '事故预防服务现场备注附件', imgType: 'RPC4100017' }, |
|
{ imgTypeName: '事故预防服务报告/服务成果', imgType: 'RPC4100018' }, |
|
{ imgTypeName: '服务回访附件', imgType: 'RPC4100019' }, |
|
{ imgTypeName: '服务评估报告附件', imgType: 'RPC4100020' }, |
|
{ imgTypeName: '安全宣传教育附件', imgType: 'RPC4100021' }, |
|
{ imgTypeName: '服务结算单支付凭证', imgType: 'RPC4100022' }, |
|
{ imgTypeName: '服务结算单报销凭证', imgType: 'RPC4100023' }, |
|
{ imgTypeName: '服务结算单项目合同', imgType: 'RPC4100024' }, |
|
{ imgTypeName: '其他类附件', imgType: 'RPC4100025' }, |
|
]; |
|
function getUploadValueFromEvent(e) { |
|
if (Array.isArray(e)) { |
|
return e; |
|
} |
|
const api = process.env.REACT_APP_API_URL; |
|
return ((e && |
|
e.fileList.map((item) => { |
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j; |
|
if (item.status === 'done' && |
|
((_a = item.response) === null || _a === void 0 ? void 0 : _a.code) === 0 && |
|
((_b = item.response) === null || _b === void 0 ? void 0 : _b.success)) { |
|
if (isImageUrl(item.name)) { |
|
getFileUrl(api === null || api === void 0 ? void 0 : api.replace('/base', ''), `${((_d = (_c = item.response) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.thumbUrl_path) || ((_f = (_e = item === null || item === void 0 ? void 0 : item.response) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.thumbUrl)}`).then((response) => { |
|
var _a, _b; |
|
if (response) { |
|
return Object.assign(Object.assign({}, item.response.data), { thumbUrl_path: (_b = (_a = item.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.thumbUrl_path, thumbUrl: URL.createObjectURL(response.data), response: item.response, status: '1' }); |
|
} |
|
}); |
|
} |
|
else { |
|
return Object.assign(Object.assign({}, item.response.data), { thumbUrl_path: (_h = (_g = item.response) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.thumbUrl_path, thumbUrl: getPreviewIcon(item.name), status: '1' }); |
|
} |
|
} |
|
if (item.response && ((_j = item.response) === null || _j === void 0 ? void 0 : _j.code) !== 0) { |
|
message.error(item.response.message); |
|
return null; |
|
} |
|
return item; |
|
})).filter((item) => item !== null) || []); |
|
} |
|
function compressImg(file) { |
|
const reader = new FileReader(); |
|
reader.readAsDataURL(file); |
|
return new Promise((resolve) => { |
|
reader.onload = () => { |
|
const img = new Image(); |
|
img.src = reader.result; |
|
img.onload = () => { |
|
const w = img.width; |
|
const h = img.height; |
|
console.log('w,h', w, h); |
|
const canvas = document.createElement('canvas'); |
|
canvas.width = w; |
|
canvas.height = h; |
|
const ctx = canvas.getContext('2d'); |
|
ctx.fillStyle = '#fff'; |
|
ctx.fillRect(0, 0, canvas.width, canvas.height); |
|
ctx.drawImage(img, 0, 0, w, h); |
|
// 设置压缩质量 |
|
const dataUrl = canvas.toDataURL('image/jpeg', 0.5); |
|
let blobFile = dataURLtoBlob(dataUrl); |
|
// console.log("压缩后的file----------", blobFile); |
|
resolve(blobFile); |
|
}; |
|
}; |
|
}); |
|
} |
|
function dataURLtoBlob(dataurl) { |
|
const arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]); |
|
let n = bstr.length; |
|
const u8arr = new Uint8Array(n); |
|
while (n--) { |
|
u8arr[n] = bstr.charCodeAt(n); |
|
} |
|
return new Blob([u8arr], { type: mime }); |
|
} |
|
function onPreview(file) { |
|
var _a, _b; |
|
const api = process.env.REACT_APP_API_URL; |
|
if (file === null || file === void 0 ? void 0 : file.response) { |
|
return getFileUrl(api === null || api === void 0 ? void 0 : api.replace('/base', ''), `${(_b = (_a = file === null || file === void 0 ? void 0 : file.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.url}`).then((response) => { |
|
return response.data; |
|
}).then((blob) => { |
|
if (isImageUrl(file.name)) { |
|
const blobs = new Blob([blob], { type: 'image/png' }); |
|
const url = URL.createObjectURL(blobs); |
|
window.open(url, '_blank'); |
|
} |
|
else { |
|
download(blob, file.name); |
|
} |
|
}); |
|
} |
|
return getFileUrl(api === null || api === void 0 ? void 0 : api.replace('/base', ''), `${file === null || file === void 0 ? void 0 : file.url}`).then((response) => { |
|
return response.data; |
|
}).then((blob) => { |
|
if (isImageUrl(file.name)) { |
|
const blobs = new Blob([blob], { type: 'image/png' }); |
|
const url = URL.createObjectURL(blobs); |
|
window.open(url, '_blank'); |
|
} |
|
else { |
|
download(blob, file.name); |
|
} |
|
}).catch(e => { |
|
console.log(e); |
|
}); |
|
} |
|
export default function (_a) { |
|
var { params = {}, fieldProps = {}, formItemProps, title, action } = _a, props = __rest(_a, ["params", "fieldProps", "formItemProps", "title", "action"]); |
|
function getImgType(type) { |
|
return TYPE.find((item, key) => key + 1 == type); |
|
} |
|
return (_jsx(ProFormUploadButton, Object.assign({}, props, { icon: _jsx(PlusOutlined, {}), title: title || null, fieldProps: Object.assign({ name: 'multipartFile', listType: 'picture-card', multiple: true, accept: 'image/*', headers: { |
|
token: getToken(), |
|
}, data: Object.assign(Object.assign({}, omit(params, ['type'])), getImgType(params.type)), isImageUrl: (file) => true, beforeUpload: (file) => { |
|
var _a; |
|
const isMatch = some(fieldProps.accept ? fieldProps.accept.split(',') : ['image/*'], (item) => match(file.type, item)); |
|
if (!isMatch) { |
|
message.error(`上传的文件${file.name}格式有误`); |
|
} |
|
if ((_a = file === null || file === void 0 ? void 0 : file.type) === null || _a === void 0 ? void 0 : _a.match(/image/g)) { |
|
if (file.size >= 1024 * 1000 * 8) { |
|
return compressImg(file).then((newFile) => { |
|
return new Promise((resolve) => resolve(newFile)); |
|
}); |
|
} |
|
} |
|
return isMatch || Upload.LIST_IGNORE; |
|
}, onPreview: onPreview }, fieldProps), formItemProps: Object.assign({ getValueFromEvent: getUploadValueFromEvent }, formItemProps), action: action ? action : `${process.env.REACT_APP_API_URL}/common/completeUpload` }))); |
|
} |
|
//图片url请求接口并将文件流转为地址 |
|
function getFileUrl(api, path) { |
|
return axios |
|
.get(`${api}${path}`, { |
|
responseType: 'blob', |
|
withCredentials: false, |
|
headers: { |
|
token: getToken() |
|
} |
|
}).catch(e => { |
|
console.log(e); |
|
}); |
|
}
|
|
|