mult-cascader 1.0.2 → 1.0.4
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 +228 -0
- package/package.json +6 -2
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Vue2 MultCascader
|
|
2
|
+
|
|
3
|
+
Vue2 多级选择器组件,支持单选和多选模式。
|
|
4
|
+
|
|
5
|
+
此组件依赖element-ui,只是el-drawer,el-tabs,el-tab-pane,el-checkbox
|
|
6
|
+
你可以按需引入,不必像下列例子那样引入所有的element-ui
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 安装
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
依赖element-ui
|
|
14
|
+
npm install element-ui
|
|
15
|
+
核心库
|
|
16
|
+
npm install mult-cascader
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 使用
|
|
20
|
+
|
|
21
|
+
在vue2入口文件中引入这些
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
import MultCascader from 'mult-cascader'
|
|
25
|
+
import 'mult-cascader/mult-cascader.css'
|
|
26
|
+
import ElementUI from 'element-ui'
|
|
27
|
+
import 'element-ui/lib/theme-chalk/index.css'
|
|
28
|
+
Vue.use(ElementUI)
|
|
29
|
+
Vue.use(MultCascader)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 组件使用
|
|
33
|
+
|
|
34
|
+
<template>
|
|
35
|
+
<div id="app">
|
|
36
|
+
<MultCascader
|
|
37
|
+
ref="cascaderRef"
|
|
38
|
+
:drawer="showMultCascader"
|
|
39
|
+
:dataSourse="treeData"
|
|
40
|
+
:names="tabNames"
|
|
41
|
+
:labels="tabLabels"
|
|
42
|
+
mode="multiple"
|
|
43
|
+
:color="themeColor"
|
|
44
|
+
:options="customOptions"
|
|
45
|
+
@close="handleClose"
|
|
46
|
+
|
|
47
|
+
<template>
|
|
48
|
+
<div id="app">
|
|
49
|
+
<MultCascader
|
|
50
|
+
ref="cascaderRef"
|
|
51
|
+
:drawer="showMultCascader"
|
|
52
|
+
:dataSourse="treeData"
|
|
53
|
+
:names="tabNames"
|
|
54
|
+
:labels="tabLabels"
|
|
55
|
+
mode="multiple"
|
|
56
|
+
:color="themeColor"
|
|
57
|
+
:options="customOptions"
|
|
58
|
+
@close="handleClose"
|
|
59
|
+
|
|
60
|
+
/>
|
|
61
|
+
<button @click="showMultCascader = true">打开多选选择器</button>
|
|
62
|
+
<div>已选择(最后一级个数):{{ checkedIds.length }}</div>
|
|
63
|
+
<MultCascader
|
|
64
|
+
ref="cascaderRef"
|
|
65
|
+
:drawer="showSingleCascader"
|
|
66
|
+
:dataSourse="treeData"
|
|
67
|
+
:names="tabNames"
|
|
68
|
+
:labels="tabLabels"
|
|
69
|
+
mode="single"
|
|
70
|
+
:color="themeColor"
|
|
71
|
+
:options="customOptions"
|
|
72
|
+
@close="handleClose2"
|
|
73
|
+
@finish="handleFinish"
|
|
74
|
+
@change="handleChange"
|
|
75
|
+
/>
|
|
76
|
+
<button @click="showSingleCascader = true">打开单选选择器</button>
|
|
77
|
+
</div>
|
|
78
|
+
</template>
|
|
79
|
+
|
|
80
|
+
<script>
|
|
81
|
+
|
|
82
|
+
export default {
|
|
83
|
+
name: 'App',
|
|
84
|
+
data() {
|
|
85
|
+
return {
|
|
86
|
+
// 控制选择器显隐
|
|
87
|
+
showMultCascader: false,
|
|
88
|
+
showSingleCascader: false,
|
|
89
|
+
|
|
90
|
+
// 主题色(自定义)
|
|
91
|
+
themeColor: '#409EFF',
|
|
92
|
+
// 自定义字段映射(适配你的数据源字段名)
|
|
93
|
+
customOptions: {
|
|
94
|
+
id: 'id', // 数据源中ID字段名
|
|
95
|
+
name: 'label', // 数据源中名称字段名
|
|
96
|
+
children: 'children' // 数据源中子节点字段名
|
|
97
|
+
},
|
|
98
|
+
// 选项卡标识(需和层级数一致)
|
|
99
|
+
tabNames: ['level1', 'level2', 'level3'],
|
|
100
|
+
// 选项卡显示标签(需和层级数一致)
|
|
101
|
+
tabLabels: ['一级分类', '二级分类', '三级分类'],
|
|
102
|
+
// 核心:层级数据源(树形结构)
|
|
103
|
+
treeData: [
|
|
104
|
+
{
|
|
105
|
+
id: 1,
|
|
106
|
+
label: '电子产品',
|
|
107
|
+
children: [
|
|
108
|
+
{
|
|
109
|
+
id: 11,
|
|
110
|
+
label: '手机',
|
|
111
|
+
children: [
|
|
112
|
+
{ id: 111, label: '苹果手机' },
|
|
113
|
+
{ id: 112, label: '华为手机' }
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 12,
|
|
118
|
+
label: '电脑',
|
|
119
|
+
children: [
|
|
120
|
+
{ id: 121, label: '笔记本' },
|
|
121
|
+
{ id: 122, label: '台式机' }
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: 2,
|
|
128
|
+
label: '生活用品',
|
|
129
|
+
children: [
|
|
130
|
+
{
|
|
131
|
+
id: 21,
|
|
132
|
+
label: '洗漱用品',
|
|
133
|
+
children: [
|
|
134
|
+
{ id: 211, label: '牙膏' },
|
|
135
|
+
{ id: 212, label: '牙刷' }
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
// 选中结果存储
|
|
142
|
+
checkedIds: [],
|
|
143
|
+
selectedResult: null
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
methods: {
|
|
148
|
+
// 选择器关闭时触发(返回最终选中的ID列表)
|
|
149
|
+
handleClose(ids) {
|
|
150
|
+
this.showMultCascader = false
|
|
151
|
+
this.checkedIds = ids
|
|
152
|
+
console.log('选择器关闭,最终选中ID:', ids)
|
|
153
|
+
},
|
|
154
|
+
handleClose2() {
|
|
155
|
+
this.showSingleCascader = false
|
|
156
|
+
|
|
157
|
+
},
|
|
158
|
+
// 单选模式下选完最后一级触发(返回完整选中数据)
|
|
159
|
+
handleFinish(res) {
|
|
160
|
+
this.showSingleCascader = false
|
|
161
|
+
this.selectedResult = res
|
|
162
|
+
console.log('单选完成,选中数据:', res)
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
// 单选 选中项变化时触发(实时返回选中的层级数据)
|
|
166
|
+
handleChange(selectedLi) {
|
|
167
|
+
console.log('选中项变化,当前层级数据:', selectedLi)
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
</script>
|
|
172
|
+
|
|
173
|
+
| 参数 | 类型 | 说明 | 默认值 |
|
|
174
|
+
| ----------- |:------- | -------------------------- | ------------------------------------------------ |
|
|
175
|
+
| drawer | Boolean | 控制抽屉是否显示 | false |
|
|
176
|
+
| data-sourse | Array | 数据源 | [] |
|
|
177
|
+
| names | Array | 选项卡名称 | [] |
|
|
178
|
+
| labels | Array | 选项卡显示文本 | [] |
|
|
179
|
+
| mode | String | 选择模式:'single' 或 'multiple' | 'single' |
|
|
180
|
+
| color | String | 主题颜色 | '#67C23A' |
|
|
181
|
+
| options | Object | 字段映射配置 | { id: 'id', name: 'name', children: 'children' } |
|
|
182
|
+
|
|
183
|
+
### Events
|
|
184
|
+
|
|
185
|
+
| 事件名 | 说明 | 回调参数 | 模式 |
|
|
186
|
+
| ------ | ----------- | -------- | --------------- |
|
|
187
|
+
| close | 关闭选择器时触发 | 选中的ID数组 | single/multiple |
|
|
188
|
+
| change | 选择项变化时触发 | 选中的项数组 | single |
|
|
189
|
+
| finish | 选完最后一级时触发关闭 | 选中的值和项数组 | single |
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
注意异步打开此组件时,需要先有数据源,否则会报错
|
|
193
|
+
推荐在组件data中再定义一个变量判断数据源是否准备好然后v-if
|
|
194
|
+
<MultCascader
|
|
195
|
+
v-if="ready"
|
|
196
|
+
ref="cascaderRef"
|
|
197
|
+
:drawer="showSingleCascader"
|
|
198
|
+
:dataSourse="treeData"
|
|
199
|
+
:names="tabNames"
|
|
200
|
+
:labels="tabLabels"
|
|
201
|
+
mode="single"
|
|
202
|
+
:color="themeColor"
|
|
203
|
+
:options="customOptions"
|
|
204
|
+
@close="handleClose2"
|
|
205
|
+
@finish="handleFinish"
|
|
206
|
+
@change="handleChange"
|
|
207
|
+
/>
|
|
208
|
+
|
|
209
|
+
比如:
|
|
210
|
+
data(){
|
|
211
|
+
return {
|
|
212
|
+
ready:false
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
//开始异步请求
|
|
217
|
+
async openCascader() {
|
|
218
|
+
const res=this.$http.get('...你的后端url')
|
|
219
|
+
this.treeData=res.data
|
|
220
|
+
this.ready=true
|
|
221
|
+
// 打开选择器
|
|
222
|
+
this.showSingleCascader = true
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## License
|
|
227
|
+
|
|
228
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mult-cascader",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"main": "mult-cascader.common.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
7
7
|
},
|
|
8
|
-
"keywords": [
|
|
8
|
+
"keywords": [
|
|
9
|
+
"vue",
|
|
10
|
+
"cascader",
|
|
11
|
+
"multiple"
|
|
12
|
+
],
|
|
9
13
|
"author": "wsq667",
|
|
10
14
|
"license": "ISC",
|
|
11
15
|
"description": "",
|