2.1.0 • Published 1 year ago

kd-admin-ui v2.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

使用方法:

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

2.1.0

1 year ago

1.0.0

2 years ago