import React,{ Fragment ,Component } from 'react';
import { Button } from 'antd';
import { EsearchListHoc, ElistHoc ,EformHoc ,Edocument, Edrawer ,Prompt} from 'emptyd';
import connectAid, { Actions } from '@store/connect';
import { config } from '@config/index';
import { emptyFormConfig } from "./post";
import styles from './index.less';
const { DATALIST ,DUTY_DATALIST_DELETE , DUTY_DATALIST_UPDATE , DUTY_DATALIST_ADD ,LOGIN } = Actions;
const EsearchListHocDome = connectAid(
[ LOGIN,DATALIST,DUTY_DATALIST_DELETE ,DUTY_DATALIST_UPDATE,DUTY_DATALIST_ADD ]
)(EsearchListHoc({
header:"数据展示",
Prompt,
headMenu:[
function(this:any,callback){
return(
this.props.method.handleListAdd(callback)}>
)
},
],
listActionName:DATALIST,
method:{
/* params 查询的参数 props log查看 */
componentDidMount(params={},props,currentState){
const effectParams = {
deptId : config.userMsg["deptId"],
dutyType:2,
page:1,
pageSize:10
}
props.Actions[Actions['DATALIST_action']](DATALIST+"_REQUEST",{...effectParams,...params});
},
handleListAdd(callback){
callback("execute","handleListAdd");
},
// [ 可选 ] 菜单图标点击钩子 返回false 屏蔽切换展示功能
menuClickHook(this:any){
return true
},
// [ 可选 ] 查询图标点击钩子 返回false 屏蔽查询功能
searchClickHook(){
// Prompt["warning"]("无需查询")
return true
},
deleteList(this:any,RowData){
this.props.modal.confirm({
title: '确定删除当前数据?',
okText: '确认',
okType: 'danger',
cancelText: '取消',
onOk:()=>{
return new Promise((resolve, reject) => {
const Actios = this.props.ownAction;
if(Actios.length>0){
Actios.forEach(async (actions,index)=>{
if(actions.actionType == DUTY_DATALIST_DELETE ){
const { actionType, dispatch } = actions;
const res = await dispatch(actionType,[RowData.id]);
if(res){
this.props.handleEvent.reload();
resolve(this.props.Prompt["success"]("删除成功!"))
}else{
reject()
}
}
})
}
}).catch((error) => { throw Error(error) });
}
})
}
},
searchPanel:{
type:"table",//表单展示类型 table|card
search:[
{ // 筛选项
field:'name',
label:"班次名称",
type:"Input",
inputConfig:{// antd input 配置
placeholder:"名称"
},
//antd ->Form.Item 配置
antdFormItemOptions:{
colon:false
},
//antd ->getFieldDecorator(id, options) antdOptions对应 options 配置
antdOptions:{
rules: [{
required: true,
message: '请输入班次名称',
}]
}
}],
//对应antd 中的 form的配置项 [ 可选 ]
formOptions:{
hideRequiredMark:true
},
//对应antd 中的 栅格配置 [ 可选 ]
searchLayout:{
xl:8,lg:12,md:12,sm:24,xs:24
},
//筛选表单项 label 和表单的布局 label wrapper [ 可选 ]
layout:{
//对应antd 中的配置
labelCol: {
xs: {span: 10},
sm: {span: 6},
md: {span: 8},
lg: {span: 6},
xl: {span: 5},
xxl: {span: 5}
},
//对应antd 中的配置
wrapperCol: {
xs: {span: 14},
sm: {span: 18},
md: {span: 14},
lg: {span: 18},
xl: {span: 19},
xxl: {span: 19}
},
},
operation:{ //[ 必填 ]
layout:"left" ,//提交按钮组 布局
buttonGroup:[{type:"submit",text:"查询"},{type:"reset",text:"重置"}] //提交按钮项
}
},
listConfig:{
// 对应antd的Table配置
tableConfig:{
rowKey:"id"
},
// 表格列map数据,对应antd的表格 columns
tableColumns:[{
title: ' 编号',
dataIndex: 'id',
width:100,
align:'center'
}, {
title: '颜色',
dataIndex: 'color',
align:"center",
render: function(item){
return(
)
}
}, {
title: '班次名称',
align:"center",
dataIndex: 'name',
},{
title: '所属部门',
align:"center",
dataIndex: 'deptName',
}, {
title: '班次类型',
align:"center",
dataIndex: 'dutyType',
render: function(record){
return record == 1?'早班':'晚班'
}
}, {
title: '上班时间',
align:"center",
dataIndex: 'startTime',
}, {
title: '下班时间',
align:"center",
dataIndex: 'endTime',
},{
title: '操作',
align:"center",
width:300,
renderUseState: function(this:any,text, record, index){
return(
)
},
}],
cardHandleBtn:[
{
type:"primary",
text:"详情"
},{
type:"",
text:"修改"
},{
type:"danger",
text:"删除",
}
]
},
editConfig:{
content:function(this:any,params){
this.params = params
return EformHoc.call(this,emptyFormConfig,"edit")
}
},
addConfig:{
content:function(this:any,params){
return EformHoc.call(this,emptyFormConfig,{cancel:this.handleCancel})
}
},
detailCofig:{
content:function(){
return ElistHoc({
type:"default",
data:{
"班次名称":"name",
"所属部门":"deptName",
"班次类型":"dutyType",
"上班时间":"startTime",
"下班时间":"endTime",
"上班打卡时间范围":"onRange",
"下班打卡时间范围":"offRange",
"午休时间":"duration"
}})
}
}
}));
const data = [{
key: '1',
title: 'header',
explain: "页面标题",
type:"string",
default: '-',
},{
key: '2',
title: 'headMenu',
explain: "头部菜单元素",
type:"Array",
default: "[]",
},{
key: '4',
title: 'method',
explain: "放置交互函数",
type:"object",
default: '{}',
},{
key: '5',
title: 'searchPanel',
explain: "筛选项配置对象",
type:"object",
default: '{}',
},{
key: '6',
title: 'listConfig',
explain: "列表配置对象",
type:"object",
default: '{}',
}];
class EdrawerDocuments extends Component {
constructor(props){
super(props);
this.handleClose = this.eDrawerController.bind(this,"visible",false);
this.handleShow = this.eDrawerController.bind(this,"visible",true);
}
state={
visible:false
}
eDrawerController(type,visible){
this.setState((prevState,props)=>{
return{
[type]:visible
}
})
}
handleClose
handleShow
handleGroupClose
handleGroupShow
render() {
const EDprops = {
title:`表格查询页面`,
visible:this.state.visible,
onClose:this.handleClose,
closable:true,
placement:"right",
}
return (
),
titDescripttion:"像echarts 一样配置你的页面",
code:`
/************************* index.tsx *************************/
import React,{ Fragment ,Component } from 'react';
import { EsearchListHoc, ElistHoc ,EformHoc, Edrawer} from 'emptyd';
import { Button } from 'antd';
import connectAid, { Actions } from '@store/connect';
import { config } from '@config/index';
import { emptyFormConfig } from "./post";
import styles from './index.less';
const { DATALIST ,DUTY_DATALIST_DELETE , DUTY_DATALIST_UPDATE , DUTY_DATALIST_ADD ,LOGIN } = Actions;
const EsearchListHocDome = connectAid(
[ LOGIN,DATALIST,DUTY_DATALIST_DELETE ,DUTY_DATALIST_UPDATE,DUTY_DATALIST_ADD ]
)(EsearchListHoc({
header:"数据展示",
headMenu:[
function(this:any,callback){
return(
this.props.method.handleListAdd(callback)}>
)
},
],
listActionName:DATALIST,
method:{
/* params 查询的参数 props log查看 */
componentDidMount(params={},props,currentState){
const effectParams = {
deptId : config.userMsg["deptId"],
dutyType:2,
page:1,
pageSize:10
}
props.Actions[Actions['DATALIST_action']](DATALIST+"_REQUEST",{...effectParams,...params});
},
handleListAdd(callback){
callback("execute","handleListAdd");
},
// [ 可选 ] 菜单图标点击钩子 返回false 屏蔽切换展示功能
menuClickHook(this:any){
return true
},
// [ 可选 ] 查询图标点击钩子 返回false 屏蔽查询功能
searchClickHook(){
// Prompt["warning"]("无需查询")
return true
},
deleteList(this:any,RowData){
this.props.modal.confirm({
title: '确定删除当前数据?',
okText: '确认',
okType: 'danger',
cancelText: '取消',
onOk:()=>{
return new Promise((resolve, reject) => {
const Actios = this.props.ownAction;
if(Actios.length>0){
Actios.forEach(async (actions,index)=>{
if(actions.actionType == DUTY_DATALIST_DELETE ){
const { actionType, dispatch } = actions;
const res = await dispatch(actionType,[RowData.id]);
if(res){
this.props.handleEvent.reload();
resolve(this.props.Prompt["success"]("删除成功!"))
}else{
reject()
}
}
})
}
}).
catch((error) => { throw Error(error) });
}
})
}
},
searchPanel:{
type:"table",//表单展示类型 table|card
search:[
{ // 筛选项
field:'name',
label:"班次名称",
type:"Input",
inputConfig:{// antd input 配置
placeholder:"名称"
},
//antd ->Form.Item 配置
antdFormItemOptions:{
colon:false
},
//antd ->getFieldDecorator(id, options) antdOptions对应 options 配置
antdOptions:{
rules: [{
required: true,
message: '请输入班次名称',
}]
}
}],
//对应antd 中的 form的配置项 [ 可选 ]
formOptions:{
hideRequiredMark:true
},
//对应antd 中的 栅格配置 [ 可选 ]
searchLayout:{
xl:8,lg:12,md:12,sm:24,xs:24
},
//筛选表单项 label 和表单的布局 label wrapper [ 可选 ]
layout:{
//对应antd 中的配置
labelCol: {
xs: {span: 10},
sm: {span: 6},
md: {span: 8},
lg: {span: 6},
xl: {span: 5},
xxl: {span: 5}
},
//对应antd 中的配置
wrapperCol: {
xs: {span: 14},
sm: {span: 18},
md: {span: 14},
lg: {span: 18},
xl: {span: 19},
xxl: {span: 19}
},
},
operation:{ //[ 必填 ]
layout:"left" ,//提交按钮组 布局
buttonGroup:[{type:"submit",text:"查询"},{type:"reset",text:"重置"}] //提交按钮项
}
},
listConfig:{
// 对应antd的Table配置
tableConfig:{
rowKey:"id"
},
// 表格列map数据,对应antd的表格 columns
tableColumns:[{
title: ' 编号',
dataIndex: 'id',
width:100,
align:'center'
}, {
title: '颜色',
dataIndex: 'color',
align:"center",
render: function(item){
return(
)
}
}, {
title: '班次名称',
align:"center",
dataIndex: 'name',
},{
title: '所属部门',
align:"center",
dataIndex: 'deptName',
}, {
title: '班次类型',
align:"center",
dataIndex: 'dutyType',
render: function(record){
return record == 1?'内勤班次':'外勤班次'
}
}, {
title: '上班时间',
align:"center",
dataIndex: 'startTime',
}, {
title: '下班时间',
align:"center",
dataIndex: 'endTime',
},{
title: '操作',
align:"center",
width:300,
renderUseState: function(this:any,text, record, index){
return(
)
},
}],
cardHandleBtn:[
{
type:"primary",
text:"详情"
},{
type:"",
text:"修改"
},{
type:"danger",
text:"删除",
}
]
},
editConfig:{
content:function(this:any,params){
this.params = params
return EformHoc.call(this,emptyFormConfig,"edit")
}
},
addConfig:{
content:function(this:any,params){
return EformHoc.call(this,emptyFormConfig,{cancel:this.handleCancel})
}
},
detailCofig:{
content:function(){
return ElistHoc({
type:"default",
data:{
"班次名称":"name",
"所属部门":"deptName",
"班次类型":"dutyType",
"上班时间":"startTime",
"下班时间":"endTime",
"上班打卡时间范围":"onRange",
"下班打卡时间范围":"offRange",
"午休时间":"duration"
}})
}
}
}));
/************************* post.tsx *************************/
import React,{ Component } from 'react';
import { Select,TimePicker , InputNumber,Input } from 'antd';
import moment from 'moment';
import freetool from 'freetool';
const { GetType } = freetool;
const Option = Select.Option
const format = 'HH:mm';
export const emptyFormConfig = function(this:any,params){
const that = this;
const result:any = {
Rowlayout:{ type:"flex",justify:"start" },
searchPanel:{
search:[{
field:'dutyType',
type:"Custom",//自定义类型
label:"班次类型",
renderCustom:(
class extends Component{
constructor(props){
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(value){
this.props.onChange(value)
}
render(){
const initialValue = this.props['data-__meta']["rules"][0]["initialValue"];
const values = this.props.value;
return(
)
}
}
),
antdFormItemOptions:{
colon:false
},
antdOptions:{
initialValue:(that&&that.params)?that.params.dutyType:null,
rules: [{
required: true,
message: '请选择班次类型',
}]
}
},{ // 筛选项
field:'name',
label:"班次名称",
type:"Input",
inputConfig:{// antd input 配置
placeholder:"测试holder"
},
//antd ->Form.Item 配置
antdFormItemOptions:{
colon:false
},
//antd ->getFieldDecorator(id, options) antdOptions对应 options 配置
antdOptions:{
initialValue:(that&&that.params)?that.params.name:"",
rules: [{
required: true,
message: '请输入班次名称',
}]
}
},{
field:'startTime',
type:"Custom",//自定义类型
label:"上班时间",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.startTime,format):moment(),
rules: [{
required: true,
message: '请输入上班时间',
}]
}
},{
field:'endTime',
type:"Custom",//自定义类型
label:"下班时间",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.endTime,format):moment(),
rules: [{
required: true,
message: '请输入下班时间',
}]
}
},{
field:'startTimeStart',
type:"Custom",//自定义类型
label:"开始(上班打卡)",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.onRange.split("-")[0],format):moment(),
rules: [{
required: true,
message: '请输入时间',
}]
}
},{
field:'startTimeEnd',
type:"Custom",//自定义类型
label:"结束(上班打卡)",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.onRange.split("-")[1],format):moment(),
rules: [{
required: true,
message: '请输入时间',
}]
}
},{
field:'endTimeStart',
type:"Custom",//自定义类型
label:"开始(下班打卡)",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.offRange.split("-")[0],format):moment(),
rules: [{
required: true,
message: '请输入时间',
}]
}
},{
field:'endTimeEnd',
type:"Custom",//自定义类型
label:"结束(下班打卡)",
renderCustom:(
TimePicker
),
antdFormItemOptions:{
colon:false
},
CustomConfig:{
format
},
antdOptions:{
initialValue:(that&&that.params)?moment(that.params.offRange.split("-")[1],format):moment(),
rules: [{
required: true,
message: '请输入时间',
}]
}
},{
field:'duration',
type:"Custom",//自定义类型
label:"午休时间",
renderCustom:(
InputNumber
),
antdFormItemOptions:{
colon:false
},
antdOptions:{
initialValue:(that&&that.params)?that.params.duration:0,
rules: [{
required: true,
message: '请输入时间',
}]
}
},
],
//提交函数
submit:function(this:any,e,parent){
e.preventDefault();
this.props.form.validateFields((err, values) => {
// console.log(err,values);
if (!err) {
parent.Prompt["loading"]("数据提交中");
Reflect.ownKeys(values).forEach((item,index)=>{
if(values[item].constructor.name=="Moment"||values[item].constructor.name=="_"){
values[item] = values[item].format(format);
}
})
if(that&&that.params&&that.params.id){values.id = that.params.id}
values.onRange = -<{values.startTimeEnd}>;
values.offRange = <{values.endTimeStart>-
parent.ownAction.forEach((item,index)=>{
if(item.actionType=="DUTY_DATALIST_UPDATE"&&GetType(that)!=="undefined"){
delete values.endTimeEnd;
delete values.endTimeStart;
delete values.startTimeEnd;
delete values.startTimeStart;
item.dispatch(item.actionType,{...values,Prompt:parent.Prompt,onClose:this.props.onClose,reload:parent.handleEvent.reload});
}else if(item.actionType=="DUTY_DATALIST_ADD"&&GetType(that)==="undefined"){
values.deptId = parent.ownState.res_LOGIN["data"]["deptId"];
values.deptName = parent.ownState.res_LOGIN["data"]["departmentNameList"];
item.dispatch(item.actionType,{...values,Prompt:parent.Prompt,onClose:params.cancel,reload:parent.handleEvent.reload});
}
})
}
});
},
//对应antd 中的 form的配置项 [ 可选 ]
formOptions:{
hideRequiredMark:false,
layout:"vertical",
style:{
width:"1400px",
background:"#fff",
paddingTop:"30px",
height:"100%",
paddingRight:"40px",
paddingLeft:"40px",
borderRight:"1px solid #d8ecfc",
borderLeft:"1px solid #d8ecfc"
}
},
//对应antd 中的 栅格配置 [ 可选 ]
searchLayout:{
xl:8,lg:12,md:24,sm:24,xs:24,xxl:6
},
//筛选表单项 label 和表单的布局 label wrapper [ 可选 ]
layout:{
//对应antd 中的配置
labelCol: {
xs: {span: 10},
sm: {span: 4},
md: {span: 2},
lg: {span: 4},
xl: {span: 2},
xxl: {span:4}
},
wrapperCol: {
xs: {span: 14},
sm: {span: 20},
md: {span: 22},
lg: {span: 20},
xl: {span: 22},
xxl: {span: 20}
},
},
operation:{ //[ 必填 ]
layout:"center" ,//提交按钮组 布局
buttonGroup:[{type:"submit",text:"提交"},{type:"reset",text:"重置"}] //提交按钮项
}
}
}
if(GetType(that)==="undefined"){
result.searchPanel.search.forEach((item,index)=>{
if( item.antdOptions&& item.tag!=="InputColor"&&item.tag!=="uploadImage"){delete item.antdOptions.initialValue};
if(index!==0&&item.antdOptions){item.antdOptions.initialValue = null};
})
}
return result
}
`
}]}
docDescripttion="EsearchListHoc 实现了页面配置化,根据具体的业务场景配置页面,因配置参数较多,详情参照代码注释:"
documentData={data}
/>
);
}
}
export default EdrawerDocuments;