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

kd-admin-ui

v2.1.0

Published

基于vue3+vite+element-plus的动态表单/CRUD/可视化布局组件

Downloads

7

Readme

使用方法:

1、结合 vue3+vite+element-plus 使用

npm i kd-admin-ui
import kdUI from 'kd-admin-ui'
Vue.use(kdUI)

一、动态表单组件----kdForm

1、使用方法

<kdForm :config="config" :model="model"></kdForm> config 动态表单的配置文件
model 表单绑定的属性

2、示例

// config.js
import { reactive } from "vue";
const config = reactive({
  labelWidth: "120px",
  labelPosition: "top",
  rules: {
    tenantId: [{ required: true, message: "客户id是必填项", trigger: "blur" }],
    username: [{ required: true, message: "用户名是必填项", trigger: "blur" }],
    password: [
      { required: true, message: "密码是必填项", trigger: "blur" },
      { min: 3, max: 8, message: "密码最少3位,最大8位", trigger: "blur" },
    ],
    rate: [[{ required: true, message: "评分是必填项", trigger: "blur" }]],
  },
  formRef: "formLogin",
  formItemArr: [
    {
      id: 1,
      label: "客户端",
      prop: "tenantId",
      name: "input",
      beforeSlot: 'beforeInput',
      options: {
        placeholder: "请输入内容",
        size: "small",
        clearable: true,
        modelName: 'input1',
        // slotBefore: (scoped) => {
        //     const a = 1
        //     return `<div>这个是客户端的input${a+scoped}前边插入的内容</div>`
        // },
        inputValue: 123
      },
    },
    {
      id: 10,
      label: "用户名",
      name: "input",
      options: {
        placeholder: "请输入用户名",
        size: "small",
        clearable: true,
        modelName: 'input2'
      },
    },
    {
      id: 2,
      label: "下拉列表",
      prop: "select",
      name: "select",
      options: {
        modelName: 'select',
        placeholder: "please select your zone",
        optionArr: [
          {
            label: "上海",
            value: "shanghai",
          },
          {
            label: "北京",
            value: "beijing",
          },
          {
            label: "天津",
            value: "tianjin",
          },
        ],
      },
    },
    {
      id: 3,
      label: "单选框",
      prop: "radio",
      name: "kdradio",
      afterSlot: 'afterRadio',
      options: {
        modelName: 'radio1',
        optionArr: [
          {
            label: "man",
            text: "男",
          },
          {
            label: "woman",
            text: "女",
          },
        ],
      },
    },
    {
      id: 11,
      label: "单选框222",
      prop: "radio",
      name: "radio",
      options: {
        modelName: 'radio2',
        optionArr: [
          {
            label: "man",
            text: "男111",
          },
          {
            label: "woman",
            text: "女222",
          },
        ],
      },
    },
    {
      id: 4,
      label: "评分",
      prop: "rate",
      name: "rate",
      options: {
        modelName: 'aaaa',
        allowHalf: true,
      },
    },
    {
      id: 5,
      label: "开关",
      prop: "switch",
      name: "switch",
      options: {
        modelName: 'switch',
        activeText: "开关111",
        inactiveText: "开关222",
        loading: true,
      },
    },
    {
      id: 6,
      label: "虚拟下拉列表",
      name: "vSelect",
      options: {
        modelName: 'vselect',
        optionArr: [
          { value: "aaa", label: "aaa的文字" },
          { value: "bbb", label: "bbb的文字" },
          { value: "ccc", label: "ccc的文字" },
          { value: "ddd", label: "ddd的文字" },
        ],
        style: "width: 240px; margin-right: 16px; vertical-align: middle",
      },
    },
    {
      id: 7,
      label: "时间选择器",
      name: "timepicker",
      options: {
        modelName: 'timepicker'
      },
    },
  ],
});
export default config;


// model.js
import { reactive } from "vue";

const model = reactive({
  username: "13456789019",
  password: "gao",
});

export default model;

3、参数

a、config = {}

			属性						   描述					默认值
    	labelWidth:						文字的宽度
    	labelPosition:					文字的位置
    	rules:							验证的规则
    	ref:  							绑定表单
    	formItemArr:					表单的每一项  []	item = {}
            id:    						  标识                     --
            label: 						  文字内容                 --,
            prop:  						  rules验证规则的属性       --,
            name:  						  表单组件的名字            --,
            options: {                      传入组件的参数
            	modelName				  绑定提交表单对应的model属性 --
                // 输入框 -- input
                placeholder				  文字提示				   ''
                size                        尺寸					  default
                clearable        		   是否一键清除               false
                disabled				  是否禁用				   false
                type					  input类型				text
                maxlength				  最大长度				   --
                minlength				  最小长度				   --
                showWordLimit			  是否显示统计字数			false
                showPassword			  是否显示切换密码图标	   false
                prefixIcon				  自定义前缀图标			 --
                suffixIcon				  自定义后缀图标			 --

                // 数字框 -- inputnumber
                step					  步数					1
                min						  最小值				    Infinity
                max						  最大值				    Infinity
                stepStrictly			   是否只能输入 step 的倍数	 false
                precision				   数值精度				    --
                size					   尺寸					default
                disabled				   是否禁用				    false
                controls				   是否使用控制按钮			 true
                controlsPosition			控制按钮位置			   -- right
                label					   输入框关联的 label 文字	 --

                // 单选框 -- radios
                size					   尺寸					default
    		   disabled					  禁用					false
			   text-color				  文字激活时的颜色		    #ffffff
			   fill						 激活时的填充色和边框色	 #409EFF
			   validateEvent			  输入时是否触发表单的校验	  true
                optionArr				   单选项目					-- []
                disabled				   是否禁用					false
                border					   是否显示边框			   false
                label					   radio 的 value		   --
                name					   原生name属性			    --
                size					   尺寸大小				    --

                // 评分 -- rate
                max						最大分值					5
                size					尺寸						 default
                disabled				是否为只读				    false
                allowHalf				是否允许半选				   false
                lowThreshold			低分和中等分数的界限值			2

                // 自动补全 -- autocomplete
                loadAll				    总数据						[]
                querySearch    			获取输入建议的方法			 --   function
                clearable				是否允许清除				  false
                class					类名						--
                placeholder				占位文本				    --
                popperClass				下拉列表类名				  ''
                label					标签文本				   ''
                hideLoading 			是否隐藏loading				false
                handleSelect			点击选中建议项时触发			选中的建议项

                // 级联选择器 -- cascader
                optionArr                总数居                       []
                size				    尺寸                        --
                placeholder              输入框占位文本               --
                disabled                 是否禁用                     false
                clearable               是否允许清除                   false
                showAllLevels           输入框中是否显示选中值的完整路径  true
                collapseTags            多选模式下是否折叠Tag           false

                // 复选框 -- checkbox
                true-label				选中时的值				   --
                false-label				没有选中时的值				  --
                disabled   				是否禁用				    false
                border					是否显示边框				  false
                size					Checkbox 的尺寸			--
                name					原生 name 属性			   --
                checked					当前是否勾选				  false
                indeterminate			设置 indeterminate 状态		 false
                validate-event			输入时是否触发表单的校验	   true

                // 颜色选择器 -- colorpicker
                size                     尺寸                         --
                show-alpha               透明度选择                   false
                color-format             写入 v-model 的颜色的格式     hex (当 show-alpha 为 false) /                                                                         rgb (当 show-alpha 为 true)
                popper-class             下拉框的类名                   --
                predefine	             预定义颜色                    --
                disabled	             是否禁用                      false
                validate-event	         输入时是否触发表单的校验        true

                // 日期选择器 -- datePicker
                type				    显示类型	     			date
                placeholder				非范围选择时的占位内容		   --
                size				    输入框尺寸				   default
                default-value			可选,选择器打开时默认显示的时间 --
                validate-event			输入时是否触发表单的校验	   true
                cell-class-name			设置自定义类名				  --
                clearable			    是否显示清除按钮			 true
                editable			    文本框可输入 				  true

                // 下拉列表 -- select
                placeholder				占位文字					Select
                multiple				是否多选					false
                disabled				是否禁用					false
                size					输入框尺寸					default
                clearable				是否可以清空选项				false
                collapse-tags			多选时是否将选中值按文字的形式展示	false
                collapse-tags-tooltip	当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签	false
                multiple-limit			用户最多可以选择的项目数, 为 0 则不限制	0
                effect					Tooltip 主题,内置了 dark / light 两种	light
                autocomplete			Select 输入框的原生 autocomplete 属性	off
                filterable				Select 组件是否可筛选				false
                filter-method			自定义筛选方法						--
                loading					是否正在从远程获取数据				false
                loading-text			从服务器加载内容时显示的文本			Loading
                no-data-text			无选项时显示的文字					No data
                popper-class			选择器下拉菜单的自定义类名			--
                clear-icon				自定义清除图标						CircleClose
                placement				下拉框出现的位置					bottom-start

                // 开关 -- switch
                active-text				switch 打开时的文字描述				--
                inactive-text			switch 的状态为 off 时的文字描述		--
                loading					是否显示加载中						false
                disabled				是否禁用						  false
                size					switch 的大小						default
                width					switch 的宽度						--
                active-icon				switch 状态为 on 时所显示图标		--
                inactive-icon			switch 状态为 off 时所显示图标		--
                active-value			switch 状态为 on 时的值				--
                inactive-value			switch的状态为 off 时的值         		--

                // 虚拟下拉列表 -- vSelect
                placeholder				占位文字					Select
                multiple				是否多选					false
                disabled				是否禁用					false
                size					输入框尺寸					default
                clearable				是否可以清空选项				false
                collapse-tags			多选时是否将选中值按文字的形式展示	false
                collapse-tags-tooltip	当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签	false
                multiple-limit			用户最多可以选择的项目数, 为 0 则不限制	0
                effect					Tooltip 主题,内置了 dark / light 两种	light
                autocomplete			Select 输入框的原生 autocomplete 属性	off
                filterable				Select 组件是否可筛选				false
                filter-method			自定义筛选方法						--
                loading					是否正在从远程获取数据				false
                loading-text			从服务器加载内容时显示的文本			Loading
                no-data-text			无选项时显示的文字					No data
                popper-class			选择器下拉菜单的自定义类名			--
                clear-icon				自定义清除图标						CircleClose
                placement				下拉框出现的位置					bottom-start

                // 时间选择器 -- timePicker
                arrow-control			是否使用箭头进行时间选择			false
                placeholder				非范围选择时的占位内容				 --
                disabled				禁用							  false
                editable				文本框可输入						true
                clearable				是否显示清除按钮				   true
                size					输入框尺寸						--
                start-placeholder		范围选择时开始日期的占位内容			--
                end-placeholder			范围选择时结束日期的占位内容			--
                is-range				是否为时间范围选择					false
                popper-class			TimePicker 下拉框的类名			 --
                format					显示在输入框中的格式				HH:mm:ss
                prefix-icon				自定义前缀图标						Clock
                clear-icon				自定义清除图标						CircleClose

                // 上传组件 -- upload
                class             		样式
                action            		请求 URL                        --
                multiple                是否支持多选文件                false
                handlePreview		   点击文件列表中已上传的文件时的钩子
                handleRemove		   文件列表移除文件时的钩子			--
                beforeRemove		   删除文件之前的钩子,参数为上传的文件和文件列表,  --
                      				  若返回 false 或者
                      				  返回 Promise 且被 reject,则停止删除

                limit				  允许上传文件的最大数量		  	--
                handleExceed		   当超出限制时,执行的钩子函数	   --
                method				  设置上传请求方法                 post
                data				  上传时附带的额外参数			--
                name				  上传的文件字段名                file
                drag				  是否启用拖拽上传                false
                listType			  文件列表的类型                  text
                disabled			  是否禁用上传				  false

                // 时间选择器 -- timeSelect
                max-time			最晚时间点,晚于该时间的时间段将被禁用	--
                placeholder			非范围选择时的占位内容				  --
                start				开始时间						  09:00
                step				间隔时间						  00:30
                end					结束时间						  18:00
                disabled			禁用状态						  false
                editable			文本框可输入						 true
                clearable			是否显示清除按钮					true
                size				输入框尺寸						  default
                effect				Tooltip 主题,内置了 dark / light 两种主题	light
                prefix-icon			自定义前缀图标组件					Clock
                clear-icon			自定义清除图标组件					CircleClose
                min-time			最早时间点,早于该时间的时间段将被禁用	 00:00
                format				设置时间格式						  HH:mm

            }

b、 model = {}

注:表单绑定的字段,提交表单时,可以更快捷的拿到表单对应的内容,model 的属性需要和 config 中的 modelName 一一对应。示例:

import { reactive } from "vue";

const model = reactive({
  username: "13456789019",
  password: "gao",
});

export default model;

二、可视化拖拽组件----kdLayout

1、使用方法

<Kdlayout :layout="layout"></Kdlayout> layout 即可视化拖拽组件的配置项

2、示例

// layout.js
import { reactive } from "vue";
import tableData from "./tableData";
const layout = reactive({
  // isClear: true,
  isCache: true,
  layoutArr: [
    {
      x: 100,
      y: 100,
      w: 100,
      h: 100,
      componentName: "kdimage",
    },
    {
      className: "myVideo",
      componentName: "kdswiper",
      options: {
        perView: 1,
        autoplay: { delay: 1000 },
        swiperArr: [
          {
            swiperSlideName: "kdimage",
            options: {
              alt: "图片加载失败了",
            },
          },
          {
            swiperSlideName: "kdvideo",
          },
          {
            swiperSlideName: "kdtable",
            options: tableData,
          },
        ],
      },
    },
  ],
});

export default layout;

3、参数

a、layout = {}

属性						   描述													默认值
isClear						是否清除缓存											    false
isCache						是否需要缓存,即可视化布局								   false
layoutArr					可视化组件												[]
	x						x轴坐标												 0
	y						y轴坐标												 0
	w						容器宽度												0
	h						容器高度												0
	draggable				容器是否允许推拽										  true
	resizable				容器是否允许缩放										  true
	className				容器类名												box
    beforeSlot				前置插槽												--
	afterSlot				后置插槽												--
	componentName			子组件名字												--
	options					往子组件传参的配置项										--
		// 轮播图组件 -- kdswiper
		perView				轮播项一屏展示的数量										1
        spaceBetween		 轮播项间隙												30
        autoplay			 自动轮播										{ delay: 3000 }
        swiperArr			 轮播项目
        	swiperSlideName	  项目组件名
             clickable		  项目导航是否显示和点击  							 { clickable: true }
			draggable		滚动条是否显示和推拽								{ draggable: true }
			direction		轮播图方向										horizontal
             slot			 作用域插槽

		// 视频组件 -- kdvideo
		controls			控制面板												--
         preload			预加载													  --
         autoplay			自动播放												--
         className			类名													  --
         loop				循环													 --
         width				宽度													 --
         height				高度													 --
         muted				静音													 --
         poster				海报													 --
		videoArr		    视频组												    --
			src				视频路径											   --
             type			 视频类型												--

		// 音频组件 -- kdaudio
		controls			控制面板												--
         preload			预加载													  --
         autoplay			自动播放												--
         className			类名													  --
         loop				循环													 --
         width				宽度													 --
         height				高度													 --
         muted				静音													 --
         poster				海报													 --
		audioArr		    视频组												    --
			src				视频路径											   --
             type			 视频类型												--

		// 图片组件	--	kdimage
		imgUrl				图片路径											   --
         alt				图片加载失败时文字描述									   --
         title				图片鼠标移入时提示文字									   --
         width				图片初始宽度											   --
         height				图片初始高度											   --
         className			图片类名												--

		// 图表组件 -- kdbar
		width				图表宽度											   100%
         height				 图表高度												100%
         options			 图表配置												--

		// 表格组件 -- kdtable
        tableData			表格数据												--
        style				表格样式												--
        height				表格高度												--
        border				表格边框												--
        stripe				表格条纹												--
        className			表格类名												--
        highlightCurrentRow	 表格高亮												 --
	    size			    表格尺寸											    --
        fit					列的宽度是否自撑开									     true
        showHeader			是否显示表头											    true
        emptyText			空数据时显示的文本										 No Data
	    optionsArr           表格item项											  --
			prop		   字段名称												    --
             label			列的key												  --
             width			列宽													  --
             fixed			固定表头											     --
             align			对齐方式												 left
             className		列的类名												 --
			slot		   默认插槽												    --

		// 以及其它form表单组件,用法同kdForm组件用法

三、增删改查组件----kdcrud

1、使用方法

<kdcrud :options="options" :model="model" /> options
动态表单、动态表格、分页配置项 model 动态表单绑定的model

2、示例

// options.js
import { reactive } from "vue";
import model from "./model";
import router from "../../router/router";
const options = reactive({
  className: "kdcrud",
  config: {
    labelWidth: "120px",
    labelPosition: "top",
    rules: {
      tenantId: [
        { required: true, message: "客户id是必填项", trigger: "blur" },
      ],
      select: [{ required: true, message: "用户名是必填项", trigger: "blur" }],
      timeSelect: [
        { required: true, message: "密码是必填项", trigger: "blur" },
      ],
      timepicker: [
        { required: true, message: "评分是必填项", trigger: "blur" },
      ],
    },
    formRef: "formLogin",
    formItemArr: [
      {
        id: 1,
        label: "32453534",
        name: "input",
        options: {
          modelName: "input",
          placeholder: "请输入asdasd 内容",
          size: "small",
          clearable: true,
          disabled: false,
        },
      },
      {
        id: 2,
        label: "下拉列表",
        prop: "select",
        name: "select",
        options: {
          modelName: "select",
          placeholder: "please select your zone",
          optionArr: [
            {
              label: "上海",
              value: "shanghai",
            },
            {
              label: "北京",
              value: "beijing",
            },
            {
              label: "天津",
              value: "tianjin",
            },
          ],
        },
      },
      {
        id: 7,
        label: "时间选择器11111",
        name: "timePicker",
        options: {
          modelName: "timePicker",
        },
      },
      {
        id: 8,
        label: "时间选择器22222",
        prop: "timeSelect",
        name: "timeSelect",
        options: {
          modelName: "timeSelect",
        },
      },
      {
        id: 9,
        name: "button",
        options: {
          buttonText: "提交按钮",
          onclick: async (formEl) => {
            await formEl().validate((valid, fields) => {
              if (!valid) {
                console.log(fields);
                return;
              }
              console.log(model);
              router.push("/login");
            });
          },
        },
      },
    ],
  },
  options: {
    tableData: [
      {
        date: "2016-05-03",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-02",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-04",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-01",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-08",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-06",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-07",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
    ],
    height: 300,
    size: "small",
    optionsArr: [
      {
        prop: "address",
        label: "Address",
        width: 280,
        slot(scope) {
          return `<div>这个是作用域插槽${scope.row.name}</div>`;
        },
      },
      {
        prop: "date",
        label: "Date",
      },
      {
        prop: "name",
        label: "Name",
        width: 180,
      },
    ],
  },
  background: true,
  layout: "prev, pager, next",
  total: 3500,
  currentChange() {},
});
export default options;

// model.js
import { reactive } from "vue";
const model = reactive({
  input: "",
  select: "",
  vSelect: "",
  timePicker: "",
  timeSelect: "",
});
export default model;

3、参数

a、options = {}

属性						 描述														默认值
className				组件类名
config					动态表单配置
options					动态表格配置项
background				分页背景色
layout					分页布局
total					分页总数
currentChange			分页切换后的事件回调
model						动态表单绑定model

b、model = {}

import { reactive } from "vue";
const model = reactive({
  input: "",
  select: "",
  vSelect: "",
  timePicker: "",
  timeSelect: "",
});
export default model;

四、scss 封装

1、常用类封装----public

/* ************ flex ************ */
.flex {
  display: flex;
}
.flex-center {
  justify-content: center;
  align-items: center;
}
.flex-between {
  justify-content: space-between;
}
.flex-around {
  justify-content: space-around;
}
.flex-start {
  justify-content: flex-start;
}
.flex-end {
  justify-content: flex-end;
}
.align-center {
  align-items: center;
}
/* ************ text ************ */
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-indent {
  text-indent: 2em;
}
.text-lower {
  text-transform: lowercase;
}
.text-upper {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-through {
  text-decoration: line-through;
}
.text-underline {
  text-decoration: underline;
}
.text-overline {
  text-decoration: overline;
}
/* ************ display ************ */
.block {
  display: block;
}
.inline {
  display: inline;
}
.inline-block {
  display: inline-block;
}
.hide {
  display: none;
}
/* ************ overflow ************ */
.hidden {
  overflow: hidden;
}
.overflow-x-scroll {
  overflow-x: scroll;
}
.overflow-y-scroll {
  overflow-y: scroll;
}
.overflow-auto {
  overflow: auto;
}
.visible-hidden {
  visibility: hidden;
}
/* ************ shadow ************ */
.shadow-dark {
  box-shadow: 0 0 10px #666;
}
.shadow-light {
  box-shadow: 0 0 10px #ccc;
}
/* ************ box modal ************ */
.border-box {
  box-sizing: border-box;
}
.content-box {
  box-sizing: content-box;
}
/* ************ others ************ */
.margin-auto {
  margin: 0 auto;
}
.select-none {
  user-select: none;
}
[class*="kd"] {
  width: 100%;
  height: 100%;
}

2、主题变量封装----var

$black: #000;
$white: #fff;
$darker: #333;
$dark: #999;
$light: #aaa;
$lighter: #eee;
$main: rgb(26, 179, 190);
$danger: rgb(252, 199, 6);
$warning: rgb(237, 31, 12);
$info: rgb(5, 255, 21);
$primary: rgb(16, 73, 216);

3、工具类封装----function

// 数值0-100,5为间隔,例如:
m5 就是上下左右外边距都是5px
plr10 就是左右内边距都是10px
f30 就是字体大小是30px
w45 就是宽度45%
border1 就是边框是1px
br20 就是圆角20px
size($w, $h) 就是宽高
square($w) 就是正方形
bg-white 就是白色背景
text-black 就是黑色字体
border-info 就是边框信息色(绿色)

4、公共类封装----common