UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

173 lines (169 loc) 7.26 kB
/** * Created by gaoly on 2018/05/17. 用于生产环境打包的时候 会将按需加载的组件传递进来 * 在调试和预览时 使用YYCreatePage */ import React from 'react' //import sa from 'superagent'; window._yylib_global_cache_={}; import { Toast } from 'antd-mobile'; var YYCreateView = require('./YYCreateView'); var {MODULE_URL,ADDR} = require('./../../common/RestUrl'); var {deepClone}=require('../../utils/FunctionUtil') import UrlUtils from '../../utils/UrlUtils'; var CACHE_KEY = "YYCreatePage_";//缓存的键值前缀 class YYCreatePageProd extends React.Component { constructor(props){ super(props); this.state={ appCode:props.appCode, pageCode:props.pageCode, billTypeCode:null, uiMeta:undefined, uiParser:props.uiParser, uiEvent:props.uiEvent, uiParams:props.uiParams, uiMeta:props.uiMeta, pluginUrl:null } } componentWillReceiveProps(nextProps){ if ('uiMeta' in nextProps) { this.setState({ uiMeta: nextProps.uiMeta }); } if ('uiParams' in nextProps) { this.setState({ uiParser: nextProps.uiParams }); } if ('uiParser' in nextProps) { this.setState({ uiParser: nextProps.uiParser }); } if ('uiEvent' in nextProps) { this.setState({ uiEvent: nextProps.uiEvent }); } if('appCode' in nextProps && 'pageCode' in nextProps){ //当应用编码或页面编码变更时重新加载刷新页面 if(this.props.appCode !== nextProps.appCode || this.props.pageCode !== nextProps.pageCode){ this.refreshPage(nextProps.appCode,nextProps.pageCode,null,null); } } if('location'in nextProps){ var query= this.props.location?this.props.location.query:{}; var nextQuery= nextProps.location?nextProps.location.query:{}; if(query.appCode!==nextQuery.appCode||query.pageCode!==nextQuery.pageCode){ this.refreshPage(nextProps.appCode,nextProps.pageCode,nextProps.location,null); } } if('routeParams' in nextProps){ var query= this.props.routeParams?this.props.routeParams:{}; var nextQuery= nextProps.routeParams?nextProps.routeParams:{}; if(query.appCode!==nextQuery.appCode||query.pageCode!==nextQuery.pageCode){ this.refreshPage(nextProps.appCode,nextProps.pageCode,null,nextProps.routeParams); } } } refreshPage(appCode,pageCode,location,routeParams){ var query= location?location.query:{}; if(routeParams)query = routeParams; //如果属性不存在则取路由URL参数 var _appCode = appCode?appCode:query.appCode; var _pageCode = pageCode?pageCode:query.pageCode; this.setState({appCode:_appCode,pageCode:_pageCode}); //更新appCode|pageCode this._loadPageData(_appCode,_pageCode); } _loadPageData(appCode,pageCode){ var ajax=window.YYUtils.Ajax; var self = this; if(!appCode||!pageCode)return; var {serverUrl,enableOrg,mode,enableCache} = this.props; var params = { appCode:appCode, pageCode:pageCode, mode:mode }; //是否启用自动获取当前组织 if (enableOrg) { params.orgId = window.YYUtils.AuthToken.getOrgaId(); params.tenantId = window.YYUtils.AuthToken.getTenantId(); } //读取缓存(内存级) var metaData = enableCache===false?null:this.getCache(CACHE_KEY+appCode+"_"+pageCode); if(metaData){ self.setState({uiMeta: deepClone(metaData), billTypeCode:metaData.billTypeCode}); }else{ ajax.getJSONOffLine(serverUrl, params, function (result) { var data = null; if (result.success && result.backData && result.backData.data) { data = JSON.parse(result.backData.data); if(data.files){ self.filePath=data.files;//赋值给当前对象 } if(result.backData.orgId){ console.info('[加载页面]'+result.backData.orgId.name+'('+result.backData.id+')/'+appCode+'/'+pageCode); } var path=(result.backData.files&&result.backData.files!="")?ADDR+"/"+result.backData.files:null self.setState({pluginUrl:path,uiMeta: (data&&data!="")?data:null, billTypeCode:result.backData.billTypeCode}); self.setCache(CACHE_KEY+appCode+"_"+pageCode, (data&&data!="")?null:deepClone(data));//存入缓存(内存级) }else{ console.warn('[加载页面]'+appCode+'/'+pageCode+'/空页面'); } }); } } componentWillUpdate(nextProps,nextState){ if(nextState.uiMeta){ Toast.hide(); } } componentWillMount(){ Toast.loading('加载中',0); } getCache(key) { return window._yylib_global_cache_[key] } // 保存数据到内存存储 setCache(key, value) { window._yylib_global_cache_[key] = value } componentDidMount() { var {appCode,pageCode,location,routeParams,localCode} = this.props; (!localCode)&& this.refreshPage(appCode,pageCode,location,routeParams); } render() { //parserControl为编译时传递过来的动态组件集合 var {router,location,params,route,routeParams,routes,enableLoading,parserControl}=this.props; var {appCode,pageCode,billTypeCode,pluginUrl} = this.state; var _props = {router,location,params,route,routeParams,routes}; _props.uiParams = this.state.uiParams; _props.uiMeta = this.state.uiMeta; _props.uiParser = this.state.uiParser; _props.uiEvent = this.state.uiEvent; var returnDom=null; if(this.state.uiMeta){ returnDom=(<YYCreateView {..._props} pluginUrl={pluginUrl} parserControl={parserControl} appCode={appCode} pageCode={pageCode} billTypeCode={billTypeCode}/>); }else if(enableLoading){ returnDom=(<p></p>); } return returnDom; } } YYCreatePageProd.defaultProps={ uiMeta:null,//本地存储数据 appCode:null,//应用编码 pageCode:null,//页面编码 uiParser:null,//UI组件解析器 uiEvent:null,//UI事件处理器 uiParams:null,//UI参数处理器 mode:null, // publish:发布状态 debug:调试状态(默认) serverUrl:MODULE_URL.GET_PAGE_DATA, enableOrg:true,//是否获取当前组织 enableCache:false,//是否启用缓存 enableLoading:true//是否启用加载中 } module.exports = YYCreatePageProd;