0.0.6 • Published 4 years ago

megvii-qdcloud-component v0.0.6

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

渠道云业务组件

Web project built on React.js + Typescript

Project setup

npm install

Compiles and hot-reloads for development on http://localhost:3000

npm run start

Compiles and minifies for production

npm run build

Usage

  • 表单使用
import {ValidationForm} from 'cloud-component'

const [valueObj, setValueObj] = useState<any>({})
const [formValidation, setFormValidation] = useState()

const formConfig = [
    {
      key: 'text',
      value: valueObj.text,
      type: 'text',
      placeholder: "请输入文本信息",
      horizontal: true,
      label: "文本输入",
      required: true,
      clearable: true,
      outerClassName: 'form-item',
      disabled: false,
      rules: [{
        type: 'string',
        required: true,
        message: "不许为空"
      }]
    }]

    function save() {
        formValidation().then(isValid => {
          if (!isValid) {
            console.log("invalid")
          } else {
            console.log("valid")
          }
        })
      }

     function handleChange(obj, key) {
          setValueObj(obj)
     }

      return (
          <>
            <ValidationForm formConfig={formConfig} onChange={handleChange} onValidate={(fn) => {
              setFormValidation(fn)
            }}></ValidationForm>
            <Button type="primary" onClick={save}>保存</Button>
          </>

        )

表单配置说明

参数是否必填说明
key唯一 key
value
typetext, select, number, checkbox, radio, switch, password, date, daterange, textarea
placeholder
horizontal默认是否,true 代表水平表单项
label表单项 label
required是:有必填标志,否:无必填标志
clearable是否有清除图标
outerClassName表单项自定义类名
disabled是否禁用
rules校验规则。数组形式,若无校验规则,传入空数组。数组内单一项数据结构如下说明
attrs其他信息,可参照各个组件参数

rules

参数是否必填说明
typearray, object, string, email, number, url, password
required是否必填
range若值为数字表示值是否在区间内,若值为字符串表示长度是否在区间内
message错误提示信息
maxLength字符串最大长度
pattern自定义正则
custom自定义函数, 结果须返回布尔值

attrs

参数是否必填说明
className组件的自定义类名
optionscheckbox, radio, select 的 options
noOptionsMessageselect 的 noOptionsMessage
modeselect 参数,若为多选 mode=multiple,不填默认单选
isShowTime日历参数
minDate日历参数,最小可选日期
maxDate日历参数,最大可选日期
rangeSeparator日历参数
  • filter-form 使用规则 ####说明:查询条件
import { FilterForm } from 'cloud-component';

filterConf = [
		{
			name: '操作人',
			type :'input',
			placeholder: '请输入操作人',
			value: '张**',
			onChange : (res) => console.log(res)
		},
		{
			name: '操作类型',
			type :'select',
			selectOpts: [{ value: 0, label: '登陆' }, { value: 1, label: '删除员工组' }],
			value: 1,
			onChange : (res) => console.log(res)
		},
		{
			name: '起止时间',
			type :'dateRange',
			value: new Date(),
			disabledDate: (time) => time > new Date(),
			onChange : (res) => console.log(res)
		},
		{
			name: '时间',
			type :'dateTime',
			value: new Date(),
			onChange : (res) => console.log(res)
		}
	];

return (
  <FilterForm filterFormConf={this.filterConf} />
)

filter-form 配置说明

参数是否必填类型说明
filterFormConfarray配置项

filterFormConf 参数说明

参数是否必填参数类型说明
typestringinput , select ,dateRange , dateTime
namestring字段中文名
valuestring , number , Date
selectOptsarraytype 为 select 传的配置项
placeholderstringplaceholder
onChangefunction回调
formatstring时间格式化
isReadOnlyboolean时间组件是否为只读
horizontalboolean水平布局
  • PageLayout 使用规则

说明: 页面级布局组件

import { PageLayout, FilterBox, FilterForm } from 'cloud-component';

return (
	<PageLayout className={styles['layout']}>
		<PageLayout.Header>
			<PageLayout.Header.Left title="日志管理" />
				<PageLayout.Header.Right>
					<span>检索结果: 100条</span>
					<Button.Box>
						<Button
							type="primary"
							inverse={true}
						>批量导出
            </Button>
					</Button.Box>
				</PageLayout.Header.Right>
		</PageLayout.Header>
		<PageLayout.Content>
			<PageLayout.Content.Left>
				<FilterBox
					onSearch={() => { }} onReset={() => { }}>
					<FilterForm filterFormConf={this.filterConf} />
				</FilterBox>
			</PageLayout.Content.Left>
			<PageLayout.Content.Right>
				<div> content 部分</div>
			</PageLayout.Content.Right>
		</PageLayout.Content>
	</PageLayout>
)

PageLayout 参数说明

参数是否必填参数类型说明
classNamestringclass 名称
stylestring样式
titlestring<PageLayout.Header>页面左上角的 title 名称
  • Layout 上下布局 layout

说明: 页面级布局组件

import { Layout } from 'cloud-component';
const { Header, Content } = Layout;
return (
			<Layout>
				<Header
					total={10000}
					btns={[
						{
							name: "按钮1",
							action: () => {
								alert(1);
							}
						},
						{
							name: "按钮2",
							action: () => {
								alert(2);
							}
						}
					]}
				>
					搜索栏占位
				</Header>
				<Content>
					<Table>
						<Table.Head>
							<Th>抓拍照片</Th>
							<Th>底库照片</Th>
							<Th>姓名</Th>
							<Th>人员类型</Th>
						</Table.Head>
						<Table.Body>
							{recordList.map(item => (
								<Tr key={item.deviceId}>
									<Td>
										<img src={item.snaphopUri} />
									</Td>
									<Td>
										<img src={item.personImage} />
									</Td>
									<Td>{item.personName}</Td>
									<Td>{item.personType}</Td>
									<Td>{item.deviceName}</Td>
								</Tr>
							))}
						</Table.Body>
					</Table>
					<Page
						page={recordListPage}
						onPageChange={pageNum =>
							recordStore.getRecordList({ pageNum, pageSize })
						}
						onPageSizeChange={pageSize =>
							recordStore.getRecordList({ pageNum, pageSize })
						}
					/>
				</Content>
			</Layout>
	);

Layout.Header 参数说明

参数是否必填参数类型说明
totalnumber列表总数
btnsarray:{name:string,action:function}按钮数组
  • FilterBox 使用规则

说明: 页面左侧筛选容器

import { FilterBox } from 'cloud-component';
return (
  <FilterBox onSearch={() => { }} onReset={() => { }}>

	</FilterBox>
)
参数是否必填参数类型说明默认值
classNamestringclass 名称
stylestring样式
titlestring<PageLayout.Header>页面左上角的 title 名称检索条件
resetTextstring重置按钮文案重置
confirmTextstring检索按钮文案检索
onResetfunction重置按钮的回调
onSearchfunction检索按钮的回调
horizontalboolean水平布局,有高级搜索功能
onSeniorSearchfunction高级搜索回调
  • 滚动列表使用
import * as React from 'react';
import {Icon} from 'react-x-component'
import {ScrollableList} from "cloud-component";

export default ()=>{
  const {useState, useEffect} = React;
  const [data, setData] = useState([]);
  let [page, setPage] = useState(0);
  let [hasMore, setHasMore] = useState(true);
  let [disabled, setDisabled] = useState(false);

  const config = {
    titleKey:'name',
    subTitleKey:'remark',
    actions:(row)=>{
      return(
        <>
          <Icon name="edit" onClick={()=>handleEdit(row)}/>
          <Icon name="trash" onClick={()=>handleDelete(row)}/>
        </>
      )
    }
  }

  function handleLoad() {
    const init:any = []
    if(page < 4){
      for(let i = page*15; i< (page+1)*15; i++){
        init.push({id:i, name:`工作日${i}`,remark:`${i%2==0?'':'remark'}`})
      }
      setPage(page+1);
      setData(data.concat(init));
    }else{
      setHasMore(false)
    }
  }

  function handleEdit(row) {
    setDisabled(true)
    console.log('edit',row)
  }

  function handleDelete(row){
    console.log('delete',row)
  }

  useEffect(()=>{
    const init:any = [];
    for(let i = 0; i< 15; i++){
      init.push({id:i, name:`工作日${i}`,remark:`${i%2==0?'':'remark'}`});
    }
    setPage(page+1);
    setData(init)
  },[])

  return(
    <ScrollableList config={config} onLoad={handleLoad} data={data} hasMore={hasMore}
                    disabledOthers={disabled}/>
  )
}

滚动列表参数

参数是否必填说明
config每行的配置信息包括 titleKey, subTitleKey, actions
data列表数据
onLoad处理每次 load 的函数
loaderloading 时候渲染的 react component
hasMore是否还有数据需要加载
disabledOthers除选中行外,其他行置灰
  • 卡片
import * as React from 'react';
import {CardBox} from "cloud-component";

export default () => {

  function handleSearch() {
   console.log('search')
  }

  function handleClick() {
   console.log('click')
  }

  function handleInputChange() {
   console.log('change')
  }

  function handleInputEnter() {
    console.log('enter')
  }

  return (
    <CardBox btnText="新增人员组" text="共100人" searchPlaceholder={'请输入人名'} onClick={handleClick} onSearch={handleSearch}
    onChange={handleInputChange} onEnter={handleInputEnter}/>
  )
}