yonbip-code-gen-mcp
Version:
YonBIP高级版代码生成MCP
199 lines (144 loc) • 6.71 kB
Markdown
# 前端弹窗(使用高阶组件)开发步骤
1 定义弹窗 视图模型 (this.state.appmodel)
2 渲染视图 renderModel()
3 调用高阶组件,显示弹窗(this.props.modal.show("自己定义一个弹窗ID,后续 showModal时传入此ID即可"))
4 beSureBtnClick() 中
操作视图模型(this.state.appmodel) =》 更新视图(this.setState(this.state))
# 前端弹窗(使用高阶组件)Demo示例js
```js
/**
* 弹窗示例
*/
class ApplicationPage extends Component {
constructor(props) {
super(props);
/**
* 创建state 模型
*/
this.state = this.createState();
/**
* 适配版本变化,2105及其以后版本必须的调用, 之前版本不需要
*/
this.props.use.form('你的表单ID,需要在模板上注册好,并且2111后需要使用use.form注册');
}
createState = () => {
let state = {
isPageReady:false, //页面是否可以进行渲染
appmodal: {
title: '新增节点',// 弹框表头信息
beSureBtnClick: this.beSureBtnClick, //点击确定按钮事件
cancelBtnClick: this.cancelBtnClick, //取消按钮事件回调
userControl:true, // 点 确定/取消 按钮后,是否自动关闭弹框.true:手动关。false:自动关,默认false
size:'lg', // 模态框大小 sm/lg/xlg/xxlg/max 【className为junior/senior/combine和size不要同时配置】
noFooter : false, //是否需要底部按钮,默认有footer,有false,没有true
rightBtnName : '取消', //左侧按钮名称,默认‘取消’
leftBtnName : '确定', //右侧按钮名称, 默认‘确定’
className:'junior', /*
简单型junior -> 宽度410PX 高度200PX .【这个暂时别用,简单提示使用promptBox 或者 this.props.ncmodal的createModal】
中型senior -> 宽度520PX 高度根据内容自适应,最小值268,最大高度限制420,如modal主体还要承modal主体区出现滚动条
复杂型combine -> 宽度680PX 高度根据内容自适应,最小值268,最大高度限制570,如modal主体还要承载modal主体区出现滚动条
头部和底部固定高度
不写的话默认走size设定大小
*/
hasBackDrop:true,//显示遮罩层,显示是true,不显示是false,默认是true
zIndex:200,//遮罩的层级为zIndex,弹框默认为zIndex+1。默认为200,非比传项
showCustomBtns:false,//允许自定义footer里的按钮,默认false显示 确定 和 取消 按钮,true是传入自定义的按钮
customBtns:<div>自定义的一些按钮</div>, //JSX结构,样式需要自己写
validateCloseBtn:false,//点击关闭按钮的校验,默认是false不校验,校验是true【不校验点击X关闭,校验执行传入的closeModalEve回调】,配置为true的时候esc不关闭
hideRightBtn,//隐藏足部右边的按钮,默认是false不隐藏,隐藏是true
hideLeftBtn,//隐藏足部左边的按钮,默认是false不隐藏,隐藏是true
keyboard,//esc关闭modal,默认true
bodyHeight,//modalbody的高度,用于定制modal的高度,如果用了此高度,size和classname的配置都会无法使用
}
}
return state; //返回state解构
}
beSureBtnClick = () => {
//todo
}
/**
* 按钮弹窗按钮 调用此函数
*/
onShowModal = () => {
this.props.modal.show("自己定义一个弹窗ID,后续 showModal时传入此ID即可")
}
/**
* 获取数据 => 填充数据 => demo
*/
onDemo = () => {
//获取界面数据
getData(callback = (data) => {
//填充model数据
this.fillData({data:data, callback: (data) => {
//todo
}})
})
}
/**
* 获取数据 示例,具体看界面情况
* @param {*} callback
*/
getData = (callback = () => {}) => {
//调用获取数据的API或者接口等等
//todo fetchdata
//拿到数据后
callback && callback(fetchdata);
}
/**
* 将获取到的数据填充到模态框中
* @param {} params
*/
fillData = (params) => {
let {data,callback} = params;
//调用高阶组件或者,填充数据的APi,或者更新你的视图模型
//todo...
//看具体情况处理回调函数
//setTimeout(callback,0);
//callback && callback();
}
cancelBtnClick = () => {
//todo....
}
render() {
var { isPageReady } = this.state;
if (!isPageReady) return ''; //页面资源加载完成后才能渲染页面
/**
* 此处如果是要渲染模板上的内容,需要等待模板加载完成后才可以继续渲染,比如上方的 isPageReady
* @returns
*/
let renderModel = () => {
const {modal } = this.props;
let { createModal } = modal;
let { appmodal } = this.state;
/**
* @returns 需要渲染的弹窗内容
*/
let renderContent = () => {
// 获取创建表单API
let { createForm } = this.props.form;
return (
<div>
{
createForm('你的表单ID,需要在模板上注册好,并且2111后需要使用use.form注册',{
})
}
</div>
)
}
return(
<div>
{
createModal('自己定义一个弹窗ID,后续 showModal时传入此ID即可',{
...appmodal,
content: renderContent()
})
}
</div>
)
}
return <div>
{renderModel() /** 渲染弹窗**/}
</div>
}
}
```