# ubasic-ui **Repository Path**: ubasic-org/ubasic-ui ## Basic Information - **Project Name**: ubasic-ui - **Description**: 基于 Vue3.0,使用 Element Plus 框架,对 table ,form 功能按钮 进行二次封装操作,对查询区域和列表展示合二为一,也可单独使用 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-19 - **Last Updated**: 2024-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ubasic-ui 组件库 基于 Vue3.0,使用 Element Plus 框架,对 table ,form 功能按钮 进行二次封装操作,对查询区域和列表展示合二为一,也可单独使用 ### 使用说明 1、使用该框架插件,要先安装依赖文件 ``` pnpm install element-plus @element-plus/icons-vue ``` ### 安装教程 1. 第一步 选择一个你喜欢的包管理器 ``` # NPM $ npm install @axewo/ubasic-ui --save # Yarn $ yarn add @axewo/ubasic-ui # pnpm $ pnpm install @axewo/ubasic-ui ``` ### 在全局中注册UBasicUI 组件 需要在main.ts 文件中引入文件 ``` import { createApp } from 'vue'; import App from './App.vue' import '@axewo/ubasic-ui/dist/style.css'; import UBasicUI from '@axewo/ubasic-ui'; const app = createApp(App); app.use(UBasicUI); //... ``` ### 在局部中注册UBasicUI 组件 需要在main.ts 文件中引入样式文件 ``` ``` ### 工具类函数使用 1、包含一个tools类,一个colors 颜色转换类 ``` ``` #### tools函数介绍 | 函数名 | 参数类型 | 返回值 |备注 | -------- | -------- | -------- | -------- | | messageBoxConfirm | (content: string, title="提示,options={}) | Promise | 二次确认提示| | messageBoxAlert | (content: string, title="提示,options={}) | null | 提框示| | messageBoxPrompt | (content: string, title="提示,options={}) | Promise | 提框示输入确认| | formatUrlParams | (url: string, row: any) | string | 对路径进行解析, /system/dict/type/$[dictId]/$[dictName] 根据row传的参数替换成/system/dict/type/1/性别| #### colors函数介绍 -待完善 | 函数名 | 参数类型 | 返回值 |备注 | -------- | -------- | -------- | -------- | | -------- | -------- | -------- | -------- | ### 组件属性配置说明 ```typescript type TBtnType = "primary" | "danger" | "warning" | "success" | "default"; //按钮类型 type TColumnType = | "Input" | "DatePicker" | "RangePicker" | "RadioGroup" | "CheckboxGroup" | "ApiSelect" | "Select" | "Rate" | "Switch" | "InputNumber"; //组件类型 type TMethodType = "get" | "post" | "put" | "delete"; //请求方式 declare global { type TRequestConfig = { apiFunc: string|((...args) => Promise) ; //列表接口地址 mapping?: TMapping; //字典映射 method?: TMethodType; //请求方式 params?: Recordable; //请求参数 }; type Recordable = Record; type LocaleType = "zh_CN" | "en" | "ru" | "ja" | "ko"; interface Window { VConsole: unknown; } type TResponesData = { records?: T[]; total?: number; size?: number; current?: number; pages?: number; }; //请求返回的数据类型 interface Result { msg: string; code: number; data?: T; } //=====================自定义别表,表单begin======================================================= //列表操作按钮属性 type TOperateBtn = { label?: string; //按钮名称 uniqueKey: string; //按钮key type?: TBtnType; //按钮类型 link?: boolean; //是否是链接 permissions?: string[]; //权限标识 icon?: VNode | string; //图标 request?: TRequestConfig | ((data: TFormConfig) => Recordable); //请求配置 isCustom?: boolean; //是否自定义方法体 express?: ((args) => boolean | undefined) | undefined; //表达式 disabledFormItem?: string[]; //禁用项 }; type TMapping = { //映射字段 label?: string; value: string; format?: string[]; requestField?: string; }; type TComponentProp = { format?: string; valueFormat?: string; request?: TRequestConfig | ((data: TFormConfig) => Recordable); multiple?: boolean; disabled?: boolean; min?: number; max?: number; onChange?: (...args) => void; onInput?: (...args) => void; }; type TFormConfig = { schema?: TTableColumn[]; //列表字段 formModel?: Recordable; //表单model formAction?: object; //表单action rowsData?: Recordable | Recordable[]; //列表数据 reload?: () => void; //刷新 }; //列表行属性 type TTableColumn = { width?: number | undefined; //列表宽度 alias?: string; //别名,用户搜索展示 prop: string; //列表字段 label: string; //列表名称 type?: TColumnType; //字段类型 search?: boolean; //搜索展示要查询的字段 hide?: boolean; //列表中需要展示或者隐藏 默认false 展示 |true 隐藏 display?: boolean; //弹框中是否要展示改字段 默认false 不展示 |true 展示 attrs?: TComponentProp; //element 组件属性 rules?: FormItemRule[]; //动态表单验证 isValidSearchForm?: boolean; //是否对查询条件进行验证 tooltip?: boolean; //是否需要提示 slot?: boolean; //是否是插槽 align?: string; //label对齐方式 fixed?: boolean | string; //是否浮动 minWidth?: string; //最小宽度 children?: TTableColumn[]; //是否有子级 render?: (...args) => VNode | string; //动态渲染 dictType?: string; //字典类型 option?: any[]; //下拉框静态数据 isLink?: boolean; //是否是链接 to?: string; //跳转地址 isDictType?: boolean; //是否属于要字典 defaultValue?: any; }; //表格参数属性 type TUTableConfig = { rowKey: string; // 表格唯一id schema: TTableColumn[]; //列表列配置 request: { //请求配置 list?: TRequestConfig; }; isIndex?: boolean; // 是否需要序号 isIndexFixed?: boolean; //序号是否浮动 isIndexOrder?: boolean; //序号是否需要计数,如果没有展示10行,那么在第二行序号从1开始 isSelection?: boolean; // 是否需要多选 isPagination?: boolean; // 是否需要翻页 isBorder?: boolean; //是否要边框 isHeader?: boolean; // 是否需要table头部操作区域, isSearch?: boolean; //是否需要搜索 isShowFormAction?: boolean; //是否展示操作按钮组 propMapToTime?: [string, [string, string], string?][]; //分解多个字段展示 isAuto?: boolean; //是否自动请求 labelPosition?: "top" | "left" | "right"; //表单label位置 labelWidth?: number | string; //列宽 span?: number; //搜索表单展示的宽度 inlineBtn?: TOperateBtn[]; //列表操作按钮 operateBtn?: TOperateBtn[]; //功能按钮配置 dialog?: { //弹框配置 labelWidth?: number | string; //弹框表单列宽 width?: number | string; //弹框宽度 span?: number; //弹框表单栅格 isFooter?: boolean; //是否展示底部 title?: string; //弹框标题 draggable?: boolean; //是否可拖拽 modal?: boolean; //是否需要遮罩层 closeOnClickModal?: boolean; //是否可点击遮罩层关闭 showClose?: boolean; //是否展示关闭按钮 closeOnPressEscape?: boolean; //是否可点击esc关闭 zIndex?: number; //遮罩层z-index }; }; //分页参数 type TPagination = { pageNum: number; pageSize: number; total?: number; }; ``` #### 如何使用? 1、新建ts文件或者js文件,可以是对象或者函数。根据实际情况返回,如果需要从外面传参数到配置,那么就用函数方式,如果只是纯展示,就使用对象方式 ```typescript export const optionsFlowConfig = (dict: Recordable): TUTableConfig => ({ rowKey: 'id', // 表格唯一id dialog: { width: 700, labelWidth: 120, }, inlineBtn: [ { label: '修改', uniqueKey: 'modify', type: 'primary', link: true, icon: 'Edit', disabledFormItem: ['processIndex'], permissions: ['closeAccount:flow:update'], request: { apiFunc: modifyFunc, }, }, { label: '删除', uniqueKey: 'remove', type: 'danger', link: true, icon: 'Delete', request: { apiFunc: removeFunc, mapping: { value: 'id', }, }, }, ], operateBtn: [ { label: '创建流程', uniqueKey: 'create', type: 'primary', icon: 'Plus', permissions: ['closeAccount:flow:create'], request: { apiFunc: createdFunc, }, }, { label: '修改', uniqueKey: 'modify', type: 'primary', icon: 'Edit', disabledFormItem: ['processIndex'], request: { apiFunc: modifyFunc, }, express: (row: Recordable[]) => { return row && row.length === 1; }, }, { label: '删除', uniqueKey: 'remove', type: 'danger', icon: 'Delete', request: { apiFunc: removeFunc, mapping: { value: 'id', }, }, express: (row: Recordable[]) => { return row && row.length > 0; }, }, ], request: { // 请求参数 list: { apiFunc: listPageFunc, }, }, propMapToTime: [['processName1', ['startTime', 'endTime'], 'YYYY-MM']], schema: [ { label: '关账流程标识', prop: 'processIndex', isLink: true, to: '/closeAccount/configure-task/index/$[id]', rules: [{ required: true, message: '关账流程标识', trigger: ['blur', 'change'] }], }, { label: '关账流程名称', prop: 'processName', rules: [{ required: true, message: '关账流程名称', trigger: ['blur', 'change'] }], }, { label: '流程业务类型', prop: 'busiType', search: true, type: 'Select', option: dict['busi_type'], isDictType: true, rules: [{ required: true, message: '流程业务类型', trigger: ['blur', 'change'] }], }, { label: '流程所属机构', prop: 'comCode', search: true, type: 'Select', option: dict['com_code'], isDictType: true, rules: [{ required: true, message: '流程所属机构', trigger: ['blur', 'change'] }], }, { label: '关账频度', prop: 'frequency', type: 'Select', option: dict['frequency'], isDictType: true, rules: [{ required: true, message: '关账频度', trigger: ['blur', 'change'] }], }, { prop: '_operate_', width: 150, label: '操作', }, ], }); ``` 2、在vue中使用 ```vue ``` ### 效果展示 ![alt 列表](images/1.png) ![alt 弹框展示](images/2.png)