Skip to content

Commit 8de67af

Browse files
Merge pull request #7 from osindex/develop
select组件增加 label方法
2 parents ddde62b + c58756b commit 8de67af

File tree

3 files changed

+56
-18
lines changed

3 files changed

+56
-18
lines changed

docs/components.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,21 @@ Select::make()
400400
Select::make()->filterable()->remote($remoteUrl)
401401
Select::make()->filterable()->remote($remoteUrl)->extUrlParams(['type'=>'A']) // 远程搜索带参数
402402
Select::make()->filterable()->remote($remoteUrl)->depend(['keyA','keyB.0.key']) // 远程搜索带表单值
403+
// 带分页加载的数据反馈接受
404+
// {data:{data:[],total:x}} // 优先接受此框架一般返回 或
405+
// {data:[],meta:{total:x}} // laravel资源返回
403406
Select::make()->filterable()->remote($remoteUrl)->paginate($per_page = 10) // 远程搜索带分页加载
407+
// 远程搜索占位显示
408+
$label = [
409+
'key'=>'model', // 模型中支持的方法
410+
'value' =>
411+
[
412+
'value'=>'id', //同样支持复合键位
413+
'label'=>['title','label']
414+
]
415+
]
416+
//注意 $form 一般通过use 传递
417+
Select::make()->filterable()->remote($remoteUrl)->label($form, $label)
404418
```
405419

406420
支持

resources/js/components/widgets/Form/Select.vue

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
</div>
4949
</el-option>
5050
<el-option v-if="attrs.paginate && loadMore && options.length" :value="undefined">
51-
<div @click.stop='paginateData($event)'>
51+
<div @click.stop='remoteMethod(null,"next")'>
5252
<i class="el-icon-loading"></i>
5353
<span>加载更多</span>
5454
</div>
@@ -85,6 +85,9 @@ export default {
8585
return _.pick(this.form_data, this.attrs.depend);
8686
}
8787
},
88+
mounted() {
89+
this.setLable()
90+
},
8891
methods: {
8992
onChange(value) {
9093
let resValue = value
@@ -96,31 +99,39 @@ export default {
9699
}
97100
this.$emit("change", resValue);
98101
},
99-
remoteMethod(query) {
100-
this.query = query
101-
this.meta.page = 1
102-
this.$http
103-
.get(this.attrs.remoteUrl, { params: { ...this.meta, query: query, depend: this.depend, extUrlParams: this.extUrlParams } })
104-
.then(res => {
105-
this.options = res.data;
106-
this.meta.page++
107-
this.loadMore = true
108-
});
109-
},
110-
paginateData(event) {
102+
remoteMethod(query,next = null) {
103+
if (!next) {
104+
this.options = []
105+
this.query = query
106+
this.meta.page = 1
107+
}
111108
this.$http
112109
.get(this.attrs.remoteUrl, { params: { ...this.meta, query: this.query, depend: this.depend, extUrlParams: this.extUrlParams } })
113110
.then(res => {
114-
if (res.data.length) {
115-
this.options.push(...res.data)
111+
const total = res.data.total || res.meta.total
112+
const data = res.data.data || res.data
113+
if (data.length) {
114+
this.options.push(...data)
116115
}
117-
if(this.meta.page < res.meta.to){
118-
this.meta.page = res.meta.to
116+
if(this.options.length < total){
117+
this.meta.page++
119118
this.loadMore = true
120119
}else{
121120
this.loadMore = false
122121
}
123-
})
122+
});
123+
},
124+
setLable(){
125+
const label = this.attrs.label
126+
if (label && this.form_data[label.key]) {
127+
const options = label.value || {value: "value",label: "label"}
128+
this.options = [_.transform(options, (result, value, key) => {
129+
const tempValue = _.values(_.pick(this.form_data[label.key], value)).join('-')
130+
// 数字校验
131+
result[key] = (parseFloat(tempValue).toString() == "NaN")?tempValue:parseFloat(tempValue)
132+
}, {})]
133+
this.loadMore = false
134+
}
124135
}
125136
}
126137
};

src/Components/Attrs/Depend.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ trait Depend
77
protected $depend;
88
protected $paginate = 0;
99
protected $extUrlParams;
10+
protected $label;
1011

1112
/**
1213
* @param mixed $depend
@@ -36,4 +37,16 @@ public function extUrlParams($extUrlParams)
3637
$this->extUrlParams = $extUrlParams;
3738
return $this;
3839
}
40+
/**
41+
* 远程加载时的默认显示名称,因远程时一般仅有value
42+
* @param object form 所属表单
43+
* @param array $label ['key'=>'model','value'=>['value'=>'id','label'=>['title','label']]] // 所属关联模型 用于从data取值
44+
* @return $this
45+
*/
46+
public function label(&$form, $label)
47+
{
48+
$this->label = $label;
49+
$form->item($label['key'])->vif('label' . mt_rand(10000, 99999), false);
50+
return $this;
51+
}
3952
}

0 commit comments

Comments
 (0)