UNPKG

@aliretail/react-materials-components

Version:
269 lines (235 loc) 11.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _numberPicker = _interopRequireDefault(require("@alifd/next/lib/number-picker")); var _dialog = _interopRequireDefault(require("@alifd/next/lib/dialog")); var _message = _interopRequireDefault(require("@alifd/next/lib/message")); var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _select = _interopRequireDefault(require("@alifd/next/lib/select")); var _table = _interopRequireDefault(require("@alifd/next/lib/table")); var _react = _interopRequireWildcard(require("react")); var _dataAdaptor = require("../../config/data-adaptor"); 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); } 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; } /** * @author wu.zhengnan * @desc 店铺列表组件(可编辑) * @createDate 2021.03.19 */ var TableColumns = _table["default"].Column; var Option = _select["default"].Option; function StoreTable(props) { var dataSource = props.dataSource, columns = props.columns, _props$otherTableProp = props.otherTableProps, otherTableProps = _props$otherTableProp === void 0 ? {} : _props$otherTableProp, _props$onChange = props.onChange, onChange = _props$onChange === void 0 ? function () {} : _props$onChange, _props$onChangeChanne = props.onChangeChannel, onChangeChannel = _props$onChangeChanne === void 0 ? function () {} : _props$onChangeChanne, channelList = props.channelList, storeList = props.storeList, channelId = props.channelId, _props$totalProportio = props.totalProportion, totalProportion = _props$totalProportio === void 0 ? 0 : _props$totalProportio, dataKey = props.dataKey, maxRatio = props.maxRatio, ratioKey = props.ratioKey, fieldInit = props.fieldInit, fieldGetError = props.fieldGetError, addArrayValue = props.addArrayValue, deleteArrayValue = props.deleteArrayValue, hasDelete = props.hasDelete, _props$onDeleteTable = props.onDeleteTable, onDeleteTable = _props$onDeleteTable === void 0 ? function () {} : _props$onDeleteTable; var _useState = (0, _react.useState)({ isChannelSearch: false, channelSearchRes: [] }), channelInfo = _useState[0], setChannelInfo = _useState[1]; var _useState2 = (0, _react.useState)({ isStoreSearch: false, storeSearchRes: [] }), storeInfo = _useState2[0], setStoreInfo = _useState2[1]; // 一条空白数据 var blankDataRef = (0, _react.useRef)({}); var hasColumns = (0, _react.useMemo)(function () { blankDataRef.current = columns.reduce(function (a, b) { var _extends2; return (0, _extends3["default"])({}, a, (_extends2 = {}, _extends2[b.dataIndex] = undefined, _extends2)); }, {}); return Array.isArray(columns) && columns.length > 0; }, [columns]); // 添加店铺 var onAddStore = (0, _react.useCallback)(function () { if (!channelId) { _message["default"].warning('未选择渠道,无法新增店铺'); return; } var index = (dataSource || []).length; // field表单新增 addArrayValue(_dataAdaptor.fieldKey + "." + dataKey, index, blankDataRef.current); // 数据变化 var newData = [].concat(dataSource || [], [blankDataRef.current]); onChange(dataKey, newData, totalProportion); }, [dataSource, onChange, dataKey, channelId, totalProportion]); // 删除 var onDelete = (0, _react.useCallback)(function (key) { _dialog["default"].confirm({ content: '确认删除该店铺吗?', onOk: function onOk() { var total = totalProportion || 0; var newData = dataSource.filter(function (item, index) { if (index === key) { var currentRatio = item && item[ratioKey] || 0; total -= currentRatio; return false; } return true; }); // field表单删除 deleteArrayValue(_dataAdaptor.fieldKey + "." + dataKey, key); onChange(dataKey, newData, total); } }); }, [dataSource, onChange, dataKey, ratioKey]); // 渠道搜索查询 var onChannelSearch = (0, _react.useCallback)(function (val) { var data = (0, _dataAdaptor.getValueByName)(channelList, val); setChannelInfo({ isChannelSearch: true, channelSearchRes: data }); }, [channelList]); // 店铺搜索查询 var onStoreSearch = (0, _react.useCallback)(function (val) { var data = (0, _dataAdaptor.getValueByName)(storeList, val); setStoreInfo({ isStoreSearch: true, storeSearchRes: data }); }, [storeList]); var channelData = (0, _react.useMemo)(function () { var isChannelSearch = channelInfo.isChannelSearch, channelSearchRes = channelInfo.channelSearchRes; var data = isChannelSearch ? channelSearchRes : channelList; return data || []; }, [channelInfo, channelList]); var storeData = (0, _react.useMemo)(function () { var isStoreSearch = storeInfo.isStoreSearch, storeSearchRes = storeInfo.storeSearchRes; var data = isStoreSearch ? storeSearchRes : storeList; return data || []; }, [storeInfo, storeList]); return /*#__PURE__*/_react["default"].createElement("div", { className: "supply-relationship-ratio-table" }, /*#__PURE__*/_react["default"].createElement("div", { className: "ratio-table-head" }, /*#__PURE__*/_react["default"].createElement("span", { className: "ratio-table-head-label" }, "\u5BF9\u5E94\u6E20\u9053"), /*#__PURE__*/_react["default"].createElement(_select["default"], { className: "ratio-table-channel-select", value: channelId, onChange: function onChange(val) { return onChangeChannel(val, dataKey); }, dataSource: channelData, filterLocal: false, showSearch: true, onSearch: onChannelSearch }), /*#__PURE__*/_react["default"].createElement("span", { className: "ratio-table-total" }, "\u540C\u6B65\u6BD4\u4F8B\u603B\u548C\uFF1A", /*#__PURE__*/_react["default"].createElement("span", { className: maxRatio >= totalProportion ? '' : 'ratio-table-total-over' }, totalProportion, "%")), hasDelete && /*#__PURE__*/_react["default"].createElement("span", { className: "ratio-table-delete", onClick: function onClick() { onDeleteTable(dataKey); } }, "\u5220\u9664")), /*#__PURE__*/_react["default"].createElement("div", { className: "ratio-table" }, /*#__PURE__*/_react["default"].createElement(_table["default"], (0, _extends3["default"])({ dataSource: dataSource, key: "store-table", hasBorder: false }, otherTableProps), hasColumns ? columns.map(function (item) { var type = item.type, cell = item.cell, dataIndex = item.dataIndex, rules = item.rules; var columnKey = _dataAdaptor.fieldKey + "." + dataKey; var newCell = function newCell(value, index, record) { columnKey = _dataAdaptor.fieldKey + "." + dataKey + "." + index + "." + dataIndex; return /*#__PURE__*/_react["default"].createElement("span", fieldInit(columnKey, { rules: rules }), value); }; if (cell) { newCell = function newCell(value, index, record) { columnKey = _dataAdaptor.fieldKey + "." + dataKey + "." + index + "." + dataIndex; return /*#__PURE__*/_react["default"].createElement("span", fieldInit(columnKey, { rules: rules }), cell(value, index, record)); }; } else if (type === 'select') { newCell = function newCell(value, index) { columnKey = _dataAdaptor.fieldKey + "." + dataKey + "." + index + "." + dataIndex; var err = fieldGetError(columnKey); var errMessage = Array.isArray(err) ? err.join(',') : err; return /*#__PURE__*/_react["default"].createElement("div", { className: "ratio-table-vaditor" + (err ? ' ratio-table-vaditor-error' : '') }, /*#__PURE__*/_react["default"].createElement(_select["default"], (0, _extends3["default"])({ className: "ratio-table-number-select" }, fieldInit(columnKey, { rules: rules }), { value: value, dataSource: storeData, filterLocal: false, showSearch: true, onSearch: onStoreSearch })), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("span", { className: "error-info" }, errMessage)); }; } else if (type === 'numberPicker') { newCell = function newCell(value, index) { columnKey = _dataAdaptor.fieldKey + "." + dataKey + "." + index + "." + dataIndex; var err = fieldGetError(columnKey); var errMessage = Array.isArray(err) ? err.join(',') : err; return /*#__PURE__*/_react["default"].createElement("div", { className: "ratio-table-vaditor" + (err ? ' ratio-table-vaditor-error' : '') }, /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], (0, _extends3["default"])({}, fieldInit(columnKey, { rules: rules }), { value: value, max: 100, min: 1, defaultValue: 1, className: "ratio-table-number-picker" })), /*#__PURE__*/_react["default"].createElement("span", { className: "err-color" }, "\xA0%"), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement("span", { className: "error-info" }, errMessage)); }; } return /*#__PURE__*/_react["default"].createElement(TableColumns, (0, _extends3["default"])({}, item, { cell: newCell, key: item.dataIndex, type: undefined })); }) : null, hasColumns ? /*#__PURE__*/_react["default"].createElement(TableColumns, { title: "\u64CD\u4F5C", key: "delete", cell: function cell(value, index, record) { return /*#__PURE__*/_react["default"].createElement("span", { onClick: function onClick() { return onDelete(index); }, className: "supply-relationship-ratio-table-delete" }, "\u5220\u9664"); } }) : null), /*#__PURE__*/_react["default"].createElement("div", { className: "ratio-data-add", onClick: onAddStore }, "+ \u65B0\u589E\u5E97\u94FA"))); } var _default = /*#__PURE__*/(0, _react.memo)(StoreTable); exports["default"] = _default;