occ-tinper-bee
Version:
Base tinper-bee 2.0.10-beta.2: React Components living for enterprise-class pc backend application
371 lines (347 loc) • 12.2 kB
JSX
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { Form, Icon, Button, Label, Select, InputNumber, Message } from "tinper-bee";
import PropTypes from "prop-types";
import RefComponent from "components/RefComponent";
import DateRender from "./DateRender";
import DateTimeRender from "./DateRender/DateTimeRender";
import MonthRender from "./DateRender/MonthRender";
import RangeRender from "./DateRender/RangeRender";
import YearRender from "./DateRender/YearRender";
import SelectRender from "./SelectRender";
import FormControl from "./FormControl";
// import DatePicker from "tinper-bee/lib/Datepicker";
// const { YearPicker, MonthPicker, WeekPicker, RangePicker } = DatePicker;
const FormItem = Form.FormItem;
const Option = Select.Option;
import "./index.less";
const OPERATOR = {
EQ: "EQ",
LIKE: "LIKE",
GT: "GT",
LT: "LT",
GTE: "GTE",
LTE: "LTE",
NOTEQ: "NOTEQ",
IN: "IN",
NOTIN: "NOTIN",
LIKEORIN: "LIKEORIN"
};
class SearchPanle extends Component {
state = {
btnState: false
};
onCollapse() {
this.setState({
btnState: !this.state.btnState
});
}
onClear() {
this.props.form.resetFields();
}
onOK = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
let tpl = this.props.tpl;
//时间禁用范围
//树组件
//树表组件
//选月组件 设置值 input框中值不显示
//数值范围选择组件
//visiable控制
//收起模式由不渲染变为 display:none
//默认值清不掉bug 参照组件组件内部值不清空bug
if (err) {
console.log(err);
//Message.create({ content: "表单中有未填写必选项", color: "warning", duration: 2 });
} else {
let searchData = {};
tpl.forEach(item => {
let opr = OPERATOR.EQ;
let lable = item.key;
let truekey = item.key;
let type = item.type;
let flag = false;
//搜索条件中的相关表字段处理
if (lable.indexOf("--") > -1) {
truekey = truekey.replace(/--/g, ".");
flag = true;
}
if (type == "text") {
//输入框为 LIKE
opr = OPERATOR.LIKE;
} else if (type == "combo" || type == "refer") {
//如果参照 枚举多选 都为IN,单选 为EQ
if (item.multi) {
opr = OPERATOR.IN;
}
}
//debugger;
//重新定义key 赋值 转换
if (type == "dateRange") {
//时间区间
let v = values[lable];
let v1 = Array.isArray(v) && v.length > 0 ? v[0] : "";
let v2 = Array.isArray(v) && v.length > 1 ? v[1] : "";
if (v) {
if (flag) {
searchData[`search_${OPERATOR.GTE}_${truekey}_date`] = v1;
searchData[`search_${OPERATOR.LTE}_${truekey}_date`] = v2;
} else {
searchData[`search_${OPERATOR.GTE}_${lable}_date`] = v1;
searchData[`search_${OPERATOR.LTE}_${lable}_date`] = v2;
}
}
} else if (type == "refer") {
//参照
let newRefDate = values[lable] ? JSON.parse(values[lable]) : null;
newRefDate =
Object.prototype.toString.call(newRefDate) == "[object Object]" ? newRefDate.refpk : null;
if (newRefDate) {
if (flag) {
searchData[`search_${opr}_${truekey}`] = newRefDate;
} else {
searchData[`search_${opr}_${lable}`] = newRefDate;
}
}
} else {
let v = values[lable];
if (opr == OPERATOR.LIKE && v) {
v = "%" + v + "%";
}
if (v || (item.type == "number" && v == 0)) {
if (flag) {
searchData[`search_${opr}_${truekey}`] = v;
} else {
searchData[`search_${opr}_${lable}`] = v;
}
}
}
});
this.props.onOK(searchData);
}
});
};
clearMatch = param => {
this.clearMatchData = param.clearMatchData;
};
createFormType(item, index) {
let { getFieldProps, getFieldError } = this.props.form;
let disabled = item.disabled;
let placeholder = "";
if (item.placeholder) {
placeholder = item.placeholder;
} else {
if (item.type == "combo") {
placeholder = "请选择" + item.label;
} else if (item.type == "dateRange") {
placeholder = "开始" + item.label + " ~ 结束" + item.label;
} else {
placeholder = "请选择" + item.label;
}
}
let options = {};
if (item.initialValue) {
options.initialValue = item.initialValue;
}
if (item.type == "refer") {
if (item.required) {
options.rules = [
{
required: true,
message: (
<span>
<Icon type="uf-exc-t" />
<span>{`请输入${item.label}`}</span>
</span>
),
pattern: /[^{"refname":"","refpk":""}|{"refpk":"","refname":""}]/
}
];
} else {
options.rules = [];
}
} else {
if (item.required) {
options.rules = [
{
required: item.required,
message: (
<span>
<Icon type="uf-exc-t" />
<span>{`请输入${item.label}`}</span>
</span>
)
}
];
}
}
if (item.type == "text") {
return (
<FormControl
key={index}
placeholder={placeholder}
className="item-content"
showClose={true}
disabled={disabled}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "combo") {
let dataSource = item.dataSource;
return (
<SelectRender
key={index}
placeholder={placeholder}
className="item-content"
disabled={disabled}
multiple={item.multi}
dataSource={item.dataSource}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "date") {
return (
<DateRender
disabled={disabled}
key={index}
placeholder={placeholder}
format={item.format}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "dateRange") {
return (
<RangeRender
disabled={disabled}
key={index}
placeholder={placeholder}
format={item.format}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "mounthRender") {
return (
<MonthRender
disabled={disabled}
key={index}
placeholder={placeholder}
format={item.format}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "dateTimeRender") {
return (
<DateTimeRender
disabled={disabled}
key={index}
placeholder={placeholder}
format={item.format}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "yearRender") {
return (
<YearRender
disabled={disabled}
key={index}
placeholder={placeholder}
format={item.format}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "number") {
let { precision } = item;
debugger;
return (
<InputNumber
disabled={disabled}
key={index}
placeholder={placeholder}
className="item-content"
iconStyle="one"
toThousands={true}
precision={precision}
{...getFieldProps(item.key, options)}
/>
);
} else if (item.type == "refer") {
return (
<RefComponent
disabled={disabled}
key={index}
placeholder={placeholder}
refName={item.refinfo}
fieldName={item.key}
clearMatchData={this.clearMatch}
multiple={item.multi}
clientParam={item.clientParam}
refCode={item.refCode}
colData={
item.colData
? item.colData
: {
strFieldCode: ["refcode", "refname"],
strFieldName: ["编码", "名称"]
}
}
form={this.props.form}
title={item.title ? item.title : item.label}
rules={options.rules}
/>
);
}
}
tplCreate(tpl) {
let { getFieldProps, getFieldError } = this.props.form;
let { btnState } = this.state;
return tpl.map((item, index) => {
if (!btnState && index >= 2) {
return "";
} else {
return (
<FormItem key={index}>
<div className={item.disabled ? "item disabled" : "item"}>
<div className="asterisk">{item.required ? <Icon type="uf-mi" className="mast" /> : ""}</div>
{this.createFormType(item, index)}
</div>
<div className="error">{getFieldError(item.key)}</div>
</FormItem>
);
}
});
}
render() {
const { getFieldProps, getFieldError } = this.props.form;
let self = this;
let { btnState } = this.state;
let { tpl } = this.props;
return (
<div className={btnState ? "from-item-container more" : "from-item-container less"}>
<Form>
<div className="form-item">
{this.tplCreate(tpl)}
<div className="handle">
<span onClick={self.onOK.bind(self)}>查询</span>
<span onClick={self.onClear.bind(self)}>清空</span>
{Array.isArray(tpl) && tpl.length <= 2 ? (
""
) : (
<span onClick={self.onCollapse.bind(self)}>{btnState ? "收起" : "展开"}</span>
)}
</div>
</div>
</Form>
</div>
);
}
}
export default Form.createForm({})(SearchPanle);
const propTypes = {
tpl: PropTypes.array,
onOK: PropTypes.func
};
const defaultProps = {
tpl: [],
onOK: () => {}
};