Commit e443a80e1689b370b1272540405006fc33b37a2c

Authored by 乔启韬
1 parent d4cc4844

子表关联表优化、移动端子表

  1 +import _PlusCircleFilled from "@ant-design/icons/es/icons/PlusCircleFilled";
  2 +import _DownOutlined from "@ant-design/icons/es/icons/DownOutlined";
  3 +import _UpOutlined from "@ant-design/icons/es/icons/UpOutlined";
  4 +import _DeleteOutlined from "@ant-design/icons/es/icons/DeleteOutlined";
  5 +
  6 +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
  7 +
  8 +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  9 +
  10 +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
  11 +
  12 +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
  13 +
  14 +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
  15 +
  16 +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  17 +
  18 +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  19 +
  20 +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  21 +
  22 +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
  23 +
  24 +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
  25 +
  26 +/* eslint-disable jsx-a11y/anchor-is-valid */
  27 +import React, { useEffect, useMemo, useState } from 'react';
  28 +import Core from '../../index'; // import { Button, Space, Popconfirm } from 'antd';
  29 +// import ArrowDown from '../../../components/ArrowDown';
  30 +
  31 +import { Collapse } from 'antd-mobile';
  32 +
  33 +// 数字转汉字
  34 +function convertToChinaNum(num) {
  35 + var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  36 + var arr2 = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千', '亿']; //可继续追加更高位转换值
  37 +
  38 + if (!num || isNaN(num)) {
  39 + return "零";
  40 + }
  41 +
  42 + var english = num.toString().split("");
  43 + var result = "";
  44 +
  45 + for (var i = 0; i < english.length; i++) {
  46 + var des_i = english.length - 1 - i; //倒序排列设值
  47 +
  48 + result = arr2[i] + result;
  49 + var arr1_index = english[des_i];
  50 + result = arr1[arr1_index] + result;
  51 + }
  52 +
  53 + result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  54 + result = result.replace(/零+/g, '零');
  55 + result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  56 + result = result.replace(/亿万/g, '亿');
  57 + result = result.replace(/零+$/, '');
  58 + result = result.replace(/^一十/g, '十');
  59 + return result;
  60 +}
  61 +
  62 +var ListForMobile = function ListForMobile(_ref) {
  63 + var _ref$displayList = _ref.displayList,
  64 + displayList = _ref$displayList === void 0 ? [] : _ref$displayList,
  65 + listData = _ref.listData,
  66 + changeList = _ref.changeList,
  67 + schema = _ref.schema,
  68 + deleteItem = _ref.deleteItem,
  69 + copyItem = _ref.copyItem,
  70 + addItem = _ref.addItem,
  71 + moveItemUp = _ref.moveItemUp,
  72 + moveItemDown = _ref.moveItemDown,
  73 + displayType = _ref.displayType,
  74 + getFieldsProps = _ref.getFieldsProps;
  75 + var _schema$props = schema.props,
  76 + props = _schema$props === void 0 ? {} : _schema$props,
  77 + itemProps = schema.itemProps;
  78 +
  79 + var _useState = useState([]),
  80 + _useState2 = _slicedToArray(_useState, 2),
  81 + allKeys = _useState2[0],
  82 + setKeys = _useState2[1]; // let addBtnProps = {
  83 + // type: 'dashed',
  84 + // children: '新增一条list',
  85 + // };
  86 + // if (props.addBtnProps && typeof props.addBtnProps === 'object') {
  87 + // addBtnProps = { ...addBtnProps, ...props.addBtnProps };
  88 + // }
  89 +
  90 +
  91 + useEffect(function () {
  92 + var _allKeys = [];
  93 + displayList.forEach(function (item, idx) {
  94 + if (item._active) {
  95 + _allKeys.push(String(idx));
  96 + }
  97 + });
  98 + setKeys(_allKeys);
  99 + }, [displayList]);
  100 +
  101 + var getTitle = function getTitle(id) {
  102 + return /*#__PURE__*/React.createElement("div", {
  103 + style: {
  104 + display: 'flex',
  105 + justifyContent: "space-between",
  106 + alignItems: 'center'
  107 + }
  108 + }, /*#__PURE__*/React.createElement("span", null, "\u6570\u636E", id + 1), /*#__PURE__*/React.createElement("a", {
  109 + onClick: function onClick(e) {
  110 + e.stopPropagation();
  111 + deleteItem(id);
  112 + },
  113 + style: {
  114 + display: 'inline-block',
  115 + padding: '0 10px'
  116 + }
  117 + }, /*#__PURE__*/React.createElement(_DeleteOutlined, {
  118 + style: {
  119 + fontSize: 16,
  120 + width: 16,
  121 + height: 16
  122 + }
  123 + })));
  124 + };
  125 +
  126 + var handleArrow = function handleArrow(active) {
  127 + if (active) {
  128 + return /*#__PURE__*/React.createElement(_UpOutlined, {
  129 + onClick: function onClick() {}
  130 + });
  131 + } else {
  132 + return /*#__PURE__*/React.createElement(_DownOutlined, null);
  133 + }
  134 + };
  135 +
  136 + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
  137 + className: "fr-card-list qx-card-mobile"
  138 + }, /*#__PURE__*/React.createElement(Collapse, {
  139 + activeKey: allKeys
  140 + }, displayList.map(function (item, idx) {
  141 + var fieldsProps = getFieldsProps(idx);
  142 + fieldsProps.displayType = displayType;
  143 + return /*#__PURE__*/React.createElement(Collapse.Panel, {
  144 + key: String(idx),
  145 + title: getTitle(idx),
  146 + arrow: handleArrow,
  147 + onClick: function onClick() {
  148 + var _active = item._active || false;
  149 +
  150 + displayList[idx]._active = !_active;
  151 + changeList(_toConsumableArray(displayList));
  152 + }
  153 + }, /*#__PURE__*/React.createElement("div", {
  154 + className: "fr-card-item qx-card-mobile-item ".concat(displayType === 'row' ? 'fr-card-item-row' : ''),
  155 + key: idx
  156 + }, /*#__PURE__*/React.createElement(Core, fieldsProps)));
  157 + }))), /*#__PURE__*/React.createElement("a", {
  158 + className: 'add-button',
  159 + onClick: function onClick() {
  160 + addItem();
  161 + }
  162 + }, /*#__PURE__*/React.createElement(_PlusCircleFilled, {
  163 + style: {
  164 + marginRight: 2,
  165 + width: 14,
  166 + height: 14
  167 + }
  168 + }), "\u70B9\u51FB\u65B0\u589E\u6570\u636E"));
  169 +};
  170 +
  171 +export default ListForMobile;
\ No newline at end of file
... ...
... ... @@ -2,18 +2,26 @@ import "antd/es/table/style";
2 2 import _Table from "antd/es/table";
3 3 import "antd/es/alert/style";
4 4 import _Alert from "antd/es/alert";
5   -import "antd/es/message/style";
6   -import _message from "antd/es/message";
  5 +import "antd/es/dropdown/style";
  6 +import _Dropdown from "antd/es/dropdown";
  7 +import "antd/es/space/style";
  8 +import _Space from "antd/es/space";
  9 +import _DownOutlined from "@ant-design/icons/es/icons/DownOutlined";
7 10 import "antd/es/input/style";
8 11 import _Input from "antd/es/input";
9 12 import _SearchOutlined from "@ant-design/icons/es/icons/SearchOutlined";
10 13 import _CloseOutlined from "@ant-design/icons/es/icons/CloseOutlined";
11 14 import _CheckOutlined from "@ant-design/icons/es/icons/CheckOutlined";
  15 +import "antd/es/message/style";
  16 +import _message from "antd/es/message";
12 17 import "antd/es/tooltip/style";
13 18 import _Tooltip from "antd/es/tooltip";
  19 +import _ExclamationCircleOutlined from "@ant-design/icons/es/icons/ExclamationCircleOutlined";
  20 +import "antd/es/menu/style";
  21 +import _Menu from "antd/es/menu";
14 22 import "antd/es/button/style";
15 23 import _Button from "antd/es/button";
16   -import _ExclamationCircleOutlined from "@ant-design/icons/es/icons/ExclamationCircleOutlined";
  24 +import _MinusOutlined from "@ant-design/icons/es/icons/MinusOutlined";
17 25 import _SelectOutlined from "@ant-design/icons/es/icons/SelectOutlined";
18 26 import _ExpandAltOutlined from "@ant-design/icons/es/icons/ExpandAltOutlined";
19 27 import _EditOutlined from "@ant-design/icons/es/icons/EditOutlined";
... ... @@ -25,7 +33,7 @@ import _ImportOutlined from "@ant-design/icons/es/icons/ImportOutlined";
25 33 import _ExportOutlined from "@ant-design/icons/es/icons/ExportOutlined";
26 34 import "antd/es/modal/style";
27 35 import _Modal from "antd/es/modal";
28   -var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection"];
  36 +var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection", "size"];
29 37
30 38 function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
31 39
... ... @@ -47,6 +55,8 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
47 55
48 56 function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
49 57
  58 +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
  59 +
50 60 function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
51 61
52 62 function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
... ... @@ -77,7 +87,8 @@ var BUTTON_ICONS_MAP = {
77 87 EyeOutlined: /*#__PURE__*/React.createElement(_EyeOutlined, null),
78 88 EditOutlined: /*#__PURE__*/React.createElement(_EditOutlined, null),
79 89 remove: /*#__PURE__*/React.createElement(_ExpandAltOutlined, null),
80   - SelectOutlined: /*#__PURE__*/React.createElement(_SelectOutlined, null)
  90 + SelectOutlined: /*#__PURE__*/React.createElement(_SelectOutlined, null),
  91 + MinusOutlined: /*#__PURE__*/React.createElement(_MinusOutlined, null)
81 92 };
82 93 var FIELD_LENGTH = 170;
83 94 var EXPORT_STATUS = {
... ... @@ -113,10 +124,11 @@ var VirtualList = function VirtualList(_ref) {
113 124 fieldName = schema.fieldName,
114 125 _schema$qxProps = schema.qxProps,
115 126 qxProps = _schema$qxProps === void 0 ? {} : _schema$qxProps,
116   - subformMode = schema.subformMode;
  127 + subformMode = schema.subformMode,
  128 + pageType = schema.pageType;
117 129
118 130 var _props$scrollY = props.scrollY,
119   - scrollY = _props$scrollY === void 0 ? 600 : _props$scrollY,
  131 + scrollY = _props$scrollY === void 0 ? 400 : _props$scrollY,
120 132 _summary = props.summary,
121 133 batchKey = props.batchKey,
122 134 type = props.type,
... ... @@ -126,6 +138,7 @@ var VirtualList = function VirtualList(_ref) {
126 138 line = _props$line === void 0 ? {} : _props$line,
127 139 searchKey = props.searchKey,
128 140 rowSelection = props.rowSelection,
  141 + size = props.size,
129 142 rest = _objectWithoutProperties(props, _excluded);
130 143
131 144 var _useVT = useVT(function () {
... ... @@ -171,6 +184,9 @@ var VirtualList = function VirtualList(_ref) {
171 184 searchName = _useState12[0],
172 185 setSearchName = _useState12[1];
173 186
  187 + var padding = useMemo(function () {
  188 + return size === 'default' ? 32 : 16;
  189 + }, [size]);
174 190 var newRowSelection = useMemo(function () {
175 191 var _bar$buttons;
176 192
... ... @@ -196,9 +212,10 @@ var VirtualList = function VirtualList(_ref) {
196 212 return _rowSelection;
197 213 }, [rowSelection, selectedRowKeys, bar]);
198 214 useEffect(function () {
199   - console.log(displayList);
200 215 displayList.forEach(function (item, index) {
201   - item.orginIdx = index;
  216 + if (_typeof(item) === 'object') {
  217 + item.orginIdx = index;
  218 + }
202 219 });
203 220 }, [displayList]);
204 221 var _displayList = []; // 筛选展示的数据
... ... @@ -248,33 +265,39 @@ var VirtualList = function VirtualList(_ref) {
248 265 index: item.hasOwnProperty('orginIdx') ? item.orginIdx : idx
249 266 }, item);
250 267 });
  268 +
  269 + var handleTotal = function handleTotal(total) {
  270 + if (!total) {
  271 + total = 0;
  272 + }
  273 +
  274 + if (props.originWidget === 'subform' || total === displayList.length) {
  275 + return "\u5171".concat(total, "\u6761\u8BB0\u5F55");
  276 + } else {
  277 + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, "\u5171", displayList.length, "\u6761\u8BB0\u5F55"), /*#__PURE__*/React.createElement("span", {
  278 + style: {
  279 + color: '#999',
  280 + fontSize: '13px'
  281 + }
  282 + }, "(", displayList.length - total, "\u6761\u4E0D\u53EF\u89C1)"));
  283 + }
  284 + };
  285 +
251 286 var pagination = useMemo(function () {
252 287 return {
253 288 total: dataSource.length,
254 289 position: ['bottomRight'],
255 290 pageSize: 10,
256 291 showTotal: function showTotal(total) {
257   - return "\u5171".concat(total, "\u6761\u8BB0\u5F55");
  292 + return handleTotal(total);
258 293 },
259 294 defaultCurrent: 1,
260 295 size: 'default'
261 296 };
262 297 }, [dataSource]);
263 298 var barButtons = useMemo(function () {
264   - var _barButtons = _.cloneDeep(bar.buttons || []); // 选择、新增位置提前
265   -
266   -
267   - ['ADD', 'SELECT'].forEach(function (code) {
268   - var _index = _barButtons.findIndex(function (item) {
269   - return item.code === code;
270   - });
  299 + var _barButtons = _.cloneDeep(bar.buttons || []); // 关联表的导入,先隐藏 TODO
271 300
272   - if (_index > -1) {
273   - var btn = _barButtons.splice(_index, 1);
274   -
275   - _barButtons.unshift.apply(_barButtons, _toConsumableArray(btn));
276   - }
277   - }); // 关联表的导入,先隐藏 TODO
278 301
279 302 if (props.originWidget === 'relSelector') {
280 303 ['IMPORT'].forEach(function (code) {
... ... @@ -309,17 +332,65 @@ var VirtualList = function VirtualList(_ref) {
309 332 }
310 333
311 334 if (props.originWidget === 'relSelector' && subformMode && type !== 'view') {
312   - _barButtons.push({
  335 + _barButtons.unshift({
313 336 code: 'subformEdit',
314 337 icon: 'EditOutlined',
315 338 batch: true,
316 339 action: 'SYS',
317   - name: '子表编辑'
  340 + name: '表格编辑'
318 341 });
  342 + } // 选择位置提前
  343 +
  344 +
  345 + ['SELECT'].forEach(function (code) {
  346 + var _index = _barButtons.findIndex(function (item) {
  347 + return item.code === code;
  348 + });
  349 +
  350 + if (_index > -1) {
  351 + var btn = _barButtons.splice(_index, 1);
  352 +
  353 + _barButtons.unshift.apply(_barButtons, _toConsumableArray(btn));
  354 + }
  355 + });
  356 +
  357 + if (type === 'add') {
  358 + return _barButtons.filter(function (item) {
  359 + return ['SELECT', 'IMPORT', 'ADD', 'BATCH_ADD'].includes(item.code);
  360 + });
  361 + } else if (type === 'view') {
  362 + return _barButtons.filter(function (item) {
  363 + return item.code === 'EXPORT';
  364 + });
  365 + }
  366 +
  367 + if (schema.isReadOnly) {
  368 + // return _barButtons.filter(item => item.code === 'EXPORT')
  369 + return [];
319 370 }
320 371
321 372 return _barButtons;
322   - }, [props]);
  373 + }, [props, type]);
  374 + var moreButtons = /*#__PURE__*/React.createElement(_Menu, null, barButtons.slice(3).map(function (item) {
  375 + var name = item.name,
  376 + code = item.code,
  377 + needConfirm = item.needConfirm,
  378 + confirmContent = item.confirmContent,
  379 + icon = item.icon,
  380 + action = item.action;
  381 + return /*#__PURE__*/React.createElement(_Menu.Item, null, /*#__PURE__*/React.createElement(_Button, _extends({
  382 + key: code,
  383 + style: {
  384 + marginLeft: 8,
  385 + border: 'none'
  386 + }
  387 + }, item, {
  388 + icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null,
  389 + onClick: function onClick() {
  390 + barBtnClick(code, needConfirm, confirmContent, action, item);
  391 + }
  392 + }), name));
  393 + }));
323 394 var columns = useMemo(function () {
324 395 return children.map(function (child, index) {
325 396 var _schema$props2;
... ... @@ -342,12 +413,12 @@ var VirtualList = function VirtualList(_ref) {
342 413 var column = ((_schema$props2 = schema.props) === null || _schema$props2 === void 0 ? void 0 : _schema$props2.column) || {};
343 414 return {
344 415 dataIndex: child,
345   - width: (column.width ? String(column.width).indexOf('px') > -1 ? Number(String(column.width).slice(0, -2)) : Number(column.width) : FIELD_LENGTH) + 16,
  416 + width: column.width ? parseInt(column.width) : FIELD_LENGTH,
346 417 align: column.align || 'left',
347 418 fixed: column.fixed || props.fixed && index < props.fixed,
348 419 title: /*#__PURE__*/React.createElement("div", {
349 420 style: {
350   - width: (parseInt(column.width) || FIELD_LENGTH) + "px"
  421 + width: (parseInt(column.width) || FIELD_LENGTH) - padding + "px"
351 422 }
352 423 }, schema.required ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
353 424 className: "fr-label-required"
... ... @@ -382,6 +453,10 @@ var VirtualList = function VirtualList(_ref) {
382 453
383 454 var handleState = function handleState(record, code, originWidget) {
384 455 if (originWidget === 'subform') {
  456 + if (code === 'COPY' && !record.id) {
  457 + return 'none';
  458 + }
  459 +
385 460 return '';
386 461 } else {
387 462 switch (code) {
... ... @@ -398,33 +473,42 @@ var VirtualList = function VirtualList(_ref) {
398 473 return '';
399 474
400 475 default:
401   - return record.hasOwnProperty('$auth') ? '' : 'none';
  476 + return record[code + '_flag_'] ? '' : 'none';
402 477 }
403 478 }
404 479 };
405 480
406   - if (!props.hideDelete && ((_line$buttons = line.buttons) === null || _line$buttons === void 0 ? void 0 : _line$buttons.length) || Array.isArray(itemProps.buttons) || props.removeable) {
  481 + if (!props.hideDelete && ((_line$buttons = line.buttons) === null || _line$buttons === void 0 ? void 0 : _line$buttons.length) || Array.isArray(itemProps.buttons)) {
407 482 var top = line.top,
408 483 _line$style = line.style,
409 484 style = _line$style === void 0 ? 'ICON' : _line$style,
410 485 fixed = line.fixed,
411 486 buttons = line.buttons;
412 487
413   - if (props.removeable && buttons.findIndex(function (item) {
414   - return item.code === 'REMOVE';
415   - }) === -1) {
416   - buttons.push({
417   - icon: 'remove',
418   - code: 'REMOVE',
419   - name: '移除',
420   - line: true,
421   - needConfirm: true,
422   - confirmContent: props.removeContent
423   - });
424   - }
425   -
426   - var len = (buttons || []).length;
427   - var action = {
  488 + if (pageType === 'add') {
  489 + if (props.originWidget === 'subform') {
  490 + line.buttons = buttons.filter(function (item) {
  491 + return item.code === 'DELETE';
  492 + });
  493 + } else if (props.originWidget === 'relSelector') {
  494 + line.buttons = buttons.filter(function (item) {
  495 + return item.code === 'REMOVE';
  496 + });
  497 + }
  498 + } // if (props.removeable && buttons.findIndex(item => item.code === 'REMOVE') === -1) {
  499 + // buttons.push({
  500 + // icon: 'remove',
  501 + // code: 'REMOVE',
  502 + // name: '移除',
  503 + // line: true,
  504 + // needConfirm: true,
  505 + // confirmContent: props.removeContent
  506 + // })
  507 + // }
  508 +
  509 +
  510 + var len = (line.buttons || []).length;
  511 + var action = schema.isReadOnly ? {} : {
428 512 title: '操作',
429 513 key: '$action',
430 514 fixed: fixed ? top ? 'left' : 'right' : props.originWidget === 'subform' ? 'right' : false,
... ... @@ -492,9 +576,10 @@ var VirtualList = function VirtualList(_ref) {
492 576 if (code === 'DELETE' && props.originWidget === 'subform') {
493 577 deleteItem(idx);
494 578 } else if (code === 'REMOVE') {
495   - deleteItem(idx);
  579 + deleteItem(record.orginIdx);
  580 + props.handleLineBtnClick(code, record, schema.$id);
496 581 } else if (code === 'COPY') {
497   - copyItem(idx);
  582 + copyItem(record.orginIdx);
498 583 } else if (item.action === 'CUSTOM') {
499 584 props.handleCustom(item, record, schema.$id);
500 585 } else {
... ... @@ -507,9 +592,10 @@ var VirtualList = function VirtualList(_ref) {
507 592 if (code === 'DELETE' && props.originWidget === 'subform') {
508 593 deleteItem(idx);
509 594 } else if (code === 'REMOVE') {
510   - deleteItem(idx);
  595 + deleteItem(record.orginIdx);
  596 + props.handleLineBtnClick(code, record, schema.$id);
511 597 } else if (code === 'COPY') {
512   - copyItem(idx);
  598 + copyItem(record.orginIdx);
513 599 } else if (item.action === 'CUSTOM') {
514 600 props.handleCustom(item, record, schema.$id);
515 601 } else {
... ... @@ -517,13 +603,13 @@ var VirtualList = function VirtualList(_ref) {
517 603 }
518 604 }
519 605 }
520   - }), style !== 'ICON' ? name : null)); // }
  606 + }), style !== 'ICON' || !item.icon ? name : null)); // }
521 607 }) : null);
522 608 }
523 609 };
524 610
525   - if (style === "ICON") {
526   - action.width = len * 26 + 16;
  611 + if (style === "ICON" || props.originWidget === 'subform') {
  612 + action.width = len * 32 + padding - 8;
527 613 } else {
528 614 var div = document.createElement('div');
529 615 div.style.position = 'absolute';
... ... @@ -531,17 +617,17 @@ var VirtualList = function VirtualList(_ref) {
531 617 div.style.fontSize = '14px';
532 618 window.document.body.appendChild(div);
533 619 var leng = 0;
534   - buttons.map(function (item) {
  620 + line.buttons.map(function (item) {
535 621 div.innerHTML = item.name;
536   - leng += div.clientWidth + 16 + (style !== 'TEXT' && item.icon ? 22 : 0);
  622 + leng += div.clientWidth + padding + (style !== 'TEXT' && item.icon ? 22 : 0);
537 623 });
538   - action.width = leng + 16;
  624 + action.width = leng + padding - 8;
539 625 div.remove();
540 626 }
541 627
542 628 if (columns.findIndex(function (item) {
543 629 return item.key === '$action';
544   - }) === -1) {
  630 + }) === -1 && len > 0 && action.title) {
545 631 if (top) {
546 632 columns.unshift(action);
547 633 } else {
... ... @@ -561,9 +647,9 @@ var VirtualList = function VirtualList(_ref) {
561 647 "percent": 0,
562 648 "status": "PROCESSING"
563 649 });
564   - queryParams = {
  650 + queryParams = _defineProperty({
565 651 dataId: props.dataId
566   - };
  652 + }, searchKey, keyWord);
567 653 appCode = qxProps.appCode, funCode = qxProps.funCode, fieldName = qxProps.fieldName;
568 654 _context.next = 5;
569 655 return props.exportChild(appCode, funCode, fieldName, queryParams);
... ... @@ -594,7 +680,8 @@ var VirtualList = function VirtualList(_ref) {
594 680 var exportData = function exportData(taskId) {
595 681 // const {appCode, funCode, viewCode} = qxProps
596 682 // taskType: UPLOAD || EXPORT
597   - props.childExportProgress(taskId).then(function (res) {
  683 + if (!taskId && !exportTaskId.current) return;
  684 + props.childExportProgress(taskId || exportTaskId.current).then(function (res) {
598 685 setProgressData(res || null);
599 686 });
600 687 };
... ... @@ -680,6 +767,68 @@ var VirtualList = function VirtualList(_ref) {
680 767 setSubEdit(false);
681 768 };
682 769
  770 + var barBtnClick = function barBtnClick(code, needConfirm, confirmContent, action, item) {
  771 + setSelectedRowKeys([]);
  772 +
  773 + if (needConfirm && confirmContent) {
  774 + if (!selectedRowKeys.length) {
  775 + return _message.warning('请选择数据');
  776 + }
  777 +
  778 + confirm({
  779 + title: confirmContent,
  780 + icon: /*#__PURE__*/React.createElement(_ExclamationCircleOutlined, null),
  781 + okText: '确认',
  782 + okType: 'danger',
  783 + cancelText: '取消',
  784 + onOk: function onOk() {
  785 + if (code === 'DELETE') {
  786 + if (props.originWidget === 'subform') {
  787 + batchDelete(selectedRowKeys);
  788 + setSelectedRowKeys([]);
  789 + } else {
  790 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  791 + }
  792 + } else if (code === 'EXPORT') {
  793 + handleExport();
  794 + } else if (code === 'SELECT') {
  795 + props.openRelSelect(schema.$id);
  796 + } else if (code === 'ADD') {
  797 + props.handleRelAdd(schema.$id);
  798 + } else if (code === 'subformEdit') {
  799 + props.handleBatchEdit(fieldName, schema.$id, selectedIds);
  800 + } else if (action === 'CUSTOM') {
  801 + props.handleCustom(item, selectedIds, schema.$id);
  802 + } else {
  803 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  804 + }
  805 + },
  806 + onCancel: function onCancel() {}
  807 + });
  808 + } else {
  809 + if (code === 'DELETE') {
  810 + if (props.originWidget === 'subform') {
  811 + batchDelete(selectedRowKeys);
  812 + setSelectedRowKeys([]);
  813 + } else {
  814 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  815 + }
  816 + } else if (code === 'EXPORT') {
  817 + handleExport();
  818 + } else if (code === 'SELECT') {
  819 + props.openRelSelect(schema.$id);
  820 + } else if (code === 'ADD') {
  821 + props.handleRelAdd(schema.$id);
  822 + } else if (code === 'subformEdit') {
  823 + props.handleBatchEdit(fieldName, schema.$id, selectedIds);
  824 + } else if (action === 'CUSTOM') {
  825 + props.handleCustom(item, selectedIds, schema.$id);
  826 + } else {
  827 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  828 + }
  829 + }
  830 + };
  831 +
683 832 return /*#__PURE__*/React.createElement(React.Fragment, null, props.editable ? isSubCanEdit ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Button, {
684 833 type: 'text',
685 834 size: "small",
... ... @@ -725,7 +874,7 @@ var VirtualList = function VirtualList(_ref) {
725 874
726 875 setKeyWord(((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.value) || '');
727 876 }
728   - }) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement("div", null, barButtons.map(function (item) {
  877 + }) : /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement("div", null, (barButtons.length > 4 ? barButtons.slice(0, 3) : barButtons.slice(0, 4)).map(function (item) {
729 878 var name = item.name,
730 879 code = item.code,
731 880 needConfirm = item.needConfirm,
... ... @@ -738,55 +887,18 @@ var VirtualList = function VirtualList(_ref) {
738 887 marginLeft: 8
739 888 }
740 889 }, item, {
741   - icon: icon ? BUTTON_ICONS_MAP[icon] : null,
  890 + icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null,
742 891 onClick: function onClick() {
743   - if (code === 'DELETE') {
744   - if (!selectedRowKeys.length) {
745   - return _message.warning('请选择数据');
746   - }
747   -
748   - if (needConfirm && confirmContent) {
749   - confirm({
750   - title: '批量删除确认',
751   - icon: /*#__PURE__*/React.createElement(_ExclamationCircleOutlined, null),
752   - content: confirmContent,
753   - okText: '确认',
754   - okType: 'danger',
755   - cancelText: '取消',
756   - onOk: function onOk() {
757   - if (props.originWidget === 'subform') {
758   - batchDelete(selectedRowKeys);
759   - setSelectedRowKeys([]);
760   - } else {
761   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
762   - }
763   - },
764   - onCancel: function onCancel() {}
765   - });
766   - } else {
767   - if (props.originWidget === 'subform') {
768   - batchDelete(selectedRowKeys);
769   - setSelectedRowKeys([]);
770   - } else {
771   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
772   - }
773   - }
774   - } else if (code === 'EXPORT') {
775   - handleExport();
776   - } else if (code === 'SELECT') {
777   - props.openRelSelect(schema.$id);
778   - } else if (code === 'ADD') {
779   - props.handleRelAdd(schema.$id);
780   - } else if (code === 'subformEdit') {
781   - props.handleBatchEdit(fieldName, schema.$id, selectedIds);
782   - } else if (action === 'CUSTOM') {
783   - props.handleCustom(item, selectedIds, schema.$id);
784   - } else {
785   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
786   - }
  892 + barBtnClick(code, needConfirm, confirmContent, action, item);
787 893 }
788 894 }), name); // }
789   - })), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) {
  895 + }), barButtons.slice(4).length ? /*#__PURE__*/React.createElement(_Dropdown, {
  896 + overlay: moreButtons
  897 + }, /*#__PURE__*/React.createElement(_Button, {
  898 + style: {
  899 + marginLeft: 8
  900 + }
  901 + }, /*#__PURE__*/React.createElement(_Space, null, "\u66F4\u591A\u64CD\u4F5C", /*#__PURE__*/React.createElement(_DownOutlined, null)))) : null), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) {
790 902 var callback = item.callback,
791 903 text = item.text,
792 904 html = item.html;
... ... @@ -841,10 +953,10 @@ var VirtualList = function VirtualList(_ref) {
841 953 x: '100%'
842 954 },
843 955 components: vt,
844   - size: "small",
  956 + size: size || 'small',
845 957 columns: columns,
846 958 dataSource: dataSource,
847   - pagination: props.originWidget === 'subform' ? false : pagination,
  959 + pagination: pagination,
848 960 style: {
849 961 marginBottom: 25
850 962 },
... ... @@ -887,7 +999,7 @@ function _handleDownload() {
887 999 switch (_context2.prev = _context2.next) {
888 1000 case 0:
889 1001 // eslint-disable-next-line prefer-rest-params
890   - isDownload = _args2[2];
  1002 + isDownload = _args2[3];
891 1003
892 1004 if (isDownload === null || Boolean(isDownload)) {
893 1005 _message.warning('即将开始下载,请勿重复点击。');
... ...
... ... @@ -28,6 +28,7 @@ import CardList from './CardList';
28 28 import TableList from './TableList';
29 29 import DrawerList from './DrawerList';
30 30 import VirtualList from './VirtualList';
  31 +import ListForMobile from "./ListForMobile";
31 32
32 33 var RenderList = function RenderList(_ref) {
33 34 var parentId = _ref.parentId,
... ... @@ -70,16 +71,19 @@ var RenderList = function RenderList(_ref) {
70 71 };
71 72
72 73 var addItem = function addItem() {
73   - var newList = [].concat(_toConsumableArray(displayList), [{}]);
  74 + var newList = [].concat(_toConsumableArray(displayList), [{
  75 + _active: true
  76 + }]);
74 77 var newIndex = newList.length - 1;
75 78 onItemChange(dataPath, newList);
76 79 return newIndex;
77 80 };
78 81
79 82 var copyItem = function copyItem(idx) {
80   - var newItem = displayList[idx];
  83 + var newItem = _.cloneDeep(displayList[idx]);
  84 +
81 85 delete newItem.id;
82   - var newList = [].concat(_toConsumableArray(displayList.slice(0, idx)), [newItem], _toConsumableArray(displayList.slice(idx)));
  86 + var newList = [].concat(_toConsumableArray(displayList.slice(0, idx + 1)), [newItem], _toConsumableArray(displayList.slice(idx + 1)));
83 87 onItemChange(dataPath, JSON.parse(JSON.stringify(newList)));
84 88 };
85 89
... ... @@ -192,6 +196,9 @@ var RenderList = function RenderList(_ref) {
192 196 case 'virtualList':
193 197 return /*#__PURE__*/React.createElement(VirtualList, displayProps);
194 198
  199 + case 'listForMobile':
  200 + return /*#__PURE__*/React.createElement(ListForMobile, displayProps);
  201 +
195 202 default:
196 203 return /*#__PURE__*/React.createElement(CardList, displayProps);
197 204 }
... ...
1 1 .fr-container .fr-card-item {
2   - border: 1px solid rgba(0, 0, 0, 0.1);
3   - border-radius: 4px;
4   - padding: 10px 12px 4px 12px;
  2 + border: 0.5px solid rgba(0, 0, 0, 0.1);
  3 + padding: 10px 0 4px 0;
5 4 margin-bottom: 8px;
6 5 position: relative;
7 6 display: flex;
... ... @@ -50,3 +49,51 @@
50 49 .rowReverse {
51 50 flex-direction: row-reverse;
52 51 }
  52 +.ant-modal-body .qx-virtualList {
  53 + margin-bottom: 0 !important;
  54 +}
  55 +.qx-card-mobile .adm-list-item-content-main {
  56 + font-size: 14px;
  57 +}
  58 +.qx-card-mobile .adm-list-default .adm-list-body {
  59 + border: none;
  60 +}
  61 +.qx-card-mobile .adm-list-item {
  62 + padding-left: 15px;
  63 +}
  64 +.qx-card-mobile .adm-list-item .adm-list-item-content {
  65 + padding-right: 15px;
  66 +}
  67 +.qx-card-mobile .adm-collapse-panel-header {
  68 + margin: 0 15px;
  69 + height: 40px;
  70 + background: #f6f7f9;
  71 + border-radius: 4px 4px 0 0;
  72 +}
  73 +.qx-card-mobile .adm-collapse-panel-header .adm-collapse-arrow {
  74 + font-size: 16px;
  75 +}
  76 +.qx-card-mobile .adm-list-item-content {
  77 + border-radius: 8px 8px 0 0;
  78 + border-top: none;
  79 +}
  80 +.qx-card-mobile .adm-list-item-content .fr-content-column {
  81 + padding: 0 15px 6px;
  82 +}
  83 +.qx-card-mobile-item {
  84 + border-radius: unset;
  85 + border-top: none;
  86 +}
  87 +.qx-card-mobile .adm-collapse-panel-content .adm-list-item-content-main {
  88 + padding: 0;
  89 +}
  90 +.qx-card-mobile .adm-list-item-content-arrow {
  91 + font-size: 15px;
  92 + width: 15px;
  93 + height: 15px;
  94 +}
  95 +.add-button {
  96 + color: #3499ff;
  97 + display: inline-block;
  98 + margin: 15px;
  99 +}
... ...
  1 +"use strict";
  2 +
  3 +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
  4 +
  5 +Object.defineProperty(exports, "__esModule", {
  6 + value: true
  7 +});
  8 +exports.default = void 0;
  9 +
  10 +var _PlusCircleFilled2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/PlusCircleFilled"));
  11 +
  12 +var _DownOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/DownOutlined"));
  13 +
  14 +var _UpOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/UpOutlined"));
  15 +
  16 +var _DeleteOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/DeleteOutlined"));
  17 +
  18 +var _react = _interopRequireWildcard(require("react"));
  19 +
  20 +var _index = _interopRequireDefault(require("../../index"));
  21 +
  22 +var _antdMobile = require("antd-mobile");
  23 +
  24 +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
  25 +
  26 +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
  27 +
  28 +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  29 +
  30 +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
  31 +
  32 +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  33 +
  34 +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
  35 +
  36 +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
  37 +
  38 +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
  39 +
  40 +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  41 +
  42 +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  43 +
  44 +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  45 +
  46 +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
  47 +
  48 +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
  49 +
  50 +// 数字转汉字
  51 +function convertToChinaNum(num) {
  52 + var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  53 + var arr2 = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千', '亿']; //可继续追加更高位转换值
  54 +
  55 + if (!num || isNaN(num)) {
  56 + return "零";
  57 + }
  58 +
  59 + var english = num.toString().split("");
  60 + var result = "";
  61 +
  62 + for (var i = 0; i < english.length; i++) {
  63 + var des_i = english.length - 1 - i; //倒序排列设值
  64 +
  65 + result = arr2[i] + result;
  66 + var arr1_index = english[des_i];
  67 + result = arr1[arr1_index] + result;
  68 + }
  69 +
  70 + result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  71 + result = result.replace(/零+/g, '零');
  72 + result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  73 + result = result.replace(/亿万/g, '亿');
  74 + result = result.replace(/零+$/, '');
  75 + result = result.replace(/^一十/g, '十');
  76 + return result;
  77 +}
  78 +
  79 +var ListForMobile = function ListForMobile(_ref) {
  80 + var _ref$displayList = _ref.displayList,
  81 + displayList = _ref$displayList === void 0 ? [] : _ref$displayList,
  82 + listData = _ref.listData,
  83 + changeList = _ref.changeList,
  84 + schema = _ref.schema,
  85 + deleteItem = _ref.deleteItem,
  86 + copyItem = _ref.copyItem,
  87 + addItem = _ref.addItem,
  88 + moveItemUp = _ref.moveItemUp,
  89 + moveItemDown = _ref.moveItemDown,
  90 + displayType = _ref.displayType,
  91 + getFieldsProps = _ref.getFieldsProps;
  92 + var _schema$props = schema.props,
  93 + props = _schema$props === void 0 ? {} : _schema$props,
  94 + itemProps = schema.itemProps;
  95 +
  96 + var _useState = (0, _react.useState)([]),
  97 + _useState2 = _slicedToArray(_useState, 2),
  98 + allKeys = _useState2[0],
  99 + setKeys = _useState2[1]; // let addBtnProps = {
  100 + // type: 'dashed',
  101 + // children: '新增一条list',
  102 + // };
  103 + // if (props.addBtnProps && typeof props.addBtnProps === 'object') {
  104 + // addBtnProps = { ...addBtnProps, ...props.addBtnProps };
  105 + // }
  106 +
  107 +
  108 + (0, _react.useEffect)(function () {
  109 + var _allKeys = [];
  110 + displayList.forEach(function (item, idx) {
  111 + if (item._active) {
  112 + _allKeys.push(String(idx));
  113 + }
  114 + });
  115 + setKeys(_allKeys);
  116 + }, [displayList]);
  117 +
  118 + var getTitle = function getTitle(id) {
  119 + return /*#__PURE__*/_react.default.createElement("div", {
  120 + style: {
  121 + display: 'flex',
  122 + justifyContent: "space-between",
  123 + alignItems: 'center'
  124 + }
  125 + }, /*#__PURE__*/_react.default.createElement("span", null, "\u6570\u636E", id + 1), /*#__PURE__*/_react.default.createElement("a", {
  126 + onClick: function onClick(e) {
  127 + e.stopPropagation();
  128 + deleteItem(id);
  129 + },
  130 + style: {
  131 + display: 'inline-block',
  132 + padding: '0 10px'
  133 + }
  134 + }, /*#__PURE__*/_react.default.createElement(_DeleteOutlined2.default, {
  135 + style: {
  136 + fontSize: 16,
  137 + width: 16,
  138 + height: 16
  139 + }
  140 + })));
  141 + };
  142 +
  143 + var handleArrow = function handleArrow(active) {
  144 + if (active) {
  145 + return /*#__PURE__*/_react.default.createElement(_UpOutlined2.default, {
  146 + onClick: function onClick() {}
  147 + });
  148 + } else {
  149 + return /*#__PURE__*/_react.default.createElement(_DownOutlined2.default, null);
  150 + }
  151 + };
  152 +
  153 + return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
  154 + className: "fr-card-list qx-card-mobile"
  155 + }, /*#__PURE__*/_react.default.createElement(_antdMobile.Collapse, {
  156 + activeKey: allKeys
  157 + }, displayList.map(function (item, idx) {
  158 + var fieldsProps = getFieldsProps(idx);
  159 + fieldsProps.displayType = displayType;
  160 + return /*#__PURE__*/_react.default.createElement(_antdMobile.Collapse.Panel, {
  161 + key: String(idx),
  162 + title: getTitle(idx),
  163 + arrow: handleArrow,
  164 + onClick: function onClick() {
  165 + var _active = item._active || false;
  166 +
  167 + displayList[idx]._active = !_active;
  168 + changeList(_toConsumableArray(displayList));
  169 + }
  170 + }, /*#__PURE__*/_react.default.createElement("div", {
  171 + className: "fr-card-item qx-card-mobile-item ".concat(displayType === 'row' ? 'fr-card-item-row' : ''),
  172 + key: idx
  173 + }, /*#__PURE__*/_react.default.createElement(_index.default, fieldsProps)));
  174 + }))), /*#__PURE__*/_react.default.createElement("a", {
  175 + className: 'add-button',
  176 + onClick: function onClick() {
  177 + addItem();
  178 + }
  179 + }, /*#__PURE__*/_react.default.createElement(_PlusCircleFilled2.default, {
  180 + style: {
  181 + marginRight: 2,
  182 + width: 14,
  183 + height: 14
  184 + }
  185 + }), "\u70B9\u51FB\u65B0\u589E\u6570\u636E"));
  186 +};
  187 +
  188 +var _default = ListForMobile;
  189 +exports.default = _default;
\ No newline at end of file
... ...
1 1 "use strict";
2 2
3   -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4   -
5 3 Object.defineProperty(exports, "__esModule", {
6 4 value: true
7 5 });
... ... @@ -15,9 +13,15 @@ require("antd/es/alert/style");
15 13
16 14 var _alert = _interopRequireDefault(require("antd/es/alert"));
17 15
18   -require("antd/es/message/style");
  16 +require("antd/es/dropdown/style");
19 17
20   -var _message2 = _interopRequireDefault(require("antd/es/message"));
  18 +var _dropdown = _interopRequireDefault(require("antd/es/dropdown"));
  19 +
  20 +require("antd/es/space/style");
  21 +
  22 +var _space = _interopRequireDefault(require("antd/es/space"));
  23 +
  24 +var _DownOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/DownOutlined"));
21 25
22 26 require("antd/es/input/style");
23 27
... ... @@ -29,15 +33,25 @@ var _CloseOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icon
29 33
30 34 var _CheckOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/CheckOutlined"));
31 35
  36 +require("antd/es/message/style");
  37 +
  38 +var _message2 = _interopRequireDefault(require("antd/es/message"));
  39 +
32 40 require("antd/es/tooltip/style");
33 41
34 42 var _tooltip = _interopRequireDefault(require("antd/es/tooltip"));
35 43
  44 +var _ExclamationCircleOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/ExclamationCircleOutlined"));
  45 +
  46 +require("antd/es/menu/style");
  47 +
  48 +var _menu = _interopRequireDefault(require("antd/es/menu"));
  49 +
36 50 require("antd/es/button/style");
37 51
38 52 var _button = _interopRequireDefault(require("antd/es/button"));
39 53
40   -var _ExclamationCircleOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/ExclamationCircleOutlined"));
  54 +var _MinusOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/MinusOutlined"));
41 55
42 56 var _SelectOutlined2 = _interopRequireDefault(require("@ant-design/icons/lib/icons/SelectOutlined"));
43 57
... ... @@ -67,7 +81,7 @@ var _index2 = _interopRequireDefault(require("../../index"));
67 81
68 82 var _virtualizedtableforantd = require("virtualizedtableforantd4");
69 83
70   -var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection"];
  84 +var _excluded = ["scrollY", "summary", "batchKey", "type", "bar", "line", "searchKey", "rowSelection", "size"];
71 85
72 86 function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
73 87
... ... @@ -95,6 +109,8 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
95 109
96 110 function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
97 111
  112 +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
  113 +
98 114 function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
99 115
100 116 function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
... ... @@ -121,7 +137,8 @@ var BUTTON_ICONS_MAP = {
121 137 EyeOutlined: /*#__PURE__*/_react.default.createElement(_EyeOutlined2.default, null),
122 138 EditOutlined: /*#__PURE__*/_react.default.createElement(_EditOutlined2.default, null),
123 139 remove: /*#__PURE__*/_react.default.createElement(_ExpandAltOutlined2.default, null),
124   - SelectOutlined: /*#__PURE__*/_react.default.createElement(_SelectOutlined2.default, null)
  140 + SelectOutlined: /*#__PURE__*/_react.default.createElement(_SelectOutlined2.default, null),
  141 + MinusOutlined: /*#__PURE__*/_react.default.createElement(_MinusOutlined2.default, null)
125 142 };
126 143 var FIELD_LENGTH = 170;
127 144 var EXPORT_STATUS = {
... ... @@ -157,10 +174,11 @@ var VirtualList = function VirtualList(_ref) {
157 174 fieldName = schema.fieldName,
158 175 _schema$qxProps = schema.qxProps,
159 176 qxProps = _schema$qxProps === void 0 ? {} : _schema$qxProps,
160   - subformMode = schema.subformMode;
  177 + subformMode = schema.subformMode,
  178 + pageType = schema.pageType;
161 179
162 180 var _props$scrollY = props.scrollY,
163   - scrollY = _props$scrollY === void 0 ? 600 : _props$scrollY,
  181 + scrollY = _props$scrollY === void 0 ? 400 : _props$scrollY,
164 182 _summary = props.summary,
165 183 batchKey = props.batchKey,
166 184 type = props.type,
... ... @@ -170,6 +188,7 @@ var VirtualList = function VirtualList(_ref) {
170 188 line = _props$line === void 0 ? {} : _props$line,
171 189 searchKey = props.searchKey,
172 190 rowSelection = props.rowSelection,
  191 + size = props.size,
173 192 rest = _objectWithoutProperties(props, _excluded);
174 193
175 194 var _useVT = (0, _virtualizedtableforantd.useVT)(function () {
... ... @@ -215,6 +234,9 @@ var VirtualList = function VirtualList(_ref) {
215 234 searchName = _useState12[0],
216 235 setSearchName = _useState12[1];
217 236
  237 + var padding = (0, _react.useMemo)(function () {
  238 + return size === 'default' ? 32 : 16;
  239 + }, [size]);
218 240 var newRowSelection = (0, _react.useMemo)(function () {
219 241 var _bar$buttons;
220 242
... ... @@ -240,9 +262,10 @@ var VirtualList = function VirtualList(_ref) {
240 262 return _rowSelection;
241 263 }, [rowSelection, selectedRowKeys, bar]);
242 264 (0, _react.useEffect)(function () {
243   - console.log(displayList);
244 265 displayList.forEach(function (item, index) {
245   - item.orginIdx = index;
  266 + if (_typeof(item) === 'object') {
  267 + item.orginIdx = index;
  268 + }
246 269 });
247 270 }, [displayList]);
248 271 var _displayList = []; // 筛选展示的数据
... ... @@ -292,34 +315,40 @@ var VirtualList = function VirtualList(_ref) {
292 315 index: item.hasOwnProperty('orginIdx') ? item.orginIdx : idx
293 316 }, item);
294 317 });
  318 +
  319 + var handleTotal = function handleTotal(total) {
  320 + if (!total) {
  321 + total = 0;
  322 + }
  323 +
  324 + if (props.originWidget === 'subform' || total === displayList.length) {
  325 + return "\u5171".concat(total, "\u6761\u8BB0\u5F55");
  326 + } else {
  327 + return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", null, "\u5171", displayList.length, "\u6761\u8BB0\u5F55"), /*#__PURE__*/_react.default.createElement("span", {
  328 + style: {
  329 + color: '#999',
  330 + fontSize: '13px'
  331 + }
  332 + }, "(", displayList.length - total, "\u6761\u4E0D\u53EF\u89C1)"));
  333 + }
  334 + };
  335 +
295 336 var pagination = (0, _react.useMemo)(function () {
296 337 return {
297 338 total: dataSource.length,
298 339 position: ['bottomRight'],
299 340 pageSize: 10,
300 341 showTotal: function showTotal(total) {
301   - return "\u5171".concat(total, "\u6761\u8BB0\u5F55");
  342 + return handleTotal(total);
302 343 },
303 344 defaultCurrent: 1,
304 345 size: 'default'
305 346 };
306 347 }, [dataSource]);
307 348 var barButtons = (0, _react.useMemo)(function () {
308   - var _barButtons = _.cloneDeep(bar.buttons || []); // 选择、新增位置提前
  349 + var _barButtons = _.cloneDeep(bar.buttons || []); // 关联表的导入,先隐藏 TODO
309 350
310 351
311   - ['ADD', 'SELECT'].forEach(function (code) {
312   - var _index = _barButtons.findIndex(function (item) {
313   - return item.code === code;
314   - });
315   -
316   - if (_index > -1) {
317   - var btn = _barButtons.splice(_index, 1);
318   -
319   - _barButtons.unshift.apply(_barButtons, _toConsumableArray(btn));
320   - }
321   - }); // 关联表的导入,先隐藏 TODO
322   -
323 352 if (props.originWidget === 'relSelector') {
324 353 ['IMPORT'].forEach(function (code) {
325 354 var _index = _barButtons.findIndex(function (item) {
... ... @@ -353,17 +382,67 @@ var VirtualList = function VirtualList(_ref) {
353 382 }
354 383
355 384 if (props.originWidget === 'relSelector' && subformMode && type !== 'view') {
356   - _barButtons.push({
  385 + _barButtons.unshift({
357 386 code: 'subformEdit',
358 387 icon: 'EditOutlined',
359 388 batch: true,
360 389 action: 'SYS',
361   - name: '子表编辑'
  390 + name: '表格编辑'
  391 + });
  392 + } // 选择位置提前
  393 +
  394 +
  395 + ['SELECT'].forEach(function (code) {
  396 + var _index = _barButtons.findIndex(function (item) {
  397 + return item.code === code;
  398 + });
  399 +
  400 + if (_index > -1) {
  401 + var btn = _barButtons.splice(_index, 1);
  402 +
  403 + _barButtons.unshift.apply(_barButtons, _toConsumableArray(btn));
  404 + }
  405 + });
  406 +
  407 + if (type === 'add') {
  408 + return _barButtons.filter(function (item) {
  409 + return ['SELECT', 'IMPORT', 'ADD', 'BATCH_ADD'].includes(item.code);
  410 + });
  411 + } else if (type === 'view') {
  412 + return _barButtons.filter(function (item) {
  413 + return item.code === 'EXPORT';
362 414 });
363 415 }
364 416
  417 + if (schema.isReadOnly) {
  418 + // return _barButtons.filter(item => item.code === 'EXPORT')
  419 + return [];
  420 + }
  421 +
365 422 return _barButtons;
366   - }, [props]);
  423 + }, [props, type]);
  424 +
  425 + var moreButtons = /*#__PURE__*/_react.default.createElement(_menu.default, null, barButtons.slice(3).map(function (item) {
  426 + var name = item.name,
  427 + code = item.code,
  428 + needConfirm = item.needConfirm,
  429 + confirmContent = item.confirmContent,
  430 + icon = item.icon,
  431 + action = item.action;
  432 + return /*#__PURE__*/_react.default.createElement(_menu.default.Item, null, /*#__PURE__*/_react.default.createElement(_button.default, _extends({
  433 + key: code,
  434 + style: {
  435 + marginLeft: 8,
  436 + border: 'none'
  437 + }
  438 + }, item, {
  439 + icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null,
  440 + onClick: function onClick() {
  441 + barBtnClick(code, needConfirm, confirmContent, action, item);
  442 + }
  443 + }), name));
  444 + }));
  445 +
367 446 var columns = (0, _react.useMemo)(function () {
368 447 return children.map(function (child, index) {
369 448 var _schema$props2;
... ... @@ -386,12 +465,12 @@ var VirtualList = function VirtualList(_ref) {
386 465 var column = ((_schema$props2 = schema.props) === null || _schema$props2 === void 0 ? void 0 : _schema$props2.column) || {};
387 466 return {
388 467 dataIndex: child,
389   - width: (column.width ? String(column.width).indexOf('px') > -1 ? Number(String(column.width).slice(0, -2)) : Number(column.width) : FIELD_LENGTH) + 16,
  468 + width: column.width ? parseInt(column.width) : FIELD_LENGTH,
390 469 align: column.align || 'left',
391 470 fixed: column.fixed || props.fixed && index < props.fixed,
392 471 title: /*#__PURE__*/_react.default.createElement("div", {
393 472 style: {
394   - width: (parseInt(column.width) || FIELD_LENGTH) + "px"
  473 + width: (parseInt(column.width) || FIELD_LENGTH) - padding + "px"
395 474 }
396 475 }, schema.required ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
397 476 className: "fr-label-required"
... ... @@ -426,6 +505,10 @@ var VirtualList = function VirtualList(_ref) {
426 505
427 506 var handleState = function handleState(record, code, originWidget) {
428 507 if (originWidget === 'subform') {
  508 + if (code === 'COPY' && !record.id) {
  509 + return 'none';
  510 + }
  511 +
429 512 return '';
430 513 } else {
431 514 switch (code) {
... ... @@ -442,33 +525,42 @@ var VirtualList = function VirtualList(_ref) {
442 525 return '';
443 526
444 527 default:
445   - return record.hasOwnProperty('$auth') ? '' : 'none';
  528 + return record[code + '_flag_'] ? '' : 'none';
446 529 }
447 530 }
448 531 };
449 532
450   - if (!props.hideDelete && ((_line$buttons = line.buttons) === null || _line$buttons === void 0 ? void 0 : _line$buttons.length) || Array.isArray(itemProps.buttons) || props.removeable) {
  533 + if (!props.hideDelete && ((_line$buttons = line.buttons) === null || _line$buttons === void 0 ? void 0 : _line$buttons.length) || Array.isArray(itemProps.buttons)) {
451 534 var top = line.top,
452 535 _line$style = line.style,
453 536 style = _line$style === void 0 ? 'ICON' : _line$style,
454 537 fixed = line.fixed,
455 538 buttons = line.buttons;
456 539
457   - if (props.removeable && buttons.findIndex(function (item) {
458   - return item.code === 'REMOVE';
459   - }) === -1) {
460   - buttons.push({
461   - icon: 'remove',
462   - code: 'REMOVE',
463   - name: '移除',
464   - line: true,
465   - needConfirm: true,
466   - confirmContent: props.removeContent
467   - });
468   - }
469   -
470   - var len = (buttons || []).length;
471   - var action = {
  540 + if (pageType === 'add') {
  541 + if (props.originWidget === 'subform') {
  542 + line.buttons = buttons.filter(function (item) {
  543 + return item.code === 'DELETE';
  544 + });
  545 + } else if (props.originWidget === 'relSelector') {
  546 + line.buttons = buttons.filter(function (item) {
  547 + return item.code === 'REMOVE';
  548 + });
  549 + }
  550 + } // if (props.removeable && buttons.findIndex(item => item.code === 'REMOVE') === -1) {
  551 + // buttons.push({
  552 + // icon: 'remove',
  553 + // code: 'REMOVE',
  554 + // name: '移除',
  555 + // line: true,
  556 + // needConfirm: true,
  557 + // confirmContent: props.removeContent
  558 + // })
  559 + // }
  560 +
  561 +
  562 + var len = (line.buttons || []).length;
  563 + var action = schema.isReadOnly ? {} : {
472 564 title: '操作',
473 565 key: '$action',
474 566 fixed: fixed ? top ? 'left' : 'right' : props.originWidget === 'subform' ? 'right' : false,
... ... @@ -536,9 +628,10 @@ var VirtualList = function VirtualList(_ref) {
536 628 if (code === 'DELETE' && props.originWidget === 'subform') {
537 629 deleteItem(idx);
538 630 } else if (code === 'REMOVE') {
539   - deleteItem(idx);
  631 + deleteItem(record.orginIdx);
  632 + props.handleLineBtnClick(code, record, schema.$id);
540 633 } else if (code === 'COPY') {
541   - copyItem(idx);
  634 + copyItem(record.orginIdx);
542 635 } else if (item.action === 'CUSTOM') {
543 636 props.handleCustom(item, record, schema.$id);
544 637 } else {
... ... @@ -551,9 +644,10 @@ var VirtualList = function VirtualList(_ref) {
551 644 if (code === 'DELETE' && props.originWidget === 'subform') {
552 645 deleteItem(idx);
553 646 } else if (code === 'REMOVE') {
554   - deleteItem(idx);
  647 + deleteItem(record.orginIdx);
  648 + props.handleLineBtnClick(code, record, schema.$id);
555 649 } else if (code === 'COPY') {
556   - copyItem(idx);
  650 + copyItem(record.orginIdx);
557 651 } else if (item.action === 'CUSTOM') {
558 652 props.handleCustom(item, record, schema.$id);
559 653 } else {
... ... @@ -561,13 +655,13 @@ var VirtualList = function VirtualList(_ref) {
561 655 }
562 656 }
563 657 }
564   - }), style !== 'ICON' ? name : null)); // }
  658 + }), style !== 'ICON' || !item.icon ? name : null)); // }
565 659 }) : null);
566 660 }
567 661 };
568 662
569   - if (style === "ICON") {
570   - action.width = len * 26 + 16;
  663 + if (style === "ICON" || props.originWidget === 'subform') {
  664 + action.width = len * 32 + padding - 8;
571 665 } else {
572 666 var div = document.createElement('div');
573 667 div.style.position = 'absolute';
... ... @@ -575,17 +669,17 @@ var VirtualList = function VirtualList(_ref) {
575 669 div.style.fontSize = '14px';
576 670 window.document.body.appendChild(div);
577 671 var leng = 0;
578   - buttons.map(function (item) {
  672 + line.buttons.map(function (item) {
579 673 div.innerHTML = item.name;
580   - leng += div.clientWidth + 16 + (style !== 'TEXT' && item.icon ? 22 : 0);
  674 + leng += div.clientWidth + padding + (style !== 'TEXT' && item.icon ? 22 : 0);
581 675 });
582   - action.width = leng + 16;
  676 + action.width = leng + padding - 8;
583 677 div.remove();
584 678 }
585 679
586 680 if (columns.findIndex(function (item) {
587 681 return item.key === '$action';
588   - }) === -1) {
  682 + }) === -1 && len > 0 && action.title) {
589 683 if (top) {
590 684 columns.unshift(action);
591 685 } else {
... ... @@ -605,9 +699,9 @@ var VirtualList = function VirtualList(_ref) {
605 699 "percent": 0,
606 700 "status": "PROCESSING"
607 701 });
608   - queryParams = {
  702 + queryParams = _defineProperty({
609 703 dataId: props.dataId
610   - };
  704 + }, searchKey, keyWord);
611 705 appCode = qxProps.appCode, funCode = qxProps.funCode, fieldName = qxProps.fieldName;
612 706 _context.next = 5;
613 707 return props.exportChild(appCode, funCode, fieldName, queryParams);
... ... @@ -638,7 +732,8 @@ var VirtualList = function VirtualList(_ref) {
638 732 var exportData = function exportData(taskId) {
639 733 // const {appCode, funCode, viewCode} = qxProps
640 734 // taskType: UPLOAD || EXPORT
641   - props.childExportProgress(taskId).then(function (res) {
  735 + if (!taskId && !exportTaskId.current) return;
  736 + props.childExportProgress(taskId || exportTaskId.current).then(function (res) {
642 737 setProgressData(res || null);
643 738 });
644 739 };
... ... @@ -724,6 +819,68 @@ var VirtualList = function VirtualList(_ref) {
724 819 setSubEdit(false);
725 820 };
726 821
  822 + var barBtnClick = function barBtnClick(code, needConfirm, confirmContent, action, item) {
  823 + setSelectedRowKeys([]);
  824 +
  825 + if (needConfirm && confirmContent) {
  826 + if (!selectedRowKeys.length) {
  827 + return _message2.default.warning('请选择数据');
  828 + }
  829 +
  830 + confirm({
  831 + title: confirmContent,
  832 + icon: /*#__PURE__*/_react.default.createElement(_ExclamationCircleOutlined2.default, null),
  833 + okText: '确认',
  834 + okType: 'danger',
  835 + cancelText: '取消',
  836 + onOk: function onOk() {
  837 + if (code === 'DELETE') {
  838 + if (props.originWidget === 'subform') {
  839 + batchDelete(selectedRowKeys);
  840 + setSelectedRowKeys([]);
  841 + } else {
  842 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  843 + }
  844 + } else if (code === 'EXPORT') {
  845 + handleExport();
  846 + } else if (code === 'SELECT') {
  847 + props.openRelSelect(schema.$id);
  848 + } else if (code === 'ADD') {
  849 + props.handleRelAdd(schema.$id);
  850 + } else if (code === 'subformEdit') {
  851 + props.handleBatchEdit(fieldName, schema.$id, selectedIds);
  852 + } else if (action === 'CUSTOM') {
  853 + props.handleCustom(item, selectedIds, schema.$id);
  854 + } else {
  855 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  856 + }
  857 + },
  858 + onCancel: function onCancel() {}
  859 + });
  860 + } else {
  861 + if (code === 'DELETE') {
  862 + if (props.originWidget === 'subform') {
  863 + batchDelete(selectedRowKeys);
  864 + setSelectedRowKeys([]);
  865 + } else {
  866 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  867 + }
  868 + } else if (code === 'EXPORT') {
  869 + handleExport();
  870 + } else if (code === 'SELECT') {
  871 + props.openRelSelect(schema.$id);
  872 + } else if (code === 'ADD') {
  873 + props.handleRelAdd(schema.$id);
  874 + } else if (code === 'subformEdit') {
  875 + props.handleBatchEdit(fieldName, schema.$id, selectedIds);
  876 + } else if (action === 'CUSTOM') {
  877 + props.handleCustom(item, selectedIds, schema.$id);
  878 + } else {
  879 + props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
  880 + }
  881 + }
  882 + };
  883 +
727 884 return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.editable ? isSubCanEdit ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_button.default, {
728 885 type: 'text',
729 886 size: "small",
... ... @@ -769,7 +926,7 @@ var VirtualList = function VirtualList(_ref) {
769 926
770 927 setKeyWord(((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.value) || '');
771 928 }
772   - }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement("div", null, barButtons.map(function (item) {
  929 + }) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement("div", null, (barButtons.length > 4 ? barButtons.slice(0, 3) : barButtons.slice(0, 4)).map(function (item) {
773 930 var name = item.name,
774 931 code = item.code,
775 932 needConfirm = item.needConfirm,
... ... @@ -782,55 +939,18 @@ var VirtualList = function VirtualList(_ref) {
782 939 marginLeft: 8
783 940 }
784 941 }, item, {
785   - icon: icon ? BUTTON_ICONS_MAP[icon] : null,
  942 + icon: icon && bar.style !== 'TEXT' ? BUTTON_ICONS_MAP[icon] : null,
786 943 onClick: function onClick() {
787   - if (code === 'DELETE') {
788   - if (!selectedRowKeys.length) {
789   - return _message2.default.warning('请选择数据');
790   - }
791   -
792   - if (needConfirm && confirmContent) {
793   - confirm({
794   - title: '批量删除确认',
795   - icon: /*#__PURE__*/_react.default.createElement(_ExclamationCircleOutlined2.default, null),
796   - content: confirmContent,
797   - okText: '确认',
798   - okType: 'danger',
799   - cancelText: '取消',
800   - onOk: function onOk() {
801   - if (props.originWidget === 'subform') {
802   - batchDelete(selectedRowKeys);
803   - setSelectedRowKeys([]);
804   - } else {
805   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
806   - }
807   - },
808   - onCancel: function onCancel() {}
809   - });
810   - } else {
811   - if (props.originWidget === 'subform') {
812   - batchDelete(selectedRowKeys);
813   - setSelectedRowKeys([]);
814   - } else {
815   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
816   - }
817   - }
818   - } else if (code === 'EXPORT') {
819   - handleExport();
820   - } else if (code === 'SELECT') {
821   - props.openRelSelect(schema.$id);
822   - } else if (code === 'ADD') {
823   - props.handleRelAdd(schema.$id);
824   - } else if (code === 'subformEdit') {
825   - props.handleBatchEdit(fieldName, schema.$id, selectedIds);
826   - } else if (action === 'CUSTOM') {
827   - props.handleCustom(item, selectedIds, schema.$id);
828   - } else {
829   - props.handleBarBtnClick(code, fieldName, batchKey, selectedRowKeys, schema.$id, selectedIds);
830   - }
  944 + barBtnClick(code, needConfirm, confirmContent, action, item);
831 945 }
832 946 }), name); // }
833   - })), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) {
  947 + }), barButtons.slice(4).length ? /*#__PURE__*/_react.default.createElement(_dropdown.default, {
  948 + overlay: moreButtons
  949 + }, /*#__PURE__*/_react.default.createElement(_button.default, {
  950 + style: {
  951 + marginLeft: 8
  952 + }
  953 + }, /*#__PURE__*/_react.default.createElement(_space.default, null, "\u66F4\u591A\u64CD\u4F5C", /*#__PURE__*/_react.default.createElement(_DownOutlined2.default, null)))) : null), Array.isArray(props.buttons) ? props.buttons.map(function (item, idx) {
834 954 var callback = item.callback,
835 955 text = item.text,
836 956 html = item.html;
... ... @@ -885,10 +1005,10 @@ var VirtualList = function VirtualList(_ref) {
885 1005 x: '100%'
886 1006 },
887 1007 components: vt,
888   - size: "small",
  1008 + size: size || 'small',
889 1009 columns: columns,
890 1010 dataSource: dataSource,
891   - pagination: props.originWidget === 'subform' ? false : pagination,
  1011 + pagination: pagination,
892 1012 style: {
893 1013 marginBottom: 25
894 1014 },
... ... @@ -931,7 +1051,7 @@ function _handleDownload() {
931 1051 switch (_context2.prev = _context2.next) {
932 1052 case 0:
933 1053 // eslint-disable-next-line prefer-rest-params
934   - isDownload = _args2[2];
  1054 + isDownload = _args2[3];
935 1055
936 1056 if (isDownload === null || Boolean(isDownload)) {
937 1057 _message2.default.warning('即将开始下载,请勿重复点击。');
... ...
... ... @@ -25,6 +25,8 @@ var _DrawerList = _interopRequireDefault(require("./DrawerList"));
25 25
26 26 var _VirtualList = _interopRequireDefault(require("./VirtualList"));
27 27
  28 +var _ListForMobile = _interopRequireDefault(require("./ListForMobile"));
  29 +
28 30 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29 31
30 32 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
... ... @@ -86,16 +88,19 @@ var RenderList = function RenderList(_ref) {
86 88 };
87 89
88 90 var addItem = function addItem() {
89   - var newList = [].concat(_toConsumableArray(displayList), [{}]);
  91 + var newList = [].concat(_toConsumableArray(displayList), [{
  92 + _active: true
  93 + }]);
90 94 var newIndex = newList.length - 1;
91 95 onItemChange(dataPath, newList);
92 96 return newIndex;
93 97 };
94 98
95 99 var copyItem = function copyItem(idx) {
96   - var newItem = displayList[idx];
  100 + var newItem = _.cloneDeep(displayList[idx]);
  101 +
97 102 delete newItem.id;
98   - var newList = [].concat(_toConsumableArray(displayList.slice(0, idx)), [newItem], _toConsumableArray(displayList.slice(idx)));
  103 + var newList = [].concat(_toConsumableArray(displayList.slice(0, idx + 1)), [newItem], _toConsumableArray(displayList.slice(idx + 1)));
99 104 onItemChange(dataPath, JSON.parse(JSON.stringify(newList)));
100 105 };
101 106
... ... @@ -208,6 +213,9 @@ var RenderList = function RenderList(_ref) {
208 213 case 'virtualList':
209 214 return /*#__PURE__*/_react.default.createElement(_VirtualList.default, displayProps);
210 215
  216 + case 'listForMobile':
  217 + return /*#__PURE__*/_react.default.createElement(_ListForMobile.default, displayProps);
  218 +
211 219 default:
212 220 return /*#__PURE__*/_react.default.createElement(_CardList.default, displayProps);
213 221 }
... ...
1 1 .fr-container .fr-card-item {
2   - border: 1px solid rgba(0, 0, 0, 0.1);
3   - border-radius: 4px;
4   - padding: 10px 12px 4px 12px;
  2 + border: 0.5px solid rgba(0, 0, 0, 0.1);
  3 + padding: 10px 0 4px 0;
5 4 margin-bottom: 8px;
6 5 position: relative;
7 6 display: flex;
... ... @@ -50,3 +49,51 @@
50 49 .rowReverse {
51 50 flex-direction: row-reverse;
52 51 }
  52 +.ant-modal-body .qx-virtualList {
  53 + margin-bottom: 0 !important;
  54 +}
  55 +.qx-card-mobile .adm-list-item-content-main {
  56 + font-size: 14px;
  57 +}
  58 +.qx-card-mobile .adm-list-default .adm-list-body {
  59 + border: none;
  60 +}
  61 +.qx-card-mobile .adm-list-item {
  62 + padding-left: 15px;
  63 +}
  64 +.qx-card-mobile .adm-list-item .adm-list-item-content {
  65 + padding-right: 15px;
  66 +}
  67 +.qx-card-mobile .adm-collapse-panel-header {
  68 + margin: 0 15px;
  69 + height: 40px;
  70 + background: #f6f7f9;
  71 + border-radius: 4px 4px 0 0;
  72 +}
  73 +.qx-card-mobile .adm-collapse-panel-header .adm-collapse-arrow {
  74 + font-size: 16px;
  75 +}
  76 +.qx-card-mobile .adm-list-item-content {
  77 + border-radius: 8px 8px 0 0;
  78 + border-top: none;
  79 +}
  80 +.qx-card-mobile .adm-list-item-content .fr-content-column {
  81 + padding: 0 15px 6px;
  82 +}
  83 +.qx-card-mobile-item {
  84 + border-radius: unset;
  85 + border-top: none;
  86 +}
  87 +.qx-card-mobile .adm-collapse-panel-content .adm-list-item-content-main {
  88 + padding: 0;
  89 +}
  90 +.qx-card-mobile .adm-list-item-content-arrow {
  91 + font-size: 15px;
  92 + width: 15px;
  93 + height: 15px;
  94 +}
  95 +.add-button {
  96 + color: #3499ff;
  97 + display: inline-block;
  98 + margin: 15px;
  99 +}
... ...
1 1 {
2 2 "name": "@qx/form-render",
3   - "version": "0.0.18",
  3 + "version": "0.0.28",
4 4 "description": "通过 JSON Schema 生成标准 Form,常用于自定义搭建配置界面生成",
5 5 "repository": {
6 6 "type": "git",
... ...