knk-react
Version:
react components based on react
188 lines (161 loc) • 5.73 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _antd = require("antd");
var _api = require("@/common/api");
var _tool = require("@/common/tool");
/**
* 异步选择组件
*/
var Option = _antd.Select.Option;
//封装组件
var AjaxSelect = /*#__PURE__*/function (_Component) {
(0, _inherits2.default)(AjaxSelect, _Component);
var _super = (0, _createSuper2.default)(AjaxSelect);
function AjaxSelect(props) {
var _this;
(0, _classCallCheck2.default)(this, AjaxSelect);
_this = _super.call(this, props);
_this.state = {
loading: false,
listData: []
};
_this.handleChange = _this.handleChange.bind((0, _assertThisInitialized2.default)(_this)); // 是否已加载
_this.open = true;
return _this;
}
(0, _createClass2.default)(AjaxSelect, [{
key: "componentDidMount",
value: function componentDidMount() {
this.handleGetList();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.open = false;
}
}, {
key: "render",
value: function render() {
var _this$state = this.state,
listData = _this$state.listData,
loading = _this$state.loading;
var _this$props = this.props,
value = _this$props.value,
listName = _this$props.listName,
listValueKey = _this$props.listValueKey,
listNameKey = _this$props.listNameKey,
disabled = _this$props.disabled;
var selectValue;
if (Array.isArray(value)) {
selectValue = value[0];
} else {
selectValue = value;
}
return /*#__PURE__*/_react.default.createElement(_antd.Spin, {
spinning: loading,
className: "app-ajax-select"
}, /*#__PURE__*/_react.default.createElement(_antd.Select, {
showSearch: true,
optionFilterProp: "children",
value: selectValue,
onChange: this.handleChange,
placeholder: '选择' + listName,
notFoundContent: '未找到' + listName,
allowClear: true,
disabled: disabled
}, /*#__PURE__*/_react.default.createElement(Option, {
value: "",
title: '选择' + listName
}, "\u9009\u62E9", listName), listData.map(function (item, index) {
return /*#__PURE__*/_react.default.createElement(Option, {
key: index,
value: item[listValueKey].toString(),
title: item[listNameKey]
}, item[listNameKey]);
})));
}
}, {
key: "handleGetList",
value: function handleGetList() {
var _this2 = this;
var _this$props2 = this.props,
apiName = _this$props2.apiName,
apiData = _this$props2.apiData,
apiMethod = _this$props2.apiMethod,
listName = _this$props2.listName;
this.setState({
loading: true
});
(0, _api.fetch)(apiName, apiData, apiMethod).then(function (data) {
// 判断如果卸载,则不再设置数据
if (!_this2.open) return;
_this2.setState({
loading: false,
listData: data.data
});
}).catch(function (err) {
_tool.log.error(err);
_antd.message.error('获取' + listName + '失败:' + err.message);
});
}
}, {
key: "handleChange",
value: function handleChange(key) {
var _this$props3 = this.props,
value = _this$props3.value,
listValueKey = _this$props3.listValueKey,
listNameKey = _this$props3.listNameKey,
onChange = _this$props3.onChange;
var listData = this.state.listData;
if (Array.isArray(value)) {
if (!key) return onChange(['', '']);
var label;
listData.some(function (item) {
if (item[listValueKey].toString() === key) {
label = item[listNameKey];
return true;
} else return false;
});
onChange([key, label]);
} else {
onChange(key || '');
}
}
}]);
return AjaxSelect;
}(_react.Component);
AjaxSelect.propTypes = {
apiName: _propTypes.default.string.isRequired,
// API请求名,由于直接诶读取data.data的数组数据,所以该API不能使用分页
apiData: _propTypes.default.object,
// api请求附加的数据
apiMethod: _propTypes.default.string,
// api请求method
listName: _propTypes.default.string.isRequired,
// 缺省列表名称
listValueKey: _propTypes.default.string.isRequired,
// 列表值的key值
listNameKey: _propTypes.default.string.isRequired,
// 列表名称key值
value: _propTypes.default.oneOfType([// 值,支持字符串和数组形式
_propTypes.default.string, // key值
_propTypes.default.array // [key, label]形式
]),
onChange: _propTypes.default.func,
// 获取值变化函数
disabled: _propTypes.default.bool
};
var _default = AjaxSelect;
exports.default = _default;