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

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);
});
}