react mobx状态管理_const { tojs } = mobx;-程序员宅基地

//list.js
const { Button } = WeaverMobile;
const { TabBar, Icon,Tabs, WhiteSpace, Badge ,Accordion, List} = WeaverMobile;
const { Provider,inject,observer } = mobxReact;
const { NavBar } = WeaverMobile;
const { Carousel, WingBlank } = WeaverMobile;
const {toJS} = mobx;

const tabs2 = [
  { title: 'First Tab1221', sub: '1' },
  { title: 'Second Tab', sub: '2' },
  { title: 'Third Tab', sub: '3' },
];
//react组件层,用来定义视图和交互
//inject获取baseFormStore到组件props中
//observer来支持集成mobx
@inject("homeStore")
@observer
class ListComponent extends React.Component {
  constructor(props) { //初始化,固定语法
    super(props);
      this.state = {
      selectedTab: 'redTab',
      hidden: false,
      fullScreen: false,

      data: ['1', '2', '3'],
      imgHeight: 130,
    };
  }
  componentDidMount() {
    // console.log('componentDidMount()')
    const { homeStore }=this.props;

      // window.onload = function(){
      //   var box=document.getElementById("test");
      //     if(box){ //此处在加一层判断,更加严密,如果box存在的情况下获取
      //       console.log(box.offsetHeight)
      //       if(box.offsetHeight > 75){//超过3行
      //         homeStore.setScaleCollpased(true) ;
      //         homeStore.setsSaleNeedCollpased(true) ;
      //       }
      //     }
      // }

  }

  componentDidUpadte(){
    // console.log('componentDidUpadte()')
  }

  componentWillMount(){ 
    if(Tools.mobileDetect().is('iPhone')&&window.iNoBounce&&window.iNoBounce.isEnabled()){ 
      window.iNoBounce.disable(); 
    } 
    // console.log('componentWillMount()')
  } 

  componentWillUnmount() { 
    if(Tools.mobileDetect().is('iPhone')&&window.iNoBounce&&window.iNoBounce.isEnabled()){ 
      window.iNoBounce.enable(); 
    } 
  }


  onChange = (key) => {
    // console.log(key);
  }

  scaleExpand = () =>{
    const { homeStore } = this.props; //获取store
    const {scaleCollpased} = homeStore;
    
    homeStore.setScaleCollpased(!scaleCollpased) ;

  }

  scaleSpan = () =>{
    const { homeStore } = this.props; //获取store
    let {previousInfo, scaleCollpased, scaleNeedCollpased} = homeStore;
    // console.log('scaleCollpased:' + scaleCollpased +', scaleNeedCollpased:' + scaleNeedCollpased);
    // console.log(previousInfo.scale);
 
    let _scale = '';
    if(previousInfo.scale != undefined && previousInfo.scale.length > 45 && scaleNeedCollpased == false){
      // console.log(previousInfo.scale.length);
      homeStore.setScaleCollpased(true) ;
      homeStore.setsSaleNeedCollpased(true);
          // console.log('111111111')
    }

    if(previousInfo.scale != undefined && previousInfo.scale == ''){
      scaleCollpased = false;
      scaleNeedCollpased = false;
    }
    // else{
    //   homeStore.setScaleCollpased(false) ;
    //   homeStore.setsSaleNeedCollpased(false);
    //       console.log('222222222222222222222')
    // }

    if(scaleCollpased){
      _scale = previousInfo.scale.substring(0,45) + '...'
    }else{
      _scale = previousInfo.scale
    }

    // console.log(_scale)

    

    // var box=document.getElementById("test");
    // if(box){ //此处在加一层判断,更加严密,如果box存在的情况下获取
    //   console.log(box.offsetHeight)
    //     if(box.offsetHeight > 75){//超过3行
    //     homeStore.setScaleCollpased(true) ;
    //     homeStore.setsSaleNeedCollpased(true) ;
    //   }
    // }

    

      return(
        <div><span  className='left-span'>建设规模</span>
          <span ref = {() => {}} className='right-span'>{_scale}<span onClick={this.scaleExpand} style={
   {display:scaleNeedCollpased?'block':'none',color:'#036DD7'}}>{scaleCollpased?'展开':'收起'}</span></span>
        </div>
      )

    


  }


  render() { //渲染
    const { homeStore } = this.props; //获取store
    const { hidden } = this.state; //获取store
    const {previousInfo} = homeStore;
    if(previousInfo == undefined || previousInfo == null){
      return alert('没有数据');
    }

    let telInfo = 'tel:'+ previousInfo.contactMobile;
    let leadTelInfo = 'tel:'+ previousInfo.leaderMobile;
    // console.log(telInfo)


    //    console.log('render()')
     return (
       
      <div>
       <div>
       <div>
                <Accordion openAnimation={
   {}} defaultActiveKey={['1','2']} className="my-accordion" onChange={this.onChange}>
                  <Accordion.Panel className="panel"  header="项目基本信息" key={'1'}>
                    <List className="my-list">
                      <List.Item>
                        <div><span className='left-span'>项目名称</span><span  className='right-span'>{previousInfo.projectName}</span></div>
                      </List.Item>
                      <List.Item multipleLine wrap>
                         {/**<div><span  className='left-span'>建设规模</span><span id='test' ref = {() => { console.log('*********')}} className='right-span'>{previousInfo.scale}</span></div> */}
                         {this.scaleSpan()}
                      </List.Item>
                       <List.Item>
                        <div><span className='left-span'>总投资</span><span  className='right-span'>{(Number(previousInfo.planTotalFund)/10000).toFixed(2)}亿元</span></div>
                      </List.Item>
                      <List.Item>
                        <div><span className='left-span'>计划年份</span><span  className='right-span'>{previousInfo.planStartYear}</span></div>
                      </List.Item>
                    </List>
                  </Accordion.Panel>
                  <Accordion.Panel className="panel"  header="责任单位" key={'2'}>
                    <List className="my-list">
                      <List.Item>
                        <div><span className='left-span'>单位名称</span><span  className='right-span'>{previousInfo.unitName}</span></div>
                      </List.Item>
                      <List.Item>
                         <div><span className='left-span'>责任领导</span><span  className='right-span'>{previousInfo.leader}</span></div>
                      </List.Item>
                       <List.Item>
                        <div><span className='left-span'>责任领导电话</span><span  className='right-span tel-num'><img src="${appRes}/tel-icon.png"/>{previousInfo.leaderMobile}<a style={
   {display:(previousInfo.leaderMobile == '' || previousInfo.leaderMobile == 'undefined')?'none':''}} href={leadTelInfo}>点击拨号 ></a></span></div>
                      </List.Item>
                       <List.Item>
                        <div><span className='left-span'>联系人</span><span  className='right-span'>{previousInfo.contacts}</span></div>
                      </List.Item>
                       <List.Item>
                        <div>
                          <span className='left-span'>联系人电话</span><span  className='right-span tel-num'><img src="${appRes}/tel-icon.png"/>{previousInfo.contactMobile}<a style={
   {display:(previousInfo.contactMobile == '' || previousInfo.contactMobile == 'undefined')?'none':''}} href={telInfo}>点击拨号 ></a></span>
                        </div>
                      </List.Item>
                    </List>
                  </Accordion.Panel>
                </Accordion>
        </div>
       </div>
      </div>

     )
  }
}

ecodeSDK.exp(ListComponent);

//mobx store状态管理

const {observable,action} = mobx;
const { RouteLayout } = WeaverMobilePage;
class HomeStore { //store层,用来定义和处理前端纯数据
  @observable previousInfo = {};
  @observable progressInfo = {};
  @observable projectId = 'test0000001';
  @observable scaleCollpased = false;//建设规模是否收起
  @observable scaleNeedCollpased = false;//建设规模是否收起
  @observable oneWordCollpased = false;//建设规模是否收起
  @observable oneWordNeedCollpased = false;//建设规模是否收起
  @observable preProgress = [];//建设规模是否收起

  @action
  getPreviousInfo = (param) => {
    // console.log('getPreviousInfo');
    API.getPreviousInfo(param).then(action(res => {
      // console.log('getPreviousInfo');
      if (res.api_status) { // 接口请求成功/失败处理
        this.scaleCollpased = false; //初始化
        this.scaleNeedCollpased = false;//初始化
        this.previousInfo = res.data;
      } else {
        message.error(res.msg || 'getPreviousInfo 接口调用失败!')
      }
    }));
  }

  @action
  getProgress = (param) => {
    // console.log('getProgress');
    API.getProgress(param).then(action(res => {
      // console.log('getProgress');
      if (res.api_status) { // 接口请求成功/失败处理
        this.oneWordCollpased = false;
        this.oneWordNeedCollpased = false;
        this.progressInfo = res.data;
      } else {
        message.error(res.msg || 'getProgress 接口调用失败!')
      }
    }));
  }

  @action
  getPreProgress = (param) => {
    API.preProgress(param).then(action(res => {
      if (res.api_status) {//preProgress
        let rdd = res.data;
        var table = [];
        if(rdd == undefined) {
          this.preProgress = [];
          return;
        }
        table.push({name:"红线用地(亩)",pre:rdd.preHxyd,act:rdd.actHxyd,rate:rdd.hxydRate});
        table.push({name:"大临用地(亩)",pre:rdd.preDlyd,act:rdd.actDlyd,rate:rdd.dlydRate});
        table.push({name:"民房拆迁(㎡)",pre:rdd.preMfcq,act:rdd.actMfcq,rate:rdd.mfcqRate});
        table.push({name:"厂房拆迁(㎡)",pre:rdd.preCfcq,act:rdd.actCfcq,rate:rdd.cfcqRate});
        table.push({name:"坟墓迁移(处)",pre:rdd.preFmcq,act:rdd.actFmcq,rate:rdd.fmcqRate});
        table.push({name:"110KV及以上电力迁改(处)",pre:rdd.preDlqg,act:rdd.actDlqg,rate:rdd.dlqgRate});
        table.push({name:"通讯线路迁改(处)",pre:rdd.preTxxl,act:rdd.actTxxl,rate:rdd.txxlRate});
        table.push({name:"给排水管线迁改(处)",pre:rdd.preGpsg,act:rdd.actGpsg,rate:rdd.gpsgRate});
        table.push({name:"油气管线迁改(处)",pre:rdd.preYqgx,act:rdd.actYqgx,rate:rdd.yqgxRate});
        this.preProgress = table;
      } else {
        message.error(res.msg || 'preProgress 接口调用失败!')
      }
    }));
  }

  @action
  setProjectId = (param) => {
    this.projectId = param;
  }

  @action
  setScaleCollpased = (param) => {
    this.scaleCollpased = param;
  }  
  
  @action
  setsSaleNeedCollpased = (param) => {
    this.scaleNeedCollpased = param;
  }

  @action
  setOneWordCollpased = (param) => {
    this.oneWordCollpased = param;
  }  
  
  @action
  setOneWordNeedCollpased = (param) => {
    this.oneWordNeedCollpased = param;
  }
}
ecodeSDK.exp(HomeStore);





//api.js接口封装

const { Tools } = WeaverMobile;
ecodeSDK.imp(ThreeBattleMobileAjax)

const getPreviousInfo = params => {
    options={
    url:'/api/detail/getPreviousInfo',
    method:'GET',
    params
  }  
  return ThreeBattleMobileAjax.callApi(options);
};

const getProgress = params => {
    options={
    url:'/api/detail/getProgress',
    method:'GET',
    params
  }  
  return ThreeBattleMobileAjax.callApi(options);
};
const preProgress = params => {
    options={
    url:'/api/projectItem/preProgress',
    method:'GET',
    params
  }  
  return ThreeBattleMobileAjax.callApi(options);
};

const API = {
  getPreviousInfo,
  getProgress,
  preProgress
}


ecodeSDK.exp(API);

//ajax.js请求
const server = 'https://mobile.cncico.com:9453'
// const server = 'http://10.100.218.8'
var fetchOld = window.fetch;
var fetchnew = function (options){
  let userId = localStorage.getItem("userId");
  let loginId = localStorage.getItem("loginId");
  // options.headers = options.headers
  if(options.method == 'GET'){
    // return fetchOld(server + options.url + jasonToString(options.params),{
    //   method: 'get',
    //   headers: {
    //     'userId':userId
    //   }
    // })
    return new Promise((resolve, reject) => {
      if (window.XMLHttpRequest)
      {
        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xhr=new XMLHttpRequest();
      }
      else
      {
        // IE6, IE5 浏览器执行代码
        xhr=new ActiveXObject("Microsoft.XMLHTTP");
      }
 
      xhr.onload = () => {
          if(xhr.readyState==4 && xhr.status==200){
            resolve(xhr.response);
          }
        };
             
            xhr.open('GET', server + options.url + jasonToString(options.params), false);
            xhr.setRequestHeader('userId', userId);// 设置content-type
            // xhr.setRequestHeader('userPhone', loginId);// 设置content-type
            // xhr.setRequestHeader('userPhone', 13505711755);

            xhr.send();
        });
  }else{
    return fetchOld(server + options.url,{
      method: 'post',
      headers: {
        'userId':userId
      },
      body:options.params
    })
  }

}

//jason格式转化为?key=value&格式的字符串
var jasonToString = function(params){
  let str = '';
  if(params){
    str = '?'
  }else{
    return '';
  }
  for(var param in params){
    str = str + param + '=' + params[param] + '&';
  }
  return str;
}

callApi = (options) =>{
  return fetchnew(options).then(res=>{
        return JSON.parse(res);
      
    })
}


const ThreeBattleMobileAjax = {
  callApi
}

ecodeSDK.exp(ThreeBattleMobileAjax);

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21138747/article/details/111243304

智能推荐

linux截取指定行数范围内的内容-程序员宅基地

文章浏览阅读2.8k次。需求:linux下对文件按照行数进行切割实现:sed -n '10,100p' logfile.txt &gt; lognew.txt 摘自:http://www.xhuojia.com/zhuanlan/1891238847.html_linux获取指定行数之间的行

阿里云的视频点播_saas系统计算视频播放的流量-程序员宅基地

文章浏览阅读317次。开通视频点播,点击按流量计费<f/ont>_saas系统计算视频播放的流量

【文献阅读】A2-Nets: Double Attention Networks-程序员宅基地

文章浏览阅读4.2k次,点赞6次,收藏23次。原文链接:https://arxiv.org/abs/1810.11579学习捕获长距离关系是图像/视频识别的基础。现有的CNN模型一般依赖于增加深度来对这种关系进行建模,效率非常低。作者提出了“双注意力块”,这是一种新的组件,它从输入图像/视频的整个时空空间中聚集和传播信息的全局特征,使后续的卷积层能够有效地从整个空间访问特征。该组件设计为两步双注意机制,第一步通过二级注意池将整个空间的特..._double attention networks

Mybatis学习(一)Mybatis简介、编写第一个Mybatis程序_11235813程序-程序员宅基地

文章浏览阅读284次。一、Mybatis 简介1、什么是MyBatis?官网地址MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息。Maven仓库获得Mybatis:<!-- https://mvnrepository...._11235813程序

火车进站—ACM_火车进站算法-程序员宅基地

文章浏览阅读769次。题目描述给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。输入描述:有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,..._火车进站算法

ssm框架的搭建_myeclipse里面ssm框架xml文件里面的快捷键怎么配置-程序员宅基地

文章浏览阅读606次。1. 新建web project项目,记得勾选xml配置文件。使用MyBatis生成entity层和dao层,生成方法之前的mybatis使用环境配置中有提到过。放到src目录下,并创建service和controller层的包。2. 安装spring,注意勾选持久化层3. 配置spmvc-servlet.xml(在web-inf下面新建spring,勾选aop,p..._myeclipse里面ssm框架xml文件里面的快捷键怎么配置

随便推点

POJ 3041 匈牙利算法_poj匈牙利算法-程序员宅基地

文章浏览阅读117次。大致题意N * N 的格子上有 K 颗行星,Bessie 有把大威力武器,一次可以消灭某一行或列的行星。求武器的最少使用次数。1 <= N <= 500, 1 <= K <= 10,000坐标为 (x, y) 的点看做 x 指向 y 的一条边,问题就化为 x∈V, y∈U 的二分图匹配问题。求覆盖所有点的最小使用次数,即求覆盖所有边的最小点数。根据 Konig 定理,最..._poj匈牙利算法

集群服务器分布式iis_windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)...-程序员宅基地

文章浏览阅读106次。本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分布式架构;下面将先给出整个架构的核心节点简介,希望各位多多点赞:. 架构设计图展示.nginx+iis构建服务集群. redis存储分布式共享的session及共享session运作流程. redi..._nginx+redis+iis

python病毒代码大全_python病毒 - osc_bx0x099p的个人空间 - OSCHINA - 中文开源技术交流社区...-程序员宅基地

文章浏览阅读4.2k次。介绍源码分为3个部分1、搜索,搜寻所有的python脚本2、取出当前文件的前39行,也就是这个脚本的长度,然后将这个脚本写道所有找到的python脚本中去3、其他行为#!/usr/bin/pythonimport osimport datetimeSIGNATURE = "CRANKLIN PYTHON VIRUS"def search(path):filestoinfect = []fileli...

进程通信之信号通信_进程间通信信号的具体步骤-程序员宅基地

文章浏览阅读533次。信号通信信号通信其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。信号在内核中已经存在,并且在内核中有很多信号。信号通信的框架l 信号的发送(发送信号进程):kill raise alarml 信号的接收(接收信号进程) : pause() sleep while(1)l 信号的处理(接收信号进程) : signal用命令kill -l 查看内核中有多少信号CLC@Embed_Learn:~$ kill -l 1) SIGHUP 2) SIGIN_进程间通信信号的具体步骤

基于SpringBoot+Vue的乡政府管理系统的设计与实现-程序员宅基地

文章浏览阅读1.3k次,点赞44次,收藏49次。功能对照表的目的是帮助开发团队了解软件的功能状况,及时修复功能缺陷和错误,并提高软件的质量和稳定性。功能编号功能名称功能描述功能状态备注1用户登录用户可以通过提供用户名和密码登录系统正常用户名和密码的验证机制安全性2用户注册用户可以通过提供用户名、密码和电子邮件地址注册新的账户正常无3密码修改用户可以通过提供原密码和新密码修改已有账户的密码正常用户密码的修改操作是否需要提供安全认证4用户信息查看用户可以查看自己的个人信息,如用户名、电子邮件地址、角色等正常无。

sentinel基础原理_sentinel 原理-程序员宅基地

文章浏览阅读1.1k次。来自杨三超wiki1、Sentinel是什么Sentinel 是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。github:https://github.com/alibaba/Sentinelstar:7000+2、特点丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大..._sentinel 原理

推荐文章

热门文章

相关标签