技术栈
Rem
rem 是相对于 html 元素的 font-size 的一个单位。如果 html 上定义了 font-size: 20px;,则无论在任何地方都是 1rem = 20px 这个大小不会受到父元素的影响。
我们统一使用rem对页面进行整体缩放。强烈建议大家对需要适应页面大小的任何元素都使用 rem 为单位来定义。
我们在 iphone6 上使用 1rem = 20px 来换算。
关于Rem可以参考 MDN上的定义
Starts
装修
若designer版本高于或等于0.5.19, eevee的版本高于或等于0.3.0, 装修组件的state可以用数据缓存来实现返回记住位置
oldState = this.props._initState
配合装修系统,若需要使用react-router的history对象,使用如下
history = this.props.context
Header(导航栏)
Header 在PM里调用方式 require("pm/header")
<Header goback={ this.props.callBack } type="secondary">标题</Header>
可传参数
参数 | 说明 |
---|---|
goback | 若有则会有返回按钮,goBack接受一个function |
type | 若不传则为第一种样式,若传必传“secondary”是第二种样式 |
className | 自定义class |
Buttons(按钮)
Button 在PM里调用方式 require("pm/button")
<Button>主按钮</Button>
<Button onClick={this.btnClick} type="secondary">次按钮</Button>
<Button type="info">更次钮</Button>
<br />
<Button type="small">主小按钮</Button>
<Button onClick={this.btnClick} type="secondary" className="btn-small">次小按钮</Button>
<Button type="info" className="btn-small">更次小钮</Button>
<br />
<Button type="danger">Danger</Button>
<Button disabled>Disabled</Button>
<Button type="warning">Warning</Button>
<Button htmlType="submit" type="success">Success</Button>
<br />
<Button type="large">大按钮</Button>
<div className="btn-group">
<Button type="warning">次按钮</Button>
<Button>主按钮</Button>
</div>
可传参数
参数 | 说明 |
---|---|
disabled | 若传入disabled, 按钮不可点 |
htmlType | 可传入button的type |
className | 自定义class |
onClick | function 点击按钮触发的方法 |
其他 | 其他自定义props |
Grids(网格)
Row、Col 在PM里调用方式 require("pm/row") require("pm/col")
<Row>
<Col span={2}>.col-2</Col>
<Col span={2}>.col-2</Col>
<Col span={2}>.col-2</Col>
<Col span={2}>.col-2</Col>
<Col span={2}>.col-2</Col>
<Col span={2}>.col-2</Col>
</Row>
<Row>
<Col span={4}>.col-4</Col>
<Col span={8}>.col-8</Col>
</Row>
<Row>
<Col span={4}>.col-4</Col>
<Col span={4}>.col-4</Col>
<Col span={4}>.col-4</Col>
</Row>
<Row>
<Col span={6}>.col-6</Col>
<Col span={6}>.col-6</Col>
</Row>
<Row>
<Col span={4}>.col-4</Col>
<Col span={4} offset={4}>.col-4</Col>
</Row>
<Row>
<Col span={3} offset={3}>.col-3</Col>
<Col span={3} offset={3}>.col-3</Col>
</Row>
<Row>
<Col span={6} offset={2}>.col-6 </Col>
</Row>
Col可传参数
参数 | 说明 |
---|---|
span | col的宽度百分比,可传1~12,宽度百分比依次增大 |
offset | col的margin-left百分比,可传0~12,依次增大;margin-left最小为0,最大为100% |
Tabs(标签栏)
Tabs 在PM中,调用方式 require("pm/tab")
<Tab activeKey="1" onChange={this.callback} >
<div tab="选项卡一" key="1"></div>
<div tab="选项卡二" key="2"></div>
<div tab="选项卡三" key="3"></div>
</Tab>
<Tab activeKey="2" type="card" onChange={this.callback} >
<div tab="选项卡一" key="1"></div>
<div tab="选项卡二" key="2"></div>
<div tab="选项卡三" key="3"></div>
</Tab>
可传参数
参数 | 说明 |
---|---|
onChange | function 传入方法,当切换时触发,会将当前项的key传入 |
activeKey | 当前为active的项的key |
className | 自定义class |
key | 传入一个参数,当切换时将此参数返回给onChange方法 |
其他 | 其他自定义props |
Search(搜索栏)
搜索包含两部分,一部分是搜索框,还有一部分是弹出层,弹出层内将出现推荐搜索词,历史搜索词
历史搜索词存于本地localStroge,右侧样例即可展示
<SearchInput className="search-center-content" onClick={this.handleOnClick.bind(this)} readOnly="true"/>
<SearchFilter isHide={this.state.searchFilterHide} onClick={this.handleOnClick.bind(this)}/>
SearchInput可传参数
参数 | 说明 |
---|---|
disabled | 该组件是否可编辑 (readOnly在safari和chrome中 设置后还是可编辑的状态) |
onClick | 该组件的点击事件 显示SearchFilter |
className | 自定义class |
defaultValue | 该组件的初始值 |
callBack | 回调函数由SearchFilter组件传入,触发表单提交之后执行该方法 |
SearchFilter可传参数
参数 | 说明 |
---|---|
isHide | 该组件是否可见 |
onClick | 该组件的点击事件 隐藏SearchFilter |
callBack | 回调函数:提供给SearchInput组件的form表单提交 |
Form(表单)
若使用pm的Form组件,配合pm的Input组件,可简便的完成输入校验和提交取值,以下为示例
<Form onSubmit={this.handleSubmit.bind(this)} ref="exampleForm">
<Input label="单行" placeholder="文字提示" type="text" />
<InputDatePicker label="日期" placeholder="请选择日期"/>
<FormGroup>
<Input onChange={this.onInputChange}name="name" ref="input1" label="账号" placeholder="请输入账号" type="text" ref="username" defaultValue="buyer" pattern="^[\d_a-zA-Z\u4E00-\u9FA5]{5,25}$" required />
<Input label="邮箱" ref="input2" name="email" placeholder="请输入邮箱" type="text" />
<Input label="密码" ref="input3" name="password" placeholder="请输入密码" type="password" />
</FormGroup>
<Button htmlType="submit" className="btn -large">提交</Button>
</Form>
可传参数
参数 | 说明 |
---|---|
className | 自定义class |
handleSubmit | function, 该方法用于表单提交,将接收两个参数, 第一个是evt表单本身对象, 第二个是formData对象(表单输入内容),若表单的校验完全通过,则会call该方法。 |
其他 | 其他form标签默认的props |
Input
Input 组件可自动完成校验,不需要开发人员再次在change事件校验, 目前的版本若要使用Input组件必须在PM的Form组件下
<Input onChange={this.onInputChange}name="name" ref="input1" label="账号" placeholder="请输入账号" type="text" ref="username" defaultValue="buyer" pattern="^[\d_a-zA-Z\u4E00-\u9FA5]{5,25}$" required />
可传参数
参数 | 说明 |
---|---|
className | string, 自定义class |
onChange | function, 若当输入框内容变化需要其他操作,则可多传入onChange发起 |
defaultValue | input的默认值 |
value | input的当前值 |
name | 若需要校验或提交表单时需要获取数字,则该字段必填 |
pattern | 校验字段,该参数可传可不传,可以传入function也可传入正则表达式,若传入校验方法,该方法须在最后return true或者false 表示校验结果,该function可接收到value参数, 若传入正则表达式,则自动校验 |
type | string, 若传入pattern,则默认校验规则无效,若不传入pattern,type为特殊类型,例如num,tel,email,则会根据type类型进行校验。ps: 若传入tel,则手机号,座机号,区号+座机号+分机号均可通过校验 |
required | 该属性标识是否必填,若属性不仅需要正确的格式还需必填,则使用该属性即可 |
errorCallback | function, 可自定义输入错误的后续操作,回调该方法时,会传入当前校验错误的input list |
errorTip | 非必传,string, 若校验失败需要给用户明确的提示,则可传入该属性。 默认提示为请输入正确格式。但是若传入了errorCallback ,则该参数无效 |
emptyTip | 非必传,string, 若需必填的输入框未填入内容时需要给用户明确的提示,则可传入该属性, 若不传默认提示为请输入内容,但是若传入了errorCallback ,则该参数无效 |
其他 | 其他input标签默认的props |
Switch(开关)
Switch 在PM中,调用方式 require("pm/switch")
<Switch checked="true" defaultChecked="false"
onChange={ this.switchOnChange } />
可传参数
参数 | 说明 |
---|---|
checked | 控制switch的状态,true为打开、false为关闭;非必传 |
defaultChecked | 控制switch的默认状态,非必传;与checked的区别: 同时传入时,switch的开关由checked控制 都不传入时,switch的开关默认关闭 |
onChange | 必传,当切换开关时执行的回调函数 |
其他 | 其他自定义的props |
Toast
inputDatePicker(日期选择器)
input类型的时间选择器 在PM中
调用方式:require("pm/inputDatePicker")
<InputDatePicker className="date-picker" label="日期" placeholder="请选择日期" defaultValue="1993-07-19"/>
可传参数
参数 | 说明 |
---|---|
className | 自定义class |
label | 该日期选择器的名称 |
placeholder | 无“默认选择的日期”时显示的内容 |
defaultValue | 默认选择的日期 |
其他 | 其他自定义的props |
Nav(底部)
returnTop
returnTop 返回顶部组件 无需传参数,直接调用
<returnTop />
modal(弹窗)
在common中,调用方式:require('common/modal')
弹窗打开方式:PubSub.publish("showModal");
弹窗关闭方式:PubSub.publish("closeModal");
如右可模拟操作。
按钮显示:
1. 仅title: 居中的“title”按钮
2. 仅detail:“detail”按钮 及 “关闭”按钮
3. 都传时: “detail”按钮 及 “title”按钮
4. 都不传时: 居中的“关闭”按钮
按钮回调:
leftClick:左边按钮点击的回调
rightClick:右边按钮点击的回调以及一个按钮时的回调
exit:当上面两个参数不传时,由必传的exit执行按钮的点击回调
<Modal detail="返回首页" title="查看订单"
hideOverlay="false"
iconClass="icon-newpm-finger-copy success"
leftClick={this.props.leftClick}
rightClick={this.props.rightClick}
exit={this.close.bind(this)}>
{ this.props.children } </Modal>
可传参数
参数 | 说明 |
---|---|
className | 自定义class 控制内部内容children的 |
detail | 左边按钮的名称,非必传 |
title | 右边按钮的名称,非必传 |
hideOverlay | 弹窗后面的蒙层;为true时隐藏蒙层,反之则显示蒙层 |
iconClass | 头部的图标以及图标颜色,若不传则没有图标 |
leftClick | 左边按钮点击的回调函数 |
rightClick | 右边按钮点击的回调函数或一个按钮时的点击回调 |
exit | 当leftClick与rightClick参数不传时,为必传;点击按钮默认执行的回调函数 |
popup(弹框)
在common中 调用方式 require("common/popup")
弹框打开方式:PubSub.publish("popup.show");
弹框关闭方式:PubSub.publish("popup.close");
<Popup className="popup" headerTitle="这是头部" headerHide="false">这是弹框中的内容</Popup>
可传参数
参数 | 说明 |
---|---|
className | 自定义class |
headerHide | 是否显示header,true不显示,false显示,不传为显示 |
headerTitle | header的标题 |
CommentStar(星评)
在common中 调用方式 require("common/comment_star")
<CommentStar starType="get" stars={3} max={5}/>
<CommentStar starType="set" defaultStyle="fill" max={5}/>
可传参数
参数 | 说明 |
---|---|
className | 自定义class |
starType | 必传,可传参数为set与get set模式:即用户发表评价时可通过点击设置等级 get模式:即用户浏览评价时的星星等级;通过获取stars参数的值,设置选中的数量 |
max | 评价等级星星的个数 |
defaultStyle | set模式下,可以设置为fill或空,分别表示默认以全选中或全不选状态显示 |
stars | get模式下,设置选中星星的数量 |
max | 表示星评所以星星的个数 |
其他 | 其他自定义的props |