UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

341 lines (340 loc) 20.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); require("./index.scss"); var icons_1 = require("../../icons"); var helper_1 = require("../../../utils/helper"); var icons_2 = require("@ant-design/icons"); var utils_1 = require("../../../renderers/Lion/utils/utils"); var Image_1 = (0, tslib_1.__importDefault)(require("../../../renderers/Image")); var antd_1 = require("antd"); var FlowTableRow_1 = (0, tslib_1.__importDefault)(require("./FlowTableRow")); var FlowResultBody_1 = (0, tslib_1.__importDefault)(require("./FlowResultBody")); // String OPERATION_STATUS_WAITING ="waiting";// 待审核 // String OPERATION_STATUS_ONDO ="ondo";// 可签核 // String OPERATION_STATUS_DOING ="doing";// 处理中 // String OPERATION_STATUS_REVERT ="revert";//撤销 // String OPERATION_STATUS_REFUSE ="refuse";//拒绝 // String OPERATION_STATUS_PASS ="pass";//通过 // String OPERATION_STATUS_PASS ="submit";//提交申请 // String OPERATION_STATUS_PASS ="return";//退回 // String OPERATION_STATUS_PASS ="referral";//已转办 // nodeType表示加签|| 会签 ||或签 || 2 || 1 || 0 var statusObj = { submit: '提交申请', waiting: '待签核', doing: '签核中', revert: '撤销', refuse: '拒绝', pass: '通过', return: '退回' }; var nodeTypeObj = { 0: '或签', 1: '会签', 2: '加签', 3: '系统签核' }; var FlowInformation = function (props) { var _a, _b; var processNode = props.processNode, flowDetail = props.flowDetail, env = props.env, render = props.render, onImageEnlarge = props.onImageEnlarge, language = props.language; var Mobile = (0, helper_1.isMobile)(); var baseUrl = ((_b = (_a = env === null || env === void 0 ? void 0 : env.axiosInstance) === null || _a === void 0 ? void 0 : _a.defaults) === null || _b === void 0 ? void 0 : _b.baseURL) || (env === null || env === void 0 ? void 0 : env.ajaxApi) || ''; var canonicalImg = /(.jpe?)g|(.png)|(.svg)|(.gif)/i; var canonicalPpd = /(.ppd)/i; var canonicalPdf = /(.pdf)/i; var canonicalXlsx = /(.xlsx)|(.xls)/i; var canonicalDocx = /(.docx)|(.doc)/; var last = ['approver_opinion1', 'approver_opinion2', 'approver_opinion3', 'approver_opinion4', 'approver_opinion5', 'approver_opinion6', 'approver_opinion7', 'approver_opinion8', 'approver_opinion9', 'approver_opinion10', 'approver_opinion11', 'approver_opinion12']; var opinion = [ // '通过', language('Flow.adopt'), // '待审核', language('Flow.pending.review'), // '撤销', language('Flow.revoke'), // '可签核', language('Flow.signable'), // '拒绝', language('Flow.refuse'), // '审核中', language('Flow.under.review'), // '提交申请', language('Flow.submit.application'), // '退回', language('Flow.returne'), // '已转办', language('Flow.transferred'), // '无需处理', language('Flow.no.processing.required'), // '自动退回', language('Flow.automatic.rollback'), // '未定义' language('Flow.undefined'), ]; var filetext = function (fileName) { if (/(.pdf)/i.test(fileName)) { return react_1.default.createElement(icons_1.Icon, { icon: 'file-pdf', className: "icon" }); } else if (/(.ppd)/i.test(fileName)) { return react_1.default.createElement(icons_1.Icon, { icon: 'file-ppd', className: "icon" }); } else if (/(.jpe?)g|(.png)|(.svg)|(.gif)/i.test(fileName)) { return react_1.default.createElement(icons_1.Icon, { icon: 'file-img', className: "icon" }); } else if (/(.xlsx)|(.xls)/i.test(fileName)) { return react_1.default.createElement(icons_1.Icon, { icon: 'file-xls', className: "icon" }); } else if (/(.docx)|(.doc)/i.test(fileName)) { return react_1.default.createElement(icons_1.Icon, { icon: 'file-doc', className: "icon" }); } else { return react_1.default.createElement(icons_1.Icon, { icon: 'file-file', className: "icon" }); } }; var mergeNodes = function (nodes) { var result = []; var group = []; for (var i = 0; i < nodes.length; i++) { var curr = nodes[i]; var prev = nodes[i - 1]; if (i > 0 && curr.nodeName !== prev.nodeName) { result.push(group); group = []; } group.push(curr); } if (group.length > 0) { result.push(group); } return result; }; var result = mergeNodes(processNode); var actual = function (val, constants) { var options = { pass: constants[0], waiting: constants[1], revert: constants[2], ondo: constants[3], refuse: constants[4], doing: constants[5], submit: constants[6], return: constants[7], referral: constants[8], nothandled: constants[9], auto_return: constants[10], // 自动退回 }; return options[val] || constants[11]; }; var decision = function (val) { var classNames = { submit: 'submit', pass: 'pass', waiting: 'waiting', revert: 'revert', ondo: 'ondo', refuse: 'refuse', doing: 'doing', // 处理中 }; var className = classNames[val] || ''; return react_1.default.createElement("div", { className: "decision_icon " + className }); }; // 文件分组 var filetsort = function (fileName) { var filePdf = []; var filePpd = []; var fileRun = []; var fileXlsx = []; var fileDocx = []; fileName.forEach(function (item) { if (canonicalPdf.test(item.name)) { filePdf.push(item); } else if (canonicalPpd.test(item.name)) { filePpd.push(item); } else if (canonicalXlsx.test(item.name)) { fileXlsx.push(item); } else if (canonicalDocx.test(item.name)) { fileDocx.push(item); } else { fileRun.push(item); } }); return (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], filePdf, true), filePpd, true), fileXlsx, true), fileDocx, true), fileRun, true); }; // 下载 // 当前流程状态 var handleStatus = function (body, dot) { var value = ''; var icon = 'default'; switch (body) { case 'doing': value = statusObj[body]; icon = 'processing'; break; case 'submit': value = statusObj[body]; icon = 'success'; break; case 'pass': value = statusObj[body]; icon = 'success'; break; case 'return': case 'refuse': value = statusObj[body]; icon = 'error'; break; case 'revert': value = statusObj[body]; icon = 'warning'; break; case 'waiting': value = statusObj[body]; icon = 'default'; break; case 'ondo': value = ''; icon = 'processing'; break; default: value = ''; icon = 'default'; break; } if (dot) { value = ''; } return react_1.default.createElement(antd_1.Badge, { status: icon, text: value, dot: dot }); }; var previewImage = function (file, showfileimg) { if (onImageEnlarge) { onImageEnlarge({ // 预览地址 src: file.thumbnailAddr, originalSrc: file.thumbnailAddr, list: showfileimg.map(function (file) { return ({ src: file.thumbnailAddr, originalSrc: file.thumbnailAddr, title: file.name }); }) }); } }; var handledownload = function (data) { var dataImg = data.attachments.filter(function (Item) { return canonicalImg.test(Item.name); }); var dataText = filetsort(data.attachments.filter(function (Item) { return !canonicalImg.test(Item.name); })); return react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { className: 'data_img' }, dataImg.map(function (item, index) { return (react_1.default.createElement("div", { className: 'pieceimg', key: index }, react_1.default.createElement(Image_1.default, { className: 'pieceimg_img', key: index, src: baseUrl + item.thumbnailAddr, originalSrc: item.addr, alt: item.name || item.preview_name, thumbRatio: '1:1', imageClassName: 'icon-fill', thumbClassName: 'pieceimg_img_data', overlays: react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("a", { "data-tooltip": language('Image.zoomIn'), "data-position": "bottom", target: "_blank", rel: "noopener", onClick: function () { return previewImage(item, dataImg); } }, react_1.default.createElement(icons_1.Icon, { icon: "view", className: "icon" })), react_1.default.createElement("a", { "data-tooltip": language('download'), "data-position": "bottom", target: "_blank", rel: "noopener", onClick: function () { (0, utils_1.downloadFile)(baseUrl + item.addr, item.name); } }, react_1.default.createElement("span", { className: "fa fa-download", style: { fontSize: '13px' } }))) }))); })), react_1.default.createElement("div", { className: 'data_text' }, dataText.map(function (item, index) { return (react_1.default.createElement("div", { className: 'textfile_xls', key: index }, react_1.default.createElement("div", { className: 'textfile_text' }, react_1.default.createElement("span", { className: 'textfile_icon' }, filetext(item.name)), react_1.default.createElement("span", { className: 'text' }, item.name)), react_1.default.createElement("div", { className: 'textfile_size' }, react_1.default.createElement("span", { className: 'item-select-tag-size' }, (0, utils_1.byteSize)(item.size)), react_1.default.createElement("span", { className: 'item-select-tag-btn', title: language('download'), onClick: function () { (0, utils_1.downloadFile)(baseUrl + item.addr, item.name); } }, react_1.default.createElement(icons_2.CloudDownloadOutlined, null))))); }))); }; var handledBy = function (val) { return react_1.default.createElement("div", { className: 'approver' }, react_1.default.createElement("div", { className: 'decision' }, react_1.default.createElement("div", { className: 'outer-layer' }, decision(val.nodeStatus))), react_1.default.createElement("div", { className: 'approver_usercontent' }, react_1.default.createElement("div", { className: 'approver_user' }, react_1.default.createElement("div", { className: 'approver_personnel' }, react_1.default.createElement("span", { className: 'approver_name' }, react_1.default.createElement("span", null, val.nodeUser.userName), val.nodeUser.userRole && react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("span", { style: { fontSize: "20px", verticalAlign: 'top' } }, " \u00B7 "), react_1.default.createElement("span", null, " ", val.nodeUser.userRole, " ")))), val.nodeStatus && react_1.default.createElement("div", { className: 'approver_status' }, val.nodeEndTime && react_1.default.createElement("span", { className: "approver_time" }, val.nodeEndTime), react_1.default.createElement("span", { className: "" + actual(val.nodeStatus, last) }, actual(val.nodeStatus, opinion)))), react_1.default.createElement("div", { className: 'put-on-display' }, val.remarkComment && react_1.default.createElement("p", { className: 'approver_content' }, val.remarkComment), val.assignComment && react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("p", { className: 'approver_content' }, react_1.default.createElement("p", { style: { color: '#3574ee', marginBottom: 4 } }, " \u52A0\u7B7E\u610F\u89C1\uFF1A"), val.assignComment)), val.attachments && handledownload(val)))); }; var before = function (item, data) { return item.some(function (item) { return item.nodeStatus == data; }); }; var handleResultBody = function (result) { return result.map(function (item, Inx) { item.sort(function (a, b) { var dateA = a.nodeEndTime ? new Date(a.nodeEndTime) : new Date('9999-12-31'); var dateB = b.nodeEndTime ? new Date(b.nodeEndTime) : new Date('9999-12-31'); return dateA.getTime() - dateB.getTime(); }); var processTitleClassName = before(item, 'doing') ? 'process_doing' : before(item, 'waiting') ? 'process_waiting' : ''; var firstNode = item[0]; return (react_1.default.createElement("div", { key: Inx, className: "process_group" }, react_1.default.createElement("div", { className: "process_title " + processTitleClassName }, firstNode.nodeStatus === 'submit' ? (react_1.default.createElement("div", { className: "process_icon" }, react_1.default.createElement(icons_1.Icon, { icon: "apply-for", className: "icon" }))) : firstNode.nodeType === 2 ? (react_1.default.createElement("div", { className: "process_icon", style: { fontSize: '28px', left: '8px' } }, react_1.default.createElement(icons_1.Icon, { icon: "approval-plus", className: "icon" }))) : (react_1.default.createElement("div", { className: "process_icon" }, react_1.default.createElement(icons_1.Icon, { icon: "examineicon", className: "icon" }))), react_1.default.createElement("div", { className: "process_list" }, firstNode.nodeName), react_1.default.createElement("div", null, firstNode.nodeType === 2 && (react_1.default.createElement("span", { style: { color: '#00000040' } }, language('Flow.add.signature'))), item.length > 1 && firstNode.nodeType === 1 && (react_1.default.createElement("span", { title: language('Flow.countersign'), style: { cursor: 'pointer', color: 'rgba(0, 0, 0, 0.45)' } }, language('Flow.countersign'), react_1.default.createElement("span", null, " "), react_1.default.createElement(icons_1.Icon, { icon: "head-meeting", className: "icon" }))), firstNode.nodeType === 3 && (react_1.default.createElement("span", { style: { color: '#00000040' } }, "\u7CFB\u7EDF\u7B7E\u6838")))), react_1.default.createElement(FlowResultBody_1.default, { node: item, handledBy: handledBy }))); }); }; return Mobile ? (react_1.default.createElement("div", { className: 'technological' }, react_1.default.createElement("div", { className: 'title' }, react_1.default.createElement("div", { className: 'titlecontent' }, react_1.default.createElement("h3", { className: 'name_const' }, language('Flow.approval.details'))), react_1.default.createElement("div", { className: 'titlecontent', style: { paddingLeft: '16px' } }, react_1.default.createElement("div", { className: "flow_path " + (!Mobile ? "flow_Mobile" : "") }, react_1.default.createElement("div", null, react_1.default.createElement("span", { className: 'outlined' }), react_1.default.createElement("span", { className: 'flow_path_text' }, language('Flow.process.start'))), react_1.default.createElement("div", { className: 'titlecontent_line', style: { height: 'calc(100% + 38px)' } })), result && handleResultBody(result)), react_1.default.createElement("div", { className: 'titlecontent', style: { paddingLeft: '16px' } }, react_1.default.createElement("div", { className: "flow_path" }, react_1.default.createElement("div", null, react_1.default.createElement("span", { className: "" + (flowDetail.flowProcess.processStatus == 'doing' ? 'outlined_doing' : 'outlined') }), react_1.default.createElement("span", { className: 'flow_path_text' }, language('Flow.end.of.process')))))))) : (react_1.default.createElement("div", { className: 'technological-table-wrapper' }, react_1.default.createElement("table", { id: 'flow-technological', className: 'technological-table', cellSpacing: 0 }, react_1.default.createElement("colgroup", null, react_1.default.createElement("col", { width: 55 }), react_1.default.createElement("col", { width: 170 }), react_1.default.createElement("col", { width: 100 }), react_1.default.createElement("col", { width: 200 }), react_1.default.createElement("col", { width: 200 }), react_1.default.createElement("col", { width: 200 }), react_1.default.createElement("col", null), processNode.some(function (itme) { return itme.assignComment; }) && react_1.default.createElement("col", null), react_1.default.createElement("col", null)), react_1.default.createElement("thead", null, react_1.default.createElement("tr", null, react_1.default.createElement("td", { style: { textAlign: 'center' } }, "\u5E8F\u53F7"), react_1.default.createElement("td", null, "\u5BA1\u6279\u8282\u70B9"), react_1.default.createElement("td", null, "\u7B7E\u6838\u7C7B\u578B"), react_1.default.createElement("td", null, "\u5BA1\u6279\u4EBA"), react_1.default.createElement("td", null, "\u5BA1\u6279\u7ED3\u679C"), react_1.default.createElement("td", null, "\u5BA1\u6279\u65F6\u95F4"), react_1.default.createElement("td", null, "\u5BA1\u6279\u610F\u89C1"), processNode.some(function (itme) { return itme.assignComment; }) && react_1.default.createElement("td", null, "\u52A0\u7B7E\u610F\u89C1"), react_1.default.createElement("td", null, "\u9644\u4EF6"))), react_1.default.createElement("tbody", null, result.map(function (node, index) { return react_1.default.createElement(FlowTableRow_1.default, { key: index, node: node, nodeTypeObj: nodeTypeObj, env: env, handleStatus: handleStatus, processNode: processNode, render: render }); }))))); }; exports.default = FlowInformation; //# sourceMappingURL=./components/Mobileprocess/FlowInformation/index.js.map