//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);
文章浏览阅读2.8k次。需求:linux下对文件按照行数进行切割实现:sed -n '10,100p' logfile.txt > lognew.txt 摘自:http://www.xhuojia.com/zhuanlan/1891238847.html_linux获取指定行数之间的行
文章浏览阅读317次。开通视频点播,点击按流量计费<f/ont>_saas系统计算视频播放的流量
文章浏览阅读4.2k次,点赞6次,收藏23次。原文链接:https://arxiv.org/abs/1810.11579学习捕获长距离关系是图像/视频识别的基础。现有的CNN模型一般依赖于增加深度来对这种关系进行建模,效率非常低。作者提出了“双注意力块”,这是一种新的组件,它从输入图像/视频的整个时空空间中聚集和传播信息的全局特征,使后续的卷积层能够有效地从整个空间访问特征。该组件设计为两步双注意机制,第一步通过二级注意池将整个空间的特..._double attention networks
文章浏览阅读284次。一、Mybatis 简介1、什么是MyBatis?官网地址MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息。Maven仓库获得Mybatis:<!-- https://mvnrepository...._11235813程序
文章浏览阅读769次。题目描述给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。输入描述:有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,..._火车进站算法
文章浏览阅读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文件里面的快捷键怎么配置
文章浏览阅读117次。大致题意N * N 的格子上有 K 颗行星,Bessie 有把大威力武器,一次可以消灭某一行或列的行星。求武器的最少使用次数。1 <= N <= 500, 1 <= K <= 10,000坐标为 (x, y) 的点看做 x 指向 y 的一条边,问题就化为 x∈V, y∈U 的二分图匹配问题。求覆盖所有点的最小使用次数,即求覆盖所有边的最小点数。根据 Konig 定理,最..._poj匈牙利算法
文章浏览阅读106次。本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分布式架构;下面将先给出整个架构的核心节点简介,希望各位多多点赞:. 架构设计图展示.nginx+iis构建服务集群. redis存储分布式共享的session及共享session运作流程. redi..._nginx+redis+iis
文章浏览阅读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_进程间通信信号的具体步骤
文章浏览阅读1.3k次,点赞44次,收藏49次。功能对照表的目的是帮助开发团队了解软件的功能状况,及时修复功能缺陷和错误,并提高软件的质量和稳定性。功能编号功能名称功能描述功能状态备注1用户登录用户可以通过提供用户名和密码登录系统正常用户名和密码的验证机制安全性2用户注册用户可以通过提供用户名、密码和电子邮件地址注册新的账户正常无3密码修改用户可以通过提供原密码和新密码修改已有账户的密码正常用户密码的修改操作是否需要提供安全认证4用户信息查看用户可以查看自己的个人信息,如用户名、电子邮件地址、角色等正常无。
文章浏览阅读1.1k次。来自杨三超wiki1、Sentinel是什么Sentinel 是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。github:https://github.com/alibaba/Sentinelstar:7000+2、特点丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大..._sentinel 原理