提交 ae986cc0 authored 作者: 钟是志's avatar 钟是志

19571 学籍管理-学生管理-自定义统计,统计导出问题

上级 34fcd152
import React from 'react'
import { Select,Input,InputNumber,Button,DatePicker } from 'antd';
import React from 'react';
import { Select, Input, InputNumber, Button, DatePicker } from 'antd';
import { connect } from 'dva';
import moment from 'moment';
import ButtonDiy from '@/baseComponent/ButtonDiy';
const Option = Select.Option;
export default class QueryItem extends React.Component {
constructor(props) {
super(props);
const value = props.value || {};
this.state = {
stringX:value.stringX,
string:value.string,
disabled:value.disabled||false
};
}
componentWillReceiveProps(nextProps) {
// Should be a controlled component.
if ('value' in nextProps) {
const value = nextProps.value;
this.setState(value);
}
}
triggerChange = (changedValue) => {
// Should provide an event to pass value to Form.
const onChange = this.props.onChange;
if (onChange) {
onChange(Object.assign({}, this.state, changedValue));
}
};
changeNumber=(e)=>{
if (!('value' in this.props)) {
this.setState({ string:e});
}
this.triggerChange({ string:e});
};
changeStringX=(e)=>{
var disabled = false
if(e=="IS NOT NULL"||e=="IS NULL"){
disabled=true;
}
if (!('value' in this.props)) {
this.setState({ stringX:e ,disabled});
}
this.triggerChange({ stringX:e ,disabled});
};
changeString=(e)=>{
if (!('value' in this.props)) {
this.setState({ string:e.target.value });
}
this.triggerChange({ string:e.target.value });
};
changeDate=(date)=>{
//console.log(date)
if (!('value' in this.props)) {
this.setState({ string:date.valueOf() });
}
this.triggerChange({ string:date.valueOf() });
};
render() {
const{obj} = this.props;
const {string,stringX,disabled} =this.state;
if(obj.options && obj.options.length>0){
return(<div> <Select onChange={this.changeStringX}
value={stringX||"="}
style={{width:100, paddingRight: 12}}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled?"": <span style={{paddingRight: 12}}>
<Select onChange={this.changeNumber}
value={string}
style={{width:200}}>
{obj.options.map((r)=><Option key={r.v} value={r.v}>{r.l}</Option>)}
</Select>
</span>}
<ButtonDiy className='defaultRed'
name="删除"
handleClick={this.props.deleteQuery}/>
</div>)
}
if(obj.type === "java.lang.String"){
return (
<div>
<Select onChange={this.changeStringX}
value={stringX||"="}
style={{width:100, paddingRight: 12 }}>
<Option value="=">等于</Option>
<Option value="!=">不等于</Option>
<Option value="like"></Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled?"": <span style={{paddingRight: 12}}>
<Input onChange={this.changeString}
placeholder="请输入"
value={string}
style={{width:200,}}
/>
</span>}
<ButtonDiy className='defaultRed'
name="删除"
handleClick={this.props.deleteQuery}/>
</div>)
}else if(obj.type === "java.lang.Integer"||
obj.type === "java.lang.Double" ||
obj.type === "java.lang.Long"){
return ( <div> <Select onChange={this.changeStringX}
value={stringX||"="}
style={{width:100, paddingRight: 12}}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value=">">大于</Option>
<Option value=">=">大于等于</Option>
<Option value="<">小于</Option>
<Option value="<=">小于等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled?"": <span style={{paddingRight: 12}}>
<InputNumber onChange={this.changeNumber}
placeholder="请输入"
value={string}
style={{width:200}}
/>
</span>}
<ButtonDiy className='defaultRed'
style={{marginLeft: 12}}
name="删除"
handleClick={this.props.deleteQuery}/>
</div>)
}else if(obj.type === "java.lang.Boolean"){
return ( <div>
<Select onChange={this.changeStringX}
value={stringX||"="}
style={{width:100, paddingRight: 12}}>
<Option value="=">
等于
</Option>
</Select>
{disabled?"": <span style={{paddingRight: 12}}>
<Select onChange={this.changeNumber}
value={string}
style={{width:200}}
>
<Option value={true}>
</Option>
<Option value={false}>
</Option>
</Select>
</span>}
<ButtonDiy className='defaultRed'
style={{marginLeft: 12}}
name="删除"
handleClick={this.props.deleteQuery}/>
</div>)
}else if(obj.type === "java.util.Date"){
return(<div>
<Select onChange={this.changeStringX}
value={stringX||"="}
style={{width:100, paddingRight: 12}}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value=">">大于</Option>
<Option value=">=">大于等于</Option>
<Option value="<">小于</Option>
<Option value="<=">小于等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled?"": <span style={{paddingRight: 12}}>
<DatePicker onChange={this.changeDate}
showTime
format="YYYY-MM-DD HH:mm:ss"
allowClear={false}
style={{width:200}}
value={string?moment(string):null}
/>
</span>}
<ButtonDiy className='defaultRed'
style={{marginLeft: 12}}
name="删除"
handleClick={this.props.deleteQuery}/>
</div>)
}else{
return (<span>暂无法处理</span>)
}
}
constructor(props) {
super(props);
const value = props.value || {};
this.state = {
stringX: value.stringX, // 等于 不等于 那个下拉框的值
string: value.string, // 搜索值
disabled: value.disabled || false,
};
}
componentWillReceiveProps(nextProps) {
// Should be a controlled component.
if ('value' in nextProps && nextProps.value) {
const value = nextProps.value;
this.setState({
stringX: value.stringX, // 等于 不等于 那个下拉框的值
string: value.string, // 搜索值
disabled: value.disabled || false,
});
}
}
triggerChange = (changedValue) => {
// Should provide an event to pass value to Form.
const onChange = this.props.onChange;
if (onChange) {
const newValue = Object.assign({}, this.state, changedValue);
onChange(newValue);
}
};
changeNumber = (e) => {
if (!('value' in this.props)) {
this.setState({ string: e });
}
this.triggerChange({ string: e });
};
changeStringX = (e) => {
var disabled = false;
if (e == 'IS NOT NULL' || e == 'IS NULL') {
disabled = true;
}
if (!('value' in this.props)) {
this.setState({ stringX: e, disabled });
}
this.triggerChange({ stringX: e, disabled });
};
changeString = (e) => {
if (!('value' in this.props)) {
this.setState({ string: e.target.value });
}
this.triggerChange({ string: e.target.value });
};
changeDate = (date) => {
if (!('value' in this.props)) {
this.setState({ string: date.valueOf() });
}
this.triggerChange({ string: date.valueOf() });
};
render() {
const { obj } = this.props;
const { string, stringX, disabled } = this.state;
if (obj.options && obj.options.length > 0) {
return (
<div>
<Select
onChange={this.changeStringX}
value={stringX || '='}
style={{ width: 100, paddingRight: 12 }}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled ? (
''
) : (
<span style={{ paddingRight: 12 }}>
<Select onChange={this.changeNumber}
value={string}
style={{ width: 200 }}
>
{obj.options.map((r) => (
<Option key={r.v} value={r.v}>
{r.l}
</Option>
))}
</Select>
</span>
)}
<ButtonDiy className="defaultRed" name="删除" handleClick={this.props.deleteQuery} />
</div>
);
}
if (obj.type === 'java.lang.String') {
return (
<div>
<Select
onChange={this.changeStringX}
value={stringX || '='}
style={{ width: 100, paddingRight: 12 }}>
<Option value="=">等于</Option>
<Option value="!=">不等于</Option>
<Option value="like"></Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled ? (
''
) : (
<span style={{ paddingRight: 12 }}>
<Input
onChange={this.changeString}
placeholder="请输入"
value={string}
style={{ width: 200 }}
/>
</span>
)}
<ButtonDiy className="defaultRed" name="删除" handleClick={this.props.deleteQuery} />
</div>
);
} else if (
obj.type === 'java.lang.Integer' ||
obj.type === 'java.lang.Double' ||
obj.type === 'java.lang.Long'
) {
return (
<div>
<Select
onChange={this.changeStringX}
value={stringX || '='}
style={{ width: 100, paddingRight: 12 }}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value=">">大于</Option>
<Option value=">=">大于等于</Option>
<Option value="<">小于</Option>
<Option value="<=">小于等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled ? (
''
) : (
<span style={{ paddingRight: 12 }}>
<InputNumber
onChange={this.changeNumber}
placeholder="请输入"
value={string}
style={{ width: 200 }}
/>
</span>
)}
<ButtonDiy
className="defaultRed"
style={{ marginLeft: 12 }}
name="删除"
handleClick={this.props.deleteQuery}
/>
</div>
);
} else if (obj.type === 'java.lang.Boolean') {
return (
<div>
<Select
onChange={this.changeStringX}
value={stringX || '='}
style={{ width: 100, paddingRight: 12 }}>
<Option value="=">等于</Option>
</Select>
{disabled ? (
''
) : (
<span style={{ paddingRight: 12 }}>
<Select onChange={this.changeNumber} value={string} style={{ width: 200 }}>
<Option value={true}></Option>
<Option value={false}></Option>
</Select>
</span>
)}
<ButtonDiy
className="defaultRed"
style={{ marginLeft: 12 }}
name="删除"
handleClick={this.props.deleteQuery}
/>
</div>
);
} else if (obj.type === 'java.util.Date') {
return (
<div>
<Select
onChange={this.changeStringX}
value={stringX || '='}
style={{ width: 100, paddingRight: 12 }}>
<Option value="=">等于</Option>
<Option value="<>">不等于</Option>
<Option value=">">大于</Option>
<Option value=">=">大于等于</Option>
<Option value="<">小于</Option>
<Option value="<=">小于等于</Option>
<Option value="IS NOT NULL">不为空</Option>
<Option value="IS NULL">为空</Option>
</Select>
{disabled ? (
''
) : (
<span style={{ paddingRight: 12 }}>
<DatePicker
onChange={this.changeDate}
showTime
format="YYYY-MM-DD HH:mm:ss"
allowClear={false}
style={{ width: 200 }}
value={string ? moment(string) : null}
/>
</span>
)}
<ButtonDiy
className="defaultRed"
style={{ marginLeft: 12 }}
name="删除"
handleClick={this.props.deleteQuery}
/>
</div>
);
} else {
return <span>暂无法处理</span>;
}
}
}
/**
* 钟是志
* 2021年5月25日 10:56:50
* 学工 学生管理 自定义统计 功能 通用版
*
* */
import React, { Fragment } from 'react';
import { Select, Button, Divider, Table, Row, Col, Tag, Alert, Form, message } from 'antd';
import { connect } from 'dva';
......@@ -27,6 +33,14 @@ const nameSpan3 = {
};
var keyX = 1;
function getLableNameByValue(
options = [],
searchKey = ''){
const findItem = options.find((x) => {
return x.field === searchKey;
});
return findItem.name;
}
const FormItem = Form.Item;
@connect(({ cms, ExportFile, loading }) => ({
......@@ -306,6 +320,7 @@ export default class StatisticsInfo extends React.Component {
finish = () => {
const { dispatch, beanName, daoClass } = this.props;
const { x, y, z, infos, XxX, currentKey, groups } = this.state;
if (x == null) {
message.info('请选择横轴');
return;
......@@ -330,8 +345,6 @@ export default class StatisticsInfo extends React.Component {
x: fieldsValue[key].stringX,
v: fieldsValue[key].string,
});
}
if (groups.length === 0) {
......@@ -349,7 +362,7 @@ export default class StatisticsInfo extends React.Component {
var tty;
var ttz;
if (tx.notes) {
if (tx.notes.indexOf('com.') == -1) {
if (tx.notes.indexOf('com.') === -1) {
ttx = infos[x].hql.replace('.id', '.dictName');
} else {
ttx = infos[x].hql;
......@@ -358,7 +371,7 @@ export default class StatisticsInfo extends React.Component {
ttx = infos[x].hql;
}
if (ty.notes) {
if (ty.notes.indexOf('com.') == -1) {
if (ty.notes.indexOf('com.') === -1) {
tty = infos[y].hql.replace('.id', '.dictName');
} else {
tty = infos[y].hql;
......@@ -369,7 +382,7 @@ export default class StatisticsInfo extends React.Component {
if (z != null) {
const tz = infos[z];
if (tz && tz.notes) {
if (tz.notes.indexOf('com.') == -1) {
if (tz.notes.indexOf('com.') === -1) {
ttz = infos[z].hql.replace('.id', '.dictName');
} else {
ttz = infos[z].hql;
......@@ -447,9 +460,10 @@ export default class StatisticsInfo extends React.Component {
}
export = () => {
const { dispatch, beanName, daoClass } = this.props;
const { x, y, z, infos, XxX, currentKey, groups } = this.state;
const { beanName, daoClass } = this.props;
const { x, y, z, infos, XxX, currentKey, groups, qs } = this.state;
console.log(this.state, '----state---');
console.log(this.props, '----props---');
if (x == null) {
message.info('请选择第一统计项');
return;
......@@ -493,7 +507,7 @@ export default class StatisticsInfo extends React.Component {
var tty;
var ttz;
if (tx.notes) {
if (tx.notes.indexOf('com.') == -1) {
if (tx.notes.indexOf('com.') === -1) {
ttx = infos[x].hql.replace('.id', '.dictName');
} else {
ttx = infos[x].hql;
......@@ -502,7 +516,7 @@ export default class StatisticsInfo extends React.Component {
ttx = infos[x].hql;
}
if (ty.notes) {
if (ty.notes.indexOf('com.') == -1) {
if (ty.notes.indexOf('com.') === -1) {
tty = infos[y].hql.replace('.id', '.dictName');
} else {
tty = infos[y].hql;
......@@ -513,7 +527,7 @@ export default class StatisticsInfo extends React.Component {
if (z != null) {
const tz = infos[z];
if (tz && tz.notes) {
if (tz.notes.indexOf('com.') == -1) {
if (tz.notes.indexOf('com.') === -1) {
ttz = infos[z].hql.replace('.id', '.dictName');
} else {
ttz = infos[z].hql;
......@@ -526,6 +540,9 @@ export default class StatisticsInfo extends React.Component {
x: ttx,
y: tty,
z: ttz,
xname: getLableNameByValue(qs, x),
yname: getLableNameByValue(qs, y),
zname: getLableNameByValue(qs, z),
beanName,
daoClass,
xXx: XxX,
......@@ -533,7 +550,6 @@ export default class StatisticsInfo extends React.Component {
hql: currentKey && infos[currentKey] ? infos[currentKey].hql : null,
querys: JSON.stringify(qqs),
groups: JSON.stringify(ggs),
};
let downloadUrl = config.httpServer + '/CmsApi/exportStatistics?';
const token = getToken() != null && getToken() != 'null' ? getToken() : '0000';
......@@ -807,6 +823,8 @@ export default class StatisticsInfo extends React.Component {
>
<Select style={{ width: '100%' }}
onChange={selectConfigItem.onChange}
showSearch={true}
optionFilterProp={'children'}
value={selectConfigItem.value}>
{selectConfigItem.options.map((r) => {
return <Option key={r[selectConfigItem.optionKey]}
......@@ -853,7 +871,6 @@ export default class StatisticsInfo extends React.Component {
render() {
const { form, loading, isShow } = this.props;
const {
querys, groups, currentKey, exportLoading,
infos, columns, dataSource, x, y, z,
......@@ -877,25 +894,13 @@ export default class StatisticsInfo extends React.Component {
columnsTemp[0].width = 200;
}
}
let xxxs = [];
if (currentKey != null) {
if (infos[currentKey].type === 'java.lang.Integer' ||
infos[currentKey].type === 'java.lang.Double' ||
infos[currentKey].type === 'java.lang.Long') {
xxxs = [{ label: '数量', value: 'count' }, { label: '最大值', value: 'max' }, {
label: '最小值',
value: 'min',
}, { label: '平均值', value: 'avg' }, { label: '求和', value: 'sum' }];
} else {
xxxs = [{ label: '数量', value: 'count' }];
}
}
if (!isShow) {
return <span><ButtonDiy name='自定义统计'
type='default'
className='defaultBlue'
handleClick={() => this.props.setShow(true)}/></span>;
}
return (
<div style={{
backgroundColor: '#fff',
......@@ -916,10 +921,7 @@ export default class StatisticsInfo extends React.Component {
type="warning"/>
<Row>
<Col span={24}>
{
showSearchItem ?
<Fragment>
<div style={{display: showSearchItem ? 'block' : 'none'}}>
{this.selectDom(0)}
{this.selectDom(1)}
{this.selectDom(2)}
......@@ -928,7 +930,7 @@ export default class StatisticsInfo extends React.Component {
<div style={{ textAlign: 'left', paddingLeft: '25px' }}>
{querys.map((r, i) =>
<FormItem key={r.field}
labelCol={{
labelCol={{ // 查询条件
xl: nameSpan3.small,
xxl: nameSpan3.big,
}}
......@@ -937,8 +939,10 @@ export default class StatisticsInfo extends React.Component {
xxl: 24 - nameSpan3.big,
}}
label={r.name}>
{form.getFieldDecorator(i + 'q__' + r.field, {
initialValue: { stringX: '=' }, rules: [{
{form.getFieldDecorator(i + 'q__' + r.field,
{
initialValue: { stringX: '=' },
rules: [{
validator: (rule, value, callback) => {
var errors = [];
if (value == null) {
......@@ -970,9 +974,8 @@ export default class StatisticsInfo extends React.Component {
</Tag>,
)}
</Row>
</Fragment>
: null
}
</div>
<Row style={{ paddingTop: '20px' }}>
<Col span={24} style={{ textAlign: 'left' }}>
<ButtonDiy handleClick={this.finish}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论