npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

b2b-front-pc

v1.0.0

Published

## 准备开始

Downloads

2

Readme

b2b-wechat

准备开始

#使用yarn作为npm的管理工具
npm install -g yarn
#clone项目到本地
git clone https://git.coding.net/wmzhangjin/b2b-wechat.git

cd b2b-wechat
#安装依赖
yarn

#本地测试
yarn start

# build dll
yarn run build:dll

# build 项目
yarn run build

# 上线
yarn run build:all

技术栈

typescript + preact + plume2 + react-router-dom

统一使用 prettier 作为项目的格式化工具,it's amazing.

自动化构建

在原来的启动命令后面加入类型参数,仅支持 dev,test1,test2 和 online 四个类型 例如:yarn star:dev 连接本地后台 yarn start:test1 连接 118 后台 yarn start:test2 连接 120 后台 yarn start:online 连接线上后台 部署生产环境同理 例如:yarn build:all:test1 部署 118 环境 yarn build:all:test2 部署 120 环境 yarn build:all:online 部署线上环境 原来的 yarn start 和 build:all 依然能够正常运行,但是不会自动覆盖 config 文件

注:运行命令后面跟着参数 拼接参数的格式也是固定的
yarn add:sentry {\
url:xxx.xxx.xxx,\
org:xxxx,\
project:xxx,\
token:xxx,\
}

# 增加config.js文件
yarn build

注:运行命令后面跟着参数 拼接参数的格式也是固定的  (IOSDSN  ANDROIDDSN  ENV 如果有需要开启sentry监控必填)
yarn add:config {\
BFF_HOST:xxx.xxx.xxx,\
RENDER_HOST:xxx.xxx.xxx,\
OSS_HOST:xxx.xxx.xxx,\
PV_UV_HOST:xxx.xxx.xxx,\
Dsn:xxx,\
ENV:xxx,\
}

全局公共组件

1、noop

引入

import { noop } from 'wmkit';

使用

static defaultProps = {
   onClick: noop,
};

static relaxProps = {
   onShow: noop,
};

2、AsyncRouter

异步路由

引入

import { DataGrid } from 'wmkit';

使用

<AsyncRouter
    subRoutes={route.routes}
    load={route.asyncComponent}
    handlePathMatched={handlePathMatched}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | load | 异步加载组件 | ReactNode | - | | handlePathMatched | 获取当前路由 | function(path) | - | | subRoutes | 子路由 | Array | - |

注:其它属性见 https://reactrouter.com/web/api/Route

3、routeWithSubRoutes

路由相关

引入

import { routeWithSubRoutes } from 'wmkit';

使用

<Switch>
    { routeWithSubRoutes(homeRoutes, noop) }
</Switch>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | routes | 路由 | Array | - | | handlePathMatched | 获取当前路由 | function(path) | - |

4、history

创建HashHistroy

引入

import { history } from 'wmkit';

使用

history.push('/popmodal-manage-add');
history.replace('/popmodal-manage-add');
history.goBack();
history.listen((_history) => {});

5、Fetch

封装业务fetch

引入

import { Fetch } from 'wmkit';

使用

Fetch('/goods/allGoodsBrands', {
    method: 'GET'
});

Fetch('/commodity-scoringalg-orithm/list', {
    method: 'POST',
    body: JSON.stringify(params)
});

Fetch('/commodity-scoringalg-orithm/modify', {
    method: 'PUT',
    body: JSON.stringify(params)
});

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | input | 接口url | String | - | | init | 初始化http header信息等 | Object | - |

6、TimerButton

倒计时按钮

引入

import { TimerButton } from 'wmkit';

使用

<TimerButton disabled={true} />

<TimerButton
    style={{
      height: 30,
      minWidth: 90,
      padding: '0 5px',
      fontSize: 12,
      lineHeight: '30px',
      textAlign: 'center',
      background: '#ffd2dc',
      borderColor: '#ffd2dc',
      color: '#ff1f4e',
      borderRadius: 0,
      float: 'right'
    }}
    sendText="发送验证码"
    resetWhenError={true}
    shouldStartCountDown={() => this._sendCode()}
    onPress={() => sendCode()}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | sendText | 发送按钮文本 | String 或 ReactNode | 获取短信验证码 | | disabled | 是否禁用发送按钮 | Boolean | false | | time | 两次获取验证码间隔时间 | String 或 Number | 60 | | style | 自定义按钮样式 | Object | {} | | shouldStartCountDown | 倒计时前校验方法,返回false时不执行点击方法 | Boolean | false | | onPress | 点击按钮时,调用onPress | function | noop | | resetWhenError | click方法如果是结果是Promise,catch异常情况是否重置Timer | Boolean | true | | reSendText | 重新发送按钮文本 | String 或 ReactNode | 重新发送 |

7、WMUpload

图片上传组件,在Upload基础上增加了预览默认弹窗显示功能

引入

import { WMUpload } from 'wmkit';

使用

<WMUpload
    style={styles.box}
    action={Const.HOST + '/uploadImage'}
    listType="picture-card"
    name="uploadFile"
    onChange={(fileEntity) =>
        this.onImgChange('icon', fileEntity)
    }
    fileList={state.get('icon').toJS()}
    beforeUpload={(file) => this._beforeUpload(file, 5)}
>
    {state.get('icon').size >= 1 ? null : (
        <div>
            <PlusOutlined style={styles.plus} />
        </div>
    )}
</WMUpload>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | children | 组件的子节点 | ReactNode | - | | onChange | 上传文件改变时的状态 | function | - | | beforeUpload | 上传文件之前的钩子,参数为上传的文件,若返回 false 则停止上传。支持返回一个 Promise 对象,Promise 对象 reject 时则停止上传,resolve 时开始上传( resolve 传入 File 或 Blob 对象则上传 resolve 传入对象);也可以返回 Upload.LIST_IGNORE,此时列表中将不展示此文件。 注意:IE9 不支持该方法 | (file, fileList) => boolean 或 Promise | Upload.LIST_IGNORE | - |

注:其它属性见 https://ant.design/components/upload-cn/;

8、Tips

提示

引入

import { Tips } from 'wmkit';

使用

<Tips title="请填写0-100间的数字,精确到小数点后两位" />

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | title | 提示文字 | String | - |

9、QMMethod

引入

import { QMMethod } from 'wmkit';

使用

<FormItem
    {...formItemLayout}
    label="菜单名称"
    hasFeedback
    name="menuName"
    initialValue={objInfo.title}
    rules={[
    { required: true, message: '请输入菜单名称' },
    {
      validator: (rule, value, callback) => {
        QMMethod.validatorMinAndMax(
          rule,
          value,
          callback,
          '菜单名称',
          1,
          10
        );
      }
    }
    ]}
>
    <Input />
</FormItem>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | distinct | 两个对象集合合并去重的方法,list1和list2需要为immutable对象,param为属性字符串 | function(list1, list2, param) | - | | validatorTrimMinAndMax | 同时验证去前后空格之后的输入值,验证不为空 / 验证最小长度 / 验证最大长度 | function(_rule, value, callback, fieldText, minNum, maxNum) | - | | validatorMinAndMax | 可以为空时验证输入不为空格,验证最小长度 / 验证最大长度 | function(_rule, value, callback, fieldText, minNum, maxNum) | - | | validatorRatioLength | 可以为空时验证输入不为空格,验证最小长度 / 验证最大长度 | function(_rule, value, callback, _fieldText) | - | | validatorDeliveryCode | - | function(_rule, value, callback, fieldText) | - | | encryptionPhone | 加密手机号码 | function(phone) | - | | validatorAccountDays | 校验结算日期 | function(_rule, value, callback) | - | | validatorEmoji | 验证是否有非法字符表情 | function(_rule, value, callback, fieldText) | - | | validatorNoZero | 验证是是正整数 | function(_rule, value, callback) | - | | getCookie | - | function(c_name) | - | | delayFunc | 防抖函数 - 延迟执行版 | function(func, wait) | - | | onceFunc | 防抖函数 - 立即执行版 | function(func, wait) | - | | trimValueDeep | json对象中所有字段trim前后空格 | function(value) | - | | testPass | 校验密码,6-16个字母或数字 | function(pass) | - | | testTel | 手机号公共校验方法 | function(tel) | - | | fetchAllVAS | 查询所有增值服务 | function | - | | fetchVASStatus | 查询指定服务的状态 | function(serviceName) | - |

10、FindArea

省市区相关处理方法

引入

import { FindArea } from 'wmkit';

使用

FindArea.initArea();
FindArea.findProvinceCity();
FindArea.findProviceName();
FindArea.findCityAndParentId();
FindArea.fmtAddress();
FindArea.addressInfo();

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | initArea | 初始化存放省市区域 | function | - | | findProvinceCity | 获取省份与地市的层级结构数据 | function(ids) | - | | findProviceName | 查询省 | function | - | | findCityAndParentId | - | function | - | | fmtAddress | 省市区字符串 返回 江苏省/南京市/雨花台区 | function | - | | addressInfo | 省市区字符串 返回 江苏省/南京市/雨花台区 | function | - |

11、AreaSelect

选择地区 / 所在地区 / 地址组件 / 省市区

引入

import { AreaSelect } from 'wmkit';

使用

<AreaSelect
    value={[
      省id,
      市id,
      区id
    ]}
    label="所在地区"
    placeholder='请选择地区'
    hasNoArea={ false }
    hasNoStreet={ false }
    getPopupContainer={}
    onChange={}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | value | 省id、市id、区id | Array | - | | placeholder | 输入框占位文本 | String | 请选择 | | label | 标签 | String | - | | hasNoArea | 不展示区 | Boolean | false | | hasNoStreet | 不展示街道 | Boolean | false |

注:其它属性见 https://ant.design/components/cascader-cn/

12、WMIcon

图标

引入

import { WMIcon } from 'wmkit';

使用

<WMIcon type="map" />

<WMIcon type="list" />

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | style | 自定义.qmIcon样式 | Object | - | | type | 图标类型 | String | - | | className | 样式类 | String | - |

13、QMFloat

引入

import { QMFloat } from 'wmkit';

使用

(text) => <span>{`¥${QMFloat.addZero(text)}`}</span>;

<div>{'¥' + QMFloat.addZero(goods.get('supplyPrice'))}</div>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | decimalLength | 获取小数点后数字长度 | function(num) | - | | suffixInteger | 小数点后补齐0作为整数 | function(num, length) | - | | accAdd | 加法 | function(num1, num2) | - | | accSubtr | 减法 | function(num1, num2) | - | | accMul | 乘法 | function(num1, num2) | - | | accDiv | 除法 | function(num1, num2) | - | | addZero | 为整数添加两位小数,四舍五入 | function(num) | - |

14、MenuLeft

左侧菜单

引入

import { MenuLeft } from 'wmkit';

使用

<MenuLeft topRoute="/user-store" />

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | topRoute | 当前路由 | String | - |

15、Logistics

物流信息

引入

import { Logistics } from 'wmkit';

使用

<Logistics
    companyInfo={logistic}
    deliveryTime={deliverTime}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | companyInfo | 物流相关信息(如:物流公司、物流单号) | Map | - | | deliveryTime | 发货时间 | String | - |

16、WmHeadImg

头部图片

引入

import { WmHeadImg } from 'wmkit';

使用

<WmHeadImg url={headImgUrl} />

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | url | 图片路径 | String | - |

17、WMLoginModal

登录弹窗

引入

import { WMLoginModal } from 'wmkit';

使用

<WMLoginModal {...props} />

18、WMVideo

web视频播放器

引入

import { WMVideo } from 'wmkit';

使用

<WMVideo 
    autoplay: true,
    controls: true,
    sources: [
        {
            src: videoUrl,
            type: 'video/mp4'
        }
    ]
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | autoplay | 是否自动播放 | Boolean | false | | controls | 控制 | Boolean | false | | sources | - | Array | - |

注:其它属性见 https://docs.videojs.com/index.html;

19、WMPasswordInput

支付密码输入框

引入

import { WMPasswordInput } from 'wmkit';

使用

<WMPasswordInput
    getValue={(val) => {
        changePayPwd(val);
    }}
    length={6}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | getValue | 获取最新输入值 | function(val) | - | | length | 密码长度 | Number | - |

20、FindBusiness

公司相关处理方法

引入

import { FindBusiness } from 'wmkit';

使用

FindBusiness.getBusinessNatures();
FindBusiness.findBusinessNatureName(businessNatureType);
FindBusiness.getBusinessIndustries();
FindBusiness.findBusinessIndustryName(businessIndustryType);
FindBusiness.getBusinessEmployeeNums();
FindBusiness.findBusinessEmployeeNumValue(businessEmployeeNum);

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | getBusinessNatures | 获取公司性质 | function | - | | findBusinessNatureName | 获取公司性质名称 | function(businessNatureType) | - | | getBusinessIndustries | 获取公司行业 | function | - | | findBusinessIndustryName | 获取公司行业名称 | function(businessIndustryType) | - | | getBusinessEmployeeNums | 获取公司人数 | function | - | | findBusinessEmployeeNumValue | 获取公司人数描述 | function(businessEmployeeNum) | - |

21、CountDown

倒计时

引入

import { CountDown } from 'wmkit';

使用

<CountDown
  allowFontScaling={false}
  numberOfLines={1}
  parame={coupon}
  timeOffset={this._getTimeoffset(coupon)}
/>

API

| 属性 | 说明 | 类型 | 默认值 | | :----- | :----- | :----- | :----- | | timeOffset | 默认倒计时时间,正整数,单位:秒 | Number | 0 | | visible | 是否可见 | Boolean | true | | visibleSecond | 是否展示秒数 | Boolean | false | | groupFlag | 拼团秒杀倒计时样式专用 | Boolean | false | | prelistFlag | prelistFlag: true, 如果是预约活动则组件className为timeprelist | Boolean | false | | timeStyle | 自定义.time样式 | Object | {} | | theme | 主题 | String | 'default' | | showTimeDays | 是否展示天,默认否 | Boolean | false | | endHandle | 倒计时结束的处理 | function(parame) | - | | parame | 参数 | Object | {} | | overHandler | 结束操作 | function | - |