first commit

This commit is contained in:
2025-08-12 00:07:53 +08:00
commit 57cc705d4e
2 changed files with 1787 additions and 0 deletions

243
README.md Normal file
View File

@@ -0,0 +1,243 @@
# UI组件库与API请求工具
一个功能强大的UI组件库和一个轻量级的API请求工具可以帮助开发者快速构建现代化的Web应用界面。
## 功能概述
### API请求器 (`API`类)
- 支持GET和POST请求
- 可设置基础URL和请求头
- 提供请求中断功能
- 自动格式化响应数据
- 支持异步请求和回调处理
- 包含进度回调支持(POST)
### UI组件库 (`UI`类)
提供以下自定义Web组件
1. **搜索框组件 (Search)**
- 支持前缀/后缀插槽
- 可清除内容
- 支持最大长度限制
- 支持换行显示
2. **下拉选择框组件 (Select)**
- 可自定义选项列表
- 支持选项值绑定
- 弹出式菜单
- 选中状态高亮
3. **加载指示器组件 (Loading)**
- 自定义加载文本
- 内联/全屏模式
- 显示/隐藏控制
- 内置加载动画
4. **气泡列表组件 (BubbleList)**
- 可选气泡项
- 多行滚动支持
- 自定义大小
- 选中状态标记
5. **对话框组件 (Dialog)**
- 自定义标题和内容
- 确定/取消按钮
- 显示/隐藏控制
- 支持插槽自定义内容
6. **模态框组件 (Modal)**
- 带模糊背景效果
- 居中显示
- 开/关动画
- 自定义内容
7. **选项卡组件 (Tab)**
- 水平布局
- 带描述的选项卡
- 选中高亮效果
- 切换事件
8. **提示条组件 (Tip)**
- 多种类型(info/success/warn/error)
- 自动隐藏计时器
- 关闭按钮
- 位置动画
## 安装与使用
### API请求器
- 用于发送HTTP请求支持GET和POST方法。
- 可以设置基础URLbaseUrl
- 可以设置请求头headers
- 支持中断请求abort
- 支持异步请求。
- 提供成功和失败的回调函数。
### 方法:
1. `constructor(options)`: 初始化可以传入配置对象如baseUrl
2. `setHeaders(headers)`: 设置请求头。
3. `formatData(data)`: 格式化响应数据尝试解析JSON。
4. `abort(callback)`: 中断请求,并执行回调。
5. `get(options)`: 发送GET请求配置项包括url、headers、callback/success、fail/error、async等。
6. `post(options)`: 发送POST请求配置项包括url、data、headers、progress、callback/success、fail/error、async等。
```javascript
// 创建API实例
const api = new API({ baseUrl: 'https://api.example.com' });
// GET请求
api.get({
url: '/data',
success: (data) => {
console.log('获取数据:', data);
}
});
// POST请求
api.post({
url: '/submit',
data: JSON.stringify({ name: 'John' }),
progress: (response) => {
console.log('上传进度:', response);
},
success: (data) => {
console.log('提交成功:', data);
}
});
// 中断请求
api.abort();
```
### UI组件
- 用于创建自定义元素Web Components
- 包含多个内置组件Search搜索框、Select下拉框、Loading加载指示器、BubbleList气泡列表、Dialog对话框、Modal模态框、Tab选项卡、Tip提示条
- 每个组件都是通过继承`HTMLElement`定义的,并且可以注册为自定义元素。
- 提供了注册组件的方法`registerComponent`
### 组件列表:
1. **Search (搜索框)**
- 属性value, placeholder, disabled, max, wrap
- 事件change, enter, blur, focus
- 方法clear()
2. **Select (下拉框)**
- 属性placeholder, list选项列表逗号分隔, value选项值逗号分隔, current当前选中索引, disabled, focus
- 事件change
- 方法reset(), addOption()
3. **Loading (加载指示器)**
- 属性content加载文本, inline是否内联, hidden是否隐藏
- 方法show(), hide()
4. **BubbleList (气泡列表)**
- 属性list列表项逗号分隔, value逗号分隔, current当前选中索引, disabled, rows显示行数, size气泡大小, selected当前选中值
- 事件change
- 方法add(), clear(), select()
5. **Dialog (对话框)**
- 属性subtitle标题, content内容, hidden
- 事件show, hide
- 方法show(), hide(), set()
6. **Modal (模态框)**
- 属性subtitle, content, hidden
- 事件open, close
- 方法open(), close(), animate()
7. **Tab (选项卡)**
- 属性list选项卡列表格式为"标题>描述|标题>描述",用|分隔), current当前索引
- 事件change
8. **Tip (提示条)**
- 属性content, typeinfo/success/warn/error, hidden, timeout自动隐藏时间
- 方法show(), hide(), animate()
### 图标Icon
- 提供两个SVG图标clear清除和task任务
### 注册组件
`UI`的构造函数中,传入一个组件名称数组(如`['ui-search', 'ui-select']`),则会自动注册这些组件。也可以使用`registerComponent`方法手动注册。
## 使用示例
### 注册组件
```javascript
const ui = new UI(['ui-search', 'ui-select', 'ui-loading', 'ui-bubble-list', 'ui-dialog', 'ui-modal', 'ui-tab', 'ui-tip']);
```
### 在HTML中使用
```html
<ui-search placeholder="搜索..."></ui-search>
<ui-select list="选项1,选项2" value="1,2"></ui-select>
<ui-loading content="加载中..."></ui-loading>
<ui-bubble-list list="气泡1,气泡2" value="1,2" rows="1"></ui-bubble-list>
<ui-dialog subtitle="提示" content="这是一个对话框"></ui-dialog>
<ui-modal subtitle="标题" content="模态框内容"></ui-modal>
<ui-tab list="选项卡1>描述1|选项卡2>描述2"></ui-tab>
<ui-tip content="提示信息" type="info"></ui-tip>
```
## 自定义样式
所有组件都支持通过CSS变量进行样式自定义
```css
/* 全局样式自定义 */
:root {
/* 搜索框 */
--background-color: #f5f5f5;
--border-color: #ddd;
/* 下拉框 */
--hover-background-color: #eef2ff;
/* 加载指示器 */
--mask-color: rgba(255, 255, 255, 0.8);
/* 气泡列表 */
--background-color: #4f46e5;
/* 对话框 */
--border-radius: 12px;
/* 提示条 */
--color: #3b82f6;
}
```
## 内置图标
组件库提供两个内置SVG图标
1. 清除图标 (Icon.clear)
2. 任务图标 (Icon.task)
## 浏览器兼容性
- 现代浏览器(Chrome, Firefox, Edge最新版本)
- 需要支持Web Components和Shadow DOM
## 注意事项
1. 所有UI组件都是自定义HTML元素使用Shadow DOM封装
2. 组件属性可以通过JavaScript或HTML属性设置
3. 组件会触发自定义事件可通过addEventListener监听
4. API请求器使用XMLHttpRequest实现
## 扩展开发
可以通过继承UI类并调用registerComponent方法添加新的自定义组件
```javascript
class MyComponent extends HTMLElement {
// 组件实现
}
// 注册新组件
ui.registerComponent('my-component', MyComponent);
```
## 贡献指南
欢迎提交Pull Request或Issue报告问题。请确保代码风格一致并通过基本测试。

1544
index.js Normal file

File diff suppressed because it is too large Load Diff