UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

270 lines (269 loc) 15.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var antd_1 = require("antd"); var helper_1 = require("../../../utils/helper"); var icons_1 = require("../../../components/icons"); var lodash_1 = require("lodash"); var message_1 = (0, tslib_1.__importDefault)(require("antd/lib/message")); var FlowFields_1 = (0, tslib_1.__importDefault)(require("./components/FlowFields")); var ActionSheet_1 = (0, tslib_1.__importDefault)(require("../../../components/Lion/ActionSheet")); require("./index.scss"); var MobileProcess = function (props) { var env = props.env, val = props.val, render = props.render, title = props.title, handleStatistics = props.handleStatistics, handleOnChange = props.handleOnChange, onImageEnlarge = props.onImageEnlarge, returnNodeApi = props.returnNodeApi, attachmentApi = props.attachmentApi; // 每一条数据,上拉拼接 var _a = (0, react_1.useState)(), flowDetail = _a[0], setFlowDetail = _a[1]; // 加载中 var _b = (0, react_1.useState)(true), spinDetail = _b[0], setSpinDetail = _b[1]; // 是否触底 var _c = (0, react_1.useState)(false), throttle = _c[0], setThrottle = _c[1]; // 请求初始 var _d = (0, react_1.useState)(1), pageNo = _d[0], setPageNo = _d[1]; var _e = (0, react_1.useState)(10), pageSize = _e[0], setPageSize = _e[1]; // 触底加载动画开关 var _f = (0, react_1.useState)(false), spinTotal = _f[0], setSpinTotal = _f[1]; // 判断是否还要触底加载 var _g = (0, react_1.useState)(false), total = _g[0], setTotal = _g[1]; // 批量处理开关 var _h = (0, react_1.useState)(false), open = _h[0], setOpen = _h[1]; // 模板...... var _j = (0, react_1.useState)(false), moreIsOpened = _j[0], setMoreIsOpened = _j[1]; var messages = (0, react_1.useRef)(null); var dropDown = (0, react_1.useRef)(null); // 批量操作数据 var _k = (0, react_1.useState)([]), batch = _k[0], setBatch = _k[1]; // 搜索框 var inputRef = (0, react_1.useRef)(null); var timeout = null; //懒加载 var touch = pageNo; var transitionHeight = 0; // 移动的距离 var startPos = 0; // 初始的值 // 触发申请 (0, react_1.useEffect)(function () { handleChange(); }, []); // 监听是否触底加载 (0, react_1.useEffect)(function () { if (throttle) { handleChange(); } }, [pageNo]); // 监听滚动,监听上拉加载,下拉刷新 (0, react_1.useEffect)(function () { scrollTopBottom(); }, []); var scrollTopBottom = function () { if (messages.current) { messages.current.parentElement.onscroll = function () { handleScroll(); }; // 下拉刷新 messages.current.parentElement.addEventListener('touchstart', handletouchstart); messages.current.parentElement.addEventListener('touchmove', handletouchmove); } }; var handleChange = function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var data, res; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: data = { page: pageNo, perPage: pageSize }; return [4 /*yield*/, env.fetcher(val.api, data)]; case 1: res = _a.sent(); if (res.status === 0) { // 判断是否有值拼接 !flowDetail ? setFlowDetail(res.data.items) : // 判断pageNo为1时重新熏染 pageNo == 1 ? setFlowDetail(res.data.items) : setFlowDetail((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], flowDetail, true), res.data.items, true)); setSpinDetail(false); handleStatistics === null || handleStatistics === void 0 ? void 0 : handleStatistics(res.data.total); // 判断传输过来的数据是否大于总数居 if (res.data.total > pageNo * pageSize) { // 最底层的加载动画 setSpinTotal(true); setTotal(false); if (messages.current) { messages.current.parentElement.onscroll = function () { handleScroll(); }; } } else { setSpinTotal(false); if (messages.current) { messages.current.parentElement.onscroll = function () { }; setTotal(true); } } if (pageNo === 1) { if (dropDown.current && messages.current) { dropDown.current.innerText = "更新完成"; dropDown.current.style.transition = 'all 0.5s ease 1s'; dropDown.current.style.height = '0px'; messages.current.parentElement.ontouchend = function () { }; } } } else { message_1.default.error(res.msg); } return [2 /*return*/]; } }); }); }; var handletouchstart = function (e) { startPos = e.touches[0].pageY; if (dropDown.current) { dropDown.current.style.transition = 'transform 0s'; } }; var handletouchmove = function (e) { var _a, _b; if (((_b = (_a = messages.current) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollTop) !== 0) return; transitionHeight = e.touches[0].pageY - startPos; if (transitionHeight > 0 && transitionHeight < 60) { messages.current.parentElement.ontouchend = function (e) { handletouchend(e); }; if (dropDown.current && messages.current) { dropDown.current.innerText = '下拉刷新'; dropDown.current.style.height = transitionHeight + 'px'; if (transitionHeight > 55) { dropDown.current.innerText = '释放更新'; } } } }; var handletouchend = function (e) { if (dropDown.current && messages.current) { if (transitionHeight > 55) { dropDown.current.innerText = "更新中"; refresh(); } else { dropDown.current.style.transition = 'all 0.5s ease 1s'; dropDown.current.style.height = '0px'; dropDown.current.style.overflow = 'hidden'; } } }; var handleScroll = function () { var _a, _b; if (!messages.current) return; var domcurrent = messages.current; // 内容高度 var domcurrentHeight = domcurrent.offsetHeight; // 容器滚动 var scrolltop = (_a = domcurrent === null || domcurrent === void 0 ? void 0 : domcurrent.parentElement) === null || _a === void 0 ? void 0 : _a.scrollTop; // 容器高度 var scrollHeight = (_b = domcurrent === null || domcurrent === void 0 ? void 0 : domcurrent.parentElement) === null || _b === void 0 ? void 0 : _b.offsetHeight; if (scrollHeight && scrolltop && (scrollHeight + scrolltop > domcurrentHeight - 50)) { setThrottle(true); if (timeout) { clearTimeout(timeout); run(); } else run(); } }; var run = function () { timeout = setTimeout(function () { //上拉刷新的值 ++touch; setPageNo(touch); }, 1000); }; // 刷新 var refresh = function () { setSpinDetail(true); if (touch == 1) handleChange(); touch = 1; setPageNo(1); setPageSize(10); }; // 防抖 var handleSearch = (0, lodash_1.debounce)(function (value) { getContactsSeek(value); }, 1000); var getContactsSeek = function (val, env) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { return [2 /*return*/]; }); }); }; var handleBatch = function (val, checked) { if (checked) { setBatch((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], batch, true), [val], false)); } else { setBatch(batch.filter(function (item) { return item !== val; })); } }; var handleDetail = function (value) { setSpinDetail(value); }; return (react_1.default.createElement(react_1.default.Fragment, null, !(0, helper_1.isMobile)() && react_1.default.createElement("div", { className: 'contacts-title-input', style: { textAlign: 'center', backgroundColor: "#fff" } }, react_1.default.createElement(antd_1.Input, { style: { maxWidth: "450px" }, ref: inputRef, placeholder: '\u641C\u7D22\u4EBA\u540D\u3001\u6807\u9898\u3001\u5185\u5BB9', onChange: function (e) { return handleSearch(e.target.value); } }), react_1.default.createElement("span", { title: '\u5237\u65B0', className: 'contacts-title-button' }, react_1.default.createElement(antd_1.Button, { onClick: refresh }, react_1.default.createElement("i", { className: "antd-Button-icon fa fa-sync" })))), react_1.default.createElement("div", { className: 'dressing_by_screening ' }, react_1.default.createElement("div", { className: 'dressing_type' }, react_1.default.createElement(ActionSheet_1.default, { isOpened: moreIsOpened, container: env.getModalContainer, round: true, className: 'aaa', onHide: function (e) { e.stopPropagation(); setMoreIsOpened(false); } }, react_1.default.createElement("div", { className: 'dressing_type_icon' }, react_1.default.createElement("div", { key: 1, onClick: function () { // setMoreIsOpened(true) } }, react_1.default.createElement("span", null, "\u6A21\u677F\u7C7B\u578B"), react_1.default.createElement("span", { className: 'dressing_icon' }, react_1.default.createElement(icons_1.Icon, { icon: "downArrow", className: 'icon' }))), react_1.default.createElement("div", { key: 2, onClick: function () { // setMoreIsOpened(true) } }, react_1.default.createElement("span", null, "\u7533\u8BF7\u4EBA"), react_1.default.createElement("span", { className: 'dressing_icon' }, react_1.default.createElement(icons_1.Icon, { icon: "downArrow", className: 'icon' }))), react_1.default.createElement("div", { key: 3, onClick: function () { // setMoreIsOpened(true) } }, react_1.default.createElement("span", null, "\u63D0\u4EA4\u65F6\u95F4"), react_1.default.createElement("span", { className: 'dressing_icon' }, react_1.default.createElement(icons_1.Icon, { icon: "downArrow", className: 'icon' })))))), react_1.default.createElement("div", { className: "dressing_batch " + (open ? "dressing_highlight" : ""), onClick: function () { title == 'todoItem' && setOpen(!open), setBatch([]); } }, react_1.default.createElement("span", { className: 'dressing_icon' }, react_1.default.createElement(icons_1.Icon, { icon: "handle", className: 'icon' })), react_1.default.createElement("span", { className: '' }, open ? "取消操作" : '批量处理'))), react_1.default.createElement("div", { ref: dropDown, className: 'dropDown' }), react_1.default.createElement("div", { ref: messages }, react_1.default.createElement(antd_1.Spin, { tip: "Loading...", spinning: spinDetail, className: "spinning_loading" }, flowDetail && flowDetail.map(function (item) { return react_1.default.createElement(FlowFields_1.default, { currentProcess: item, env: env, val: val, key: item.processInstanceId + (item.taskCreatedTime || item.startTime), render: render, onChange: handleChange, title: title, refresh: refresh, isPick: open, batch: batch, handleBatch: handleBatch, handleDetail: handleDetail, handleOnChange: handleOnChange, onImageEnlarge: onImageEnlarge, returnNodeApi: returnNodeApi, attachmentApi: attachmentApi }); }), (flowDetail && !(flowDetail.length > 0) && react_1.default.createElement(antd_1.Empty, { className: 'Empty', description: react_1.default.createElement("span", null, "\u6682\u65E0\u5F85\u5BA1\u6279") })) || (flowDetail == null && react_1.default.createElement(antd_1.Empty, { className: 'Empty', description: react_1.default.createElement("span", null, "\u6682\u65E0\u5F85\u5BA1\u6279") })))), flowDetail && flowDetail.length > 0 && (!total ? // <Spin tip="Loading..." spinning={spinTotal} style={{ width: '100%' }}></Spin> react_1.default.createElement("div", { style: { textAlign: 'center' } }, " ", react_1.default.createElement(antd_1.Button, { onClick: function () { run(), setThrottle(true); } }, "\u70B9\u51FB\u52A0\u8F7D\u66F4\u591A")) : react_1.default.createElement("div", { style: { textAlign: 'center' } }, react_1.default.createElement("span", null, "\u6CA1\u6709\u66F4\u591A\u4E86"))), open && react_1.default.createElement("div", { className: 'affirm' }, react_1.default.createElement("div", { className: 'affirm-dev', onClick: function () { } }, batch.length > 0 ? react_1.default.createElement("div", { className: 'batch_highlight' }, "\u5168\u90E8\u540C\u610F(", batch.length, ")") : react_1.default.createElement("div", { className: 'batch_unchecked' }, "\u540C\u610F(0)"))))); }; exports.default = MobileProcess; //# sourceMappingURL=./renderers/Lion/Mobileprocess/index.js.map