From b82f583d8222f8740afa2d1532db93832c4a5274 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Wed, 19 Mar 2025 18:35:28 +0800 Subject: [PATCH] 知识库文档,增加插件部分 --- _cursor.ai/plugins.doc/filter.doc/CFilter.doc.md | 193 +++++++++++++++++++++ _cursor.ai/plugins.doc/qrcode.doc/CQRCode.doc.md | 53 +++++ _cursor.ai/plugins.doc/echarts.doc/CECharts.doc.md | 156 +++++++++++++++++ _cursor.ai/plugins.doc/infiniteScroll.doc/CInfiniteScroll.doc.md | 125 +++++++++++++ 4 files changed, 527 insertions(+), 0 deletions(-) diff --git a/_cursor.ai/plugins.doc/echarts.doc/CECharts.doc.md b/_cursor.ai/plugins.doc/echarts.doc/CECharts.doc.md new file mode 100644 index 0000000..2b6ea9e --- /dev/null +++ b/_cursor.ai/plugins.doc/echarts.doc/CECharts.doc.md @@ -0,0 +1,156 @@ +# ECharts图表组件 + +## 组件名称 + +`CECharts` - 用于在小程序环境中渲染ECharts图表的组件 + +## 组件说明 + +该组件是对百度ECharts的封装,用于在小程序环境中渲染各类图表,支持触摸交互和数据更新。支持柱状图、折线图、饼图等各种ECharts支持的图表类型。 + +## 使用方法 + +```html +<CECharts + :canvasId="'chart-' + Math.random()" + :onReady="handleChartReady" +/> +``` + +```js +// 图表初始化回调 +handleChartReady(chart) { + chart.setOption({ + title: { + text: '销售统计' + }, + tooltip: {}, + xAxis: { + data: ['1月', '2月', '3月', '4月', '5月', '6月'] + }, + yAxis: {}, + series: [{ + name: '销量', + type: 'bar', + data: [5, 20, 36, 10, 10, 20] + }] + }); +} +``` + +## 属性说明 + +| 属性名 | 类型 | 默认值 | 说明 | +| ------------ | -------- | -------- | --------------------------------------- | +| canvasId | String | 随机生成 | 画布ID,用于标识图表实例 | +| disableTouch | Boolean | false | 是否禁用触摸交互 | +| onReady | Function | - | 图表准备就绪的回调函数,参数为chart实例 | + +## 方法说明 + +组件内部对外暴露的方法: + +| 方法名 | 参数 | 说明 | +| -------------------- | -------- | ---------------------- | +| init | callback | 初始化图表方法 | +| canvasToTempFilePath | opt | 将图表转为临时文件路径 | + +## 使用示例 + +```html +<template> + <view class="page"> + <view class="chart-container"> + <CECharts + ref="salesChart" + :onReady="handleSalesChartReady" + /> + </view> + </view> +</template> + +<script> +import { CECharts } from '@components/plugins/echarts'; + +export default { + components: { + CECharts + }, + data() { + return { + salesData: [] + } + }, + methods: { + // 图表准备就绪回调 + handleSalesChartReady(chart) { + // 保存图表实例 + this.chart = chart; + + // 设置图表配置 + chart.setOption({ + title: { + text: '月度销售统计', + left: 'center' + }, + tooltip: { + trigger: 'axis' + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + xAxis: { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月'] + }, + yAxis: { + type: 'value' + }, + series: [{ + name: '销量', + type: 'bar', + data: [10, 52, 200, 334, 390, 330] + }] + }); + }, + + // 更新图表数据 + updateChartData(newData) { + if (!this.chart) return; + + this.chart.setOption({ + series: [{ + data: newData + }] + }); + } + }, + mounted() { + // 获取数据 + setTimeout(() => { + const newData = [50, 120, 180, 80, 70, 110]; + this.updateChartData(newData); + }, 2000); + } +} +</script> +``` + +## 默认配置说明 + +组件已经内置了一些默认配置: + +1. 禁用了渐进式渲染(progressive: 0) +2. 配置了默认的 tooltip 样式 +3. 优化了 tooltip 的定位逻辑 + +## 注意事项 + +1. 该组件暂时仅适用于小程序环境,文件名为 `CECharts.weapp.vue` +2. 在小程序端使用需要确保 canvas 的 type 属性设置为 "2d" +3. 小程序对 canvas 的性能有一定限制,复杂图表可能会有性能问题 +4. 组件自动会处理触摸事件,支持图表交互 +5. 如需保存图表为图片,可使用 canvasToTempFilePath 方法 \ No newline at end of file diff --git a/_cursor.ai/plugins.doc/filter.doc/CFilter.doc.md b/_cursor.ai/plugins.doc/filter.doc/CFilter.doc.md new file mode 100644 index 0000000..742ee75 --- /dev/null +++ b/_cursor.ai/plugins.doc/filter.doc/CFilter.doc.md @@ -0,0 +1,193 @@ +# 筛选组件 + +## 组件名称 + +`CFilter` - 用于页面筛选条件的组件 + +## 组件说明 + +该组件用于实现页面筛选功能,包含顶部筛选条和展开的更多筛选抽屉,支持多种筛选控件类型,包括选择器、日期范围、单选和输入框等。 + +## 使用方法 + +```html +<CFilter + :filterData="filterData" + :bar="barConfig" + :items="itemsConfig" + :selectOptions="selectOptions" + :onChange="handleFilterChange" +/> +``` + +## 属性说明 + +| 属性名 | 类型 | 默认值 | 说明 | +| ------------- | -------- | ------ | ---------------------- | +| filterData | Object | {} | 筛选数据对象 | +| bar | Object | {} | 筛选横条项目配置 | +| items | Array | [] | 筛选展开层项目列表配置 | +| selectOptions | Object | {} | 各个项目的选项列表 | +| onChange | Function | - | 筛选变化时的回调函数 | + +## 子组件说明 + +CFilter组件包含以下子组件: + +1. `CFilterSelect` - 下拉选择组件 +2. `CFilterDateRange` - 日期范围选择组件 +3. `CFilterRadio` - 单选组件 +4. `CFilterInput` - 输入框组件 + +## 配置项说明 + +### bar 配置项 + +顶部筛选条配置,支持类型: + +```js +{ + type: 'select', // 类型:select/dateRange/input + label: '状态', // 显示的标签 + name: 'status', // 字段名称 + cancelable: true // 是否可取消选择 +} +``` + +### items 配置项 + +更多筛选项配置数组: + +```js +[ + { + type: 'select', // 类型:select/dateRange/radio/input + label: '会员类型', // 显示的标签 + name: 'memberType', // 字段名称 + }, + { + type: 'dateRange', + label: '日期范围', + name: 'dateRange' + } +] +``` + +### selectOptions 配置项 + +选项数据配置: + +```js +{ + status: [ + { label: '全部', value: '' }, + { label: '正常', value: 1 }, + { label: '停用', value: 0 } + ], + memberType: [ + { label: '全部', value: '' }, + { label: '普通会员', value: 'normal' }, + { label: 'VIP会员', value: 'vip' } + ] +} +``` + +## 使用示例 + +```html +<template> + <view class="page"> + <CFilter + :filterData="filterData" + :bar="barConfig" + :items="itemsConfig" + :selectOptions="selectOptions" + :onChange="handleFilterChange" + /> + + <!-- 列表内容 --> + <view class="list"> + <!-- 根据筛选结果显示内容 --> + </view> + </view> +</template> + +<script> +import { CFilter } from '@components/plugins/filter'; + +export default { + components: { + CFilter + }, + data() { + return { + // 筛选数据 + filterData: { + status: 1, + memberType: '', + dateRange: '', + keyword: '' + }, + // 顶部筛选条配置 + barConfig: { + type: 'select', + label: '状态', + name: 'status', + cancelable: false + }, + // 更多筛选项配置 + itemsConfig: [ + { + type: 'select', + label: '会员类型', + name: 'memberType' + }, + { + type: 'dateRange', + label: '创建日期', + name: 'dateRange' + }, + { + type: 'input', + label: '关键字', + name: 'keyword' + } + ], + // 选项数据 + selectOptions: { + status: [ + { label: '全部', value: '' }, + { label: '正常', value: 1 }, + { label: '停用', value: 0 } + ], + memberType: [ + { label: '全部', value: '' }, + { label: '普通会员', value: 'normal' }, + { label: 'VIP会员', value: 'vip' } + ] + } + } + }, + methods: { + // 筛选变化回调 + handleFilterChange(filterData) { + console.log('筛选条件变化:', filterData); + // 根据筛选条件获取数据 + this.getListData(filterData); + }, + + // 获取列表数据 + getListData(params) { + // 请求数据 + } + } +} +</script> +``` + +## 注意事项 + +1. 筛选条(bar)只能配置一个筛选项 +2. 抽屉式筛选(items)可以配置多个筛选项 +3. 每个筛选项的类型(type)必须与组件类型匹配 +4. select和radio类型的选项必须在selectOptions中配置对应的选项数据 \ No newline at end of file diff --git a/_cursor.ai/plugins.doc/infiniteScroll.doc/CInfiniteScroll.doc.md b/_cursor.ai/plugins.doc/infiniteScroll.doc/CInfiniteScroll.doc.md new file mode 100644 index 0000000..a9da34c --- /dev/null +++ b/_cursor.ai/plugins.doc/infiniteScroll.doc/CInfiniteScroll.doc.md @@ -0,0 +1,125 @@ +# 无限滚动组件 + +## 组件名称 + +`CInfiniteScroll` - 用于实现下拉刷新和上拉加载更多功能的滚动容器组件 + +## 组件说明 + +该组件实现了移动端常见的下拉刷新和上拉加载更多功能,支持自动加载第一页和手动触发加载,适用于列表展示场景。 + +## 使用方法 + +```html +<CInfiniteScroll + :autoInit="true" + :onLoadMore="handleLoadMore" +> + <!-- 内容插槽 --> + <view v-for="(item, index) in list" :key="index"> + {{ item.name }} + </view> +</CInfiniteScroll> +``` + +```js +// 数据加载方法 +handleLoadMore({ current, next, success, fail }) { + // 请求后端数据 + $fetch.getList({ page: next }).then(res => { + // 加载成功 + success({ + pageTotal: res.pageTotal, // 总页数 + }); + }).catch(() => { + // 加载失败 + fail(); + }); +} +``` + +## 属性说明 + +| 属性名 | 类型 | 默认值 | 说明 | +| ---------- | -------- | ------ | -------------------------------- | +| autoInit | Boolean | false | 是否自动初始化(自动加载第一页) | +| onLoadMore | Function | - | 发起加载页面数据的回调函数 | + +## 方法说明 + +| 方法名 | 参数 | 说明 | +| ----------- | --------- | ------------------------------------------- | +| $initScroll | - | 初始化加载第一页数据 | +| $refresh | autoStart | 重置并刷新数据,参数为 'off' 时不会自动加载 | + +## 回调参数说明 + +`onLoadMore` 回调函数参数: + +| 参数名 | 类型 | 说明 | +| ------- | -------- | ---------------------------------------------- | +| current | Number | 当前页页码 | +| next | Number | 需要加载的页面页码 | +| success | Function | 当加载成功后调用,参数 `{ pageTotal: 总页数 }` | +| fail | Function | 加载失败后调用 | + +## 使用示例 + +```html +<template> + <view class="page"> + <CInfiniteScroll + ref="scrollList" + :autoInit="true" + :onLoadMore="handleLoadMore" + > + <view class="list-item" v-for="(item, index) in list" :key="index"> + {{ item.name }} + </view> + </CInfiniteScroll> + </view> +</template> + +<script> +import { CInfiniteScroll } from '@components/plugins/infiniteScroll'; +import { $fetchCommon } from '@fetchers/FCommon'; + +export default { + components: { + CInfiniteScroll + }, + data() { + return { + list: [] + } + }, + methods: { + handleLoadMore({ current, next, success, fail }) { + $fetchCommon.getList({ page: next }).then(res => { + // 拼接数据 + if (current === 0) { + this.list = res.list; + } else { + this.list = this.list.concat(res.list); + } + success({ + pageTotal: res.pageTotal + }); + }).catch(() => { + fail(); + }); + }, + // 手动刷新列表 + refreshList() { + this.$refs.scrollList.$refresh(); + } + } +} +</script> +``` + +## 注意事项 + +1. 组件通过检测滚动位置自动触发加载更多功能 +2. 下拉刷新功能仅在滚动到顶部时可用 +3. 加载状态会自动管理,包括"加载中"和"没有更多了"等提示 \ No newline at end of file diff --git a/_cursor.ai/plugins.doc/qrcode.doc/CQRCode.doc.md b/_cursor.ai/plugins.doc/qrcode.doc/CQRCode.doc.md new file mode 100644 index 0000000..888b452 --- /dev/null +++ b/_cursor.ai/plugins.doc/qrcode.doc/CQRCode.doc.md @@ -0,0 +1,53 @@ +# 二维码组件 + +## 组件名称 + +`CQRCode` - 用于生成和展示二维码的组件 + +## 组件说明 + +该组件用于在页面中生成二维码,支持在H5环境下保存二维码图片。 + +## 使用方法 + +```html +<CQRCode + content="https://example.com" + :size="200" + :margin="2" + :downloadable="true" +/> +``` + +## 属性说明 + +| 属性名 | 类型 | 默认值 | 说明 | +| ------------ | ------- | --------------------- | ------------------------- | +| content | String | 'http://www.aisim.cn' | 二维码内容,通常为URL地址 | +| size | Number | 200 | 二维码尺寸,单位为像素 | +| margin | Number | 2 | 二维码边距大小 | +| downloadable | Boolean | false | 是否显示"保存到手机"按钮 | + +## 方法说明 + +组件无对外暴露的方法 + +## 使用示例 + +```html +<!-- 简单用法 --> +<CQRCode content="https://www.example.com" /> + +<!-- 带保存按钮的用法 --> +<CQRCode + content="https://www.example.com" + :size="300" + :margin="4" + :downloadable="true" +/> +``` + +## 注意事项 + +1. 目前在H5环境中支持保存二维码图片到本地 +2. 小程序环境下的保存功能尚未实现 \ No newline at end of file -- Gitblit v1.9.1