@fredwsw/frontend-rules 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +302 -0
- package/bin/cli.js +155 -0
- package/package.json +22 -0
- package/template/docs/uv-ui-docs/action-sheet-cn.md +180 -0
- package/template/docs/uv-ui-docs/album-cn.md +104 -0
- package/template/docs/uv-ui-docs/alert-cn.md +71 -0
- package/template/docs/uv-ui-docs/avatar-cn.md +149 -0
- package/template/docs/uv-ui-docs/back-top-cn.md +121 -0
- package/template/docs/uv-ui-docs/badge-cn.md +100 -0
- package/template/docs/uv-ui-docs/button-cn.md +181 -0
- package/template/docs/uv-ui-docs/calendar-cn.md +179 -0
- package/template/docs/uv-ui-docs/calendars-cn.md +264 -0
- package/template/docs/uv-ui-docs/cell-cn.md +163 -0
- package/template/docs/uv-ui-docs/checkbox-cn.md +164 -0
- package/template/docs/uv-ui-docs/code-cn.md +122 -0
- package/template/docs/uv-ui-docs/code-input-cn.md +127 -0
- package/template/docs/uv-ui-docs/collapse-cn.md +206 -0
- package/template/docs/uv-ui-docs/color-cn.md +122 -0
- package/template/docs/uv-ui-docs/count-down-cn.md +169 -0
- package/template/docs/uv-ui-docs/count-to-cn.md +125 -0
- package/template/docs/uv-ui-docs/datetime-picker-cn.md +167 -0
- package/template/docs/uv-ui-docs/divider-cn.md +90 -0
- package/template/docs/uv-ui-docs/drop-down-cn.md +287 -0
- package/template/docs/uv-ui-docs/empty-cn.md +76 -0
- package/template/docs/uv-ui-docs/form-cn.md +220 -0
- package/template/docs/uv-ui-docs/gap-cn.md +63 -0
- package/template/docs/uv-ui-docs/grid-cn.md +187 -0
- package/template/docs/uv-ui-docs/icon-cn.md +255 -0
- package/template/docs/uv-ui-docs/image-cn.md +170 -0
- package/template/docs/uv-ui-docs/index-list-cn.md +132 -0
- package/template/docs/uv-ui-docs/input-cn.md +157 -0
- package/template/docs/uv-ui-docs/keyboard-cn.md +156 -0
- package/template/docs/uv-ui-docs/layout-cn.md +215 -0
- package/template/docs/uv-ui-docs/line-cn.md +77 -0
- package/template/docs/uv-ui-docs/line-progress-cn.md +132 -0
- package/template/docs/uv-ui-docs/link-cn.md +97 -0
- package/template/docs/uv-ui-docs/list-cn.md +185 -0
- package/template/docs/uv-ui-docs/load-more-cn.md +144 -0
- package/template/docs/uv-ui-docs/loading-icon-cn.md +125 -0
- package/template/docs/uv-ui-docs/loading-page-cn.md +85 -0
- package/template/docs/uv-ui-docs/modal-cn.md +212 -0
- package/template/docs/uv-ui-docs/navbar-cn.md +171 -0
- package/template/docs/uv-ui-docs/no-network-cn.md +112 -0
- package/template/docs/uv-ui-docs/notice-bar-cn.md +119 -0
- package/template/docs/uv-ui-docs/notify-cn.md +185 -0
- package/template/docs/uv-ui-docs/number-box-cn.md +131 -0
- package/template/docs/uv-ui-docs/overlay-cn.md +122 -0
- package/template/docs/uv-ui-docs/parse-cn.md +177 -0
- package/template/docs/uv-ui-docs/pick-color-cn.md +147 -0
- package/template/docs/uv-ui-docs/picker-cn.md +159 -0
- package/template/docs/uv-ui-docs/popup-cn.md +184 -0
- package/template/docs/uv-ui-docs/qrcode-cn.md +150 -0
- package/template/docs/uv-ui-docs/radio-cn.md +166 -0
- package/template/docs/uv-ui-docs/rate-cn.md +91 -0
- package/template/docs/uv-ui-docs/read-more-cn.md +191 -0
- package/template/docs/uv-ui-docs/scroll-list-cn.md +188 -0
- package/template/docs/uv-ui-docs/search-cn.md +107 -0
- package/template/docs/uv-ui-docs/skeleton-cn.md +101 -0
- package/template/docs/uv-ui-docs/skeletons-cn.md +312 -0
- package/template/docs/uv-ui-docs/slider-cn.md +98 -0
- package/template/docs/uv-ui-docs/steps-cn.md +158 -0
- package/template/docs/uv-ui-docs/sticky-cn.md +82 -0
- package/template/docs/uv-ui-docs/subsection-cn.md +161 -0
- package/template/docs/uv-ui-docs/swipe-action-cn.md +207 -0
- package/template/docs/uv-ui-docs/swiper-cn.md +247 -0
- package/template/docs/uv-ui-docs/switch-cn.md +136 -0
- package/template/docs/uv-ui-docs/tabbar-cn.md +224 -0
- package/template/docs/uv-ui-docs/tabs-cn.md +260 -0
- package/template/docs/uv-ui-docs/tags-cn.md +191 -0
- package/template/docs/uv-ui-docs/text-cn.md +178 -0
- package/template/docs/uv-ui-docs/textarea-cn.md +132 -0
- package/template/docs/uv-ui-docs/toast-cn.md +110 -0
- package/template/docs/uv-ui-docs/tooltip-cn.md +91 -0
- package/template/docs/uv-ui-docs/transition-cn.md +202 -0
- package/template/docs/uv-ui-docs/upload-cn.md +156 -0
- package/template/docs/uv-ui-docs/vtabs-cn.md +190 -0
- package/template/docs/uv-ui-docs/waterfall-cn.md +276 -0
- package/template/rules/common.mdc +90 -0
- package/template/rules/uv-ui-docs.mdc +111 -0
- package/template/skills/code-simplifier/SKILL.md +109 -0
- package/template/skills/frontend-design/SKILL.md +44 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: 表单
|
|
3
|
+
category: Components
|
|
4
|
+
title: DatetimePicker
|
|
5
|
+
subtitle: 时间选择器
|
|
6
|
+
description: 用于日期、时间选择,统一返回时间戳。
|
|
7
|
+
demo:
|
|
8
|
+
cols: 2
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 何时使用 {#when-to-use}
|
|
12
|
+
|
|
13
|
+
`uv-datetime-picker` 通过 ref 调用 `open()` 打开,`mode` 配置展示格式。统一返回时间戳,可用 uv-ui 的 Time 工具格式化。
|
|
14
|
+
|
|
15
|
+
> 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
16
|
+
|
|
17
|
+
## 注意事项 {#notice}
|
|
18
|
+
|
|
19
|
+
- `mode="time"` 时 value 应为 String,如 `"12:00"`,不是 `Number(new Date())`
|
|
20
|
+
- 部分平台 formatter 不生效时,使用 `setFormatter()` 设置
|
|
21
|
+
|
|
22
|
+
## 平台兼容性 {#platform}
|
|
23
|
+
|
|
24
|
+
| App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
|
|
25
|
+
| --- | --- | --- | --- | --- | --- |
|
|
26
|
+
| √ | √ | √ | √ | √ | √ |
|
|
27
|
+
|
|
28
|
+
**组件名:** `uv-datetime-picker`
|
|
29
|
+
|
|
30
|
+
## 代码演示 {#examples}
|
|
31
|
+
|
|
32
|
+
### 基本使用 {#basic}
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<template>
|
|
36
|
+
<view>
|
|
37
|
+
<uv-datetime-picker ref="datetimePicker" v-model="value" mode="datetime" @confirm="confirm"></uv-datetime-picker>
|
|
38
|
+
<button @click="open">打开</button>
|
|
39
|
+
</view>
|
|
40
|
+
</template>
|
|
41
|
+
<script>
|
|
42
|
+
export default {
|
|
43
|
+
data() {
|
|
44
|
+
return { value: Number(new Date()) }
|
|
45
|
+
},
|
|
46
|
+
methods: {
|
|
47
|
+
open() {
|
|
48
|
+
this.$refs.datetimePicker.open()
|
|
49
|
+
},
|
|
50
|
+
confirm(e) {
|
|
51
|
+
console.log('confirm', e)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
</script>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 年月日 {#date}
|
|
59
|
+
|
|
60
|
+
```vue
|
|
61
|
+
<uv-datetime-picker ref="datetimePicker" v-model="value" mode="date" @confirm="confirm"></uv-datetime-picker>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 过滤器 {#filter}
|
|
65
|
+
|
|
66
|
+
```vue
|
|
67
|
+
<uv-datetime-picker
|
|
68
|
+
ref="datetimePicker"
|
|
69
|
+
v-model="value"
|
|
70
|
+
mode="date"
|
|
71
|
+
:filter="filter"
|
|
72
|
+
@confirm="confirm"
|
|
73
|
+
></uv-datetime-picker>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```js
|
|
77
|
+
filter(type, options) {
|
|
78
|
+
if (type === 'year') {
|
|
79
|
+
return options.filter(option => option % 2 === 0)
|
|
80
|
+
}
|
|
81
|
+
return options
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 格式化 {#formatter}
|
|
86
|
+
|
|
87
|
+
部分平台需在 `onReady` 中调用 `setFormatter`。
|
|
88
|
+
|
|
89
|
+
```vue
|
|
90
|
+
<uv-datetime-picker
|
|
91
|
+
ref="datetimePicker"
|
|
92
|
+
v-model="value"
|
|
93
|
+
mode="datetime"
|
|
94
|
+
:formatter="formatter"
|
|
95
|
+
@confirm="confirm"
|
|
96
|
+
></uv-datetime-picker>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
formatter(type, value) {
|
|
101
|
+
if (type === 'year') return `${value}年`
|
|
102
|
+
if (type === 'month') return `${value}月`
|
|
103
|
+
if (type === 'day') return `${value}日`
|
|
104
|
+
return value
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 限制最大最小值 {#min-max}
|
|
109
|
+
|
|
110
|
+
`minDate`、`maxDate` 传入时间戳毫秒。
|
|
111
|
+
|
|
112
|
+
```vue
|
|
113
|
+
<uv-datetime-picker
|
|
114
|
+
ref="datetimePicker"
|
|
115
|
+
v-model="value"
|
|
116
|
+
mode="datetime"
|
|
117
|
+
:minDate="1587524800000"
|
|
118
|
+
:maxDate="1786778555000"
|
|
119
|
+
@confirm="confirm"
|
|
120
|
+
></uv-datetime-picker>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## API {#api}
|
|
124
|
+
|
|
125
|
+
### DatetimePicker Props {#props}
|
|
126
|
+
|
|
127
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
128
|
+
| --- | --- | --- | --- |
|
|
129
|
+
| value / v-model | 绑定值 | String \| Number | - |
|
|
130
|
+
| showToolbar | 显示顶部操作栏 | Boolean | true |
|
|
131
|
+
| title | 标题 | String | - |
|
|
132
|
+
| mode | 格式 | String | datetime |
|
|
133
|
+
| maxDate | 最大时间(时间戳) | Number | - |
|
|
134
|
+
| minDate | 最小时间(时间戳) | Number | - |
|
|
135
|
+
| minHour / maxHour | 小时范围(mode=time) | Number | 0 / 23 |
|
|
136
|
+
| minMinute / maxMinute | 分钟范围(mode=time) | Number | 0 / 59 |
|
|
137
|
+
| filter | 选项过滤函数 | Function | null |
|
|
138
|
+
| formatter | 格式化函数 | Function | null |
|
|
139
|
+
| loading | 加载中 | Boolean | false |
|
|
140
|
+
| closeOnClickOverlay | 点击遮罩关闭 | Boolean | true |
|
|
141
|
+
| closeOnClickConfirm | 点击确认关闭 | Boolean | true |
|
|
142
|
+
|
|
143
|
+
### Mode Options {#mode-options}
|
|
144
|
+
|
|
145
|
+
| 属性名 | 说明 |
|
|
146
|
+
| --- | --- |
|
|
147
|
+
| datetime | 年月日时分 |
|
|
148
|
+
| date | 年月日 |
|
|
149
|
+
| time | 时分,value 格式如 00:00 |
|
|
150
|
+
| year-month | 年月 |
|
|
151
|
+
| year | 年 |
|
|
152
|
+
|
|
153
|
+
### DatetimePicker Methods {#methods}
|
|
154
|
+
|
|
155
|
+
| 方法名 | 说明 |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| open | 弹出时间选择器 |
|
|
158
|
+
| setFormatter | 设置格式化函数 |
|
|
159
|
+
|
|
160
|
+
### DatetimePicker Events {#events}
|
|
161
|
+
|
|
162
|
+
| 事件名 | 说明 | 回调参数 |
|
|
163
|
+
| --- | --- | --- |
|
|
164
|
+
| @confirm | 点击确定 | value, mode |
|
|
165
|
+
| @change | 选择值变化 | value, mode |
|
|
166
|
+
| @cancel | 点击取消 | - |
|
|
167
|
+
| @close | 关闭遮罩 | - |
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: 布局
|
|
3
|
+
category: Components
|
|
4
|
+
title: Divider
|
|
5
|
+
subtitle: 分割线
|
|
6
|
+
description: 在内容区块之间显示一条带或不带文字的分割线,支持虚线、细线、文本位置与颜色自定义。
|
|
7
|
+
demo:
|
|
8
|
+
cols: 2
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 何时使用 {#when-to-use}
|
|
12
|
+
|
|
13
|
+
`uv-divider` 用于 **区隔内容块** 的场景,例如:
|
|
14
|
+
|
|
15
|
+
- 模块中间的分割线
|
|
16
|
+
- 列表底部的「没有更多」提示
|
|
17
|
+
- 需要带说明文字的分隔条
|
|
18
|
+
|
|
19
|
+
- 支持虚线、细线
|
|
20
|
+
- 支持以点代替文本
|
|
21
|
+
- 支持文本居左/居中/居右
|
|
22
|
+
|
|
23
|
+
> 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
24
|
+
|
|
25
|
+
## 平台兼容性 {#platform}
|
|
26
|
+
|
|
27
|
+
| App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
|
|
28
|
+
| --- | --- | --- | --- | --- | --- |
|
|
29
|
+
| √ | √ | √ | √ | √ | √ |
|
|
30
|
+
|
|
31
|
+
**组件名:** `uv-divider`
|
|
32
|
+
|
|
33
|
+
## 代码演示 {#examples}
|
|
34
|
+
|
|
35
|
+
### 基本使用 {#basic}
|
|
36
|
+
|
|
37
|
+
通过 `text` 传入显示文字。
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<uv-divider text="分割线"></uv-divider>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 虚线与细线 {#dashed-hairline}
|
|
44
|
+
|
|
45
|
+
```vue
|
|
46
|
+
<!-- 虚线 -->
|
|
47
|
+
<uv-divider text="分割线" :dashed="true"></uv-divider>
|
|
48
|
+
|
|
49
|
+
<!-- 细线 -->
|
|
50
|
+
<uv-divider text="分割线" :hairline="true"></uv-divider>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 以点代替文字 {#dot}
|
|
54
|
+
|
|
55
|
+
```vue
|
|
56
|
+
<uv-divider text="分割线" :dot="true"></uv-divider>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 文本位置与颜色 {#position-color}
|
|
60
|
+
|
|
61
|
+
```vue
|
|
62
|
+
<!-- 文本靠左/靠右 -->
|
|
63
|
+
<uv-divider text="靠左" textPosition="left"></uv-divider>
|
|
64
|
+
<uv-divider text="靠右" textPosition="right"></uv-divider>
|
|
65
|
+
|
|
66
|
+
<!-- 文本与线条颜色 -->
|
|
67
|
+
<uv-divider text="分割线" textColor="#2979ff" lineColor="#ff0000"></uv-divider>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## API {#api}
|
|
71
|
+
|
|
72
|
+
### Divider Props {#props}
|
|
73
|
+
|
|
74
|
+
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|
|
75
|
+
| --- | --- | --- | --- | --- |
|
|
76
|
+
| dashed | 是否虚线 | Boolean | false | true \| false |
|
|
77
|
+
| hairline | 是否细线 | Boolean | true | true \| false |
|
|
78
|
+
| dot | 是否以点替代文字(优先于 `text` 字段) | Boolean | false | true \| false |
|
|
79
|
+
| textPosition | 文本位置 | String | center | center \| left \| right |
|
|
80
|
+
| text | 文本内容 | String \| Number | - | - |
|
|
81
|
+
| textSize | 文本大小 | String \| Number | 14 | - |
|
|
82
|
+
| textColor | 文本颜色 | String | #909399 | - |
|
|
83
|
+
| lineColor | 线条颜色 | String | #dcdfe6 | - |
|
|
84
|
+
|
|
85
|
+
### Divider Events {#events}
|
|
86
|
+
|
|
87
|
+
| 事件名 | 说明 | 回调参数 |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
| @click | 分割线被点击时触发 | - |
|
|
90
|
+
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: 布局
|
|
3
|
+
category: Components
|
|
4
|
+
title: DropDown
|
|
5
|
+
subtitle: 下拉筛选
|
|
6
|
+
description: 筛选下拉框组件,内置基础筛选逻辑,支持自定义筛选项与弹层内容。
|
|
7
|
+
cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*BD2JSKm8I-kAAAAAAAAAAAAADrJ8AQ/original
|
|
8
|
+
coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*r29rQ51bNdwAAAAAAAAAAAAADrJ8AQ/original
|
|
9
|
+
demo:
|
|
10
|
+
cols: 2
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 何时使用 {#when-to-use}
|
|
14
|
+
|
|
15
|
+
下拉筛选组件用于在页面顶部展示筛选项,点击后弹出筛选内容,适合商品、文档、列表等筛选场景。
|
|
16
|
+
|
|
17
|
+
- 综合排序、分类、标签等多维筛选
|
|
18
|
+
- 自定义筛选内容或使用内置筛选项
|
|
19
|
+
- 约定式配置,即可接入
|
|
20
|
+
|
|
21
|
+
**组件组成:** 需配合使用 `uv-drop-down`(菜单项,含子组件 `uv-drop-down-item`)、`uv-drop-down-popup`(筛选弹层)。兼容 app-nvue,已在多端测试。
|
|
22
|
+
|
|
23
|
+
> 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
24
|
+
|
|
25
|
+
## 平台兼容性 {#platform}
|
|
26
|
+
|
|
27
|
+
| App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
|
|
28
|
+
| --- | --- | --- | --- | --- | --- |
|
|
29
|
+
| √ | √ | √ | √ | √ | √ |
|
|
30
|
+
|
|
31
|
+
**组件名:** `uv-drop-down`、`uv-drop-down-item`、`uv-drop-down-popup`
|
|
32
|
+
|
|
33
|
+
## 代码演示 {#examples}
|
|
34
|
+
|
|
35
|
+
### 基本用法 {#basic}
|
|
36
|
+
|
|
37
|
+
仅提供菜单项和弹层结构,弹层内容需自行定义。
|
|
38
|
+
|
|
39
|
+
**uv-drop-down:**
|
|
40
|
+
- `sign`:唯一标识,多组件时需不同,内部用 `uni.$on` 监听
|
|
41
|
+
- `defaultValue`:默认值数组,如 `[0,'0','all']`,value 在其中表示未选中
|
|
42
|
+
|
|
43
|
+
**uv-drop-down-item:**
|
|
44
|
+
- `name`:字段标识,逻辑中会用到
|
|
45
|
+
- `label`:展示文本
|
|
46
|
+
- `value`:选项值,不在 defaultValue 中即为选中
|
|
47
|
+
- `type`:`1` 无筛选项(选中/未选中),`2` 有多个筛选项
|
|
48
|
+
|
|
49
|
+
```vue
|
|
50
|
+
<template>
|
|
51
|
+
<view style="height: 1000px;">
|
|
52
|
+
<uv-drop-down
|
|
53
|
+
ref="dropDown"
|
|
54
|
+
sign="dropDown_1"
|
|
55
|
+
:defaultValue="[0,'0','all']"
|
|
56
|
+
>
|
|
57
|
+
<uv-drop-down-item name="order" type="2" label="综合排序" value="all" />
|
|
58
|
+
<uv-drop-down-item name="type" type="2" label="文档格式" value="0" />
|
|
59
|
+
<uv-drop-down-item name="vip_type" type="1" label="VIP文档" :value="0" />
|
|
60
|
+
</uv-drop-down>
|
|
61
|
+
<uv-drop-down-popup sign="dropDown_1" @popupChange="change">
|
|
62
|
+
<view style="width: 750rpx;height: 300rpx;background-color: #fff;"></view>
|
|
63
|
+
</uv-drop-down-popup>
|
|
64
|
+
</view>
|
|
65
|
+
</template>
|
|
66
|
+
<script>
|
|
67
|
+
export default {
|
|
68
|
+
onPageScroll() {
|
|
69
|
+
this.$refs.dropDown.init()
|
|
70
|
+
},
|
|
71
|
+
methods: {
|
|
72
|
+
change(e) {
|
|
73
|
+
console.log('弹窗打开状态:', e)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
</script>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 完整示例(内置筛选项) {#full}
|
|
81
|
+
|
|
82
|
+
使用内置筛选项时,按约定格式传入 `current-drop-item` 与 `@clickItem`,示例结构如下。
|
|
83
|
+
|
|
84
|
+
```vue
|
|
85
|
+
<template>
|
|
86
|
+
<view>
|
|
87
|
+
<uv-drop-down
|
|
88
|
+
ref="dropDown"
|
|
89
|
+
sign="dropDown_1"
|
|
90
|
+
text-active-color="#3c9cff"
|
|
91
|
+
:extra-icon="{name:'arrow-down-fill',color:'#666',size:'26rpx'}"
|
|
92
|
+
:extra-active-icon="{name:'arrow-up-fill',color:'#3c9cff',size:'26rpx'}"
|
|
93
|
+
:defaultValue="defaultValue"
|
|
94
|
+
:custom-style="{padding: '0 30rpx'}"
|
|
95
|
+
@click="selectMenu"
|
|
96
|
+
>
|
|
97
|
+
<uv-drop-down-item name="order" type="2" :label="dropItem('order').label" :value="dropItem('order').value" />
|
|
98
|
+
<uv-drop-down-item name="type" type="2" :label="dropItem('type').label" :value="dropItem('type').value" />
|
|
99
|
+
<uv-drop-down-item name="vip_type" type="1" label="VIP文档" :value="dropItem('vip_type').value" />
|
|
100
|
+
</uv-drop-down>
|
|
101
|
+
<uv-drop-down-popup
|
|
102
|
+
sign="dropDown_1"
|
|
103
|
+
:click-overlay-on-close="true"
|
|
104
|
+
:currentDropItem="currentDropItem"
|
|
105
|
+
@clickItem="clickItem"
|
|
106
|
+
@popupChange="change"
|
|
107
|
+
/>
|
|
108
|
+
</view>
|
|
109
|
+
</template>
|
|
110
|
+
<script>
|
|
111
|
+
export default {
|
|
112
|
+
onPageScroll() {
|
|
113
|
+
this.$refs.dropDown.init()
|
|
114
|
+
},
|
|
115
|
+
computed: {
|
|
116
|
+
dropItem(name) {
|
|
117
|
+
return (name) => {
|
|
118
|
+
const result = {}
|
|
119
|
+
const find = this.result.find(item => item.name === name)
|
|
120
|
+
if (find) {
|
|
121
|
+
result.label = find.label
|
|
122
|
+
result.value = find.value
|
|
123
|
+
} else {
|
|
124
|
+
result.label = this[name].label
|
|
125
|
+
result.value = this[name].value
|
|
126
|
+
}
|
|
127
|
+
return result
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
currentDropItem() {
|
|
131
|
+
return this[this.activeName]
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
data() {
|
|
135
|
+
return {
|
|
136
|
+
defaultValue: [0, 'all', '0'],
|
|
137
|
+
result: [{ name: 'order', label: '最新发布', value: 'new' }],
|
|
138
|
+
activeName: 'order',
|
|
139
|
+
order: {
|
|
140
|
+
label: '综合排序',
|
|
141
|
+
value: 'all',
|
|
142
|
+
activeIndex: 0,
|
|
143
|
+
color: '#333',
|
|
144
|
+
activeColor: '#2878ff',
|
|
145
|
+
child: [
|
|
146
|
+
{ label: '综合排序', value: 'all' },
|
|
147
|
+
{ label: '最新发布', value: 'new' },
|
|
148
|
+
{ label: '低价优先', value: 'money' }
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
type: {
|
|
152
|
+
label: '文档格式',
|
|
153
|
+
value: 'all',
|
|
154
|
+
activeIndex: 0,
|
|
155
|
+
color: '#333',
|
|
156
|
+
activeColor: '#2878ff',
|
|
157
|
+
child: [
|
|
158
|
+
{ label: '全部', value: 'all' },
|
|
159
|
+
{ label: 'PDF', value: 'pdf' },
|
|
160
|
+
{ label: 'WROD', value: 'word' },
|
|
161
|
+
{ label: 'PPT', value: 'ppt' }
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
vip_type: {
|
|
165
|
+
label: 'VIP文档',
|
|
166
|
+
value: 0,
|
|
167
|
+
activeIndex: 0
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
methods: {
|
|
172
|
+
change(e) {
|
|
173
|
+
console.log('弹窗打开状态:', e)
|
|
174
|
+
},
|
|
175
|
+
selectMenu(e) {
|
|
176
|
+
const { name, active, type } = e
|
|
177
|
+
this.activeName = name
|
|
178
|
+
if (type == 1) {
|
|
179
|
+
this.clickItem({ name: 'vip_type', label: 'VIP文档', value: e.active ? 1 : 0 })
|
|
180
|
+
} else {
|
|
181
|
+
const find = this.result.find(item => item.name == this.activeName)
|
|
182
|
+
if (find) {
|
|
183
|
+
const findIndex = this[this.activeName].child.findIndex(
|
|
184
|
+
item => item.label == find.label && item.value == find.value
|
|
185
|
+
)
|
|
186
|
+
this[this.activeName].activeIndex = findIndex
|
|
187
|
+
} else {
|
|
188
|
+
this[this.activeName].activeIndex = 0
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
clickItem(e) {
|
|
193
|
+
let { label, value } = e
|
|
194
|
+
const findIndex = this.result.findIndex(item => item.name == this.activeName)
|
|
195
|
+
if (this.defaultValue.indexOf(value) > -1 && this[this.activeName].label) {
|
|
196
|
+
label = this[this.activeName].label
|
|
197
|
+
}
|
|
198
|
+
if (findIndex > -1) {
|
|
199
|
+
this.$set(this.result, findIndex, { name: this.activeName, label, value })
|
|
200
|
+
} else {
|
|
201
|
+
this.result.push({ name: this.activeName, label, value })
|
|
202
|
+
}
|
|
203
|
+
this.result = this.result.filter(item => this.defaultValue.indexOf(item.value) == -1)
|
|
204
|
+
uni.showModal({ content: `筛选的值:${JSON.stringify(this.result)}` })
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
</script>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**current-drop-item 约定格式:**
|
|
212
|
+
|
|
213
|
+
- `label`:菜单展示文本
|
|
214
|
+
- `value`:当前值
|
|
215
|
+
- `activeIndex`:选中 child 索引
|
|
216
|
+
- `color` / `activeColor`:文本颜色
|
|
217
|
+
- `child`(type=2 时):筛选项数组 `[{ label, value }]`
|
|
218
|
+
|
|
219
|
+
## API {#api}
|
|
220
|
+
|
|
221
|
+
### DropDown Props {#props}
|
|
222
|
+
|
|
223
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
224
|
+
| --- | --- | --- | --- |
|
|
225
|
+
| sign | String \| Number | UVDROPDOWN | 组件唯一标识,多组件时需不同 |
|
|
226
|
+
| defaultValue | Array | [0,'0','all'] | 默认值,value 在其中表示未选中 |
|
|
227
|
+
| isSticky | Boolean | true | 是否吸顶 |
|
|
228
|
+
| textSize | String | 30rpx | 每项字体大小 |
|
|
229
|
+
| textColor | String | #333 | 每项文本颜色 |
|
|
230
|
+
| textActiveSize | String | 30rpx | 选中项字体大小 |
|
|
231
|
+
| textActiveColor | String | #3c9cff | 选中项文本颜色 |
|
|
232
|
+
| extraIcon | Object | {name:'arrow-down', size:'30rpx', color:'#333'} | 右侧图标,参考 uv-icon |
|
|
233
|
+
| extraActiveIcon | Object | {name:'arrow-up', size:'30rpx', color:'#3c9cff'} | 选中时右侧图标 |
|
|
234
|
+
| customStyle | Object | - | 自定义样式 |
|
|
235
|
+
|
|
236
|
+
### DropDownItem Props {#item-props}
|
|
237
|
+
|
|
238
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
239
|
+
| --- | --- | --- | --- |
|
|
240
|
+
| name | String \| Number | - | 字段标识 |
|
|
241
|
+
| type | String \| Number | - | `1` 无筛选项,`2` 有多个选项 |
|
|
242
|
+
| label | String | - | 展示文本 |
|
|
243
|
+
| value | String \| Number \| null | - | 选项值 |
|
|
244
|
+
| isDrop | Boolean | false | 该项是否打开,可用于重置 |
|
|
245
|
+
|
|
246
|
+
### DropDownPopup Props {#popup-props}
|
|
247
|
+
|
|
248
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
249
|
+
| --- | --- | --- | --- |
|
|
250
|
+
| sign | String \| Number | UVDROPDOWN | 唯一标识,需与 DropDown 一致 |
|
|
251
|
+
| zIndex | String \| Number | 999 | 弹层层级 |
|
|
252
|
+
| opacity | String \| Number | 0.5 | 遮罩透明度 |
|
|
253
|
+
| clickOverlayOnClose | Boolean | true | 点击遮罩是否关闭 |
|
|
254
|
+
| currentDropItem | Object | - | 当前筛选项对象(内置筛选用) |
|
|
255
|
+
| keyName | String | label | 筛选项展示字段名 |
|
|
256
|
+
|
|
257
|
+
### DropDown Events {#dropdown-events}
|
|
258
|
+
|
|
259
|
+
| 事件名 | 说明 | 返回 |
|
|
260
|
+
| --- | --- | --- |
|
|
261
|
+
| @selectMenu / @click | 点击每项菜单 | `{ name, active, type }`,active 为是否打开该项 |
|
|
262
|
+
|
|
263
|
+
### DropDownPopup Events {#popup-events}
|
|
264
|
+
|
|
265
|
+
| 事件名 | 说明 | 返回 |
|
|
266
|
+
| --- | --- | --- |
|
|
267
|
+
| @clickItem | 点击筛选项 | `{ label, value }` |
|
|
268
|
+
| @popupChange | 弹窗打开/关闭 | `{ show }`,true 或 false |
|
|
269
|
+
|
|
270
|
+
### DropDown Methods {#dropdown-methods}
|
|
271
|
+
|
|
272
|
+
| 方法名 | 说明 |
|
|
273
|
+
| --- | --- |
|
|
274
|
+
| init | 初始化弹窗位置,页面滚动时调用以更新位置 |
|
|
275
|
+
|
|
276
|
+
### DropDownPopup Methods {#popup-methods}
|
|
277
|
+
|
|
278
|
+
| 方法名 | 说明 |
|
|
279
|
+
| --- | --- |
|
|
280
|
+
| open | 打开弹窗 |
|
|
281
|
+
| close | 关闭弹窗 |
|
|
282
|
+
|
|
283
|
+
### DropDownPopup Slots {#popup-slots}
|
|
284
|
+
|
|
285
|
+
| 插槽名 | 说明 |
|
|
286
|
+
| --- | --- |
|
|
287
|
+
| default | 自定义弹层内容与逻辑 |
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: 数据
|
|
3
|
+
category: Components
|
|
4
|
+
title: Empty
|
|
5
|
+
subtitle: 内容为空
|
|
6
|
+
description: 空状态提示组件,内置多种场景图标与文案配置,支持自定义图片与底部插槽扩展。
|
|
7
|
+
demo:
|
|
8
|
+
cols: 2
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 何时使用 {#when-to-use}
|
|
12
|
+
|
|
13
|
+
用于内容加载但第一页数据为空的场景,向用户展示“没有内容”的提示。内置多种场景图标,可直接使用。
|
|
14
|
+
|
|
15
|
+
> 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
16
|
+
|
|
17
|
+
## 平台兼容性 {#platform}
|
|
18
|
+
|
|
19
|
+
| App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
|
|
20
|
+
| --- | --- | --- | --- | --- | --- |
|
|
21
|
+
| √ | √ | √ | √ | √ | √ |
|
|
22
|
+
|
|
23
|
+
**组件名:** `uv-empty`
|
|
24
|
+
|
|
25
|
+
## 代码演示 {#examples}
|
|
26
|
+
|
|
27
|
+
### 基本使用 {#basic}
|
|
28
|
+
|
|
29
|
+
通过 `text` 配置提示文字,通过 `mode`(默认 `data`)配置内置图标;也可用 `icon` 指定图片(建议绝对路径,支持 base64)。
|
|
30
|
+
|
|
31
|
+
```vue
|
|
32
|
+
<uv-empty mode="car" icon="https://cdn.uviewui.com/uview/empty/car.png"></uv-empty>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 内置图标 {#icons}
|
|
36
|
+
|
|
37
|
+
| 名称 | 说明 |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| car | 购物车为空 |
|
|
40
|
+
| page | 页面不存在 |
|
|
41
|
+
| search | 没有搜索结果 |
|
|
42
|
+
| address | 没有收货地址 |
|
|
43
|
+
| wifi-off | 没有 WiFi |
|
|
44
|
+
| order | 订单为空 |
|
|
45
|
+
| coupon | 没有优惠券 |
|
|
46
|
+
| favor | 无收藏 |
|
|
47
|
+
| permission | 无权限 |
|
|
48
|
+
| history | 无历史记录 |
|
|
49
|
+
| news | 无新闻列表 |
|
|
50
|
+
| message | 消息列表为空 |
|
|
51
|
+
| list | 列表为空(通用) |
|
|
52
|
+
| data | 数据为空(默认,通用) |
|
|
53
|
+
|
|
54
|
+
## API {#api}
|
|
55
|
+
|
|
56
|
+
### Empty Props {#props}
|
|
57
|
+
|
|
58
|
+
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|
|
59
|
+
| --- | --- | --- | --- | --- |
|
|
60
|
+
| icon | 内置图标名称或图片路径(建议绝对路径,支持 base64) | String | - | - |
|
|
61
|
+
| text | 文字提示 | String | - | - |
|
|
62
|
+
| textColor | 文字颜色 | String | #c0c4cc | - |
|
|
63
|
+
| textSize | 文字大小 | String \| Number | 14 | - |
|
|
64
|
+
| iconColor | 图标颜色 | String | #c0c4cc | - |
|
|
65
|
+
| iconSize | 图标大小 | String \| Number | 90 | - |
|
|
66
|
+
| mode | 内置图标类型 | String | data | - |
|
|
67
|
+
| width | 图标宽度(px) | String \| Number | 160 | - |
|
|
68
|
+
| height | 图标高度(px) | String \| Number | 160 | - |
|
|
69
|
+
| show | 是否显示组件 | Boolean | true | true \| false |
|
|
70
|
+
| marginTop | 与上一个元素间距(px) | String \| Number | 0 | - |
|
|
71
|
+
|
|
72
|
+
### Empty Slots {#slots}
|
|
73
|
+
|
|
74
|
+
| 名称 | 说明 |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| default | 组件底部插槽内容 |
|