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

@partex/one-core

v2.1.28

Published

* value 搜索的默认值 Object default: {} * defaultValue 重置的默认值 Object default: {} * data 搜索列表 ISearchBarType default: {} * loading? 加载状态 Boolean default: false * cols? 显示的栅格数量 number default: 5 * autoSubmit? 自动提交 Boolean default: true * cache? 启用缓存 boolean defau

Downloads

720

Readme

公共组件

oc-search-bar

  • value 搜索的默认值 Object default: {}

  • defaultValue 重置的默认值 Object default: {}

  • data 搜索列表 ISearchBarType default: {}

  • loading? 加载状态 Boolean default: false

  • cols? 显示的栅格数量 number default: 5

  • autoSubmit? 自动提交 Boolean default: true

  • cache? 启用缓存 boolean default: true

  • on-update:value? 值更新时执行的回调 default: undefined

  • slot header

  • slot left

  • slot action

  • ts

  • ISearchBarType

type: 'input' | 'number' | 'select' | 'dropdown' | 'cascader' | 'treeSelect' | 'datePicker'

// base
show?: boolean // 是否显示
clearable?: boolean //是否可清除
placeholder?: string // 占位字符
updateValue?: (value: [] | string | number | null, data: any) => void // 值更新回调

// number
min?: number // 最小值
max?: number // 最大值
step?: number // 步进
showButton?: boolean // 是否显示步进按钮
suffix?: string // 前缀
validator?: (value: number) => boolean // 自定义验证

// select
multiple?: boolean // 是否多选
options: Array<SelectOption | SelectGroupOption> | any

// dropdown
options: SelectOption[] | any

// cascader
multiple?: boolean // 是否多选
checkStrategy?: 'all' | 'parent' | 'child' // 选中模式
options: CascaderOption[] | any

// treeSelect
multiple?: boolean // 是否多选
checkStrategy?: 'all' | 'parent' | 'child' // 选中模式
options: TreeSelectOption[] | any

// datePicker
dateType:
    | 'date'
    | 'datetime'
    | 'daterange'
    | 'datetimerange'
    | 'month'
    | 'monthrange'
    | 'year'
    | 'quarter'
format?: string // 格式化
isDateDisabled?: (current: number) => boolean // 禁用时间
shortcuts?:
  | Record<string, number | (() => number)>
  | Record<string, [number, number] | (() => [number, number])>

// Group
type: 'group'
options: Array<SelectOption | SelectGroupOption>
input: {
  key: string
  options: {
    [key: string]: GroupInput
  }
}
width?: number | string
<oc-search-bar
  :loading="loading"
  :value="search"
  :data="items"
  :cols="5"
  @on-update:value="submit"
>
  <template #header></template>
  <template #left></template>
  <template #action></template>
</oc-search-bar>

oc-back

  • 一个返回按钮
  • 参数 to?: string 默认情况返回上一级历史
<oc-back />
<oc-back to="/home" />

oc-footer

  • 公共页尾
  • 参数 version?: string 可显示本项目的版本信息
<oc-footer version="2.1.0" />

oc-header

  • 公共页头
  • 参数 menuOptions: Array<MenuOption | MenuDividerOption | MenuGroupOption>
  • ts: IHeaderMenu
<oc-header :menuOptions="menu" />
const menu = ref<Array<MenuOption | MenuDividerOption | MenuGroupOption>>([
  {
    label: '首页',
    key: '/iot/home',
    icon: () => h(Tv),
    children: [
      {
        label: '大屏1',
        key: '/iot/home'
      },
      {
        label: '大屏2',
        key: '/iot/performance'
      }
    ]
  }
])

oc-importer

  • 公共excel导入组件
  • 参数
  • show: boolean 显示/隐藏
  • type: string 后台需要的导入key
  • file: string 模版下载地址
  • steam?: boolean 是否需要下载流
  • update:show? 显示/隐藏改变回调
<oc-importer
  v-model:show="showModal"
  type="task"
  file="https://xxx-cloud-test.oss-cn-xxx.aliyuncs.com/xxxx.xlsx"
/>
  • 同时提供公共下载方法
  • fnDownload(params)
  • params
{
  [key: string]: any
  jobTypeName?: string
  jobParams?: string
  file?: File
  query?: Query
}
  • 建议写法
<n-tooltip trigger="hover">
  <template #trigger>
    <n-popconfirm
      positive-text="导出"
      placement="bottom-end"
      @positive-click="exportData"
    >
      <template #trigger>
        <n-button :loading="downloading">
          <template #icon>
            <n-icon>
              <IconCloudArrowDown />
            </n-icon>
          </template>
        </n-button>
      </template>
      导出工序?
    </n-popconfirm>
  </template>
  导出工序
</n-tooltip>

import { fnDownload } from '@partex/one-core'
const exportData = (): void => {
  downloading.value = true
  fnDownload({
    jobTypeName: 'process',
    query: query.value
  })
    .then(() => {
      notice.success({
        content: '操作成功',
        duration: 3000
      })
      setTimeout(() => {
        downloading.value = false
      }, 2000)
    })
    .catch(() => {
      notice.error({
        content: '操作失败,请重试',
        duration: 3000
      })
      downloading.value = false
    })
}

oc-logo

  • 大屏顶部logo显示
  • 参数 text?: string 顶部文字
<oc-logo text="智能刀具管理平台" />

oc-my

  • 个人信息页面
<oc-my />

oc-number-roll

  • 数字滚动效果
  • 参数
  • value: number | string
  • duration?: number 持续时长
  • precision?: number 精度
  • format?: Fn<number, string> 格式化
<oc-number-roll
  :value="count ?? 0"
  :format="numFormat"
/>

oc-skeleton

  • 骨架屏
  • 参数
  • cols?: number 一排几个,最大24
  • num?: [number, number][] 每行每列的数量
<oc-skeleton
  :cols="3"
  :num="[
    [3, 1],
    [3, 1],
    [3, 1]
  ]"
/>

oc-404

  • 页面未找到
<oc-404 />

oc-500

  • 发生错误
<oc-500 />

公共方法

fnSetStorage

  • 保存进LocalStorage
  • key: string
  • value: string | ObjectKey | boolean,
  • expired: number | string = 30000 // 存储时间 string接受 '1 Minutes' '5 Hours' '7 Day' '1 Week'
  • 0 为永久存储
fnSetStorage('save', {a: 1}, 0)

fnGetStorage

  • 取LocalStorage
  • key: string
  • defaultValue: any 当过期或不存在时返回默认值
fnGetStorage('save', false)

fnDelStorage

  • 删除LocalStorage
  • key: string

fnScrollTop

  • 移动页面到顶部

fnDeleteLoad

  • 删除加载中状态

fnPageModel2Naive

  • 转换NUI的query到后台的query

fnPageNaive2Model

  • 转换后台的query到NUI的query

fnFormatTime

  • 格式化时间
  • value: string | number | Date | null | undefined,
  • fmt = 'yyyy-MM-dd'
  • yyyy-MM-dd hh:mm:ss

fnRenderAction

  • 公用操作按钮方法
  • buttons: IActionButton[]
  • type: 'detail' | 'edit' | 'delete' | 'tips' | 'custom'
  • disabled?: false
{
  type: 'detail',
  onClick: () => detail(row)
}
{
  type: 'edit',
  onClick: () => edit(row)
}
{
  type: 'delete',
  onClick: () => delete(row)
}
{
  type: 'tips',
  onClick: () => tips(row)
}
{
  type: 'custom',
  onClick: () => {
    exportData(row.key)
  },
  icon: IconCalendarArrowDown,
  color: 'success',
  text: '下载'
}

fnEncodeCursor

  • 加密到base64
  • data: ObjectKey

fnDecodeCursor

  • 解密base64
  • data: string

fnThrottle

  • 节流方法
const svgTitle = fnThrottle((e: MouseEvent): void => {
  const tmp = (e.target as HTMLBaseElement).dataset.title
  title.value = tmp || ''
}, 200)

fnFullScreen

  • 全屏显示
  • element: any // 要全屏的元素
  • callback?: Fn // 回调函数

GET

  • 全局统一fetch的GET方法
  • url: string
  • data: any
  • responseType?: "arraybuffer" | "blob" | "document" | "json" | "stream" | "text"

POST

  • 全局统一fetch的POST方法
  • url: string
  • data: ObjectKey
  • responseType?: "arraybuffer" | "blob" | "document" | "json" | "stream" | "text"
  • timeout?: number

FILE

  • 全局统一fetch的FILE方法
  • url: string
  • data: any
import { POST } from '@partex/one-core'
GET('api/manager/prod-task/page', params)
POST('api/manager/prod-task/page', params)
FILE('api/manager/job/submit', formData)

公共Store

  • commonStore
interface Store {
  isMobile: boolean // 是否是小屏幕
  download: boolean // 显示/隐藏下载窗口
  theme: boolean    // 主题颜色 true: light false: dark
  platformName: () => string // 平台名称
  platformType: string // 平台代码
  platformUrl: string  // 平台首页
}

userStore

  • 用户信息
factoryId?: string
userId?: string
thirdUserId?: string
email: string
password: string
name: string
realName: string
phone: string
description: string
enable: boolean
oeeStatus: 0 | 1 // OEE状态
tenantName: string // 租户名称
kind: number // -1开发者 0普通账户 1大屏账户 2虚拟账号 99管理员
roleId: 1 | 2
authorizationGroupArray: string[]
authorizationMachineArray: string[]
iot_menu_authorization: string[]
tdm_menu_authorization: string[]
qms_menu_authorization: string[]
maintain_menu_authorization: string[]
info: IUserInfo
endTime: number
tenantStatus: 0 | 1 | 2
renewalStatus: 0 | 1
ncFlg: 0 | 1 // NC代码权限
systemType: 0 | 1 | 2 // 基础版:Basic;高级版:Premium;旗舰版:Flagship
platform_tdm: boolean
  • fnSetUser 设置用户信息
  • fnGetUser 通过接口获取用户信息
  • fnClearUser 清除用户信息
  • fnUserLogout 退出登录

scaleStore

  • 縮放比例
scale: number
  • fnComputedScale 計算縮放
  • fnListenerScale 監聽縮放,返回remove
  • fnSetNormalWidthAndHeight 修改NormalWidthAndHeight 默认4k 16:9

导出公共ts

export interface Query {
  page: number
  pageSize?: number
  pageCount?: number
  itemCount?: number
  pageSizes?: number[]
  isGetAll?: 0 | 1
  keyword?: string
  columnKey?: string
  order?: string
  showQuickJumper?: boolean
  showSizePicker?: boolean
  pageSlot?: number
}

export interface PageModel<T> {
  current: string
  size: string
  pages: string
  total: string
  records: T
}

export interface PageRecords<T> {
  query: Query
  records: T
}

export interface Fn<T = any, R = T> {
  (...arg: T[]): R
}

export type ObjectKey<T = any> = {
  [x in string | number]: T
}

export type Recordable<T = any> = Record<string, T>

export type Nullable<T> = T | null

export type Mapped<Type> = {
  [Properties in keyof Type as KeyType]: Type[Properties]
}

export type TimeoutHandle = ReturnType<typeof setTimeout> | undefined

export type IntervalHandle = ReturnType<typeof setInterval> | undefined

ICON

  • IconChevronLeft
  • IconArrowSquareDown
  • IconWeatherMoon
  • IconWeatherSunny
  • IconGridDots
  • IconSearch
  • IconArrowClockwise
  • IconCalendarArrowDown
  • IconFullScreenMaximize
  • IconDelete
  • IconEye
  • IconDrafts
  • IconDismiss
  • IconMailInboxAdd
  • IconCloudArrowDown

root Colors

--primary: 142, 84, 200;
--white: 255, 255, 255;
--card: 255, 255, 255;
--font: 51, 51, 51;
--bg: 247, 248, 250;
--input: 255, 255, 255;
--border: 224, 224, 230;
--green: 93, 174, 87;
--yellow: 240, 151, 58;
--red: 230, 84, 68;
--blue: 32, 128, 240;
--grey: 175, 175, 175;
--cardShadow: 0 6px 10px -5px rgba(0, 0, 0, 0.1);

未加入,视情况以后加入

useThrottleFn

  • 用来处理节流函数的 Hook。
  • 频繁调用 run,但只会每隔 500ms 执行一次相关函数。
<template>
    <div>
      <p style="marginTop: 16"> Clicked count: {{throttleFnValue}} </p>
      <button type="button" @click="run">
        useThrottleFn测试
      </button>
    </div>
</template>

<script lang="ts">
import { ref } from 'vue';
import { useThrottleFn } from 'one-core';

export default {
  setup() {
    const throttleFnValue = ref(1);
    const { run } = useThrottleFn(()=>{
      throttleFnValue.value++
    },500)

    return {
      throttleFnValue,
      run,
    }
  }
}
</script>

useDebounceFn

  • 用来处理防抖函数的 Hook
  • 频繁调用 debounceFnRun,但只会在所有点击完成 1000ms 后执行一次相关函数
<template>
    <div>
      <p style="marginTop: 16"> Clicked count: {{debounceFnValue}} </p>
      <button type="button" @click="debounceFnRun">
        useDebounceFn测试
      </button>
    </div>
</template>

<script lang="ts">
import { ref } from 'vue';
import { useDebounceFn } from 'one-core';
export default {
  setup() {
    const debounceFnValue = ref<number>(1);
    const { run:debounceFnRun } = useDebounceFn(()=>{
      debounceFnValue.value++
    },500)

    return {
      debounceFnValue,
      debounceFnRun,
    }
  }
}
</script>

从v1.0.0升级到v1.1.0

v1.0.0

v1.0.0

v1.1.0

v1.1.0

变化

v1.1.0之后value不支持双向绑定,提供setValues与setData方法来变更

  • setValues变更value的数据
  • setData变更搜索条件

v1.1.0之后提供搜索条件记忆功能

  • 注:把所有需要变动的数据都放在value的ref里面。并且在每次请求结果后调用setValues