Skip to content

Commit a37d3b8

Browse files
committed
修复一对多
修复上传组件一对多 修复级联选择器
1 parent d02b3be commit a37d3b8

File tree

10 files changed

+250
-97
lines changed

10 files changed

+250
-97
lines changed

docs/components.md

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,50 @@ Icon::make()
134134
### InputNumber 计数器
135135
### Select 选择器
136136
### Cascader 级联选择器
137+
138+
当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择
139+
140+
#### 基础用法
141+
142+
```php
143+
<?php
144+
145+
namespace App\Models;
146+
147+
use Illuminate\Database\Eloquent\Model;
148+
use SmallRuralDog\Admin\Traits\ModelTree;
149+
150+
class GoodsClass extends Model
151+
{
152+
use ModelTree;
153+
154+
public function children()
155+
{
156+
return $this->hasMany(get_class($this), 'parent_id')->orderBy('order');
157+
}
158+
}
159+
```
160+
161+
162+
163+
```php
164+
$form->item("goods_class_id", "产品分类")->displayComponent(function () {
165+
$goods_class = new GoodsClass();
166+
$allNodes = $goods_class->toTree();
167+
return Cascader::make()->options($allNodes)->value("id")->label("name")->expandTrigger("hover");
168+
}),
169+
```
170+
171+
#### 属性
172+
173+
显示为面板模式
174+
175+
```php
176+
Cascader::make()->panel(true)
177+
```
178+
179+
180+
137181
### Switch 开关
138182
### Slider 滑块
139183
### TimePicker 时间选择器
@@ -161,7 +205,9 @@ $form->item('avatar', '头像')->displayComponent(function(){
161205
#### 支持多文件
162206
支持多个文件上传,数据格式为数组
163207
```php
164-
Upload::make()->multiple()
208+
Upload::make()->multiple();
209+
//如果是一对多情况下,并且是对象数组,需要指定文件路径的字段
210+
Upload::make()->multiple(true,"keyName");
165211
```
166212
#### 上传附加数据
167213
```php
@@ -207,7 +253,7 @@ $form->item('avatar', '头像')->displayComponent(function(){
207253
```php
208254
Upload::make()->width(150)
209255
Upload::make()->height(120)
210-
```
256+
```
211257
### Rate 评分
212258
### ColorPicker 颜色选择器
213259
### Transfer 穿梭框

public/app.js

Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,11 +2040,11 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
20402040
attrs: Object,
20412041
value: {
20422042
"default": null
2043-
}
2043+
},
2044+
form_data: Object
20442045
},
20452046
data: function data() {
20462047
return {
2047-
vm: 0,
20482048
props: {},
20492049
options: []
20502050
};
@@ -2533,7 +2533,7 @@ __webpack_require__.r(__webpack_exports__);
25332533
//
25342534
//
25352535
/* harmony default export */ __webpack_exports__["default"] = ({
2536-
props: ['attrs', 'value'],
2536+
props: ['attrs', 'value', 'form_data'],
25372537
data: function data() {
25382538
return {};
25392539
},
@@ -3246,6 +3246,15 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
32463246
//
32473247
//
32483248
//
3249+
//
3250+
//
3251+
//
3252+
//
3253+
//
3254+
//
3255+
//
3256+
//
3257+
//
32493258

32503259
/* harmony default export */ __webpack_exports__["default"] = ({
32513260
props: ["attrs", "value", "form_data"],
@@ -3270,7 +3279,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
32703279
if (this._.isArray(this.value)) {
32713280
var t_value = this._.clone(this.value);
32723281

3273-
t_value.splice(index, 1);
3282+
t_value[index][this.attrs.remove_flag_name] = 1;
32743283
this.onChange(t_value);
32753284
} else {
32763285
this.onChange(null);
@@ -3284,12 +3293,38 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
32843293
var t_value = this._.clone(this.value);
32853294

32863295
t_value = this._.isArray(t_value) ? t_value : [];
3287-
t_value.push(response.data.path);
3296+
t_value.push(this.getObject(response.data.path, 0));
32883297
this.onChange(t_value);
32893298
}
32903299
},
32913300
onExceed: function onExceed() {
32923301
this.$Message.error("超出上传数量");
3302+
},
3303+
getObject: function getObject(path, id) {
3304+
var keyName = this.attrs.keyName;
3305+
var valueName = this.attrs.valueName;
3306+
var remove_flag_name = this.attrs.remove_flag_name;
3307+
var obj = {};
3308+
3309+
if (keyName != null && valueName != null) {
3310+
obj[keyName] = id;
3311+
obj[valueName] = path;
3312+
obj["name"] = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileName"])(path);
3313+
obj[remove_flag_name] = 0;
3314+
return obj;
3315+
} else {
3316+
return path;
3317+
}
3318+
},
3319+
getObjectPath: function getObjectPath(item) {
3320+
var keyName = this.attrs.keyName;
3321+
var valueName = this.attrs.valueName;
3322+
3323+
if (keyName != null && valueName != null) {
3324+
return item[valueName];
3325+
}
3326+
3327+
return item;
32933328
}
32943329
},
32953330
watch: {},
@@ -3298,19 +3333,33 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
32983333
var _this = this;
32993334

33003335
if (this._.isArray(this.value)) {
3301-
return this.value.map(function (item) {
3336+
return this.value.filter(function (item) {
3337+
if (item[_this.attrs.remove_flag_name]) {
3338+
return item[_this.attrs.remove_flag_name] == 0;
3339+
}
3340+
3341+
return true;
3342+
}).map(function (item) {
3343+
var itemPath = _this.getObjectPath(item);
3344+
33023345
return {
3303-
name: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileName"])(item),
3304-
path: item,
3305-
url: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileUrl"])(_this.attrs.host, item)
3346+
name: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileName"])(itemPath),
3347+
path: itemPath,
3348+
url: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileUrl"])(_this.attrs.host, itemPath)
33063349
};
33073350
});
33083351
} else {
33093352
if (!this.value) return [];
3353+
var itemPath = this.value;
3354+
3355+
if (this._.isObject()) {
3356+
itemPath = this.getObjectPath(this.value);
3357+
}
3358+
33103359
return [{
3311-
name: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileName"])(this.value),
3312-
path: this.value,
3313-
url: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileUrl"])(this.attrs.host, this.value)
3360+
name: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileName"])(itemPath),
3361+
path: itemPath,
3362+
url: Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getFileUrl"])(this.attrs.host, itemPath)
33143363
}];
33153364
}
33163365
},
@@ -28688,6 +28737,7 @@ var render = function() {
2868828737
class: _vm.attrs.className,
2868928738
style: _vm.attrs.style,
2869028739
attrs: {
28740+
value: _vm.value,
2869128741
size: _vm.attrs.size,
2869228742
placeholder: _vm.attrs.placeholder,
2869328743
disabled: _vm.attrs.disabled,
@@ -28701,19 +28751,13 @@ var render = function() {
2870128751
props: _vm.props,
2870228752
options: _vm.options
2870328753
},
28704-
on: { change: _vm.onChange },
28705-
model: {
28706-
value: _vm.vm,
28707-
callback: function($$v) {
28708-
_vm.vm = $$v
28709-
},
28710-
expression: "vm"
28711-
}
28754+
on: { change: _vm.onChange }
2871228755
})
2871328756
: _c("el-cascader", {
2871428757
class: _vm.attrs.className,
2871528758
style: _vm.attrs.style,
2871628759
attrs: {
28760+
value: _vm.value,
2871728761
size: _vm.attrs.size,
2871828762
placeholder: _vm.attrs.placeholder,
2871928763
disabled: _vm.attrs.disabled,
@@ -28727,14 +28771,7 @@ var render = function() {
2872728771
props: _vm.props,
2872828772
options: _vm.options
2872928773
},
28730-
on: { change: _vm.onChange },
28731-
model: {
28732-
value: _vm.vm,
28733-
callback: function($$v) {
28734-
_vm.vm = $$v
28735-
},
28736-
expression: "vm"
28737-
}
28774+
on: { change: _vm.onChange }
2873828775
})
2873928776
}
2874028777
var staticRenderFns = []

public/mix-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"/app.js": "/app.js?id=36a6a47ee23854bc15ef",
2+
"/app.js": "/app.js?id=581268bd1a7f4061f926",
33
"/manifest.js": "/manifest.js?id=d9708e48a6c10ccee4bb",
44
"/vendor.js": "/vendor.js?id=f4679ac178c0e413cb28"
55
}

resources/js/components/widgets/Cascader.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
v-if="attrs.panel"
44
:style="attrs.style"
55
:class="attrs.className"
6-
v-model="vm"
6+
:value="value"
77
:size="attrs.size"
88
:placeholder="attrs.placeholder"
99
:disabled="attrs.disabled"
@@ -22,7 +22,7 @@
2222
v-else
2323
:style="attrs.style"
2424
:class="attrs.className"
25-
v-model="vm"
25+
:value="value"
2626
:size="attrs.size"
2727
:placeholder="attrs.placeholder"
2828
:disabled="attrs.disabled"
@@ -44,11 +44,11 @@ export default {
4444
attrs: Object,
4545
value: {
4646
default: null
47-
}
47+
},
48+
form_data: Object
4849
},
4950
data() {
5051
return {
51-
vm: 0,
5252
props: {},
5353
options: []
5454
};
@@ -82,4 +82,4 @@ export default {
8282
}
8383
}
8484
};
85-
</script>
85+
</script>

resources/js/components/widgets/Input.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
</template>
3333
<script>
3434
export default {
35-
props: ['attrs', 'value'],
35+
props: ['attrs', 'value','form_data'],
3636
data() {
3737
return {};
3838
},

0 commit comments

Comments
 (0)